projscan 0.11.0 → 0.14.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/README.md +57 -33
- package/dist/analyzers/crossPackageImportCheck.d.ts +13 -0
- package/dist/analyzers/crossPackageImportCheck.js +136 -0
- package/dist/analyzers/crossPackageImportCheck.js.map +1 -0
- package/dist/analyzers/cycleCheck.d.ts +12 -0
- package/dist/analyzers/cycleCheck.js +65 -0
- package/dist/analyzers/cycleCheck.js.map +1 -0
- package/dist/analyzers/unusedDependencyCheck.js +69 -17
- package/dist/analyzers/unusedDependencyCheck.js.map +1 -1
- package/dist/cli/_shared.d.ts +16 -0
- package/dist/cli/_shared.js +210 -0
- package/dist/cli/_shared.js.map +1 -0
- package/dist/cli/commands/analyze.d.ts +1 -0
- package/dist/cli/commands/analyze.js +87 -0
- package/dist/cli/commands/analyze.js.map +1 -0
- package/dist/cli/commands/audit.d.ts +1 -0
- package/dist/cli/commands/audit.js +53 -0
- package/dist/cli/commands/audit.js.map +1 -0
- package/dist/cli/commands/badge.d.ts +1 -0
- package/dist/cli/commands/badge.js +45 -0
- package/dist/cli/commands/badge.js.map +1 -0
- package/dist/cli/commands/ci.d.ts +1 -0
- package/dist/cli/commands/ci.js +57 -0
- package/dist/cli/commands/ci.js.map +1 -0
- package/dist/cli/commands/coupling.d.ts +1 -0
- package/dist/cli/commands/coupling.js +83 -0
- package/dist/cli/commands/coupling.js.map +1 -0
- package/dist/cli/commands/coverage.d.ts +1 -0
- package/dist/cli/commands/coverage.js +63 -0
- package/dist/cli/commands/coverage.js.map +1 -0
- package/dist/cli/commands/dependencies.d.ts +1 -0
- package/dist/cli/commands/dependencies.js +46 -0
- package/dist/cli/commands/dependencies.js.map +1 -0
- package/dist/cli/commands/diagram.d.ts +1 -0
- package/dist/cli/commands/diagram.js +45 -0
- package/dist/cli/commands/diagram.js.map +1 -0
- package/dist/cli/commands/diff.d.ts +1 -0
- package/dist/cli/commands/diff.js +70 -0
- package/dist/cli/commands/diff.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +1 -0
- package/dist/cli/commands/doctor.js +62 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/explain.d.ts +1 -0
- package/dist/cli/commands/explain.js +42 -0
- package/dist/cli/commands/explain.js.map +1 -0
- package/dist/cli/commands/explainIssue.d.ts +1 -0
- package/dist/cli/commands/explainIssue.js +49 -0
- package/dist/cli/commands/explainIssue.js.map +1 -0
- package/dist/cli/commands/file.d.ts +1 -0
- package/dist/cli/commands/file.js +45 -0
- package/dist/cli/commands/file.js.map +1 -0
- package/dist/cli/commands/fix.d.ts +1 -0
- package/dist/cli/commands/fix.js +70 -0
- package/dist/cli/commands/fix.js.map +1 -0
- package/dist/cli/commands/fixSuggest.d.ts +1 -0
- package/dist/cli/commands/fixSuggest.js +71 -0
- package/dist/cli/commands/fixSuggest.js.map +1 -0
- package/dist/cli/commands/help.d.ts +1 -0
- package/dist/cli/commands/help.js +11 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/hotspots.d.ts +1 -0
- package/dist/cli/commands/hotspots.js +74 -0
- package/dist/cli/commands/hotspots.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +1 -0
- package/dist/cli/commands/mcp.js +21 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/outdated.d.ts +1 -0
- package/dist/cli/commands/outdated.js +51 -0
- package/dist/cli/commands/outdated.js.map +1 -0
- package/dist/cli/commands/prDiff.d.ts +1 -0
- package/dist/cli/commands/prDiff.js +59 -0
- package/dist/cli/commands/prDiff.js.map +1 -0
- package/dist/cli/commands/review.d.ts +1 -0
- package/dist/cli/commands/review.js +66 -0
- package/dist/cli/commands/review.js.map +1 -0
- package/dist/cli/commands/search.d.ts +1 -0
- package/dist/cli/commands/search.js +233 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/structure.d.ts +1 -0
- package/dist/cli/commands/structure.js +58 -0
- package/dist/cli/commands/structure.js.map +1 -0
- package/dist/cli/commands/upgrade.d.ts +1 -0
- package/dist/cli/commands/upgrade.js +44 -0
- package/dist/cli/commands/upgrade.js.map +1 -0
- package/dist/cli/commands/workspaces.d.ts +1 -0
- package/dist/cli/commands/workspaces.js +35 -0
- package/dist/cli/commands/workspaces.js.map +1 -0
- package/dist/cli/index.js +51 -1416
- package/dist/cli/index.js.map +1 -1
- package/dist/core/ast.d.ts +20 -0
- package/dist/core/ast.js +190 -0
- package/dist/core/ast.js.map +1 -1
- package/dist/core/auditRunner.d.ts +8 -0
- package/dist/core/auditRunner.js +50 -1
- package/dist/core/auditRunner.js.map +1 -1
- package/dist/core/codeGraph.d.ts +7 -1
- package/dist/core/codeGraph.js +2 -0
- package/dist/core/codeGraph.js.map +1 -1
- package/dist/core/couplingAnalyzer.d.ts +1 -1
- package/dist/core/couplingAnalyzer.js +3 -3
- package/dist/core/dependencyAnalyzer.d.ts +15 -1
- package/dist/core/dependencyAnalyzer.js +115 -18
- package/dist/core/dependencyAnalyzer.js.map +1 -1
- package/dist/core/explainIssue.d.ts +9 -0
- package/dist/core/explainIssue.js +106 -0
- package/dist/core/explainIssue.js.map +1 -0
- package/dist/core/fileInspector.js +12 -0
- package/dist/core/fileInspector.js.map +1 -1
- package/dist/core/fixSuggest.d.ts +41 -0
- package/dist/core/fixSuggest.js +327 -0
- package/dist/core/fixSuggest.js.map +1 -0
- package/dist/core/hotspotAnalyzer.js +2 -2
- package/dist/core/indexCache.js +5 -1
- package/dist/core/indexCache.js.map +1 -1
- package/dist/core/issueEngine.js +18 -0
- package/dist/core/issueEngine.js.map +1 -1
- package/dist/core/languages/LanguageAdapter.d.ts +1 -1
- package/dist/core/languages/goAdapter.js +12 -5
- package/dist/core/languages/goAdapter.js.map +1 -1
- package/dist/core/languages/goCallSites.d.ts +20 -0
- package/dist/core/languages/goCallSites.js +42 -0
- package/dist/core/languages/goCallSites.js.map +1 -0
- package/dist/core/languages/goCyclomatic.d.ts +1 -1
- package/dist/core/languages/goCyclomatic.js +2 -2
- package/dist/core/languages/goExports.d.ts +1 -1
- package/dist/core/languages/goExports.js +1 -1
- package/dist/core/languages/goFunctions.d.ts +24 -0
- package/dist/core/languages/goFunctions.js +99 -0
- package/dist/core/languages/goFunctions.js.map +1 -0
- package/dist/core/languages/goManifests.d.ts +1 -1
- package/dist/core/languages/goManifests.js +2 -2
- package/dist/core/languages/javaAdapter.d.ts +2 -0
- package/dist/core/languages/javaAdapter.js +153 -0
- package/dist/core/languages/javaAdapter.js.map +1 -0
- package/dist/core/languages/javaCallSites.d.ts +16 -0
- package/dist/core/languages/javaCallSites.js +45 -0
- package/dist/core/languages/javaCallSites.js.map +1 -0
- package/dist/core/languages/javaCyclomatic.d.ts +21 -0
- package/dist/core/languages/javaCyclomatic.js +49 -0
- package/dist/core/languages/javaCyclomatic.js.map +1 -0
- package/dist/core/languages/javaExports.d.ts +25 -0
- package/dist/core/languages/javaExports.js +80 -0
- package/dist/core/languages/javaExports.js.map +1 -0
- package/dist/core/languages/javaFunctions.d.ts +22 -0
- package/dist/core/languages/javaFunctions.js +87 -0
- package/dist/core/languages/javaFunctions.js.map +1 -0
- package/dist/core/languages/javaImports.d.ts +25 -0
- package/dist/core/languages/javaImports.js +49 -0
- package/dist/core/languages/javaImports.js.map +1 -0
- package/dist/core/languages/javaManifests.d.ts +25 -0
- package/dist/core/languages/javaManifests.js +86 -0
- package/dist/core/languages/javaManifests.js.map +1 -0
- package/dist/core/languages/pythonAdapter.js +8 -1
- package/dist/core/languages/pythonAdapter.js.map +1 -1
- package/dist/core/languages/pythonCallSites.d.ts +19 -0
- package/dist/core/languages/pythonCallSites.js +40 -0
- package/dist/core/languages/pythonCallSites.js.map +1 -0
- package/dist/core/languages/pythonFunctions.d.ts +23 -0
- package/dist/core/languages/pythonFunctions.js +87 -0
- package/dist/core/languages/pythonFunctions.js.map +1 -0
- package/dist/core/languages/registry.js +3 -1
- package/dist/core/languages/registry.js.map +1 -1
- package/dist/core/languages/rubyAdapter.d.ts +2 -0
- package/dist/core/languages/rubyAdapter.js +136 -0
- package/dist/core/languages/rubyAdapter.js.map +1 -0
- package/dist/core/languages/rubyCallSites.d.ts +16 -0
- package/dist/core/languages/rubyCallSites.js +34 -0
- package/dist/core/languages/rubyCallSites.js.map +1 -0
- package/dist/core/languages/rubyCyclomatic.d.ts +19 -0
- package/dist/core/languages/rubyCyclomatic.js +47 -0
- package/dist/core/languages/rubyCyclomatic.js.map +1 -0
- package/dist/core/languages/rubyExports.d.ts +24 -0
- package/dist/core/languages/rubyExports.js +53 -0
- package/dist/core/languages/rubyExports.js.map +1 -0
- package/dist/core/languages/rubyFunctions.d.ts +22 -0
- package/dist/core/languages/rubyFunctions.js +91 -0
- package/dist/core/languages/rubyFunctions.js.map +1 -0
- package/dist/core/languages/rubyImports.d.ts +12 -0
- package/dist/core/languages/rubyImports.js +75 -0
- package/dist/core/languages/rubyImports.js.map +1 -0
- package/dist/core/languages/rubyManifests.d.ts +20 -0
- package/dist/core/languages/rubyManifests.js +55 -0
- package/dist/core/languages/rubyManifests.js.map +1 -0
- package/dist/core/languages/treeSitterLoader.js +3 -1
- package/dist/core/languages/treeSitterLoader.js.map +1 -1
- package/dist/core/monorepo.js +5 -5
- package/dist/core/outdatedDetector.d.ts +13 -2
- package/dist/core/outdatedDetector.js +86 -16
- package/dist/core/outdatedDetector.js.map +1 -1
- package/dist/core/prDiff.d.ts +1 -1
- package/dist/core/prDiff.js +2 -2
- package/dist/core/review.d.ts +21 -0
- package/dist/core/review.js +457 -0
- package/dist/core/review.js.map +1 -0
- package/dist/grammars/tree-sitter-java.wasm +0 -0
- package/dist/grammars/tree-sitter-ruby.wasm +0 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.js +0 -22
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/_shared.d.ts +24 -0
- package/dist/mcp/tools/_shared.js +82 -0
- package/dist/mcp/tools/_shared.js.map +1 -0
- package/dist/mcp/tools/analyze.d.ts +2 -0
- package/dist/mcp/tools/analyze.js +55 -0
- package/dist/mcp/tools/analyze.js.map +1 -0
- package/dist/mcp/tools/audit.d.ts +2 -0
- package/dist/mcp/tools/audit.js +37 -0
- package/dist/mcp/tools/audit.js.map +1 -0
- package/dist/mcp/tools/coupling.d.ts +2 -0
- package/dist/mcp/tools/coupling.js +67 -0
- package/dist/mcp/tools/coupling.js.map +1 -0
- package/dist/mcp/tools/coverage.d.ts +2 -0
- package/dist/mcp/tools/coverage.js +53 -0
- package/dist/mcp/tools/coverage.js.map +1 -0
- package/dist/mcp/tools/dependencies.d.ts +2 -0
- package/dist/mcp/tools/dependencies.js +22 -0
- package/dist/mcp/tools/dependencies.js.map +1 -0
- package/dist/mcp/tools/doctor.d.ts +2 -0
- package/dist/mcp/tools/doctor.js +30 -0
- package/dist/mcp/tools/doctor.js.map +1 -0
- package/dist/mcp/tools/explain.d.ts +2 -0
- package/dist/mcp/tools/explain.js +30 -0
- package/dist/mcp/tools/explain.js.map +1 -0
- package/dist/mcp/tools/explainIssue.d.ts +2 -0
- package/dist/mcp/tools/explainIssue.js +30 -0
- package/dist/mcp/tools/explainIssue.js.map +1 -0
- package/dist/mcp/tools/file.d.ts +2 -0
- package/dist/mcp/tools/file.js +22 -0
- package/dist/mcp/tools/file.js.map +1 -0
- package/dist/mcp/tools/fixSuggest.d.ts +2 -0
- package/dist/mcp/tools/fixSuggest.js +57 -0
- package/dist/mcp/tools/fixSuggest.js.map +1 -0
- package/dist/mcp/tools/graph.d.ts +2 -0
- package/dist/mcp/tools/graph.js +69 -0
- package/dist/mcp/tools/graph.js.map +1 -0
- package/dist/mcp/tools/hotspots.d.ts +2 -0
- package/dist/mcp/tools/hotspots.js +103 -0
- package/dist/mcp/tools/hotspots.js.map +1 -0
- package/dist/mcp/tools/outdated.d.ts +2 -0
- package/dist/mcp/tools/outdated.js +36 -0
- package/dist/mcp/tools/outdated.js.map +1 -0
- package/dist/mcp/tools/prDiff.d.ts +2 -0
- package/dist/mcp/tools/prDiff.js +38 -0
- package/dist/mcp/tools/prDiff.js.map +1 -0
- package/dist/mcp/tools/review.d.ts +2 -0
- package/dist/mcp/tools/review.js +54 -0
- package/dist/mcp/tools/review.js.map +1 -0
- package/dist/mcp/tools/search.d.ts +2 -0
- package/dist/mcp/tools/search.js +167 -0
- package/dist/mcp/tools/search.js.map +1 -0
- package/dist/mcp/tools/structure.d.ts +2 -0
- package/dist/mcp/tools/structure.js +34 -0
- package/dist/mcp/tools/structure.js.map +1 -0
- package/dist/mcp/tools/upgrade.d.ts +2 -0
- package/dist/mcp/tools/upgrade.js +38 -0
- package/dist/mcp/tools/upgrade.js.map +1 -0
- package/dist/mcp/tools/workspaces.d.ts +2 -0
- package/dist/mcp/tools/workspaces.js +13 -0
- package/dist/mcp/tools/workspaces.js.map +1 -0
- package/dist/mcp/tools.d.ts +12 -6
- package/dist/mcp/tools.js +46 -854
- package/dist/mcp/tools.js.map +1 -1
- package/dist/reporters/consoleReporter.d.ts +9 -1
- package/dist/reporters/consoleReporter.js +177 -0
- package/dist/reporters/consoleReporter.js.map +1 -1
- package/dist/reporters/jsonReporter.d.ts +9 -1
- package/dist/reporters/jsonReporter.js +9 -0
- package/dist/reporters/jsonReporter.js.map +1 -1
- package/dist/reporters/markdownReporter.d.ts +9 -1
- package/dist/reporters/markdownReporter.js +141 -0
- package/dist/reporters/markdownReporter.js.map +1 -1
- package/dist/tool-manifest.json +446 -0
- package/dist/types.d.ts +235 -5
- package/dist/utils/config.js +26 -9
- package/dist/utils/config.js.map +1 -1
- package/package.json +8 -3
|
@@ -23,7 +23,9 @@ function grammarDirs() {
|
|
|
23
23
|
const nodeModulesWebTs = path.join(repoRoot, 'node_modules', 'web-tree-sitter');
|
|
24
24
|
const nodeModulesPy = path.join(repoRoot, 'node_modules', 'tree-sitter-python');
|
|
25
25
|
const nodeModulesGo = path.join(repoRoot, 'node_modules', 'tree-sitter-go');
|
|
26
|
-
|
|
26
|
+
const nodeModulesJava = path.join(repoRoot, 'node_modules', 'tree-sitter-java');
|
|
27
|
+
const nodeModulesRuby = path.join(repoRoot, 'node_modules', 'tree-sitter-ruby');
|
|
28
|
+
return [distDir, nodeModulesWebTs, nodeModulesPy, nodeModulesGo, nodeModulesJava, nodeModulesRuby];
|
|
27
29
|
}
|
|
28
30
|
function findWasm(filename) {
|
|
29
31
|
for (const dir of grammarDirs()) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"treeSitterLoader.js","sourceRoot":"","sources":["../../../src/core/languages/treeSitterLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEnD;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,QAAQ,CAAC;AAEnD,IAAI,iBAAiB,GAAyB,IAAI,CAAC;AACnD,MAAM,aAAa,GAAG,IAAI,GAAG,EAA6B,CAAC;AAE3D;;;;;GAKG;AACH,SAAS,WAAW;IAClB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACtD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,iBAAiB,CAAC,CAAC;IAChF,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,oBAAoB,CAAC,CAAC;IAChF,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;IAC5E,OAAO,CAAC,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"treeSitterLoader.js","sourceRoot":"","sources":["../../../src/core/languages/treeSitterLoader.ts"],"names":[],"mappings":"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"}
|
package/dist/core/monorepo.js
CHANGED
|
@@ -26,7 +26,7 @@ export async function detectWorkspaces(rootPath) {
|
|
|
26
26
|
const patterns = readNpmYarnPatterns(rootPkg);
|
|
27
27
|
if (patterns && patterns.length > 0) {
|
|
28
28
|
const packages = await collectPackages(rootPath, patterns, rootPkg);
|
|
29
|
-
// Distinguish yarn from npm if a yarn.lock is present
|
|
29
|
+
// Distinguish yarn from npm if a yarn.lock is present - affects nothing
|
|
30
30
|
// about discovery, just labelling.
|
|
31
31
|
const kind = (await fileExists(path.join(rootPath, 'yarn.lock')))
|
|
32
32
|
? 'yarn'
|
|
@@ -34,7 +34,7 @@ export async function detectWorkspaces(rootPath) {
|
|
|
34
34
|
return { kind, packages, source: 'package.json#workspaces' };
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
|
-
// 3) Lerna
|
|
37
|
+
// 3) Lerna - its config has an explicit `packages` field with globs.
|
|
38
38
|
const lernaPath = path.join(rootPath, 'lerna.json');
|
|
39
39
|
if (await fileExists(lernaPath)) {
|
|
40
40
|
const patterns = (await readJsonField(lernaPath, 'packages')) ?? ['packages/*'];
|
|
@@ -43,7 +43,7 @@ export async function detectWorkspaces(rootPath) {
|
|
|
43
43
|
return { kind: 'lerna', packages, source: 'lerna.json#packages' };
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
|
-
// 4) Nx
|
|
46
|
+
// 4) Nx - workspaceLayout supplies appsDir/libsDir; project.json files
|
|
47
47
|
// anywhere identify packages. Older Nx variants used workspace.json (a
|
|
48
48
|
// single file enumerating projects); we read its `projects` map too.
|
|
49
49
|
const nxJsonPath = path.join(rootPath, 'nx.json');
|
|
@@ -55,7 +55,7 @@ export async function detectWorkspaces(rootPath) {
|
|
|
55
55
|
return { kind: 'nx', packages: merged, source: 'nx.json + project.json scan' };
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
|
-
// 5) Turbo
|
|
58
|
+
// 5) Turbo - turbo.json defines task pipelines, NOT workspace layout.
|
|
59
59
|
// Turbo always rides on top of npm/yarn/pnpm workspaces (handled above).
|
|
60
60
|
// If we get here with a turbo.json but no workspace declaration, treat it
|
|
61
61
|
// as a marker and fall back to the packages/* convention so we still
|
|
@@ -113,7 +113,7 @@ async function readPnpmPackages(manifestPath) {
|
|
|
113
113
|
patterns.push(m[1]);
|
|
114
114
|
}
|
|
115
115
|
else if (line.length > 0 && !line.startsWith(' ') && !line.startsWith('\t')) {
|
|
116
|
-
// New top-level key
|
|
116
|
+
// New top-level key - packages section ended.
|
|
117
117
|
inPackages = false;
|
|
118
118
|
}
|
|
119
119
|
}
|
|
@@ -1,9 +1,20 @@
|
|
|
1
|
-
import type { OutdatedReport } from '../types.js';
|
|
1
|
+
import type { OutdatedReport, WorkspaceInfo } from '../types.js';
|
|
2
|
+
export interface OutdatedOptions {
|
|
3
|
+
/** When provided, scan each workspace package's package.json individually. */
|
|
4
|
+
workspaces?: WorkspaceInfo;
|
|
5
|
+
/** When provided alongside workspaces, restrict to a single package by name. */
|
|
6
|
+
workspaceFilter?: string;
|
|
7
|
+
}
|
|
2
8
|
/**
|
|
3
9
|
* Offline outdated check - compares the version declared in package.json
|
|
4
10
|
* to the version installed under node_modules/<pkg>/package.json.
|
|
5
11
|
*
|
|
12
|
+
* In a monorepo (caller supplies workspaces), each package's package.json is
|
|
13
|
+
* scanned. Each result entry carries the workspace it came from. Installed
|
|
14
|
+
* versions still resolve through the root node_modules (npm/yarn/pnpm hoisting
|
|
15
|
+
* makes that the right place to look in 95% of installs).
|
|
16
|
+
*
|
|
6
17
|
* Does not hit the npm registry. `latest` is filled in only when a node_modules
|
|
7
18
|
* install exists; the drift calculation uses installed vs declared.
|
|
8
19
|
*/
|
|
9
|
-
export declare function detectOutdated(rootPath: string): Promise<OutdatedReport>;
|
|
20
|
+
export declare function detectOutdated(rootPath: string, options?: OutdatedOptions): Promise<OutdatedReport>;
|
|
@@ -5,10 +5,58 @@ import { drift as semverDrift } from '../utils/semver.js';
|
|
|
5
5
|
* Offline outdated check - compares the version declared in package.json
|
|
6
6
|
* to the version installed under node_modules/<pkg>/package.json.
|
|
7
7
|
*
|
|
8
|
+
* In a monorepo (caller supplies workspaces), each package's package.json is
|
|
9
|
+
* scanned. Each result entry carries the workspace it came from. Installed
|
|
10
|
+
* versions still resolve through the root node_modules (npm/yarn/pnpm hoisting
|
|
11
|
+
* makes that the right place to look in 95% of installs).
|
|
12
|
+
*
|
|
8
13
|
* Does not hit the npm registry. `latest` is filled in only when a node_modules
|
|
9
14
|
* install exists; the drift calculation uses installed vs declared.
|
|
10
15
|
*/
|
|
11
|
-
export async function detectOutdated(rootPath) {
|
|
16
|
+
export async function detectOutdated(rootPath, options = {}) {
|
|
17
|
+
const ws = options.workspaces;
|
|
18
|
+
const isMonorepo = ws !== undefined && ws.kind !== 'none' && ws.packages.length > 1;
|
|
19
|
+
if (!isMonorepo) {
|
|
20
|
+
// Single-package path: read root package.json only.
|
|
21
|
+
return await scanSinglePackage(rootPath, undefined);
|
|
22
|
+
}
|
|
23
|
+
// Monorepo path: scan each package's manifest, attribute results.
|
|
24
|
+
const nodeModules = path.join(rootPath, 'node_modules');
|
|
25
|
+
const nodeModulesExists = await pathExists(nodeModules);
|
|
26
|
+
const allPackages = [];
|
|
27
|
+
const byWorkspace = [];
|
|
28
|
+
for (const wp of ws.packages) {
|
|
29
|
+
if (options.workspaceFilter && wp.name !== options.workspaceFilter)
|
|
30
|
+
continue;
|
|
31
|
+
const pkgDir = wp.relativePath ? path.join(rootPath, wp.relativePath) : rootPath;
|
|
32
|
+
const pkgManifest = path.join(pkgDir, 'package.json');
|
|
33
|
+
const pkgEntries = await readManifestEntries(pkgManifest);
|
|
34
|
+
const pkgResults = [];
|
|
35
|
+
for (const [name, declared, scope] of pkgEntries) {
|
|
36
|
+
let installed = null;
|
|
37
|
+
if (nodeModulesExists)
|
|
38
|
+
installed = await readInstalledVersion(nodeModules, name);
|
|
39
|
+
pkgResults.push({
|
|
40
|
+
name,
|
|
41
|
+
declared,
|
|
42
|
+
installed,
|
|
43
|
+
latest: installed,
|
|
44
|
+
drift: semverDrift(declared, installed),
|
|
45
|
+
scope,
|
|
46
|
+
workspace: wp.name,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
allPackages.push(...pkgResults);
|
|
50
|
+
byWorkspace.push({ workspace: wp.name, relativePath: wp.relativePath, total: pkgResults.length });
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
available: true,
|
|
54
|
+
totalPackages: allPackages.length,
|
|
55
|
+
packages: allPackages,
|
|
56
|
+
byWorkspace,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
async function scanSinglePackage(rootPath, workspaceName) {
|
|
12
60
|
const pkgPath = path.join(rootPath, 'package.json');
|
|
13
61
|
let raw;
|
|
14
62
|
try {
|
|
@@ -22,9 +70,9 @@ export async function detectOutdated(rootPath) {
|
|
|
22
70
|
packages: [],
|
|
23
71
|
};
|
|
24
72
|
}
|
|
25
|
-
let
|
|
73
|
+
let pkgJson;
|
|
26
74
|
try {
|
|
27
|
-
|
|
75
|
+
pkgJson = JSON.parse(raw);
|
|
28
76
|
}
|
|
29
77
|
catch {
|
|
30
78
|
return {
|
|
@@ -34,29 +82,25 @@ export async function detectOutdated(rootPath) {
|
|
|
34
82
|
packages: [],
|
|
35
83
|
};
|
|
36
84
|
}
|
|
37
|
-
const
|
|
38
|
-
const devDependencies = (pkg.devDependencies ?? {});
|
|
39
|
-
const entries = [
|
|
40
|
-
...Object.entries(dependencies).map(([n, v]) => [n, v, 'dependency']),
|
|
41
|
-
...Object.entries(devDependencies).map(([n, v]) => [n, v, 'devDependency']),
|
|
42
|
-
];
|
|
85
|
+
const entries = manifestEntriesFromParsed(pkgJson);
|
|
43
86
|
const nodeModules = path.join(rootPath, 'node_modules');
|
|
44
87
|
const nodeModulesExists = await pathExists(nodeModules);
|
|
45
88
|
const packages = [];
|
|
46
89
|
for (const [name, declared, scope] of entries) {
|
|
47
90
|
let installed = null;
|
|
48
|
-
if (nodeModulesExists)
|
|
91
|
+
if (nodeModulesExists)
|
|
49
92
|
installed = await readInstalledVersion(nodeModules, name);
|
|
50
|
-
|
|
51
|
-
const drift = semverDrift(declared, installed);
|
|
52
|
-
packages.push({
|
|
93
|
+
const entry = {
|
|
53
94
|
name,
|
|
54
95
|
declared,
|
|
55
96
|
installed,
|
|
56
|
-
latest: installed,
|
|
57
|
-
drift,
|
|
97
|
+
latest: installed,
|
|
98
|
+
drift: semverDrift(declared, installed),
|
|
58
99
|
scope,
|
|
59
|
-
}
|
|
100
|
+
};
|
|
101
|
+
if (workspaceName)
|
|
102
|
+
entry.workspace = workspaceName;
|
|
103
|
+
packages.push(entry);
|
|
60
104
|
}
|
|
61
105
|
return {
|
|
62
106
|
available: true,
|
|
@@ -64,6 +108,32 @@ export async function detectOutdated(rootPath) {
|
|
|
64
108
|
packages,
|
|
65
109
|
};
|
|
66
110
|
}
|
|
111
|
+
function manifestEntriesFromParsed(pkg) {
|
|
112
|
+
const dependencies = (pkg.dependencies ?? {});
|
|
113
|
+
const devDependencies = (pkg.devDependencies ?? {});
|
|
114
|
+
return [
|
|
115
|
+
...Object.entries(dependencies).map(([n, v]) => [n, v, 'dependency']),
|
|
116
|
+
...Object.entries(devDependencies).map(([n, v]) => [n, v, 'devDependency']),
|
|
117
|
+
];
|
|
118
|
+
}
|
|
119
|
+
/** Read deps/devDeps from a package.json. Returns [] if file unreadable/invalid (used in monorepo iteration where one bad workspace shouldn't fail the whole scan). */
|
|
120
|
+
async function readManifestEntries(pkgPath) {
|
|
121
|
+
let raw;
|
|
122
|
+
try {
|
|
123
|
+
raw = await fs.readFile(pkgPath, 'utf-8');
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
return [];
|
|
127
|
+
}
|
|
128
|
+
let pkg;
|
|
129
|
+
try {
|
|
130
|
+
pkg = JSON.parse(raw);
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
return [];
|
|
134
|
+
}
|
|
135
|
+
return manifestEntriesFromParsed(pkg);
|
|
136
|
+
}
|
|
67
137
|
async function pathExists(p) {
|
|
68
138
|
try {
|
|
69
139
|
await fs.access(p);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outdatedDetector.js","sourceRoot":"","sources":["../../src/core/outdatedDetector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"outdatedDetector.js","sourceRoot":"","sources":["../../src/core/outdatedDetector.ts"],"names":[],"mappings":"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"}
|
package/dist/core/prDiff.d.ts
CHANGED
|
@@ -20,7 +20,7 @@ export interface PrDiffOptions {
|
|
|
20
20
|
* "what whitespace changed on line 42."
|
|
21
21
|
*/
|
|
22
22
|
export declare function computePrDiff(rootPath: string, options?: PrDiffOptions): Promise<PrDiffReport>;
|
|
23
|
-
/** Pure function
|
|
23
|
+
/** Pure function - exported for unit testing without a real git repo. */
|
|
24
24
|
export declare function diffGraphs(baseRef: string, baseSha: string | null, headRef: string, headSha: string | null, baseGraph: CodeGraph, headGraph: CodeGraph): PrDiffReport;
|
|
25
25
|
/**
|
|
26
26
|
* Pair removed/added export names that look like renames. A pair counts as a
|
package/dist/core/prDiff.js
CHANGED
|
@@ -66,7 +66,7 @@ export async function computePrDiff(rootPath, options = {}) {
|
|
|
66
66
|
}
|
|
67
67
|
return diffGraphs(baseRef, baseSha, headRef, headSha, baseGraph, headGraph);
|
|
68
68
|
}
|
|
69
|
-
/** Pure function
|
|
69
|
+
/** Pure function - exported for unit testing without a real git repo. */
|
|
70
70
|
export function diffGraphs(baseRef, baseSha, headRef, headSha, baseGraph, headGraph) {
|
|
71
71
|
const filesAdded = [];
|
|
72
72
|
const filesRemoved = [];
|
|
@@ -204,7 +204,7 @@ function levenshtein(a, b) {
|
|
|
204
204
|
return n;
|
|
205
205
|
if (n === 0)
|
|
206
206
|
return m;
|
|
207
|
-
// Two-row DP
|
|
207
|
+
// Two-row DP - small allocations keep this cheap on the realistic name sizes.
|
|
208
208
|
let prev = new Array(n + 1);
|
|
209
209
|
let curr = new Array(n + 1);
|
|
210
210
|
for (let j = 0; j <= n; j++)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ReviewReport } from '../types.js';
|
|
2
|
+
export interface ReviewOptions {
|
|
3
|
+
/** Base ref. Default: origin/main → main → origin/master → master → HEAD~1. */
|
|
4
|
+
base?: string;
|
|
5
|
+
/** Head ref. Default: HEAD. */
|
|
6
|
+
head?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Compose a one-shot PR review. Builds head + base graphs (worktree dance),
|
|
10
|
+
* joins the structural diff with hotspot risk scores, surfaces cycles
|
|
11
|
+
* introduced by the PR, flags newly-risky functions, and reports
|
|
12
|
+
* package.json deltas. Output is shaped for an agent to read once and decide
|
|
13
|
+
* whether to merge, request changes, or escalate.
|
|
14
|
+
*
|
|
15
|
+
* Verdict heuristic (rough; tune with usage):
|
|
16
|
+
* block - max changed-file risk >= 80 OR a new cycle includes added files
|
|
17
|
+
* review - max changed-file risk >= 40 OR new high-CC functions OR
|
|
18
|
+
* major-dep-bump
|
|
19
|
+
* ok - otherwise
|
|
20
|
+
*/
|
|
21
|
+
export declare function computeReview(rootPath: string, options?: ReviewOptions): Promise<ReviewReport>;
|