check-my-toolkit 0.1.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 (122) hide show
  1. package/README.md +2 -0
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +116 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/code/audit.d.ts +14 -0
  7. package/dist/code/audit.d.ts.map +1 -0
  8. package/dist/code/audit.js +130 -0
  9. package/dist/code/audit.js.map +1 -0
  10. package/dist/code/index.d.ts +13 -0
  11. package/dist/code/index.d.ts.map +1 -0
  12. package/dist/code/index.js +49 -0
  13. package/dist/code/index.js.map +1 -0
  14. package/dist/code/linting.d.ts +10 -0
  15. package/dist/code/linting.d.ts.map +1 -0
  16. package/dist/code/linting.js +233 -0
  17. package/dist/code/linting.js.map +1 -0
  18. package/dist/code/tools/base.d.ts +52 -0
  19. package/dist/code/tools/base.d.ts.map +1 -0
  20. package/dist/code/tools/base.js +83 -0
  21. package/dist/code/tools/base.js.map +1 -0
  22. package/dist/code/tools/eslint.d.ts +15 -0
  23. package/dist/code/tools/eslint.d.ts.map +1 -0
  24. package/dist/code/tools/eslint.js +79 -0
  25. package/dist/code/tools/eslint.js.map +1 -0
  26. package/dist/code/tools/index.d.ts +5 -0
  27. package/dist/code/tools/index.d.ts.map +1 -0
  28. package/dist/code/tools/index.js +5 -0
  29. package/dist/code/tools/index.js.map +1 -0
  30. package/dist/code/tools/ruff.d.ts +26 -0
  31. package/dist/code/tools/ruff.d.ts.map +1 -0
  32. package/dist/code/tools/ruff.js +149 -0
  33. package/dist/code/tools/ruff.js.map +1 -0
  34. package/dist/code/tools/tsc.d.ts +20 -0
  35. package/dist/code/tools/tsc.d.ts.map +1 -0
  36. package/dist/code/tools/tsc.js +90 -0
  37. package/dist/code/tools/tsc.js.map +1 -0
  38. package/dist/code/types.d.ts +6 -0
  39. package/dist/code/types.d.ts.map +1 -0
  40. package/dist/code/types.js +132 -0
  41. package/dist/code/types.js.map +1 -0
  42. package/dist/config/index.d.ts +3 -0
  43. package/dist/config/index.d.ts.map +1 -0
  44. package/dist/config/index.js +3 -0
  45. package/dist/config/index.js.map +1 -0
  46. package/dist/config/loader.d.ts +21 -0
  47. package/dist/config/loader.d.ts.map +1 -0
  48. package/dist/config/loader.js +118 -0
  49. package/dist/config/loader.js.map +1 -0
  50. package/dist/config/schema.d.ts +1217 -0
  51. package/dist/config/schema.d.ts.map +1 -0
  52. package/dist/config/schema.js +190 -0
  53. package/dist/config/schema.js.map +1 -0
  54. package/dist/index.d.ts +8 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +16 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/output/index.d.ts +15 -0
  59. package/dist/output/index.d.ts.map +1 -0
  60. package/dist/output/index.js +98 -0
  61. package/dist/output/index.js.map +1 -0
  62. package/dist/src/cli.d.ts +3 -0
  63. package/dist/src/cli.d.ts.map +1 -0
  64. package/dist/src/cli.js +116 -0
  65. package/dist/src/cli.js.map +1 -0
  66. package/dist/src/code/index.d.ts +13 -0
  67. package/dist/src/code/index.d.ts.map +1 -0
  68. package/dist/src/code/index.js +53 -0
  69. package/dist/src/code/index.js.map +1 -0
  70. package/dist/src/code/tools/base.d.ts +52 -0
  71. package/dist/src/code/tools/base.d.ts.map +1 -0
  72. package/dist/src/code/tools/base.js +83 -0
  73. package/dist/src/code/tools/base.js.map +1 -0
  74. package/dist/src/code/tools/eslint.d.ts +15 -0
  75. package/dist/src/code/tools/eslint.d.ts.map +1 -0
  76. package/dist/src/code/tools/eslint.js +79 -0
  77. package/dist/src/code/tools/eslint.js.map +1 -0
  78. package/dist/src/code/tools/index.d.ts +5 -0
  79. package/dist/src/code/tools/index.d.ts.map +1 -0
  80. package/dist/src/code/tools/index.js +5 -0
  81. package/dist/src/code/tools/index.js.map +1 -0
  82. package/dist/src/code/tools/ruff.d.ts +26 -0
  83. package/dist/src/code/tools/ruff.d.ts.map +1 -0
  84. package/dist/src/code/tools/ruff.js +149 -0
  85. package/dist/src/code/tools/ruff.js.map +1 -0
  86. package/dist/src/code/tools/tsc.d.ts +21 -0
  87. package/dist/src/code/tools/tsc.d.ts.map +1 -0
  88. package/dist/src/code/tools/tsc.js +94 -0
  89. package/dist/src/code/tools/tsc.js.map +1 -0
  90. package/dist/src/config/index.d.ts +3 -0
  91. package/dist/src/config/index.d.ts.map +1 -0
  92. package/dist/src/config/index.js +3 -0
  93. package/dist/src/config/index.js.map +1 -0
  94. package/dist/src/config/loader.d.ts +22 -0
  95. package/dist/src/config/loader.d.ts.map +1 -0
  96. package/dist/src/config/loader.js +124 -0
  97. package/dist/src/config/loader.js.map +1 -0
  98. package/dist/src/config/schema.d.ts +503 -0
  99. package/dist/src/config/schema.d.ts.map +1 -0
  100. package/dist/src/config/schema.js +190 -0
  101. package/dist/src/config/schema.js.map +1 -0
  102. package/dist/src/index.d.ts +8 -0
  103. package/dist/src/index.d.ts.map +1 -0
  104. package/dist/src/index.js +16 -0
  105. package/dist/src/index.js.map +1 -0
  106. package/dist/src/output/index.d.ts +15 -0
  107. package/dist/src/output/index.d.ts.map +1 -0
  108. package/dist/src/output/index.js +96 -0
  109. package/dist/src/output/index.js.map +1 -0
  110. package/dist/src/types/index.d.ts +96 -0
  111. package/dist/src/types/index.d.ts.map +1 -0
  112. package/dist/src/types/index.js +89 -0
  113. package/dist/src/types/index.js.map +1 -0
  114. package/dist/tests/e2e/e2e.test.d.ts +2 -0
  115. package/dist/tests/e2e/e2e.test.d.ts.map +1 -0
  116. package/dist/tests/e2e/e2e.test.js +398 -0
  117. package/dist/tests/e2e/e2e.test.js.map +1 -0
  118. package/dist/types/index.d.ts +96 -0
  119. package/dist/types/index.d.ts.map +1 -0
  120. package/dist/types/index.js +89 -0
  121. package/dist/types/index.js.map +1 -0
  122. package/package.json +57 -0
