@7n/rules 1.27.0 → 1.28.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.
Files changed (267) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/package.json +1 -5
  3. package/scripts/auto-rules.mjs +2 -3
  4. package/scripts/docs/auto-rules.md +1 -1
  5. package/scripts/lib/docs/glob-to-regex.md +31 -0
  6. package/scripts/lib/docs/index.md +2 -0
  7. package/scripts/lib/docs/js-source-signals.md +32 -0
  8. package/scripts/lib/glob-to-regex.mjs +79 -0
  9. package/scripts/lib/js-source-signals.mjs +50 -0
  10. package/scripts/utils/ast-scan-utils.mjs +2 -2
  11. package/scripts/utils/docs/ast-scan-utils.md +1 -1
  12. package/rules/bun/bunfig/bunfig.mdc +0 -17
  13. package/rules/bun/bunfig/bunfig.rego +0 -29
  14. package/rules/bun/bunfig/concern.json +0 -9
  15. package/rules/bun/bunfig/template/bunfig.toml.snippet.toml +0 -2
  16. package/rules/bun/docs/index.md +0 -11
  17. package/rules/bun/layout/concern.json +0 -16
  18. package/rules/bun/layout/docs/fix-layout.md +0 -29
  19. package/rules/bun/layout/docs/main.md +0 -34
  20. package/rules/bun/layout/fix-layout.mjs +0 -63
  21. package/rules/bun/layout/layout.mdc +0 -60
  22. package/rules/bun/layout/main.mjs +0 -53
  23. package/rules/bun/licensee/concern.json +0 -7
  24. package/rules/bun/licensee/docs/fix-licensee.md +0 -27
  25. package/rules/bun/licensee/docs/index.md +0 -12
  26. package/rules/bun/licensee/docs/main.md +0 -30
  27. package/rules/bun/licensee/fix-licensee.mjs +0 -31
  28. package/rules/bun/licensee/main.mjs +0 -68
  29. package/rules/bun/lint-surface/concern.json +0 -3
  30. package/rules/bun/lint-surface/lint-surface.mdc +0 -13
  31. package/rules/bun/main.json +0 -1
  32. package/rules/bun/main.mdc +0 -11
  33. package/rules/bun/package_json/concern.json +0 -9
  34. package/rules/bun/package_json/docs/fix-package_json.md +0 -28
  35. package/rules/bun/package_json/docs/index.md +0 -9
  36. package/rules/bun/package_json/fix-package_json.mjs +0 -311
  37. package/rules/bun/package_json/package_json.mdc +0 -14
  38. package/rules/bun/package_json/package_json.rego +0 -64
  39. package/rules/bun/package_json/template/package.json.deny.json +0 -4
  40. package/rules/js/check/check.mdc +0 -26
  41. package/rules/js/check/concern.json +0 -19
  42. package/rules/js/check/docs/eslint-config.md +0 -56
  43. package/rules/js/check/docs/fix-check.md +0 -48
  44. package/rules/js/check/docs/index.md +0 -13
  45. package/rules/js/check/docs/main.md +0 -48
  46. package/rules/js/check/eslint-config.mjs +0 -262
  47. package/rules/js/check/fix-check.mjs +0 -82
  48. package/rules/js/check/main.mjs +0 -310
  49. package/rules/js/dep-policy/concern.json +0 -4
  50. package/rules/js/dep-policy/dep-policy.mdc +0 -36
  51. package/rules/js/dep-policy/docs/main.md +0 -35
  52. package/rules/js/dep-policy/main.mjs +0 -99
  53. package/rules/js/docs/index.md +0 -11
  54. package/rules/js/eslint/concern.json +0 -8
  55. package/rules/js/eslint/docs/fix-eslint.md +0 -50
  56. package/rules/js/eslint/docs/fix-worker.md +0 -31
  57. package/rules/js/eslint/docs/index.md +0 -11
  58. package/rules/js/eslint/docs/main.md +0 -35
  59. package/rules/js/eslint/fix-eslint.mjs +0 -160
  60. package/rules/js/eslint/fix-worker.mjs +0 -139
  61. package/rules/js/eslint/main.mjs +0 -115
  62. package/rules/js/file-extensions/concern.json +0 -3
  63. package/rules/js/file-extensions/file-extensions.mdc +0 -12
  64. package/rules/js/jscpd_config/concern.json +0 -11
  65. package/rules/js/jscpd_config/docs/fix-jscpd_config.md +0 -26
  66. package/rules/js/jscpd_config/docs/index.md +0 -9
  67. package/rules/js/jscpd_config/fix-jscpd_config.mjs +0 -3
  68. package/rules/js/jscpd_config/jscpd_config.mdc +0 -42
  69. package/rules/js/jscpd_config/jscpd_config.rego +0 -44
  70. package/rules/js/jscpd_config/template/.jscpd.json.snippet.json +0 -7
  71. package/rules/js/jscpd_duplicates/concern.json +0 -7
  72. package/rules/js/jscpd_duplicates/docs/main.md +0 -29
  73. package/rules/js/jscpd_duplicates/main.mjs +0 -69
  74. package/rules/js/knip/concern.json +0 -7
  75. package/rules/js/knip/docs/main.md +0 -32
  76. package/rules/js/knip/knip.mdc +0 -15
  77. package/rules/js/knip/main.mjs +0 -68
  78. package/rules/js/lint-findings/concern.json +0 -3
  79. package/rules/js/lint-findings/docs/main.md +0 -41
  80. package/rules/js/lint-findings/main.mjs +0 -125
  81. package/rules/js/main.json +0 -1
  82. package/rules/js/main.mdc +0 -18
  83. package/rules/js/package_json/concern.json +0 -9
  84. package/rules/js/package_json/docs/fix-package_json.md +0 -26
  85. package/rules/js/package_json/docs/index.md +0 -9
  86. package/rules/js/package_json/fix-package_json.mjs +0 -3
  87. package/rules/js/package_json/package_json.mdc +0 -15
  88. package/rules/js/package_json/package_json.rego +0 -142
  89. package/rules/js/package_json/template/package.json.snippet.json +0 -6
  90. package/rules/js/tooling/concern.json +0 -3
  91. package/rules/js/tooling/data/tooling/knip-canonical.json +0 -30
  92. package/rules/js/tooling/data/tooling/oxlint-canonical.json +0 -400
  93. package/rules/js/tooling/docs/main.md +0 -53
  94. package/rules/js/tooling/main.mjs +0 -183
  95. package/rules/js/utils_imports/concern.json +0 -4
  96. package/rules/js/utils_imports/docs/main.md +0 -50
  97. package/rules/js/utils_imports/main.mjs +0 -185
  98. package/rules/js/utils_imports/utils_imports.mdc +0 -15
  99. package/rules/js/vscode_extensions/concern.json +0 -11
  100. package/rules/js/vscode_extensions/docs/fix-vscode_extensions.md +0 -25
  101. package/rules/js/vscode_extensions/docs/index.md +0 -11
  102. package/rules/js/vscode_extensions/fix-vscode_extensions.mjs +0 -1
  103. package/rules/js/vscode_extensions/template/extensions.json.snippet.json +0 -6
  104. package/rules/js/vscode_extensions/vscode_extensions.mdc +0 -11
  105. package/rules/js/vscode_extensions/vscode_extensions.rego +0 -12
  106. package/rules/js-bun-db/connection/concern.json +0 -3
  107. package/rules/js-bun-db/connection/connection.mdc +0 -42
  108. package/rules/js-bun-db/docs/index.md +0 -11
  109. package/rules/js-bun-db/lib/bun-sql-scan.mjs +0 -1055
  110. package/rules/js-bun-db/lib/docs/bun-sql-scan.md +0 -63
  111. package/rules/js-bun-db/lib/docs/index.md +0 -11
  112. package/rules/js-bun-db/main.json +0 -1
  113. package/rules/js-bun-db/main.mdc +0 -8
  114. package/rules/js-bun-db/package_json/concern.json +0 -9
  115. package/rules/js-bun-db/package_json/package_json.mdc +0 -31
  116. package/rules/js-bun-db/package_json/package_json.rego +0 -15
  117. package/rules/js-bun-db/package_json/template/package.json.deny.json +0 -6
  118. package/rules/js-bun-db/pg_format_identifiers/concern.json +0 -3
  119. package/rules/js-bun-db/pg_format_identifiers/pg_format_identifiers.mdc +0 -104
  120. package/rules/js-bun-db/safety/concern.json +0 -4
  121. package/rules/js-bun-db/safety/docs/main.md +0 -34
  122. package/rules/js-bun-db/safety/main.mjs +0 -430
  123. package/rules/js-bun-db/safety/safety.mdc +0 -458
  124. package/rules/js-bun-redis/docs/index.md +0 -11
  125. package/rules/js-bun-redis/imports/concern.json +0 -4
  126. package/rules/js-bun-redis/imports/docs/main.md +0 -36
  127. package/rules/js-bun-redis/imports/imports.mdc +0 -47
  128. package/rules/js-bun-redis/imports/main.mjs +0 -88
  129. package/rules/js-bun-redis/lib/docs/index.md +0 -11
  130. package/rules/js-bun-redis/lib/docs/redis-imports.md +0 -227
  131. package/rules/js-bun-redis/lib/redis-imports.mjs +0 -130
  132. package/rules/js-bun-redis/main.json +0 -1
  133. package/rules/js-bun-redis/main.mdc +0 -8
  134. package/rules/js-bun-redis/package_json/concern.json +0 -9
  135. package/rules/js-bun-redis/package_json/package_json.mdc +0 -11
  136. package/rules/js-bun-redis/package_json/package_json.rego +0 -15
  137. package/rules/js-bun-redis/package_json/template/package.json.deny.json +0 -12
  138. package/rules/js-mssql/deps/concern.json +0 -4
  139. package/rules/js-mssql/deps/docs/main.md +0 -33
  140. package/rules/js-mssql/deps/main.mjs +0 -297
  141. package/rules/js-mssql/docs/index.md +0 -11
  142. package/rules/js-mssql/lib/docs/index.md +0 -11
  143. package/rules/js-mssql/lib/docs/mssql-pool-scan.md +0 -380
  144. package/rules/js-mssql/lib/mssql-pool-scan.mjs +0 -610
  145. package/rules/js-mssql/main.json +0 -1
  146. package/rules/js-mssql/main.mdc +0 -144
  147. package/rules/js-mssql/mssql-tvp/concern.json +0 -3
  148. package/rules/js-mssql/mssql-tvp/mssql-tvp.mdc +0 -77
  149. package/rules/js-mssql/package_json/concern.json +0 -9
  150. package/rules/js-mssql/package_json/package_json.mdc +0 -9
  151. package/rules/js-mssql/package_json/package_json.rego +0 -57
  152. package/rules/js-run/configmap/concern.json +0 -9
  153. package/rules/js-run/configmap/configmap.mdc +0 -37
  154. package/rules/js-run/configmap/configmap.rego +0 -21
  155. package/rules/js-run/configmap/template/configmap.yaml.contains.yml +0 -4
  156. package/rules/js-run/docs/index.md +0 -11
  157. package/rules/js-run/jsconfig/concern.json +0 -9
  158. package/rules/js-run/jsconfig/docs/fix-jsconfig.md +0 -29
  159. package/rules/js-run/jsconfig/docs/index.md +0 -9
  160. package/rules/js-run/jsconfig/fix-jsconfig.mjs +0 -119
  161. package/rules/js-run/jsconfig/jsconfig.mdc +0 -48
  162. package/rules/js-run/jsconfig/jsconfig.rego +0 -59
  163. package/rules/js-run/jsconfig/template/jsconfig.json.snippet.json +0 -10
  164. package/rules/js-run/lib/bunyan-imports.mjs +0 -98
  165. package/rules/js-run/lib/check-env-scan.mjs +0 -338
  166. package/rules/js-run/lib/conn-file-rules.mjs +0 -214
  167. package/rules/js-run/lib/conn-imports-scan.mjs +0 -154
  168. package/rules/js-run/lib/docs/bunyan-imports.md +0 -121
  169. package/rules/js-run/lib/docs/check-env-scan.md +0 -438
  170. package/rules/js-run/lib/docs/conn-file-rules.md +0 -304
  171. package/rules/js-run/lib/docs/conn-imports-scan.md +0 -208
  172. package/rules/js-run/lib/docs/index.md +0 -16
  173. package/rules/js-run/lib/docs/promise-settimeout-scan.md +0 -334
  174. package/rules/js-run/lib/docs/temporal-scan.md +0 -29
  175. package/rules/js-run/lib/promise-settimeout-scan.mjs +0 -128
  176. package/rules/js-run/lib/temporal-scan.mjs +0 -52
  177. package/rules/js-run/main.json +0 -1
  178. package/rules/js-run/main.mdc +0 -16
  179. package/rules/js-run/package_json/concern.json +0 -9
  180. package/rules/js-run/package_json/package_json.mdc +0 -44
  181. package/rules/js-run/package_json/package_json.rego +0 -37
  182. package/rules/js-run/package_json/template/package.json.deny.json +0 -22
  183. package/rules/js-run/project-structure/concern.json +0 -3
  184. package/rules/js-run/project-structure/project-structure.mdc +0 -11
  185. package/rules/js-run/runtime/concern.json +0 -12
  186. package/rules/js-run/runtime/docs/fix-runtime.md +0 -27
  187. package/rules/js-run/runtime/docs/main.md +0 -35
  188. package/rules/js-run/runtime/fix-runtime.mjs +0 -46
  189. package/rules/js-run/runtime/main.mjs +0 -494
  190. package/rules/js-run/runtime/runtime.mdc +0 -184
  191. package/rules/js-run/scope/concern.json +0 -3
  192. package/rules/js-run/scope/scope.mdc +0 -11
  193. package/rules/npm-module/docs/index.md +0 -11
  194. package/rules/npm-module/emit_types_config/concern.json +0 -9
  195. package/rules/npm-module/emit_types_config/docs/fix-emit_types_config.md +0 -25
  196. package/rules/npm-module/emit_types_config/docs/index.md +0 -9
  197. package/rules/npm-module/emit_types_config/emit_types_config.mdc +0 -43
  198. package/rules/npm-module/emit_types_config/emit_types_config.rego +0 -28
  199. package/rules/npm-module/emit_types_config/fix-emit_types_config.mjs +0 -5
  200. package/rules/npm-module/emit_types_config/template/tsconfig.emit-types.json.snippet.json +0 -9
  201. package/rules/npm-module/header_doc_pointer/concern.json +0 -5
  202. package/rules/npm-module/header_doc_pointer/docs/main.md +0 -40
  203. package/rules/npm-module/header_doc_pointer/header_doc_pointer.mdc +0 -18
  204. package/rules/npm-module/header_doc_pointer/main.mjs +0 -131
  205. package/rules/npm-module/main.json +0 -1
  206. package/rules/npm-module/main.mdc +0 -36
  207. package/rules/npm-module/npm_package_json/concern.json +0 -9
  208. package/rules/npm-module/npm_package_json/docs/fix-npm_package_json.md +0 -27
  209. package/rules/npm-module/npm_package_json/docs/index.md +0 -9
  210. package/rules/npm-module/npm_package_json/fix-npm_package_json.mjs +0 -5
  211. package/rules/npm-module/npm_package_json/npm_package_json.mdc +0 -57
  212. package/rules/npm-module/npm_package_json/npm_package_json.rego +0 -73
  213. package/rules/npm-module/npm_package_json/template/package.json.snippet.json +0 -1
  214. package/rules/npm-module/package_structure/concern.json +0 -5
  215. package/rules/npm-module/package_structure/docs/main.md +0 -37
  216. package/rules/npm-module/package_structure/main.mjs +0 -515
  217. package/rules/npm-module/package_structure/package_structure.mdc +0 -63
  218. package/rules/npm-module/root_package_json/concern.json +0 -9
  219. package/rules/npm-module/root_package_json/docs/fix-root_package_json.md +0 -26
  220. package/rules/npm-module/root_package_json/docs/index.md +0 -9
  221. package/rules/npm-module/root_package_json/fix-root_package_json.mjs +0 -5
  222. package/rules/npm-module/root_package_json/root_package_json.mdc +0 -41
  223. package/rules/npm-module/root_package_json/root_package_json.rego +0 -28
  224. package/rules/npm-module/root_package_json/template/package.json.snippet.json +0 -1
  225. package/rules/npm-module/rule_meta/concern.json +0 -8
  226. package/rules/npm-module/rule_meta/docs/main.md +0 -35
  227. package/rules/npm-module/rule_meta/main.mjs +0 -119
  228. package/rules/npm-module/rule_meta/rule_meta.mdc +0 -11
  229. package/rules/npm-module/skill_meta/concern.json +0 -5
  230. package/rules/npm-module/skill_meta/docs/main.md +0 -149
  231. package/rules/npm-module/skill_meta/main.mjs +0 -91
  232. package/rules/npm-module/skill_meta/skill_meta.mdc +0 -11
  233. package/rules/tool-surface/docs/index.md +0 -11
  234. package/rules/tool-surface/main.json +0 -6
  235. package/rules/tool-surface/main.mdc +0 -72
  236. package/rules/vue/composition-api/composition-api.mdc +0 -82
  237. package/rules/vue/composition-api/concern.json +0 -3
  238. package/rules/vue/docs/index.md +0 -11
  239. package/rules/vue/lib/docs/index.md +0 -11
  240. package/rules/vue/lib/docs/vue-forbidden-imports.md +0 -265
  241. package/rules/vue/lib/vue-forbidden-imports.mjs +0 -264
  242. package/rules/vue/main.json +0 -1
  243. package/rules/vue/main.mdc +0 -18
  244. package/rules/vue/nheader-layout/concern.json +0 -3
  245. package/rules/vue/nheader-layout/nheader-layout.mdc +0 -171
  246. package/rules/vue/package_json/concern.json +0 -9
  247. package/rules/vue/package_json/package_json.mdc +0 -30
  248. package/rules/vue/package_json/package_json.rego +0 -140
  249. package/rules/vue/packages/concern.json +0 -6
  250. package/rules/vue/packages/docs/index.md +0 -11
  251. package/rules/vue/packages/docs/main.md +0 -35
  252. package/rules/vue/packages/main.mjs +0 -575
  253. package/rules/vue/packages/packages.mdc +0 -56
  254. package/rules/vue/quasar-ui/concern.json +0 -3
  255. package/rules/vue/quasar-ui/quasar-ui.mdc +0 -32
  256. package/rules/vue/structure/concern.json +0 -3
  257. package/rules/vue/structure/structure.mdc +0 -101
  258. package/rules/vue/testing/concern.json +0 -3
  259. package/rules/vue/testing/testing.mdc +0 -40
  260. package/rules/vue/tfm-translations/concern.json +0 -7
  261. package/rules/vue/tfm-translations/docs/main.md +0 -29
  262. package/rules/vue/tfm-translations/main.mjs +0 -55
  263. package/rules/vue/tfm-translations/tfm-translations.mdc +0 -32
  264. package/rules/vue/vite-config/concern.json +0 -3
  265. package/rules/vue/vite-config/vite-config.mdc +0 -153
  266. package/rules/vue/vite-env/concern.json +0 -3
  267. package/rules/vue/vite-env/vite-env.mdc +0 -61
