@nitra/cursor 12.8.9 → 12.10.0
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/.claude-template/settings.template.json +1 -23
- package/CHANGELOG.md +14 -1
- package/bin/n-cursor.js +21 -48
- package/docs/stryker.config.md +0 -2
- package/lib/docs/llm.md +16 -21
- package/lib/docs/omlx.md +20 -25
- package/lib/llm.mjs +25 -7
- package/lib/omlx.mjs +10 -3
- package/package.json +5 -5
- package/rules/abie/docs/index.md +0 -1
- package/rules/abie/docs/main.md +0 -2
- package/rules/abie/lib/docs/http-route.md +9 -12
- package/rules/abie/lib/http-route.mjs +3 -0
- package/rules/abie/main.mdc +0 -22
- package/rules/abie/policy/health_check_policy/health_check_policy.mdc +3 -1
- package/rules/abie/policy/health_check_policy/health_check_policy.rego +27 -0
- package/rules/adr/docs/index.md +0 -1
- package/rules/adr/docs/main.md +0 -2
- package/rules/adr/js/madr_format.mdc +13 -1
- package/rules/adr/main.mdc +0 -9
- package/rules/bun/docs/index.md +0 -1
- package/rules/bun/docs/main.md +0 -2
- package/rules/bun/main.mdc +1 -15
- package/rules/bun/policy/package_json/package_json.rego +12 -0
- package/rules/capacitor/docs/index.md +0 -1
- package/rules/capacitor/docs/main.md +0 -2
- package/rules/capacitor/main.mdc +0 -6
- package/rules/changelog/docs/index.md +0 -1
- package/rules/changelog/docs/main.md +0 -2
- package/rules/changelog/js/agent-workflow.mdc +1 -1
- package/rules/changelog/js/consistency.mjs +3 -3
- package/rules/changelog/js/docs/consistency.md +18 -23
- package/rules/changelog/main.mdc +0 -5
- package/rules/ci4/docs/index.md +0 -1
- package/rules/ci4/docs/main.md +0 -2
- package/rules/ci4/main.mdc +0 -5
- package/rules/doc-files/docs/index.md +0 -1
- package/rules/doc-files/docs/main.md +7 -11
- package/rules/doc-files/js/docs/docgen-crc.md +0 -2
- package/rules/doc-files/js/docs/docgen-extract.md +0 -2
- package/rules/doc-files/js/docs/docgen-files-batch.md +0 -2
- package/rules/doc-files/js/docs/docgen-gen.md +0 -2
- package/rules/doc-files/js/docs/docgen-judge-measure.md +0 -2
- package/rules/doc-files/js/docs/docgen-judge.md +0 -2
- package/rules/doc-files/js/docs/docgen-scan.md +0 -2
- package/rules/doc-files/js/docs/run-lint.md +0 -2
- package/rules/doc-files/main.mjs +2 -3
- package/rules/docker/docs/index.md +0 -1
- package/rules/docker/docs/main.md +0 -2
- package/rules/docker/js/docs/lint.md +0 -2
- package/rules/docker/lib/docs/docker-hadolint.md +0 -2
- package/rules/docker/main.mdc +1 -21
- package/rules/efes/docs/index.md +0 -1
- package/rules/efes/docs/main.md +0 -2
- package/rules/efes/main.mdc +0 -1
- package/rules/feedback/docs/index.md +0 -1
- package/rules/feedback/docs/main.md +0 -2
- package/rules/ga/docs/index.md +0 -1
- package/rules/ga/docs/main.md +0 -2
- package/rules/ga/js/docs/index.md +0 -1
- package/rules/ga/main.mdc +1 -31
- package/rules/graphql/docs/index.md +0 -1
- package/rules/graphql/docs/main.md +0 -2
- package/rules/graphql/main.mdc +0 -5
- package/rules/hasura/docs/index.md +0 -1
- package/rules/hasura/docs/main.md +0 -2
- package/rules/hasura/js/docs/index.md +1 -0
- package/rules/hasura/js/docs/migrations.md +28 -0
- package/rules/hasura/js/migrations.mjs +47 -0
- package/rules/hasura/main.mdc +1 -11
- package/rules/image-avif/docs/index.md +0 -1
- package/rules/image-avif/docs/main.md +0 -2
- package/rules/image-avif/main.mdc +1 -9
- package/rules/image-compress/docs/index.md +0 -1
- package/rules/image-compress/docs/main.md +0 -2
- package/rules/image-compress/js/docs/index.md +0 -1
- package/rules/image-compress/main.mdc +1 -9
- package/rules/js/docs/index.md +0 -1
- package/rules/js/docs/main.md +0 -2
- package/rules/js/js/dep-policy.mjs +91 -0
- package/rules/js/js/docs/check.md +0 -2
- package/rules/js/js/docs/dep-policy.md +34 -0
- package/rules/js/js/docs/index.md +5 -4
- package/rules/js/js/docs/tooling.md +0 -2
- package/rules/js/js/docs/utils_imports.md +0 -2
- package/rules/js/main.mdc +0 -31
- package/rules/js/policy/package_json/package_json.rego +16 -0
- package/rules/js-bun-db/docs/index.md +0 -1
- package/rules/js-bun-db/docs/main.md +0 -2
- package/rules/js-bun-db/js/docs/safety.md +18 -23
- package/rules/js-bun-db/js/safety.mjs +31 -3
- package/rules/js-bun-db/lib/bun-sql-scan.mjs +123 -0
- package/rules/js-bun-db/lib/docs/bun-sql-scan.md +37 -331
- package/rules/js-bun-db/main.mdc +1 -23
- package/rules/js-bun-redis/docs/index.md +0 -1
- package/rules/js-bun-redis/docs/main.md +0 -2
- package/rules/js-bun-redis/main.mdc +0 -5
- package/rules/js-mssql/docs/index.md +0 -1
- package/rules/js-mssql/docs/main.md +0 -2
- package/rules/js-mssql/main.mdc +0 -12
- package/rules/js-run/docs/index.md +0 -1
- package/rules/js-run/docs/main.md +0 -2
- package/rules/js-run/js/docs/runtime.md +15 -13
- package/rules/js-run/js/runtime.mjs +48 -4
- package/rules/js-run/main.mdc +0 -25
- package/rules/k8s/docs/index.md +0 -1
- package/rules/k8s/docs/main.md +0 -2
- package/rules/k8s/main.mdc +0 -45
- package/rules/nginx-default-tpl/docs/index.md +0 -1
- package/rules/nginx-default-tpl/docs/main.md +0 -2
- package/rules/nginx-default-tpl/main.mdc +0 -13
- package/rules/npm-module/docs/index.md +0 -1
- package/rules/npm-module/docs/main.md +0 -2
- package/rules/npm-module/js/docs/header_doc_pointer.md +0 -2
- package/rules/npm-module/js/docs/rule_meta.md +0 -2
- package/rules/npm-module/js/docs/skill_meta.md +0 -2
- package/rules/npm-module/main.mdc +1 -15
- package/rules/php/docs/index.md +0 -1
- package/rules/php/docs/main.md +0 -2
- package/rules/php/js/docs/index.md +0 -1
- package/rules/php/main.mdc +1 -9
- package/rules/python/docs/index.md +0 -1
- package/rules/python/docs/main.md +0 -2
- package/rules/python/js/docs/index.md +0 -1
- package/rules/python/main.mdc +1 -13
- package/rules/rego/docs/index.md +0 -1
- package/rules/rego/docs/main.md +0 -2
- package/rules/rego/js/docs/index.md +1 -1
- package/rules/rego/js/docs/tooling.md +26 -0
- package/rules/rego/js/tooling.mdc +14 -0
- package/rules/rego/js/tooling.mjs +24 -0
- package/rules/rego/main.mdc +0 -9
- package/rules/rego/policy/package_json/package_json.mdc +12 -0
- package/rules/rego/policy/package_json/package_json.rego +21 -0
- package/rules/rego/policy/package_json/target.json +4 -0
- package/rules/release/docs/index.md +0 -1
- package/rules/release/docs/main.md +0 -2
- package/rules/release/main.mdc +2 -2
- package/rules/rust/docs/index.md +0 -1
- package/rules/rust/docs/main.md +0 -2
- package/rules/rust/js/docs/index.md +0 -1
- package/rules/rust/main.mdc +1 -11
- package/rules/rust/policy/lint_rust_yml/lint_rust_yml.rego +24 -0
- package/rules/rust/policy/package_json/package_json.mdc +12 -0
- package/rules/rust/policy/package_json/package_json.rego +20 -0
- package/rules/rust/policy/package_json/target.json +4 -0
- package/rules/security/docs/index.md +0 -1
- package/rules/security/docs/main.md +0 -2
- package/rules/security/js/docs/index.md +0 -1
- package/rules/security/main.mdc +0 -13
- package/rules/style/docs/index.md +0 -1
- package/rules/style/docs/main.md +0 -2
- package/rules/style/js/docs/index.md +0 -1
- package/rules/style/js/docs/tooling.md +12 -10
- package/rules/style/js/tooling.mjs +8 -2
- package/rules/style/main.mdc +1 -23
- package/rules/style/policy/lint_style_yml/lint_style_yml.rego +5 -0
- package/rules/tauri/docs/index.md +0 -1
- package/rules/tauri/docs/main.md +0 -2
- package/rules/tauri/main.mdc +1 -11
- package/rules/test/docs/index.md +0 -1
- package/rules/test/docs/main.md +0 -2
- package/rules/test/js/docs/index.md +2 -0
- package/rules/test/js/docs/no-console-store-restore.md +30 -0
- package/rules/test/js/docs/sandbox-aware-test.md +30 -0
- package/rules/test/js/docs/stryker_config.md +0 -2
- package/rules/test/js/docs/vitest-config-pool-forks.md +0 -2
- package/rules/test/js/no-console-store-restore.mjs +88 -0
- package/rules/test/js/sandbox-aware-test.mjs +89 -0
- package/rules/test/main.mdc +1 -21
- package/rules/text/docs/index.md +0 -1
- package/rules/text/docs/main.md +0 -2
- package/rules/text/js/docs/cspell-fix.md +0 -2
- package/rules/text/js/docs/run-dotenv-linter.md +0 -2
- package/rules/text/js/docs/run-shellcheck.md +0 -2
- package/rules/text/js/docs/run-v8r.md +0 -2
- package/rules/text/main.mdc +0 -33
- package/rules/tool-surface/docs/index.md +0 -1
- package/rules/tool-surface/docs/main.md +0 -2
- package/rules/vue/docs/index.md +0 -1
- package/rules/vue/docs/main.md +0 -2
- package/rules/vue/main.mdc +0 -22
- package/rules/worktree/docs/index.md +0 -1
- package/rules/worktree/docs/main.md +0 -2
- package/scripts/docs/auto-rules.md +0 -2
- package/scripts/docs/auto-skills.md +0 -2
- package/scripts/docs/hook.md +30 -0
- package/scripts/docs/index.md +1 -2
- package/scripts/docs/post-tool-use-check.md +0 -2
- package/scripts/docs/sync-claude-config.md +1 -3
- package/scripts/docs/sync-setup-bun-deps-action.md +0 -2
- package/scripts/hook.mjs +71 -0
- package/scripts/lib/docs/check-mdc-template-refs.md +0 -2
- package/scripts/lib/docs/index.md +35 -36
- package/scripts/lib/docs/inline-template-links.md +6 -8
- package/scripts/lib/docs/list-project-rules-mdc.md +0 -2
- package/scripts/lib/docs/list-rule-ids.md +0 -2
- package/scripts/lib/docs/mirror-parity.md +8 -10
- package/scripts/lib/docs/read-n-cursor-config-lite.md +0 -2
- package/scripts/lib/docs/rule-meta.md +0 -2
- package/scripts/lib/docs/run-lint.md +9 -10
- package/scripts/lib/docs/run-rule-cli.md +0 -2
- package/scripts/lib/docs/run-rule.md +7 -9
- package/scripts/lib/docs/run-standard-lint.md +0 -2
- package/scripts/lib/docs/run-standard-rule.md +0 -2
- package/scripts/lib/docs/skill-meta.md +0 -2
- package/scripts/lib/docs/timing-summary.md +0 -2
- package/scripts/lib/docs/worktree-notice.md +0 -2
- package/scripts/lib/fix/docs/analyze-escalation.md +0 -2
- package/scripts/lib/fix/docs/index.md +10 -10
- package/scripts/lib/fix/docs/llm-worker.md +18 -8
- package/scripts/lib/fix/docs/orchestrator.md +44 -20
- package/scripts/lib/fix/docs/run-conformance-check.md +0 -2
- package/scripts/lib/fix/docs/t0.md +0 -2
- package/scripts/lib/fix/docs/verbose-block.md +27 -0
- package/scripts/lib/fix/llm-worker.mjs +75 -22
- package/scripts/lib/fix/orchestrator.mjs +13 -3
- package/scripts/lib/fix/verbose-block.mjs +82 -0
- package/scripts/lib/inline-template-links.mjs +32 -22
- package/scripts/lib/mirror-parity.mjs +2 -2
- package/scripts/lib/run-lint.mjs +15 -2
- package/scripts/lib/run-rule.mjs +1 -2
- package/scripts/sync-claude-config.mjs +7 -4
- package/scripts/utils/docs/resolve-js-root.md +0 -2
- package/skills/adr-normalize/SKILL.md +1 -0
- package/skills/coverage-fix/SKILL.md +1 -0
- package/skills/doc-aggregate/SKILL.md +1 -0
- package/skills/doc-files/SKILL.md +10 -24
- package/skills/lint/SKILL.md +24 -19
- package/skills/llm-patch/SKILL.md +5 -4
- package/skills/publish-telegram/SKILL.md +1 -0
- package/skills/start-check/SKILL.md +1 -0
- package/skills/taze/SKILL.md +3 -2
- package/types/bin/n-cursor.d.ts +1 -1
- package/rules/abie/docs/fix.md +0 -37
- package/rules/adr/docs/fix.md +0 -37
- package/rules/bun/docs/fix.md +0 -30
- package/rules/capacitor/docs/fix.md +0 -36
- package/rules/changelog/docs/fix.md +0 -37
- package/rules/ci4/docs/fix.md +0 -32
- package/rules/doc-files/docs/fix.md +0 -29
- package/rules/docker/docs/fix.md +0 -35
- package/rules/efes/docs/fix.md +0 -37
- package/rules/feedback/docs/fix.md +0 -30
- package/rules/ga/docs/fix.md +0 -30
- package/rules/graphql/docs/fix.md +0 -37
- package/rules/hasura/docs/fix.md +0 -39
- package/rules/image-avif/docs/fix.md +0 -28
- package/rules/image-compress/docs/fix.md +0 -27
- package/rules/js/docs/fix.md +0 -37
- package/rules/js-bun-db/docs/fix.md +0 -30
- package/rules/js-bun-redis/docs/fix.md +0 -32
- package/rules/js-mssql/docs/fix.md +0 -30
- package/rules/js-run/docs/fix.md +0 -36
- package/rules/k8s/docs/fix.md +0 -31
- package/rules/nginx-default-tpl/docs/fix.md +0 -35
- package/rules/npm-module/docs/fix.md +0 -34
- package/rules/php/docs/fix.md +0 -35
- package/rules/python/docs/fix.md +0 -38
- package/rules/rego/docs/fix.md +0 -31
- package/rules/release/docs/fix.md +0 -28
- package/rules/rust/docs/fix.md +0 -32
- package/rules/security/docs/fix.md +0 -33
- package/rules/style/docs/fix.md +0 -28
- package/rules/tauri/docs/fix.md +0 -39
- package/rules/test/docs/fix.md +0 -31
- package/rules/text/docs/fix.md +0 -37
- package/rules/tool-surface/docs/fix.md +0 -32
- package/rules/vue/docs/fix.md +0 -32
- package/rules/worktree/docs/fix.md +0 -40
- package/scripts/docs/post-tool-use-fix.md +0 -32
- package/scripts/docs/worktree-cli.md +0 -27
- package/scripts/lib/docs/worktree.md +0 -42
- package/scripts/lib/fix/docs/run-fix-check.md +0 -33
|
@@ -8,8 +8,6 @@ docgen:
|
|
|
8
8
|
score: 100
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
## Огляд
|
|
12
|
-
|
|
13
11
|
Модуль перевіряє відповідність даних заданим правилам, використовуючи конфігурації, політики та посилання на MDC, які визначаються у meta.json. Він застосовує білий список для формування підсумку. Публічний інтерфейс run завершує роботу, інформуючи про успішне виконання або виявлені порушення. Модуль є Read-only і не виконує записів у файлову систему чи бази даних.
|
|
14
12
|
|
|
15
13
|
## Поведінка
|
package/rules/ga/docs/index.md
CHANGED
package/rules/ga/docs/main.md
CHANGED
|
@@ -8,8 +8,6 @@ docgen:
|
|
|
8
8
|
score: 90
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
## Огляд
|
|
12
|
-
|
|
13
11
|
Цей модуль є CLI-обгорткою над канонічним `lint-ga` (ga.mdc). Він автоматично встановлює `shellcheck` та `conftest` через `ensureTool` (використовуючи brew/scoop/GitHub Release залежно від платформи), перевіряє наявність `uv` (для `uvx zizmor`), а потім послідовно виконує `bunx github-actionlint`, `uvx zizmor --offline --collect=workflows .` та делегує до `rules/ga/check.mjs::check`. Функція `lint` викликає `runLintGaCli`, який є частиною оркестраторного адаптера `n-cursor lint ga`. При відсутності `uv`, користувачеві надається підказка з командою встановлення, наприклад, https://astral.sh/uv/install.sh, оскільки `uv` не в реєстрі `ensureTool`.
|
|
14
12
|
|
|
15
13
|
## Поведінка
|
package/rules/ga/main.mdc
CHANGED
|
@@ -5,34 +5,4 @@ globs: ".github/workflows/*.yml"
|
|
|
5
5
|
alwaysApply: false
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
Правило **ga** перевіряє структуру `.github/workflows/`, наявність обов'язкових workflow-файлів і їх відповідність канонам, а також налаштування VS Code та zizmor для роботи з GitHub Actions.
|
|
9
|
-
|
|
10
|
-
[ga-workflows](./js/workflows.mdc)
|
|
11
|
-
|
|
12
|
-
[ga-workflow_common](./js/workflow_common.mdc)
|
|
13
|
-
|
|
14
|
-
[ga-required_workflows](./js/required_workflows.mdc)
|
|
15
|
-
|
|
16
|
-
[ga-vscode](./js/vscode.mdc)
|
|
17
|
-
|
|
18
|
-
[ga-zizmor](./js/zizmor.mdc)
|
|
19
|
-
|
|
20
|
-
[ga-lint_toolchain](./js/lint_toolchain.mdc)
|
|
21
|
-
|
|
22
|
-
## Швидкий gate через conftest
|
|
23
|
-
|
|
24
|
-
[ga-workflow_common](./policy/workflow_common/workflow_common.mdc)
|
|
25
|
-
|
|
26
|
-
[ga-clean_ga_workflows](./policy/clean_ga_workflows/clean_ga_workflows.mdc)
|
|
27
|
-
|
|
28
|
-
[ga-clean_merged_branch](./policy/clean_merged_branch/clean_merged_branch.mdc)
|
|
29
|
-
|
|
30
|
-
[ga-lint_ga](./policy/lint_ga/lint_ga.mdc)
|
|
31
|
-
|
|
32
|
-
[ga-git_ai](./policy/git_ai/git_ai.mdc)
|
|
33
|
-
|
|
34
|
-
[ga-vscode_extensions](./policy/vscode_extensions/vscode_extensions.mdc)
|
|
35
|
-
|
|
36
|
-
[ga-vscode_settings](./policy/vscode_settings/vscode_settings.mdc)
|
|
37
|
-
|
|
38
|
-
[ga-zizmor_yml](./policy/zizmor_yml/zizmor_yml.mdc)
|
|
8
|
+
Правило **ga** перевіряє структуру `.github/workflows/`, наявність обов'язкових workflow-файлів і їх відповідність канонам, а також налаштування VS Code та zizmor для роботи з GitHub Actions.
|
|
@@ -8,8 +8,6 @@ docgen:
|
|
|
8
8
|
score: 100
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
## Огляд
|
|
12
|
-
|
|
13
11
|
Модуль валідує дані на відповідність політикам, використовуючи конфігурації з meta.json, логіку визначення зацікавленості та контекст. При виконанні як CLI, він завантажує конфігурації, перевіряє білий список, агрегує стан валідації та завершує роботу відповідним кодом.
|
|
14
12
|
|
|
15
13
|
## Поведінка
|
package/rules/graphql/main.mdc
CHANGED
|
@@ -7,8 +7,3 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
Якщо у `.vue` або JavaScript / TypeScript джерелах зустрічається **tagged template literal** з тегом **`gql`**, у корені репозиторію мають бути `.graphqlrc.yml` та запис `graphql.vscode-graphql` у `.vscode/extensions.json`.
|
|
9
9
|
|
|
10
|
-
[graphql-tooling](./js/tooling.mdc)
|
|
11
|
-
|
|
12
|
-
[graphql-vscode-extensions](./js/vscode_extensions.mdc)
|
|
13
|
-
|
|
14
|
-
[graphql-vscode-extensions-policy](./policy/vscode_extensions/vscode_extensions.mdc)
|
|
@@ -8,8 +8,6 @@ docgen:
|
|
|
8
8
|
score: 100
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
## Огляд
|
|
12
|
-
|
|
13
11
|
Модуль виконує логіку, визначену у конфігурації `meta.json`. Він валідує дані відповідно до правил, застосовує визначену політику та збирає посилання до MDC. При запуску через публічну функцію `run` ініціюється виконання правила. Модуль є read-only і не виконує операцій запису у файлову систему чи бази даних.
|
|
14
12
|
|
|
15
13
|
## Поведінка
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: JS Module
|
|
3
|
+
title: migrations.mjs
|
|
4
|
+
resource: npm/rules/hasura/js/migrations.mjs
|
|
5
|
+
docgen:
|
|
6
|
+
crc: a8e2c4c4
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
score: 100
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
Функція перевіряє вміст директорії міграцій Hasura. Вона гарантує, що в директорії `hasura/migrations` відсутні файли з назвою `down.sql`, оскільки там мають бути лише файли `up.sql` (hasura.mdc).
|
|
12
|
+
|
|
13
|
+
## Поведінка
|
|
14
|
+
|
|
15
|
+
1. Перевіряє наявність директорії `hasura/migrations` відносно кореня репозиторію.
|
|
16
|
+
2. Якщо директорія `hasura/migrations` відсутня, повідомляє, що перевірка `down.sql` не потрібна (hasura.mdc) і завершує роботу.
|
|
17
|
+
3. Якщо директорія `hasura/migrations` існує, сканує її вміст.
|
|
18
|
+
4. Збирає список усіх знайдених файлів з назвою `down.sql` у цій директорії.
|
|
19
|
+
5. Якщо жоден файл `down.sql` не знайдено, повідомляє, що жоден `down.sql` не знайдено у `hasura/migrations/` (hasura.mdc) і завершує роботу.
|
|
20
|
+
6. Якщо знайдено один або більше файлів `down.sql`, повідомляє про кожен знайдений файл, що `down.sql` заборонений у `hasura/migrations/` — у директорії міграції має бути лише `up.sql` (hasura.mdc) і завершує роботу.
|
|
21
|
+
|
|
22
|
+
## Публічний API
|
|
23
|
+
|
|
24
|
+
check — перевіряє відсутність файлів `down.sql` у директорії міграцій, оскільки вони не використовуються.
|
|
25
|
+
|
|
26
|
+
## Гарантії поведінки
|
|
27
|
+
|
|
28
|
+
- Read-only: не виконує операцій запису (ФС/БД).
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/** @see ./docs/migrations.md */
|
|
2
|
+
import { existsSync } from 'node:fs'
|
|
3
|
+
import { basename, join, relative } from 'node:path'
|
|
4
|
+
|
|
5
|
+
import { createCheckReporter } from '../../../scripts/lib/check-reporter.mjs'
|
|
6
|
+
import { walkDir } from '../../../scripts/utils/walkDir.mjs'
|
|
7
|
+
|
|
8
|
+
/** Відносний шлях до директорії міграцій від кореня проєкту. */
|
|
9
|
+
const MIGRATIONS_REL = 'hasura/migrations'
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Перевіряє, що у `hasura/migrations/` відсутні файли `down.sql`.
|
|
13
|
+
* Директорія міграції має містити лише `up.sql` — `down.sql` у проєкті не використовується.
|
|
14
|
+
* @param {string} [cwdParam] корінь репозиторію
|
|
15
|
+
* @returns {Promise<number>} 0 — чисто, 1 — знайдено `down.sql`
|
|
16
|
+
*/
|
|
17
|
+
export async function check(cwdParam = process.cwd()) {
|
|
18
|
+
const reporter = createCheckReporter()
|
|
19
|
+
const { pass, fail } = reporter
|
|
20
|
+
|
|
21
|
+
const cwd = cwdParam
|
|
22
|
+
const migrationsDir = join(cwd, MIGRATIONS_REL)
|
|
23
|
+
|
|
24
|
+
if (!existsSync(migrationsDir)) {
|
|
25
|
+
pass(`${MIGRATIONS_REL}/ відсутній — перевірка down.sql не потрібна (hasura.mdc)`)
|
|
26
|
+
return reporter.getExitCode()
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** @type {string[]} */
|
|
30
|
+
const offenders = []
|
|
31
|
+
await walkDir(migrationsDir, absPath => {
|
|
32
|
+
if (basename(absPath) === 'down.sql') {
|
|
33
|
+
offenders.push(relative(cwd, absPath))
|
|
34
|
+
}
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
if (offenders.length === 0) {
|
|
38
|
+
pass(`Жоден down.sql не знайдено у ${MIGRATIONS_REL}/ (hasura.mdc)`)
|
|
39
|
+
return reporter.getExitCode()
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
for (const file of offenders) {
|
|
43
|
+
fail(`${file}: down.sql заборонений у ${MIGRATIONS_REL}/ — у директорії міграції має бути лише up.sql (hasura.mdc)`)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return reporter.getExitCode()
|
|
47
|
+
}
|
package/rules/hasura/main.mdc
CHANGED
|
@@ -5,14 +5,4 @@ globs: "**/hasura/**,**/*.env"
|
|
|
5
5
|
alwaysApply: false
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
Правило охоплює: коректність підключення Hasura у CI-середовищі (внутрішній URL кластера), конвенцію іменування k8s-сервісів та структуру директорій міграцій.
|
|
9
|
-
|
|
10
|
-
[hasura-internal_urls](./js/internal_urls.mdc)
|
|
11
|
-
|
|
12
|
-
[hasura-svc_hl](./js/svc_hl.mdc)
|
|
13
|
-
|
|
14
|
-
[hasura-migrations](./js/migrations.mdc)
|
|
15
|
-
|
|
16
|
-
## Швидкий gate через conftest
|
|
17
|
-
|
|
18
|
-
[hasura-svc_hl](./policy/svc_hl/svc_hl.mdc)
|
|
8
|
+
Правило охоплює: коректність підключення Hasura у CI-середовищі (внутрішній URL кластера), конвенцію іменування k8s-сервісів та структуру директорій міграцій.
|
|
@@ -8,8 +8,6 @@ docgen:
|
|
|
8
8
|
score: 100
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
## Огляд
|
|
12
|
-
|
|
13
11
|
Модуль виконує перевірку на основі логіки правил, використовуючи конфігурації з meta.json, політики та посилання на MDC. При запуску як окрема утиліта, він завантажує конфігурації, застосовує білі списки для фільтрації та формує зведений звіт. Результат виконання визначає код виходу процесу. Кешування відбувається у межах прогону. Модуль є Read-only, тобто не здійснює записів у файлову систему чи бази даних.
|
|
14
12
|
|
|
15
13
|
## Поведінка
|
|
@@ -5,12 +5,4 @@ globs: "**/*.{png,jpg,jpeg,gif,avif,vue,html}"
|
|
|
5
5
|
alwaysApply: false
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
Правило забезпечує, що кожне raster-зображення (`png`, `jpg`, `jpeg`, `gif`), на яке посилаються `.vue`/`.html` файли, має AVIF-двійник і що посилання переписані на нього. Генерація, rewrite і cleanup AVIF-сиріт виконуються автоматично через `npx @nitra/cursor fix image-avif`.
|
|
9
|
-
|
|
10
|
-
[image-avif-avif_generation](./js/avif_generation.mdc)
|
|
11
|
-
|
|
12
|
-
[image-avif-package_json_optout](./js/package_json_optout.mdc)
|
|
13
|
-
|
|
14
|
-
## Швидкий gate через conftest
|
|
15
|
-
|
|
16
|
-
[image-avif-package_json](./policy/package_json/package_json.mdc)
|
|
8
|
+
Правило забезпечує, що кожне raster-зображення (`png`, `jpg`, `jpeg`, `gif`), на яке посилаються `.vue`/`.html` файли, має AVIF-двійник і що посилання переписані на нього. Генерація, rewrite і cleanup AVIF-сиріт виконуються автоматично через `npx @nitra/cursor fix image-avif`.
|
|
@@ -8,8 +8,6 @@ docgen:
|
|
|
8
8
|
score: 90
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
## Огляд
|
|
12
|
-
|
|
13
11
|
Модуль забезпечує механізми для виконання та валідації контенту відповідно до визначених правил. Функція `run` виконує перевірку відповідності контенту визначеним критеріям у межах поточного контексту прогону. Функція `lint` виконує виявлення або стиснення зображень залежно від режиму `readOnly`.
|
|
14
12
|
|
|
15
13
|
## Поведінка
|
|
@@ -7,12 +7,4 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
CLI [`@nitra/minify-image`](https://www.npmjs.com/package/@nitra/minify-image) (≥ **4.0.1**) запускається через `npx` і **не** додається в `dependencies` / `devDependencies`. Запуск — через **`n-cursor lint image-compress`**: локально (fix) виконує `npx @nitra/minify-image --src=. --write`, у `--read-only` виконує `npx @nitra/minify-image --src=. --json` і падає, якщо `summary.needsCompression > 0`. **AVIF-генерація (`--avif`) у `image-compress` не входить** — її виконує окреме правило `image-avif`.
|
|
9
9
|
|
|
10
|
-
Окремий workflow `lint-image.yml` створювати не треба; якщо потрібен CI-gate для зображень, використовуй `n-cursor lint image-compress --read-only`.
|
|
11
|
-
|
|
12
|
-
[image-compress-package_setup](./js/package_setup.mdc)
|
|
13
|
-
|
|
14
|
-
[image-compress-package_json](./js/package_json.mdc)
|
|
15
|
-
|
|
16
|
-
## Швидкий gate через conftest
|
|
17
|
-
|
|
18
|
-
[image-compress-package_json](./policy/package_json/package_json.mdc)
|
|
10
|
+
Окремий workflow `lint-image.yml` створювати не треба; якщо потрібен CI-gate для зображень, використовуй `n-cursor lint image-compress --read-only`.
|
package/rules/js/docs/index.md
CHANGED
package/rules/js/docs/main.md
CHANGED
|
@@ -8,8 +8,6 @@ docgen:
|
|
|
8
8
|
score: 100
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
## Огляд
|
|
12
|
-
|
|
13
11
|
Модуль забезпечує виконання функцій `run`, `filterJsFiles` та `lint` для аналізу кодової бази. Він виконує стандартну перевірку проєкту, відбираючи файли з розширеннями JavaScript за допомогою `filterJsFiles` та запускаючи перевірку JS-коду за допомогою `lint`.
|
|
14
12
|
|
|
15
13
|
## Поведінка
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/** @see ./docs/dep-policy.md */
|
|
2
|
+
import { readFile } from 'node:fs/promises'
|
|
3
|
+
import { join, relative, sep } from 'node:path'
|
|
4
|
+
|
|
5
|
+
import { parseSync } from 'oxc-parser'
|
|
6
|
+
|
|
7
|
+
import { createCheckReporter } from '../../../scripts/lib/check-reporter.mjs'
|
|
8
|
+
import { loadCursorIgnorePaths } from '../../../scripts/lib/load-cursor-config.mjs'
|
|
9
|
+
import { walkDir } from '../../../scripts/utils/walkDir.mjs'
|
|
10
|
+
import {
|
|
11
|
+
dynamicImportModule,
|
|
12
|
+
langFromPath,
|
|
13
|
+
requireCallModule,
|
|
14
|
+
walkAstWithAncestors
|
|
15
|
+
} from '../../../scripts/utils/ast-scan-utils.mjs'
|
|
16
|
+
|
|
17
|
+
const JS_SOURCE_RE = /\.(?:[cm]?[jt]sx?)$/u
|
|
18
|
+
|
|
19
|
+
/** Пакети, заборонені як import-specifier у будь-якому JS/TS-файлі. */
|
|
20
|
+
const BANNED_SPECIFIERS = new Set(['@nitra/as-integrations-fastify'])
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Витягає з джерела всі import-specifier'и (static + dynamic + require).
|
|
24
|
+
* @param {string} source текст файлу
|
|
25
|
+
* @param {string} filePath шлях до файлу (для вибору мови OXC-парсера)
|
|
26
|
+
* @returns {string[]} список specifier'ів
|
|
27
|
+
*/
|
|
28
|
+
function extractImportSpecifiers(source, filePath) {
|
|
29
|
+
/** @type {string[]} */
|
|
30
|
+
const result = []
|
|
31
|
+
let parsed
|
|
32
|
+
try {
|
|
33
|
+
parsed = parseSync(filePath, source, { lang: langFromPath(filePath) })
|
|
34
|
+
} catch {
|
|
35
|
+
return result
|
|
36
|
+
}
|
|
37
|
+
for (const imp of parsed?.module?.staticImports ?? []) {
|
|
38
|
+
if (typeof imp?.moduleRequest?.value === 'string') result.push(imp.moduleRequest.value)
|
|
39
|
+
}
|
|
40
|
+
const program = parsed?.program
|
|
41
|
+
if (program && typeof program === 'object') {
|
|
42
|
+
walkAstWithAncestors(program, [], node => {
|
|
43
|
+
const dyn = dynamicImportModule(node)
|
|
44
|
+
if (dyn !== null) result.push(dyn)
|
|
45
|
+
const req = requireCallModule(node)
|
|
46
|
+
if (req !== null) result.push(req)
|
|
47
|
+
})
|
|
48
|
+
}
|
|
49
|
+
return result
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Сканує всі JS/TS-файли проєкту на заборонені import-specifier'и (dep-policy.mdc).
|
|
54
|
+
* @param {string} [cwdParam] корінь репозиторію
|
|
55
|
+
* @returns {Promise<number>} 0 — чисто, 1 — знайдено заборонені specifier'и
|
|
56
|
+
*/
|
|
57
|
+
export async function check(cwdParam = process.cwd()) {
|
|
58
|
+
const reporter = createCheckReporter()
|
|
59
|
+
const cwd = cwdParam
|
|
60
|
+
const ignorePaths = await loadCursorIgnorePaths(cwd)
|
|
61
|
+
|
|
62
|
+
const files = []
|
|
63
|
+
await walkDir(
|
|
64
|
+
cwd,
|
|
65
|
+
p => {
|
|
66
|
+
if (JS_SOURCE_RE.test(p)) files.push(p)
|
|
67
|
+
},
|
|
68
|
+
ignorePaths
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
let violations = 0
|
|
72
|
+
for (const absPath of files) {
|
|
73
|
+
const source = await readFile(absPath, 'utf8')
|
|
74
|
+
const specifiers = extractImportSpecifiers(source, absPath)
|
|
75
|
+
for (const spec of specifiers) {
|
|
76
|
+
if (BANNED_SPECIFIERS.has(spec)) {
|
|
77
|
+
const rel = relative(cwd, absPath)
|
|
78
|
+
reporter.fail(
|
|
79
|
+
`${rel}: заборонений import '${spec}' — використовуй @as-integrations/fastify (js.mdc dep-policy)`
|
|
80
|
+
)
|
|
81
|
+
violations += 1
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (violations === 0) {
|
|
87
|
+
reporter.pass(`dep-policy: перевірено ${files.length} файлів — заборонених import-specifier'ів немає (js.mdc)`)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return reporter.getExitCode()
|
|
91
|
+
}
|
|
@@ -8,8 +8,6 @@ docgen:
|
|
|
8
8
|
score: 100
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
## Огляд
|
|
12
|
-
|
|
13
11
|
Модуль виконує валідацію конфігураційних файлів, включаючи `package.json`, `.oxlintrc.json`, `knip.json`, `knip-canonical.json` та `.eslintrc.json`. Він перевіряє відповідність структури та конфігурацій встановленим стандартам. (js.mdc) (text.mdc)
|
|
14
12
|
|
|
15
13
|
## Поведінка
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: JS Module
|
|
3
|
+
title: dep-policy.mjs
|
|
4
|
+
resource: npm/rules/js/js/dep-policy.mjs
|
|
5
|
+
docgen:
|
|
6
|
+
crc: 020620cb
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
score: 100
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
Модуль сканує файли з розширеннями JS/TS у проєкті. Він перевіряє, чи не містять ці файли імпортів, заборонених відповідно до політики (dep-policy.mdc). Модуль виконує перевірку у режимі лише для читання. У разі виявлення порушень, він реєструє їх у звіті. Модуль перехоплює всі можливі помилки (fail-safe) і не генерує винятків назовні. Результат роботи відображається через код виходу, що інформує про статус перевірки (js.mdc).
|
|
12
|
+
|
|
13
|
+
## Поведінка
|
|
14
|
+
|
|
15
|
+
1. Ініціалізує звітність.
|
|
16
|
+
2. Визначає кореневу директорію проєкту.
|
|
17
|
+
3. Завантажує списки шляхів, які слід ігнорувати.
|
|
18
|
+
4. Збирає список усіх файлів з розширеннями JS/TS у кореневій директорії, ігноруючи визначені шляхи.
|
|
19
|
+
5. Для кожного зібраного файлу:
|
|
20
|
+
а. Зчитує вміст файлу.
|
|
21
|
+
б. Витягує з вмісту всі імпортовані специфікатори (статичні, динамічні та через `require`).
|
|
22
|
+
в. Для кожного витягнутого специфікатора перевіряє, чи він є забороненим відповідно до політики (dep-policy.mdc).
|
|
23
|
+
г. Якщо специфікатор заборонений, реєструє помилку у звіті, вказуючи шлях до файлу та заборонений імпорт. Збільшує лічильник порушень.
|
|
24
|
+
6. Якщо порушень не знайдено, реєструє повідомлення про успішну перевірку (js.mdc).
|
|
25
|
+
7. Повертає код виходу звіту.
|
|
26
|
+
|
|
27
|
+
## Публічний API
|
|
28
|
+
|
|
29
|
+
check — сканує файли на наявність заборонених імпортів (dep-policy.mdc).
|
|
30
|
+
|
|
31
|
+
## Гарантії поведінки
|
|
32
|
+
|
|
33
|
+
- Read-only: не виконує операцій запису (ФС/БД).
|
|
34
|
+
- Перехоплює помилки і не пропускає винятків назовні (fail-safe).
|
|
@@ -6,9 +6,10 @@ resource: npm/rules/js/js/
|
|
|
6
6
|
|
|
7
7
|
# npm/rules/js/js
|
|
8
8
|
|
|
9
|
-
| Файл
|
|
10
|
-
|
|
11
|
-
| [check.mjs](check.md)
|
|
9
|
+
| Файл | Тип |
|
|
10
|
+
| ------------------------------------- | --------- |
|
|
11
|
+
| [check.mjs](check.md) | JS Module |
|
|
12
|
+
| [dep-policy.mjs](dep-policy.md) | JS Module |
|
|
12
13
|
| [lint-findings.mjs](lint-findings.md) | JS Module |
|
|
13
|
-
| [tooling.mjs](tooling.md)
|
|
14
|
+
| [tooling.mjs](tooling.md) | JS Module |
|
|
14
15
|
| [utils_imports.mjs](utils_imports.md) | JS Module |
|
|
@@ -8,8 +8,6 @@ docgen:
|
|
|
8
8
|
score: 95
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
## Огляд
|
|
12
|
-
|
|
13
11
|
Визначає шляхи до канонічних JSON-файлів для інструментів oxlint та knip через OXLINT_CANONICAL_JSON_PATH та KNIP_CANONICAL_JSON_PATH. Також перевіряє відповідність конфігураційного файлу .oxlintrc.json значенням, встановленим у oxlint-canonical.json, за допомогою verifyOxlintRcAgainstCanonical.
|
|
14
12
|
|
|
15
13
|
## Поведінка
|
|
@@ -8,8 +8,6 @@ docgen:
|
|
|
8
8
|
score: 100
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
## Огляд
|
|
12
|
-
|
|
13
11
|
Модуль сканує монорепозиторій для пошуку каталогів `utils` та аналізу їхнього вмісту. Аналіз файлів JS/TS у цих каталогах здійснюється на відповідність шаблону забороненого відносного імпорту, що базується на конфігурації, визначеній у `.n-cursor.json`. При виявленні порушень, система генерує повідомлення, позначене як (js.mdc).
|
|
14
12
|
|
|
15
13
|
## Поведінка
|
package/rules/js/main.mdc
CHANGED
|
@@ -7,38 +7,7 @@ version: '1.30'
|
|
|
7
7
|
|
|
8
8
|
**oxlint**, **ESLint**, **jscpd**, **knip**. Запуск — **`n-cursor lint js`** (локально; у CI — `--read-only`, без **`--fix`** для oxlint/eslint). Без **prettier** і **@nitra/prettier-config**.
|
|
9
9
|
|
|
10
|
-
[js-file-extensions](./js/file-extensions.mdc)
|
|
11
|
-
|
|
12
|
-
[js-package-json](./js/package-json.mdc)
|
|
13
|
-
|
|
14
|
-
[js-eslint-config](./js/eslint-config.mdc)
|
|
15
|
-
|
|
16
|
-
[js-oxlintrc](./js/oxlintrc.mdc)
|
|
17
|
-
|
|
18
|
-
[js-extensions](./js/extensions.mdc)
|
|
19
|
-
|
|
20
|
-
[js-jscpd](./js/jscpd.mdc)
|
|
21
|
-
|
|
22
|
-
[js-knip](./js/knip.mdc)
|
|
23
|
-
|
|
24
|
-
[js-dep-policy](./js/dep-policy.mdc)
|
|
25
|
-
|
|
26
|
-
[js-lint-js-workflow](./js/lint-js-workflow.mdc)
|
|
27
|
-
|
|
28
|
-
[js-utils-lib-structure](./js/utils-lib-structure.mdc)
|
|
29
|
-
|
|
30
|
-
[js-for-in](./js/for-in.mdc)
|
|
31
|
-
|
|
32
|
-
[js-tests](./js/tests.mdc)
|
|
33
|
-
|
|
34
10
|
## Швидкий gate через conftest
|
|
35
11
|
|
|
36
12
|
Rego-пакети у `policy/` — запускаються `npx @nitra/cursor fix js` або `conftest`:
|
|
37
13
|
|
|
38
|
-
[js-policy-package_json](./policy/package_json/package_json.mdc)
|
|
39
|
-
|
|
40
|
-
[js-policy-jscpd](./policy/jscpd/jscpd.mdc)
|
|
41
|
-
|
|
42
|
-
[js-policy-lint_js_yml](./policy/lint_js_yml/lint_js_yml.mdc)
|
|
43
|
-
|
|
44
|
-
[js-policy-vscode_extensions](./policy/vscode_extensions/vscode_extensions.mdc)
|
|
@@ -61,6 +61,22 @@ deny contains msg if {
|
|
|
61
61
|
msg := sprintf("package.json: @nitra/eslint-config має бути >= %s (зараз %q) (js.mdc)", [eslint_min_display, range])
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
+
# ── deny: @nitra/as-integrations-fastify заборонений (dep-policy.mdc) ───
|
|
65
|
+
|
|
66
|
+
banned_fastify_pkg := "@nitra/as-integrations-fastify"
|
|
67
|
+
|
|
68
|
+
deny contains msg if {
|
|
69
|
+
deps := object.get(input, "dependencies", {})
|
|
70
|
+
banned_fastify_pkg in object.keys(deps)
|
|
71
|
+
msg := sprintf("package.json: dependencies.%s заборонений — використовуй @as-integrations/fastify (js.mdc dep-policy)", [banned_fastify_pkg])
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
deny contains msg if {
|
|
75
|
+
deps := object.get(input, "peerDependencies", {})
|
|
76
|
+
banned_fastify_pkg in object.keys(deps)
|
|
77
|
+
msg := sprintf("package.json: peerDependencies.%s заборонений — використовуй @as-integrations/fastify (js.mdc dep-policy)", [banned_fastify_pkg])
|
|
78
|
+
}
|
|
79
|
+
|
|
64
80
|
# ── helpers ──────────────────────────────────────────────────────────────
|
|
65
81
|
|
|
66
82
|
# Канонічний мін-поріг `@nitra/eslint-config` із snippet (напр. "^3.10.0").
|
|
@@ -8,8 +8,6 @@ docgen:
|
|
|
8
8
|
score: 90
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
## Огляд
|
|
12
|
-
|
|
13
11
|
Модуль виконує перевірку, застосовуючи правила та політики. При виклику публічної функції `run` він завантажує конфігурації, зокрема `meta.json`, застосовує білі списки та підбиває підсумки. Модуль є Read-only, тобто не пише у файлову систему чи базу даних. Під час роботи відбувається кешування даних у межах одного прогону. Результат перевірки визначає код виходу процесу.
|
|
14
12
|
|
|
15
13
|
## Поведінка
|
|
@@ -3,39 +3,34 @@ type: JS Module
|
|
|
3
3
|
title: safety.mjs
|
|
4
4
|
resource: npm/rules/js-bun-db/js/safety.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: e828ee4a
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
7
8
|
score: 100
|
|
8
9
|
---
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
Модуль сканує репозиторій для валідації безпечності використання Bun SQL. Він шукає всі файли `package.json` та JS/TS джерела, щоб перевірити відповідність патернів Bun SQL правилам, визначеним у конфігурації, що спирається на `package.json`.
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
Поведінка:
|
|
14
|
+
|
|
15
|
+
- Перевіряє відповідність патернів Bun SQL встановленим правилам (js-bun-db.mdc).
|
|
13
16
|
|
|
14
17
|
## Поведінка
|
|
15
18
|
|
|
16
|
-
1.
|
|
17
|
-
2.
|
|
18
|
-
3.
|
|
19
|
-
4.
|
|
20
|
-
5.
|
|
21
|
-
6.
|
|
22
|
-
7.
|
|
23
|
-
8.
|
|
24
|
-
9.
|
|
25
|
-
10.
|
|
26
|
-
11. Перевірити використання `pg-leftover` викликів
|
|
27
|
-
12. Перевірити використання `findBunSqlUnsafeBunSqlDynamicSqlListInText`
|
|
28
|
-
13. Перевірити використання `findUnsafeBunSqlInListMissingEmptyGuardInText`
|
|
29
|
-
14. Перевірити використання `findPgFormatShimDefinitionInText`
|
|
30
|
-
15. Перевірити використання `findPgFormatLikeQueryWrapperInText`
|
|
31
|
-
16. Перевірити наявність використання `import { sql } from 'bun'`
|
|
19
|
+
1. Викликається `check` для початку перевірки.
|
|
20
|
+
2. Перевіряється наявність `package.json` у корені репозиторію. Якщо відсутній, перевірка припиняється.
|
|
21
|
+
3. Завантажуються конфігураційні шляхи, які ігноруються під час обходу.
|
|
22
|
+
4. Знаходяться всі файли `package.json` у репозиторії. Якщо жоден не знайдено, перевірка припиняється.
|
|
23
|
+
5. Знаходяться всі JS/TS джерела для сканування патернів Bun SQL. Якщо жоден не знайдено, перевірка припиняється.
|
|
24
|
+
6. Скануються знайдені JS/TS джерела на небезпечні патерни Bun SQL. Збираються метадані про використання Bun SQL та про використання бібліотеки `pg` (LISTEN/NOTIFY).
|
|
25
|
+
7. Перевіряється залежність `pg` у знайдених `package.json` на відповідність правилу: якщо `pg` є залежністю, у коді має бути хоча б одне використання LISTEN/NOTIFY.
|
|
26
|
+
8. Перевіряється кожен файл, що імпортує `pg`. Якщо у ньому немає використання LISTEN/NOTIFY, реєструється порушення.
|
|
27
|
+
9. Після завершення сканування та перевірок, реєструються всі знайдені порушення, пов'язані з Bun SQL (наприклад, створення `new SQL` всередині функцій, використання `sql.unsafe` без маркерів, проблеми з динамічними списками тощо).
|
|
28
|
+
10. Якщо всі перевірки пройдені успішно, реєструється повідомлення про відповідність правилу `js-bun-db.mdc`.
|
|
32
29
|
|
|
33
30
|
## Публічний API
|
|
34
31
|
|
|
35
|
-
check —
|
|
32
|
+
check — порівнює структуру проєкту з вимогами, описаними у js-bun-db.mdc
|
|
36
33
|
|
|
37
34
|
## Гарантії поведінки
|
|
38
35
|
|
|
39
|
-
- Read-only:
|
|
40
|
-
- Перехоплює помилки і не пропускає винятків назовні (fail-safe).
|
|
41
|
-
- Не звертається до мережі.
|
|
36
|
+
- Read-only: не виконує операцій запису (ФС/БД).
|