@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.
- package/dist/commands/firstRun.d.ts +2 -0
- package/dist/commands/firstRun.d.ts.map +1 -0
- package/dist/commands/firstRun.js +10 -0
- package/dist/commands/firstRun.js.map +1 -0
- package/dist/commands/init/defaultConfigInit.d.ts +2 -0
- package/dist/commands/init/defaultConfigInit.d.ts.map +1 -0
- package/dist/commands/{nocomments.js → init/defaultConfigInit.js} +14 -20
- package/dist/commands/init/defaultConfigInit.js.map +1 -0
- package/dist/commands/init/downloadedConfigInit.d.ts +3 -0
- package/dist/commands/init/downloadedConfigInit.d.ts.map +1 -0
- package/dist/commands/init/downloadedConfigInit.js +80 -0
- package/dist/commands/init/downloadedConfigInit.js.map +1 -0
- package/dist/commands/init.d.ts +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +11 -12
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/prepare.d.ts +2 -0
- package/dist/commands/prepare.d.ts.map +1 -0
- package/dist/commands/prepare.js +61 -0
- package/dist/commands/prepare.js.map +1 -0
- package/dist/index.d.ts +2 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -16
- package/dist/index.js.map +1 -1
- package/dist/snitch.js +24 -9
- package/dist/snitch.js.map +1 -1
- package/dist/utils/args.d.ts +7 -0
- package/dist/utils/args.d.ts.map +1 -0
- package/dist/utils/args.js +27 -0
- package/dist/utils/args.js.map +1 -0
- package/package.json +3 -1
- package/dist/commands/dm.d.ts +0 -2
- package/dist/commands/dm.d.ts.map +0 -1
- package/dist/commands/dm.js +0 -100
- package/dist/commands/dm.js.map +0 -1
- package/dist/commands/nocomments.d.ts +0 -2
- package/dist/commands/nocomments.d.ts.map +0 -1
- package/dist/commands/nocomments.js.map +0 -1
- package/dist/commands/scan-commands.d.ts +0 -7
- package/dist/commands/scan-commands.d.ts.map +0 -1
- package/dist/commands/scan-commands.js +0 -28
- package/dist/commands/scan-commands.js.map +0 -1
- package/dist/commands/scan.d.ts +0 -2
- package/dist/commands/scan.d.ts.map +0 -1
- package/dist/commands/scan.js +0 -175
- package/dist/commands/scan.js.map +0 -1
- package/dist/commands/vocab.d.ts +0 -2
- package/dist/commands/vocab.d.ts.map +0 -1
- package/dist/commands/vocab.js +0 -166
- package/dist/commands/vocab.js.map +0 -1
- package/dist/snitch.old.d.ts +0 -3
- package/dist/snitch.old.d.ts.map +0 -1
- package/dist/snitch.old.js +0 -71
- package/dist/snitch.old.js.map +0 -1
|
@@ -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 @@
|
|
|
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.
|
|
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
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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=
|
|
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 @@
|
|
|
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"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -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":"
|
|
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"}
|
package/dist/commands/init.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
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 @@
|
|
|
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 {
|
|
6
|
-
export {
|
|
2
|
+
export { prepareCommand } from './commands/prepare';
|
|
3
|
+
export { firstRunCommand } from './commands/firstRun';
|
|
7
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
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.
|
|
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
|
|
19
|
-
Object.defineProperty(exports, "
|
|
20
|
-
var
|
|
21
|
-
Object.defineProperty(exports, "
|
|
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,
|
|
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
|
|
11
|
-
|
|
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 =
|
|
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
|
|
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
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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
|
|
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);
|
package/dist/snitch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snitch.js","sourceRoot":"","sources":["../src/snitch.ts"],"names":[],"mappings":";;;AAEA,+DAA2D;AAC3D,0DAA+D;AAC/D,mCAA4C;AAC5C,mDAAsD;AACtD,6DAAuD;AACvD,uEAAiE;
|
|
1
|
+
{"version":3,"file":"snitch.js","sourceRoot":"","sources":["../src/snitch.ts"],"names":[],"mappings":"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"}
|
|
@@ -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.
|
|
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
|
},
|
package/dist/commands/dm.d.ts
DELETED
|
@@ -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"}
|
package/dist/commands/dm.js
DELETED
|
@@ -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
|
package/dist/commands/dm.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dm.js","sourceRoot":"","sources":["../../src/commands/dm.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|
package/dist/commands/scan.d.ts
DELETED
|
@@ -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"}
|
package/dist/commands/scan.js
DELETED
|
@@ -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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"}
|
package/dist/commands/vocab.d.ts
DELETED
|
@@ -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"}
|
package/dist/commands/vocab.js
DELETED
|
@@ -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"}
|
package/dist/snitch.old.d.ts
DELETED
package/dist/snitch.old.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"snitch.old.d.ts","sourceRoot":"","sources":["../src/snitch.old.ts"],"names":[],"mappings":""}
|
package/dist/snitch.old.js
DELETED
|
@@ -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
|
package/dist/snitch.old.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"snitch.old.js","sourceRoot":"","sources":["../src/snitch.old.ts"],"names":[],"mappings":"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"}
|