@j0hanz/filesystem-context-mcp 1.2.1 → 1.2.3
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 +2 -0
- package/dist/__tests__/lib/file-operations.test.js +30 -0
- package/dist/__tests__/lib/file-operations.test.js.map +1 -1
- package/dist/lib/constants.d.ts +1 -0
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +25 -0
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/file-operations/read-multiple-files.d.ts +2 -0
- package/dist/lib/file-operations/read-multiple-files.d.ts.map +1 -1
- package/dist/lib/file-operations/read-multiple-files.js +33 -6
- package/dist/lib/file-operations/read-multiple-files.js.map +1 -1
- package/dist/lib/file-operations/search/context-manager.d.ts +12 -0
- package/dist/lib/file-operations/search/context-manager.d.ts.map +1 -0
- package/dist/lib/file-operations/search/context-manager.js +50 -0
- package/dist/lib/file-operations/search/context-manager.js.map +1 -0
- package/dist/lib/file-operations/search/engine.d.ts +28 -0
- package/dist/lib/file-operations/search/engine.d.ts.map +1 -0
- package/dist/lib/file-operations/search/engine.js +180 -0
- package/dist/lib/file-operations/search/engine.js.map +1 -0
- package/dist/lib/file-operations/search/file-processor.d.ts +16 -0
- package/dist/lib/file-operations/search/file-processor.d.ts.map +1 -0
- package/dist/lib/file-operations/search/file-processor.js +121 -0
- package/dist/lib/file-operations/search/file-processor.js.map +1 -0
- package/dist/lib/file-operations/search/match-strategy.d.ts +26 -0
- package/dist/lib/file-operations/search/match-strategy.d.ts.map +1 -0
- package/dist/lib/file-operations/search/match-strategy.js +128 -0
- package/dist/lib/file-operations/search/match-strategy.js.map +1 -0
- package/dist/lib/file-operations/search/types.d.ts +34 -0
- package/dist/lib/file-operations/search/types.d.ts.map +1 -0
- package/dist/lib/file-operations/search/types.js +2 -0
- package/dist/lib/file-operations/search/types.js.map +1 -0
- package/dist/lib/file-operations/search-content.d.ts.map +1 -1
- package/dist/lib/file-operations/search-content.js +3 -433
- package/dist/lib/file-operations/search-content.js.map +1 -1
- package/dist/lib/file-operations/search-files.d.ts.map +1 -1
- package/dist/lib/file-operations/search-files.js +2 -4
- package/dist/lib/file-operations/search-files.js.map +1 -1
- package/dist/lib/fs-helpers/binary-detect.d.ts.map +1 -1
- package/dist/lib/fs-helpers/binary-detect.js +3 -1
- package/dist/lib/fs-helpers/binary-detect.js.map +1 -1
- package/dist/lib/fs-helpers/concurrency.d.ts.map +1 -1
- package/dist/lib/fs-helpers/concurrency.js +18 -9
- package/dist/lib/fs-helpers/concurrency.js.map +1 -1
- package/dist/lib/fs-helpers/fs-utils.d.ts +1 -0
- package/dist/lib/fs-helpers/fs-utils.d.ts.map +1 -1
- package/dist/lib/fs-helpers/fs-utils.js +13 -0
- package/dist/lib/fs-helpers/fs-utils.js.map +1 -1
- package/dist/lib/fs-helpers/readers/read-file.d.ts.map +1 -1
- package/dist/lib/fs-helpers/readers/read-file.js +1 -1
- package/dist/lib/fs-helpers/readers/read-file.js.map +1 -1
- package/dist/lib/fs-helpers.d.ts +1 -1
- package/dist/lib/fs-helpers.d.ts.map +1 -1
- package/dist/lib/fs-helpers.js +1 -1
- package/dist/lib/fs-helpers.js.map +1 -1
- package/dist/schemas/input-helpers.d.ts.map +1 -1
- package/dist/schemas/input-helpers.js +3 -3
- package/dist/schemas/input-helpers.js.map +1 -1
- package/dist/schemas/inputs.d.ts +2 -0
- package/dist/schemas/inputs.d.ts.map +1 -1
- package/dist/schemas/inputs.js +2 -0
- package/dist/schemas/inputs.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +9 -6
- package/dist/server.js.map +1 -1
- package/dist/tools/read-multiple-files.d.ts.map +1 -1
- package/dist/tools/read-multiple-files.js +2 -0
- package/dist/tools/read-multiple-files.js.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../../src/lib/file-operations/search/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { MatchStrategy } from './match-strategy.js';
|
|
2
|
+
import type { ScanResult, SearchOptions } from './types.js';
|
|
3
|
+
export declare class FileProcessor {
|
|
4
|
+
private readonly strategy;
|
|
5
|
+
private readonly options;
|
|
6
|
+
constructor(strategy: MatchStrategy, options: SearchOptions);
|
|
7
|
+
processFile(rawPath: string): Promise<ScanResult>;
|
|
8
|
+
private resolvePath;
|
|
9
|
+
private scanWithHandle;
|
|
10
|
+
private scanContent;
|
|
11
|
+
private createReadInterface;
|
|
12
|
+
private trimLine;
|
|
13
|
+
private shouldStop;
|
|
14
|
+
private createEmptyResult;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=file-processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-processor.d.ts","sourceRoot":"","sources":["../../../../src/lib/file-operations/search/file-processor.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE5D,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;gBAE5B,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa;IAKrD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;YAkBzC,WAAW;YAcX,cAAc;YAiBd,WAAW;IAqDzB,OAAO,CAAC,mBAAmB;IAe3B,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,iBAAiB;CAW1B"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import * as fsPromises from 'node:fs/promises';
|
|
2
|
+
import * as readline from 'node:readline';
|
|
3
|
+
import { MAX_LINE_CONTENT_LENGTH } from '../../constants.js';
|
|
4
|
+
import { isProbablyBinary } from '../../fs-helpers.js';
|
|
5
|
+
import { validateExistingPathDetailed } from '../../path-validation.js';
|
|
6
|
+
import { ContextManager } from './context-manager.js';
|
|
7
|
+
export class FileProcessor {
|
|
8
|
+
strategy;
|
|
9
|
+
options;
|
|
10
|
+
constructor(strategy, options) {
|
|
11
|
+
this.strategy = strategy;
|
|
12
|
+
this.options = options;
|
|
13
|
+
}
|
|
14
|
+
async processFile(rawPath) {
|
|
15
|
+
const resolved = await this.resolvePath(rawPath);
|
|
16
|
+
if (!resolved) {
|
|
17
|
+
return this.createEmptyResult({ scanned: false }); // Inaccessible
|
|
18
|
+
}
|
|
19
|
+
const handle = await fsPromises.open(resolved.openPath, 'r');
|
|
20
|
+
try {
|
|
21
|
+
return await this.scanWithHandle(handle, resolved.openPath, resolved.displayPath);
|
|
22
|
+
}
|
|
23
|
+
finally {
|
|
24
|
+
await handle.close().catch(() => { });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async resolvePath(rawPath) {
|
|
28
|
+
try {
|
|
29
|
+
const validated = await validateExistingPathDetailed(rawPath);
|
|
30
|
+
return {
|
|
31
|
+
openPath: validated.resolvedPath,
|
|
32
|
+
displayPath: validated.requestedPath,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async scanWithHandle(handle, openPath, displayPath) {
|
|
40
|
+
const stats = await handle.stat();
|
|
41
|
+
if (stats.size > this.options.maxFileSize) {
|
|
42
|
+
return this.createEmptyResult({ scanned: true, skippedTooLarge: true });
|
|
43
|
+
}
|
|
44
|
+
if (this.options.skipBinary && (await isProbablyBinary(openPath, handle))) {
|
|
45
|
+
return this.createEmptyResult({ scanned: true, skippedBinary: true });
|
|
46
|
+
}
|
|
47
|
+
return await this.scanContent(handle, displayPath);
|
|
48
|
+
}
|
|
49
|
+
async scanContent(handle, displayPath) {
|
|
50
|
+
const contextManager = new ContextManager(this.options.contextLines);
|
|
51
|
+
const matches = [];
|
|
52
|
+
let linesSkipped = 0;
|
|
53
|
+
let lineNumber = 0;
|
|
54
|
+
const { rl, stream } = this.createReadInterface(handle);
|
|
55
|
+
try {
|
|
56
|
+
for await (const line of rl) {
|
|
57
|
+
lineNumber++;
|
|
58
|
+
if (this.shouldStop(matches.length))
|
|
59
|
+
break;
|
|
60
|
+
const trimmed = this.trimLine(line);
|
|
61
|
+
contextManager.pushLine(trimmed);
|
|
62
|
+
const matchCount = this.strategy.countMatches(line);
|
|
63
|
+
if (matchCount < 0) {
|
|
64
|
+
linesSkipped++;
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
if (matchCount > 0) {
|
|
68
|
+
matches.push(contextManager.createMatch(displayPath, lineNumber, trimmed, matchCount));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
finally {
|
|
73
|
+
rl.close();
|
|
74
|
+
stream.destroy();
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
matches,
|
|
78
|
+
linesSkippedDueToRegexTimeout: linesSkipped,
|
|
79
|
+
fileHadMatches: matches.length > 0,
|
|
80
|
+
skippedTooLarge: false,
|
|
81
|
+
skippedBinary: false,
|
|
82
|
+
scanned: true,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
createReadInterface(handle) {
|
|
86
|
+
const stream = handle.createReadStream({
|
|
87
|
+
encoding: 'utf-8',
|
|
88
|
+
autoClose: false,
|
|
89
|
+
});
|
|
90
|
+
const rl = readline.createInterface({
|
|
91
|
+
input: stream,
|
|
92
|
+
crlfDelay: Infinity,
|
|
93
|
+
});
|
|
94
|
+
return { rl, stream };
|
|
95
|
+
}
|
|
96
|
+
trimLine(line) {
|
|
97
|
+
return line.trimEnd().substring(0, MAX_LINE_CONTENT_LENGTH);
|
|
98
|
+
}
|
|
99
|
+
shouldStop(currentFileMatches) {
|
|
100
|
+
if (this.options.deadlineMs && Date.now() > this.options.deadlineMs) {
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
if (this.options.currentMatchCount + currentFileMatches >=
|
|
104
|
+
this.options.maxResults) {
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
createEmptyResult(overrides) {
|
|
110
|
+
return {
|
|
111
|
+
matches: [],
|
|
112
|
+
linesSkippedDueToRegexTimeout: 0,
|
|
113
|
+
fileHadMatches: false,
|
|
114
|
+
skippedTooLarge: false,
|
|
115
|
+
skippedBinary: false,
|
|
116
|
+
scanned: false,
|
|
117
|
+
...overrides,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=file-processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-processor.js","sourceRoot":"","sources":["../../../../src/lib/file-operations/search/file-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface MatchStrategy {
|
|
2
|
+
countMatches(line: string): number;
|
|
3
|
+
isValid(): boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare class LiteralMatchStrategy implements MatchStrategy {
|
|
6
|
+
private readonly needle;
|
|
7
|
+
private readonly haystackTransform;
|
|
8
|
+
constructor(pattern: string, caseSensitive: boolean);
|
|
9
|
+
countMatches(line: string): number;
|
|
10
|
+
isValid(): boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare class RegexMatchStrategy implements MatchStrategy {
|
|
13
|
+
private readonly regex;
|
|
14
|
+
private readonly timeoutMs;
|
|
15
|
+
constructor(regex: RegExp, timeoutMs?: number);
|
|
16
|
+
countMatches(line: string): number;
|
|
17
|
+
isValid(): boolean;
|
|
18
|
+
private shouldCheckTimeout;
|
|
19
|
+
}
|
|
20
|
+
export declare function createMatchStrategy(pattern: string, options: {
|
|
21
|
+
isLiteral: boolean;
|
|
22
|
+
wholeWord: boolean;
|
|
23
|
+
caseSensitive: boolean;
|
|
24
|
+
basePath: string;
|
|
25
|
+
}): MatchStrategy;
|
|
26
|
+
//# sourceMappingURL=match-strategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"match-strategy.d.ts","sourceRoot":"","sources":["../../../../src/lib/file-operations/search/match-strategy.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACnC,OAAO,IAAI,OAAO,CAAC;CACpB;AAED,qBAAa,oBAAqB,YAAW,aAAa;IACxD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAwB;gBAE9C,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO;IAKnD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAelC,OAAO,IAAI,OAAO;CAGnB;AAED,qBAAa,kBAAmB,YAAW,aAAa;IACtD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,MAA+B;IAKrE,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAgClC,OAAO,IAAI,OAAO;IAIlB,OAAO,CAAC,kBAAkB;CAY3B;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IACP,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB,GACA,aAAa,CAef"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import safeRegex from 'safe-regex2';
|
|
2
|
+
import { REGEX_MATCH_TIMEOUT_MS } from '../../constants.js';
|
|
3
|
+
import { ErrorCode, McpError } from '../../errors.js';
|
|
4
|
+
export class LiteralMatchStrategy {
|
|
5
|
+
needle;
|
|
6
|
+
haystackTransform;
|
|
7
|
+
constructor(pattern, caseSensitive) {
|
|
8
|
+
this.needle = caseSensitive ? pattern : pattern.toLowerCase();
|
|
9
|
+
this.haystackTransform = caseSensitive ? (s) => s : (s) => s.toLowerCase();
|
|
10
|
+
}
|
|
11
|
+
countMatches(line) {
|
|
12
|
+
if (line.length === 0 || this.needle.length === 0)
|
|
13
|
+
return 0;
|
|
14
|
+
const haystack = this.haystackTransform(line);
|
|
15
|
+
let count = 0;
|
|
16
|
+
let pos = 0;
|
|
17
|
+
while ((pos = haystack.indexOf(this.needle, pos)) !== -1) {
|
|
18
|
+
count++;
|
|
19
|
+
pos += this.needle.length;
|
|
20
|
+
}
|
|
21
|
+
return count;
|
|
22
|
+
}
|
|
23
|
+
isValid() {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export class RegexMatchStrategy {
|
|
28
|
+
regex;
|
|
29
|
+
timeoutMs;
|
|
30
|
+
constructor(regex, timeoutMs = REGEX_MATCH_TIMEOUT_MS) {
|
|
31
|
+
this.regex = regex;
|
|
32
|
+
this.timeoutMs = timeoutMs;
|
|
33
|
+
}
|
|
34
|
+
countMatches(line) {
|
|
35
|
+
if (line.length === 0)
|
|
36
|
+
return 0;
|
|
37
|
+
this.regex.lastIndex = 0;
|
|
38
|
+
let count = 0;
|
|
39
|
+
const deadline = Date.now() + this.timeoutMs;
|
|
40
|
+
const maxIterations = Math.min(line.length * 2, 10000);
|
|
41
|
+
let iterations = 0;
|
|
42
|
+
let lastIndex = 0;
|
|
43
|
+
let match;
|
|
44
|
+
while ((match = this.regex.exec(line)) !== null) {
|
|
45
|
+
count++;
|
|
46
|
+
iterations++;
|
|
47
|
+
const { lastIndex: currentIndex } = this.regex;
|
|
48
|
+
if (match[0] === '') {
|
|
49
|
+
this.regex.lastIndex++;
|
|
50
|
+
}
|
|
51
|
+
if (currentIndex === lastIndex) {
|
|
52
|
+
return -1; // Infinite loop protection
|
|
53
|
+
}
|
|
54
|
+
({ lastIndex } = this.regex);
|
|
55
|
+
if (this.shouldCheckTimeout(count, iterations, deadline, maxIterations)) {
|
|
56
|
+
return -1;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return count;
|
|
60
|
+
}
|
|
61
|
+
isValid() {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
shouldCheckTimeout(count, iterations, deadline, maxIterations) {
|
|
65
|
+
const shouldCheck = (count > 0 && count % 10 === 0) ||
|
|
66
|
+
(iterations > 0 && iterations % 50 === 0);
|
|
67
|
+
return (shouldCheck && Date.now() > deadline) || iterations > maxIterations;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
export function createMatchStrategy(pattern, options) {
|
|
71
|
+
const { isLiteral, wholeWord, caseSensitive, basePath } = options;
|
|
72
|
+
if (isLiteral && !wholeWord) {
|
|
73
|
+
return new LiteralMatchStrategy(pattern, caseSensitive);
|
|
74
|
+
}
|
|
75
|
+
// For wholeWord or regex, we use RegexStrategy
|
|
76
|
+
const finalPattern = preparePattern(pattern, isLiteral, wholeWord);
|
|
77
|
+
const needsReDoSCheck = !isLiteral && !isSimpleSafePattern(finalPattern);
|
|
78
|
+
ensureSafePattern(finalPattern, pattern, basePath, needsReDoSCheck);
|
|
79
|
+
const regex = compileRegex(finalPattern, caseSensitive, basePath);
|
|
80
|
+
return new RegexMatchStrategy(regex);
|
|
81
|
+
}
|
|
82
|
+
function preparePattern(pattern, isLiteral, wholeWord) {
|
|
83
|
+
let finalPattern = pattern;
|
|
84
|
+
if (isLiteral) {
|
|
85
|
+
finalPattern = finalPattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
86
|
+
}
|
|
87
|
+
if (wholeWord) {
|
|
88
|
+
finalPattern = `\\b${finalPattern}\\b`;
|
|
89
|
+
}
|
|
90
|
+
return finalPattern;
|
|
91
|
+
}
|
|
92
|
+
function isSimpleSafePattern(pattern) {
|
|
93
|
+
if (typeof pattern !== 'string' || pattern.length === 0) {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
const nestedQuantifierPattern = /[+*?}]\s*\)\s*[+*?{]/;
|
|
97
|
+
if (nestedQuantifierPattern.test(pattern)) {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
const highRepetitionPattern = /\{(\d+)(?:,\d*)?\}/g;
|
|
101
|
+
let match;
|
|
102
|
+
while ((match = highRepetitionPattern.exec(pattern)) !== null) {
|
|
103
|
+
const countStr = match[1];
|
|
104
|
+
if (countStr === undefined)
|
|
105
|
+
continue;
|
|
106
|
+
const count = parseInt(countStr, 10);
|
|
107
|
+
if (Number.isNaN(count) || count >= 25) {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
function ensureSafePattern(finalPattern, originalPattern, basePath, needsReDoSCheck) {
|
|
114
|
+
if (!needsReDoSCheck || safeRegex(finalPattern))
|
|
115
|
+
return;
|
|
116
|
+
throw new McpError(ErrorCode.E_INVALID_PATTERN, `Potentially unsafe regular expression (ReDoS risk): ${originalPattern}. ` +
|
|
117
|
+
'Avoid patterns with nested quantifiers, overlapping alternations, or exponential backtracking.', basePath, { reason: 'ReDoS risk detected' });
|
|
118
|
+
}
|
|
119
|
+
function compileRegex(pattern, caseSensitive, basePath) {
|
|
120
|
+
try {
|
|
121
|
+
return new RegExp(pattern, caseSensitive ? 'g' : 'gi');
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
125
|
+
throw new McpError(ErrorCode.E_INVALID_PATTERN, `Invalid regular expression: ${pattern} (${message})`, basePath, { searchPattern: pattern });
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=match-strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"match-strategy.js","sourceRoot":"","sources":["../../../../src/lib/file-operations/search/match-strategy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ContentMatch, SearchContentResult } from '../../../config/types.js';
|
|
2
|
+
export interface SearchOptions {
|
|
3
|
+
maxResults: number;
|
|
4
|
+
contextLines: number;
|
|
5
|
+
deadlineMs?: number;
|
|
6
|
+
currentMatchCount: number;
|
|
7
|
+
isLiteral?: boolean;
|
|
8
|
+
searchString?: string;
|
|
9
|
+
caseSensitive?: boolean;
|
|
10
|
+
wholeWord?: boolean;
|
|
11
|
+
maxFileSize: number;
|
|
12
|
+
skipBinary: boolean;
|
|
13
|
+
searchPattern: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ScanResult {
|
|
16
|
+
matches: ContentMatch[];
|
|
17
|
+
linesSkippedDueToRegexTimeout: number;
|
|
18
|
+
fileHadMatches: boolean;
|
|
19
|
+
skippedTooLarge: boolean;
|
|
20
|
+
skippedBinary: boolean;
|
|
21
|
+
scanned: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface SearchState {
|
|
24
|
+
matches: ContentMatch[];
|
|
25
|
+
filesScanned: number;
|
|
26
|
+
filesMatched: number;
|
|
27
|
+
skippedTooLarge: number;
|
|
28
|
+
skippedBinary: number;
|
|
29
|
+
skippedInaccessible: number;
|
|
30
|
+
linesSkippedDueToRegexTimeout: number;
|
|
31
|
+
truncated: boolean;
|
|
32
|
+
stoppedReason: SearchContentResult['summary']['stoppedReason'];
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/lib/file-operations/search/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,6BAA6B,EAAE,MAAM,CAAC;IACtC,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,6BAA6B,EAAE,MAAM,CAAC;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,CAAC;CAChE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/lib/file-operations/search/types.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-content.d.ts","sourceRoot":"","sources":["../../../src/lib/file-operations/search-content.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"search-content.d.ts","sourceRoot":"","sources":["../../../src/lib/file-operations/search-content.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAGjE,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAC7B,GACL,OAAO,CAAC,mBAAmB,CAAC,CAG9B"}
|