@fyuld/snitch 2.0.0 → 2.2.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 (54) hide show
  1. package/dist/commands/firstRun.d.ts +2 -0
  2. package/dist/commands/firstRun.d.ts.map +1 -0
  3. package/dist/commands/firstRun.js +10 -0
  4. package/dist/commands/firstRun.js.map +1 -0
  5. package/dist/commands/init/defaultConfigInit.d.ts +2 -0
  6. package/dist/commands/init/defaultConfigInit.d.ts.map +1 -0
  7. package/dist/commands/{nocomments.js → init/defaultConfigInit.js} +14 -20
  8. package/dist/commands/init/defaultConfigInit.js.map +1 -0
  9. package/dist/commands/init/downloadedConfigInit.d.ts +3 -0
  10. package/dist/commands/init/downloadedConfigInit.d.ts.map +1 -0
  11. package/dist/commands/init/downloadedConfigInit.js +80 -0
  12. package/dist/commands/init/downloadedConfigInit.js.map +1 -0
  13. package/dist/commands/init.d.ts +1 -1
  14. package/dist/commands/init.d.ts.map +1 -1
  15. package/dist/commands/init.js +11 -12
  16. package/dist/commands/init.js.map +1 -1
  17. package/dist/commands/prepare.d.ts +2 -0
  18. package/dist/commands/prepare.d.ts.map +1 -0
  19. package/dist/commands/prepare.js +61 -0
  20. package/dist/commands/prepare.js.map +1 -0
  21. package/dist/index.d.ts +2 -5
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +5 -16
  24. package/dist/index.js.map +1 -1
  25. package/dist/snitch.js +24 -9
  26. package/dist/snitch.js.map +1 -1
  27. package/dist/utils/args.d.ts +7 -0
  28. package/dist/utils/args.d.ts.map +1 -0
  29. package/dist/utils/args.js +27 -0
  30. package/dist/utils/args.js.map +1 -0
  31. package/package.json +3 -1
  32. package/dist/commands/dm.d.ts +0 -2
  33. package/dist/commands/dm.d.ts.map +0 -1
  34. package/dist/commands/dm.js +0 -100
  35. package/dist/commands/dm.js.map +0 -1
  36. package/dist/commands/nocomments.d.ts +0 -2
  37. package/dist/commands/nocomments.d.ts.map +0 -1
  38. package/dist/commands/nocomments.js.map +0 -1
  39. package/dist/commands/scan-commands.d.ts +0 -7
  40. package/dist/commands/scan-commands.d.ts.map +0 -1
  41. package/dist/commands/scan-commands.js +0 -28
  42. package/dist/commands/scan-commands.js.map +0 -1
  43. package/dist/commands/scan.d.ts +0 -2
  44. package/dist/commands/scan.d.ts.map +0 -1
  45. package/dist/commands/scan.js +0 -175
  46. package/dist/commands/scan.js.map +0 -1
  47. package/dist/commands/vocab.d.ts +0 -2
  48. package/dist/commands/vocab.d.ts.map +0 -1
  49. package/dist/commands/vocab.js +0 -166
  50. package/dist/commands/vocab.js.map +0 -1
  51. package/dist/snitch.old.d.ts +0 -3
  52. package/dist/snitch.old.d.ts.map +0 -1
  53. package/dist/snitch.old.js +0 -71
  54. package/dist/snitch.old.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ export declare function firstRunCommand(maybeUrl?: string): Promise<void>;
2
+ //# sourceMappingURL=firstRun.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firstRun.d.ts","sourceRoot":"","sources":["../../src/commands/firstRun.ts"],"names":[],"mappings":"AAGA,wBAAsB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGtE"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.firstRunCommand = firstRunCommand;
4
+ const init_1 = require("./init");
5
+ const prepare_1 = require("./prepare");
6
+ async function firstRunCommand(maybeUrl) {
7
+ await (0, init_1.initCommand)(maybeUrl);
8
+ await (0, prepare_1.prepareCommand)();
9
+ }
10
+ //# sourceMappingURL=firstRun.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firstRun.js","sourceRoot":"","sources":["../../src/commands/firstRun.ts"],"names":[],"mappings":";;AAGA,0CAGC;AAND,iCAAoC;AACpC,uCAA0C;AAEnC,KAAK,UAAU,eAAe,CAAC,QAAiB;IACrD,MAAM,IAAA,kBAAW,EAAC,QAAQ,CAAC,CAAA;IAC3B,MAAM,IAAA,wBAAc,GAAE,CAAA;AACxB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function getBundledConfig(): string;
2
+ //# sourceMappingURL=defaultConfigInit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultConfigInit.d.ts","sourceRoot":"","sources":["../../../src/commands/init/defaultConfigInit.ts"],"names":[],"mappings":"AAGA,wBAAgB,gBAAgB,IAAI,MAAM,CAkBzC"}
@@ -33,27 +33,21 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.noCommentCommand = noCommentCommand;
37
- const scan_1 = require("./scan");
36
+ exports.getBundledConfig = getBundledConfig;
38
37
  const path = __importStar(require("path"));
39
38
  const fs = __importStar(require("fs"));
