habit-hooks 0.2.0 → 1.0.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/README.md +17 -226
  2. package/bin/habit-hooks.js +32 -0
  3. package/package.json +11 -44
  4. package/LICENSE.md +0 -21
  5. package/dist/baseline/auto-prune.d.ts +0 -4
  6. package/dist/baseline/auto-prune.js +0 -38
  7. package/dist/baseline/auto-prune.js.map +0 -1
  8. package/dist/baseline/commands.d.ts +0 -12
  9. package/dist/baseline/commands.js +0 -125
  10. package/dist/baseline/commands.js.map +0 -1
  11. package/dist/baseline/file-hash.d.ts +0 -2
  12. package/dist/baseline/file-hash.js +0 -25
  13. package/dist/baseline/file-hash.js.map +0 -1
  14. package/dist/baseline/filter.d.ts +0 -9
  15. package/dist/baseline/filter.js +0 -18
  16. package/dist/baseline/filter.js.map +0 -1
  17. package/dist/baseline/reap.d.ts +0 -6
  18. package/dist/baseline/reap.js +0 -22
  19. package/dist/baseline/reap.js.map +0 -1
  20. package/dist/baseline/snooze-index.d.ts +0 -5
  21. package/dist/baseline/snooze-index.js +0 -65
  22. package/dist/baseline/snooze-index.js.map +0 -1
  23. package/dist/baseline/store.d.ts +0 -18
  24. package/dist/baseline/store.js +0 -106
  25. package/dist/baseline/store.js.map +0 -1
  26. package/dist/checks/comment-check.d.ts +0 -3
  27. package/dist/checks/comment-check.js +0 -85
  28. package/dist/checks/comment-check.js.map +0 -1
  29. package/dist/checks/eslint-wrap.d.ts +0 -2
  30. package/dist/checks/eslint-wrap.js +0 -107
  31. package/dist/checks/eslint-wrap.js.map +0 -1
  32. package/dist/checks/jscpd-wrap.d.ts +0 -9
  33. package/dist/checks/jscpd-wrap.js +0 -159
  34. package/dist/checks/jscpd-wrap.js.map +0 -1
  35. package/dist/checks/knip-resolve.d.ts +0 -4
  36. package/dist/checks/knip-resolve.js +0 -49
  37. package/dist/checks/knip-resolve.js.map +0 -1
  38. package/dist/checks/knip-schema.d.ts +0 -32
  39. package/dist/checks/knip-schema.js +0 -24
  40. package/dist/checks/knip-schema.js.map +0 -1
  41. package/dist/checks/knip-wrap.d.ts +0 -4
  42. package/dist/checks/knip-wrap.js +0 -135
  43. package/dist/checks/knip-wrap.js.map +0 -1
  44. package/dist/cli/baseline-commands.d.ts +0 -2
  45. package/dist/cli/baseline-commands.js +0 -61
  46. package/dist/cli/baseline-commands.js.map +0 -1
  47. package/dist/cli/emit.d.ts +0 -7
  48. package/dist/cli/emit.js +0 -8
  49. package/dist/cli/emit.js.map +0 -1
  50. package/dist/cli/init/apply-recommendations.d.ts +0 -3
  51. package/dist/cli/init/apply-recommendations.js +0 -76
  52. package/dist/cli/init/apply-recommendations.js.map +0 -1
  53. package/dist/cli/init/command-runner.d.ts +0 -6
  54. package/dist/cli/init/command-runner.js +0 -22
  55. package/dist/cli/init/command-runner.js.map +0 -1
  56. package/dist/cli/init/completion-report.d.ts +0 -11
  57. package/dist/cli/init/completion-report.js +0 -98
  58. package/dist/cli/init/completion-report.js.map +0 -1
  59. package/dist/cli/init/ctx.d.ts +0 -12
  60. package/dist/cli/init/ctx.js +0 -16
  61. package/dist/cli/init/ctx.js.map +0 -1
  62. package/dist/cli/init/detect.d.ts +0 -10
  63. package/dist/cli/init/detect.js +0 -69
  64. package/dist/cli/init/detect.js.map +0 -1
  65. package/dist/cli/init/git-hook.d.ts +0 -7
  66. package/dist/cli/init/git-hook.js +0 -52
  67. package/dist/cli/init/git-hook.js.map +0 -1
  68. package/dist/cli/init/install-commands.d.ts +0 -8
  69. package/dist/cli/init/install-commands.js +0 -82
  70. package/dist/cli/init/install-commands.js.map +0 -1
  71. package/dist/cli/init/package-scripts.d.ts +0 -6
  72. package/dist/cli/init/package-scripts.js +0 -55
  73. package/dist/cli/init/package-scripts.js.map +0 -1
  74. package/dist/cli/init/prompts.d.ts +0 -9
  75. package/dist/cli/init/prompts.js +0 -33
  76. package/dist/cli/init/prompts.js.map +0 -1
  77. package/dist/cli/init/recommendations.d.ts +0 -14
  78. package/dist/cli/init/recommendations.js +0 -66
  79. package/dist/cli/init/recommendations.js.map +0 -1
  80. package/dist/cli/init/report-language.d.ts +0 -1
  81. package/dist/cli/init/report-language.js +0 -12
  82. package/dist/cli/init/report-language.js.map +0 -1
  83. package/dist/cli/init/reporters.d.ts +0 -12
  84. package/dist/cli/init/reporters.js +0 -44
  85. package/dist/cli/init/reporters.js.map +0 -1
  86. package/dist/cli/init/run.d.ts +0 -17
  87. package/dist/cli/init/run.js +0 -123
  88. package/dist/cli/init/run.js.map +0 -1
  89. package/dist/cli/init/scaffold-baseline.d.ts +0 -4
  90. package/dist/cli/init/scaffold-baseline.js +0 -11
  91. package/dist/cli/init/scaffold-baseline.js.map +0 -1
  92. package/dist/cli/init/scaffold-config.d.ts +0 -20
  93. package/dist/cli/init/scaffold-config.js +0 -59
  94. package/dist/cli/init/scaffold-config.js.map +0 -1
  95. package/dist/cli/init/scaffold-eslint-config.d.ts +0 -2
  96. package/dist/cli/init/scaffold-eslint-config.js +0 -12
  97. package/dist/cli/init/scaffold-eslint-config.js.map +0 -1
  98. package/dist/cli/init/scaffold-jscpd-config.d.ts +0 -3
  99. package/dist/cli/init/scaffold-jscpd-config.js +0 -12
  100. package/dist/cli/init/scaffold-jscpd-config.js.map +0 -1
  101. package/dist/cli/init/scaffold-knip-config.d.ts +0 -2
  102. package/dist/cli/init/scaffold-knip-config.js +0 -12
  103. package/dist/cli/init/scaffold-knip-config.js.map +0 -1
  104. package/dist/cli/init/scaffold-ruff-config.d.ts +0 -2
  105. package/dist/cli/init/scaffold-ruff-config.js +0 -12
  106. package/dist/cli/init/scaffold-ruff-config.js.map +0 -1
  107. package/dist/cli/init/skill.d.ts +0 -8
  108. package/dist/cli/init/skill.js +0 -39
  109. package/dist/cli/init/skill.js.map +0 -1
  110. package/dist/cli/init/snippet.d.ts +0 -2
  111. package/dist/cli/init/snippet.js +0 -31
  112. package/dist/cli/init/snippet.js.map +0 -1
  113. package/dist/cli/init/templates/eslint-config.d.ts +0 -2
  114. package/dist/cli/init/templates/eslint-config.js +0 -45
  115. package/dist/cli/init/templates/eslint-config.js.map +0 -1
  116. package/dist/cli/init/templates/jscpd-config.d.ts +0 -3
  117. package/dist/cli/init/templates/jscpd-config.js +0 -17
  118. package/dist/cli/init/templates/jscpd-config.js.map +0 -1
  119. package/dist/cli/init/templates/knip-config.d.ts +0 -2
  120. package/dist/cli/init/templates/knip-config.js +0 -8
  121. package/dist/cli/init/templates/knip-config.js.map +0 -1
  122. package/dist/cli/init/templates/ruff-config.d.ts +0 -2
  123. package/dist/cli/init/templates/ruff-config.js +0 -16
  124. package/dist/cli/init/templates/ruff-config.js.map +0 -1
  125. package/dist/cli/init/tool-steps.d.ts +0 -2
  126. package/dist/cli/init/tool-steps.js +0 -78
  127. package/dist/cli/init/tool-steps.js.map +0 -1
  128. package/dist/cli/init-command.d.ts +0 -2
  129. package/dist/cli/init-command.js +0 -59
  130. package/dist/cli/init-command.js.map +0 -1
  131. package/dist/cli.d.ts +0 -2
  132. package/dist/cli.js +0 -101
  133. package/dist/cli.js.map +0 -1
  134. package/dist/config/catalogue-unused.d.ts +0 -2
  135. package/dist/config/catalogue-unused.js +0 -39
  136. package/dist/config/catalogue-unused.js.map +0 -1
  137. package/dist/config/catalogue.d.ts +0 -2
  138. package/dist/config/catalogue.js +0 -163
  139. package/dist/config/catalogue.js.map +0 -1
  140. package/dist/config/defaults.d.ts +0 -4
  141. package/dist/config/defaults.js +0 -12
  142. package/dist/config/defaults.js.map +0 -1
  143. package/dist/config/jiti-loader.d.ts +0 -1
  144. package/dist/config/jiti-loader.js +0 -13
  145. package/dist/config/jiti-loader.js.map +0 -1
  146. package/dist/config/load.d.ts +0 -9
  147. package/dist/config/load.js +0 -54
  148. package/dist/config/load.js.map +0 -1
  149. package/dist/config/merge.d.ts +0 -3
  150. package/dist/config/merge.js +0 -91
  151. package/dist/config/merge.js.map +0 -1
  152. package/dist/config/schema.d.ts +0 -41
  153. package/dist/config/schema.js +0 -4
  154. package/dist/config/schema.js.map +0 -1
  155. package/dist/config/tool-smells.d.ts +0 -14
  156. package/dist/config/tool-smells.js +0 -69
  157. package/dist/config/tool-smells.js.map +0 -1
  158. package/dist/config/validate.d.ts +0 -2
  159. package/dist/config/validate.js +0 -159
  160. package/dist/config/validate.js.map +0 -1
  161. package/dist/detect/package-json.d.ts +0 -1
  162. package/dist/detect/package-json.js +0 -15
  163. package/dist/detect/package-json.js.map +0 -1
  164. package/dist/detect/path.d.ts +0 -1
  165. package/dist/detect/path.js +0 -14
  166. package/dist/detect/path.js.map +0 -1
  167. package/dist/detect/tool.d.ts +0 -10
  168. package/dist/detect/tool.js +0 -75
  169. package/dist/detect/tool.js.map +0 -1
  170. package/dist/discover.d.ts +0 -2
  171. package/dist/discover.js +0 -14
  172. package/dist/discover.js.map +0 -1
  173. package/dist/git/exec.d.ts +0 -8
  174. package/dist/git/exec.js +0 -48
  175. package/dist/git/exec.js.map +0 -1
  176. package/dist/git/resolve-scope.d.ts +0 -15
  177. package/dist/git/resolve-scope.js +0 -89
  178. package/dist/git/resolve-scope.js.map +0 -1
  179. package/dist/git/scope.d.ts +0 -7
  180. package/dist/git/scope.js +0 -58
  181. package/dist/git/scope.js.map +0 -1
  182. package/dist/guide/command.d.ts +0 -6
  183. package/dist/guide/command.js +0 -20
  184. package/dist/guide/command.js.map +0 -1
  185. package/dist/guide/guide.d.ts +0 -11
  186. package/dist/guide/guide.js +0 -82
  187. package/dist/guide/guide.js.map +0 -1
  188. package/dist/guide/render.d.ts +0 -3
  189. package/dist/guide/render.js +0 -14
  190. package/dist/guide/render.js.map +0 -1
  191. package/dist/index.d.ts +0 -1
  192. package/dist/index.js +0 -2
  193. package/dist/index.js.map +0 -1
  194. package/dist/mapper/mapper.d.ts +0 -34
  195. package/dist/mapper/mapper.js +0 -80
  196. package/dist/mapper/mapper.js.map +0 -1
  197. package/dist/prompts/loader.d.ts +0 -6
  198. package/dist/prompts/loader.js +0 -27
  199. package/dist/prompts/loader.js.map +0 -1
  200. package/dist/prompts/packaged-dir.d.ts +0 -1
  201. package/dist/prompts/packaged-dir.js +0 -10
  202. package/dist/prompts/packaged-dir.js.map +0 -1
  203. package/dist/prompts/registry.d.ts +0 -3
  204. package/dist/prompts/registry.js +0 -43
  205. package/dist/prompts/registry.js.map +0 -1
  206. package/dist/rule-files.d.ts +0 -2
  207. package/dist/rule-files.js +0 -22
  208. package/dist/rule-files.js.map +0 -1
  209. package/dist/rules/registry.d.ts +0 -3
  210. package/dist/rules/registry.js +0 -37
  211. package/dist/rules/registry.js.map +0 -1
  212. package/dist/runner.d.ts +0 -15
  213. package/dist/runner.js +0 -141
  214. package/dist/runner.js.map +0 -1
  215. package/dist/sensors/adapter.d.ts +0 -17
  216. package/dist/sensors/adapter.js +0 -81
  217. package/dist/sensors/adapter.js.map +0 -1
  218. package/dist/sensors/deptry-sensor.d.ts +0 -3
  219. package/dist/sensors/deptry-sensor.js +0 -43
  220. package/dist/sensors/deptry-sensor.js.map +0 -1
  221. package/dist/sensors/line-count-sensor.d.ts +0 -3
  222. package/dist/sensors/line-count-sensor.js +0 -50
  223. package/dist/sensors/line-count-sensor.js.map +0 -1
  224. package/dist/sensors/needs-extraction.d.ts +0 -3
  225. package/dist/sensors/needs-extraction.js +0 -57
  226. package/dist/sensors/needs-extraction.js.map +0 -1
  227. package/dist/sensors/preset.d.ts +0 -17
  228. package/dist/sensors/preset.js +0 -57
  229. package/dist/sensors/preset.js.map +0 -1
  230. package/dist/sensors/python-preset.d.ts +0 -7
  231. package/dist/sensors/python-preset.js +0 -34
  232. package/dist/sensors/python-preset.js.map +0 -1
  233. package/dist/sensors/runner.d.ts +0 -12
  234. package/dist/sensors/runner.js +0 -94
  235. package/dist/sensors/runner.js.map +0 -1
  236. package/dist/sensors/types.d.ts +0 -15
  237. package/dist/sensors/types.js +0 -5
  238. package/dist/sensors/types.js.map +0 -1
  239. package/dist/types.d.ts +0 -44
  240. package/dist/types.js +0 -2
  241. package/dist/types.js.map +0 -1
  242. package/dist/wrap/notices.d.ts +0 -19
  243. package/dist/wrap/notices.js +0 -38
  244. package/dist/wrap/notices.js.map +0 -1
  245. package/dist/wrap/resolve.d.ts +0 -5
  246. package/dist/wrap/resolve.js +0 -9
  247. package/dist/wrap/resolve.js.map +0 -1
  248. package/dist/wrap/run.d.ts +0 -17
  249. package/dist/wrap/run.js +0 -31
  250. package/dist/wrap/run.js.map +0 -1
  251. package/dist/wrap/shell.d.ts +0 -15
  252. package/dist/wrap/shell.js +0 -50
  253. package/dist/wrap/shell.js.map +0 -1
  254. package/src/prompts/deep-nesting.md +0 -13
  255. package/src/prompts/duplicated-code.md +0 -9
  256. package/src/prompts/high-complexity.md +0 -9
  257. package/src/prompts/needs-extraction.md +0 -9
  258. package/src/prompts/non-essential-comment.md +0 -7
  259. package/src/prompts/non-null-assertion.md +0 -10
  260. package/src/prompts/oversized-file.md +0 -9
  261. package/src/prompts/oversized-function.issues.njk +0 -5
  262. package/src/prompts/oversized-function.md +0 -9
  263. package/src/prompts/parse-error.md +0 -5
  264. package/src/prompts/too-many-parameters.md +0 -9
  265. package/src/prompts/uncoached.md +0 -4
  266. package/src/skills/habit-hooks-prompting/SKILL.md +0 -37
  267. package/src/skills/habit-hooks-review/SKILL.md +0 -108
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool-steps.js","sourceRoot":"","sources":["../../../src/cli/init/tool-steps.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerInitCommand(program: Command): void;
@@ -1,59 +0,0 @@
1
- import { runInit } from './init/run.js';
2
- import { makeAutoPrompter, makeInteractivePrompter } from './init/prompts.js';
3
- import { emit } from './emit.js';
4
- const SUPPORTED_LANGUAGES = ['typescript', 'python'];
5
- function isLanguage(value) {
6
- return SUPPORTED_LANGUAGES.includes(value);
7
- }
8
- function pickPrompter(flags) {
9
- if (flags.yes === true)
10
- return makeAutoPrompter(true);
11
- if (flags.defaults === true)
12
- return makeAutoPrompter(false);
13
- if (flags.dryRun === true)
14
- return makeAutoPrompter(false);
15
- return makeInteractivePrompter();
16
- }
17
- function rejectLanguage(language) {
18
- emit({
19
- stdout: '',
20
- stderr: `habit-hooks: unsupported language '${language}'. Supported languages: ${SUPPORTED_LANGUAGES.join(', ')}\n`,
21
- exitCode: 2,
22
- });
23
- }
24
- function initOptions(prompter, language, flags) {
25
- return {
26
- prompter,
27
- dryRun: flags.dryRun === true,
28
- language,
29
- acceptRecommendations: flags.acceptRecommendations === true,
30
- };
31
- }
32
- async function execute(language, flags) {
33
- const prompter = pickPrompter(flags);
34
- try {
35
- emit(await runInit(process.cwd(), initOptions(prompter, language, flags)));
36
- }
37
- finally {
38
- prompter.close();
39
- }
40
- }
41
- async function handleInit(language, flags) {
42
- if (language !== undefined && !isLanguage(language)) {
43
- rejectLanguage(language);
44
- return;
45
- }
46
- await execute(language, flags);
47
- }
48
- const ACCEPT_DESCRIPTION = 'install missing tools and apply recommended settings to habit-hooks-owned configs';
49
- export function registerInitCommand(program) {
50
- program
51
- .command('init [language]')
52
- .description('detect tools, scaffold missing configs, write a slim habit-hooks config')
53
- .option('--yes', 'accept every prompt (non-interactive)')
54
- .option('--defaults', 'take the default answer for every prompt (non-interactive)')
55
- .option('--dry-run', 'show what would be written without writing')
56
- .option('--accept-recommendations', ACCEPT_DESCRIPTION)
57
- .action(handleInit);
58
- }
59
- //# sourceMappingURL=init-command.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init-command.js","sourceRoot":"","sources":["../../src/cli/init-command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAiB,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAUjC,MAAM,mBAAmB,GAAe,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;AAEjE,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAQ,mBAAgC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,YAAY,CAAC,KAAgB;IACpC,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI;QAAE,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACtD,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI;QAAE,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC5D,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI;QAAE,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC1D,OAAO,uBAAuB,EAAE,CAAC;AACnC,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB;IACtC,IAAI,CAAC;QACH,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,sCAAsC,QAAQ,2BAA2B,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QACnH,QAAQ,EAAE,CAAC;KACZ,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,QAAkB,EAAE,QAA8B,EAAE,KAAgB;IACvF,OAAO;QACL,QAAQ;QACR,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,IAAI;QAC7B,QAAQ;QACR,qBAAqB,EAAE,KAAK,CAAC,qBAAqB,KAAK,IAAI;KAC5D,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,QAA8B,EAAE,KAAgB;IACrE,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,CAAC;QACH,IAAI,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;YAAS,CAAC;QACT,QAAQ,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,QAA4B,EAAE,KAAgB;IACtE,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,cAAc,CAAC,QAAQ,CAAC,CAAC;QACzB,OAAO;IACT,CAAC;IACD,MAAM,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,kBAAkB,GACtB,mFAAmF,CAAC;AAEtF,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CAAC,yEAAyE,CAAC;SACtF,MAAM,CAAC,OAAO,EAAE,uCAAuC,CAAC;SACxD,MAAM,CAAC,YAAY,EAAE,4DAA4D,CAAC;SAClF,MAAM,CAAC,WAAW,EAAE,4CAA4C,CAAC;SACjE,MAAM,CAAC,0BAA0B,EAAE,kBAAkB,CAAC;SACtD,MAAM,CAAC,UAAU,CAAC,CAAC;AACxB,CAAC"}
package/dist/cli.d.ts DELETED
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
package/dist/cli.js DELETED
@@ -1,101 +0,0 @@
1
- #!/usr/bin/env node
2
- import { readFileSync } from 'node:fs';
3
- import { fileURLToPath } from 'node:url';
4
- import { dirname, join, resolve } from 'node:path';
5
- import { Command, CommanderError, Option } from 'commander';
6
- import { runWithAutoPrune } from './baseline/auto-prune.js';
7
- import { registerBaselineCommands } from './cli/baseline-commands.js';
8
- import { registerInitCommand } from './cli/init-command.js';
9
- const here = dirname(fileURLToPath(import.meta.url));
10
- const packageJsonPath = join(here, '..', 'package.json');
11
- const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
12
- function reportError(error) {
13
- const message = error instanceof Error ? error.message : String(error);
14
- process.stderr.write(`habit-hooks: ${message}\n`);
15
- process.exitCode = 2;
16
- }
17
- function parseLast(value) {
18
- const parsed = Number.parseInt(value, 10);
19
- if (!Number.isFinite(parsed) || parsed < 1 || String(parsed) !== value) {
20
- throw new Error(`--last must be a positive integer, got '${value}'`);
21
- }
22
- return parsed;
23
- }
24
- function toScopeFlags(opts) {
25
- const flags = {};
26
- if (opts.all === true)
27
- flags.all = true;
28
- if (opts.last !== undefined)
29
- flags.last = parseLast(opts.last);
30
- if (opts.since !== undefined)
31
- flags.since = opts.since;
32
- if (opts.branch !== undefined)
33
- flags.branch = opts.branch === true ? '' : opts.branch;
34
- return flags;
35
- }
36
- async function executeRun(opts) {
37
- const configPath = opts.config !== undefined ? resolve(process.cwd(), opts.config) : undefined;
38
- const scopeFlags = toScopeFlags(opts);
39
- const result = await runWithAutoPrune(process.cwd(), { configPath, scopeFlags });
40
- process.stdout.write(result.stdout);
41
- for (const line of result.stderr)
42
- process.stderr.write(`${line}\n`);
43
- process.exitCode = result.exitCode;
44
- }
45
- async function runWithOptions(opts) {
46
- if (opts.version === true) {
47
- process.stdout.write(`habit-hooks v${pkg.version}\n`);
48
- return;
49
- }
50
- try {
51
- await executeRun(opts);
52
- }
53
- catch (error) {
54
- reportError(error);
55
- }
56
- }
57
- const program = new Command();
58
- program
59
- .name('habit-hooks')
60
- .exitOverride()
61
- .option('--version', 'print version')
62
- .option('--config <path>', 'path to a habit-hooks config file')
63
- .addOption(new Option('--last <n>', 'check files changed in the last N commits').conflicts([
64
- 'branch',
65
- 'since',
66
- 'all',
67
- ]))
68
- .addOption(new Option('--branch [name]', 'check files changed vs branch (default: scope.branchBase)').conflicts(['last', 'since', 'all']))
69
- .addOption(new Option('--since <hash>', 'check files changed since the given commit').conflicts([
70
- 'last',
71
- 'branch',
72
- 'all',
73
- ]))
74
- .addOption(new Option('--all', 'force checking all files (ignore scope config)').conflicts([
75
- 'last',
76
- 'branch',
77
- 'since',
78
- ]))
79
- .action(async () => {
80
- await runWithOptions(program.opts());
81
- });
82
- registerBaselineCommands(program);
83
- registerInitCommand(program);
84
- function handleCommanderError(error) {
85
- if (error.code === 'commander.helpDisplayed' || error.code === 'commander.help') {
86
- return;
87
- }
88
- process.exitCode = 2;
89
- }
90
- try {
91
- await program.parseAsync(process.argv);
92
- }
93
- catch (error) {
94
- if (error instanceof CommanderError) {
95
- handleCommanderError(error);
96
- }
97
- else {
98
- reportError(error);
99
- }
100
- }
101
- //# sourceMappingURL=cli.js.map
package/dist/cli.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import type { Rule } from '../types.js';
2
- export declare const unusedRules: Rule[];
@@ -1,39 +0,0 @@
1
- // The "unused" family: knip (TS), deptry (unused-dependency), ruff (unused-import).
2
- export const unusedRules = [
3
- {
4
- id: 'unused-class-member',
5
- source: 'knip',
6
- severity: 'enforced',
7
- title: 'Unused class member',
8
- description: 'Class methods or properties not referenced anywhere are dead weight.',
9
- },
10
- {
11
- id: 'unused-file',
12
- source: 'knip',
13
- severity: 'enforced',
14
- title: 'Unused file',
15
- description: 'Files not referenced anywhere are dead weight; remove them.',
16
- },
17
- {
18
- id: 'unused-export',
19
- source: 'knip',
20
- severity: 'enforced',
21
- title: 'Unused export',
22
- description: 'Exports not imported anywhere are dead weight; drop the export or the symbol.',
23
- },
24
- {
25
- id: 'unused-dependency',
26
- source: 'knip',
27
- severity: 'enforced',
28
- title: 'Unused dependency',
29
- description: 'Dependencies declared but never used should be removed from the manifest.',
30
- },
31
- {
32
- id: 'unused-import',
33
- source: 'eslint',
34
- severity: 'enforced',
35
- title: 'Unused import',
36
- description: 'Imports that are never used should be removed.',
37
- },
38
- ];
39
- //# sourceMappingURL=catalogue-unused.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"catalogue-unused.js","sourceRoot":"","sources":["../../src/config/catalogue-unused.ts"],"names":[],"mappings":"AAEA,oFAAoF;AACpF,MAAM,CAAC,MAAM,WAAW,GAAW;IACjC;QACE,EAAE,EAAE,qBAAqB;QACzB,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,UAAU;QACpB,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,sEAAsE;KACpF;IACD;QACE,EAAE,EAAE,aAAa;QACjB,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,UAAU;QACpB,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,6DAA6D;KAC3E;IACD;QACE,EAAE,EAAE,eAAe;QACnB,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,UAAU;QACpB,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,+EAA+E;KAC7F;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,UAAU;QACpB,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,2EAA2E;KACzF;IACD;QACE,EAAE,EAAE,eAAe;QACnB,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,UAAU;QACpB,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,gDAAgD;KAC9D;CACF,CAAC"}
@@ -1,2 +0,0 @@
1
- import type { Rule } from '../types.js';
2
- export declare const defaultRules: Rule[];
@@ -1,163 +0,0 @@
1
- import { unusedRules } from './catalogue-unused.js';
2
- // The canonical, tool-independent smell catalogue (docs/smell-vocabulary.md).
3
- const tier1Rules = [
4
- {
5
- id: 'oversized-function',
6
- source: 'eslint',
7
- sourceRuleId: 'max-lines-per-function',
8
- severity: 'enforced',
9
- changedFilesOnly: true,
10
- title: 'Oversized function',
11
- description: 'Functions over 12 lines tend to bundle multiple responsibilities.',
12
- },
13
- {
14
- id: 'too-many-parameters',
15
- source: 'eslint',
16
- sourceRuleId: 'max-params',
17
- severity: 'enforced',
18
- title: 'Too many parameters',
19
- description: 'Functions with many parameters violate single responsibility.',
20
- },
21
- {
22
- id: 'high-complexity',
23
- source: 'eslint',
24
- sourceRuleId: 'complexity',
25
- severity: 'enforced',
26
- changedFilesOnly: true,
27
- title: 'High cyclomatic complexity',
28
- description: 'Complex functions are harder to understand, test, and maintain.',
29
- },
30
- {
31
- id: 'deep-nesting',
32
- source: 'eslint',
33
- sourceRuleId: 'max-depth',
34
- severity: 'enforced',
35
- changedFilesOnly: true,
36
- title: 'Deep nesting',
37
- description: 'Deeply nested blocks want guard clauses, early returns, or an extracted helper.',
38
- },
39
- {
40
- id: 'oversized-file',
41
- source: 'eslint',
42
- sourceRuleId: 'max-lines',
43
- severity: 'enforced',
44
- changedFilesOnly: true,
45
- title: 'Oversized file',
46
- description: 'Files over 200 lines are extremely difficult to maintain.',
47
- },
48
- ];
49
- const tier2Rules = [
50
- {
51
- id: 'unused-variable',
52
- source: 'eslint',
53
- sourceRuleId: 'no-unused-vars',
54
- severity: 'enforced',
55
- title: 'Unused variable',
56
- description: 'Unused bindings are dead weight; remove them or rename with a leading underscore if intentional.',
57
- },
58
- {
59
- id: 'loose-equality',
60
- source: 'eslint',
61
- sourceRuleId: 'eqeqeq',
62
- severity: 'enforced',
63
- title: 'Loose equality',
64
- description: 'Use === / !== to avoid silent coercion bugs.',
65
- },
66
- {
67
- id: 'var-declaration',
68
- source: 'eslint',
69
- sourceRuleId: 'no-var',
70
- severity: 'enforced',
71
- title: '`var` declaration',
72
- description: 'Use let or const; var hoists in surprising ways.',
73
- },
74
- {
75
- id: 'non-const-binding',
76
- source: 'eslint',
77
- sourceRuleId: 'prefer-const',
78
- severity: 'enforced',
79
- title: 'Reassignable binding never reassigned',
80
- description: 'A let that is never reassigned should be const.',
81
- },
82
- {
83
- id: 'duplicate-import',
84
- source: 'eslint',
85
- sourceRuleId: 'no-duplicate-imports',
86
- severity: 'enforced',
87
- title: 'Duplicate import',
88
- description: 'Merge multiple imports from the same module into a single statement.',
89
- },
90
- {
91
- id: 'warning-comment',
92
- source: 'eslint',
93
- sourceRuleId: 'no-warning-comments',
94
- severity: 'suggested',
95
- title: 'Warning comment (TODO/FIXME/…)',
96
- description: 'TODO / FIXME / XXX / HACK markers are unfinished work in the codebase.',
97
- },
98
- ];
99
- const tier3Rules = [
100
- {
101
- id: 'explicit-any',
102
- source: 'eslint',
103
- sourceRuleId: '@typescript-eslint/no-explicit-any',
104
- severity: 'suggested',
105
- changedFilesOnly: true,
106
- title: 'Explicit `any`',
107
- description: 'any disables the type checker; prefer a precise type or unknown plus a narrow.',
108
- },
109
- {
110
- id: 'non-null-assertion',
111
- source: 'eslint',
112
- sourceRuleId: '@typescript-eslint/no-non-null-assertion',
113
- severity: 'suggested',
114
- changedFilesOnly: true,
115
- title: 'Non-null assertion',
116
- description: 'The ! operator silences the type system; prove the value is present with a check.',
117
- },
118
- {
119
- id: 'redundant-type-annotation',
120
- source: 'eslint',
121
- sourceRuleId: '@typescript-eslint/no-inferrable-types',
122
- severity: 'enforced',
123
- title: 'Redundant type annotation',
124
- description: 'TypeScript infers obvious types; drop the annotation when it adds no information.',
125
- },
126
- ];
127
- const customRules = [
128
- {
129
- id: 'non-essential-comment',
130
- source: 'custom',
131
- severity: 'suggested',
132
- changedFilesOnly: true,
133
- title: 'Non-essential comment',
134
- description: 'Comments indicate code that is not self-documenting.',
135
- },
136
- {
137
- id: 'needs-extraction',
138
- source: 'custom',
139
- severity: 'enforced',
140
- changedFilesOnly: true,
141
- title: 'Needs extraction',
142
- description: 'A file that is both oversized and duplicated wants the shared block extracted.',
143
- },
144
- ];
145
- const jscpdRules = [
146
- {
147
- id: 'duplicated-code',
148
- source: 'jscpd',
149
- severity: 'suggested',
150
- changedFilesOnly: true,
151
- title: 'Duplicated code',
152
- description: 'Repeated blocks usually want a shared abstraction, not a copy-paste.',
153
- },
154
- ];
155
- export const defaultRules = [
156
- ...tier1Rules,
157
- ...tier2Rules,
158
- ...tier3Rules,
159
- ...customRules,
160
- ...jscpdRules,
161
- ...unusedRules,
162
- ];
163
- //# sourceMappingURL=catalogue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"catalogue.js","sourceRoot":"","sources":["../../src/config/catalogue.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type { HabitHooksConfig } from './schema.js';
2
- export { defaultRules } from './catalogue.js';
3
- export declare const TEST_FILE_EXCLUDE: string[];
4
- export declare const defaultConfig: HabitHooksConfig;
@@ -1,12 +0,0 @@
1
- export { defaultRules } from './catalogue.js';
2
- export const TEST_FILE_EXCLUDE = ['**/*.test.ts', '**/*.spec.ts', 'tests/**'];
3
- const CONFIG_FILE_EXCLUDE = ['habit-hooks.config.*'];
4
- export const defaultConfig = {
5
- smells: {
6
- 'oversized-function': { exclude: TEST_FILE_EXCLUDE },
7
- 'oversized-file': { exclude: TEST_FILE_EXCLUDE },
8
- 'duplicated-code': { exclude: TEST_FILE_EXCLUDE },
9
- 'non-essential-comment': { exclude: CONFIG_FILE_EXCLUDE },
10
- },
11
- };
12
- //# sourceMappingURL=defaults.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,cAAc,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;AAE9E,MAAM,mBAAmB,GAAG,CAAC,sBAAsB,CAAC,CAAC;AAErD,MAAM,CAAC,MAAM,aAAa,GAAqB;IAC7C,MAAM,EAAE;QACN,oBAAoB,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE;QACpD,gBAAgB,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE;QAChD,iBAAiB,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE;QACjD,uBAAuB,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE;KAC1D;CACF,CAAC"}
@@ -1 +0,0 @@
1
- export declare function loadTsModule(absolutePath: string): Promise<unknown>;
@@ -1,13 +0,0 @@
1
- import { createJiti } from 'jiti';
2
- let cached = null;
3
- function getJiti() {
4
- if (cached)
5
- return cached;
6
- cached = createJiti(import.meta.url, { interopDefault: true });
7
- return cached;
8
- }
9
- export async function loadTsModule(absolutePath) {
10
- const jiti = getJiti();
11
- return jiti.import(absolutePath, { default: true });
12
- }
13
- //# sourceMappingURL=jiti-loader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jiti-loader.js","sourceRoot":"","sources":["../../src/config/jiti-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,MAAM,CAAC;AAE7C,IAAI,MAAM,GAAgB,IAAI,CAAC;AAE/B,SAAS,OAAO;IACd,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,YAAoB;IACrD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACtD,CAAC"}
@@ -1,9 +0,0 @@
1
- import type { HabitHooksConfig } from './schema.js';
2
- interface LoadedConfig {
3
- config: HabitHooksConfig;
4
- sourcePath: string | null;
5
- }
6
- export declare const RULES_DEPRECATION = "habit-hooks: config field 'rules' is deprecated \u2014 rename it to 'smells'. Support for 'rules' will be removed in a future release.";
7
- export declare function loadConfig(cwd: string): Promise<LoadedConfig>;
8
- export declare function loadConfigFromPath(path: string): Promise<LoadedConfig>;
9
- export {};
@@ -1,54 +0,0 @@
1
- import { existsSync, readFileSync } from 'node:fs';
2
- import { join } from 'node:path';
3
- import { pathToFileURL } from 'node:url';
4
- import { validateConfig } from './validate.js';
5
- import { loadTsModule } from './jiti-loader.js';
6
- const CONFIG_FILENAMES = [
7
- 'habit-hooks.config.ts',
8
- 'habit-hooks.config.mjs',
9
- 'habit-hooks.config.js',
10
- 'habit-hooks.config.json',
11
- ];
12
- export const RULES_DEPRECATION = "habit-hooks: config field 'rules' is deprecated — rename it to 'smells'. Support for 'rules' will be removed in a future release.";
13
- function findConfigFile(cwd) {
14
- for (const name of CONFIG_FILENAMES) {
15
- const candidate = join(cwd, name);
16
- if (existsSync(candidate))
17
- return candidate;
18
- }
19
- return null;
20
- }
21
- function unwrapDefault(mod) {
22
- if (mod && typeof mod === 'object' && 'default' in mod) {
23
- return mod.default;
24
- }
25
- return mod;
26
- }
27
- async function readConfigFile(path) {
28
- if (path.endsWith('.json')) {
29
- return JSON.parse(readFileSync(path, 'utf8'));
30
- }
31
- if (path.endsWith('.ts')) {
32
- return loadTsModule(path);
33
- }
34
- const mod = (await import(pathToFileURL(path).href));
35
- return unwrapDefault(mod);
36
- }
37
- export async function loadConfig(cwd) {
38
- const sourcePath = findConfigFile(cwd);
39
- if (sourcePath === null) {
40
- return { config: {}, sourcePath: null };
41
- }
42
- const raw = await readConfigFile(sourcePath);
43
- const config = validateConfig(raw);
44
- return { config, sourcePath };
45
- }
46
- export async function loadConfigFromPath(path) {
47
- if (!existsSync(path)) {
48
- throw new Error(`Config file not found: ${path}`);
49
- }
50
- const raw = await readConfigFile(path);
51
- const config = validateConfig(raw);
52
- return { config, sourcePath: path };
53
- }
54
- //# sourceMappingURL=load.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,gBAAgB,GAAG;IACvB,uBAAuB;IACvB,wBAAwB;IACxB,uBAAuB;IACvB,yBAAyB;CAC1B,CAAC;AAOF,MAAM,CAAC,MAAM,iBAAiB,GAC5B,mIAAmI,CAAC;AAEtI,SAAS,cAAc,CAAC,GAAW;IACjC,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAClC,IAAI,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,GAAY;IACjC,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;QACvD,OAAQ,GAA4B,CAAC,OAAO,CAAC;IAC/C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,IAAY;IACxC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAY,CAAC;IAChE,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW;IAC1C,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAY;IACnD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AACtC,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { Rule } from '../types.js';
2
- import { type HabitHooksConfig } from './schema.js';
3
- export declare function mergeRules(defaultRules: Rule[], ...overrideSources: (HabitHooksConfig['rules'] | undefined)[]): Rule[];
@@ -1,91 +0,0 @@
1
- import { isRuleDefinition, } from './schema.js';
2
- function pickDefined(source) {
3
- const result = {};
4
- for (const key of Object.keys(source)) {
5
- if (source[key] !== undefined)
6
- result[key] = source[key];
7
- }
8
- return result;
9
- }
10
- function stripMetaFields(override) {
11
- const { disabled, ...rest } = override;
12
- void disabled;
13
- return rest;
14
- }
15
- function applyOverride(base, override) {
16
- return { ...base, ...pickDefined(stripMetaFields(override)) };
17
- }
18
- function pickRuleCore(def) {
19
- return {
20
- source: def.source,
21
- sourceRuleId: def.sourceRuleId,
22
- severity: def.severity ?? 'suggested',
23
- changedFilesOnly: def.changedFilesOnly ?? false,
24
- };
25
- }
26
- function pickRuleDisplay(id, def) {
27
- return {
28
- title: def.title ?? id,
29
- description: def.description ?? '',
30
- include: def.include,
31
- exclude: def.exclude,
32
- fix: def.fix,
33
- };
34
- }
35
- function buildCustomRule(id, def) {
36
- return { id, ...pickRuleCore(def), ...pickRuleDisplay(id, def) };
37
- }
38
- function mergeEntry(existing, entry) {
39
- if (!existing || isRuleDefinition(existing) || isRuleDefinition(entry))
40
- return entry;
41
- return { ...existing, ...entry };
42
- }
43
- function mergeOverrideMaps(sources) {
44
- const merged = new Map();
45
- for (const source of sources) {
46
- if (!source)
47
- continue;
48
- for (const [id, entry] of Object.entries(source)) {
49
- merged.set(id, mergeEntry(merged.get(id), entry));
50
- }
51
- }
52
- return merged;
53
- }
54
- function resolveDefaultRule(rule, entry) {
55
- if (entry === undefined)
56
- return rule;
57
- if (isRuleDefinition(entry))
58
- return buildCustomRule(rule.id, entry);
59
- if (entry.disabled === true)
60
- return null;
61
- return applyOverride(rule, entry);
62
- }
63
- function resolveNewRule(id, entry) {
64
- if (!isRuleDefinition(entry)) {
65
- throw new Error(`Invalid habit-hooks config: rules.${id} is not a built-in rule and is missing 'source'`);
66
- }
67
- if (entry.disabled === true)
68
- return null;
69
- return buildCustomRule(id, entry);
70
- }
71
- function applyDefaults(defaultRules, entries, seen) {
72
- return defaultRules.flatMap((rule) => {
73
- seen.add(rule.id);
74
- const resolved = resolveDefaultRule(rule, entries.get(rule.id));
75
- return resolved ? [resolved] : [];
76
- });
77
- }
78
- function collectNewRules(entries, seen) {
79
- return [...entries].flatMap(([id, entry]) => {
80
- if (seen.has(id))
81
- return [];
82
- const resolved = resolveNewRule(id, entry);
83
- return resolved ? [resolved] : [];
84
- });
85
- }
86
- export function mergeRules(defaultRules, ...overrideSources) {
87
- const entries = mergeOverrideMaps(overrideSources);
88
- const seen = new Set();
89
- return [...applyDefaults(defaultRules, entries, seen), ...collectNewRules(entries, seen)];
90
- }
91
- //# sourceMappingURL=merge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/config/merge.ts"],"names":[],"mappings":"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"}