@vybestack/llxprt-code-core 0.1.13 → 0.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/dist/src/code_assist/codeAssist.d.ts +2 -1
- package/dist/src/code_assist/codeAssist.js +4 -3
- package/dist/src/code_assist/codeAssist.js.map +1 -1
- package/dist/src/code_assist/oauth2.js +9 -2
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +94 -2
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/code_assist/server.d.ts +5 -6
- package/dist/src/code_assist/server.js +7 -70
- package/dist/src/code_assist/server.js.map +1 -1
- package/dist/src/code_assist/setup.d.ts +6 -1
- package/dist/src/code_assist/setup.js +4 -1
- package/dist/src/code_assist/setup.js.map +1 -1
- package/dist/src/code_assist/setup.test.js +4 -1
- package/dist/src/code_assist/setup.test.js.map +1 -1
- package/dist/src/code_assist/types.d.ts +2 -2
- package/dist/src/config/config.d.ts +25 -3
- package/dist/src/config/config.js +47 -10
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +1 -26
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/flashFallback.test.js +1 -1
- package/dist/src/config/flashFallback.test.js.map +1 -1
- package/dist/src/core/client.d.ts +6 -2
- package/dist/src/core/client.js +41 -18
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +78 -24
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.d.ts +1 -1
- package/dist/src/core/contentGenerator.js +1 -1
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/coreToolScheduler.js +14 -1
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +80 -0
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/geminiChat.d.ts +4 -3
- package/dist/src/core/geminiChat.js +8 -11
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiRequest.js +2 -37
- package/dist/src/core/geminiRequest.js.map +1 -1
- package/dist/src/core/logger.js +6 -0
- package/dist/src/core/logger.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js +5 -5
- package/dist/src/core/prompts.js +42 -18
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/core/prompts.test.js +121 -4
- package/dist/src/core/prompts.test.js.map +1 -1
- package/dist/src/core/turn.d.ts +7 -2
- package/dist/src/core/turn.js +9 -0
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/core/turn.test.js +129 -0
- package/dist/src/core/turn.test.js.map +1 -1
- package/dist/src/ide/ide-client.d.ts +28 -0
- package/dist/src/ide/ide-client.js +79 -0
- package/dist/src/ide/ide-client.js.map +1 -0
- package/dist/src/ide/ideContext.d.ts +174 -0
- package/dist/src/{services → ide}/ideContext.js +28 -25
- package/dist/src/ide/ideContext.js.map +1 -0
- package/dist/src/{services → ide}/ideContext.test.js +39 -39
- package/dist/src/ide/ideContext.test.js.map +1 -0
- package/dist/src/index.d.ts +3 -1
- package/dist/src/index.js +4 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/google-auth-provider.d.ts +23 -0
- package/dist/src/mcp/google-auth-provider.js +63 -0
- package/dist/src/mcp/google-auth-provider.js.map +1 -0
- package/dist/src/mcp/google-auth-provider.test.js +54 -0
- package/dist/src/mcp/google-auth-provider.test.js.map +1 -0
- package/dist/src/providers/anthropic/AnthropicProvider.js.map +1 -1
- package/dist/src/providers/gemini/GeminiProvider.d.ts +2 -0
- package/dist/src/providers/gemini/GeminiProvider.integration.test.js +36 -0
- package/dist/src/providers/gemini/GeminiProvider.integration.test.js.map +1 -1
- package/dist/src/providers/gemini/GeminiProvider.js +57 -10
- package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
- package/dist/src/providers/openai/OpenAIProvider.js +10 -7
- package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
- package/dist/src/services/fileDiscoveryService.d.ts +4 -4
- package/dist/src/services/fileDiscoveryService.js +8 -8
- package/dist/src/services/gitService.js +1 -1
- package/dist/src/services/gitService.js.map +1 -1
- package/dist/src/services/gitService.test.js +1 -1
- package/dist/src/services/gitService.test.js.map +1 -1
- package/dist/src/services/loopDetectionService.d.ts +48 -5
- package/dist/src/services/loopDetectionService.js +127 -41
- package/dist/src/services/loopDetectionService.js.map +1 -1
- package/dist/src/services/loopDetectionService.test.js +50 -123
- package/dist/src/services/loopDetectionService.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +2 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +17 -2
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/constants.d.ts +16 -15
- package/dist/src/telemetry/constants.js +16 -15
- package/dist/src/telemetry/constants.js.map +1 -1
- package/dist/src/telemetry/file-exporters.d.ts +28 -0
- package/dist/src/telemetry/file-exporters.js +62 -0
- package/dist/src/telemetry/file-exporters.js.map +1 -0
- package/dist/src/telemetry/loggers.d.ts +2 -1
- package/dist/src/telemetry/loggers.js +18 -3
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/sdk.js +22 -7
- package/dist/src/telemetry/sdk.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +9 -2
- package/dist/src/telemetry/types.js +13 -1
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/tools/ToolFormatter.js +19 -1
- package/dist/src/tools/ToolFormatter.js.map +1 -1
- package/dist/src/tools/edit.js +10 -4
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +12 -0
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/grep.test.js +1 -1
- package/dist/src/tools/grep.test.js.map +1 -1
- package/dist/src/tools/ls.d.ts +5 -2
- package/dist/src/tools/ls.js +39 -10
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/mcp-client.d.ts +5 -1
- package/dist/src/tools/mcp-client.js +416 -29
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +46 -6
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/mcp-tool.js +1 -1
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/mcp-tool.test.js +34 -0
- package/dist/src/tools/mcp-tool.test.js.map +1 -1
- package/dist/src/tools/read-file.js +1 -1
- package/dist/src/tools/read-file.test.js +98 -69
- package/dist/src/tools/read-file.test.js.map +1 -1
- package/dist/src/tools/read-many-files.d.ts +5 -2
- package/dist/src/tools/read-many-files.js +61 -16
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/read-many-files.test.js +5 -2
- package/dist/src/tools/read-many-files.test.js.map +1 -1
- package/dist/src/tools/shell.d.ts +15 -26
- package/dist/src/tools/shell.js +137 -358
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +73 -318
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/tool-registry.d.ts +13 -1
- package/dist/src/tools/tool-registry.js +45 -1
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tool-registry.test.js +3 -3
- package/dist/src/tools/tool-registry.test.js.map +1 -1
- package/dist/src/utils/bfsFileSearch.d.ts +2 -0
- package/dist/src/utils/bfsFileSearch.js +4 -1
- package/dist/src/utils/bfsFileSearch.js.map +1 -1
- package/dist/src/utils/bfsFileSearch.test.js +108 -105
- package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
- package/dist/src/utils/editCorrector.js +4 -4
- package/dist/src/utils/editCorrector.js.map +1 -1
- package/dist/src/utils/editCorrector.test.js +1 -1
- package/dist/src/utils/editor.js +16 -10
- package/dist/src/utils/editor.js.map +1 -1
- package/dist/src/utils/editor.test.js +128 -28
- package/dist/src/utils/editor.test.js.map +1 -1
- package/dist/src/utils/errorReporting.d.ts +1 -1
- package/dist/src/utils/errorReporting.js +2 -2
- package/dist/src/utils/errorReporting.js.map +1 -1
- package/dist/src/utils/errorReporting.test.js +44 -38
- package/dist/src/utils/errorReporting.test.js.map +1 -1
- package/dist/src/utils/fileUtils.d.ts +4 -4
- package/dist/src/utils/fileUtils.js +31 -15
- package/dist/src/utils/fileUtils.js.map +1 -1
- package/dist/src/utils/fileUtils.test.js +37 -37
- package/dist/src/utils/fileUtils.test.js.map +1 -1
- package/dist/src/utils/getFolderStructure.d.ts +3 -2
- package/dist/src/utils/getFolderStructure.js +27 -28
- package/dist/src/utils/getFolderStructure.js.map +1 -1
- package/dist/src/utils/getFolderStructure.test.js +169 -185
- package/dist/src/utils/getFolderStructure.test.js.map +1 -1
- package/dist/src/utils/gitIgnoreParser.js +4 -7
- package/dist/src/utils/gitIgnoreParser.js.map +1 -1
- package/dist/src/utils/gitIgnoreParser.test.js +71 -62
- package/dist/src/utils/gitIgnoreParser.test.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.d.ts +2 -1
- package/dist/src/utils/memoryDiscovery.js +11 -5
- package/dist/src/utils/memoryDiscovery.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.test.js +160 -371
- package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
- package/dist/src/utils/partUtils.d.ts +14 -0
- package/dist/src/utils/partUtils.js +65 -0
- package/dist/src/utils/partUtils.js.map +1 -0
- package/dist/src/utils/partUtils.test.d.ts +6 -0
- package/dist/src/utils/partUtils.test.js +130 -0
- package/dist/src/utils/partUtils.test.js.map +1 -0
- package/dist/src/utils/paths.d.ts +11 -0
- package/dist/src/utils/paths.js +17 -1
- package/dist/src/utils/paths.js.map +1 -1
- package/dist/src/utils/quotaErrorDetection.js.map +1 -1
- package/dist/src/utils/retry.js +1 -1
- package/dist/src/utils/retry.js.map +1 -1
- package/dist/src/utils/schemaValidator.js +5 -2
- package/dist/src/utils/schemaValidator.js.map +1 -1
- package/dist/src/utils/shell-utils.d.ts +44 -0
- package/dist/src/utils/shell-utils.js +243 -0
- package/dist/src/utils/shell-utils.js.map +1 -0
- package/dist/src/utils/shell-utils.test.d.ts +6 -0
- package/dist/src/utils/shell-utils.test.js +450 -0
- package/dist/src/utils/shell-utils.test.js.map +1 -0
- package/dist/src/utils/summarizer.js +1 -30
- package/dist/src/utils/summarizer.js.map +1 -1
- package/dist/src/utils/systemEncoding.d.ts +40 -0
- package/dist/src/utils/systemEncoding.js +149 -0
- package/dist/src/utils/systemEncoding.js.map +1 -0
- package/dist/src/utils/systemEncoding.test.d.ts +6 -0
- package/dist/src/utils/systemEncoding.test.js +368 -0
- package/dist/src/utils/systemEncoding.test.js.map +1 -0
- package/dist/src/utils/user_account.test.js +1 -1
- package/dist/src/utils/user_account.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -1
- package/dist/src/core/geminiRequest.test.js +0 -72
- package/dist/src/core/geminiRequest.test.js.map +0 -1
- package/dist/src/services/ideContext.d.ts +0 -126
- package/dist/src/services/ideContext.js.map +0 -1
- package/dist/src/services/ideContext.test.js.map +0 -1
- /package/dist/src/{services → ide}/ideContext.test.d.ts +0 -0
- /package/dist/src/{core/geminiRequest.test.d.ts → mcp/google-auth-provider.test.d.ts} +0 -0
|
@@ -3,296 +3,280 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
6
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
8
7
|
import fsPromises from 'fs/promises';
|
|
9
|
-
import * as
|
|
8
|
+
import * as nodePath from 'path';
|
|
9
|
+
import * as os from 'os';
|
|
10
10
|
import { getFolderStructure } from './getFolderStructure.js';
|
|
11
|
-
import * as gitUtils from './gitUtils.js';
|
|
12
11
|
import { FileDiscoveryService } from '../services/fileDiscoveryService.js';
|
|
13
|
-
vi.mock('path', async (importOriginal) => {
|
|
14
|
-
const original = (await importOriginal());
|
|
15
|
-
return {
|
|
16
|
-
...original,
|
|
17
|
-
resolve: vi.fn((str) => str),
|
|
18
|
-
// Other path functions (basename, join, normalize, etc.) will use original implementation
|
|
19
|
-
};
|
|
20
|
-
});
|
|
21
|
-
vi.mock('fs/promises');
|
|
22
|
-
vi.mock('fs');
|
|
23
|
-
vi.mock('./gitUtils.js');
|
|
24
|
-
// Import 'path' again here, it will be the mocked version
|
|
25
12
|
import * as path from 'path';
|
|
26
|
-
// Helper to create Dirent-like objects for mocking fs.readdir
|
|
27
|
-
const createDirent = (name, type) => ({
|
|
28
|
-
name,
|
|
29
|
-
isFile: () => type === 'file',
|
|
30
|
-
isDirectory: () => type === 'dir',
|
|
31
|
-
isBlockDevice: () => false,
|
|
32
|
-
isCharacterDevice: () => false,
|
|
33
|
-
isSymbolicLink: () => false,
|
|
34
|
-
isFIFO: () => false,
|
|
35
|
-
isSocket: () => false,
|
|
36
|
-
});
|
|
37
13
|
describe('getFolderStructure', () => {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
path.
|
|
45
|
-
|
|
46
|
-
fsPromises.
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
return mockFsStructure[normalizedPath];
|
|
52
|
-
}
|
|
53
|
-
throw Object.assign(new Error(`ENOENT: no such file or directory, scandir '${normalizedPath}'`), { code: 'ENOENT' });
|
|
54
|
-
});
|
|
14
|
+
let testRootDir;
|
|
15
|
+
async function createEmptyDir(...pathSegments) {
|
|
16
|
+
const fullPath = path.join(testRootDir, ...pathSegments);
|
|
17
|
+
await fsPromises.mkdir(fullPath, { recursive: true });
|
|
18
|
+
}
|
|
19
|
+
async function createTestFile(...pathSegments) {
|
|
20
|
+
const fullPath = path.join(testRootDir, ...pathSegments);
|
|
21
|
+
await fsPromises.mkdir(path.dirname(fullPath), { recursive: true });
|
|
22
|
+
await fsPromises.writeFile(fullPath, '');
|
|
23
|
+
return fullPath;
|
|
24
|
+
}
|
|
25
|
+
beforeEach(async () => {
|
|
26
|
+
testRootDir = await fsPromises.mkdtemp(path.join(os.tmpdir(), 'folder-structure-test-'));
|
|
55
27
|
});
|
|
56
|
-
afterEach(() => {
|
|
57
|
-
|
|
28
|
+
afterEach(async () => {
|
|
29
|
+
await fsPromises.rm(testRootDir, { recursive: true, force: true });
|
|
58
30
|
});
|
|
59
|
-
const mockFsStructure = {
|
|
60
|
-
'/testroot': [
|
|
61
|
-
createDirent('file1.txt', 'file'),
|
|
62
|
-
createDirent('subfolderA', 'dir'),
|
|
63
|
-
createDirent('emptyFolder', 'dir'),
|
|
64
|
-
createDirent('.hiddenfile', 'file'),
|
|
65
|
-
createDirent('node_modules', 'dir'),
|
|
66
|
-
],
|
|
67
|
-
'/testroot/subfolderA': [
|
|
68
|
-
createDirent('fileA1.ts', 'file'),
|
|
69
|
-
createDirent('fileA2.js', 'file'),
|
|
70
|
-
createDirent('subfolderB', 'dir'),
|
|
71
|
-
],
|
|
72
|
-
'/testroot/subfolderA/subfolderB': [createDirent('fileB1.md', 'file')],
|
|
73
|
-
'/testroot/emptyFolder': [],
|
|
74
|
-
'/testroot/node_modules': [createDirent('somepackage', 'dir')],
|
|
75
|
-
'/testroot/manyFilesFolder': Array.from({ length: 10 }, (_, i) => createDirent(`file-${i}.txt`, 'file')),
|
|
76
|
-
'/testroot/manyFolders': Array.from({ length: 5 }, (_, i) => createDirent(`folder-${i}`, 'dir')),
|
|
77
|
-
...Array.from({ length: 5 }, (_, i) => ({
|
|
78
|
-
[`/testroot/manyFolders/folder-${i}`]: [
|
|
79
|
-
createDirent('child.txt', 'file'),
|
|
80
|
-
],
|
|
81
|
-
})).reduce((acc, val) => ({ ...acc, ...val }), {}),
|
|
82
|
-
'/testroot/deepFolders': [createDirent('level1', 'dir')],
|
|
83
|
-
'/testroot/deepFolders/level1': [createDirent('level2', 'dir')],
|
|
84
|
-
'/testroot/deepFolders/level1/level2': [createDirent('level3', 'dir')],
|
|
85
|
-
'/testroot/deepFolders/level1/level2/level3': [
|
|
86
|
-
createDirent('file.txt', 'file'),
|
|
87
|
-
],
|
|
88
|
-
};
|
|
89
31
|
it('should return basic folder structure', async () => {
|
|
90
|
-
|
|
91
|
-
|
|
32
|
+
await createTestFile('fileA1.ts');
|
|
33
|
+
await createTestFile('fileA2.js');
|
|
34
|
+
await createTestFile('subfolderB', 'fileB1.md');
|
|
35
|
+
const structure = await getFolderStructure(testRootDir);
|
|
36
|
+
expect(structure.trim()).toBe(`
|
|
92
37
|
Showing up to 200 items (files + folders).
|
|
93
38
|
|
|
94
|
-
|
|
39
|
+
${testRootDir}${path.sep}
|
|
95
40
|
├───fileA1.ts
|
|
96
41
|
├───fileA2.js
|
|
97
|
-
└───subfolderB
|
|
42
|
+
└───subfolderB${path.sep}
|
|
98
43
|
└───fileB1.md
|
|
99
|
-
`.trim();
|
|
100
|
-
expect(structure.trim()).toBe(expected);
|
|
44
|
+
`.trim());
|
|
101
45
|
});
|
|
102
46
|
it('should handle an empty folder', async () => {
|
|
103
|
-
const structure = await getFolderStructure(
|
|
104
|
-
|
|
47
|
+
const structure = await getFolderStructure(testRootDir);
|
|
48
|
+
expect(structure.trim()).toBe(`
|
|
105
49
|
Showing up to 200 items (files + folders).
|
|
106
50
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
51
|
+
${testRootDir}${path.sep}
|
|
52
|
+
`
|
|
53
|
+
.trim()
|
|
54
|
+
.trim());
|
|
110
55
|
});
|
|
111
56
|
it('should ignore folders specified in ignoredFolders (default)', async () => {
|
|
112
|
-
|
|
113
|
-
|
|
57
|
+
await createTestFile('.hiddenfile');
|
|
58
|
+
await createTestFile('file1.txt');
|
|
59
|
+
await createEmptyDir('emptyFolder');
|
|
60
|
+
await createTestFile('node_modules', 'somepackage', 'index.js');
|
|
61
|
+
await createTestFile('subfolderA', 'fileA1.ts');
|
|
62
|
+
await createTestFile('subfolderA', 'fileA2.js');
|
|
63
|
+
await createTestFile('subfolderA', 'subfolderB', 'fileB1.md');
|
|
64
|
+
const structure = await getFolderStructure(testRootDir);
|
|
65
|
+
expect(structure.trim()).toBe(`
|
|
114
66
|
Showing up to 200 items (files + folders). Folders or files indicated with ... contain more items not shown, were ignored, or the display limit (200 items) was reached.
|
|
115
67
|
|
|
116
|
-
|
|
68
|
+
${testRootDir}${path.sep}
|
|
117
69
|
├───.hiddenfile
|
|
118
70
|
├───file1.txt
|
|
119
|
-
├───emptyFolder
|
|
120
|
-
├───node_modules
|
|
121
|
-
└───subfolderA
|
|
71
|
+
├───emptyFolder${path.sep}
|
|
72
|
+
├───node_modules${path.sep}...
|
|
73
|
+
└───subfolderA${path.sep}
|
|
122
74
|
├───fileA1.ts
|
|
123
75
|
├───fileA2.js
|
|
124
|
-
└───subfolderB
|
|
76
|
+
└───subfolderB${path.sep}
|
|
125
77
|
└───fileB1.md
|
|
126
|
-
`.trim();
|
|
127
|
-
expect(structure.trim()).toBe(expected);
|
|
78
|
+
`.trim());
|
|
128
79
|
});
|
|
129
80
|
it('should ignore folders specified in custom ignoredFolders', async () => {
|
|
130
|
-
|
|
81
|
+
await createTestFile('.hiddenfile');
|
|
82
|
+
await createTestFile('file1.txt');
|
|
83
|
+
await createEmptyDir('emptyFolder');
|
|
84
|
+
await createTestFile('node_modules', 'somepackage', 'index.js');
|
|
85
|
+
await createTestFile('subfolderA', 'fileA1.ts');
|
|
86
|
+
const structure = await getFolderStructure(testRootDir, {
|
|
131
87
|
ignoredFolders: new Set(['subfolderA', 'node_modules']),
|
|
132
88
|
});
|
|
133
89
|
const expected = `
|
|
134
90
|
Showing up to 200 items (files + folders). Folders or files indicated with ... contain more items not shown, were ignored, or the display limit (200 items) was reached.
|
|
135
91
|
|
|
136
|
-
|
|
92
|
+
${testRootDir}${path.sep}
|
|
137
93
|
├───.hiddenfile
|
|
138
94
|
├───file1.txt
|
|
139
|
-
├───emptyFolder
|
|
140
|
-
├───node_modules
|
|
141
|
-
└───subfolderA
|
|
95
|
+
├───emptyFolder${path.sep}
|
|
96
|
+
├───node_modules${path.sep}...
|
|
97
|
+
└───subfolderA${path.sep}...
|
|
142
98
|
`.trim();
|
|
143
99
|
expect(structure.trim()).toBe(expected);
|
|
144
100
|
});
|
|
145
101
|
it('should filter files by fileIncludePattern', async () => {
|
|
146
|
-
|
|
102
|
+
await createTestFile('fileA1.ts');
|
|
103
|
+
await createTestFile('fileA2.js');
|
|
104
|
+
await createTestFile('subfolderB', 'fileB1.md');
|
|
105
|
+
const structure = await getFolderStructure(testRootDir, {
|
|
147
106
|
fileIncludePattern: /\.ts$/,
|
|
148
107
|
});
|
|
149
108
|
const expected = `
|
|
150
109
|
Showing up to 200 items (files + folders).
|
|
151
110
|
|
|
152
|
-
|
|
111
|
+
${testRootDir}${path.sep}
|
|
153
112
|
├───fileA1.ts
|
|
154
|
-
└───subfolderB
|
|
113
|
+
└───subfolderB${path.sep}
|
|
155
114
|
`.trim();
|
|
156
115
|
expect(structure.trim()).toBe(expected);
|
|
157
116
|
});
|
|
158
117
|
it('should handle maxItems truncation for files within a folder', async () => {
|
|
159
|
-
|
|
118
|
+
await createTestFile('fileA1.ts');
|
|
119
|
+
await createTestFile('fileA2.js');
|
|
120
|
+
await createTestFile('subfolderB', 'fileB1.md');
|
|
121
|
+
const structure = await getFolderStructure(testRootDir, {
|
|
160
122
|
maxItems: 3,
|
|
161
123
|
});
|
|
162
124
|
const expected = `
|
|
163
125
|
Showing up to 3 items (files + folders).
|
|
164
126
|
|
|
165
|
-
|
|
127
|
+
${testRootDir}${path.sep}
|
|
166
128
|
├───fileA1.ts
|
|
167
129
|
├───fileA2.js
|
|
168
|
-
└───subfolderB
|
|
130
|
+
└───subfolderB${path.sep}
|
|
169
131
|
`.trim();
|
|
170
132
|
expect(structure.trim()).toBe(expected);
|
|
171
133
|
});
|
|
172
134
|
it('should handle maxItems truncation for subfolders', async () => {
|
|
173
|
-
|
|
135
|
+
for (let i = 0; i < 5; i++) {
|
|
136
|
+
await createTestFile(`folder-${i}`, 'child.txt');
|
|
137
|
+
}
|
|
138
|
+
const structure = await getFolderStructure(testRootDir, {
|
|
174
139
|
maxItems: 4,
|
|
175
140
|
});
|
|
176
141
|
const expectedRevised = `
|
|
177
142
|
Showing up to 4 items (files + folders). Folders or files indicated with ... contain more items not shown, were ignored, or the display limit (4 items) was reached.
|
|
178
143
|
|
|
179
|
-
|
|
180
|
-
├───folder-0
|
|
181
|
-
├───folder-1
|
|
182
|
-
├───folder-2
|
|
183
|
-
├───folder-3
|
|
144
|
+
${testRootDir}${path.sep}
|
|
145
|
+
├───folder-0${path.sep}
|
|
146
|
+
├───folder-1${path.sep}
|
|
147
|
+
├───folder-2${path.sep}
|
|
148
|
+
├───folder-3${path.sep}
|
|
184
149
|
└───...
|
|
185
150
|
`.trim();
|
|
186
151
|
expect(structure.trim()).toBe(expectedRevised);
|
|
187
152
|
});
|
|
188
153
|
it('should handle maxItems that only allows the root folder itself', async () => {
|
|
189
|
-
|
|
154
|
+
await createTestFile('fileA1.ts');
|
|
155
|
+
await createTestFile('fileA2.ts');
|
|
156
|
+
await createTestFile('subfolderB', 'fileB1.ts');
|
|
157
|
+
const structure = await getFolderStructure(testRootDir, {
|
|
190
158
|
maxItems: 1,
|
|
191
159
|
});
|
|
192
|
-
const
|
|
160
|
+
const expected = `
|
|
193
161
|
Showing up to 1 items (files + folders). Folders or files indicated with ... contain more items not shown, were ignored, or the display limit (1 items) was reached.
|
|
194
162
|
|
|
195
|
-
|
|
163
|
+
${testRootDir}${path.sep}
|
|
196
164
|
├───fileA1.ts
|
|
197
165
|
├───...
|
|
198
166
|
└───...
|
|
199
167
|
`.trim();
|
|
200
|
-
expect(structure.trim()).toBe(
|
|
168
|
+
expect(structure.trim()).toBe(expected);
|
|
201
169
|
});
|
|
202
170
|
it('should handle non-existent directory', async () => {
|
|
203
|
-
|
|
204
|
-
const
|
|
205
|
-
|
|
206
|
-
if (p === '/nonexistent') {
|
|
207
|
-
throw Object.assign(new Error('ENOENT'), { code: 'ENOENT' });
|
|
208
|
-
}
|
|
209
|
-
return originalReaddir(p);
|
|
210
|
-
});
|
|
211
|
-
const structure = await getFolderStructure('/nonexistent');
|
|
212
|
-
expect(structure).toContain('Error: Could not read directory "/nonexistent"');
|
|
171
|
+
const nonExistentPath = path.join(testRootDir, 'non-existent');
|
|
172
|
+
const structure = await getFolderStructure(nonExistentPath);
|
|
173
|
+
expect(structure).toContain(`Error: Could not read directory "${nonExistentPath}". Check path and permissions.`);
|
|
213
174
|
});
|
|
214
175
|
it('should handle deep folder structure within limits', async () => {
|
|
215
|
-
|
|
176
|
+
await createTestFile('level1', 'level2', 'level3', 'file.txt');
|
|
177
|
+
const structure = await getFolderStructure(testRootDir, {
|
|
216
178
|
maxItems: 10,
|
|
217
179
|
});
|
|
218
180
|
const expected = `
|
|
219
181
|
Showing up to 10 items (files + folders).
|
|
220
182
|
|
|
221
|
-
|
|
222
|
-
└───level1
|
|
223
|
-
└───level2
|
|
224
|
-
└───level3
|
|
183
|
+
${testRootDir}${path.sep}
|
|
184
|
+
└───level1${path.sep}
|
|
185
|
+
└───level2${path.sep}
|
|
186
|
+
└───level3${path.sep}
|
|
225
187
|
└───file.txt
|
|
226
188
|
`.trim();
|
|
227
189
|
expect(structure.trim()).toBe(expected);
|
|
228
190
|
});
|
|
229
191
|
it('should truncate deep folder structure if maxItems is small', async () => {
|
|
230
|
-
|
|
192
|
+
await createTestFile('level1', 'level2', 'level3', 'file.txt');
|
|
193
|
+
const structure = await getFolderStructure(testRootDir, {
|
|
231
194
|
maxItems: 3,
|
|
232
195
|
});
|
|
233
196
|
const expected = `
|
|
234
197
|
Showing up to 3 items (files + folders).
|
|
235
198
|
|
|
236
|
-
|
|
237
|
-
└───level1
|
|
238
|
-
└───level2
|
|
239
|
-
└───level3
|
|
199
|
+
${testRootDir}${path.sep}
|
|
200
|
+
└───level1${path.sep}
|
|
201
|
+
└───level2${path.sep}
|
|
202
|
+
└───level3${path.sep}
|
|
240
203
|
`.trim();
|
|
241
204
|
expect(structure.trim()).toBe(expected);
|
|
242
205
|
});
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
fsPromises.readdir.mockImplementation(async (p) => {
|
|
249
|
-
const path = p.toString();
|
|
250
|
-
if (path === '/test/project') {
|
|
251
|
-
return [
|
|
252
|
-
createDirent('file1.txt', 'file'),
|
|
253
|
-
createDirent('node_modules', 'dir'),
|
|
254
|
-
createDirent('ignored.txt', 'file'),
|
|
255
|
-
createDirent('.llxprt', 'dir'),
|
|
256
|
-
];
|
|
257
|
-
}
|
|
258
|
-
if (path === '/test/project/node_modules') {
|
|
259
|
-
return [createDirent('some-package', 'dir')];
|
|
260
|
-
}
|
|
261
|
-
if (path === '/test/project/.llxprt') {
|
|
262
|
-
return [
|
|
263
|
-
createDirent('config.yaml', 'file'),
|
|
264
|
-
createDirent('logs.json', 'file'),
|
|
265
|
-
];
|
|
266
|
-
}
|
|
267
|
-
return [];
|
|
206
|
+
describe('with gitignore', () => {
|
|
207
|
+
beforeEach(async () => {
|
|
208
|
+
await fsPromises.mkdir(path.join(testRootDir, '.git'), {
|
|
209
|
+
recursive: true,
|
|
210
|
+
});
|
|
268
211
|
});
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
212
|
+
it('should ignore files and folders specified in .gitignore', async () => {
|
|
213
|
+
await fsPromises.writeFile(nodePath.join(testRootDir, '.gitignore'), 'ignored.txt\nnode_modules/\n.llxprt/*\n!/.llxprt/config.yaml');
|
|
214
|
+
await createTestFile('file1.txt');
|
|
215
|
+
await createTestFile('node_modules', 'some-package', 'index.js');
|
|
216
|
+
await createTestFile('ignored.txt');
|
|
217
|
+
await createTestFile('.llxprt', 'config.yaml');
|
|
218
|
+
await createTestFile('.llxprt', 'logs.json');
|
|
219
|
+
const fileService = new FileDiscoveryService(testRootDir);
|
|
220
|
+
const structure = await getFolderStructure(testRootDir, {
|
|
221
|
+
fileService,
|
|
222
|
+
});
|
|
223
|
+
expect(structure).not.toContain('ignored.txt');
|
|
224
|
+
expect(structure).toContain(`node_modules${path.sep}...`);
|
|
225
|
+
expect(structure).not.toContain('logs.json');
|
|
226
|
+
expect(structure).toContain('config.yaml');
|
|
227
|
+
expect(structure).toContain('file1.txt');
|
|
275
228
|
});
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
229
|
+
it('should not ignore files if respectGitIgnore is false', async () => {
|
|
230
|
+
await fsPromises.writeFile(nodePath.join(testRootDir, '.gitignore'), 'ignored.txt');
|
|
231
|
+
await createTestFile('file1.txt');
|
|
232
|
+
await createTestFile('ignored.txt');
|
|
233
|
+
const fileService = new FileDiscoveryService(testRootDir);
|
|
234
|
+
const structure = await getFolderStructure(testRootDir, {
|
|
235
|
+
fileService,
|
|
236
|
+
fileFilteringOptions: {
|
|
237
|
+
respectLlxprtIgnore: false,
|
|
238
|
+
respectGitIgnore: false,
|
|
239
|
+
},
|
|
240
|
+
});
|
|
241
|
+
expect(structure).toContain('ignored.txt');
|
|
242
|
+
expect(structure).toContain('file1.txt');
|
|
282
243
|
});
|
|
283
|
-
expect(structure).not.toContain('ignored.txt');
|
|
284
|
-
expect(structure).toContain('node_modules/...');
|
|
285
|
-
expect(structure).not.toContain('logs.json');
|
|
286
244
|
});
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
245
|
+
describe('with llxprtignore', () => {
|
|
246
|
+
it('should ignore llxprtignore files by default', async () => {
|
|
247
|
+
await fsPromises.writeFile(nodePath.join(testRootDir, '.llxprtignore'), 'ignored.txt\nnode_modules/\n.llxprt/\n!/.llxprt/config.yaml');
|
|
248
|
+
await createTestFile('file1.txt');
|
|
249
|
+
await createTestFile('node_modules', 'some-package', 'index.js');
|
|
250
|
+
await createTestFile('ignored.txt');
|
|
251
|
+
await createTestFile('.llxprt', 'config.yaml');
|
|
252
|
+
await createTestFile('.llxprt', 'logs.json');
|
|
253
|
+
const fileService = new FileDiscoveryService(testRootDir);
|
|
254
|
+
const structure = await getFolderStructure(testRootDir, {
|
|
255
|
+
fileService,
|
|
256
|
+
});
|
|
257
|
+
expect(structure).not.toContain('ignored.txt');
|
|
258
|
+
expect(structure).toContain(`node_modules${path.sep}...`);
|
|
259
|
+
expect(structure).not.toContain('logs.json');
|
|
260
|
+
});
|
|
261
|
+
it('should not ignore files if respectLlxprtIgnore is false', async () => {
|
|
262
|
+
await fsPromises.writeFile(nodePath.join(testRootDir, '.llxprtignore'), 'ignored.txt\nnode_modules/\n.llxprt/\n!/.llxprt/config.yaml');
|
|
263
|
+
await createTestFile('file1.txt');
|
|
264
|
+
await createTestFile('node_modules', 'some-package', 'index.js');
|
|
265
|
+
await createTestFile('ignored.txt');
|
|
266
|
+
await createTestFile('.llxprt', 'config.yaml');
|
|
267
|
+
await createTestFile('.llxprt', 'logs.json');
|
|
268
|
+
const fileService = new FileDiscoveryService(testRootDir);
|
|
269
|
+
const structure = await getFolderStructure(testRootDir, {
|
|
270
|
+
fileService,
|
|
271
|
+
fileFilteringOptions: {
|
|
272
|
+
respectLlxprtIgnore: false,
|
|
273
|
+
respectGitIgnore: true, // Explicitly disable gemini ignore only
|
|
274
|
+
},
|
|
275
|
+
});
|
|
276
|
+
expect(structure).toContain('ignored.txt');
|
|
277
|
+
// node_modules is still ignored by default
|
|
278
|
+
expect(structure).toContain(`node_modules${path.sep}...`);
|
|
292
279
|
});
|
|
293
|
-
expect(structure).toContain('ignored.txt');
|
|
294
|
-
// node_modules is still ignored by default
|
|
295
|
-
expect(structure).toContain('node_modules/...');
|
|
296
280
|
});
|
|
297
281
|
});
|
|
298
282
|
//# sourceMappingURL=getFolderStructure.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getFolderStructure.test.js","sourceRoot":"","sources":["../../../src/utils/getFolderStructure.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,
|
|
1
|
+
{"version":3,"file":"getFolderStructure.test.js","sourceRoot":"","sources":["../../../src/utils/getFolderStructure.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,QAAQ,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,IAAI,WAAmB,CAAC;IAExB,KAAK,UAAU,cAAc,CAAC,GAAG,YAAsB;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,YAAY,CAAC,CAAC;QACzD,MAAM,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,UAAU,cAAc,CAAC,GAAG,YAAsB;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,YAAY,CAAC,CAAC;QACzD,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,MAAM,UAAU,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACzC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,WAAW,GAAG,MAAM,UAAU,CAAC,OAAO,CACpC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,wBAAwB,CAAC,CACjD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,UAAU,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;QAClC,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;QAClC,MAAM,cAAc,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAEhD,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,WAAW,CAAC,CAAC;QACxD,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAC3B;;;EAGJ,WAAW,GAAG,IAAI,CAAC,GAAG;;;gBAGR,IAAI,CAAC,GAAG;;CAEvB,CAAC,IAAI,EAAE,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,WAAW,CAAC,CAAC;QACxD,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAC3B;;;EAGJ,WAAW,GAAG,IAAI,CAAC,GAAG;CACvB;aACQ,IAAI,EAAE;aACN,IAAI,EAAE,CACV,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC;QACpC,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;QAClC,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC;QACpC,MAAM,cAAc,CAAC,cAAc,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;QAChE,MAAM,cAAc,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAChD,MAAM,cAAc,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAChD,MAAM,cAAc,CAAC,YAAY,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;QAE9D,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,WAAW,CAAC,CAAC;QACxD,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAC3B;;;EAGJ,WAAW,GAAG,IAAI,CAAC,GAAG;;;iBAGP,IAAI,CAAC,GAAG;kBACP,IAAI,CAAC,GAAG;gBACV,IAAI,CAAC,GAAG;;;oBAGJ,IAAI,CAAC,GAAG;;CAE3B,CAAC,IAAI,EAAE,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC;QACpC,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;QAClC,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC;QACpC,MAAM,cAAc,CAAC,cAAc,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;QAChE,MAAM,cAAc,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAEhD,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE;YACtD,cAAc,EAAE,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;SACxD,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG;;;EAGnB,WAAW,GAAG,IAAI,CAAC,GAAG;;;iBAGP,IAAI,CAAC,GAAG;kBACP,IAAI,CAAC,GAAG;gBACV,IAAI,CAAC,GAAG;CACvB,CAAC,IAAI,EAAE,CAAC;QACL,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;QAClC,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;QAClC,MAAM,cAAc,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAEhD,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE;YACtD,kBAAkB,EAAE,OAAO;SAC5B,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG;;;EAGnB,WAAW,GAAG,IAAI,CAAC,GAAG;;gBAER,IAAI,CAAC,GAAG;CACvB,CAAC,IAAI,EAAE,CAAC;QACL,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;QAClC,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;QAClC,MAAM,cAAc,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAEhD,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE;YACtD,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG;;;EAGnB,WAAW,GAAG,IAAI,CAAC,GAAG;;;gBAGR,IAAI,CAAC,GAAG;CACvB,CAAC,IAAI,EAAE,CAAC;QACL,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,cAAc,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE;YACtD,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;QACH,MAAM,eAAe,GAAG;;;EAG1B,WAAW,GAAG,IAAI,CAAC,GAAG;cACV,IAAI,CAAC,GAAG;cACR,IAAI,CAAC,GAAG;cACR,IAAI,CAAC,GAAG;cACR,IAAI,CAAC,GAAG;;CAErB,CAAC,IAAI,EAAE,CAAC;QACL,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;QAClC,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;QAClC,MAAM,cAAc,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAEhD,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE;YACtD,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG;;;EAGnB,WAAW,GAAG,IAAI,CAAC,GAAG;;;;CAIvB,CAAC,IAAI,EAAE,CAAC;QACL,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,eAAe,CAAC,CAAC;QAC5D,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CACzB,oCAAoC,eAAe,gCAAgC,CACpF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QAE/D,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE;YACtD,QAAQ,EAAE,EAAE;SACb,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG;;;EAGnB,WAAW,GAAG,IAAI,CAAC,GAAG;YACZ,IAAI,CAAC,GAAG;gBACJ,IAAI,CAAC,GAAG;oBACJ,IAAI,CAAC,GAAG;;CAE3B,CAAC,IAAI,EAAE,CAAC;QACL,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QAE/D,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE;YACtD,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG;;;EAGnB,WAAW,GAAG,IAAI,CAAC,GAAG;YACZ,IAAI,CAAC,GAAG;gBACJ,IAAI,CAAC,GAAG;oBACJ,IAAI,CAAC,GAAG;CAC3B,CAAC,IAAI,EAAE,CAAC;QACL,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,UAAU,CAAC,KAAK,IAAI,EAAE;YACpB,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE;gBACrD,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;YACvE,MAAM,UAAU,CAAC,SAAS,CACxB,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,EACxC,8DAA8D,CAC/D,CAAC;YACF,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;YAClC,MAAM,cAAc,CAAC,cAAc,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;YACjE,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC;YACpC,MAAM,cAAc,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;YAC/C,MAAM,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YAE7C,MAAM,WAAW,GAAG,IAAI,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAC1D,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE;gBACtD,WAAW;aACZ,CAAC,CAAC;YAEH,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YAC/C,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,eAAe,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;YAC1D,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAC7C,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YAC3C,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,UAAU,CAAC,SAAS,CACxB,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,EACxC,aAAa,CACd,CAAC;YACF,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;YAClC,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC;YAEpC,MAAM,WAAW,GAAG,IAAI,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAC1D,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE;gBACtD,WAAW;gBACX,oBAAoB,EAAE;oBACpB,mBAAmB,EAAE,KAAK;oBAC1B,gBAAgB,EAAE,KAAK;iBACxB;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YAC3C,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,UAAU,CAAC,SAAS,CACxB,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,EAC3C,6DAA6D,CAC9D,CAAC;YACF,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;YAClC,MAAM,cAAc,CAAC,cAAc,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;YACjE,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC;YACpC,MAAM,cAAc,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;YAC/C,MAAM,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YAE7C,MAAM,WAAW,GAAG,IAAI,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAC1D,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE;gBACtD,WAAW;aACZ,CAAC,CAAC;YACH,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YAC/C,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,eAAe,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;YAC1D,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;YACvE,MAAM,UAAU,CAAC,SAAS,CACxB,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,EAC3C,6DAA6D,CAC9D,CAAC;YACF,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;YAClC,MAAM,cAAc,CAAC,cAAc,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;YACjE,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC;YACpC,MAAM,cAAc,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;YAC/C,MAAM,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YAE7C,MAAM,WAAW,GAAG,IAAI,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAC1D,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE;gBACtD,WAAW;gBACX,oBAAoB,EAAE;oBACpB,mBAAmB,EAAE,KAAK;oBAC1B,gBAAgB,EAAE,IAAI,EAAE,wCAAwC;iBACjE;aACF,CAAC,CAAC;YACH,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YAC3C,2CAA2C;YAC3C,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,eAAe,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -45,16 +45,13 @@ export class GitIgnoreParser {
|
|
|
45
45
|
this.patterns.push(...patterns);
|
|
46
46
|
}
|
|
47
47
|
isIgnored(filePath) {
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
: filePath;
|
|
48
|
+
const resolved = path.resolve(this.projectRoot, filePath);
|
|
49
|
+
const relativePath = path.relative(this.projectRoot, resolved);
|
|
51
50
|
if (relativePath === '' || relativePath.startsWith('..')) {
|
|
52
51
|
return false;
|
|
53
52
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
normalizedPath = normalizedPath.substring(2);
|
|
57
|
-
}
|
|
53
|
+
// Even in windows, Ignore expects forward slashes.
|
|
54
|
+
const normalizedPath = relativePath.replace(/\\/g, '/');
|
|
58
55
|
return this.ig.ignores(normalizedPath);
|
|
59
56
|
}
|
|
60
57
|
getPatterns() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitIgnoreParser.js","sourceRoot":"","sources":["../../../src/utils/gitIgnoreParser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,MAAuB,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAOhD,MAAM,OAAO,eAAe;IAClB,WAAW,CAAS;IACpB,EAAE,GAAW,MAAM,EAAE,CAAC;IACtB,QAAQ,GAAa,EAAE,CAAC;IAEhC,YAAY,WAAmB;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/C,CAAC;IAED,mBAAmB;QACjB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;YAAE,OAAO;QAE/C,gEAAgE;QAChE,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAE3B,MAAM,YAAY,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;QAC1E,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;YAC9B,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,YAAY,CAAC,gBAAwB;QACnC,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;QACvE,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,wBAAwB;YACxB,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;aAC7B,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAEO,WAAW,CAAC,QAAkB;QACpC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED,SAAS,CAAC,QAAgB;QACxB,MAAM,
|
|
1
|
+
{"version":3,"file":"gitIgnoreParser.js","sourceRoot":"","sources":["../../../src/utils/gitIgnoreParser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,MAAuB,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAOhD,MAAM,OAAO,eAAe;IAClB,WAAW,CAAS;IACpB,EAAE,GAAW,MAAM,EAAE,CAAC;IACtB,QAAQ,GAAa,EAAE,CAAC;IAEhC,YAAY,WAAmB;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/C,CAAC;IAED,mBAAmB;QACjB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;YAAE,OAAO;QAE/C,gEAAgE;QAChE,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAE3B,MAAM,YAAY,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;QAC1E,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;YAC9B,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,YAAY,CAAC,gBAAwB;QACnC,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;QACvE,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,wBAAwB;YACxB,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;aAC7B,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAEO,WAAW,CAAC,QAAkB;QACpC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED,SAAS,CAAC,QAAgB;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAE/D,IAAI,YAAY,KAAK,EAAE,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,mDAAmD;QACnD,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACzC,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF"}
|