40
- async function noCommentCommand(isScanningSourceDirectory, isScanningTestsDirectory) {
41
- const configPath = path.resolve('.snitchconfig.json');
42
- if (!fs.existsSync(configPath)) {
43
- throw new Error(`Config file not found: ${configPath}`);
44
- }
45
- const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
46
- if (!config.sourceDirectory) {
47
- throw new Error('sourceDirectory must be defined in .snitchconfig.json');
48
- }
49
- if (!config.testsDirectory) {
50
- throw new Error('testsDirectory must be defined in .snitchconfig.json');
51
- }
52
- if (isScanningSourceDirectory) {
53
- await (0, scan_1.scanCommand)('nocomments');
54
- }
55
- if (isScanningTestsDirectory) {
56
- await (0, scan_1.scanCommand)('nocomments');
39
+ function getBundledConfig() {
40
+ // The bundled config is at the root of the package
41
+ // When installed via npm, it will be in node_modules/@fyuld/snitch/
42
+ // __dirname is dist/commands/init, so we go up 3 levels to package root
43
+ let sourcePath = path.resolve(__dirname, '../../../.snitchconfig.json');
44
+ if (!fs.existsSync(sourcePath)) {
45
+ // Try alternative path for local development (dist/commands/init -> project root)
46
+ sourcePath = path.resolve(__dirname, '../../../..', '.snitchconfig.json');
47
+ if (!fs.existsSync(sourcePath)) {
48
+ throw new Error(`Could not find .snitchconfig.json template.\nSearched: ${sourcePath}\nThis is likely a packaging issue.`);
49
+ }
57
50
  }
51
+ return fs.readFileSync(sourcePath, 'utf-8');
58
52
  }
59
- //# sourceMappingURL=nocomments.js.map
53
+ //# sourceMappingURL=defaultConfigInit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultConfigInit.js","sourceRoot":"","sources":["../../../src/commands/init/defaultConfigInit.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,4CAkBC;AArBD,2CAA4B;AAC5B,uCAAwB;AAExB,SAAgB,gBAAgB;IAC9B,mDAAmD;IACnD,oEAAoE;IACpE,wEAAwE;IACxE,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAA;IAEvE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,kFAAkF;QAClF,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAA;QAEzE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACb,0DAA0D,UAAU,qCAAqC,CAC1G,CAAA;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;AAC7C,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function downloadConfig(url: string): Promise<string>;
2
+ export declare function validateConfig(configContent: string, source: string): void;
3
+ //# sourceMappingURL=downloadedConfigInit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"downloadedConfigInit.d.ts","sourceRoot":"","sources":["../../../src/commands/init/downloadedConfigInit.ts"],"names":[],"mappings":"AAIA,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAsBjE;AAED,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAiB1E"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.downloadConfig = downloadConfig;
40
+ exports.validateConfig = validateConfig;
41
+ const https = __importStar(require("https"));
42
+ const snitch_configuration_1 = require("../../datamodel/snitch-configuration");
43
+ const ajv_1 = __importDefault(require("ajv"));
44
+ async function downloadConfig(url) {
45
+ return new Promise((resolve, reject) => {
46
+ https
47
+ .get(url, (res) => {
48
+ if (res.statusCode !== 200) {
49
+ reject(new Error(`Failed to download config: HTTP ${res.statusCode}`));
50
+ return;
51
+ }
52
+ let data = '';
53
+ res.on('data', (chunk) => {
54
+ data += chunk;
55
+ });
56
+ res.on('end', () => {
57
+ resolve(data);
58
+ });
59
+ })
60
+ .on('error', (err) => {
61
+ reject(new Error(`Failed to download config: ${err.message}`));
62
+ });
63
+ });
64
+ }
65
+ function validateConfig(configContent, source) {
66
+ let config;
67
+ try {
68
+ config = JSON.parse(configContent);
69
+ }
70
+ catch (error) {
71
+ throw new Error(`Invalid JSON from ${source}: ${error instanceof Error ? error.message : String(error)}`);
72
+ }
73
+ const ajv = new ajv_1.default();
74
+ const validate = ajv.compile(snitch_configuration_1.snitchConfigurationSchema);
75
+ if (!validate(config)) {
76
+ const errors = validate.errors?.map((err) => `${err.instancePath} ${err.message}`).join(', ') || 'Unknown validation error';
77
+ throw new Error(`Invalid config from ${source}: ${errors}`);
78
+ }
79
+ }
80
+ //# sourceMappingURL=downloadedConfigInit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"downloadedConfigInit.js","sourceRoot":"","sources":["../../../src/commands/init/downloadedConfigInit.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,wCAsBC;AAED,wCAiBC;AA7CD,6CAA8B;AAC9B,+EAAgF;AAChF,8CAAqB;AAEd,KAAK,UAAU,cAAc,CAAC,GAAW;IAC9C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,KAAK;aACF,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;YAChB,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,KAAK,CAAC,mCAAmC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;gBACtE,OAAM;YACR,CAAC;YAED,IAAI,IAAI,GAAG,EAAE,CAAA;YACb,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBACvB,IAAI,IAAI,KAAK,CAAA;YACf,CAAC,CAAC,CAAA;YAEF,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,OAAO,CAAC,IAAI,CAAC,CAAA;YACf,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC;aACD,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACnB,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QAChE,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAgB,cAAc,CAAC,aAAqB,EAAE,MAAc;IAClE,IAAI,MAAe,CAAA;IAEnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC3G,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,aAAG,EAAE,CAAA;IACrB,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,gDAAyB,CAAC,CAAA;IAEvD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,MAAM,GACV,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,0BAA0B,CAAA;QAC9G,MAAM,IAAI,KAAK,CAAC,uBAAuB,MAAM,KAAK,MAAM,EAAE,CAAC,CAAA;IAC7D,CAAC;AACH,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare function initCommand(): Promise<void>;
1
+ export declare function initCommand(url?: string): Promise<void>;
2
2
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAGA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAgCjD"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAKA,wBAAsB,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB7D"}
@@ -36,7 +36,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.initCommand = initCommand;
37
37
  const path = __importStar(require("path"));
38
38
  const fs = __importStar(require("fs"));
39
- async function initCommand() {
39
+ const defaultConfigInit_1 = require("./init/defaultConfigInit");
40
+ const downloadedConfigInit_1 = require("./init/downloadedConfigInit");
41
+ async function initCommand(url) {
40
42
  const targetPath = path.resolve('.snitchconfig.json');
41
43
  if (fs.existsSync(targetPath)) {
42
44
  console.log('⚠️ .snitchconfig.json already exists in current directory');
@@ -44,18 +46,15 @@ async function initCommand() {
44
46
  console.log('\nNo changes made.');
45
47
  return;
46
48
  }
47
- // The bundled config is at the root of the package
48
- // When installed via npm, it will be in node_modules/@baw/snitch/
49
- // __dirname is dist/src/commands, so we go up 3 levels to package root
50
- let sourcePath = path.resolve(__dirname, '../../../.snitchconfig.json');
51
- if (!fs.existsSync(sourcePath)) {
52
- // Try alternative path for local development (dist/src/commands -> project root)
53
- sourcePath = path.resolve(__dirname, '../../..', '.snitchconfig.json');
54
- if (!fs.existsSync(sourcePath)) {
55
- throw new Error(`Could not find .snitchconfig.json template.\nSearched: ${sourcePath}\nThis is likely a packaging issue.`);
56
- }
49
+ let configContent;
50
+ if (url) {
51
+ console.log(`Downloading config from: ${url}`);
52
+ configContent = await (0, downloadedConfigInit_1.downloadConfig)(url);
53
+ (0, downloadedConfigInit_1.validateConfig)(configContent, url);
54
+ }
55
+ else {
56
+ configContent = (0, defaultConfigInit_1.getBundledConfig)();
57
57
  }
58
- const configContent = fs.readFileSync(sourcePath, 'utf-8');
59
58
  fs.writeFileSync(targetPath, configContent, 'utf-8');
60
59
  console.log('✓ Created .snitchconfig.json in current directory');
61
60
  console.log(` Location: ${targetPath}`);
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,kCAgCC;AAnCD,2CAA4B;AAC5B,uCAAwB;AAEjB,KAAK,UAAU,WAAW;IAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAErD,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAA;QACzE,OAAO,CAAC,GAAG,CAAC,gBAAgB,UAAU,EAAE,CAAC,CAAA;QACzC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;QACjC,OAAM;IACR,CAAC;IAED,mDAAmD;IACnD,kEAAkE;IAClE,uEAAuE;IACvE,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAA;IAEvE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,iFAAiF;QACjF,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,oBAAoB,CAAC,CAAA;QAEtE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACb,0DAA0D,UAAU,qCAAqC,CAC1G,CAAA;QACH,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IAC1D,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAA;IAEpD,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAA;IAChE,OAAO,CAAC,GAAG,CAAC,eAAe,UAAU,EAAE,CAAC,CAAA;IACxC,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAA;AAC5E,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,kCAyBC;AA9BD,2CAA4B;AAC5B,uCAAwB;AACxB,gEAA2D;AAC3D,sEAA4E;AAErE,KAAK,UAAU,WAAW,CAAC,GAAY;IAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAErD,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAA;QACzE,OAAO,CAAC,GAAG,CAAC,gBAAgB,UAAU,EAAE,CAAC,CAAA;QACzC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;QACjC,OAAM;IACR,CAAC;IAED,IAAI,aAAqB,CAAA;IAEzB,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,4BAA4B,GAAG,EAAE,CAAC,CAAA;QAC9C,aAAa,GAAG,MAAM,IAAA,qCAAc,EAAC,GAAG,CAAC,CAAA;QACzC,IAAA,qCAAc,EAAC,aAAa,EAAE,GAAG,CAAC,CAAA;IACpC,CAAC;SAAM,CAAC;QACN,aAAa,GAAG,IAAA,oCAAgB,GAAE,CAAA;IACpC,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAA;IAEpD,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAA;IAChE,OAAO,CAAC,GAAG,CAAC,eAAe,UAAU,EAAE,CAAC,CAAA;IACxC,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAA;AAC5E,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function prepareCommand(): Promise<void>;
2
+ //# sourceMappingURL=prepare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepare.d.ts","sourceRoot":"","sources":["../../src/commands/prepare.ts"],"names":[],"mappings":"AAIA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAwBpD"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.prepareCommand = prepareCommand;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const SnitchConfigManager_1 = require("../SnitchConfigManager");
40
+ async function prepareCommand() {
41
+ const config = SnitchConfigManager_1.SnitchConfigManager.loadConfig();
42
+ const sourceDir = path.resolve(config.sourceDirectory);
43
+ const testDir = path.resolve(config.testsDirectory);
44
+ let createdDirs = [];
45
+ if (!fs.existsSync(sourceDir)) {
46
+ fs.mkdirSync(sourceDir, { recursive: true });
47
+ createdDirs.push(config.sourceDirectory);
48
+ }
49
+ if (!fs.existsSync(testDir)) {
50
+ fs.mkdirSync(testDir, { recursive: true });
51
+ createdDirs.push(config.testsDirectory);
52
+ }
53
+ if (createdDirs.length > 0) {
54
+ console.log('✓ Created directories:');
55
+ createdDirs.forEach((dir) => console.log(` - ${dir}`));
56
+ }
57
+ else {
58
+ console.log('✓ All directories already exist');
59
+ }
60
+ }
61
+ //# sourceMappingURL=prepare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../src/commands/prepare.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,wCAwBC;AA5BD,uCAAwB;AACxB,2CAA4B;AAC5B,gEAA4D;AAErD,KAAK,UAAU,cAAc;IAClC,MAAM,MAAM,GAAG,yCAAmB,CAAC,UAAU,EAAE,CAAA;IAE/C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;IACtD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;IAEnD,IAAI,WAAW,GAAa,EAAE,CAAA;IAE9B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5C,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC1C,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;IACzC,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;QACrC,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAA;IACzD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAA;IAChD,CAAC;AACH,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,4 @@
1
- export { dirtydefaultsCommand, fixturesCommand, expectmagicCommand, enumerateCommand, badimportsCommand, onlyNamedFunsCommand, } from './commands/scan-commands';
2
- export { dmCommand } from './commands/dm';
3
- export { scanCommand } from './commands/scan';
4
1
  export { initCommand } from './commands/init';
5
- export { vocabCommand } from './commands/vocab';
6
- export { noCommentCommand } from './commands/nocomments';
2
+ export { prepareCommand } from './commands/prepare';
3
+ export { firstRunCommand } from './commands/firstRun';
7
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA"}
package/dist/index.js CHANGED
@@ -1,22 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.noCommentCommand = exports.vocabCommand = exports.initCommand = exports.scanCommand = exports.dmCommand = exports.onlyNamedFunsCommand = exports.badimportsCommand = exports.enumerateCommand = exports.expectmagicCommand = exports.fixturesCommand = exports.dirtydefaultsCommand = void 0;
3
+ exports.firstRunCommand = exports.prepareCommand = exports.initCommand = void 0;
4
4
  // Export all commands for programmatic use
5
- var scan_commands_1 = require("./commands/scan-commands");
6
- Object.defineProperty(exports, "dirtydefaultsCommand", { enumerable: true, get: function () { return scan_commands_1.dirtydefaultsCommand; } });
7
- Object.defineProperty(exports, "fixturesCommand", { enumerable: true, get: function () { return scan_commands_1.fixturesCommand; } });
8
- Object.defineProperty(exports, "expectmagicCommand", { enumerable: true, get: function () { return scan_commands_1.expectmagicCommand; } });
9
- Object.defineProperty(exports, "enumerateCommand", { enumerable: true, get: function () { return scan_commands_1.enumerateCommand; } });
10
- Object.defineProperty(exports, "badimportsCommand", { enumerable: true, get: function () { return scan_commands_1.badimportsCommand; } });
11
- Object.defineProperty(exports, "onlyNamedFunsCommand", { enumerable: true, get: function () { return scan_commands_1.onlyNamedFunsCommand; } });
12
- var dm_1 = require("./commands/dm");
13
- Object.defineProperty(exports, "dmCommand", { enumerable: true, get: function () { return dm_1.dmCommand; } });
14
- var scan_1 = require("./commands/scan");
15
- Object.defineProperty(exports, "scanCommand", { enumerable: true, get: function () { return scan_1.scanCommand; } });
16
5
  var init_1 = require("./commands/init");
17
6
  Object.defineProperty(exports, "initCommand", { enumerable: true, get: function () { return init_1.initCommand; } });
18
- var vocab_1 = require("./commands/vocab");
19
- Object.defineProperty(exports, "vocabCommand", { enumerable: true, get: function () { return vocab_1.vocabCommand; } });
20
- var nocomments_1 = require("./commands/nocomments");
21
- Object.defineProperty(exports, "noCommentCommand", { enumerable: true, get: function () { return nocomments_1.noCommentCommand; } });
7
+ var prepare_1 = require("./commands/prepare");
8
+ Object.defineProperty(exports, "prepareCommand", { enumerable: true, get: function () { return prepare_1.prepareCommand; } });
9
+ var firstRun_1 = require("./commands/firstRun");
10
+ Object.defineProperty(exports, "firstRunCommand", { enumerable: true, get: function () { return firstRun_1.firstRunCommand; } });
22
11
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,2CAA2C;AAC3C,0DAOiC;AAN/B,qHAAA,oBAAoB,OAAA;AACpB,gHAAA,eAAe,OAAA;AACf,mHAAA,kBAAkB,OAAA;AAClB,iHAAA,gBAAgB,OAAA;AAChB,kHAAA,iBAAiB,OAAA;AACjB,qHAAA,oBAAoB,OAAA;AAEtB,oCAAyC;AAAhC,+FAAA,SAAS,OAAA;AAClB,wCAA6C;AAApC,mGAAA,WAAW,OAAA;AACpB,wCAA6C;AAApC,mGAAA,WAAW,OAAA;AACpB,0CAA+C;AAAtC,qGAAA,YAAY,OAAA;AACrB,oDAAwD;AAA/C,8GAAA,gBAAgB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,2CAA2C;AAC3C,wCAA6C;AAApC,mGAAA,WAAW,OAAA;AACpB,8CAAmD;AAA1C,yGAAA,cAAc,OAAA;AACvB,gDAAqD;AAA5C,2GAAA,eAAe,OAAA"}
package/dist/snitch.js CHANGED
@@ -7,12 +7,16 @@ const fs_1 = require("./utils/fs");
7
7
  const ast_parser_1 = require("./utils/ast-parser");
8
8
  const policy_executor_1 = require("./rules/policy-executor");
9
9
  const violation_reporter_1 = require("./reporting/violation-reporter");
10
- const args = process.argv.slice(2);
11
- if (args.length === 0) {
10
+ const init_1 = require("./commands/init");
11
+ const prepare_1 = require("./commands/prepare");
12
+ const firstRun_1 = require("./commands/firstRun");
13
+ const args_1 = require("./utils/args");
14
+ const parsedArgs = (0, args_1.parseArgs)(process.argv.slice(2));
15
+ if (!parsedArgs.command) {
12
16
  printUsage();
13
17
  process.exit(1);
14
18
  }
15
- const command = args[0];
19
+ const command = parsedArgs.command;
16
20
  async function main() {
17
21
  switch (command) {
18
22
  case 'assess':
@@ -25,11 +29,17 @@ async function main() {
25
29
  await introduceCommand();
26
30
  break;
27
31
  case 'init':
28
- await initCommand();
32
+ await handleInitCommand();
29
33
  break;
30
34
  case 'list':
31
35
  await listCommand();
32
36
  break;
37
+ case 'prepare':
38
+ await (0, prepare_1.prepareCommand)();
39
+ break;
40
+ case 'first-run':
41
+ await handleFirstRunCommand();
42
+ break;
33
43
  default:
34
44
  console.error(`Unknown command: ${command}`);
35
45
  printUsage();
@@ -98,10 +108,13 @@ async function listCommand() {
98
108
  console.log(policy.id);
99
109
  }
100
110
  }
101
- async function initCommand() {
102
- console.log('Creating .snitchconfig.json...');
103
- console.log('TODO: Implement init command');
104
- process.exit(1);
111
+ async function handleInitCommand() {
112
+ const maybeUrl = parsedArgs.args[0];
113
+ await (0, init_1.initCommand)(maybeUrl);
114
+ }
115
+ async function handleFirstRunCommand() {
116
+ const maybeUrl = parsedArgs.args[0];
117
+ await (0, firstRun_1.firstRunCommand)(maybeUrl);
105
118
  }
106
119
  function printUsage() {
107
120
  console.log('Usage: snitch <command>');
@@ -110,7 +123,9 @@ function printUsage() {
110
123
  console.log(' enforce Run all policies and fail if violations found (exits 1 on violations)');
111
124
  console.log(' introduce Show configured policies and their goals');
112
125
  console.log(' list List policy IDs only');
113
- console.log(' init Create default .snitchconfig.json');
126
+ console.log(' init [url] Create .snitchconfig.json (optionally from remote URL)');
127
+ console.log(" prepare Create source and test directories if they don't exist");
128
+ console.log(' first-run [url] Initialize config and create directories');
114
129
  }
115
130
  main().catch((error) => {
116
131
  console.error('Error:', error.message);
@@ -1 +1 @@
1
- {"version":3,"file":"snitch.js","sourceRoot":"","sources":["../src/snitch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"snitch.js","sourceRoot":"","sources":["../src/snitch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export type ParsedArgs = {
2
+ command: string;
3
+ options: Record<string, string | boolean>;
4
+ args: string[];
5
+ };
6
+ export declare function parseArgs(argv: string[]): ParsedArgs;
7
+ //# sourceMappingURL=args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/utils/args.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAA;IACzC,IAAI,EAAE,MAAM,EAAE,CAAA;CACf,CAAA;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAwBpD"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseArgs = parseArgs;
4
+ function parseArgs(argv) {
5
+ const command = argv[0];
6
+ const options = {};
7
+ const args = [];
8
+ for (let i = 1; i < argv.length; i++) {
9
+ const arg = argv[i];
10
+ if (arg.startsWith('--')) {
11
+ const optionName = arg.slice(2);
12
+ const nextArg = argv[i + 1];
13
+ if (nextArg && !nextArg.startsWith('--')) {
14
+ options[optionName] = nextArg;
15
+ i++;
16
+ }
17
+ else {
18
+ options[optionName] = true;
19
+ }
20
+ }
21
+ else {
22
+ args.push(arg);
23
+ }
24
+ }
25
+ return { command, options, args };
26
+ }
27
+ //# sourceMappingURL=args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/utils/args.ts"],"names":[],"mappings":";;AAMA,8BAwBC;AAxBD,SAAgB,SAAS,CAAC,IAAc;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;IACvB,MAAM,OAAO,GAAqC,EAAE,CAAA;IACpD,MAAM,IAAI,GAAa,EAAE,CAAA;IAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QAEnB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;YAE3B,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzC,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAA;gBAC7B,CAAC,EAAE,CAAA;YACL,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAAA;YAC5B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAChB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;AACnC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fyuld/snitch",
3
- "version": "2.0.0",
3
+ "version": "2.2.0",
4
4
  "description": "Snitch",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -31,8 +31,10 @@
31
31
  "@fyuld/jest-cucumber-utils": "^1.1.0",
32
32
  "@types/jest": "^30.0.0",
33
33
  "@types/node": "^24.5.2",
34
+ "fs-monkey": "^1.1.0",
34
35
  "jest": "^30.1.3",
35
36
  "jest-cucumber": "^4.5.0",
37
+ "memfs": "^4.51.1",
36
38
  "prettier": "^3.6.2",
37
39
  "ts-jest": "^29.4.2"
38
40
  },
@@ -1,2 +0,0 @@
1
- export declare function dmCommand(sourceDirectory?: string): Promise<void>;
2
- //# sourceMappingURL=dm.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dm.d.ts","sourceRoot":"","sources":["../../src/commands/dm.ts"],"names":[],"mappings":"AAIA,wBAAsB,SAAS,CAAC,eAAe,GAAE,MAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuEjF"}
@@ -1,100 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.dmCommand = dmCommand;
37
- const path = __importStar(require("path"));
38
- const fs = __importStar(require("fs"));
39
- const ts_parser_1 = require("../utils/ts-parser");
40
- async function dmCommand(sourceDirectory = 'foobar') {
41
- const absolutePath = path.resolve(sourceDirectory);
42
- if (!fs.existsSync(absolutePath)) {
43
- throw new Error(`Directory not found: ${absolutePath}`);
44
- }
45
- if (!fs.statSync(absolutePath).isDirectory()) {
46
- throw new Error(`Not a directory: ${absolutePath}`);
47
- }
48
- console.log(`Scanning directory: ${absolutePath}\n`);
49
- const files = (0, ts_parser_1.scanDirectory)(absolutePath);
50
- const allDeclarations = [];
51
- for (const file of files) {
52
- const declarations = (0, ts_parser_1.parseDeclarations)(file);
53
- allDeclarations.push(...declarations);
54
- }
55
- if (allDeclarations.length === 0) {
56
- console.log('No type declarations found.');
57
- return;
58
- }
59
- const groupedByType = {
60
- interface: allDeclarations.filter((d) => d.type === 'interface'),
61
- type: allDeclarations.filter((d) => d.type === 'type'),
62
- enum: allDeclarations.filter((d) => d.type === 'enum'),
63
- };
64
- console.log('='.repeat(80));
65
- console.log('DATA MODEL REPORT');
66
- console.log('='.repeat(80));
67
- console.log(`\nTotal declarations found: ${allDeclarations.length}\n`);
68
- if (groupedByType.interface.length > 0) {
69
- console.log(`\n${'─'.repeat(80)}`);
70
- console.log(`INTERFACES (${groupedByType.interface.length})`);
71
- console.log('─'.repeat(80));
72
- for (const decl of groupedByType.interface) {
73
- const relativePath = path.relative(process.cwd(), decl.file);
74
- console.log(` ${decl.name}`);
75
- console.log(` Location: ${relativePath}:${decl.line}`);
76
- }
77
- }
78
- if (groupedByType.type.length > 0) {
79
- console.log(`\n${'─'.repeat(80)}`);
80
- console.log(`TYPES (${groupedByType.type.length})`);
81
- console.log('─'.repeat(80));
82
- for (const decl of groupedByType.type) {
83
- const relativePath = path.relative(process.cwd(), decl.file);
84
- console.log(` ${decl.name}`);
85
- console.log(` Location: ${relativePath}:${decl.line}`);
86
- }
87
- }
88
- if (groupedByType.enum.length > 0) {
89
- console.log(`\n${'─'.repeat(80)}`);
90
- console.log(`ENUMS (${groupedByType.enum.length})`);
91
- console.log('─'.repeat(80));
92
- for (const decl of groupedByType.enum) {
93
- const relativePath = path.relative(process.cwd(), decl.file);
94
- console.log(` ${decl.name}`);
95
- console.log(` Location: ${relativePath}:${decl.line}`);
96
- }
97
- }
98
- console.log(`\n${'='.repeat(80)}\n`);
99
- }
100
- //# sourceMappingURL=dm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dm.js","sourceRoot":"","sources":["../../src/commands/dm.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare function noCommentCommand(isScanningSourceDirectory: boolean, isScanningTestsDirectory: boolean): Promise<void>;
2
- //# sourceMappingURL=nocomments.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nocomments.d.ts","sourceRoot":"","sources":["../../src/commands/nocomments.ts"],"names":[],"mappings":"AAUA,wBAAsB,gBAAgB,CACpC,yBAAyB,EAAE,OAAO,EAClC,wBAAwB,EAAE,OAAO,GAChC,OAAO,CAAC,IAAI,CAAC,CAqBf"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"nocomments.js","sourceRoot":"","sources":["../../src/commands/nocomments.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,4CAwBC;AAlCD,iCAAoC;AACpC,2CAA4B;AAC5B,uCAAwB;AAQjB,KAAK,UAAU,gBAAgB,CACpC,yBAAkC,EAClC,wBAAiC;IAEjC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;IACrD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAA;IACzD,CAAC;IAED,MAAM,MAAM,GAAiB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAA;IAE7E,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;IAC1E,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;IACzE,CAAC;IAED,IAAI,yBAAyB,EAAE,CAAC;QAC9B,MAAM,IAAA,kBAAW,EAAC,YAAY,CAAC,CAAA;IACjC,CAAC;IACD,IAAI,wBAAwB,EAAE,CAAC;QAC7B,MAAM,IAAA,kBAAW,EAAC,YAAY,CAAC,CAAA;IACjC,CAAC;AACH,CAAC"}
@@ -1,7 +0,0 @@
1
- export declare function badimportsCommand(): Promise<void>;
2
- export declare function dirtydefaultsCommand(): Promise<void>;
3
- export declare function expectmagicCommand(): Promise<void>;
4
- export declare function enumerateCommand(): Promise<void>;
5
- export declare function fixturesCommand(): Promise<void>;
6
- export declare function onlyNamedFunsCommand(): Promise<void>;
7
- //# sourceMappingURL=scan-commands.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scan-commands.d.ts","sourceRoot":"","sources":["../../src/commands/scan-commands.ts"],"names":[],"mappings":"AAEA,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEvD;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1D;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAExD;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEtD;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAErD;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1D"}
@@ -1,28 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.badimportsCommand = badimportsCommand;
4
- exports.dirtydefaultsCommand = dirtydefaultsCommand;
5
- exports.expectmagicCommand = expectmagicCommand;
6
- exports.enumerateCommand = enumerateCommand;
7
- exports.fixturesCommand = fixturesCommand;
8
- exports.onlyNamedFunsCommand = onlyNamedFunsCommand;
9
- const scan_1 = require("./scan");
10
- async function badimportsCommand() {
11
- await (0, scan_1.scanCommand)('badimports');
12
- }
13
- async function dirtydefaultsCommand() {
14
- await (0, scan_1.scanCommand)('dirtydefaults');
15
- }
16
- async function expectmagicCommand() {
17
- await (0, scan_1.scanCommand)('expectmagic');
18
- }
19
- async function enumerateCommand() {
20
- await (0, scan_1.scanCommand)('enumerate');
21
- }
22
- async function fixturesCommand() {
23
- await (0, scan_1.scanCommand)('fixtures');
24
- }
25
- async function onlyNamedFunsCommand() {
26
- await (0, scan_1.scanCommand)('onlynamedfuns');
27
- }
28
- //# sourceMappingURL=scan-commands.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scan-commands.js","sourceRoot":"","sources":["../../src/commands/scan-commands.ts"],"names":[],"mappings":";;AAEA,8CAEC;AAED,oDAEC;AAED,gDAEC;AAED,4CAEC;AAED,0CAEC;AAED,oDAEC;AAxBD,iCAAoC;AAE7B,KAAK,UAAU,iBAAiB;IACrC,MAAM,IAAA,kBAAW,EAAC,YAAY,CAAC,CAAA;AACjC,CAAC;AAEM,KAAK,UAAU,oBAAoB;IACxC,MAAM,IAAA,kBAAW,EAAC,eAAe,CAAC,CAAA;AACpC,CAAC;AAEM,KAAK,UAAU,kBAAkB;IACtC,MAAM,IAAA,kBAAW,EAAC,aAAa,CAAC,CAAA;AAClC,CAAC;AAEM,KAAK,UAAU,gBAAgB;IACpC,MAAM,IAAA,kBAAW,EAAC,WAAW,CAAC,CAAA;AAChC,CAAC;AAEM,KAAK,UAAU,eAAe;IACnC,MAAM,IAAA,kBAAW,EAAC,UAAU,CAAC,CAAA;AAC/B,CAAC;AAEM,KAAK,UAAU,oBAAoB;IACxC,MAAM,IAAA,kBAAW,EAAC,eAAe,CAAC,CAAA;AACpC,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare function scanCommand(_commandName: string): Promise<void>;
2
- //# sourceMappingURL=scan.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"AA8LA,wBAAsB,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErE"}
@@ -1,175 +0,0 @@
1
- "use strict";
2
- // import * as path from 'path'
3
- // import * as fs from 'fs'
4
- // import {
5
- // scanFiles,
6
- // findViolations,
7
- // printReport,
8
- // FILE_FILTERS,
9
- // } from '../utils/pattern-scanner'
10
- // import {
11
- // PublicScanConfig,
12
- // PublicViolationRule,
13
- // NoCommentsScanConfig,
14
- // } from '../datamodel/public-configs'
15
- // import { InternalScanConfig } from '../datamodel/internal-configs'
16
- // import { isNoCommentsScanConfig } from '../datamodel/typeguards'
17
- // import { SnitchConfiguration } from '../datamodel'
18
- // import { SnitchConfigManager } from '../SnitchConfigManager'
19
- Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.scanCommand = scanCommand;
21
- // function translateAsIsConfig(
22
- // config: PublicScanConfig
23
- // ): InternalScanConfig {
24
- // return {
25
- // description: config.description,
26
- // fileFilter: config.fileFilter,
27
- // violations: config.violations.map(
28
- // (rule: PublicViolationRule) => ({
29
- // message: rule.message,
30
- // regexes: rule.regexes || [],
31
- // recommendation: rule.recommendation,
32
- // })
33
- // ),
34
- // }
35
- // }
36
- // function translateNoCommentsConfig(
37
- // config: NoCommentsScanConfig
38
- // ): InternalScanConfig {
39
- // const escapedApologies = config.acceptedApologies.map(
40
- // (apology) =>
41
- // apology.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
42
- // )
43
- // const negativeApologiesPattern =
44
- // escapedApologies.join('|')
45
- // return {
46
- // description: config.description,
47
- // fileFilter: config.fileFilter,
48
- // violations: config.violations.map((rule) => ({
49
- // message: rule.message,
50
- // regexes: [
51
- // `//(?!\\s*(${negativeApologiesPattern})).*`,
52
- // ],
53
- // recommendation: rule.recommendation,
54
- // })),
55
- // }
56
- // }
57
- // function translateConfig(
58
- // config: PublicScanConfig
59
- // ): InternalScanConfig {
60
- // if (isNoCommentsScanConfig(config)) {
61
- // return translateNoCommentsConfig(config)
62
- // }
63
- // return translateAsIsConfig(config)
64
- // }
65
- // async function runScan(
66
- // scanName: string,
67
- // scanDef: PublicScanConfig,
68
- // absolutePath: string
69
- // ): Promise<void> {
70
- // const translatedConfig = translateConfig(scanDef)
71
- // const fileFilter =
72
- // FILE_FILTERS[
73
- // translatedConfig.fileFilter as keyof typeof FILE_FILTERS
74
- // ]
75
- // if (!fileFilter) {
76
- // throw new Error(
77
- // `Invalid file filter: ${translatedConfig.fileFilter}\nAvailable filters: ${Object.keys(FILE_FILTERS).join(', ')}`
78
- // )
79
- // }
80
- // console.log(`Running scan: ${scanName}`)
81
- // console.log(`Scanning directory: ${absolutePath}\n`)
82
- // const files = scanFiles(absolutePath, fileFilter)
83
- // const violations = findViolations(files, {
84
- // violations: translatedConfig.violations,
85
- // })
86
- // printReport(violations, `${scanName} violations report`)
87
- // }
88
- // async function executeCommand(
89
- // commandName: string,
90
- // config: SnitchConfiguration,
91
- // absolutePath: string,
92
- // visited: Set<string> = new Set()
93
- // ): Promise<void> {
94
- // if (visited.has(commandName)) {
95
- // throw new Error(
96
- // `Circular dependency detected: ${commandName}`
97
- // )
98
- // }
99
- // visited.add(commandName)
100
- // const commandDef = config.commands[commandName]
101
- // if (!commandDef) {
102
- // throw new Error(
103
- // `Command '${commandName}' not found in config.\nAvailable commands: ${Object.keys(config.commands).join(', ')}`
104
- // )
105
- // }
106
- // if (Array.isArray(commandDef)) {
107
- // console.log(
108
- // `\nExecuting composite command: ${commandName}`
109
- // )
110
- // console.log(
111
- // `Running commands: ${commandDef.join(', ')}\n`
112
- // )
113
- // for (const subCommand of commandDef) {
114
- // await executeCommand(
115
- // subCommand,
116
- // config,
117
- // absolutePath,
118
- // visited
119
- // )
120
- // }
121
- // } else {
122
- // await runScan(commandName, commandDef, absolutePath)
123
- // }
124
- // }
125
- // export async function scanCommand(commandName: string): Promise<void> {
126
- // if (!commandName) {
127
- // console.error('Error: Command name is required')
128
- // console.log(
129
- // '\nUsage: snitch scan <command-name> [directory]'
130
- // )
131
- // console.log('\nAvailable commands:')
132
- // const configPath = path.resolve('.snitchconfig.json')
133
- // if (fs.existsSync(configPath)) {
134
- // const config: SnitchConfig = JSON.parse(
135
- // fs.readFileSync(configPath, 'utf-8')
136
- // )
137
- // for (const [name, cmd] of Object.entries(
138
- // config.commands
139
- // )) {
140
- // if (Array.isArray(cmd)) {
141
- // console.log(
142
- // ` ${name} - [Composite: ${cmd.join(', ')}]`
143
- // )
144
- // } else {
145
- // console.log(` ${name} - ${cmd.description}`)
146
- // }
147
- // }
148
- // }
149
- // process.exit(1)
150
- // }
151
- // const configPath = path.resolve('.snitchconfig.json')
152
- // if (!fs.existsSync(configPath)) {
153
- // throw new Error(
154
- // `Config file not found: ${configPath}\nPlease create .snitchconfig.json in your project root.`
155
- // )
156
- // }
157
- // const config: SnitchConfig = JSON.parse(
158
- // fs.readFileSync(configPath, 'utf-8')
159
- // )
160
- // if (!config.sourceDirectory) {
161
- // throw new Error('sourceDirectory must be defined in .snitchconfig.json')
162
- // }
163
- // const absolutePath = path.resolve(config.sourceDirectory)
164
- // if (!fs.existsSync(absolutePath)) {
165
- // throw new Error(`Directory not found: ${absolutePath}`)
166
- // }
167
- // if (!fs.statSync(absolutePath).isDirectory()) {
168
- // throw new Error(`Not a directory: ${absolutePath}`)
169
- // }
170
- // await executeCommand(commandName, config, absolutePath)
171
- // }
172
- async function scanCommand(_commandName) {
173
- throw new Error('scanCommand temporarily disabled during refactoring');
174
- }
175
- //# sourceMappingURL=scan.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare function vocabCommand(sourceDirectory?: string): Promise<void>;
2
- //# sourceMappingURL=vocab.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vocab.d.ts","sourceRoot":"","sources":["../../src/commands/vocab.ts"],"names":[],"mappings":"AAIA,wBAAsB,YAAY,CAAC,eAAe,GAAE,MAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAmJjF"}
@@ -1,166 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.vocabCommand = vocabCommand;
37
- const path = __importStar(require("path"));
38
- const fs = __importStar(require("fs"));
39
- const ts_parser_1 = require("../utils/ts-parser");
40
- async function vocabCommand(sourceDirectory = 'src') {
41
- const absolutePath = path.resolve(sourceDirectory);
42
- if (!fs.existsSync(absolutePath)) {
43
- throw new Error(`Directory not found: ${absolutePath}`);
44
- }
45
- if (!fs.statSync(absolutePath).isDirectory()) {
46
- throw new Error(`Not a directory: ${absolutePath}`);
47
- }
48
- console.log(`Scanning directory: ${absolutePath}\n`);
49
- const files = (0, ts_parser_1.scanDirectory)(absolutePath);
50
- const allDeclarations = [];
51
- for (const file of files) {
52
- const declarations = (0, ts_parser_1.parseDeclarationsWithDetails)(file);
53
- allDeclarations.push(...declarations);
54
- }
55
- if (allDeclarations.length === 0) {
56
- console.log('No type declarations found.');
57
- return;
58
- }
59
- // Generate DATA_DICTIONARY.md
60
- const outputPath = path.resolve('DATA_DICTIONARY.md');
61
- let markdown = '# Data Dictionary\n\n';
62
- markdown += `Generated from: \`${sourceDirectory}\`\n\n`;
63
- markdown += `Total declarations: ${allDeclarations.length}\n\n`;
64
- markdown += '---\n\n';
65
- const exported = allDeclarations.filter((d) => d.isExported);
66
- const nonExported = allDeclarations.filter((d) => !d.isExported);
67
- // Exported section
68
- if (exported.length > 0) {
69
- markdown += `## Exported\n\n`;
70
- const exportedEnums = exported.filter((d) => d.type === 'enum');
71
- const exportedTypes = exported.filter((d) => d.type === 'type');
72
- const exportedInterfaces = exported.filter((d) => d.type === 'interface');
73
- if (exportedEnums.length > 0) {
74
- markdown += `### Enums\n\n`;
75
- for (const decl of exportedEnums) {
76
- const relativePath = path.relative(process.cwd(), decl.file);
77
- markdown += `#### ${decl.name}\n\n`;
78
- markdown += `- **Location:** \`${relativePath}:${decl.line}\`\n\n`;
79
- if (decl.definition) {
80
- markdown += '```typescript\n';
81
- markdown += decl.definition + '\n';
82
- markdown += '```\n\n';
83
- }
84
- }
85
- }
86
- if (exportedTypes.length > 0) {
87
- markdown += `### Types\n\n`;
88
- for (const decl of exportedTypes) {
89
- const relativePath = path.relative(process.cwd(), decl.file);
90
- markdown += `#### ${decl.name}\n\n`;
91
- markdown += `- **Location:** \`${relativePath}:${decl.line}\`\n\n`;
92
- if (decl.definition) {
93
- markdown += '```typescript\n';
94
- markdown += `type ${decl.name} = ${decl.definition}\n`;
95
- markdown += '```\n\n';
96
- }
97
- }
98
- }
99
- if (exportedInterfaces.length > 0) {
100
- markdown += `### Interfaces\n\n`;
101
- for (const decl of exportedInterfaces) {
102
- const relativePath = path.relative(process.cwd(), decl.file);
103
- markdown += `#### ${decl.name}\n\n`;
104
- markdown += `- **Location:** \`${relativePath}:${decl.line}\`\n\n`;
105
- if (decl.definition) {
106
- markdown += '```typescript\n';
107
- markdown += `interface ${decl.name} {\n${decl.definition}}\n`;
108
- markdown += '```\n\n';
109
- }
110
- }
111
- }
112
- }
113
- // Non-Exported section
114
- if (nonExported.length > 0) {
115
- markdown += `## Non-Exported\n\n`;
116
- const nonExportedEnums = nonExported.filter((d) => d.type === 'enum');
117
- const nonExportedTypes = nonExported.filter((d) => d.type === 'type');
118
- const nonExportedInterfaces = nonExported.filter((d) => d.type === 'interface');
119
- if (nonExportedEnums.length > 0) {
120
- markdown += `### Enums\n\n`;
121
- for (const decl of nonExportedEnums) {
122
- const relativePath = path.relative(process.cwd(), decl.file);
123
- markdown += `#### ${decl.name}\n\n`;
124
- markdown += `- **Location:** \`${relativePath}:${decl.line}\`\n\n`;
125
- if (decl.definition) {
126
- markdown += '```typescript\n';
127
- markdown += decl.definition + '\n';
128
- markdown += '```\n\n';
129
- }
130
- }
131
- }
132
- if (nonExportedTypes.length > 0) {
133
- markdown += `### Types\n\n`;
134
- for (const decl of nonExportedTypes) {
135
- const relativePath = path.relative(process.cwd(), decl.file);
136
- markdown += `#### ${decl.name}\n\n`;
137
- markdown += `- **Location:** \`${relativePath}:${decl.line}\`\n\n`;
138
- if (decl.definition) {
139
- markdown += '```typescript\n';
140
- markdown += `type ${decl.name} = ${decl.definition}\n`;
141
- markdown += '```\n\n';
142
- }
143
- }
144
- }
145
- if (nonExportedInterfaces.length > 0) {
146
- markdown += `### Interfaces\n\n`;
147
- for (const decl of nonExportedInterfaces) {
148
- const relativePath = path.relative(process.cwd(), decl.file);
149
- markdown += `#### ${decl.name}\n\n`;
150
- markdown += `- **Location:** \`${relativePath}:${decl.line}\`\n\n`;
151
- if (decl.definition) {
152
- markdown += '```typescript\n';
153
- markdown += `interface ${decl.name} {\n${decl.definition}}\n`;
154
- markdown += '```\n\n';
155
- }
156
- }
157
- }
158
- }
159
- fs.writeFileSync(outputPath, markdown, 'utf-8');
160
- console.log(`✓ Generated DATA_DICTIONARY.md at: ${outputPath}`);
161
- const totalInterfaces = allDeclarations.filter((d) => d.type === 'interface').length;
162
- const totalTypes = allDeclarations.filter((d) => d.type === 'type').length;
163
- const totalEnums = allDeclarations.filter((d) => d.type === 'enum').length;
164
- console.log(`\nSummary: ${totalInterfaces} interfaces, ${totalTypes} types, ${totalEnums} enums`);
165
- }
166
- //# sourceMappingURL=vocab.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vocab.js","sourceRoot":"","sources":["../../src/commands/vocab.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,oCAmJC;AAvJD,2CAA4B;AAC5B,uCAAwB;AACxB,kDAAuG;AAEhG,KAAK,UAAU,YAAY,CAAC,kBAA0B,KAAK;IAChE,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;IAElD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,wBAAwB,YAAY,EAAE,CAAC,CAAA;IACzD,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,oBAAoB,YAAY,EAAE,CAAC,CAAA;IACrD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,uBAAuB,YAAY,IAAI,CAAC,CAAA;IAEpD,MAAM,KAAK,GAAG,IAAA,yBAAa,EAAC,YAAY,CAAC,CAAA;IACzC,MAAM,eAAe,GAA4B,EAAE,CAAA;IAEnD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,IAAA,wCAA4B,EAAC,IAAI,CAAC,CAAA;QACvD,eAAe,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAA;IACvC,CAAC;IAED,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAA;QAC1C,OAAM;IACR,CAAC;IAED,8BAA8B;IAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;IACrD,IAAI,QAAQ,GAAG,uBAAuB,CAAA;IACtC,QAAQ,IAAI,qBAAqB,eAAe,QAAQ,CAAA;IACxD,QAAQ,IAAI,uBAAuB,eAAe,CAAC,MAAM,MAAM,CAAA;IAC/D,QAAQ,IAAI,SAAS,CAAA;IAErB,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;IAC5D,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;IAEhE,mBAAmB;IACnB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,QAAQ,IAAI,iBAAiB,CAAA;QAE7B,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAA;QAC/D,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAA;QAC/D,MAAM,kBAAkB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAA;QAEzE,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,QAAQ,IAAI,eAAe,CAAA;YAC3B,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;gBACjC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC5D,QAAQ,IAAI,QAAQ,IAAI,CAAC,IAAI,MAAM,CAAA;gBACnC,QAAQ,IAAI,qBAAqB,YAAY,IAAI,IAAI,CAAC,IAAI,QAAQ,CAAA;gBAClE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACpB,QAAQ,IAAI,iBAAiB,CAAA;oBAC7B,QAAQ,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;oBAClC,QAAQ,IAAI,SAAS,CAAA;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,QAAQ,IAAI,eAAe,CAAA;YAC3B,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;gBACjC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC5D,QAAQ,IAAI,QAAQ,IAAI,CAAC,IAAI,MAAM,CAAA;gBACnC,QAAQ,IAAI,qBAAqB,YAAY,IAAI,IAAI,CAAC,IAAI,QAAQ,CAAA;gBAClE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACpB,QAAQ,IAAI,iBAAiB,CAAA;oBAC7B,QAAQ,IAAI,QAAQ,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,UAAU,IAAI,CAAA;oBACtD,QAAQ,IAAI,SAAS,CAAA;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,QAAQ,IAAI,oBAAoB,CAAA;YAChC,KAAK,MAAM,IAAI,IAAI,kBAAkB,EAAE,CAAC;gBACtC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC5D,QAAQ,IAAI,QAAQ,IAAI,CAAC,IAAI,MAAM,CAAA;gBACnC,QAAQ,IAAI,qBAAqB,YAAY,IAAI,IAAI,CAAC,IAAI,QAAQ,CAAA;gBAClE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACpB,QAAQ,IAAI,iBAAiB,CAAA;oBAC7B,QAAQ,IAAI,aAAa,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,CAAA;oBAC7D,QAAQ,IAAI,SAAS,CAAA;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,QAAQ,IAAI,qBAAqB,CAAA;QAEjC,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAA;QACrE,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAA;QACrE,MAAM,qBAAqB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAA;QAE/E,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,QAAQ,IAAI,eAAe,CAAA;YAC3B,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;gBACpC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC5D,QAAQ,IAAI,QAAQ,IAAI,CAAC,IAAI,MAAM,CAAA;gBACnC,QAAQ,IAAI,qBAAqB,YAAY,IAAI,IAAI,CAAC,IAAI,QAAQ,CAAA;gBAClE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACpB,QAAQ,IAAI,iBAAiB,CAAA;oBAC7B,QAAQ,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;oBAClC,QAAQ,IAAI,SAAS,CAAA;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,QAAQ,IAAI,eAAe,CAAA;YAC3B,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;gBACpC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC5D,QAAQ,IAAI,QAAQ,IAAI,CAAC,IAAI,MAAM,CAAA;gBACnC,QAAQ,IAAI,qBAAqB,YAAY,IAAI,IAAI,CAAC,IAAI,QAAQ,CAAA;gBAClE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACpB,QAAQ,IAAI,iBAAiB,CAAA;oBAC7B,QAAQ,IAAI,QAAQ,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,UAAU,IAAI,CAAA;oBACtD,QAAQ,IAAI,SAAS,CAAA;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,QAAQ,IAAI,oBAAoB,CAAA;YAChC,KAAK,MAAM,IAAI,IAAI,qBAAqB,EAAE,CAAC;gBACzC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC5D,QAAQ,IAAI,QAAQ,IAAI,CAAC,IAAI,MAAM,CAAA;gBACnC,QAAQ,IAAI,qBAAqB,YAAY,IAAI,IAAI,CAAC,IAAI,QAAQ,CAAA;gBAClE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACpB,QAAQ,IAAI,iBAAiB,CAAA;oBAC7B,QAAQ,IAAI,aAAa,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,CAAA;oBAC7D,QAAQ,IAAI,SAAS,CAAA;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;IAE/C,OAAO,CAAC,GAAG,CAAC,sCAAsC,UAAU,EAAE,CAAC,CAAA;IAE/D,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,MAAM,CAAA;IACpF,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,MAAM,CAAA;IAC1E,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,MAAM,CAAA;IAE1E,OAAO,CAAC,GAAG,CAAC,cAAc,eAAe,gBAAgB,UAAU,WAAW,UAAU,QAAQ,CAAC,CAAA;AACnG,CAAC"}
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=snitch.old.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"snitch.old.d.ts","sourceRoot":"","sources":["../src/snitch.old.ts"],"names":[],"mappings":""}
@@ -1,71 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- const scan_commands_1 = require("./commands/scan-commands");
5
- const dm_1 = require("./commands/dm");
6
- const scan_1 = require("./commands/scan");
7
- const init_1 = require("./commands/init");
8
- const vocab_1 = require("./commands/vocab");
9
- const nocomments_1 = require("./commands/nocomments");
10
- const commands_1 = require("./datamodel/commands");
11
- const args = process.argv.slice(2);
12
- if (args.length === 0) {
13
- console.log('Usage: snitch <command> <params>');
14
- console.log('\nAvailable commands:');
15
- console.log(' init - Create .snitchconfig.json in current directory');
16
- console.log(' dm <sourceDirectory> - Generate report of type, enum, and interface declarations');
17
- console.log(' scan <scanName> [directory] - Run pattern scanner (e.g., scan expectmagic test)');
18
- console.log(' fixtures <sourceDirectory> - Find inline config declarations that should use fixtures');
19
- console.log(' expectmagic [sourceDirectory] - Find magic values in expect() assertions (defaults to ./test)');
20
- console.log(' enumerate [sourceDirectory] - Find inline union types that should use enums');
21
- console.log(' badimports [sourceDirectory] - Find imports that violate rules (defaults to ./src)');
22
- console.log(' vocab [sourceDirectory] - Generate DATA_DICTIONARY.md from type definitions (defaults to ./src)');
23
- console.log(' nocomments [sourceDirectory] - Find inline comments without approved titles (defaults to ./src)');
24
- process.exit(1);
25
- }
26
- const command = args[0];
27
- const params = args.slice(1);
28
- async function main() {
29
- switch (command) {
30
- case commands_1.SnitchApi.Init:
31
- await (0, init_1.initCommand)();
32
- break;
33
- case commands_1.SnitchApi.Dirtydefaults:
34
- await (0, scan_commands_1.dirtydefaultsCommand)();
35
- break;
36
- case commands_1.SnitchApi.Dm:
37
- await (0, dm_1.dmCommand)(params.length > 0 ? params[0] : 'src');
38
- break;
39
- case commands_1.SnitchApi.Scan:
40
- const scanName = params[0];
41
- await (0, scan_1.scanCommand)(scanName);
42
- break;
43
- case commands_1.SnitchApi.Fixtures:
44
- await (0, scan_commands_1.fixturesCommand)();
45
- break;
46
- case commands_1.SnitchApi.Expectmagic:
47
- await (0, scan_commands_1.expectmagicCommand)();
48
- break;
49
- case commands_1.SnitchApi.Enumerate:
50
- await (0, scan_commands_1.enumerateCommand)();
51
- break;
52
- case commands_1.SnitchApi.Badimports:
53
- await (0, scan_commands_1.badimportsCommand)();
54
- break;
55
- case commands_1.SnitchApi.Vocab:
56
- await (0, vocab_1.vocabCommand)(params.length > 0 ? params[0] : 'src');
57
- break;
58
- case commands_1.SnitchApi.Nocomments:
59
- await (0, nocomments_1.noCommentCommand)(true, true);
60
- break;
61
- default:
62
- console.error(`Unknown command: ${command}`);
63
- console.log("Use 'snitch' without arguments to see available commands");
64
- process.exit(1);
65
- }
66
- }
67
- main().catch((error) => {
68
- console.error('Error:', error.message);
69
- process.exit(1);
70
- });
71
- //# sourceMappingURL=snitch.old.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"snitch.old.js","sourceRoot":"","sources":["../src/snitch.old.ts"],"names":[],"mappings":"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"}