@j0hanz/filesystem-context-mcp 1.3.0 → 1.3.2
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 +251 -504
- package/dist/__tests__/lib/file-operations/search-content-edge-cases.test.js +1 -1
- package/dist/__tests__/lib/file-operations/search-content-edge-cases.test.js.map +1 -1
- package/dist/__tests__/lib/file-operations/search-definitions-helpers.test.d.ts +2 -0
- package/dist/__tests__/lib/file-operations/search-definitions-helpers.test.d.ts.map +1 -0
- package/dist/__tests__/lib/file-operations/search-definitions-helpers.test.js +43 -0
- package/dist/__tests__/lib/file-operations/search-definitions-helpers.test.js.map +1 -0
- package/dist/__tests__/lib/file-operations/search-definitions.fixtures.d.ts +7 -0
- package/dist/__tests__/lib/file-operations/search-definitions.fixtures.d.ts.map +1 -0
- package/dist/__tests__/lib/file-operations/search-definitions.fixtures.js +113 -0
- package/dist/__tests__/lib/file-operations/search-definitions.fixtures.js.map +1 -0
- package/dist/__tests__/lib/file-operations/search-definitions.test.js +1 -112
- package/dist/__tests__/lib/file-operations/search-definitions.test.js.map +1 -1
- package/dist/__tests__/lib/file-operations/sorting.test.js +15 -40
- package/dist/__tests__/lib/file-operations/sorting.test.js.map +1 -1
- package/dist/__tests__/lib/path-validation-errors.test.js +1 -1
- package/dist/__tests__/lib/path-validation-errors.test.js.map +1 -1
- package/dist/__tests__/lib/path-validation.test.js +17 -0
- package/dist/__tests__/lib/path-validation.test.js.map +1 -1
- package/dist/config/formatting.d.ts +14 -0
- package/dist/config/formatting.d.ts.map +1 -0
- package/dist/config/formatting.js +34 -0
- package/dist/config/formatting.js.map +1 -0
- package/dist/config/types.d.ts +3 -97
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/index.js +32 -2
- package/dist/index.js.map +1 -1
- package/dist/instructions.md +151 -170
- package/dist/lib/constants.d.ts +1 -5
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +19 -15
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/errors.d.ts +0 -2
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +2 -30
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/file-operations/analyze-directory.d.ts.map +1 -1
- package/dist/lib/file-operations/analyze-directory.js +8 -1
- package/dist/lib/file-operations/analyze-directory.js.map +1 -1
- package/dist/lib/file-operations/batch-results.d.ts +2 -1
- package/dist/lib/file-operations/batch-results.d.ts.map +1 -1
- package/dist/lib/file-operations/compute-checksums.d.ts +1 -0
- package/dist/lib/file-operations/compute-checksums.d.ts.map +1 -1
- package/dist/lib/file-operations/compute-checksums.js +58 -45
- package/dist/lib/file-operations/compute-checksums.js.map +1 -1
- package/dist/lib/file-operations/directory-tree-builders.d.ts +7 -0
- package/dist/lib/file-operations/directory-tree-builders.d.ts.map +1 -0
- package/dist/lib/file-operations/directory-tree-builders.js +58 -0
- package/dist/lib/file-operations/directory-tree-builders.js.map +1 -0
- package/dist/lib/file-operations/directory-tree-helpers.d.ts +0 -5
- package/dist/lib/file-operations/directory-tree-helpers.d.ts.map +1 -1
- package/dist/lib/file-operations/directory-tree-helpers.js +21 -71
- package/dist/lib/file-operations/directory-tree-helpers.js.map +1 -1
- package/dist/lib/file-operations/directory-tree.d.ts.map +1 -1
- package/dist/lib/file-operations/directory-tree.js +2 -1
- package/dist/lib/file-operations/directory-tree.js.map +1 -1
- package/dist/lib/file-operations/file-info.d.ts +3 -1
- package/dist/lib/file-operations/file-info.d.ts.map +1 -1
- package/dist/lib/file-operations/file-info.js +16 -5
- package/dist/lib/file-operations/file-info.js.map +1 -1
- package/dist/lib/file-operations/get-multiple-file-info.d.ts +1 -1
- package/dist/lib/file-operations/get-multiple-file-info.d.ts.map +1 -1
- package/dist/lib/file-operations/get-multiple-file-info.js +6 -8
- package/dist/lib/file-operations/get-multiple-file-info.js.map +1 -1
- package/dist/lib/file-operations/list-directory-entry.d.ts.map +1 -1
- package/dist/lib/file-operations/list-directory-entry.js +5 -2
- package/dist/lib/file-operations/list-directory-entry.js.map +1 -1
- package/dist/lib/file-operations/list-directory-helpers.d.ts +10 -1
- package/dist/lib/file-operations/list-directory-helpers.d.ts.map +1 -1
- package/dist/lib/file-operations/list-directory-helpers.js +51 -31
- package/dist/lib/file-operations/list-directory-helpers.js.map +1 -1
- package/dist/lib/file-operations/list-directory.d.ts +1 -0
- package/dist/lib/file-operations/list-directory.d.ts.map +1 -1
- package/dist/lib/file-operations/list-directory.js +13 -4
- package/dist/lib/file-operations/list-directory.js.map +1 -1
- package/dist/lib/file-operations/read-media-file.d.ts.map +1 -1
- package/dist/lib/file-operations/read-media-file.js +5 -1
- package/dist/lib/file-operations/read-media-file.js.map +1 -1
- package/dist/lib/file-operations/read-multiple-files.d.ts +8 -0
- package/dist/lib/file-operations/read-multiple-files.d.ts.map +1 -1
- package/dist/lib/file-operations/read-multiple-files.js +47 -18
- package/dist/lib/file-operations/read-multiple-files.js.map +1 -1
- package/dist/lib/file-operations/search/context-manager.d.ts +2 -0
- package/dist/lib/file-operations/search/context-manager.d.ts.map +1 -1
- package/dist/lib/file-operations/search/context-manager.js +22 -8
- package/dist/lib/file-operations/search/context-manager.js.map +1 -1
- package/dist/lib/file-operations/search/engine-stream.d.ts +1 -1
- package/dist/lib/file-operations/search/engine-stream.d.ts.map +1 -1
- package/dist/lib/file-operations/search/engine-stream.js +102 -9
- package/dist/lib/file-operations/search/engine-stream.js.map +1 -1
- package/dist/lib/file-operations/search/engine.d.ts.map +1 -1
- package/dist/lib/file-operations/search/engine.js +42 -5
- package/dist/lib/file-operations/search/engine.js.map +1 -1
- package/dist/lib/file-operations/search/file-processor.d.ts.map +1 -1
- package/dist/lib/file-operations/search/file-processor.js +102 -55
- package/dist/lib/file-operations/search/file-processor.js.map +1 -1
- package/dist/lib/file-operations/search/match-strategy.d.ts.map +1 -1
- package/dist/lib/file-operations/search/match-strategy.js +2 -1
- package/dist/lib/file-operations/search/match-strategy.js.map +1 -1
- package/dist/lib/file-operations/search/types.d.ts +3 -0
- package/dist/lib/file-operations/search/types.d.ts.map +1 -1
- package/dist/lib/file-operations/search-definitions/matchers.d.ts +12 -0
- package/dist/lib/file-operations/search-definitions/matchers.d.ts.map +1 -0
- package/dist/lib/file-operations/search-definitions/matchers.js +122 -0
- package/dist/lib/file-operations/search-definitions/matchers.js.map +1 -0
- package/dist/lib/file-operations/search-definitions/patterns.d.ts +14 -0
- package/dist/lib/file-operations/search-definitions/patterns.d.ts.map +1 -0
- package/dist/lib/file-operations/search-definitions/patterns.js +83 -0
- package/dist/lib/file-operations/search-definitions/patterns.js.map +1 -0
- package/dist/lib/file-operations/search-definitions.d.ts.map +1 -1
- package/dist/lib/file-operations/search-definitions.js +3 -208
- package/dist/lib/file-operations/search-definitions.js.map +1 -1
- package/dist/lib/file-operations/search-files-helpers.d.ts +2 -2
- package/dist/lib/file-operations/search-files-helpers.d.ts.map +1 -1
- package/dist/lib/file-operations/search-files-helpers.js +102 -14
- package/dist/lib/file-operations/search-files-helpers.js.map +1 -1
- package/dist/lib/file-operations/search-files-options.d.ts +4 -2
- package/dist/lib/file-operations/search-files-options.d.ts.map +1 -1
- package/dist/lib/file-operations/search-files-options.js.map +1 -1
- package/dist/lib/file-operations/search-files.d.ts.map +1 -1
- package/dist/lib/file-operations/search-files.js +7 -2
- package/dist/lib/file-operations/search-files.js.map +1 -1
- package/dist/lib/file-operations/sorting.d.ts.map +1 -1
- package/dist/lib/file-operations/sorting.js +39 -14
- package/dist/lib/file-operations/sorting.js.map +1 -1
- package/dist/lib/file-operations.d.ts +0 -5
- package/dist/lib/file-operations.d.ts.map +1 -1
- package/dist/lib/file-operations.js +0 -5
- package/dist/lib/file-operations.js.map +1 -1
- package/dist/lib/fs-helpers/abort.d.ts +3 -0
- package/dist/lib/fs-helpers/abort.d.ts.map +1 -0
- package/dist/lib/fs-helpers/abort.js +15 -0
- package/dist/lib/fs-helpers/abort.js.map +1 -0
- package/dist/lib/fs-helpers/concurrency.d.ts +1 -1
- package/dist/lib/fs-helpers/concurrency.d.ts.map +1 -1
- package/dist/lib/fs-helpers/concurrency.js +54 -6
- package/dist/lib/fs-helpers/concurrency.js.map +1 -1
- package/dist/lib/fs-helpers/readers/head-file.d.ts +1 -1
- package/dist/lib/fs-helpers/readers/head-file.d.ts.map +1 -1
- package/dist/lib/fs-helpers/readers/head-file.js +7 -4
- package/dist/lib/fs-helpers/readers/head-file.js.map +1 -1
- package/dist/lib/fs-helpers/readers/line-range.d.ts +1 -1
- package/dist/lib/fs-helpers/readers/line-range.d.ts.map +1 -1
- package/dist/lib/fs-helpers/readers/line-range.js +17 -3
- package/dist/lib/fs-helpers/readers/line-range.js.map +1 -1
- package/dist/lib/fs-helpers/readers/read-buffer.d.ts +2 -0
- package/dist/lib/fs-helpers/readers/read-buffer.d.ts.map +1 -0
- package/dist/lib/fs-helpers/readers/read-buffer.js +64 -0
- package/dist/lib/fs-helpers/readers/read-buffer.js.map +1 -0
- package/dist/lib/fs-helpers/readers/read-file-content.d.ts +11 -1
- package/dist/lib/fs-helpers/readers/read-file-content.d.ts.map +1 -1
- package/dist/lib/fs-helpers/readers/read-file-content.js +33 -9
- package/dist/lib/fs-helpers/readers/read-file-content.js.map +1 -1
- package/dist/lib/fs-helpers/readers/read-file.d.ts +11 -0
- package/dist/lib/fs-helpers/readers/read-file.d.ts.map +1 -1
- package/dist/lib/fs-helpers/readers/read-file.js +52 -15
- package/dist/lib/fs-helpers/readers/read-file.js.map +1 -1
- package/dist/lib/fs-helpers/readers/tail-file.d.ts +1 -1
- package/dist/lib/fs-helpers/readers/tail-file.d.ts.map +1 -1
- package/dist/lib/fs-helpers/readers/tail-file.js +7 -4
- package/dist/lib/fs-helpers/readers/tail-file.js.map +1 -1
- package/dist/lib/fs-helpers/readers.d.ts +1 -1
- package/dist/lib/fs-helpers/readers.d.ts.map +1 -1
- package/dist/lib/fs-helpers/readers.js +1 -1
- package/dist/lib/fs-helpers/readers.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/lib/path-utils.d.ts +1 -0
- package/dist/lib/path-utils.d.ts.map +1 -1
- package/dist/lib/path-utils.js +12 -0
- package/dist/lib/path-utils.js.map +1 -1
- package/dist/lib/path-validation/allowed-directories.d.ts.map +1 -1
- package/dist/lib/path-validation/allowed-directories.js +2 -9
- package/dist/lib/path-validation/allowed-directories.js.map +1 -1
- package/dist/lib/path-validation/errors.js +2 -2
- package/dist/lib/path-validation/errors.js.map +1 -1
- package/dist/lib/path-validation/validators.d.ts.map +1 -1
- package/dist/lib/path-validation/validators.js +3 -1
- package/dist/lib/path-validation/validators.js.map +1 -1
- package/dist/schemas/common.d.ts +0 -18
- package/dist/schemas/common.d.ts.map +1 -1
- package/dist/schemas/common.js +0 -10
- package/dist/schemas/common.js.map +1 -1
- package/dist/schemas/index.d.ts +2 -2
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +2 -2
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/input-helpers.d.ts +1 -4
- package/dist/schemas/input-helpers.d.ts.map +1 -1
- package/dist/schemas/input-helpers.js +9 -33
- package/dist/schemas/input-helpers.js.map +1 -1
- package/dist/schemas/inputs/checksums.d.ts +0 -2
- package/dist/schemas/inputs/checksums.d.ts.map +1 -1
- package/dist/schemas/inputs/checksums.js +2 -7
- package/dist/schemas/inputs/checksums.js.map +1 -1
- package/dist/schemas/inputs/directory.d.ts +0 -16
- package/dist/schemas/inputs/directory.d.ts.map +1 -1
- package/dist/schemas/inputs/directory.js +2 -44
- package/dist/schemas/inputs/directory.js.map +1 -1
- package/dist/schemas/inputs/read.d.ts +0 -4
- package/dist/schemas/inputs/read.d.ts.map +1 -1
- package/dist/schemas/inputs/read.js +0 -15
- package/dist/schemas/inputs/read.js.map +1 -1
- package/dist/schemas/inputs/search.d.ts +1 -12
- package/dist/schemas/inputs/search.d.ts.map +1 -1
- package/dist/schemas/inputs/search.js +4 -30
- package/dist/schemas/inputs/search.js.map +1 -1
- package/dist/schemas/inputs.d.ts +3 -4
- package/dist/schemas/inputs.d.ts.map +1 -1
- package/dist/schemas/inputs.js +3 -4
- package/dist/schemas/inputs.js.map +1 -1
- package/dist/schemas/output-helpers.d.ts +59 -0
- package/dist/schemas/output-helpers.d.ts.map +1 -1
- package/dist/schemas/output-helpers.js +31 -0
- package/dist/schemas/output-helpers.js.map +1 -1
- package/dist/schemas/outputs/checksums.d.ts +4 -4
- package/dist/schemas/outputs/checksums.d.ts.map +1 -1
- package/dist/schemas/outputs/checksums.js +2 -7
- package/dist/schemas/outputs/checksums.js.map +1 -1
- package/dist/schemas/outputs/directory.d.ts +68 -230
- package/dist/schemas/outputs/directory.d.ts.map +1 -1
- package/dist/schemas/outputs/directory.js +14 -32
- package/dist/schemas/outputs/directory.js.map +1 -1
- package/dist/schemas/outputs/file-info.d.ts +14 -14
- package/dist/schemas/outputs/file-info.d.ts.map +1 -1
- package/dist/schemas/outputs/file-info.js +4 -31
- package/dist/schemas/outputs/file-info.js.map +1 -1
- package/dist/schemas/outputs/read.d.ts +141 -46
- package/dist/schemas/outputs/read.d.ts.map +1 -1
- package/dist/schemas/outputs/read.js +35 -12
- package/dist/schemas/outputs/read.js.map +1 -1
- package/dist/schemas/outputs/search.d.ts +134 -124
- package/dist/schemas/outputs/search.d.ts.map +1 -1
- package/dist/schemas/outputs/search.js +33 -35
- package/dist/schemas/outputs/search.js.map +1 -1
- package/dist/schemas/outputs.d.ts +3 -4
- package/dist/schemas/outputs.d.ts.map +1 -1
- package/dist/schemas/outputs.js +3 -4
- package/dist/schemas/outputs.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +4 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/analyze-directory.d.ts.map +1 -1
- package/dist/tools/analyze-directory.js +26 -28
- package/dist/tools/analyze-directory.js.map +1 -1
- package/dist/tools/compute-checksums.d.ts.map +1 -1
- package/dist/tools/compute-checksums.js +13 -21
- package/dist/tools/compute-checksums.js.map +1 -1
- package/dist/tools/directory-tree.d.ts.map +1 -1
- package/dist/tools/directory-tree.js +11 -9
- package/dist/tools/directory-tree.js.map +1 -1
- package/dist/tools/get-file-info.d.ts.map +1 -1
- package/dist/tools/get-file-info.js +8 -44
- package/dist/tools/get-file-info.js.map +1 -1
- package/dist/tools/get-multiple-file-info.d.ts.map +1 -1
- package/dist/tools/get-multiple-file-info.js +13 -55
- package/dist/tools/get-multiple-file-info.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +0 -10
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/list-allowed-dirs.d.ts.map +1 -1
- package/dist/tools/list-allowed-dirs.js +37 -31
- package/dist/tools/list-allowed-dirs.js.map +1 -1
- package/dist/tools/list-directory.d.ts.map +1 -1
- package/dist/tools/list-directory.js +83 -83
- package/dist/tools/list-directory.js.map +1 -1
- package/dist/tools/read-file.d.ts.map +1 -1
- package/dist/tools/read-file.js +66 -43
- package/dist/tools/read-file.js.map +1 -1
- package/dist/tools/read-media-file.d.ts.map +1 -1
- package/dist/tools/read-media-file.js +8 -6
- package/dist/tools/read-media-file.js.map +1 -1
- package/dist/tools/read-multiple-files.d.ts.map +1 -1
- package/dist/tools/read-multiple-files.js +64 -25
- package/dist/tools/read-multiple-files.js.map +1 -1
- package/dist/tools/search-content.d.ts.map +1 -1
- package/dist/tools/search-content.js +14 -16
- package/dist/tools/search-content.js.map +1 -1
- package/dist/tools/search-definitions.d.ts.map +1 -1
- package/dist/tools/search-definitions.js +11 -8
- package/dist/tools/search-definitions.js.map +1 -1
- package/dist/tools/search-files.d.ts.map +1 -1
- package/dist/tools/search-files.js +61 -45
- package/dist/tools/search-files.js.map +1 -1
- package/dist/tools/shared/abort.d.ts +5 -0
- package/dist/tools/shared/abort.d.ts.map +1 -0
- package/dist/tools/shared/abort.js +41 -0
- package/dist/tools/shared/abort.js.map +1 -0
- package/dist/tools/shared/file-info.d.ts +17 -0
- package/dist/tools/shared/file-info.d.ts.map +1 -0
- package/dist/tools/shared/file-info.js +40 -0
- package/dist/tools/shared/file-info.js.map +1 -0
- package/dist/tools/shared/formatting.d.ts +5 -0
- package/dist/tools/shared/formatting.d.ts.map +1 -1
- package/dist/tools/shared/formatting.js +21 -1
- package/dist/tools/shared/formatting.js.map +1 -1
- package/dist/tools/shared/read-range.d.ts +7 -0
- package/dist/tools/shared/read-range.d.ts.map +1 -0
- package/dist/tools/shared/read-range.js +22 -0
- package/dist/tools/shared/read-range.js.map +1 -0
- package/dist/tools/shared/search-formatting.d.ts.map +1 -1
- package/dist/tools/shared/search-formatting.js +53 -28
- package/dist/tools/shared/search-formatting.js.map +1 -1
- package/dist/tools/tool-response.d.ts +22 -0
- package/dist/tools/tool-response.d.ts.map +1 -1
- package/dist/tools/tool-response.js +30 -0
- package/dist/tools/tool-response.js.map +1 -1
- package/package.json +2 -1
|
@@ -1,24 +1,49 @@
|
|
|
1
1
|
import * as path from 'node:path';
|
|
2
|
+
function compareString(a, b) {
|
|
3
|
+
return (a ?? '').localeCompare(b ?? '');
|
|
4
|
+
}
|
|
5
|
+
function compareNameThenPath(a, b) {
|
|
6
|
+
const nameCompare = compareString(a.name, b.name);
|
|
7
|
+
if (nameCompare !== 0)
|
|
8
|
+
return nameCompare;
|
|
9
|
+
return compareString(a.path, b.path);
|
|
10
|
+
}
|
|
11
|
+
function comparePathThenName(a, b) {
|
|
12
|
+
const pathCompare = compareString(a.path, b.path);
|
|
13
|
+
if (pathCompare !== 0)
|
|
14
|
+
return pathCompare;
|
|
15
|
+
return compareString(a.name, b.name);
|
|
16
|
+
}
|
|
17
|
+
function compareBaseNameThenPath(a, b) {
|
|
18
|
+
const baseCompare = compareString(path.basename(a.path ?? ''), path.basename(b.path ?? ''));
|
|
19
|
+
if (baseCompare !== 0)
|
|
20
|
+
return baseCompare;
|
|
21
|
+
return compareString(a.path, b.path);
|
|
22
|
+
}
|
|
23
|
+
function compareOptionalNumberDesc(left, right, tieBreak) {
|
|
24
|
+
const diff = (right ?? 0) - (left ?? 0);
|
|
25
|
+
if (diff !== 0)
|
|
26
|
+
return diff;
|
|
27
|
+
return tieBreak();
|
|
28
|
+
}
|
|
29
|
+
function compareTypeThenName(a, b) {
|
|
30
|
+
if (a.type === b.type)
|
|
31
|
+
return compareNameThenPath(a, b);
|
|
32
|
+
return a.type === 'directory' ? -1 : 1;
|
|
33
|
+
}
|
|
2
34
|
const SORT_COMPARATORS = {
|
|
3
|
-
size: (a, b) => (b.size
|
|
4
|
-
modified: (a, b) => (
|
|
5
|
-
type: (a, b) =>
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
return (a.name ?? '').localeCompare(b.name ?? '');
|
|
9
|
-
},
|
|
10
|
-
path: (a, b) => (a.path ?? '').localeCompare(b.path ?? ''),
|
|
11
|
-
name: (a, b) => (a.name ?? '').localeCompare(b.name ?? ''),
|
|
35
|
+
size: (a, b) => compareOptionalNumberDesc(a.size, b.size, () => compareNameThenPath(a, b)),
|
|
36
|
+
modified: (a, b) => compareOptionalNumberDesc(a.modified?.getTime(), b.modified?.getTime(), () => compareNameThenPath(a, b)),
|
|
37
|
+
type: (a, b) => compareTypeThenName(a, b),
|
|
38
|
+
path: (a, b) => comparePathThenName(a, b),
|
|
39
|
+
name: (a, b) => compareNameThenPath(a, b),
|
|
12
40
|
};
|
|
13
41
|
export function sortByField(items, sortBy) {
|
|
14
42
|
const comparator = SORT_COMPARATORS[sortBy];
|
|
15
43
|
items.sort(comparator);
|
|
16
44
|
}
|
|
17
45
|
export function sortSearchResults(results, sortBy) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
sortByField(results, sortBy);
|
|
46
|
+
const comparator = sortBy === 'name' ? compareBaseNameThenPath : SORT_COMPARATORS[sortBy];
|
|
47
|
+
results.sort(comparator);
|
|
23
48
|
}
|
|
24
49
|
//# sourceMappingURL=sorting.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sorting.js","sourceRoot":"","sources":["../../../src/lib/file-operations/sorting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAclC,
|
|
1
|
+
{"version":3,"file":"sorting.js","sourceRoot":"","sources":["../../../src/lib/file-operations/sorting.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,8 @@
|
|
|
1
|
-
export { analyzeDirectory } from './file-operations/analyze-directory.js';
|
|
2
|
-
export { computeChecksums } from './file-operations/compute-checksums.js';
|
|
3
|
-
export { getDirectoryTree } from './file-operations/directory-tree.js';
|
|
4
1
|
export { getFileInfo } from './file-operations/file-info.js';
|
|
5
2
|
export { getMultipleFileInfo } from './file-operations/get-multiple-file-info.js';
|
|
6
3
|
export { listDirectory } from './file-operations/list-directory.js';
|
|
7
|
-
export { readMediaFile } from './file-operations/read-media-file.js';
|
|
8
4
|
export { readMultipleFiles } from './file-operations/read-multiple-files.js';
|
|
9
5
|
export { searchContent } from './file-operations/search-content.js';
|
|
10
|
-
export { searchDefinitions } from './file-operations/search-definitions.js';
|
|
11
6
|
export { searchFiles } from './file-operations/search-files.js';
|
|
12
7
|
export { readFile } from './fs-helpers.js';
|
|
13
8
|
//# sourceMappingURL=file-operations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-operations.d.ts","sourceRoot":"","sources":["../../src/lib/file-operations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"file-operations.d.ts","sourceRoot":"","sources":["../../src/lib/file-operations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -1,13 +1,8 @@
|
|
|
1
|
-
export { analyzeDirectory } from './file-operations/analyze-directory.js';
|
|
2
|
-
export { computeChecksums } from './file-operations/compute-checksums.js';
|
|
3
|
-
export { getDirectoryTree } from './file-operations/directory-tree.js';
|
|
4
1
|
export { getFileInfo } from './file-operations/file-info.js';
|
|
5
2
|
export { getMultipleFileInfo } from './file-operations/get-multiple-file-info.js';
|
|
6
3
|
export { listDirectory } from './file-operations/list-directory.js';
|
|
7
|
-
export { readMediaFile } from './file-operations/read-media-file.js';
|
|
8
4
|
export { readMultipleFiles } from './file-operations/read-multiple-files.js';
|
|
9
5
|
export { searchContent } from './file-operations/search-content.js';
|
|
10
|
-
export { searchDefinitions } from './file-operations/search-definitions.js';
|
|
11
6
|
export { searchFiles } from './file-operations/search-files.js';
|
|
12
7
|
export { readFile } from './fs-helpers.js';
|
|
13
8
|
//# sourceMappingURL=file-operations.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-operations.js","sourceRoot":"","sources":["../../src/lib/file-operations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"file-operations.js","sourceRoot":"","sources":["../../src/lib/file-operations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abort.d.ts","sourceRoot":"","sources":["../../../src/lib/fs-helpers/abort.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,CAAC,OAAO,SAAsB,GAAG,KAAK,CAIrE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAO7E"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export function createAbortError(message = 'Operation aborted') {
|
|
2
|
+
const error = new Error(message);
|
|
3
|
+
error.name = 'AbortError';
|
|
4
|
+
return error;
|
|
5
|
+
}
|
|
6
|
+
export function assertNotAborted(signal, message) {
|
|
7
|
+
if (!signal?.aborted)
|
|
8
|
+
return;
|
|
9
|
+
const { reason } = signal;
|
|
10
|
+
if (reason instanceof Error) {
|
|
11
|
+
throw reason;
|
|
12
|
+
}
|
|
13
|
+
throw createAbortError(message);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=abort.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abort.js","sourceRoot":"","sources":["../../../src/lib/fs-helpers/abort.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,gBAAgB,CAAC,OAAO,GAAG,mBAAmB;IAC5D,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,KAAK,CAAC,IAAI,GAAG,YAAY,CAAC;IAC1B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAoB,EAAE,OAAgB;IACrE,IAAI,CAAC,MAAM,EAAE,OAAO;QAAE,OAAO;IAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,MAA8B,CAAC;IAClD,IAAI,MAAM,YAAY,KAAK,EAAE,CAAC;QAC5B,MAAM,MAAM,CAAC;IACf,CAAC;IACD,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -6,6 +6,6 @@ interface ParallelResult<R> {
|
|
|
6
6
|
}[];
|
|
7
7
|
}
|
|
8
8
|
export declare function runWorkQueue<T>(initialItems: T[], worker: (item: T, enqueue: (item: T) => void) => Promise<void>, concurrency: number, signal?: AbortSignal): Promise<void>;
|
|
9
|
-
export declare function processInParallel<T, R>(items: T[], processor: (item: T) => Promise<R>, concurrency?: number): Promise<ParallelResult<R>>;
|
|
9
|
+
export declare function processInParallel<T, R>(items: T[], processor: (item: T) => Promise<R>, concurrency?: number, signal?: AbortSignal): Promise<ParallelResult<R>>;
|
|
10
10
|
export {};
|
|
11
11
|
//# sourceMappingURL=concurrency.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"concurrency.d.ts","sourceRoot":"","sources":["../../../src/lib/fs-helpers/concurrency.ts"],"names":[],"mappings":"AAEA,UAAU,cAAc,CAAC,CAAC;IACxB,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,EAAE,CAAC;CAC3C;
|
|
1
|
+
{"version":3,"file":"concurrency.d.ts","sourceRoot":"","sources":["../../../src/lib/fs-helpers/concurrency.ts"],"names":[],"mappings":"AAEA,UAAU,cAAc,CAAC,CAAC;IACxB,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,EAAE,CAAC;CAC3C;AAmID,wBAAsB,YAAY,CAAC,CAAC,EAClC,YAAY,EAAE,CAAC,EAAE,EACjB,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,EAC9D,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAsCf;AAED,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAC1C,KAAK,EAAE,CAAC,EAAE,EACV,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAClC,WAAW,GAAE,MAA6B,EAC1C,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAyB5B"}
|
|
@@ -7,13 +7,30 @@ function createDonePromise(state) {
|
|
|
7
7
|
function resolveIfDone(state) {
|
|
8
8
|
if (state.inFlight !== 0)
|
|
9
9
|
return;
|
|
10
|
-
if (state
|
|
10
|
+
if (queueSize(state) === 0 || state.aborted) {
|
|
11
11
|
state.doneResolve?.();
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
|
+
function createAbortError() {
|
|
15
|
+
const error = new Error('Operation aborted');
|
|
16
|
+
error.name = 'AbortError';
|
|
17
|
+
return error;
|
|
18
|
+
}
|
|
19
|
+
function recordError(state, error) {
|
|
20
|
+
const normalized = error instanceof Error ? error : new Error(String(error));
|
|
21
|
+
state.errors.push(normalized);
|
|
22
|
+
if (!state.aborted) {
|
|
23
|
+
state.aborted = true;
|
|
24
|
+
state.abortReason = normalized;
|
|
25
|
+
}
|
|
26
|
+
resolveIfDone(state);
|
|
27
|
+
}
|
|
14
28
|
function createAbortHandler(state) {
|
|
15
29
|
return () => {
|
|
16
|
-
state.aborted
|
|
30
|
+
if (!state.aborted) {
|
|
31
|
+
state.aborted = true;
|
|
32
|
+
state.abortReason = createAbortError();
|
|
33
|
+
}
|
|
17
34
|
resolveIfDone(state);
|
|
18
35
|
};
|
|
19
36
|
}
|
|
@@ -22,6 +39,17 @@ function enqueueItem(state, item) {
|
|
|
22
39
|
return;
|
|
23
40
|
state.queue.push(item);
|
|
24
41
|
}
|
|
42
|
+
function queueSize(state) {
|
|
43
|
+
return state.queue.length - state.head;
|
|
44
|
+
}
|
|
45
|
+
function compactQueueIfNeeded(state) {
|
|
46
|
+
if (state.head < 1024)
|
|
47
|
+
return;
|
|
48
|
+
if (state.head * 2 < state.queue.length)
|
|
49
|
+
return;
|
|
50
|
+
state.queue.splice(0, state.head);
|
|
51
|
+
state.head = 0;
|
|
52
|
+
}
|
|
25
53
|
function handleWorkerCompletion(state) {
|
|
26
54
|
state.inFlight--;
|
|
27
55
|
resolveIfDone(state);
|
|
@@ -35,6 +63,7 @@ function startWorker(state, item, worker, maybeStartNext) {
|
|
|
35
63
|
})
|
|
36
64
|
.catch((error) => {
|
|
37
65
|
console.error('[runWorkQueue] Worker error:', error instanceof Error ? error.message : String(error));
|
|
66
|
+
recordError(state, error);
|
|
38
67
|
})
|
|
39
68
|
.finally(() => {
|
|
40
69
|
handleWorkerCompletion(state);
|
|
@@ -45,6 +74,7 @@ function startWorker(state, item, worker, maybeStartNext) {
|
|
|
45
74
|
}
|
|
46
75
|
catch (error) {
|
|
47
76
|
console.error('[runWorkQueue] Worker synchronous error:', error instanceof Error ? error.message : String(error));
|
|
77
|
+
recordError(state, error);
|
|
48
78
|
handleWorkerCompletion(state);
|
|
49
79
|
if (!state.aborted) {
|
|
50
80
|
maybeStartNext();
|
|
@@ -55,8 +85,10 @@ function createQueueProcessor(state, worker, concurrency) {
|
|
|
55
85
|
const maybeStartNext = () => {
|
|
56
86
|
if (state.aborted)
|
|
57
87
|
return;
|
|
58
|
-
while (state.inFlight < concurrency && state
|
|
59
|
-
const next = state.queue.
|
|
88
|
+
while (state.inFlight < concurrency && queueSize(state) > 0) {
|
|
89
|
+
const next = state.queue[state.head];
|
|
90
|
+
state.head += 1;
|
|
91
|
+
compactQueueIfNeeded(state);
|
|
60
92
|
if (next === undefined)
|
|
61
93
|
break;
|
|
62
94
|
startWorker(state, next, worker, maybeStartNext);
|
|
@@ -67,11 +99,17 @@ function createQueueProcessor(state, worker, concurrency) {
|
|
|
67
99
|
export async function runWorkQueue(initialItems, worker, concurrency, signal) {
|
|
68
100
|
const state = {
|
|
69
101
|
queue: [...initialItems],
|
|
102
|
+
head: 0,
|
|
70
103
|
inFlight: 0,
|
|
71
104
|
aborted: false,
|
|
105
|
+
errors: [],
|
|
72
106
|
};
|
|
73
107
|
const donePromise = createDonePromise(state);
|
|
74
108
|
const onAbort = createAbortHandler(state);
|
|
109
|
+
if (signal?.aborted) {
|
|
110
|
+
state.aborted = true;
|
|
111
|
+
state.abortReason = createAbortError();
|
|
112
|
+
}
|
|
75
113
|
signal?.addEventListener('abort', onAbort, { once: true });
|
|
76
114
|
const maybeStartNext = createQueueProcessor(state, worker, concurrency);
|
|
77
115
|
maybeStartNext();
|
|
@@ -82,8 +120,18 @@ export async function runWorkQueue(initialItems, worker, concurrency, signal) {
|
|
|
82
120
|
finally {
|
|
83
121
|
signal?.removeEventListener('abort', onAbort);
|
|
84
122
|
}
|
|
123
|
+
if (state.errors.length === 1) {
|
|
124
|
+
const error = state.errors[0];
|
|
125
|
+
throw error ?? new Error('Work queue failed');
|
|
126
|
+
}
|
|
127
|
+
if (state.errors.length > 1) {
|
|
128
|
+
throw new AggregateError(state.errors, 'Work queue failed');
|
|
129
|
+
}
|
|
130
|
+
if (state.abortReason) {
|
|
131
|
+
throw state.abortReason;
|
|
132
|
+
}
|
|
85
133
|
}
|
|
86
|
-
export async function processInParallel(items, processor, concurrency = PARALLEL_CONCURRENCY) {
|
|
134
|
+
export async function processInParallel(items, processor, concurrency = PARALLEL_CONCURRENCY, signal) {
|
|
87
135
|
const results = [];
|
|
88
136
|
const errors = [];
|
|
89
137
|
if (items.length === 0) {
|
|
@@ -98,7 +146,7 @@ export async function processInParallel(items, processor, concurrency = PARALLEL
|
|
|
98
146
|
const error = reason instanceof Error ? reason : new Error(String(reason));
|
|
99
147
|
errors.push({ index, error });
|
|
100
148
|
}
|
|
101
|
-
}, concurrency);
|
|
149
|
+
}, concurrency, signal);
|
|
102
150
|
return { results, errors };
|
|
103
151
|
}
|
|
104
152
|
//# sourceMappingURL=concurrency.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"concurrency.js","sourceRoot":"","sources":["../../../src/lib/fs-helpers/concurrency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"concurrency.js","sourceRoot":"","sources":["../../../src/lib/fs-helpers/concurrency.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function headFile(filePath: string, numLines: number, encoding?: BufferEncoding, maxBytesRead?: number): Promise<string>;
|
|
1
|
+
export declare function headFile(filePath: string, numLines: number, encoding?: BufferEncoding, maxBytesRead?: number, signal?: AbortSignal): Promise<string>;
|
|
2
2
|
//# sourceMappingURL=head-file.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"head-file.d.ts","sourceRoot":"","sources":["../../../../src/lib/fs-helpers/readers/head-file.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"head-file.d.ts","sourceRoot":"","sources":["../../../../src/lib/fs-helpers/readers/head-file.ts"],"names":[],"mappings":"AAsFA,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,cAAwB,EAClC,YAAY,CAAC,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,CAYjB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as fs from 'node:fs/promises';
|
|
2
2
|
import { StringDecoder } from 'node:string_decoder';
|
|
3
3
|
import { validateExistingPath } from '../../path-validation.js';
|
|
4
|
+
import { assertNotAborted } from '../abort.js';
|
|
4
5
|
const CHUNK_SIZE = 64 * 1024;
|
|
5
6
|
function initHeadState(encoding) {
|
|
6
7
|
return {
|
|
@@ -42,9 +43,10 @@ function flushRemainingBuffer(state, numLines) {
|
|
|
42
43
|
break;
|
|
43
44
|
}
|
|
44
45
|
}
|
|
45
|
-
async function readHeadChunks(handle, state, numLines, maxBytesRead) {
|
|
46
|
+
async function readHeadChunks(handle, state, numLines, maxBytesRead, signal) {
|
|
46
47
|
const chunk = Buffer.alloc(CHUNK_SIZE);
|
|
47
48
|
while (state.lines.length < numLines) {
|
|
49
|
+
assertNotAborted(signal);
|
|
48
50
|
if (maxBytesRead !== undefined && state.bytesRead >= maxBytesRead)
|
|
49
51
|
break;
|
|
50
52
|
const maxChunk = maxChunkSize(maxBytesRead, state.bytesRead);
|
|
@@ -58,16 +60,17 @@ async function readHeadChunks(handle, state, numLines, maxBytesRead) {
|
|
|
58
60
|
state.buffer += state.decoder.end();
|
|
59
61
|
flushRemainingBuffer(state, numLines);
|
|
60
62
|
}
|
|
61
|
-
export async function headFile(filePath, numLines, encoding = 'utf-8', maxBytesRead) {
|
|
63
|
+
export async function headFile(filePath, numLines, encoding = 'utf-8', maxBytesRead, signal) {
|
|
64
|
+
assertNotAborted(signal);
|
|
62
65
|
const validPath = await validateExistingPath(filePath);
|
|
63
66
|
const handle = await fs.open(validPath, 'r');
|
|
64
67
|
try {
|
|
65
68
|
const state = initHeadState(encoding);
|
|
66
|
-
await readHeadChunks(handle, state, numLines, maxBytesRead);
|
|
69
|
+
await readHeadChunks(handle, state, numLines, maxBytesRead, signal);
|
|
67
70
|
return state.lines.slice(0, numLines).join('\n');
|
|
68
71
|
}
|
|
69
72
|
finally {
|
|
70
|
-
await handle.close()
|
|
73
|
+
await handle.close();
|
|
71
74
|
}
|
|
72
75
|
}
|
|
73
76
|
//# sourceMappingURL=head-file.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"head-file.js","sourceRoot":"","sources":["../../../../src/lib/fs-helpers/readers/head-file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"head-file.js","sourceRoot":"","sources":["../../../../src/lib/fs-helpers/readers/head-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,6 @@ interface LineRangeResult {
|
|
|
4
4
|
totalLinesScanned: number;
|
|
5
5
|
hasMoreLines: boolean;
|
|
6
6
|
}
|
|
7
|
-
export declare function readLineRange(filePath: string, startLine: number, endLine: number, encoding: BufferEncoding, maxBytesRead?: number): Promise<LineRangeResult>;
|
|
7
|
+
export declare function readLineRange(filePath: string, startLine: number, endLine: number, encoding: BufferEncoding, maxBytesRead?: number, signal?: AbortSignal): Promise<LineRangeResult>;
|
|
8
8
|
export {};
|
|
9
9
|
//# sourceMappingURL=line-range.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"line-range.d.ts","sourceRoot":"","sources":["../../../../src/lib/fs-helpers/readers/line-range.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"line-range.d.ts","sourceRoot":"","sources":["../../../../src/lib/fs-helpers/readers/line-range.ts"],"names":[],"mappings":"AAWA,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;CACvB;AAyDD,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,cAAc,EACxB,YAAY,CAAC,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,eAAe,CAAC,CAkC1B"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as readline from 'node:readline';
|
|
2
2
|
import { createReadStream } from 'node:fs';
|
|
3
|
+
import { assertNotAborted, createAbortError } from '../abort.js';
|
|
3
4
|
function initLineRangeState() {
|
|
4
5
|
return { lines: [], lineNumber: 0, hasMoreLines: false };
|
|
5
6
|
}
|
|
@@ -14,8 +15,10 @@ function shouldStopLineRange(state, endLine, maxBytesRead, bytesRead) {
|
|
|
14
15
|
}
|
|
15
16
|
return false;
|
|
16
17
|
}
|
|
17
|
-
async function scanLineRange(rl, state, startLine, endLine, maxBytesRead, getBytesRead) {
|
|
18
|
+
async function scanLineRange(rl, state, startLine, endLine, maxBytesRead, getBytesRead, signal) {
|
|
18
19
|
for await (const line of rl) {
|
|
20
|
+
if (signal?.aborted)
|
|
21
|
+
break;
|
|
19
22
|
state.lineNumber++;
|
|
20
23
|
if (state.lineNumber >= startLine && state.lineNumber <= endLine) {
|
|
21
24
|
state.lines.push(line);
|
|
@@ -33,18 +36,29 @@ function buildLineRangeResult(state) {
|
|
|
33
36
|
hasMoreLines: state.hasMoreLines,
|
|
34
37
|
};
|
|
35
38
|
}
|
|
36
|
-
export async function readLineRange(filePath, startLine, endLine, encoding, maxBytesRead) {
|
|
39
|
+
export async function readLineRange(filePath, startLine, endLine, encoding, maxBytesRead, signal) {
|
|
40
|
+
assertNotAborted(signal);
|
|
37
41
|
const fileStream = createReadStream(filePath, { encoding });
|
|
38
42
|
const rl = readline.createInterface({
|
|
39
43
|
input: fileStream,
|
|
40
44
|
crlfDelay: Infinity,
|
|
41
45
|
});
|
|
42
46
|
const state = initLineRangeState();
|
|
47
|
+
const onAbort = () => {
|
|
48
|
+
fileStream.destroy(createAbortError());
|
|
49
|
+
};
|
|
50
|
+
if (signal?.aborted) {
|
|
51
|
+
onAbort();
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
signal?.addEventListener('abort', onAbort, { once: true });
|
|
55
|
+
}
|
|
43
56
|
try {
|
|
44
|
-
await scanLineRange(rl, state, startLine, endLine, maxBytesRead, () => fileStream.bytesRead);
|
|
57
|
+
await scanLineRange(rl, state, startLine, endLine, maxBytesRead, () => fileStream.bytesRead, signal);
|
|
45
58
|
return buildLineRangeResult(state);
|
|
46
59
|
}
|
|
47
60
|
finally {
|
|
61
|
+
signal?.removeEventListener('abort', onAbort);
|
|
48
62
|
rl.close();
|
|
49
63
|
fileStream.destroy();
|
|
50
64
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"line-range.js","sourceRoot":"","sources":["../../../../src/lib/fs-helpers/readers/line-range.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"line-range.js","sourceRoot":"","sources":["../../../../src/lib/fs-helpers/readers/line-range.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAejE,SAAS,kBAAkB;IACzB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAqB,EACrB,OAAe,EACf,YAAgC,EAChC,SAAiB;IAEjB,IAAI,KAAK,CAAC,UAAU,GAAG,OAAO,EAAE,CAAC;QAC/B,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,YAAY,KAAK,SAAS,IAAI,SAAS,GAAG,YAAY,EAAE,CAAC;QAC3D,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,EAAsB,EACtB,KAAqB,EACrB,SAAiB,EACjB,OAAe,EACf,YAAgC,EAChC,YAA0B,EAC1B,MAAoB;IAEpB,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,CAAC;QAC5B,IAAI,MAAM,EAAE,OAAO;YAAE,MAAM;QAC3B,KAAK,CAAC,UAAU,EAAE,CAAC;QAEnB,IAAI,KAAK,CAAC,UAAU,IAAI,SAAS,IAAI,KAAK,CAAC,UAAU,IAAI,OAAO,EAAE,CAAC;YACjE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QAED,IAAI,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;YACtE,MAAM;QACR,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAqB;IACjD,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM;QAC7B,iBAAiB,EAAE,KAAK,CAAC,UAAU;QACnC,YAAY,EAAE,KAAK,CAAC,YAAY;KACjC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAgB,EAChB,SAAiB,EACjB,OAAe,EACf,QAAwB,EACxB,YAAqB,EACrB,MAAoB;IAEpB,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC5D,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,UAAU;QACjB,SAAS,EAAE,QAAQ;KACpB,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,kBAAkB,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG,GAAS,EAAE;QACzB,UAAU,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC;IACF,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC;IACZ,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,CAAC;QACH,MAAM,aAAa,CACjB,EAAE,EACF,KAAK,EACL,SAAS,EACT,OAAO,EACP,YAAY,EACZ,GAAG,EAAE,CAAC,UAAU,CAAC,SAAS,EAC1B,MAAM,CACP,CAAC;QACF,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9C,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,UAAU,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-buffer.d.ts","sourceRoot":"","sources":["../../../../src/lib/fs-helpers/readers/read-buffer.ts"],"names":[],"mappings":"AAoBA,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,aAAa,GAAE,MAAiB,EAChC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,CA+DjB"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { createReadStream } from 'node:fs';
|
|
2
|
+
import { ErrorCode, McpError } from '../../errors.js';
|
|
3
|
+
import { createAbortError } from '../abort.js';
|
|
4
|
+
const STREAM_CHUNK_SIZE = 64 * 1024;
|
|
5
|
+
function createTooLargeError(bytesRead, maxSize, requestedPath) {
|
|
6
|
+
return new McpError(ErrorCode.E_TOO_LARGE, `File exceeds maximum size (${bytesRead} > ${maxSize}): ${requestedPath}`, requestedPath, { size: bytesRead, maxSize });
|
|
7
|
+
}
|
|
8
|
+
export async function readFileBufferWithLimit(filePath, maxSize, requestedPath = filePath, signal) {
|
|
9
|
+
return await new Promise((resolve, reject) => {
|
|
10
|
+
const chunks = [];
|
|
11
|
+
let totalSize = 0;
|
|
12
|
+
let settled = false;
|
|
13
|
+
const stream = createReadStream(filePath, {
|
|
14
|
+
highWaterMark: STREAM_CHUNK_SIZE,
|
|
15
|
+
});
|
|
16
|
+
const cleanup = () => {
|
|
17
|
+
stream.removeListener('data', onData);
|
|
18
|
+
stream.removeListener('end', onEnd);
|
|
19
|
+
stream.removeListener('error', onError);
|
|
20
|
+
if (signal) {
|
|
21
|
+
signal.removeEventListener('abort', onAbort);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
const fail = (error) => {
|
|
25
|
+
if (settled)
|
|
26
|
+
return;
|
|
27
|
+
settled = true;
|
|
28
|
+
cleanup();
|
|
29
|
+
stream.destroy();
|
|
30
|
+
reject(error);
|
|
31
|
+
};
|
|
32
|
+
const onAbort = () => {
|
|
33
|
+
fail(createAbortError());
|
|
34
|
+
};
|
|
35
|
+
const onData = (chunk) => {
|
|
36
|
+
const chunkSize = typeof chunk === 'string' ? Buffer.byteLength(chunk) : chunk.length;
|
|
37
|
+
totalSize += chunkSize;
|
|
38
|
+
if (totalSize > maxSize) {
|
|
39
|
+
fail(createTooLargeError(totalSize, maxSize, requestedPath));
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk);
|
|
43
|
+
};
|
|
44
|
+
const onEnd = () => {
|
|
45
|
+
if (settled)
|
|
46
|
+
return;
|
|
47
|
+
settled = true;
|
|
48
|
+
cleanup();
|
|
49
|
+
resolve(Buffer.concat(chunks, totalSize));
|
|
50
|
+
};
|
|
51
|
+
const onError = (error) => {
|
|
52
|
+
fail(error instanceof Error ? error : new Error(String(error)));
|
|
53
|
+
};
|
|
54
|
+
if (signal?.aborted) {
|
|
55
|
+
onAbort();
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
signal?.addEventListener('abort', onAbort, { once: true });
|
|
59
|
+
stream.on('data', onData);
|
|
60
|
+
stream.on('end', onEnd);
|
|
61
|
+
stream.on('error', onError);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=read-buffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-buffer.js","sourceRoot":"","sources":["../../../../src/lib/fs-helpers/readers/read-buffer.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,25 +4,35 @@ export declare function readLineRangeContent(filePath: string, lineRange: {
|
|
|
4
4
|
}, options: {
|
|
5
5
|
encoding: BufferEncoding;
|
|
6
6
|
maxSize: number;
|
|
7
|
+
signal?: AbortSignal;
|
|
7
8
|
}): Promise<{
|
|
8
9
|
content: string;
|
|
9
10
|
truncated: boolean;
|
|
11
|
+
linesRead: number;
|
|
12
|
+
totalLinesScanned: number;
|
|
13
|
+
hasMoreLines: boolean;
|
|
10
14
|
}>;
|
|
11
15
|
export declare function readHeadContent(filePath: string, head: number, options: {
|
|
12
16
|
encoding: BufferEncoding;
|
|
13
17
|
maxSize: number;
|
|
18
|
+
signal?: AbortSignal;
|
|
14
19
|
}): Promise<{
|
|
15
20
|
content: string;
|
|
16
21
|
truncated: boolean;
|
|
22
|
+
linesRead: number;
|
|
23
|
+
hasMoreLines: boolean;
|
|
17
24
|
}>;
|
|
18
25
|
export declare function readTailContent(filePath: string, tail: number, options: {
|
|
19
26
|
encoding: BufferEncoding;
|
|
20
27
|
maxSize: number;
|
|
28
|
+
signal?: AbortSignal;
|
|
21
29
|
}): Promise<{
|
|
22
30
|
content: string;
|
|
23
31
|
truncated: boolean;
|
|
32
|
+
linesRead: number;
|
|
33
|
+
hasMoreLines: boolean;
|
|
24
34
|
}>;
|
|
25
|
-
export declare function readFullContent(filePath: string, encoding: BufferEncoding): Promise<{
|
|
35
|
+
export declare function readFullContent(filePath: string, encoding: BufferEncoding, maxSize: number, requestedPath?: string, signal?: AbortSignal): Promise<{
|
|
26
36
|
content: string;
|
|
27
37
|
totalLines: number;
|
|
28
38
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-file-content.d.ts","sourceRoot":"","sources":["../../../../src/lib/fs-helpers/readers/read-file-content.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"read-file-content.d.ts","sourceRoot":"","sources":["../../../../src/lib/fs-helpers/readers/read-file-content.ts"],"names":[],"mappings":"AAKA,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EACzC,OAAO,EAAE;IAAE,QAAQ,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAC3E,OAAO,CAAC;IACT,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC,CAuBD;AAOD,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,QAAQ,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAC3E,OAAO,CAAC;IACT,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC,CAeD;AAED,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,QAAQ,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAC3E,OAAO,CAAC;IACT,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC,CAeD;AAED,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,MAAM,EACf,aAAa,GAAE,MAAiB,EAChC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CASlD"}
|