@@ -1,57 +0,0 @@
1
- ## Rego-gate: валідація `npm/package.json`
2
-
3
- Rego-пакет: `npm-module.npm_package_json`
4
-
5
- Цільовий файл: `npm/package.json`
6
-
7
- ### Що перевіряється
8
-
9
- **Поле `types`** (логіка в rego, не template-driven):
10
-
11
- - Має відповідати патерну `./types/index.d.ts` або `./types/<назва>.d.ts|.d.mts`.
12
- - Шляхи поза директорією `types/` або з іншими розширеннями (`.ts` без `.d`) — deny.
13
-
14
- **Поле `files`** (частково template-driven):
15
-
16
- - Обовʼязкове, має бути непорожнім масивом.
17
- - Subset-of перевірка: кожне значення з канонічного сніпету має бути присутнє у `files`. За замовчуванням — `"types"` обовʼязковий.
18
-
19
- **Поле `devDependencies`** (inverse-pattern, логіка в rego):
20
-
21
- - Не публікуються користувачам пакета — має бути відсутнє або порожнє `{}`.
22
- - Наявність будь-яких devDeps → deny з переліком залежностей. Dev-інструментарій переноситься у кореневий `package.json`; CLI-тули, які пакет спавнить через `bunx` у репозиторіях-споживачах (пінінг версій), — у `dependencies` (кореневе bun-правило `package_json` такі пакети в root devDeps не пускає).
23
-
24
- Канонічний сніпет `files`: [package.json.snippet.json](./template/package.json.snippet.json)
25
-
26
- FS-перевірки (наявність файлу зі шляху `types`, скан tarball на тест-патерни) — у JS-перевірці, не тут.
27
-
28
- ### Приклади
29
-
30
- ✓ Правильно:
31
-
32
- ```json
33
- {
34
- "name": "@7n/rules",
35
- "types": "./types/bin/n-rules.d.ts",
36
- "files": ["types", "mdc", "bin", "CHANGELOG.md"],
37
- "dependencies": { "oxc-parser": "^0.128.0" }
38
- }
39
- ```
40
-
41
- ✗ Неправильно — `types` поза директорією `types/`:
42
-
43
- ```json
44
- { "types": "./dist/index.d.ts" }
45
- ```
46
-
47
- ✗ Неправильно — `files` без `"types"`:
48
-
49
- ```json
50
- { "files": ["bin", "mdc"] }
51
- ```
52
-
53
- ✗ Неправильно — наявні `devDependencies`:
54
-
55
- ```json
56
- { "devDependencies": { "@7n/rules": "^1.0.0" } }
57
- ```
@@ -1,73 +0,0 @@
1
- # Порт перевірок `npm/package.json` (npm-module.mdc).
2
- #
3
- # Канон надходить через --data: { "template": { "snippet": ... } }
4
- # Структура --data сформована з template/package.json.snippet.json
5
- # (snippet-array subset-of для whitelist `files`).
6
- #
7
- # Логіка, що ЛИШАЄТЬСЯ у rego (inverse-patterns, не виносяться у template):
8
- # - форма поля `types` (regex pattern: `./types/index.d.ts` або `./types/<…>.d.ts|.d.mts`);
9
- # - `devDependencies` мають бути відсутні або порожні (inverse-pattern — заборона будь-яких).
10
- #
11
- # FS-перевірки (наявність файлу зі шляху `types`, скан tarball на тест-патерни) — у JS.
12
- package npm_module.npm_package_json
13
-
14
- import rego.v1
15
-
16
- types_field_template := concat(" ", [
17
- "npm/package.json: поле \"types\" має бути \"./types/index.d.ts\"",
18
- "або \"./types/<…>.d.ts|.d.mts\" (зараз: %v) (npm-module.mdc)",
19
- ])
20
-
21
- dev_deps_template := concat(" ", [
22
- "npm/package.json: \"devDependencies\" не публікуються користувачам пакета —",
23
- "dev-інструментарій перенеси у кореневий package.json, а CLI-тули, які пакет",
24
- "спавнить через bunx у споживачів, — у \"dependencies\": %v (npm-module.mdc)",
25
- ])
26
-
27
- # ── deny: types (regex — лишається в rego) ───────────────────────────────
28
-
29
- deny contains msg if {
30
- types_field := object.get(input, "types", "")
31
- not valid_types_field(types_field)
32
- msg := sprintf(types_field_template, [types_field])
33
- }
34
-
35
- # ── deny: files має існувати та бути масивом ─────────────────────────────
36
-
37
- deny contains msg if {
38
- not is_array(object.get(input, "files", null))
39
- msg := "npm/package.json: обовʼязковий whitelist \"files\" (без нього npm пакує майже все) (npm-module.mdc)"
40
- }
41
-
42
- deny contains msg if {
43
- is_array(input.files)
44
- count(input.files) == 0
45
- msg := "npm/package.json: масив \"files\" не повинен бути порожнім (npm-module.mdc: компактний пакет)"
46
- }
47
-
48
- # ── deny: files subset-of з template (template-driven) ──────────────────
49
-
50
- deny contains msg if {
51
- some field, expected_values in data.template.snippet
52
- is_array(object.get(input, field, null))
53
- count(input[field]) > 0
54
- actual_set := {v | some v in input[field]}
55
- some required in expected_values
56
- not required in actual_set
57
- msg := sprintf("npm/package.json: масив \"%s\" має містити %q (npm-module.mdc)", [field, required])
58
- }
59
-
60
- # ── deny: devDependencies (inverse-pattern, лишається в rego) ────────────
61
-
62
- deny contains msg if {
63
- dev := object.get(input, "devDependencies", {})
64
- count(dev) > 0
65
- names := concat(", ", sort([n | some n, _ in dev]))
66
- msg := sprintf(dev_deps_template, [names])
67
- }
68
-
69
- # ── helpers ────────────────────────────────────────────────────────────────
70
-
71
- valid_types_field("./types/index.d.ts")
72
-
73
- valid_types_field(t) if regex.match(`^\./types/.+\.d\.(ts|mts)$`, t)
@@ -1 +0,0 @@
1
- { "files": ["types"] }
@@ -1,5 +0,0 @@
1
- {
2
- "$schema": "https://unpkg.com/@7n/rules/schemas/concern.json",
3
- "fixability": "structural",
4
- "lint": { "scope": "full", "glob": ["**/*"] }
5
- }
@@ -1,37 +0,0 @@
1
- ---
2
- type: JS Module
3
- title: main.mjs
4
- resource: npm/rules/npm-module/package_structure/main.mjs
5
- docgen:
6
- crc: 321b552d
7
- model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
- score: 85
9
- issues: anchor-miss:(npm-module.mdc),surzhik,judge:inaccurate:0.99
10
- judgeModel: openai-codex/gpt-5.4-mini
11
- ---
12
-
13
- ## Огляд
14
-
15
- Компонент валідує відповідність проєкту стандартам, визначеним у `npm-module.mdc`, аналізуючи конфігурації (`tsconfig.emit-types.json`, `package.json`, `meta.json`). Він виконує логіку, зокрема через функції `globToRegex`, `findTestFrameworkImport`, `classifyPublishedFileAsTest` та `main`, обробляючи помилки за принципом fail-safe, ніколи не кидаючи винятків назовні. Процес роботи є read-only, і він свідомо ігнорує каталоги `.github` та `.git` під час аналізу.
16
-
17
- ## Поведінка
18
-
19
- Поведінка:
20
- globToRegex перетворює glob-патерн у регулярний вираз з якорями початку та кінця, підтримуючи globstar, `*`, `?` та brace-альтернативи; ігнорує шляхи з `.github` та `.git`.
21
- findTestFrameworkImport шукає у вмісті файлу імпорти або виклики, які вказують на використання тестових фреймворків.
22
- classifyPublishedFileAsTest визначає, чи вважається певний опублікований файл тестовим або фікстурою на основі назви, каталогу або імпортів.
23
- main виконує повну перевірку відповідності проєкту конвенціям npm-module.mdc, аналізуючи структуру, конфігурації та файли, і виводить статус проходження перевірок.
24
-
25
- ## Публічний API
26
-
27
- globToRegex — перетворює шаблон пошуку файлів у регулярний вираз, забезпечуючи коректне зіставлення шляхів.
28
- findTestFrameworkImport — виявляє, чи використовується у файлі механізм імпорту тест-фреймворку.
29
- classifyPublishedFileAsTest — визначає, чи повинен вважатися опублікований файл тестом або фікстурою, ґрунтуючись на його шляху та вмісті.
30
- main — забезпечує дотримання проєкту всіх вимог, визначених у конвенціях, описаних у npm-module.mdc.
31
-
32
- ## Гарантії поведінки
33
-
34
- - Read-only: не виконує операцій запису (ФС/БД).
35
- - Перехоплює помилки і не пропускає винятків назовні (fail-safe).
36
- - За певних помилок повертає порожнє значення (напр. `null`) замість винятку.
37
- - Свідомо пропускає шляхи: `.github`, `.git`.