@aiready/pattern-detect 0.17.13 → 0.17.14
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/analyzer-entry/index.js +34 -1
- package/dist/analyzer-entry/index.mjs +4 -4
- package/dist/chunk-3CNHAYOD.mjs +499 -0
- package/dist/chunk-6JNGAY7M.mjs +514 -0
- package/dist/chunk-C4ZGC4KA.mjs +514 -0
- package/dist/chunk-G3GZFYRI.mjs +144 -0
- package/dist/chunk-RH5JPWEC.mjs +143 -0
- package/dist/chunk-UKQFCUQA.mjs +323 -0
- package/dist/cli.js +34 -1
- package/dist/cli.mjs +4 -4
- package/dist/context-rules-entry/index.js +18 -1
- package/dist/context-rules-entry/index.mjs +1 -1
- package/dist/detector-entry/index.js +18 -1
- package/dist/detector-entry/index.mjs +2 -2
- package/dist/index.js +63 -2
- package/dist/index.mjs +6 -6
- package/dist/scoring-entry/index.js +29 -1
- package/dist/scoring-entry/index.mjs +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -183,7 +183,8 @@ var INFRA_RULES = [
|
|
|
183
183
|
{
|
|
184
184
|
name: "cli-command-definitions",
|
|
185
185
|
detect: (file, code) => {
|
|
186
|
-
const
|
|
186
|
+
const basename = file.split("/").pop() || "";
|
|
187
|
+
const isCliFile = file.includes("/commands/") || file.includes("/cli/") || file.endsWith(".command.ts") || basename === "cli.ts" || basename === "cli.js" || basename === "cli.tsx" || basename === "cli-action.ts";
|
|
187
188
|
const hasCommandPattern = (code.includes(".command(") || code.includes("defineCommand")) && (code.includes(".description(") || code.includes(".option(")) && (code.includes(".action(") || code.includes("async"));
|
|
188
189
|
return isCliFile && hasCommandPattern;
|
|
189
190
|
},
|
|
@@ -196,6 +197,22 @@ var INFRA_RULES = [
|
|
|
196
197
|
// src/rules/categories/logic-rules.ts
|
|
197
198
|
var import_core4 = require("@aiready/core");
|
|
198
199
|
var LOGIC_RULES = [
|
|
200
|
+
// Re-export / Barrel files - Intentional API surface consolidation
|
|
201
|
+
{
|
|
202
|
+
name: "re-export-files",
|
|
203
|
+
detect: (file, code) => {
|
|
204
|
+
const isIndexFile = file.endsWith("/index.ts") || file.endsWith("/index.js") || file.endsWith("/index.tsx") || file.endsWith("/index.jsx");
|
|
205
|
+
const lines = code.split("\n").filter((l) => l.trim());
|
|
206
|
+
if (lines.length === 0) return false;
|
|
207
|
+
const reExportLines = lines.filter(
|
|
208
|
+
(l) => /^export\s+(\{[^}]+\}|\*)\s+from\s+/.test(l.trim()) || /^export\s+\*\s+as\s+\w+\s+from\s+/.test(l.trim())
|
|
209
|
+
).length;
|
|
210
|
+
return isIndexFile && reExportLines > 0 && reExportLines / lines.length > 0.5;
|
|
211
|
+
},
|
|
212
|
+
severity: import_core4.Severity.Info,
|
|
213
|
+
reason: "Barrel/index files intentionally re-export for API surface consolidation",
|
|
214
|
+
suggestion: "Re-exports in barrel files are expected and not true duplication"
|
|
215
|
+
},
|
|
199
216
|
// Type Definitions - Duplication for type safety and module independence
|
|
200
217
|
{
|
|
201
218
|
name: "type-definitions",
|
|
@@ -759,6 +776,22 @@ function getRefactoringSuggestion(patternType, similarity) {
|
|
|
759
776
|
return baseMessages[patternType] + urgency;
|
|
760
777
|
}
|
|
761
778
|
function generateSummary(results) {
|
|
779
|
+
if (!Array.isArray(results)) {
|
|
780
|
+
return {
|
|
781
|
+
totalPatterns: 0,
|
|
782
|
+
totalTokenCost: 0,
|
|
783
|
+
patternsByType: {
|
|
784
|
+
"api-handler": 0,
|
|
785
|
+
validator: 0,
|
|
786
|
+
utility: 0,
|
|
787
|
+
"class-method": 0,
|
|
788
|
+
component: 0,
|
|
789
|
+
function: 0,
|
|
790
|
+
unknown: 0
|
|
791
|
+
},
|
|
792
|
+
topDuplicates: []
|
|
793
|
+
};
|
|
794
|
+
}
|
|
762
795
|
const allIssues = results.flatMap((r) => r.issues || []);
|
|
763
796
|
const totalTokenCost = results.reduce(
|
|
764
797
|
(sum, r) => sum + (r.metrics?.tokenCost || 0),
|
|
@@ -847,7 +880,35 @@ function calculateSeverity2(similarity) {
|
|
|
847
880
|
// src/scoring.ts
|
|
848
881
|
var import_core10 = require("@aiready/core");
|
|
849
882
|
function calculatePatternScore(duplicates, totalFilesAnalyzed, costConfig) {
|
|
850
|
-
const actionableDuplicates = duplicates.filter((d) =>
|
|
883
|
+
const actionableDuplicates = duplicates.filter((d) => {
|
|
884
|
+
if (d.severity === "info") return false;
|
|
885
|
+
const acceptableRules = [
|
|
886
|
+
// Logic rules (logic-rules.ts)
|
|
887
|
+
"type-definitions",
|
|
888
|
+
"utility-functions",
|
|
889
|
+
"shared-hooks",
|
|
890
|
+
"score-helpers",
|
|
891
|
+
"visualization-handlers",
|
|
892
|
+
"switch-helpers",
|
|
893
|
+
"common-api-functions",
|
|
894
|
+
"validation-functions",
|
|
895
|
+
// Infrastructure rules (infra-rules.ts)
|
|
896
|
+
"config-files",
|
|
897
|
+
"migration-scripts",
|
|
898
|
+
"tool-implementations",
|
|
899
|
+
"cli-command-definitions",
|
|
900
|
+
// Web rules (web-rules.ts)
|
|
901
|
+
"templates",
|
|
902
|
+
"common-ui-handlers",
|
|
903
|
+
"nextjs-route-handlers",
|
|
904
|
+
// Test rules (test-rules.ts)
|
|
905
|
+
"test-fixtures",
|
|
906
|
+
"e2e-page-objects",
|
|
907
|
+
"mock-data"
|
|
908
|
+
];
|
|
909
|
+
if (d.matchedRule && acceptableRules.includes(d.matchedRule)) return false;
|
|
910
|
+
return true;
|
|
911
|
+
});
|
|
851
912
|
const totalDuplicates = actionableDuplicates.length;
|
|
852
913
|
const totalTokenCost = actionableDuplicates.reduce(
|
|
853
914
|
(sum, d) => sum + d.tokenCost,
|
package/dist/index.mjs
CHANGED
|
@@ -12,16 +12,16 @@ import {
|
|
|
12
12
|
getSmartDefaults,
|
|
13
13
|
groupDuplicatesByFilePair,
|
|
14
14
|
logConfiguration
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-C4ZGC4KA.mjs";
|
|
16
16
|
import {
|
|
17
17
|
detectDuplicatePatterns
|
|
18
|
-
} from "./chunk-
|
|
19
|
-
import {
|
|
20
|
-
filterBySeverity
|
|
21
|
-
} from "./chunk-2P7BQHGR.mjs";
|
|
18
|
+
} from "./chunk-RH5JPWEC.mjs";
|
|
22
19
|
import {
|
|
23
20
|
calculatePatternScore
|
|
24
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-G3GZFYRI.mjs";
|
|
22
|
+
import {
|
|
23
|
+
filterBySeverity
|
|
24
|
+
} from "./chunk-UKQFCUQA.mjs";
|
|
25
25
|
|
|
26
26
|
// src/index.ts
|
|
27
27
|
import { ToolRegistry } from "@aiready/core";
|
|
@@ -27,7 +27,35 @@ module.exports = __toCommonJS(scoring_entry_exports);
|
|
|
27
27
|
// src/scoring.ts
|
|
28
28
|
var import_core = require("@aiready/core");
|
|
29
29
|
function calculatePatternScore(duplicates, totalFilesAnalyzed, costConfig) {
|
|
30
|
-
const actionableDuplicates = duplicates.filter((d) =>
|
|
30
|
+
const actionableDuplicates = duplicates.filter((d) => {
|
|
31
|
+
if (d.severity === "info") return false;
|
|
32
|
+
const acceptableRules = [
|
|
33
|
+
// Logic rules (logic-rules.ts)
|
|
34
|
+
"type-definitions",
|
|
35
|
+
"utility-functions",
|
|
36
|
+
"shared-hooks",
|
|
37
|
+
"score-helpers",
|
|
38
|
+
"visualization-handlers",
|
|
39
|
+
"switch-helpers",
|
|
40
|
+
"common-api-functions",
|
|
41
|
+
"validation-functions",
|
|
42
|
+
// Infrastructure rules (infra-rules.ts)
|
|
43
|
+
"config-files",
|
|
44
|
+
"migration-scripts",
|
|
45
|
+
"tool-implementations",
|
|
46
|
+
"cli-command-definitions",
|
|
47
|
+
// Web rules (web-rules.ts)
|
|
48
|
+
"templates",
|
|
49
|
+
"common-ui-handlers",
|
|
50
|
+
"nextjs-route-handlers",
|
|
51
|
+
// Test rules (test-rules.ts)
|
|
52
|
+
"test-fixtures",
|
|
53
|
+
"e2e-page-objects",
|
|
54
|
+
"mock-data"
|
|
55
|
+
];
|
|
56
|
+
if (d.matchedRule && acceptableRules.includes(d.matchedRule)) return false;
|
|
57
|
+
return true;
|
|
58
|
+
});
|
|
31
59
|
const totalDuplicates = actionableDuplicates.length;
|
|
32
60
|
const totalTokenCost = actionableDuplicates.reduce(
|
|
33
61
|
(sum, d) => sum + d.tokenCost,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aiready/pattern-detect",
|
|
3
|
-
"version": "0.17.
|
|
3
|
+
"version": "0.17.14",
|
|
4
4
|
"description": "Semantic duplicate pattern detection for AI-generated code - finds similar implementations that waste AI context tokens",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"dependencies": {
|
|
66
66
|
"commander": "^14.0.0",
|
|
67
67
|
"chalk": "^5.3.0",
|
|
68
|
-
"@aiready/core": "0.24.
|
|
68
|
+
"@aiready/core": "0.24.15"
|
|
69
69
|
},
|
|
70
70
|
"devDependencies": {
|
|
71
71
|
"tsup": "^8.3.5",
|