@m4x_7/type-debt 1.0.12 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants.js.map +1 -1
- package/dist/core/chunkProcessor.d.ts +2 -1
- package/dist/core/chunkProcessor.js +9 -12
- package/dist/core/chunkProcessor.js.map +1 -1
- package/dist/core/reporter.js +3 -3
- package/dist/core/reporter.js.map +1 -1
- package/dist/core/typeDebt.js +28 -49
- package/dist/core/typeDebt.js.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/utils.js +3 -1
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG;IAErB,UAAU,EAAE,EAAE;IAEd,iBAAiB,EAAC;QACd,mBAAmB,EAAE,CAAC;QACtB,mBAAmB,EAAE,CAAC;QACtB,aAAa,EAAE,CAAC;QAChB,kBAAkB,EAAE,CAAC;QACrB,yBAAyB,EAAE,CAAC;KAC/B;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG;IAErB,UAAU,EAAE,EAAE;IAEd,iBAAiB,EAAC;QACd,mBAAmB,EAAE,CAAC;QACtB,mBAAmB,EAAE,CAAC;QACtB,aAAa,EAAE,CAAC;QAChB,kBAAkB,EAAE,CAAC;QACrB,yBAAyB,EAAE,CAAC;KAC/B;CAIK,CAAC"}
|
|
@@ -1,20 +1,17 @@
|
|
|
1
|
-
import { Project } from "ts-morph";
|
|
2
1
|
import { getTypeDebt } from "./typeDebt.js";
|
|
3
|
-
export function processChunk(
|
|
4
|
-
const project = new Project({ skipAddingFilesFromTsConfig: true });
|
|
5
|
-
project.addSourceFilesAtPaths(chunk);
|
|
2
|
+
export function processChunk(chunkPaths, project) {
|
|
6
3
|
const chunkResults = [];
|
|
7
4
|
project.forgetNodesCreatedInBlock(() => {
|
|
8
|
-
for (const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
for (const filePath of chunkPaths) {
|
|
6
|
+
const file = project.getSourceFile(filePath);
|
|
7
|
+
if (file) {
|
|
8
|
+
chunkResults.push({
|
|
9
|
+
filePath: file.getFilePath(),
|
|
10
|
+
typeDebtMetrics: getTypeDebt(file)
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
13
|
}
|
|
14
14
|
});
|
|
15
|
-
for (const file of project.getSourceFiles()) {
|
|
16
|
-
project.removeSourceFile(file);
|
|
17
|
-
}
|
|
18
15
|
return chunkResults;
|
|
19
16
|
}
|
|
20
17
|
//# sourceMappingURL=chunkProcessor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunkProcessor.js","sourceRoot":"","sources":["../../core/chunkProcessor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chunkProcessor.js","sourceRoot":"","sources":["../../core/chunkProcessor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C,MAAM,UAAU,YAAY,CAAC,UAAoB,EAAE,OAAgB;IAEjE,MAAM,YAAY,GAAiB,EAAE,CAAC;IAEtC,OAAO,CAAC,yBAAyB,CAAC,GAAG,EAAE;QACrC,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;YAElC,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC7C,IAAI,IAAI,EAAE,CAAC;gBACT,YAAY,CAAC,IAAI,CAAC;oBAChB,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE;oBAC5B,eAAe,EAAE,WAAW,CAAC,IAAI,CAAC;iBACnC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC;AACtB,CAAC"}
|
package/dist/core/reporter.js
CHANGED
|
@@ -8,19 +8,19 @@ export async function generateMarkdownReport(results, targetDir, outputPath = "t
|
|
|
8
8
|
const averageScore = Math.round(totalScore / totalFiles);
|
|
9
9
|
const sortedResults = [...results].sort((a, b) => a.typeDebtMetrics.score - b.typeDebtMetrics.score);
|
|
10
10
|
let md = `Type Debt Report\n\n`;
|
|
11
|
-
md += `> Generated on: ${new Date().
|
|
11
|
+
md += `> Generated on: ${new Date().toLocaleString()}\n\n`;
|
|
12
12
|
md += `## Summary\n`;
|
|
13
13
|
md += `- Total Files Scanned: ${totalFiles}\n`;
|
|
14
14
|
md += `- Average Score: ${averageScore}/100\n\n`;
|
|
15
15
|
md += `## Top 10 Worst Offenders\n\n`;
|
|
16
|
-
md += `| Score | File Path |
|
|
16
|
+
md += `| Score | File Path | Typed Nodes | Suppressions | Implicit \`any\` | Explicit \`any\` | \`as any\` | Non-Null (\`!\`) |\n`;
|
|
17
17
|
md += `| :---: | :--- | :--- | :---: | :---: | :---: | :---: | :---: |\n`;
|
|
18
18
|
const worstOffenders = sortedResults.slice(0, 10);
|
|
19
19
|
const absoluteTargetDir = path.resolve(targetDir);
|
|
20
20
|
for (const result of worstOffenders) {
|
|
21
21
|
const metrics = result.typeDebtMetrics;
|
|
22
22
|
const cleanPath = path.relative(absoluteTargetDir, result.filePath);
|
|
23
|
-
md += `| ${metrics.score} | \`${cleanPath}\` | ${metrics.
|
|
23
|
+
md += `| ${metrics.score} | \`${cleanPath}\` | ${metrics.typedNodes} | ${metrics.suppressions} | ${metrics.implicitAny} | ${metrics.explicitAny} | ${metrics.asAny} | ${metrics.nonNullAssertions} |\n`;
|
|
24
24
|
}
|
|
25
25
|
try {
|
|
26
26
|
await fs.writeFile(outputPath, md, "utf-8");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../core/reporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAIxB,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,OAAqB,EAAE,SAAiB,EAAE,UAAU,GAAG,qBAAqB;IACvH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEjC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAClC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACtF,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC;IAEzD,MAAM,aAAa,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC/C,CAAC,CAAC,eAAe,CAAC,KAAK,GAAG,CAAC,CAAC,eAAe,CAAC,KAAK,CAClD,CAAC;IAEF,IAAI,EAAE,GAAG,sBAAsB,CAAC;IAChC,EAAE,IAAI,mBAAmB,IAAI,IAAI,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../core/reporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAIxB,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,OAAqB,EAAE,SAAiB,EAAE,UAAU,GAAG,qBAAqB;IACvH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEjC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAClC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACtF,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC;IAEzD,MAAM,aAAa,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC/C,CAAC,CAAC,eAAe,CAAC,KAAK,GAAG,CAAC,CAAC,eAAe,CAAC,KAAK,CAClD,CAAC;IAEF,IAAI,EAAE,GAAG,sBAAsB,CAAC;IAChC,EAAE,IAAI,mBAAmB,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE,MAAM,CAAC;IAE3D,EAAE,IAAI,cAAc,CAAC;IACrB,EAAE,IAAI,0BAA0B,UAAU,IAAI,CAAC;IAC/C,EAAE,IAAI,oBAAoB,YAAY,UAAU,CAAC;IAEjD,EAAE,IAAI,+BAA+B,CAAC;IAEtC,EAAE,IAAI,4HAA4H,CAAC;IAEnI,EAAE,IAAI,mEAAmE,CAAC;IAE1E,MAAM,cAAc,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAElD,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAElD,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,MAAM,CAAC,eAAe,CAAC;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpE,EAAE,IAAI,KAAK,OAAO,CAAC,KAAK,QAAQ,SAAS,QAAQ,OAAO,CAAC,UAAU,MAAM,OAAO,CAAC,YAAY,MAAM,OAAO,CAAC,WAAW,MAAM,OAAO,CAAC,WAAW,MAAM,OAAO,CAAC,KAAK,MAAM,OAAO,CAAC,iBAAiB,MAAM,CAAC;IAC1M,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,gDAAgD,UAAU,EAAE,CAAC,CAAC;IAC5E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC"}
|
package/dist/core/typeDebt.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SyntaxKind } from "ts-morph";
|
|
1
|
+
import { SyntaxKind, Node } from "ts-morph";
|
|
2
2
|
import { CONSTANTS } from "../constants.js";
|
|
3
3
|
const SUPPRESSION_REGEX = /(?:\/\/|\/\*)\s*@ts-(ignore|expect-error|nocheck)/g;
|
|
4
4
|
export function getTypeDebt(sourceFile) {
|
|
@@ -8,47 +8,43 @@ export function getTypeDebt(sourceFile) {
|
|
|
8
8
|
asAny: 0,
|
|
9
9
|
suppressions: 0,
|
|
10
10
|
nonNullAssertions: 0,
|
|
11
|
-
|
|
11
|
+
typedNodes: 0,
|
|
12
12
|
score: 0
|
|
13
13
|
};
|
|
14
|
+
const typeChecker = sourceFile.getProject().getTypeChecker();
|
|
14
15
|
sourceFile.forEachDescendant(node => {
|
|
15
16
|
const kind = node.getKind();
|
|
16
|
-
// explicit any
|
|
17
|
-
if (kind === SyntaxKind.AnyKeyword) {
|
|
18
|
-
const parent = node.getParent();
|
|
19
|
-
if (parent?.getKind() !== SyntaxKind.AsExpression) {
|
|
20
|
-
metrics.explicitAny++;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
17
|
// as any
|
|
24
|
-
|
|
18
|
+
if (kind === SyntaxKind.AsExpression) {
|
|
25
19
|
const asExpression = node.asKindOrThrow(SyntaxKind.AsExpression);
|
|
26
20
|
if (asExpression.getTypeNode()?.getKind() === SyntaxKind.AnyKeyword) {
|
|
27
21
|
metrics.asAny++;
|
|
28
22
|
}
|
|
29
23
|
}
|
|
30
|
-
// implicit any
|
|
31
|
-
if (kind === SyntaxKind.Parameter) {
|
|
32
|
-
const parameter = node.asKindOrThrow(SyntaxKind.Parameter);
|
|
33
|
-
if (!parameter.getTypeNode() && !parameter.getInitializer()) {
|
|
34
|
-
const parentFunction = parameter.getParent();
|
|
35
|
-
const grandParent = parentFunction?.getParent();
|
|
36
|
-
// Ignore parameters in callbacks (e.g., .map(item => ...))
|
|
37
|
-
const isCallback = (parentFunction?.getKind() === SyntaxKind.ArrowFunction ||
|
|
38
|
-
parentFunction?.getKind() === SyntaxKind.FunctionExpression) &&
|
|
39
|
-
grandParent?.getKind() === SyntaxKind.CallExpression;
|
|
40
|
-
if (!isCallback) {
|
|
41
|
-
metrics.implicitAny++;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
24
|
// not null expression
|
|
46
25
|
if (kind === SyntaxKind.NonNullExpression) {
|
|
47
26
|
metrics.nonNullAssertions++;
|
|
48
27
|
}
|
|
49
|
-
//
|
|
50
|
-
else if (
|
|
51
|
-
|
|
28
|
+
// declarations
|
|
29
|
+
else if (Node.isVariableDeclaration(node) ||
|
|
30
|
+
Node.isParameterDeclaration(node) ||
|
|
31
|
+
Node.isPropertyDeclaration(node)) {
|
|
32
|
+
const typeNode = node.getTypeNode();
|
|
33
|
+
if (typeNode && typeNode.getKind() === SyntaxKind.AnyKeyword) {
|
|
34
|
+
metrics.explicitAny++;
|
|
35
|
+
}
|
|
36
|
+
else if (!typeNode) {
|
|
37
|
+
const type = node.getType();
|
|
38
|
+
if (type.isAny()) {
|
|
39
|
+
metrics.implicitAny++;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
metrics.typedNodes++;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
metrics.typedNodes++;
|
|
47
|
+
}
|
|
52
48
|
}
|
|
53
49
|
});
|
|
54
50
|
//suppressions
|
|
@@ -59,21 +55,12 @@ export function getTypeDebt(sourceFile) {
|
|
|
59
55
|
return metrics;
|
|
60
56
|
}
|
|
61
57
|
export function calculateScore(metrics) {
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
metrics.asAny +
|
|
65
|
-
metrics.suppressions +
|
|
66
|
-
metrics.nonNullAssertions;
|
|
67
|
-
const totalTypeNodes = metrics.validTypes + totalDebtInstances;
|
|
68
|
-
if (totalTypeNodes == 0) {
|
|
58
|
+
const penalty = calculatePenalty(metrics);
|
|
59
|
+
if (metrics.typedNodes + penalty === 0) {
|
|
69
60
|
return 100;
|
|
70
61
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const rawPenalty = calculatePenalty(metrics);
|
|
74
|
-
const scaledPenalty = (rawPenalty / totalTypeNodes) * 100;
|
|
75
|
-
return Math.max(0, Math.round(baseScore - scaledPenalty));
|
|
76
|
-
}
|
|
62
|
+
const score = Math.round(100 * metrics.typedNodes / (metrics.typedNodes + penalty));
|
|
63
|
+
return Math.max(0, score);
|
|
77
64
|
}
|
|
78
65
|
export function calculatePenalty(metrics) {
|
|
79
66
|
return metrics.explicitAny * CONSTANTS.TYPE_DEBT_METRICS.EXPLICIT_ANY_WEIGHT
|
|
@@ -82,12 +69,4 @@ export function calculatePenalty(metrics) {
|
|
|
82
69
|
+ metrics.nonNullAssertions * CONSTANTS.TYPE_DEBT_METRICS.NON_NULL_ASSERTION_WEIGHT
|
|
83
70
|
+ metrics.suppressions * CONSTANTS.TYPE_DEBT_METRICS.SUPPRESSION_WEIGHT;
|
|
84
71
|
}
|
|
85
|
-
function isValidType(kind) {
|
|
86
|
-
return (kind === SyntaxKind.TypeReference ||
|
|
87
|
-
kind === SyntaxKind.StringKeyword ||
|
|
88
|
-
kind === SyntaxKind.NumberKeyword ||
|
|
89
|
-
kind === SyntaxKind.BooleanKeyword ||
|
|
90
|
-
kind === SyntaxKind.InterfaceDeclaration ||
|
|
91
|
-
kind === SyntaxKind.TypeAliasDeclaration);
|
|
92
|
-
}
|
|
93
72
|
//# sourceMappingURL=typeDebt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typeDebt.js","sourceRoot":"","sources":["../../core/typeDebt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"typeDebt.js","sourceRoot":"","sources":["../../core/typeDebt.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -4,6 +4,7 @@ import { chunkArray, validateDirectory } from "./utils.js";
|
|
|
4
4
|
import { processChunk } from "./core/chunkProcessor.js";
|
|
5
5
|
import { CONSTANTS } from "./constants.js";
|
|
6
6
|
import { generateMarkdownReport } from "./core/reporter.js";
|
|
7
|
+
import { Project } from "ts-morph";
|
|
7
8
|
const args = process.argv.slice(2);
|
|
8
9
|
if (args.includes('--help') || args.includes('-h')) {
|
|
9
10
|
printHelp();
|
|
@@ -17,6 +18,10 @@ runCLI(target).catch((err) => {
|
|
|
17
18
|
async function runCLI(targetDir) {
|
|
18
19
|
await validateDirectory(targetDir);
|
|
19
20
|
console.log(`\nScanning directory: ${targetDir}`);
|
|
21
|
+
console.log("Initializing TypeScript compiler...");
|
|
22
|
+
const project = new Project({
|
|
23
|
+
tsConfigFilePath: "tsconfig.json",
|
|
24
|
+
});
|
|
20
25
|
const allFiles = getTargetFiles(targetDir);
|
|
21
26
|
if (allFiles.length === 0) {
|
|
22
27
|
throw new Error(`No TypeScript files found to process.`);
|
|
@@ -24,7 +29,7 @@ async function runCLI(targetDir) {
|
|
|
24
29
|
const fileChunks = chunkArray(allFiles, CONSTANTS.CHUNK_SIZE);
|
|
25
30
|
let allResults = [];
|
|
26
31
|
for (const [index, chunk] of fileChunks.entries()) {
|
|
27
|
-
const chunkResults = processChunk(chunk);
|
|
32
|
+
const chunkResults = processChunk(chunk, project);
|
|
28
33
|
allResults = allResults.concat(chunkResults);
|
|
29
34
|
process.stdout.write(`\rProcessed chunk ${index + 1}/${fileChunks.length}`);
|
|
30
35
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGnC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEnC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IACnD,SAAS,EAAE,CAAC;IACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;AAE9B,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC3B,OAAO,CAAC,KAAK,CAAC,qBAAqB,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC;IAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAGH,KAAK,UAAU,MAAM,CAAC,SAAiB;IAErC,MAAM,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAEnC,OAAO,CAAC,GAAG,CAAC,yBAAyB,SAAS,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IAEnD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC;QAC1B,gBAAgB,EAAE,eAAe;KAClC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAE3C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IAE9D,IAAI,UAAU,GAAiB,EAAE,CAAC;IAElC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;QAElD,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAClD,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,KAAK,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,sBAAsB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;GAQX,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
package/dist/types.d.ts
CHANGED
package/dist/utils.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { fdir } from "fdir";
|
|
2
2
|
import { stat } from "fs/promises";
|
|
3
|
+
import { resolve } from "path";
|
|
3
4
|
export function getTargetFiles(directoryPath) {
|
|
4
5
|
const crawler = new fdir()
|
|
5
6
|
.withFullPaths()
|
|
@@ -9,7 +10,8 @@ export function getTargetFiles(directoryPath) {
|
|
|
9
10
|
dirName === ".git")
|
|
10
11
|
.filter((path) => path.endsWith(".ts") || path.endsWith(".tsx"))
|
|
11
12
|
.crawl(directoryPath);
|
|
12
|
-
|
|
13
|
+
const files = crawler.sync();
|
|
14
|
+
return files.map(file => resolve(file).split('\\').join('/'));
|
|
13
15
|
}
|
|
14
16
|
export function chunkArray(array, chunkSize) {
|
|
15
17
|
const chunks = [];
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAC,OAAO,EAAC,MAAM,MAAM,CAAC;AAG7B,MAAM,UAAU,cAAc,CAAC,aAAqB;IAClD,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE;SACvB,aAAa,EAAE;SACf,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CACnB,OAAO,KAAK,cAAc;QAC1B,OAAO,KAAK,MAAM;QAClB,OAAO,KAAK,OAAO;QACnB,OAAO,KAAK,MAAM,CACnB;SACA,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;SAC/D,KAAK,CAAC,aAAa,CAAC,CAAC;IAExB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAc,CAAC;IACzC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAChE,CAAC;AAGD,MAAM,UAAU,UAAU,CAAI,KAAU,EAAE,SAAiB;IACzD,MAAM,MAAM,GAAU,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAGD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAY;IAElD,IAAI,KAAK,CAAC;IAEV,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,mBAAmB,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,uBAAuB,CAAC,CAAC;IACnD,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED