check-my-toolkit 0.1.0 → 0.1.2

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 (90) hide show
  1. package/README.md +157 -1
  2. package/dist/cli.js +81 -27
  3. package/dist/cli.js.map +1 -1
  4. package/dist/code/index.d.ts.map +1 -1
  5. package/dist/code/index.js +10 -6
  6. package/dist/code/index.js.map +1 -1
  7. package/dist/code/tools/tsc.d.ts +1 -0
  8. package/dist/code/tools/tsc.d.ts.map +1 -1
  9. package/dist/code/tools/tsc.js +18 -14
  10. package/dist/code/tools/tsc.js.map +1 -1
  11. package/dist/config/loader.d.ts +2 -1
  12. package/dist/config/loader.d.ts.map +1 -1
  13. package/dist/config/loader.js +68 -62
  14. package/dist/config/loader.js.map +1 -1
  15. package/dist/config/schema.d.ts +0 -714
  16. package/dist/config/schema.d.ts.map +1 -1
  17. package/dist/config/schema.js +16 -16
  18. package/dist/config/schema.js.map +1 -1
  19. package/dist/output/index.d.ts.map +1 -1
  20. package/dist/output/index.js +33 -34
  21. package/dist/output/index.js.map +1 -1
  22. package/package.json +11 -2
  23. package/dist/code/audit.d.ts +0 -14
  24. package/dist/code/audit.d.ts.map +0 -1
  25. package/dist/code/audit.js +0 -130
  26. package/dist/code/audit.js.map +0 -1
  27. package/dist/code/linting.d.ts +0 -10
  28. package/dist/code/linting.d.ts.map +0 -1
  29. package/dist/code/linting.js +0 -233
  30. package/dist/code/linting.js.map +0 -1
  31. package/dist/code/types.d.ts +0 -6
  32. package/dist/code/types.d.ts.map +0 -1
  33. package/dist/code/types.js +0 -132
  34. package/dist/code/types.js.map +0 -1
  35. package/dist/src/cli.d.ts +0 -3
  36. package/dist/src/cli.d.ts.map +0 -1
  37. package/dist/src/cli.js +0 -116
  38. package/dist/src/cli.js.map +0 -1
  39. package/dist/src/code/index.d.ts +0 -13
  40. package/dist/src/code/index.d.ts.map +0 -1
  41. package/dist/src/code/index.js +0 -53
  42. package/dist/src/code/index.js.map +0 -1
  43. package/dist/src/code/tools/base.d.ts +0 -52
  44. package/dist/src/code/tools/base.d.ts.map +0 -1
  45. package/dist/src/code/tools/base.js +0 -83
  46. package/dist/src/code/tools/base.js.map +0 -1
  47. package/dist/src/code/tools/eslint.d.ts +0 -15
  48. package/dist/src/code/tools/eslint.d.ts.map +0 -1
  49. package/dist/src/code/tools/eslint.js +0 -79
  50. package/dist/src/code/tools/eslint.js.map +0 -1
  51. package/dist/src/code/tools/index.d.ts +0 -5
  52. package/dist/src/code/tools/index.d.ts.map +0 -1
  53. package/dist/src/code/tools/index.js +0 -5
  54. package/dist/src/code/tools/index.js.map +0 -1
  55. package/dist/src/code/tools/ruff.d.ts +0 -26
  56. package/dist/src/code/tools/ruff.d.ts.map +0 -1
  57. package/dist/src/code/tools/ruff.js +0 -149
  58. package/dist/src/code/tools/ruff.js.map +0 -1
  59. package/dist/src/code/tools/tsc.d.ts +0 -21
  60. package/dist/src/code/tools/tsc.d.ts.map +0 -1
  61. package/dist/src/code/tools/tsc.js +0 -94
  62. package/dist/src/code/tools/tsc.js.map +0 -1
  63. package/dist/src/config/index.d.ts +0 -3
  64. package/dist/src/config/index.d.ts.map +0 -1
  65. package/dist/src/config/index.js +0 -3
  66. package/dist/src/config/index.js.map +0 -1
  67. package/dist/src/config/loader.d.ts +0 -22
  68. package/dist/src/config/loader.d.ts.map +0 -1
  69. package/dist/src/config/loader.js +0 -124
  70. package/dist/src/config/loader.js.map +0 -1
  71. package/dist/src/config/schema.d.ts +0 -503
  72. package/dist/src/config/schema.d.ts.map +0 -1
  73. package/dist/src/config/schema.js +0 -190
  74. package/dist/src/config/schema.js.map +0 -1
  75. package/dist/src/index.d.ts +0 -8
  76. package/dist/src/index.d.ts.map +0 -1
  77. package/dist/src/index.js +0 -16
  78. package/dist/src/index.js.map +0 -1
  79. package/dist/src/output/index.d.ts +0 -15
  80. package/dist/src/output/index.d.ts.map +0 -1
  81. package/dist/src/output/index.js +0 -96
  82. package/dist/src/output/index.js.map +0 -1
  83. package/dist/src/types/index.d.ts +0 -96
  84. package/dist/src/types/index.d.ts.map +0 -1
  85. package/dist/src/types/index.js +0 -89
  86. package/dist/src/types/index.js.map +0 -1
  87. package/dist/tests/e2e/e2e.test.d.ts +0 -2
  88. package/dist/tests/e2e/e2e.test.d.ts.map +0 -1
  89. package/dist/tests/e2e/e2e.test.js +0 -398
  90. package/dist/tests/e2e/e2e.test.js.map +0 -1
