@monoes/monograph 1.5.7 → 1.5.8
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 +9 -9
- package/dist/src/analysis/changed-files.d.ts +3 -0
- package/dist/src/analysis/changed-files.d.ts.map +1 -1
- package/dist/src/analysis/changed-files.js +11 -9
- package/dist/src/analysis/changed-files.js.map +1 -1
- package/dist/src/analysis/changed-workspaces.d.ts.map +1 -1
- package/dist/src/analysis/changed-workspaces.js +2 -9
- package/dist/src/analysis/changed-workspaces.js.map +1 -1
- package/dist/src/analysis/git-changed-files.d.ts +3 -0
- package/dist/src/analysis/git-changed-files.d.ts.map +1 -1
- package/dist/src/analysis/git-changed-files.js +17 -12
- package/dist/src/analysis/git-changed-files.js.map +1 -1
- package/dist/src/analysis/git-ref.d.ts +33 -0
- package/dist/src/analysis/git-ref.d.ts.map +1 -0
- package/dist/src/analysis/git-ref.js +54 -0
- package/dist/src/analysis/git-ref.js.map +1 -0
- package/dist/src/analyze/boundary-analysis.d.ts.map +1 -1
- package/dist/src/analyze/boundary-analysis.js +42 -42
- package/dist/src/analyze/boundary-analysis.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/lsp/server.d.ts +1 -1
- package/dist/src/lsp/server.d.ts.map +1 -1
- package/dist/src/lsp/server.js +48 -13
- package/dist/src/lsp/server.js.map +1 -1
- package/dist/src/mcp-tools/api-impact.d.ts.map +1 -1
- package/dist/src/mcp-tools/api-impact.js +1 -16
- package/dist/src/mcp-tools/api-impact.js.map +1 -1
- package/dist/src/mcp-tools/context.d.ts.map +1 -1
- package/dist/src/mcp-tools/context.js +12 -23
- package/dist/src/mcp-tools/context.js.map +1 -1
- package/dist/src/mcp-tools/explain.d.ts.map +1 -1
- package/dist/src/mcp-tools/explain.js +15 -20
- package/dist/src/mcp-tools/explain.js.map +1 -1
- package/dist/src/mcp-tools/graph-query.d.ts.map +1 -1
- package/dist/src/mcp-tools/graph-query.js +10 -19
- package/dist/src/mcp-tools/graph-query.js.map +1 -1
- package/dist/src/mcp-tools/impact.d.ts.map +1 -1
- package/dist/src/mcp-tools/impact.js +38 -32
- package/dist/src/mcp-tools/impact.js.map +1 -1
- package/dist/src/mcp-tools/neighbors.d.ts.map +1 -1
- package/dist/src/mcp-tools/neighbors.js +4 -22
- package/dist/src/mcp-tools/neighbors.js.map +1 -1
- package/dist/src/mcp-tools/query.d.ts.map +1 -1
- package/dist/src/mcp-tools/query.js +14 -9
- package/dist/src/mcp-tools/query.js.map +1 -1
- package/dist/src/mcp-tools/rename.d.ts.map +1 -1
- package/dist/src/mcp-tools/rename.js +3 -20
- package/dist/src/mcp-tools/rename.js.map +1 -1
- package/dist/src/parsers/c.d.ts.map +1 -1
- package/dist/src/parsers/c.js +12 -0
- package/dist/src/parsers/c.js.map +1 -1
- package/dist/src/parsers/extractor.d.ts.map +1 -1
- package/dist/src/parsers/extractor.js +2 -1
- package/dist/src/parsers/extractor.js.map +1 -1
- package/dist/src/parsers/go.d.ts.map +1 -1
- package/dist/src/parsers/go.js +19 -1
- package/dist/src/parsers/go.js.map +1 -1
- package/dist/src/parsers/language-config.d.ts +4 -0
- package/dist/src/parsers/language-config.d.ts.map +1 -1
- package/dist/src/parsers/language-parsers.d.ts.map +1 -1
- package/dist/src/parsers/language-parsers.js +3 -1
- package/dist/src/parsers/language-parsers.js.map +1 -1
- package/dist/src/parsers/loader.d.ts +1 -0
- package/dist/src/parsers/loader.d.ts.map +1 -1
- package/dist/src/parsers/loader.js +161 -20
- package/dist/src/parsers/loader.js.map +1 -1
- package/dist/src/parsers/python.d.ts.map +1 -1
- package/dist/src/parsers/python.js +6 -0
- package/dist/src/parsers/python.js.map +1 -1
- package/dist/src/parsers/rust.d.ts.map +1 -1
- package/dist/src/parsers/rust.js +10 -0
- package/dist/src/parsers/rust.js.map +1 -1
- package/dist/src/pipeline/orchestrator.d.ts.map +1 -1
- package/dist/src/pipeline/orchestrator.js +17 -0
- package/dist/src/pipeline/orchestrator.js.map +1 -1
- package/dist/src/pipeline/phases/pdf-parse.d.ts.map +1 -1
- package/dist/src/pipeline/phases/pdf-parse.js +10 -11
- package/dist/src/pipeline/phases/pdf-parse.js.map +1 -1
- package/dist/src/storage/edge-store.d.ts +1 -0
- package/dist/src/storage/edge-store.d.ts.map +1 -1
- package/dist/src/storage/edge-store.js +5 -8
- package/dist/src/storage/edge-store.js.map +1 -1
- package/dist/src/storage/node-store.d.ts +1 -0
- package/dist/src/storage/node-store.d.ts.map +1 -1
- package/dist/src/storage/node-store.js +11 -12
- package/dist/src/storage/node-store.js.map +1 -1
- package/dist/src/storage/schema.d.ts.map +1 -1
- package/dist/src/storage/schema.js +6 -0
- package/dist/src/storage/schema.js.map +1 -1
- package/dist/src/storage/utils.d.ts +11 -0
- package/dist/src/storage/utils.d.ts.map +1 -0
- package/dist/src/storage/utils.js +24 -0
- package/dist/src/storage/utils.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/dist/src/fix/deps.d.ts +0 -14
- package/dist/src/fix/deps.d.ts.map +0 -1
- package/dist/src/fix/deps.js +0 -47
- package/dist/src/fix/deps.js.map +0 -1
- package/dist/src/fix/enum-members.d.ts +0 -20
- package/dist/src/fix/enum-members.d.ts.map +0 -1
- package/dist/src/fix/enum-members.js +0 -95
- package/dist/src/fix/enum-members.js.map +0 -1
- package/dist/src/fix/export-surgery.d.ts +0 -14
- package/dist/src/fix/export-surgery.d.ts.map +0 -1
- package/dist/src/fix/export-surgery.js +0 -140
- package/dist/src/fix/export-surgery.js.map +0 -1
- package/dist/src/fix/exports.d.ts +0 -16
- package/dist/src/fix/exports.d.ts.map +0 -1
- package/dist/src/fix/exports.js +0 -65
- package/dist/src/fix/exports.js.map +0 -1
- package/dist/src/fix/orchestrator.d.ts +0 -28
- package/dist/src/fix/orchestrator.d.ts.map +0 -1
- package/dist/src/fix/orchestrator.js +0 -39
- package/dist/src/fix/orchestrator.js.map +0 -1
package/README.md
CHANGED
|
@@ -88,13 +88,13 @@ Monograph utilizes a dual-tier parsing strategy for extracting code structure an
|
|
|
88
88
|
|
|
89
89
|
1. **Tree-sitter AST Parsers (25 supported extensions)**:
|
|
90
90
|
- **Extensions**: `.ts`, `.tsx`, `.js`, `.jsx`, `.mjs`, `.cjs`, `.py`, `.go`, `.rs`, `.java`, `.c`, `.h`, `.cpp`, `.cc`, `.cxx`, `.hpp`, `.hxx`, `.cs`, `.rb`, `.swift`, `.php`, `.vue`, `.kt`, `.kts`, `.dart`.
|
|
91
|
-
- **Grammar Loader**: Dynamically loads and caches Tree-sitter grammars per extension via `getParser(ext)` ([`loader.ts:64-83`](
|
|
91
|
+
- **Grammar Loader**: Dynamically loads and caches Tree-sitter grammars per extension via `getParser(ext)` ([`loader.ts:64-83`](packages/@monomind/monograph/src/parsers/loader.ts#L64-L83)). Supports `<script>` block isolation for `.vue` files ([`loader.ts:128-142`](packages/@monomind/monograph/src/parsers/loader.ts#L128-L142)).
|
|
92
92
|
2. **Regex Fallback Parsers (5 languages)**:
|
|
93
|
-
- Lightweight regex-based symbol extractors for languages when Tree-sitter grammars are uninstalled or unsupported: **Scala**, **Lua**, **Zig**, **PowerShell**, and **Elixir** ([`language-parsers.ts:1-100`](
|
|
93
|
+
- Lightweight regex-based symbol extractors for languages when Tree-sitter grammars are uninstalled or unsupported: **Scala**, **Lua**, **Zig**, **PowerShell**, and **Elixir** ([`language-parsers.ts:1-100`](packages/@monomind/monograph/src/parsers/language-parsers.ts#L1-L100)).
|
|
94
94
|
|
|
95
95
|
## SQLite Database Schema
|
|
96
96
|
|
|
97
|
-
The graph is stored in a WAL-mode SQLite database (`PRAGMA journal_mode = WAL`) managed in [`schema.ts`](
|
|
97
|
+
The graph is stored in a WAL-mode SQLite database (`PRAGMA journal_mode = WAL`) managed in [`schema.ts`](packages/@monomind/monograph/src/storage/schema.ts) and [`db.ts`](packages/@monomind/monograph/src/storage/db.ts):
|
|
98
98
|
|
|
99
99
|
- **`nodes`**: Code symbols and files (`id`, `label`, `name`, `norm_label`, `file_path`, `start_line`, `end_line`, `community_id`, `is_exported`, `language`, `properties`, `embedding`).
|
|
100
100
|
- **`edges`**: Directed relationships between nodes (`id`, `source_id`, `target_id`, `relation`, `confidence`, `confidence_score`, `weight`, `reason`, `evidence`).
|
|
@@ -105,7 +105,7 @@ The graph is stored in a WAL-mode SQLite database (`PRAGMA journal_mode = WAL`)
|
|
|
105
105
|
|
|
106
106
|
## Relationship Types
|
|
107
107
|
|
|
108
|
-
Monograph defines typed edges ([`types.ts:20-29`](
|
|
108
|
+
Monograph defines typed edges ([`types.ts:20-29`](packages/@monomind/monograph/src/types.ts#L20-L29)) categorized into structural, static analysis, and semantic relationships:
|
|
109
109
|
|
|
110
110
|
- **`CONTAINS`**: Parent container to child element (e.g. File contains Class/Function, Class contains Method).
|
|
111
111
|
- **`IMPORTS`**: File/Module import dependency (`import { x } from './y'`).
|
|
@@ -115,7 +115,7 @@ Monograph defines typed edges ([`types.ts:20-29`](file:///Users/morteza/Desktop/
|
|
|
115
115
|
|
|
116
116
|
## Blast Radius Calculation (`rippleImpact`)
|
|
117
117
|
|
|
118
|
-
Monograph calculates downstream cascade impact using the multi-hop `rippleImpact` BFS algorithm ([`ripple-impact.ts:51-84`](
|
|
118
|
+
Monograph calculates downstream cascade impact using the multi-hop `rippleImpact` BFS algorithm ([`ripple-impact.ts:51-84`](packages/@monomind/monograph/src/graph/ripple-impact.ts#L51-L84)):
|
|
119
119
|
|
|
120
120
|
- **Algorithm**: Breadth-First Search propagating through outgoing directed edge adjacency maps.
|
|
121
121
|
- **Scoring Formula**:
|
|
@@ -125,7 +125,7 @@ Monograph calculates downstream cascade impact using the multi-hop `rippleImpact
|
|
|
125
125
|
|
|
126
126
|
## Graph Freshness & Git Staleness Tracking
|
|
127
127
|
|
|
128
|
-
Monograph maintains graph synchronization with git repository state without full re-indexes ([`git-staleness.ts:13-66`](
|
|
128
|
+
Monograph maintains graph synchronization with git repository state without full re-indexes ([`git-staleness.ts:13-66`](packages/@monomind/monograph/src/staleness/git-staleness.ts#L13-L66)):
|
|
129
129
|
|
|
130
130
|
- **Commit Verification**: Compares stored `last_commit_hash` in `index_meta` against `git rev-parse HEAD`.
|
|
131
131
|
- **Change Diffing**: If hashes diverge, executes `git diff --name-only <indexedCommit>..HEAD` to populate `changedSince` files.
|
|
@@ -134,10 +134,10 @@ Monograph maintains graph synchronization with git repository state without full
|
|
|
134
134
|
|
|
135
135
|
### Incremental Watch Mode
|
|
136
136
|
|
|
137
|
-
`monomind monograph watch` (and the `monograph_watch` MCP tool) debounces file changes by 3s ([`watcher.ts:108-110`](
|
|
137
|
+
`monomind monograph watch` (and the `monograph_watch` MCP tool) debounces file changes by 3s ([`watcher.ts:108-110`](packages/@monomind/monograph/src/watch/watcher.ts#L108-L110)), then updates the graph per changed file — delete existing nodes/edges for that file, re-parse, re-insert ([`orchestrator.ts:312-365`](packages/@monomind/monograph/src/pipeline/orchestrator.ts#L312-L365)):
|
|
138
138
|
|
|
139
|
-
- **Incremental Threshold**: If a batch exceeds `INCREMENTAL_THRESHOLD` (20 changed files), it falls back to a full rebuild instead of per-file updates ([`orchestrator.ts:269-279`](
|
|
140
|
-
- **Deferred Full Rebuild**: After `FULL_REBUILD_IDLE_MS` (60s) with no further incremental activity, watch mode runs one full rebuild to refresh aggregate phases (communities, god-nodes, surprises, churn, report) that incremental updates don't recompute ([`watcher.ts:40-59`](
|
|
139
|
+
- **Incremental Threshold**: If a batch exceeds `INCREMENTAL_THRESHOLD` (20 changed files), it falls back to a full rebuild instead of per-file updates ([`orchestrator.ts:269-279`](packages/@monomind/monograph/src/pipeline/orchestrator.ts#L269-L279)).
|
|
140
|
+
- **Deferred Full Rebuild**: After `FULL_REBUILD_IDLE_MS` (60s) with no further incremental activity, watch mode runs one full rebuild to refresh aggregate phases (communities, god-nodes, surprises, churn, report) that incremental updates don't recompute ([`watcher.ts:40-59`](packages/@monomind/monograph/src/watch/watcher.ts#L40-L59)).
|
|
141
141
|
|
|
142
142
|
## Links
|
|
143
143
|
|
|
@@ -2,6 +2,9 @@ export declare class ChangedFilesError extends Error {
|
|
|
2
2
|
readonly kind: 'invalid_ref' | 'git_failed' | 'parse_error';
|
|
3
3
|
constructor(message: string, kind: 'invalid_ref' | 'git_failed' | 'parse_error');
|
|
4
4
|
}
|
|
5
|
+
/** @deprecated use git-ref.js's validateGitRef directly for new code — kept
|
|
6
|
+
* here so existing importers of this module's validateGitRef keep getting
|
|
7
|
+
* a typed ChangedFilesError('invalid_ref') instead of InvalidGitRefError. */
|
|
5
8
|
export declare function validateGitRef(ref: string): string;
|
|
6
9
|
export declare function getChangedFiles(root: string, sinceRef: string): Promise<Set<string>>;
|
|
7
10
|
export declare function filterResultsByChangedFiles<T extends {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changed-files.d.ts","sourceRoot":"","sources":["../../../src/analysis/changed-files.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"changed-files.d.ts","sourceRoot":"","sources":["../../../src/analysis/changed-files.ts"],"names":[],"mappings":"AAIA,qBAAa,iBAAkB,SAAQ,KAAK;aACG,IAAI,EAAE,aAAa,GAAG,YAAY,GAAG,aAAa;IAA/F,YAAY,OAAO,EAAE,MAAM,EAAkB,IAAI,EAAE,aAAa,GAAG,YAAY,GAAG,aAAa,EAG9F;CACF;AAED;;8EAE8E;AAC9E,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CASlD;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAiC1F;AAED,wBAAgB,2BAA2B,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAChF,OAAO,EAAE,CAAC,EAAE,EACZ,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,CAAC,EAAE,CAEL"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { execFileSync } from 'child_process';
|
|
2
2
|
import * as path from 'path';
|
|
3
|
+
import { validateGitRef as sharedValidateGitRef, InvalidGitRefError } from './git-ref.js';
|
|
3
4
|
export class ChangedFilesError extends Error {
|
|
4
5
|
kind;
|
|
5
6
|
constructor(message, kind) {
|
|
@@ -8,18 +9,19 @@ export class ChangedFilesError extends Error {
|
|
|
8
9
|
this.name = 'ChangedFilesError';
|
|
9
10
|
}
|
|
10
11
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const VALID_REF_RE = /^[a-zA-Z0-9\-_./@~^]+$/;
|
|
12
|
+
/** @deprecated use git-ref.js's validateGitRef directly for new code — kept
|
|
13
|
+
* here so existing importers of this module's validateGitRef keep getting
|
|
14
|
+
* a typed ChangedFilesError('invalid_ref') instead of InvalidGitRefError. */
|
|
15
15
|
export function validateGitRef(ref) {
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
try {
|
|
17
|
+
return sharedValidateGitRef(ref);
|
|
18
18
|
}
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
catch (err) {
|
|
20
|
+
if (err instanceof InvalidGitRefError) {
|
|
21
|
+
throw new ChangedFilesError(err.message, 'invalid_ref');
|
|
22
|
+
}
|
|
23
|
+
throw err;
|
|
21
24
|
}
|
|
22
|
-
throw new ChangedFilesError(`Invalid git ref: "${ref}". Must match ${VALID_REF_RE.source}`, 'invalid_ref');
|
|
23
25
|
}
|
|
24
26
|
export async function getChangedFiles(root, sinceRef) {
|
|
25
27
|
validateGitRef(sinceRef);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changed-files.js","sourceRoot":"","sources":["../../../src/analysis/changed-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"changed-files.js","sourceRoot":"","sources":["../../../src/analysis/changed-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,cAAc,IAAI,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE1F,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACG,IAAI;IAAjD,YAAY,OAAe,EAAkB,IAAkD;QAC7F,KAAK,CAAC,OAAO,CAAC,CAAC;oBAD4B,IAAI;QAE/C,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED;;8EAE8E;AAC9E,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,CAAC;QACH,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,kBAAkB,EAAE,CAAC;YACtC,MAAM,IAAI,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,QAAgB;IAClE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEzB,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,sEAAsE;QACtE,oEAAoE;QACpE,YAAY;QACZ,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE;YAC5E,GAAG,EAAE,IAAI;YACT,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,iBAAiB,CACzB,oBAAoB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EACtE,YAAY,CACb,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,8EAA8E;QAC9E,mFAAmF;QACnF,MAAM,KAAK,GAAG,MAAM;aACjB,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;aACjC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;QACnD,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,iBAAiB,CACzB,oCAAoC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EACtF,aAAa,CACd,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,OAAY,EACZ,YAAyB;IAEzB,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC5F,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changed-workspaces.d.ts","sourceRoot":"","sources":["../../../src/analysis/changed-workspaces.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"changed-workspaces.d.ts","sourceRoot":"","sources":["../../../src/analysis/changed-workspaces.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;CACrB;AAqCD,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,cAAc,CAAC,EAAE,MAAM,EAAE,GACxB,gBAAgB,EAAE,CA0BpB;AAED,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,cAAc,CAAC,EAAE,MAAM,EAAE,GACxB,MAAM,EAAE,CAIV"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { execFileSync } from 'child_process';
|
|
2
2
|
import { existsSync, readdirSync, readFileSync } from 'fs';
|
|
3
3
|
import { join, relative, resolve } from 'path';
|
|
4
|
+
import { validateGitRef } from './git-ref.js';
|
|
4
5
|
function findWorkspaceRoots(projectRoot) {
|
|
5
6
|
// Detect pnpm/npm/yarn workspaces
|
|
6
7
|
let pkg;
|
|
@@ -38,15 +39,7 @@ function findWorkspaceRoots(projectRoot) {
|
|
|
38
39
|
return roots;
|
|
39
40
|
}
|
|
40
41
|
export function getChangedWorkspaces(projectRoot, sinceRef, workspaceRoots) {
|
|
41
|
-
|
|
42
|
-
// rejected explicitly so a value like "--output=/tmp/pwned" can't be
|
|
43
|
-
// interpreted by git as a command-line option (git option injection).
|
|
44
|
-
if (sinceRef.startsWith('-')) {
|
|
45
|
-
throw new Error(`Invalid git ref: "${sinceRef}". Refs must not start with '-' (would be interpreted as a git option)`);
|
|
46
|
-
}
|
|
47
|
-
if (!/^[a-zA-Z0-9\-_./@~^]+$/.test(sinceRef)) {
|
|
48
|
-
throw new Error(`Invalid git ref: "${sinceRef}"`);
|
|
49
|
-
}
|
|
42
|
+
validateGitRef(sinceRef);
|
|
50
43
|
let changedFiles;
|
|
51
44
|
try {
|
|
52
45
|
// execFileSync with array argv — no shell involved, so a `projectRoot`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changed-workspaces.js","sourceRoot":"","sources":["../../../src/analysis/changed-workspaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"changed-workspaces.js","sourceRoot":"","sources":["../../../src/analysis/changed-workspaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAQ9C,SAAS,kBAAkB,CAAC,WAAmB;IAC7C,kCAAkC;IAClC,IAAI,GAA4B,CAAC;IACjC,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CACd,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CACxD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC;IAAC,CAAC;IAEtB,MAAM,cAAc,GACjB,GAAG,CAAC,YAAY,CAAmD,YAAY,KAAK;QACnF,CAAC,CAAC,GAAG,CAAC,YAAY,CAAa;QAC/B,CAAC,CAAE,GAAG,CAAC,YAAY,CAAyC,EAAE,QAAQ,IAAI,EAAE,CAAC;IAEjF,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE3C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,iDAAiD;QACjD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACjD,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1D,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;oBACxB,IAAI,CAAC,CAAC,WAAW,EAAE;wBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACxC,IAAI,UAAU,CAAC,OAAO,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,WAAmB,EACnB,QAAgB,EAChB,cAAyB;IAEzB,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEzB,IAAI,YAAyB,CAAC;IAC9B,IAAI,CAAC;QACH,uEAAuE;QACvE,oEAAoE;QACpE,YAAY;QACZ,MAAM,GAAG,GAAG,YAAY,CACtB,KAAK,EACL,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,QAAQ,SAAS,CAAC,EAChE,EAAE,QAAQ,EAAE,MAAM,EAAE,CACrB,CAAC;QACF,YAAY,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7E,CAAC;IAAC,MAAM,CAAC;QACP,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,KAAK,GAAG,cAAc,IAAI,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAEhE,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACtB,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;QACtE,MAAM,UAAU,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;QAClD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,WAAmB,EACnB,QAAgB,EAChB,cAAyB;IAEzB,OAAO,oBAAoB,CAAC,WAAW,EAAE,QAAQ,EAAE,cAAc,CAAC;SAC/D,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;SACzB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC"}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/** @deprecated use git-ref.js's validateGitRef directly for new code. Kept
|
|
2
|
+
* as a void-returning wrapper so existing call sites in this file don't
|
|
3
|
+
* need to change shape. */
|
|
1
4
|
export declare function validateGitRef(ref: string): void;
|
|
2
5
|
export declare function resolveGitToplevel(cwd: string): string;
|
|
3
6
|
export declare function collectGitPaths(root: string, since?: string): string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-changed-files.d.ts","sourceRoot":"","sources":["../../../src/analysis/git-changed-files.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"git-changed-files.d.ts","sourceRoot":"","sources":["../../../src/analysis/git-changed-files.ts"],"names":[],"mappings":"AAIA;;4BAE4B;AAC5B,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMtD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAuBtE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAQhF;AAED,wBAAgB,2BAA2B,CAAC,CAAC,SAAS;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,EACxE,OAAO,EAAE,CAAC,EAAE,EACZ,YAAY,EAAE,MAAM,EAAE,GACrB,CAAC,EAAE,CAGL;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAG1E"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { execFileSync } from 'node:child_process';
|
|
2
2
|
import * as path from 'node:path';
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
import { validateGitRef as sharedValidateGitRef } from './git-ref.js';
|
|
4
|
+
/** @deprecated use git-ref.js's validateGitRef directly for new code. Kept
|
|
5
|
+
* as a void-returning wrapper so existing call sites in this file don't
|
|
6
|
+
* need to change shape. */
|
|
5
7
|
export function validateGitRef(ref) {
|
|
6
|
-
|
|
7
|
-
throw new Error(`Invalid git ref: ${JSON.stringify(ref)} — only alphanumeric, dots, slashes, hyphens, and common git ref characters are allowed`);
|
|
8
|
-
}
|
|
8
|
+
sharedValidateGitRef(ref);
|
|
9
9
|
}
|
|
10
10
|
export function resolveGitToplevel(cwd) {
|
|
11
11
|
try {
|
|
12
|
-
return
|
|
12
|
+
return execFileSync('git', ['rev-parse', '--show-toplevel'], { cwd, encoding: 'utf8' }).trim();
|
|
13
13
|
}
|
|
14
14
|
catch {
|
|
15
15
|
return cwd;
|
|
@@ -17,15 +17,20 @@ export function resolveGitToplevel(cwd) {
|
|
|
17
17
|
}
|
|
18
18
|
export function collectGitPaths(root, since) {
|
|
19
19
|
try {
|
|
20
|
-
|
|
20
|
+
// execFileSync with an array argv — no shell involved, so `since` and
|
|
21
|
+
// `root` cannot break out via `;`/`&&`/`$(...)` even without the
|
|
22
|
+
// DANGEROUS_PATTERNS deny-list this file used to rely on instead
|
|
23
|
+
// (the deny-list was also the only implementation among the four
|
|
24
|
+
// duplicated validators that rejected the common `main..HEAD` range).
|
|
25
|
+
let args;
|
|
21
26
|
if (since) {
|
|
22
|
-
|
|
23
|
-
|
|
27
|
+
sharedValidateGitRef(since);
|
|
28
|
+
args = ['diff', '--name-only', '--diff-filter=ACM', since];
|
|
24
29
|
}
|
|
25
30
|
else {
|
|
26
|
-
|
|
31
|
+
args = ['ls-files'];
|
|
27
32
|
}
|
|
28
|
-
const output =
|
|
33
|
+
const output = execFileSync('git', args, { cwd: root, encoding: 'utf8' });
|
|
29
34
|
return output
|
|
30
35
|
.split('\n')
|
|
31
36
|
.map(l => l.trim())
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-changed-files.js","sourceRoot":"","sources":["../../../src/analysis/git-changed-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"git-changed-files.js","sourceRoot":"","sources":["../../../src/analysis/git-changed-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,cAAc,IAAI,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEtE;;4BAE4B;AAC5B,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,oBAAoB,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACjG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAc;IAC1D,IAAI,CAAC;QACH,sEAAsE;QACtE,iEAAiE;QACjE,iEAAiE;QACjE,iEAAiE;QACjE,sEAAsE;QACtE,IAAI,IAAc,CAAC;QACnB,IAAI,KAAK,EAAE,CAAC;YACV,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,mBAAmB,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;QACtB,CAAC;QACD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1E,OAAO,MAAM;aACV,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aAClB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;aACzB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,KAAc;IAC7D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,CAAC;QACH,cAAc,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,OAAY,EACZ,YAAsB;IAEtB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,KAAa;IAC9D,cAAc,CAAC,KAAK,CAAC,CAAC;IACtB,OAAO,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared git-ref validator.
|
|
3
|
+
*
|
|
4
|
+
* Previously duplicated 4 ways (monovector/diff-classifier.ts in the CLI
|
|
5
|
+
* package, plus changed-files.ts, git-changed-files.ts, and
|
|
6
|
+
* changed-workspaces.ts here) and already disagreeing on `main..HEAD` /
|
|
7
|
+
* `main...HEAD` — a valid, extremely common git range. This is
|
|
8
|
+
* diff-classifier.ts's implementation (allowlist + leading-dash guard +
|
|
9
|
+
* explicit range carve-out + length cap), merged with changed-files.ts's
|
|
10
|
+
* typed `ChangedFilesError` for callers that want to distinguish an invalid
|
|
11
|
+
* ref from an actual git failure.
|
|
12
|
+
*/
|
|
13
|
+
export declare class InvalidGitRefError extends Error {
|
|
14
|
+
constructor(message: string);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Validate a git ref before it reaches a git invocation.
|
|
18
|
+
*
|
|
19
|
+
* - Rejects shell metacharacters via an allowlist (alphanumeric plus
|
|
20
|
+
* `-._/~^@`).
|
|
21
|
+
* - Rejects a leading `-` explicitly: `execFile`/`execFileSync` with an
|
|
22
|
+
* array argv defeats *shell* injection, but does not stop the `git`
|
|
23
|
+
* binary itself from treating an attacker-controlled ref as a flag
|
|
24
|
+
* (`--output=...`, `-G<regex>`, `-S<string>`).
|
|
25
|
+
* - Allows `..`/`...` ranges (`main..HEAD`, `main...HEAD`) — the primary,
|
|
26
|
+
* extremely common case a naive "reject any `..`" rule breaks.
|
|
27
|
+
* - Caps length at 256.
|
|
28
|
+
*
|
|
29
|
+
* Throws `InvalidGitRefError` (not a plain `Error`) so callers can
|
|
30
|
+
* distinguish "bad input" from "git itself failed".
|
|
31
|
+
*/
|
|
32
|
+
export declare function validateGitRef(ref: string): string;
|
|
33
|
+
//# sourceMappingURL=git-ref.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-ref.d.ts","sourceRoot":"","sources":["../../../src/analysis/git-ref.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAID;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAiBlD"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared git-ref validator.
|
|
3
|
+
*
|
|
4
|
+
* Previously duplicated 4 ways (monovector/diff-classifier.ts in the CLI
|
|
5
|
+
* package, plus changed-files.ts, git-changed-files.ts, and
|
|
6
|
+
* changed-workspaces.ts here) and already disagreeing on `main..HEAD` /
|
|
7
|
+
* `main...HEAD` — a valid, extremely common git range. This is
|
|
8
|
+
* diff-classifier.ts's implementation (allowlist + leading-dash guard +
|
|
9
|
+
* explicit range carve-out + length cap), merged with changed-files.ts's
|
|
10
|
+
* typed `ChangedFilesError` for callers that want to distinguish an invalid
|
|
11
|
+
* ref from an actual git failure.
|
|
12
|
+
*/
|
|
13
|
+
export class InvalidGitRefError extends Error {
|
|
14
|
+
constructor(message) {
|
|
15
|
+
super(message);
|
|
16
|
+
this.name = 'InvalidGitRefError';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
const VALID_REF_RE = /^[a-zA-Z0-9_\-./~^@]+$/;
|
|
20
|
+
/**
|
|
21
|
+
* Validate a git ref before it reaches a git invocation.
|
|
22
|
+
*
|
|
23
|
+
* - Rejects shell metacharacters via an allowlist (alphanumeric plus
|
|
24
|
+
* `-._/~^@`).
|
|
25
|
+
* - Rejects a leading `-` explicitly: `execFile`/`execFileSync` with an
|
|
26
|
+
* array argv defeats *shell* injection, but does not stop the `git`
|
|
27
|
+
* binary itself from treating an attacker-controlled ref as a flag
|
|
28
|
+
* (`--output=...`, `-G<regex>`, `-S<string>`).
|
|
29
|
+
* - Allows `..`/`...` ranges (`main..HEAD`, `main...HEAD`) — the primary,
|
|
30
|
+
* extremely common case a naive "reject any `..`" rule breaks.
|
|
31
|
+
* - Caps length at 256.
|
|
32
|
+
*
|
|
33
|
+
* Throws `InvalidGitRefError` (not a plain `Error`) so callers can
|
|
34
|
+
* distinguish "bad input" from "git itself failed".
|
|
35
|
+
*/
|
|
36
|
+
export function validateGitRef(ref) {
|
|
37
|
+
if (!VALID_REF_RE.test(ref)) {
|
|
38
|
+
throw new InvalidGitRefError(`Invalid git ref: "${ref}" contains unsafe characters`);
|
|
39
|
+
}
|
|
40
|
+
if (ref.startsWith('-')) {
|
|
41
|
+
throw new InvalidGitRefError(`Invalid git ref: "${ref}" must not start with '-'`);
|
|
42
|
+
}
|
|
43
|
+
// Multiple dots are only valid as a two-dot or three-dot range between two
|
|
44
|
+
// otherwise-valid ref segments (main..HEAD, main...HEAD) — anything else
|
|
45
|
+
// containing ".." is a path-traversal-shaped pattern and rejected.
|
|
46
|
+
if (ref.includes('..') && !/^[a-zA-Z0-9_-]+\.\.\.?[a-zA-Z0-9_-]+$/.test(ref)) {
|
|
47
|
+
throw new InvalidGitRefError(`Invalid git ref: "${ref}" has a suspicious '..' pattern`);
|
|
48
|
+
}
|
|
49
|
+
if (ref.length > 256) {
|
|
50
|
+
throw new InvalidGitRefError(`Invalid git ref: "${ref}" is too long`);
|
|
51
|
+
}
|
|
52
|
+
return ref;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=git-ref.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-ref.js","sourceRoot":"","sources":["../../../src/analysis/git-ref.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,YAAY,GAAG,wBAAwB,CAAC;AAE9C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,kBAAkB,CAAC,qBAAqB,GAAG,8BAA8B,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,kBAAkB,CAAC,qBAAqB,GAAG,2BAA2B,CAAC,CAAC;IACpF,CAAC;IACD,2EAA2E;IAC3E,yEAAyE;IACzE,mEAAmE;IACnE,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,uCAAuC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7E,MAAM,IAAI,kBAAkB,CAAC,qBAAqB,GAAG,iCAAiC,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACrB,MAAM,IAAI,kBAAkB,CAAC,qBAAqB,GAAG,eAAe,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boundary-analysis.d.ts","sourceRoot":"","sources":["../../../src/analyze/boundary-analysis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAE3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAE5E,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,uBAAuB,EAAE,CAAC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"boundary-analysis.d.ts","sourceRoot":"","sources":["../../../src/analyze/boundary-analysis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAE3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAE5E,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,uBAAuB,EAAE,CAAC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB;AA0DD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,UAAU,EAAE,EACrB,MAAM,EAAE,sBAAsB,GAC7B,uBAAuB,EAAE,CAE3B;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,UAAU,EAAE,EACrB,MAAM,EAAE,sBAAsB,GAC7B,sBAAsB,CAoDxB"}
|
|
@@ -7,48 +7,48 @@ function isReachableOrEntry(mod) {
|
|
|
7
7
|
function hasRules(config, zoneName) {
|
|
8
8
|
return config.rules.some(r => r.from.name === zoneName);
|
|
9
9
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Every file `mod` reaches into another module through: barrel re-exports
|
|
12
|
+
* (`mod.reExports`) and, WHEN PRESENT, symbol references (`mod.references`,
|
|
13
|
+
* where `fromFile` is the file the imported symbol lives in — see
|
|
14
|
+
* graph/node-types.ts). `references` carries real line numbers; `reExports`
|
|
15
|
+
* does not, so those edges still report line 1.
|
|
16
|
+
*
|
|
17
|
+
* CAVEAT (found in review, kept here rather than silently reverted): the
|
|
18
|
+
* ONLY writer of `ModuleNode.references` anywhere in this package is
|
|
19
|
+
* graph/re-exports/propagate.ts's barrel-re-export propagation — a plain
|
|
20
|
+
* `import { x } from '../other-zone/y'` with no barrel/re-export anywhere in
|
|
21
|
+
* the chain never populates `references` at all, so this function does NOT
|
|
22
|
+
* actually catch that case despite reading as if it does. Fixing that
|
|
23
|
+
* properly means teaching some real import-graph builder to push a
|
|
24
|
+
* SymbolReference for every ordinary import, which nothing in this package
|
|
25
|
+
* currently does — `analyzeBoundaries`/`findBoundaryViolations` here (and
|
|
26
|
+
* their sibling `unused-exports.ts`) have zero production callers; both
|
|
27
|
+
* operate purely on hand-constructed ModuleNode fixtures in their own test
|
|
28
|
+
* files, not on any real parsed codebase. If you need working, wired-up
|
|
29
|
+
* boundary checking today, use `pipeline/phases/boundary.ts`'s
|
|
30
|
+
* `detectBoundaryViolations`, which queries the SQLite `edges` table
|
|
31
|
+
* directly and already covers every import edge, barrel or not.
|
|
32
|
+
*/
|
|
33
|
+
function edgesForModule(mod) {
|
|
34
|
+
const seen = new Set();
|
|
35
|
+
const edges = [];
|
|
36
|
+
for (const edge of mod.reExports) {
|
|
37
|
+
if (seen.has(edge.toFile))
|
|
28
38
|
continue;
|
|
29
|
-
|
|
39
|
+
seen.add(edge.toFile);
|
|
40
|
+
edges.push({ toFile: edge.toFile, line: 1, col: 0 });
|
|
41
|
+
}
|
|
42
|
+
for (const ref of mod.references) {
|
|
43
|
+
if (seen.has(ref.fromFile))
|
|
30
44
|
continue;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
const toZone = classify(toPath);
|
|
34
|
-
if (!toZone)
|
|
35
|
-
continue;
|
|
36
|
-
if (fromZone === toZone)
|
|
37
|
-
continue;
|
|
38
|
-
if (!isImportAllowed(config, mod.filePath, toPath)) {
|
|
39
|
-
violations.push({
|
|
40
|
-
fromPath: mod.filePath,
|
|
41
|
-
toPath,
|
|
42
|
-
fromZone,
|
|
43
|
-
toZone,
|
|
44
|
-
importSpecifier: toPath,
|
|
45
|
-
line: 1,
|
|
46
|
-
col: 0,
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
}
|
|
45
|
+
seen.add(ref.fromFile);
|
|
46
|
+
edges.push({ toFile: ref.fromFile, line: ref.line ?? 1, col: 0 });
|
|
50
47
|
}
|
|
51
|
-
return
|
|
48
|
+
return edges;
|
|
49
|
+
}
|
|
50
|
+
export function findBoundaryViolations(modules, config) {
|
|
51
|
+
return analyzeBoundaries(modules, config).violations;
|
|
52
52
|
}
|
|
53
53
|
export function analyzeBoundaries(modules, config) {
|
|
54
54
|
if (config.zones.length === 0) {
|
|
@@ -75,7 +75,7 @@ export function analyzeBoundaries(modules, config) {
|
|
|
75
75
|
}
|
|
76
76
|
if (!hasRules(config, fromZone))
|
|
77
77
|
continue;
|
|
78
|
-
for (const edge of mod
|
|
78
|
+
for (const edge of edgesForModule(mod)) {
|
|
79
79
|
const toPath = edge.toFile;
|
|
80
80
|
checkedEdges++;
|
|
81
81
|
const toZone = classify(toPath);
|
|
@@ -90,8 +90,8 @@ export function analyzeBoundaries(modules, config) {
|
|
|
90
90
|
fromZone,
|
|
91
91
|
toZone,
|
|
92
92
|
importSpecifier: toPath,
|
|
93
|
-
line:
|
|
94
|
-
col:
|
|
93
|
+
line: edge.line,
|
|
94
|
+
col: edge.col,
|
|
95
95
|
});
|
|
96
96
|
}
|
|
97
97
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boundary-analysis.js","sourceRoot":"","sources":["../../../src/analyze/boundary-analysis.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE7E,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AASzD,SAAS,kBAAkB,CAAC,GAAe;IACzC,OAAO,CACL,CAAC,GAAG,CAAC,KAAK,GAAG,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC;QAC7C,CAAC,GAAG,CAAC,KAAK,GAAG,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAChD,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,MAA8B,EAAE,QAAgB;IAChE,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;AAC1D,CAAC;
|
|
1
|
+
{"version":3,"file":"boundary-analysis.js","sourceRoot":"","sources":["../../../src/analyze/boundary-analysis.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -42,6 +42,7 @@ export * from './web/analyze-api.js';
|
|
|
42
42
|
export * from './web/mcp-http.js';
|
|
43
43
|
export * from './mcp-resources/index.js';
|
|
44
44
|
export * from './analysis/shape-extractor.js';
|
|
45
|
+
export * from './analysis/git-ref.js';
|
|
45
46
|
export * from './mcp-tools/tool-map.js';
|
|
46
47
|
export * from './mcp-tools/shape-check.js';
|
|
47
48
|
export * from './mcp-tools/neighbors.js';
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.js
CHANGED
|
@@ -43,6 +43,7 @@ export * from './web/analyze-api.js';
|
|
|
43
43
|
export * from './web/mcp-http.js';
|
|
44
44
|
export * from './mcp-resources/index.js';
|
|
45
45
|
export * from './analysis/shape-extractor.js';
|
|
46
|
+
export * from './analysis/git-ref.js';
|
|
46
47
|
export * from './mcp-tools/tool-map.js';
|
|
47
48
|
export * from './mcp-tools/shape-check.js';
|
|
48
49
|
export * from './mcp-tools/neighbors.js';
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/lsp/server.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/lsp/server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/lsp/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAK7D,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE;QAAE,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,GAAG,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IAChG,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAOD,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,WAAW,EACf,QAAQ,EAAE,MAAM,GACf,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAuI9B;AAuBD,wBAAgB,cAAc,CAAC,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CA2GtE"}
|