@@ -0,0 +1,132 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import { execa } from "execa";
4
+ /**
5
+ * Parse tsc output into structured diagnostics
6
+ * Format: file(line,col): error TSxxxx: message
7
+ */
8
+ function parseTscOutput(output, projectRoot) {
9
+ const diagnostics = [];
10
+ const lines = output.split("\n");
11
+ // Regex to match tsc error format: file(line,col): error TSxxxx: message
12
+ const errorRegex = /^(.+?)\((\d+),(\d+)\):\s*error\s+TS(\d+):\s*(.+)$/;
13
+ for (const line of lines) {
14
+ const match = errorRegex.exec(line);
15
+ if (match) {
16
+ const [, filePath, lineNum, colNum, code, message] = match;
17
+ diagnostics.push({
18
+ file: path.relative(projectRoot, filePath),
19
+ line: parseInt(lineNum, 10),
20
+ column: parseInt(colNum, 10),
21
+ code: parseInt(code, 10),
22
+ message: message.trim(),
23
+ });
24
+ }
25
+ }
26
+ return diagnostics;
27
+ }
28
+ /**
29
+ * Run TypeScript type checking and return violations
30
+ */
31
+ export async function runTsc(projectRoot) {
32
+ const startTime = Date.now();
33
+ const violations = [];
34
+ // Check if tsconfig.json exists
35
+ const tsconfigPath = path.join(projectRoot, "tsconfig.json");
36
+ if (!fs.existsSync(tsconfigPath)) {
37
+ return {
38
+ name: "TypeScript",
39
+ rule: "code.types",
40
+ passed: true,
41
+ violations: [],
42
+ skipped: true,
43
+ skipReason: "No tsconfig.json found",
44
+ duration: Date.now() - startTime,
45
+ };
46
+ }
47
+ try {
48
+ // Run tsc with --noEmit to only check types
49
+ const result = await execa("npx", ["tsc", "--noEmit"], {
50
+ cwd: projectRoot,
51
+ reject: false,
52
+ timeout: 5 * 60 * 1000, // 5 minutes
53
+ });
54
+ // tsc exits with 0 if no errors, non-zero if errors
55
+ if (result.exitCode === 0) {
56
+ return {
57
+ name: "TypeScript",
58
+ rule: "code.types",
59
+ passed: true,
60
+ violations: [],
61
+ skipped: false,
62
+ duration: Date.now() - startTime,
63
+ };
64
+ }
65
+ // Parse the output for errors
66
+ const diagnostics = parseTscOutput(result.stdout, projectRoot);
67
+ // Convert to violations
68
+ for (const diag of diagnostics) {
69
+ violations.push({
70
+ rule: "code.types.tsc",
71
+ tool: "tsc",
72
+ file: diag.file,
73
+ line: diag.line,
74
+ column: diag.column,
75
+ message: diag.message,
76
+ code: `TS${diag.code}`,
77
+ severity: "error",
78
+ });
79
+ }
80
+ // If we couldn't parse any diagnostics but tsc failed, report the raw output
81
+ if (violations.length === 0 && result.exitCode !== 0) {
82
+ const errorOutput = result.stdout || result.stderr;
83
+ if (errorOutput) {
84
+ violations.push({
85
+ rule: "code.types.tsc",
86
+ tool: "tsc",
87
+ message: `TypeScript error: ${errorOutput.slice(0, 500)}`,
88
+ severity: "error",
89
+ });
90
+ }
91
+ }
92
+ return {
93
+ name: "TypeScript",
94
+ rule: "code.types",
95
+ passed: violations.length === 0,
96
+ violations,
97
+ skipped: false,
98
+ duration: Date.now() - startTime,
99
+ };
100
+ }
101
+ catch (error) {
102
+ // tsc not installed or other error
103
+ const errorMessage = error instanceof Error ? error.message : "Unknown error";
104
+ if (errorMessage.includes("ENOENT") || errorMessage.includes("not found")) {
105
+ return {
106
+ name: "TypeScript",
107
+ rule: "code.types",
108
+ passed: true,
109
+ violations: [],
110
+ skipped: true,
111
+ skipReason: "TypeScript not installed",
112
+ duration: Date.now() - startTime,
113
+ };
114
+ }
115
+ return {
116
+ name: "TypeScript",
117
+ rule: "code.types",
118
+ passed: false,
119
+ violations: [
120
+ {
121
+ rule: "code.types.tsc",
122
+ tool: "tsc",
123
+ message: `TypeScript error: ${errorMessage}`,
124
+ severity: "error",
125
+ },
126
+ ],
127
+ skipped: false,
128
+ duration: Date.now() - startTime,
129
+ };
130
+ }
131
+ }
132
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/code/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { ConfigError, findConfigFile, getProjectRoot, loadConfig } from "./loader.js";
2
+ export { Config, configSchema, defaultConfig } from "./schema.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAC,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { ConfigError, findConfigFile, getProjectRoot, loadConfig } from "./loader.js";
2
+ export { configSchema, defaultConfig } from "./schema.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAC,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrF,OAAO,EAAU,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { type Config } from "./schema.js";
2
+ export interface LoadConfigResult {
3
+ config: Config;
4
+ configPath: string;
5
+ }
6
+ export declare class ConfigError extends Error {
7
+ constructor(message: string);
8
+ }
9
+ /**
10
+ * Find check.toml by walking up the directory tree
11
+ */
12
+ export declare function findConfigFile(startDir?: string): string | null;
13
+ /**
14
+ * Load and parse check.toml configuration
15
+ */
16
+ export declare function loadConfig(configPath?: string): LoadConfigResult;
17
+ /**
18
+ * Get the project root directory (where check.toml is located)
19
+ */
20
+ export declare function getProjectRoot(configPath: string): string;
21
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,MAAM,EAA+B,MAAM,aAAa,CAAC;AAEvE,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAmB9E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,gBAAgB,CA2ChE;AA6CD;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEzD"}
@@ -0,0 +1,118 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import TOML from "@iarna/toml";
4
+ import { configSchema, defaultConfig } from "./schema.js";
5
+ export class ConfigError extends Error {
6
+ constructor(message) {
7
+ super(message);
8
+ this.name = "ConfigError";
9
+ }
10
+ }
11
+ /**
12
+ * Find check.toml by walking up the directory tree
13
+ */
14
+ export function findConfigFile(startDir = process.cwd()) {
15
+ let currentDir = path.resolve(startDir);
16
+ const root = path.parse(currentDir).root;
17
+ while (currentDir !== root) {
18
+ const configPath = path.join(currentDir, "check.toml");
19
+ if (fs.existsSync(configPath)) {
20
+ return configPath;
21
+ }
22
+ currentDir = path.dirname(currentDir);
23
+ }
24
+ // Check root directory too
25
+ const rootConfig = path.join(root, "check.toml");
26
+ if (fs.existsSync(rootConfig)) {
27
+ return rootConfig;
28
+ }
29
+ return null;
30
+ }
31
+ /**
32
+ * Load and parse check.toml configuration
33
+ */
34
+ export function loadConfig(configPath) {
35
+ // Find config file if not specified
36
+ const resolvedPath = configPath ?? findConfigFile();
37
+ if (!resolvedPath) {
38
+ throw new ConfigError("No check.toml found. Run 'cm init' to create one or specify --config path.");
39
+ }
40
+ if (!fs.existsSync(resolvedPath)) {
41
+ throw new ConfigError(`Config file not found: ${resolvedPath}`);
42
+ }
43
+ // Read and parse TOML
44
+ let rawConfig;
45
+ try {
46
+ const content = fs.readFileSync(resolvedPath, "utf-8");
47
+ rawConfig = TOML.parse(content);
48
+ }
49
+ catch (error) {
50
+ if (error instanceof Error) {
51
+ throw new ConfigError(`Failed to parse check.toml: ${error.message}`);
52
+ }
53
+ throw new ConfigError("Failed to parse check.toml");
54
+ }
55
+ // Validate with Zod
56
+ const result = configSchema.safeParse(rawConfig);
57
+ if (!result.success) {
58
+ const errors = result.error.errors
59
+ .map((e) => ` - ${e.path.join(".")}: ${e.message}`)
60
+ .join("\n");
61
+ throw new ConfigError(`Invalid check.toml configuration:\n${errors}`);
62
+ }
63
+ // Merge with defaults
64
+ const config = mergeWithDefaults(result.data);
65
+ return {
66
+ config,
67
+ configPath: resolvedPath,
68
+ };
69
+ }
70
+ /**
71
+ * Deep merge config with defaults
72
+ */
73
+ function mergeWithDefaults(config) {
74
+ return {
75
+ code: {
76
+ linting: {
77
+ eslint: {
78
+ enabled: config.code?.linting?.eslint?.enabled ?? defaultConfig.code?.linting?.eslint?.enabled ?? false,
79
+ rules: config.code?.linting?.eslint?.rules,
80
+ },
81
+ ruff: {
82
+ enabled: config.code?.linting?.ruff?.enabled ?? defaultConfig.code?.linting?.ruff?.enabled ?? false,
83
+ "line-length": config.code?.linting?.ruff?.["line-length"],
84
+ lint: config.code?.linting?.ruff?.lint,
85
+ },
86
+ },
87
+ types: {
88
+ tsc: {
89
+ enabled: config.code?.types?.tsc?.enabled ?? defaultConfig.code?.types?.tsc?.enabled ?? false,
90
+ strict: config.code?.types?.tsc?.strict,
91
+ noImplicitAny: config.code?.types?.tsc?.noImplicitAny,
92
+ strictNullChecks: config.code?.types?.tsc?.strictNullChecks,
93
+ },
94
+ },
95
+ complexity: config.code?.complexity ?? defaultConfig.code?.complexity ?? {},
96
+ files: {
97
+ repo: config.code?.files?.repo ?? defaultConfig.code?.files?.repo ?? [],
98
+ tooling: config.code?.files?.tooling ?? defaultConfig.code?.files?.tooling ?? [],
99
+ docs: config.code?.files?.docs ?? defaultConfig.code?.files?.docs ?? [],
100
+ },
101
+ },
102
+ process: {
103
+ pr: config.process?.pr ?? defaultConfig.process?.pr ?? {},
104
+ branches: config.process?.branches ?? defaultConfig.process?.branches ?? {},
105
+ tickets: config.process?.tickets ?? defaultConfig.process?.tickets ?? {},
106
+ },
107
+ stack: {
108
+ tools: config.stack?.tools ?? defaultConfig.stack?.tools ?? {},
109
+ },
110
+ };
111
+ }
112
+ /**
113
+ * Get the project root directory (where check.toml is located)
114
+ */
115
+ export function getProjectRoot(configPath) {
116
+ return path.dirname(configPath);
117
+ }
118
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}