@@ -1,398 +0,0 @@
1
- import { execSync } from "node:child_process";
2
- import { describe, expect, it } from "vitest";
3
- const testCases = [
4
- // ============================================================
5
- // Linting: Violations expected
6
- // ============================================================
7
- {
8
- name: "default project with ESLint and Ruff violations",
9
- config: "tests/e2e/projects/default/check.toml",
10
- command: "check",
11
- expectedExitCode: 1,
12
- expectedPatterns: ["✗ ESLint:", "✗ Ruff:", "violation(s) found"],
13
- },
14
- {
15
- name: "typescript/default with ESLint violation",
16
- config: "tests/e2e/projects/typescript/default/check.toml",
17
- command: "check",
18
- expectedExitCode: 1,
19
- expectedPatterns: ["✗ ESLint:", "no-var"],
20
- },
21
- {
22
- name: "typescript/multi-violations with multiple ESLint errors",
23
- config: "tests/e2e/projects/typescript/multi-violations/check.toml",
24
- command: "check",
25
- expectedExitCode: 1,
26
- expectedPatterns: ["✗ ESLint: 9 violation(s)", "no-var", "prefer-const", "eqeqeq"],
27
- },
28
- {
29
- name: "typescript/nested-dirs finds violations in subdirectories",
30
- config: "tests/e2e/projects/typescript/nested-dirs/check.toml",
31
- command: "check",
32
- expectedExitCode: 1,
33
- expectedPatterns: ["✗ ESLint: 2 violation(s)", "lib/legacy.ts", "src/utils/helpers.ts"],
34
- },
35
- {
36
- name: "typescript/special-chars handles special filenames",
37
- config: "tests/e2e/projects/typescript/special-chars/check.toml",
38
- command: "check",
39
- expectedExitCode: 1,
40
- expectedPatterns: ["file-with-dashes.ts", "file.multiple.dots.ts", "file_with_underscores.ts"],
41
- },
42
- {
43
- name: "python/default with Ruff violations",
44
- config: "tests/e2e/projects/python/default/check.toml",
45
- command: "check",
46
- expectedExitCode: 1,
47
- expectedPatterns: ["✗ Ruff:", "F401", "imported but unused"],
48
- },
49
- // ============================================================
50
- // Linting: Should pass
51
- // ============================================================
52
- {
53
- name: "typescript/clean-project passes all checks",
54
- config: "tests/e2e/projects/typescript/clean-project/check.toml",
55
- command: "check",
56
- expectedExitCode: 0,
57
- expectedPatterns: ["✓ ESLint: passed", "✓ All checks passed"],
58
- },
59
- {
60
- name: "typescript/without-tsc passes when tsc disabled",
61
- config: "tests/e2e/projects/typescript/without-tsc/check.toml",
62
- command: "check",
63
- expectedExitCode: 0,
64
- expectedPatterns: ["✓ ESLint: passed"],
65
- notExpectedPatterns: ["TypeScript"],
66
- },
67
- // ============================================================
68
- // Tools disabled
69
- // ============================================================
70
- {
71
- name: "typescript/with-tools-disabled skips ESLint when disabled",
72
- config: "tests/e2e/projects/typescript/with-tools-disabled/check.toml",
73
- command: "check",
74
- expectedExitCode: 0,
75
- expectedPatterns: ["○ CODE", "✓ All checks passed"],
76
- notExpectedPatterns: ["ESLint"],
77
- },
78
- {
79
- name: "python/with-tools-disabled skips Ruff when disabled",
80
- config: "tests/e2e/projects/python/with-tools-disabled/check.toml",
81
- command: "check",
82
- expectedExitCode: 0,
83
- expectedPatterns: ["○ CODE", "✓ All checks passed"],
84
- notExpectedPatterns: ["Ruff"],
85
- },
86
- {
87
- name: "mixed-extensions with both linters disabled",
88
- config: "tests/e2e/projects/mixed-extensions/check.toml",
89
- command: "check",
90
- expectedExitCode: 0,
91
- expectedPatterns: ["○ CODE"],
92
- },
93
- // ============================================================
94
- // TypeScript type checking
95
- // ============================================================
96
- {
97
- name: "typescript/with-tsc-enabled catches type errors",
98
- config: "tests/e2e/projects/typescript/with-tsc-enabled/check.toml",
99
- command: "check",
100
- expectedExitCode: 1,
101
- expectedPatterns: ["✗ TypeScript:", "TS2345"],
102
- },
103
- // ============================================================
104
- // Empty/missing configs
105
- // ============================================================
106
- {
107
- name: "typescript/empty-project skips when no ESLint config",
108
- config: "tests/e2e/projects/typescript/empty-project/check.toml",
109
- command: "check",
110
- expectedExitCode: 0,
111
- expectedPatterns: ["skipped - No ESLint config found"],
112
- },
113
- {
114
- name: "config-errors/missing-name handles missing project name",
115
- config: "tests/e2e/projects/config-errors/missing-name/check.toml",
116
- command: "check",
117
- expectedExitCode: 0,
118
- expectedPatterns: ["✓ All checks passed"],
119
- },
120
- // ============================================================
121
- // Config errors
122
- // ============================================================
123
- {
124
- name: "config-errors/invalid-toml rejects invalid TOML",
125
- config: "tests/e2e/projects/config-errors/invalid-toml/check.toml",
126
- command: "validate",
127
- expectedExitCode: 2,
128
- expectedPatterns: ["✗ Invalid:", "Failed to parse"],
129
- },
130
- {
131
- name: "config-errors/broken-eslint reports ESLint config error",
132
- config: "tests/e2e/projects/config-errors/broken-eslint/check.toml",
133
- command: "check",
134
- expectedExitCode: 1,
135
- expectedPatterns: ["ESLint error"],
136
- },
137
- // ============================================================
138
- // Audit command
139
- // ============================================================
140
- {
141
- name: "audit finds missing Ruff config",
142
- config: "tests/e2e/projects/typescript/default/check.toml",
143
- command: "audit",
144
- expectedExitCode: 1,
145
- expectedPatterns: ["✗ Ruff Config:", "Ruff config not found"],
146
- },
147
- {
148
- name: "audit passes when ESLint config exists",
149
- config: "tests/e2e/projects/audit-warnings/eslint-mismatch/check.toml",
150
- command: "audit",
151
- expectedExitCode: 0,
152
- expectedPatterns: ["✓ ESLint Config: passed"],
153
- },
154
- // ============================================================
155
- // Validate command
156
- // ============================================================
157
- {
158
- name: "validate accepts valid config",
159
- config: "tests/e2e/projects/typescript/clean-project/check.toml",
160
- command: "validate",
161
- expectedExitCode: 0,
162
- expectedPatterns: ["✓ Valid:"],
163
- },
164
- // ============================================================
165
- // Complexity limits (not implemented yet - should skip)
166
- // ============================================================
167
- {
168
- name: "limits-file-lines skips (not implemented)",
169
- config: "tests/e2e/projects/limits-file-lines/check.toml",
170
- command: "check",
171
- expectedExitCode: 0,
172
- expectedPatterns: ["○ CODE"],
173
- },
174
- {
175
- name: "limits-function-lines skips (not implemented)",
176
- config: "tests/e2e/projects/limits-function-lines/check.toml",
177
- command: "check",
178
- expectedExitCode: 0,
179
- expectedPatterns: ["○ CODE"],
180
- },
181
- {
182
- name: "limits-nesting skips (not implemented)",
183
- config: "tests/e2e/projects/limits-nesting/check.toml",
184
- command: "check",
185
- expectedExitCode: 0,
186
- expectedPatterns: ["○ CODE"],
187
- },
188
- {
189
- name: "limits-parameters skips (not implemented)",
190
- config: "tests/e2e/projects/limits-parameters/check.toml",
191
- command: "check",
192
- expectedExitCode: 0,
193
- expectedPatterns: ["○ CODE"],
194
- },
195
- {
196
- name: "limits-pass skips (not implemented)",
197
- config: "tests/e2e/projects/limits-pass/check.toml",
198
- command: "check",
199
- expectedExitCode: 0,
200
- expectedPatterns: ["○ CODE"],
201
- },
202
- {
203
- name: "limits-skip skips (not implemented)",
204
- config: "tests/e2e/projects/limits-skip/check.toml",
205
- command: "check",
206
- expectedExitCode: 0,
207
- expectedPatterns: ["○ CODE"],
208
- },
209
- // ============================================================
210
- // Requirements (files check not implemented yet)
211
- // ============================================================
212
- {
213
- name: "requirements-skip with no linters",
214
- config: "tests/e2e/projects/requirements-skip/check.toml",
215
- command: "check",
216
- expectedExitCode: 0,
217
- expectedPatterns: ["○ CODE"],
218
- },
219
- {
220
- name: "requirements-missing-files with no linters",
221
- config: "tests/e2e/projects/requirements-missing-files/check.toml",
222
- command: "check",
223
- expectedExitCode: 0,
224
- expectedPatterns: ["○ CODE"],
225
- },
226
- {
227
- name: "requirements-pass with no linters",
228
- config: "tests/e2e/projects/requirements-pass/check.toml",
229
- command: "check",
230
- expectedExitCode: 0,
231
- expectedPatterns: ["○ CODE"],
232
- },
233
- {
234
- name: "requirements-missing-tools with no linters",
235
- config: "tests/e2e/projects/requirements-missing-tools/check.toml",
236
- command: "check",
237
- expectedExitCode: 0,
238
- expectedPatterns: ["○ CODE"],
239
- },
240
- // ============================================================
241
- // Additional edge cases
242
- // ============================================================
243
- {
244
- name: "typescript/symlinks handles symlinks",
245
- config: "tests/e2e/projects/typescript/symlinks/check.toml",
246
- command: "check",
247
- expectedExitCode: 1,
248
- expectedPatterns: ["✗ ESLint:", "actual.ts"],
249
- },
250
- {
251
- name: "typescript/with-ignored-dirs finds violations",
252
- config: "tests/e2e/projects/typescript/with-ignored-dirs/check.toml",
253
- command: "check",
254
- expectedExitCode: 1,
255
- expectedPatterns: ["✗ ESLint:"],
256
- },
257
- {
258
- name: "typescript/with-files-config runs ESLint",
259
- config: "tests/e2e/projects/typescript/with-files-config/check.toml",
260
- command: "check",
261
- expectedExitCode: 1,
262
- expectedPatterns: ["✗ ESLint:"],
263
- },
264
- // ============================================================
265
- // JSON output format
266
- // ============================================================
267
- {
268
- name: "check with JSON output format",
269
- config: "tests/e2e/projects/typescript/default/check.toml",
270
- command: "check",
271
- format: "json",
272
- expectedExitCode: 1,
273
- expectedPatterns: ['"version":', '"domains":', '"code":', '"violations":'],
274
- },
275
- {
276
- name: "validate with JSON output format - valid",
277
- config: "tests/e2e/projects/typescript/clean-project/check.toml",
278
- command: "validate",
279
- format: "json",
280
- expectedExitCode: 0,
281
- expectedPatterns: ['"valid": true', '"configPath":'],
282
- },
283
- {
284
- name: "validate with JSON output format - invalid",
285
- config: "tests/e2e/projects/config-errors/invalid-toml/check.toml",
286
- command: "validate",
287
- format: "json",
288
- expectedExitCode: 2,
289
- expectedPatterns: ['"valid": false', '"error":'],
290
- },
291
- {
292
- name: "audit with JSON output format",
293
- config: "tests/e2e/projects/typescript/clean-project/check.toml",
294
- command: "audit",
295
- format: "json",
296
- expectedExitCode: 0,
297
- expectedPatterns: ['"version":', '"domains":', '"summary":'],
298
- },
299
- // ============================================================
300
- // Python clean project
301
- // ============================================================
302
- {
303
- name: "python/clean-project passes Ruff checks",
304
- config: "tests/e2e/projects/python/clean-project/check.toml",
305
- command: "check",
306
- expectedExitCode: 0,
307
- expectedPatterns: ["✓ Ruff: passed", "✓ All checks passed"],
308
- },
309
- // ============================================================
310
- // Mixed TypeScript + Python project
311
- // ============================================================
312
- {
313
- name: "mixed-ts-python catches violations in both languages",
314
- config: "tests/e2e/projects/mixed-ts-python/check.toml",
315
- command: "check",
316
- expectedExitCode: 1,
317
- expectedPatterns: ["✗ ESLint:", "✗ Ruff:", "no-var", "F401"],
318
- },
319
- // ============================================================
320
- // TypeScript type checking - clean
321
- // ============================================================
322
- {
323
- name: "typescript/tsc-clean passes type checking",
324
- config: "tests/e2e/projects/typescript/tsc-clean/check.toml",
325
- command: "check",
326
- expectedExitCode: 0,
327
- expectedPatterns: ["✓ TypeScript: passed"],
328
- },
329
- // ============================================================
330
- // Custom ESLint rules
331
- // ============================================================
332
- {
333
- name: "typescript/with-custom-rules catches custom rule violations",
334
- config: "tests/e2e/projects/typescript/with-custom-rules/check.toml",
335
- command: "check",
336
- expectedExitCode: 1,
337
- expectedPatterns: ["✗ ESLint:", "no-console", "eqeqeq"],
338
- },
339
- // ============================================================
340
- // Ruff with select/ignore
341
- // ============================================================
342
- {
343
- name: "python/with-select-ignore uses select and ignore",
344
- config: "tests/e2e/projects/python/with-select-ignore/check.toml",
345
- command: "check",
346
- expectedExitCode: 1,
347
- expectedPatterns: ["✗ Ruff:", "F401"],
348
- notExpectedPatterns: ["E501"],
349
- },
350
- // ============================================================
351
- // Missing config file
352
- // ============================================================
353
- {
354
- name: "config-errors/no-config returns error for missing config",
355
- config: "tests/e2e/projects/config-errors/no-config/nonexistent.toml",
356
- command: "check",
357
- expectedExitCode: 2,
358
- expectedPatterns: ["Config error:", "not found"],
359
- },
360
- ];
361
- function runCli(command, config, format = "text") {
362
- const formatArg = format !== "text" ? ` -f ${format}` : "";
363
- const cmd = command === "validate"
364
- ? `node dist/cli.js validate -c "${config}"${formatArg}`
365
- : `node dist/cli.js code ${command} -c "${config}"${formatArg}`;
366
- try {
367
- const stdout = execSync(cmd, {
368
- encoding: "utf-8",
369
- stdio: ["pipe", "pipe", "pipe"],
370
- });
371
- return { stdout, exitCode: 0 };
372
- }
373
- catch (error) {
374
- const execError = error;
375
- const stdout = (execError.stdout || "") + (execError.stderr || "");
376
- return { stdout, exitCode: execError.status ?? 1 };
377
- }
378
- }
379
- describe("E2E Tests", () => {
380
- for (const tc of testCases) {
381
- it.concurrent(tc.name, async () => {
382
- const { stdout, exitCode } = runCli(tc.command, tc.config, tc.format);
383
- // Check exit code
384
- expect(exitCode, `Expected exit code ${tc.expectedExitCode}, got ${exitCode}\nOutput:\n${stdout}`).toBe(tc.expectedExitCode);
385
- // Check expected patterns
386
- for (const pattern of tc.expectedPatterns) {
387
- expect(stdout, `Expected output to contain "${pattern}"\nOutput:\n${stdout}`).toContain(pattern);
388
- }
389
- // Check patterns that should NOT be present
390
- if (tc.notExpectedPatterns) {
391
- for (const pattern of tc.notExpectedPatterns) {
392
- expect(stdout, `Expected output to NOT contain "${pattern}"\nOutput:\n${stdout}`).not.toContain(pattern);
393
- }
394
- }
395
- });
396
- }
397
- });
398
- //# sourceMappingURL=e2e.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"e2e.test.js","sourceRoot":"","sources":["../../../tests/e2e/e2e.test.ts"],"names":[],"mappings":"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"}