@fyuld/snitch 1.4.1
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/.snitchconfig.json +142 -0
- package/dist/src/commands/badimports.d.ts +2 -0
- package/dist/src/commands/badimports.d.ts.map +1 -0
- package/dist/src/commands/badimports.js +8 -0
- package/dist/src/commands/badimports.js.map +1 -0
- package/dist/src/commands/dirtydefaults.d.ts +2 -0
- package/dist/src/commands/dirtydefaults.d.ts.map +1 -0
- package/dist/src/commands/dirtydefaults.js +8 -0
- package/dist/src/commands/dirtydefaults.js.map +1 -0
- package/dist/src/commands/dm.d.ts +2 -0
- package/dist/src/commands/dm.d.ts.map +1 -0
- package/dist/src/commands/dm.js +100 -0
- package/dist/src/commands/dm.js.map +1 -0
- package/dist/src/commands/enumerate.d.ts +2 -0
- package/dist/src/commands/enumerate.d.ts.map +1 -0
- package/dist/src/commands/enumerate.js +8 -0
- package/dist/src/commands/enumerate.js.map +1 -0
- package/dist/src/commands/expectmagic.d.ts +2 -0
- package/dist/src/commands/expectmagic.d.ts.map +1 -0
- package/dist/src/commands/expectmagic.js +8 -0
- package/dist/src/commands/expectmagic.js.map +1 -0
- package/dist/src/commands/fixtures.d.ts +2 -0
- package/dist/src/commands/fixtures.d.ts.map +1 -0
- package/dist/src/commands/fixtures.js +8 -0
- package/dist/src/commands/fixtures.js.map +1 -0
- package/dist/src/commands/init.d.ts +2 -0
- package/dist/src/commands/init.d.ts.map +1 -0
- package/dist/src/commands/init.js +64 -0
- package/dist/src/commands/init.js.map +1 -0
- package/dist/src/commands/scan.d.ts +2 -0
- package/dist/src/commands/scan.d.ts.map +1 -0
- package/dist/src/commands/scan.js +81 -0
- package/dist/src/commands/scan.js.map +1 -0
- package/dist/src/commands/vocab.d.ts +2 -0
- package/dist/src/commands/vocab.d.ts.map +1 -0
- package/dist/src/commands/vocab.js +166 -0
- package/dist/src/commands/vocab.js.map +1 -0
- package/dist/src/datamodel.d.ts +18 -0
- package/dist/src/datamodel.d.ts.map +1 -0
- package/dist/src/datamodel.js +23 -0
- package/dist/src/datamodel.js.map +1 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +69 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/utils/pattern-scanner.d.ts +31 -0
- package/dist/src/utils/pattern-scanner.d.ts.map +1 -0
- package/dist/src/utils/pattern-scanner.js +154 -0
- package/dist/src/utils/pattern-scanner.js.map +1 -0
- package/dist/src/utils/ts-parser.d.ts +16 -0
- package/dist/src/utils/ts-parser.d.ts.map +1 -0
- package/dist/src/utils/ts-parser.js +350 -0
- package/dist/src/utils/ts-parser.js.map +1 -0
- package/package.json +40 -0
|
@@ -0,0 +1,166 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vocab.js","sourceRoot":"","sources":["../../../src/commands/vocab.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare enum TypeScriptTypeKind {
|
|
2
|
+
Type = "type",
|
|
3
|
+
Enum = "enum",
|
|
4
|
+
Interface = "interface",
|
|
5
|
+
Class = "class"
|
|
6
|
+
}
|
|
7
|
+
export declare enum SnitchCommands {
|
|
8
|
+
Init = "init",
|
|
9
|
+
Scan = "scan",
|
|
10
|
+
Dirtydefaults = "dirtydefaults",
|
|
11
|
+
Dm = "dm",
|
|
12
|
+
Expectmagic = "expectmagic",
|
|
13
|
+
Fixtures = "fixtures",
|
|
14
|
+
Enumerate = "enumerate",
|
|
15
|
+
Badimports = "badimports",
|
|
16
|
+
Vocab = "vocab"
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=datamodel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datamodel.d.ts","sourceRoot":"","sources":["../../src/datamodel.ts"],"names":[],"mappings":"AAAA,oBAAY,kBAAkB;IAC5B,IAAI,SAAS;IACb,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,KAAK,UAAU;CAChB;AAED,oBAAY,cAAc;IACxB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,aAAa,kBAAkB;IAC/B,EAAE,OAAO;IACT,WAAW,gBAAgB;IAC3B,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,UAAU,eAAe;IACzB,KAAK,UAAU;CAChB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SnitchCommands = exports.TypeScriptTypeKind = void 0;
|
|
4
|
+
var TypeScriptTypeKind;
|
|
5
|
+
(function (TypeScriptTypeKind) {
|
|
6
|
+
TypeScriptTypeKind["Type"] = "type";
|
|
7
|
+
TypeScriptTypeKind["Enum"] = "enum";
|
|
8
|
+
TypeScriptTypeKind["Interface"] = "interface";
|
|
9
|
+
TypeScriptTypeKind["Class"] = "class";
|
|
10
|
+
})(TypeScriptTypeKind || (exports.TypeScriptTypeKind = TypeScriptTypeKind = {}));
|
|
11
|
+
var SnitchCommands;
|
|
12
|
+
(function (SnitchCommands) {
|
|
13
|
+
SnitchCommands["Init"] = "init";
|
|
14
|
+
SnitchCommands["Scan"] = "scan";
|
|
15
|
+
SnitchCommands["Dirtydefaults"] = "dirtydefaults";
|
|
16
|
+
SnitchCommands["Dm"] = "dm";
|
|
17
|
+
SnitchCommands["Expectmagic"] = "expectmagic";
|
|
18
|
+
SnitchCommands["Fixtures"] = "fixtures";
|
|
19
|
+
SnitchCommands["Enumerate"] = "enumerate";
|
|
20
|
+
SnitchCommands["Badimports"] = "badimports";
|
|
21
|
+
SnitchCommands["Vocab"] = "vocab";
|
|
22
|
+
})(SnitchCommands || (exports.SnitchCommands = SnitchCommands = {}));
|
|
23
|
+
//# sourceMappingURL=datamodel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datamodel.js","sourceRoot":"","sources":["../../src/datamodel.ts"],"names":[],"mappings":";;;AAAA,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC5B,mCAAa,CAAA;IACb,mCAAa,CAAA;IACb,6CAAuB,CAAA;IACvB,qCAAe,CAAA;AACjB,CAAC,EALW,kBAAkB,kCAAlB,kBAAkB,QAK7B;AAED,IAAY,cAUX;AAVD,WAAY,cAAc;IACxB,+BAAa,CAAA;IACb,+BAAa,CAAA;IACb,iDAA+B,CAAA;IAC/B,2BAAS,CAAA;IACT,6CAA2B,CAAA;IAC3B,uCAAqB,CAAA;IACrB,yCAAuB,CAAA;IACvB,2CAAyB,CAAA;IACzB,iCAAe,CAAA;AACjB,CAAC,EAVW,cAAc,8BAAd,cAAc,QAUzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const dirtydefaults_1 = require("./commands/dirtydefaults");
|
|
5
|
+
const dm_1 = require("./commands/dm");
|
|
6
|
+
const fixtures_1 = require("./commands/fixtures");
|
|
7
|
+
const expectmagic_1 = require("./commands/expectmagic");
|
|
8
|
+
const scan_1 = require("./commands/scan");
|
|
9
|
+
const init_1 = require("./commands/init");
|
|
10
|
+
const enumerate_1 = require("./commands/enumerate");
|
|
11
|
+
const badimports_1 = require("./commands/badimports");
|
|
12
|
+
const vocab_1 = require("./commands/vocab");
|
|
13
|
+
const datamodel_1 = require("./datamodel");
|
|
14
|
+
const args = process.argv.slice(2);
|
|
15
|
+
if (args.length === 0) {
|
|
16
|
+
console.log('Usage: snitch <command> <params>');
|
|
17
|
+
console.log('\nAvailable commands:');
|
|
18
|
+
console.log(' init - Create .snitchconfig.json in current directory');
|
|
19
|
+
console.log(' dm <sourceDirectory> - Generate report of type, enum, and interface declarations');
|
|
20
|
+
console.log(' scan <scanName> [directory] - Run pattern scanner (e.g., scan expectmagic test)');
|
|
21
|
+
console.log(' fixtures <sourceDirectory> - Find inline config declarations that should use fixtures');
|
|
22
|
+
console.log(' expectmagic [sourceDirectory] - Find magic values in expect() assertions (defaults to ./test)');
|
|
23
|
+
console.log(' enumerate [sourceDirectory] - Find inline union types that should use enums');
|
|
24
|
+
console.log(' badimports [sourceDirectory] - Find imports that violate rules (defaults to ./src)');
|
|
25
|
+
console.log(' vocab [sourceDirectory] - Generate DATA_DICTIONARY.md from type definitions (defaults to ./src)');
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
const command = args[0];
|
|
29
|
+
const params = args.slice(1);
|
|
30
|
+
async function main() {
|
|
31
|
+
switch (command) {
|
|
32
|
+
case datamodel_1.SnitchCommands.Init:
|
|
33
|
+
await (0, init_1.initCommand)();
|
|
34
|
+
break;
|
|
35
|
+
case datamodel_1.SnitchCommands.Dirtydefaults:
|
|
36
|
+
await (0, dirtydefaults_1.dirtydefaultsCommand)(params.length > 0 ? params[0] : 'src');
|
|
37
|
+
break;
|
|
38
|
+
case datamodel_1.SnitchCommands.Dm:
|
|
39
|
+
await (0, dm_1.dmCommand)(params.length > 0 ? params[0] : 'src');
|
|
40
|
+
break;
|
|
41
|
+
case datamodel_1.SnitchCommands.Scan:
|
|
42
|
+
await (0, scan_1.scanCommand)(params);
|
|
43
|
+
break;
|
|
44
|
+
case datamodel_1.SnitchCommands.Fixtures:
|
|
45
|
+
await (0, fixtures_1.fixturesCommand)(params.length > 0 ? params[0] : 'test');
|
|
46
|
+
break;
|
|
47
|
+
case datamodel_1.SnitchCommands.Expectmagic:
|
|
48
|
+
await (0, expectmagic_1.expectmagicCommand)(params.length > 0 ? params[0] : 'test');
|
|
49
|
+
break;
|
|
50
|
+
case datamodel_1.SnitchCommands.Enumerate:
|
|
51
|
+
await (0, enumerate_1.enumerateCommand)(params.length > 0 ? params[0] : 'src');
|
|
52
|
+
break;
|
|
53
|
+
case datamodel_1.SnitchCommands.Badimports:
|
|
54
|
+
await (0, badimports_1.badimportsCommand)(params.length > 0 ? params[0] : 'src');
|
|
55
|
+
break;
|
|
56
|
+
case datamodel_1.SnitchCommands.Vocab:
|
|
57
|
+
await (0, vocab_1.vocabCommand)(params.length > 0 ? params[0] : 'src');
|
|
58
|
+
break;
|
|
59
|
+
default:
|
|
60
|
+
console.error(`Unknown command: ${command}`);
|
|
61
|
+
console.log("Use 'snitch' without arguments to see available commands");
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
main().catch((error) => {
|
|
66
|
+
console.error('Error:', error.message);
|
|
67
|
+
process.exit(1);
|
|
68
|
+
});
|
|
69
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface Warning {
|
|
2
|
+
message: string;
|
|
3
|
+
regexes: string[];
|
|
4
|
+
recommendation?: {
|
|
5
|
+
message: string;
|
|
6
|
+
recommendations: string[];
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export interface ScanConfig {
|
|
10
|
+
warnings: Warning[];
|
|
11
|
+
}
|
|
12
|
+
export interface Violation {
|
|
13
|
+
warning: string;
|
|
14
|
+
file: string;
|
|
15
|
+
line: number;
|
|
16
|
+
content: string;
|
|
17
|
+
recommendation?: {
|
|
18
|
+
message: string;
|
|
19
|
+
recommendations: string[];
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export type FileFilter = (filePath: string, fileName: string) => boolean;
|
|
23
|
+
export declare function scanFiles(directory: string, fileFilter: FileFilter): string[];
|
|
24
|
+
export declare function findViolations(files: string[], config: ScanConfig): Violation[];
|
|
25
|
+
export declare function printReport(violations: Violation[], reportTitle: string): void;
|
|
26
|
+
export declare const FILE_FILTERS: {
|
|
27
|
+
testFiles: (_filePath: string, fileName: string) => boolean;
|
|
28
|
+
allTypeScript: (_filePath: string, fileName: string) => boolean;
|
|
29
|
+
allFiles: (_filePath: string, _fileName: string) => boolean;
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=pattern-scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-scanner.d.ts","sourceRoot":"","sources":["../../../src/utils/pattern-scanner.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,CAAC,EAAE;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,EAAE,MAAM,EAAE,CAAC;KAC3B,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,EAAE,MAAM,EAAE,CAAC;KAC3B,CAAC;CACH;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;AAEzE,wBAAgB,SAAS,CACvB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,GACrB,MAAM,EAAE,CAyBV;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,EAAE,UAAU,GACjB,SAAS,EAAE,CA6Bb;AAED,wBAAgB,WAAW,CACzB,UAAU,EAAE,SAAS,EAAE,EACvB,WAAW,EAAE,MAAM,GAClB,IAAI,CAsEN;AAED,eAAO,MAAM,YAAY;2BACA,MAAM,YAAY,MAAM;+BAEpB,MAAM,YAAY,MAAM;0BAE7B,MAAM,aAAa,MAAM;CAChD,CAAC"}
|
|
@@ -0,0 +1,154 @@
|
|
|
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.FILE_FILTERS = void 0;
|
|
37
|
+
exports.scanFiles = scanFiles;
|
|
38
|
+
exports.findViolations = findViolations;
|
|
39
|
+
exports.printReport = printReport;
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
function scanFiles(directory, fileFilter) {
|
|
43
|
+
const files = [];
|
|
44
|
+
function scan(dir) {
|
|
45
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
46
|
+
for (const entry of entries) {
|
|
47
|
+
const fullPath = path.join(dir, entry.name);
|
|
48
|
+
if (entry.isDirectory()) {
|
|
49
|
+
if (entry.name !== "node_modules" &&
|
|
50
|
+
entry.name !== "dist" &&
|
|
51
|
+
!entry.name.startsWith(".")) {
|
|
52
|
+
scan(fullPath);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else if (entry.isFile() && fileFilter(fullPath, entry.name)) {
|
|
56
|
+
files.push(fullPath);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
scan(directory);
|
|
61
|
+
return files;
|
|
62
|
+
}
|
|
63
|
+
function findViolations(files, config) {
|
|
64
|
+
const violations = [];
|
|
65
|
+
for (const file of files) {
|
|
66
|
+
const content = fs.readFileSync(file, "utf-8");
|
|
67
|
+
const lines = content.split("\n");
|
|
68
|
+
for (let i = 0; i < lines.length; i++) {
|
|
69
|
+
const line = lines[i];
|
|
70
|
+
const lineNumber = i + 1;
|
|
71
|
+
for (const warning of config.warnings) {
|
|
72
|
+
for (const regexPattern of warning.regexes) {
|
|
73
|
+
const regex = new RegExp(regexPattern);
|
|
74
|
+
if (regex.test(line)) {
|
|
75
|
+
violations.push({
|
|
76
|
+
warning: warning.message,
|
|
77
|
+
file: file,
|
|
78
|
+
line: lineNumber,
|
|
79
|
+
content: line.trim(),
|
|
80
|
+
recommendation: warning.recommendation,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return violations;
|
|
88
|
+
}
|
|
89
|
+
function printReport(violations, reportTitle) {
|
|
90
|
+
if (violations.length === 0) {
|
|
91
|
+
console.log("No violations found.");
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
console.log("=".repeat(80));
|
|
95
|
+
console.log(reportTitle.toUpperCase());
|
|
96
|
+
console.log("=".repeat(80));
|
|
97
|
+
console.log(`\nTotal violations found: ${violations.length}\n`);
|
|
98
|
+
const uniqueRecommendations = new Map();
|
|
99
|
+
for (const violation of violations) {
|
|
100
|
+
if (violation.recommendation) {
|
|
101
|
+
const key = violation.recommendation.message;
|
|
102
|
+
if (!uniqueRecommendations.has(key)) {
|
|
103
|
+
uniqueRecommendations.set(key, violation.recommendation);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (uniqueRecommendations.size > 0) {
|
|
108
|
+
console.log("RECOMMENDATIONS:");
|
|
109
|
+
console.log("─".repeat(80));
|
|
110
|
+
for (const rec of uniqueRecommendations.values()) {
|
|
111
|
+
console.log(`\n${rec.message}`);
|
|
112
|
+
for (const recommendation of rec.recommendations) {
|
|
113
|
+
console.log(` • ${recommendation}`);
|
|
114
|
+
}
|
|
115
|
+
console.log("");
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const groupedByWarning = violations.reduce((acc, violation) => {
|
|
119
|
+
if (!acc[violation.warning]) {
|
|
120
|
+
acc[violation.warning] = [];
|
|
121
|
+
}
|
|
122
|
+
acc[violation.warning].push(violation);
|
|
123
|
+
return acc;
|
|
124
|
+
}, {});
|
|
125
|
+
for (const [warningMessage, items] of Object.entries(groupedByWarning)) {
|
|
126
|
+
console.log(`\n${"─".repeat(80)}`);
|
|
127
|
+
console.log(`${warningMessage.toUpperCase()} (${items.length})`);
|
|
128
|
+
console.log("─".repeat(80));
|
|
129
|
+
for (const violation of items) {
|
|
130
|
+
const relativePath = path.relative(process.cwd(), violation.file);
|
|
131
|
+
console.log(`\n File: ${relativePath}:${violation.line}`);
|
|
132
|
+
console.log(` Code: ${violation.content}`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (uniqueRecommendations.size > 0) {
|
|
136
|
+
console.log(`\n${"─".repeat(80)}`);
|
|
137
|
+
console.log("RECOMMENDATIONS:");
|
|
138
|
+
console.log("─".repeat(80));
|
|
139
|
+
for (const rec of uniqueRecommendations.values()) {
|
|
140
|
+
console.log(`\n${rec.message}`);
|
|
141
|
+
for (const recommendation of rec.recommendations) {
|
|
142
|
+
console.log(` • ${recommendation}`);
|
|
143
|
+
}
|
|
144
|
+
console.log("");
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
console.log(`\n${"=".repeat(80)}\n`);
|
|
148
|
+
}
|
|
149
|
+
exports.FILE_FILTERS = {
|
|
150
|
+
testFiles: (_filePath, fileName) => fileName.endsWith(".test.ts") || fileName.endsWith(".spec.ts"),
|
|
151
|
+
allTypeScript: (_filePath, fileName) => fileName.endsWith(".ts") || fileName.endsWith(".tsx"),
|
|
152
|
+
allFiles: (_filePath, _fileName) => true,
|
|
153
|
+
};
|
|
154
|
+
//# sourceMappingURL=pattern-scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-scanner.js","sourceRoot":"","sources":["../../../src/utils/pattern-scanner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,8BA4BC;AAED,wCAgCC;AAED,kCAyEC;AAtKD,2CAA6B;AAC7B,uCAAyB;AA4BzB,SAAgB,SAAS,CACvB,SAAiB,EACjB,UAAsB;IAEtB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,SAAS,IAAI,CAAC,GAAW;QACvB,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAE7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAE5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,IACE,KAAK,CAAC,IAAI,KAAK,cAAc;oBAC7B,KAAK,CAAC,IAAI,KAAK,MAAM;oBACrB,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAC3B,CAAC;oBACD,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACjB,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9D,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,CAAC;IAChB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,cAAc,CAC5B,KAAe,EACf,MAAkB;IAElB,MAAM,UAAU,GAAgB,EAAE,CAAC;IAEnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;YAEzB,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACtC,KAAK,MAAM,YAAY,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBAC3C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC;oBACvC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;wBACrB,UAAU,CAAC,IAAI,CAAC;4BACd,OAAO,EAAE,OAAO,CAAC,OAAO;4BACxB,IAAI,EAAE,IAAI;4BACV,IAAI,EAAE,UAAU;4BAChB,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;4BACpB,cAAc,EAAE,OAAO,CAAC,cAAc;yBACvC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAgB,WAAW,CACzB,UAAuB,EACvB,WAAmB;IAEnB,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACpC,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,6BAA6B,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC;IAEhE,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAGlC,CAAC;IACJ,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,SAAS,CAAC,cAAc,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC;YAC7C,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpC,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,qBAAqB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,KAAK,MAAM,GAAG,IAAI,qBAAqB,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAChC,KAAK,MAAM,cAAc,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;gBACjD,OAAO,CAAC,GAAG,CAAC,OAAO,cAAc,EAAE,CAAC,CAAC;YACvC,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE;QAC5D,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QAC9B,CAAC;QACD,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvC,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAiC,CAAC,CAAC;IAEtC,KAAK,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAE5B,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;YAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,aAAa,YAAY,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,WAAW,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,IAAI,qBAAqB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,KAAK,MAAM,GAAG,IAAI,qBAAqB,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAChC,KAAK,MAAM,cAAc,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;gBACjD,OAAO,CAAC,GAAG,CAAC,OAAO,cAAc,EAAE,CAAC,CAAC;YACvC,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC;AAEY,QAAA,YAAY,GAAG;IAC1B,SAAS,EAAE,CAAC,SAAiB,EAAE,QAAgB,EAAE,EAAE,CACjD,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC;IAChE,aAAa,EAAE,CAAC,SAAiB,EAAE,QAAgB,EAAE,EAAE,CACrD,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;IACvD,QAAQ,EAAE,CAAC,SAAiB,EAAE,SAAiB,EAAE,EAAE,CAAC,IAAI;CACzD,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { TypeScriptTypeKind } from "../datamodel";
|
|
2
|
+
export interface Declaration {
|
|
3
|
+
name: string;
|
|
4
|
+
type: TypeScriptTypeKind;
|
|
5
|
+
file: string;
|
|
6
|
+
line: number;
|
|
7
|
+
}
|
|
8
|
+
export interface DeclarationWithExport extends Declaration {
|
|
9
|
+
isExported: boolean;
|
|
10
|
+
definition?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function scanDirectory(directory: string): string[];
|
|
13
|
+
export declare function parseDeclarations(filePath: string): Declaration[];
|
|
14
|
+
export declare function parseDeclarationsWithExportInfo(filePath: string): DeclarationWithExport[];
|
|
15
|
+
export declare function parseDeclarationsWithDetails(filePath: string): DeclarationWithExport[];
|
|
16
|
+
//# sourceMappingURL=ts-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ts-parser.d.ts","sourceRoot":"","sources":["../../../src/utils/ts-parser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,kBAAkB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACxD,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAuBzD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,CA+CjE;AAED,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,MAAM,GACf,qBAAqB,EAAE,CA4FzB;AA4ED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,MAAM,GACf,qBAAqB,EAAE,CAsGzB"}
|