@google/gemini-cli-core 0.1.16 → 0.1.17-nightly.250806.805114ae
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 +1 -1
- package/dist/google-gemini-cli-core-0.1.17.tgz +0 -0
- package/dist/src/config/config.d.ts +5 -4
- package/dist/src/config/config.js +43 -12
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +60 -2
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/flashFallback.test.js +0 -4
- package/dist/src/config/flashFallback.test.js.map +1 -1
- package/dist/src/core/coreToolScheduler.d.ts +2 -0
- package/dist/src/core/coreToolScheduler.js +3 -1
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +4 -0
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/ide/detect-ide.js +6 -3
- package/dist/src/ide/detect-ide.js.map +1 -1
- package/dist/src/ide/ide-client.d.ts +8 -11
- package/dist/src/ide/ide-client.js +55 -58
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/ide/ide-installer.d.ts +0 -1
- package/dist/src/ide/ide-installer.js +5 -7
- package/dist/src/ide/ide-installer.js.map +1 -1
- package/dist/src/ide/ide-installer.test.js +1 -24
- package/dist/src/ide/ide-installer.test.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/oauth-provider.d.ts +1 -0
- package/dist/src/mcp/oauth-provider.js +14 -1
- package/dist/src/mcp/oauth-provider.js.map +1 -1
- package/dist/src/mcp/oauth-provider.test.js +87 -6
- package/dist/src/mcp/oauth-provider.test.js.map +1 -1
- package/dist/src/prompts/prompt-registry.d.ts +8 -0
- package/dist/src/prompts/prompt-registry.js +16 -0
- package/dist/src/prompts/prompt-registry.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 +14 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +2 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +5 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/constants.d.ts +1 -0
- package/dist/src/telemetry/constants.js +1 -0
- package/dist/src/telemetry/constants.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +2 -1
- package/dist/src/telemetry/loggers.js +17 -1
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/telemetry.test.js +0 -2
- package/dist/src/telemetry/telemetry.test.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +11 -1
- package/dist/src/telemetry/types.js +15 -0
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/tools/mcp-client.d.ts +1 -1
- package/dist/src/tools/mcp-client.js +32 -17
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +35 -9
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/mcp-tool.js +104 -45
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/mcp-tool.test.js +280 -2
- package/dist/src/tools/mcp-tool.test.js.map +1 -1
- package/dist/src/tools/modifiable-tool.d.ts +1 -1
- package/dist/src/tools/modifiable-tool.js +2 -2
- package/dist/src/tools/modifiable-tool.js.map +1 -1
- package/dist/src/tools/modifiable-tool.test.js +9 -9
- package/dist/src/tools/modifiable-tool.test.js.map +1 -1
- package/dist/src/tools/read-many-files.js +78 -34
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/read-many-files.test.js +96 -0
- package/dist/src/tools/read-many-files.test.js.map +1 -1
- package/dist/src/tools/tool-registry.d.ts +1 -0
- package/dist/src/tools/tool-registry.js +12 -10
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tool-registry.test.js +6 -4
- package/dist/src/tools/tool-registry.test.js.map +1 -1
- package/dist/src/tools/write-file.js +2 -2
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +20 -0
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/utils/editor.d.ts +1 -1
- package/dist/src/utils/editor.js +13 -5
- package/dist/src/utils/editor.js.map +1 -1
- package/dist/src/utils/editor.test.js +38 -6
- package/dist/src/utils/editor.test.js.map +1 -1
- package/dist/src/utils/fileUtils.js +1 -1
- package/dist/src/utils/fileUtils.js.map +1 -1
- package/dist/src/utils/fileUtils.test.js +13 -0
- package/dist/src/utils/fileUtils.test.js.map +1 -1
- package/dist/src/utils/filesearch/crawlCache.d.ts +25 -0
- package/dist/src/utils/filesearch/crawlCache.js +54 -0
- package/dist/src/utils/filesearch/crawlCache.js.map +1 -0
- package/dist/src/utils/filesearch/crawlCache.test.d.ts +6 -0
- package/dist/src/utils/filesearch/crawlCache.test.js +93 -0
- package/dist/src/utils/filesearch/crawlCache.test.js.map +1 -0
- package/dist/src/utils/filesearch/fileSearch.d.ts +79 -0
- package/dist/src/utils/filesearch/fileSearch.js +216 -0
- package/dist/src/utils/filesearch/fileSearch.js.map +1 -0
- package/dist/src/utils/filesearch/fileSearch.test.d.ts +6 -0
- package/dist/src/utils/filesearch/fileSearch.test.js +515 -0
- package/dist/src/utils/filesearch/fileSearch.test.js.map +1 -0
- package/dist/src/utils/filesearch/ignore.d.ts +35 -0
- package/dist/src/utils/filesearch/ignore.js +81 -0
- package/dist/src/utils/filesearch/ignore.js.map +1 -0
- package/dist/src/utils/filesearch/ignore.test.d.ts +6 -0
- package/dist/src/utils/filesearch/ignore.test.js +57 -0
- package/dist/src/utils/filesearch/ignore.test.js.map +1 -0
- package/dist/src/utils/filesearch/result-cache.d.ts +34 -0
- package/dist/src/utils/filesearch/result-cache.js +61 -0
- package/dist/src/utils/filesearch/result-cache.js.map +1 -0
- package/dist/src/utils/filesearch/result-cache.test.d.ts +6 -0
- package/dist/src/utils/filesearch/result-cache.test.js +47 -0
- package/dist/src/utils/filesearch/result-cache.test.js.map +1 -0
- package/dist/src/utils/flashFallback.integration.test.js +0 -2
- package/dist/src/utils/flashFallback.integration.test.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.d.ts +1 -1
- package/dist/src/utils/memoryDiscovery.js +18 -6
- package/dist/src/utils/memoryDiscovery.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.test.js +30 -71
- package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
- package/dist/src/utils/paths.d.ts +11 -2
- package/dist/src/utils/paths.js +24 -7
- package/dist/src/utils/paths.js.map +1 -1
- package/dist/src/utils/paths.test.d.ts +6 -0
- package/dist/src/utils/paths.test.js +153 -0
- package/dist/src/utils/paths.test.js.map +1 -0
- package/dist/src/utils/workspaceContext.d.ts +4 -0
- package/dist/src/utils/workspaceContext.js +33 -0
- package/dist/src/utils/workspaceContext.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -1
- package/dist/google-gemini-cli-core-0.1.15.tgz +0 -0
|
@@ -5,6 +5,12 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export declare const GEMINI_DIR = ".gemini";
|
|
7
7
|
export declare const GOOGLE_ACCOUNTS_FILENAME = "google_accounts.json";
|
|
8
|
+
/**
|
|
9
|
+
* Special characters that need to be escaped in file paths for shell compatibility.
|
|
10
|
+
* Includes: spaces, parentheses, brackets, braces, semicolons, ampersands, pipes,
|
|
11
|
+
* asterisks, question marks, dollar signs, backticks, quotes, hash, and other shell metacharacters.
|
|
12
|
+
*/
|
|
13
|
+
export declare const SHELL_SPECIAL_CHARS: RegExp;
|
|
8
14
|
/**
|
|
9
15
|
* Replaces the home directory with a tilde.
|
|
10
16
|
* @param path - The path to tildeify.
|
|
@@ -27,11 +33,14 @@ export declare function shortenPath(filePath: string, maxLen?: number): string;
|
|
|
27
33
|
*/
|
|
28
34
|
export declare function makeRelative(targetPath: string, rootDirectory: string): string;
|
|
29
35
|
/**
|
|
30
|
-
* Escapes
|
|
36
|
+
* Escapes special characters in a file path like macOS terminal does.
|
|
37
|
+
* Escapes: spaces, parentheses, brackets, braces, semicolons, ampersands, pipes,
|
|
38
|
+
* asterisks, question marks, dollar signs, backticks, quotes, hash, and other shell metacharacters.
|
|
31
39
|
*/
|
|
32
40
|
export declare function escapePath(filePath: string): string;
|
|
33
41
|
/**
|
|
34
|
-
* Unescapes
|
|
42
|
+
* Unescapes special characters in a file path.
|
|
43
|
+
* Removes backslash escaping from shell metacharacters.
|
|
35
44
|
*/
|
|
36
45
|
export declare function unescapePath(filePath: string): string;
|
|
37
46
|
/**
|
package/dist/src/utils/paths.js
CHANGED
|
@@ -10,6 +10,12 @@ export const GEMINI_DIR = '.gemini';
|
|
|
10
10
|
export const GOOGLE_ACCOUNTS_FILENAME = 'google_accounts.json';
|
|
11
11
|
const TMP_DIR_NAME = 'tmp';
|
|
12
12
|
const COMMANDS_DIR_NAME = 'commands';
|
|
13
|
+
/**
|
|
14
|
+
* Special characters that need to be escaped in file paths for shell compatibility.
|
|
15
|
+
* Includes: spaces, parentheses, brackets, braces, semicolons, ampersands, pipes,
|
|
16
|
+
* asterisks, question marks, dollar signs, backticks, quotes, hash, and other shell metacharacters.
|
|
17
|
+
*/
|
|
18
|
+
export const SHELL_SPECIAL_CHARS = /[ \t()[\]{};|*?$`'"#&<>!~]/;
|
|
13
19
|
/**
|
|
14
20
|
* Replaces the home directory with a tilde.
|
|
15
21
|
* @param path - The path to tildeify.
|
|
@@ -97,26 +103,37 @@ export function makeRelative(targetPath, rootDirectory) {
|
|
|
97
103
|
return relativePath || '.';
|
|
98
104
|
}
|
|
99
105
|
/**
|
|
100
|
-
* Escapes
|
|
106
|
+
* Escapes special characters in a file path like macOS terminal does.
|
|
107
|
+
* Escapes: spaces, parentheses, brackets, braces, semicolons, ampersands, pipes,
|
|
108
|
+
* asterisks, question marks, dollar signs, backticks, quotes, hash, and other shell metacharacters.
|
|
101
109
|
*/
|
|
102
110
|
export function escapePath(filePath) {
|
|
103
111
|
let result = '';
|
|
104
112
|
for (let i = 0; i < filePath.length; i++) {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
113
|
+
const char = filePath[i];
|
|
114
|
+
// Count consecutive backslashes before this character
|
|
115
|
+
let backslashCount = 0;
|
|
116
|
+
for (let j = i - 1; j >= 0 && filePath[j] === '\\'; j--) {
|
|
117
|
+
backslashCount++;
|
|
118
|
+
}
|
|
119
|
+
// Character is already escaped if there's an odd number of backslashes before it
|
|
120
|
+
const isAlreadyEscaped = backslashCount % 2 === 1;
|
|
121
|
+
// Only escape if not already escaped
|
|
122
|
+
if (!isAlreadyEscaped && SHELL_SPECIAL_CHARS.test(char)) {
|
|
123
|
+
result += '\\' + char;
|
|
108
124
|
}
|
|
109
125
|
else {
|
|
110
|
-
result +=
|
|
126
|
+
result += char;
|
|
111
127
|
}
|
|
112
128
|
}
|
|
113
129
|
return result;
|
|
114
130
|
}
|
|
115
131
|
/**
|
|
116
|
-
* Unescapes
|
|
132
|
+
* Unescapes special characters in a file path.
|
|
133
|
+
* Removes backslash escaping from shell metacharacters.
|
|
117
134
|
*/
|
|
118
135
|
export function unescapePath(filePath) {
|
|
119
|
-
return filePath.replace(
|
|
136
|
+
return filePath.replace(new RegExp(`\\\\([${SHELL_SPECIAL_CHARS.source.slice(1, -1)}])`, 'g'), '$1');
|
|
120
137
|
}
|
|
121
138
|
/**
|
|
122
139
|
* Generates a unique hash for a project based on its root path.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/utils/paths.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/utils/paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { describe, it, expect } from 'vitest';
|
|
7
|
+
import { escapePath, unescapePath } from './paths.js';
|
|
8
|
+
describe('escapePath', () => {
|
|
9
|
+
it('should escape spaces', () => {
|
|
10
|
+
expect(escapePath('my file.txt')).toBe('my\\ file.txt');
|
|
11
|
+
});
|
|
12
|
+
it('should escape tabs', () => {
|
|
13
|
+
expect(escapePath('file\twith\ttabs.txt')).toBe('file\\\twith\\\ttabs.txt');
|
|
14
|
+
});
|
|
15
|
+
it('should escape parentheses', () => {
|
|
16
|
+
expect(escapePath('file(1).txt')).toBe('file\\(1\\).txt');
|
|
17
|
+
});
|
|
18
|
+
it('should escape square brackets', () => {
|
|
19
|
+
expect(escapePath('file[backup].txt')).toBe('file\\[backup\\].txt');
|
|
20
|
+
});
|
|
21
|
+
it('should escape curly braces', () => {
|
|
22
|
+
expect(escapePath('file{temp}.txt')).toBe('file\\{temp\\}.txt');
|
|
23
|
+
});
|
|
24
|
+
it('should escape semicolons', () => {
|
|
25
|
+
expect(escapePath('file;name.txt')).toBe('file\\;name.txt');
|
|
26
|
+
});
|
|
27
|
+
it('should escape ampersands', () => {
|
|
28
|
+
expect(escapePath('file&name.txt')).toBe('file\\&name.txt');
|
|
29
|
+
});
|
|
30
|
+
it('should escape pipes', () => {
|
|
31
|
+
expect(escapePath('file|name.txt')).toBe('file\\|name.txt');
|
|
32
|
+
});
|
|
33
|
+
it('should escape asterisks', () => {
|
|
34
|
+
expect(escapePath('file*.txt')).toBe('file\\*.txt');
|
|
35
|
+
});
|
|
36
|
+
it('should escape question marks', () => {
|
|
37
|
+
expect(escapePath('file?.txt')).toBe('file\\?.txt');
|
|
38
|
+
});
|
|
39
|
+
it('should escape dollar signs', () => {
|
|
40
|
+
expect(escapePath('file$name.txt')).toBe('file\\$name.txt');
|
|
41
|
+
});
|
|
42
|
+
it('should escape backticks', () => {
|
|
43
|
+
expect(escapePath('file`name.txt')).toBe('file\\`name.txt');
|
|
44
|
+
});
|
|
45
|
+
it('should escape single quotes', () => {
|
|
46
|
+
expect(escapePath("file'name.txt")).toBe("file\\'name.txt");
|
|
47
|
+
});
|
|
48
|
+
it('should escape double quotes', () => {
|
|
49
|
+
expect(escapePath('file"name.txt')).toBe('file\\"name.txt');
|
|
50
|
+
});
|
|
51
|
+
it('should escape hash symbols', () => {
|
|
52
|
+
expect(escapePath('file#name.txt')).toBe('file\\#name.txt');
|
|
53
|
+
});
|
|
54
|
+
it('should escape exclamation marks', () => {
|
|
55
|
+
expect(escapePath('file!name.txt')).toBe('file\\!name.txt');
|
|
56
|
+
});
|
|
57
|
+
it('should escape tildes', () => {
|
|
58
|
+
expect(escapePath('file~name.txt')).toBe('file\\~name.txt');
|
|
59
|
+
});
|
|
60
|
+
it('should escape less than and greater than signs', () => {
|
|
61
|
+
expect(escapePath('file<name>.txt')).toBe('file\\<name\\>.txt');
|
|
62
|
+
});
|
|
63
|
+
it('should handle multiple special characters', () => {
|
|
64
|
+
expect(escapePath('my file (backup) [v1.2].txt')).toBe('my\\ file\\ \\(backup\\)\\ \\[v1.2\\].txt');
|
|
65
|
+
});
|
|
66
|
+
it('should not double-escape already escaped characters', () => {
|
|
67
|
+
expect(escapePath('my\\ file.txt')).toBe('my\\ file.txt');
|
|
68
|
+
expect(escapePath('file\\(name\\).txt')).toBe('file\\(name\\).txt');
|
|
69
|
+
});
|
|
70
|
+
it('should handle escaped backslashes correctly', () => {
|
|
71
|
+
// Double backslash (escaped backslash) followed by space should escape the space
|
|
72
|
+
expect(escapePath('path\\\\ file.txt')).toBe('path\\\\\\ file.txt');
|
|
73
|
+
// Triple backslash (escaped backslash + escaping backslash) followed by space should not double-escape
|
|
74
|
+
expect(escapePath('path\\\\\\ file.txt')).toBe('path\\\\\\ file.txt');
|
|
75
|
+
// Quadruple backslash (two escaped backslashes) followed by space should escape the space
|
|
76
|
+
expect(escapePath('path\\\\\\\\ file.txt')).toBe('path\\\\\\\\\\ file.txt');
|
|
77
|
+
});
|
|
78
|
+
it('should handle complex escaped backslash scenarios', () => {
|
|
79
|
+
// Escaped backslash before special character that needs escaping
|
|
80
|
+
expect(escapePath('file\\\\(test).txt')).toBe('file\\\\\\(test\\).txt');
|
|
81
|
+
// Multiple escaped backslashes
|
|
82
|
+
expect(escapePath('path\\\\\\\\with space.txt')).toBe('path\\\\\\\\with\\ space.txt');
|
|
83
|
+
});
|
|
84
|
+
it('should handle paths without special characters', () => {
|
|
85
|
+
expect(escapePath('normalfile.txt')).toBe('normalfile.txt');
|
|
86
|
+
expect(escapePath('path/to/normalfile.txt')).toBe('path/to/normalfile.txt');
|
|
87
|
+
});
|
|
88
|
+
it('should handle complex real-world examples', () => {
|
|
89
|
+
expect(escapePath('My Documents/Project (2024)/file [backup].txt')).toBe('My\\ Documents/Project\\ \\(2024\\)/file\\ \\[backup\\].txt');
|
|
90
|
+
expect(escapePath('file with $special &chars!.txt')).toBe('file\\ with\\ \\$special\\ \\&chars\\!.txt');
|
|
91
|
+
});
|
|
92
|
+
it('should handle empty strings', () => {
|
|
93
|
+
expect(escapePath('')).toBe('');
|
|
94
|
+
});
|
|
95
|
+
it('should handle paths with only special characters', () => {
|
|
96
|
+
expect(escapePath(' ()[]{};&|*?$`\'"#!~<>')).toBe('\\ \\(\\)\\[\\]\\{\\}\\;\\&\\|\\*\\?\\$\\`\\\'\\"\\#\\!\\~\\<\\>');
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
describe('unescapePath', () => {
|
|
100
|
+
it('should unescape spaces', () => {
|
|
101
|
+
expect(unescapePath('my\\ file.txt')).toBe('my file.txt');
|
|
102
|
+
});
|
|
103
|
+
it('should unescape tabs', () => {
|
|
104
|
+
expect(unescapePath('file\\\twith\\\ttabs.txt')).toBe('file\twith\ttabs.txt');
|
|
105
|
+
});
|
|
106
|
+
it('should unescape parentheses', () => {
|
|
107
|
+
expect(unescapePath('file\\(1\\).txt')).toBe('file(1).txt');
|
|
108
|
+
});
|
|
109
|
+
it('should unescape square brackets', () => {
|
|
110
|
+
expect(unescapePath('file\\[backup\\].txt')).toBe('file[backup].txt');
|
|
111
|
+
});
|
|
112
|
+
it('should unescape curly braces', () => {
|
|
113
|
+
expect(unescapePath('file\\{temp\\}.txt')).toBe('file{temp}.txt');
|
|
114
|
+
});
|
|
115
|
+
it('should unescape multiple special characters', () => {
|
|
116
|
+
expect(unescapePath('my\\ file\\ \\(backup\\)\\ \\[v1.2\\].txt')).toBe('my file (backup) [v1.2].txt');
|
|
117
|
+
});
|
|
118
|
+
it('should handle paths without escaped characters', () => {
|
|
119
|
+
expect(unescapePath('normalfile.txt')).toBe('normalfile.txt');
|
|
120
|
+
expect(unescapePath('path/to/normalfile.txt')).toBe('path/to/normalfile.txt');
|
|
121
|
+
});
|
|
122
|
+
it('should handle all special characters', () => {
|
|
123
|
+
expect(unescapePath('\\ \\(\\)\\[\\]\\{\\}\\;\\&\\|\\*\\?\\$\\`\\\'\\"\\#\\!\\~\\<\\>')).toBe(' ()[]{};&|*?$`\'"#!~<>');
|
|
124
|
+
});
|
|
125
|
+
it('should be the inverse of escapePath', () => {
|
|
126
|
+
const testCases = [
|
|
127
|
+
'my file.txt',
|
|
128
|
+
'file(1).txt',
|
|
129
|
+
'file[backup].txt',
|
|
130
|
+
'My Documents/Project (2024)/file [backup].txt',
|
|
131
|
+
'file with $special &chars!.txt',
|
|
132
|
+
' ()[]{};&|*?$`\'"#!~<>',
|
|
133
|
+
'file\twith\ttabs.txt',
|
|
134
|
+
];
|
|
135
|
+
testCases.forEach((testCase) => {
|
|
136
|
+
expect(unescapePath(escapePath(testCase))).toBe(testCase);
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
it('should handle empty strings', () => {
|
|
140
|
+
expect(unescapePath('')).toBe('');
|
|
141
|
+
});
|
|
142
|
+
it('should not affect backslashes not followed by special characters', () => {
|
|
143
|
+
expect(unescapePath('file\\name.txt')).toBe('file\\name.txt');
|
|
144
|
+
expect(unescapePath('path\\to\\file.txt')).toBe('path\\to\\file.txt');
|
|
145
|
+
});
|
|
146
|
+
it('should handle escaped backslashes in unescaping', () => {
|
|
147
|
+
// Should correctly unescape when there are escaped backslashes
|
|
148
|
+
expect(unescapePath('path\\\\\\ file.txt')).toBe('path\\\\ file.txt');
|
|
149
|
+
expect(unescapePath('path\\\\\\\\\\ file.txt')).toBe('path\\\\\\\\ file.txt');
|
|
150
|
+
expect(unescapePath('file\\\\\\(test\\).txt')).toBe('file\\\\(test).txt');
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
//# sourceMappingURL=paths.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.test.js","sourceRoot":"","sources":["../../../src/utils/paths.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
export declare class WorkspaceContext {
|
|
12
12
|
private directories;
|
|
13
|
+
private initialDirectories;
|
|
13
14
|
/**
|
|
14
15
|
* Creates a new WorkspaceContext with the given initial directory and optional additional directories.
|
|
15
16
|
* @param initialDirectory The initial working directory (usually cwd)
|
|
@@ -26,11 +27,14 @@ export declare class WorkspaceContext {
|
|
|
26
27
|
* Internal method to add a directory with validation.
|
|
27
28
|
*/
|
|
28
29
|
private addDirectoryInternal;
|
|
30
|
+
private addInitialDirectoryInternal;
|
|
29
31
|
/**
|
|
30
32
|
* Gets a copy of all workspace directories.
|
|
31
33
|
* @returns Array of absolute directory paths
|
|
32
34
|
*/
|
|
33
35
|
getDirectories(): readonly string[];
|
|
36
|
+
getInitialDirectories(): readonly string[];
|
|
37
|
+
setDirectories(directories: readonly string[]): void;
|
|
34
38
|
/**
|
|
35
39
|
* Checks if a given path is within any of the workspace directories.
|
|
36
40
|
* @param pathToCheck The path to validate
|
|
@@ -12,6 +12,7 @@ import * as path from 'path';
|
|
|
12
12
|
*/
|
|
13
13
|
export class WorkspaceContext {
|
|
14
14
|
directories;
|
|
15
|
+
initialDirectories;
|
|
15
16
|
/**
|
|
16
17
|
* Creates a new WorkspaceContext with the given initial directory and optional additional directories.
|
|
17
18
|
* @param initialDirectory The initial working directory (usually cwd)
|
|
@@ -19,9 +20,12 @@ export class WorkspaceContext {
|
|
|
19
20
|
*/
|
|
20
21
|
constructor(initialDirectory, additionalDirectories = []) {
|
|
21
22
|
this.directories = new Set();
|
|
23
|
+
this.initialDirectories = new Set();
|
|
22
24
|
this.addDirectoryInternal(initialDirectory);
|
|
25
|
+
this.addInitialDirectoryInternal(initialDirectory);
|
|
23
26
|
for (const dir of additionalDirectories) {
|
|
24
27
|
this.addDirectoryInternal(dir);
|
|
28
|
+
this.addInitialDirectoryInternal(dir);
|
|
25
29
|
}
|
|
26
30
|
}
|
|
27
31
|
/**
|
|
@@ -55,6 +59,26 @@ export class WorkspaceContext {
|
|
|
55
59
|
}
|
|
56
60
|
this.directories.add(realPath);
|
|
57
61
|
}
|
|
62
|
+
addInitialDirectoryInternal(directory, basePath = process.cwd()) {
|
|
63
|
+
const absolutePath = path.isAbsolute(directory)
|
|
64
|
+
? directory
|
|
65
|
+
: path.resolve(basePath, directory);
|
|
66
|
+
if (!fs.existsSync(absolutePath)) {
|
|
67
|
+
throw new Error(`Directory does not exist: ${absolutePath}`);
|
|
68
|
+
}
|
|
69
|
+
const stats = fs.statSync(absolutePath);
|
|
70
|
+
if (!stats.isDirectory()) {
|
|
71
|
+
throw new Error(`Path is not a directory: ${absolutePath}`);
|
|
72
|
+
}
|
|
73
|
+
let realPath;
|
|
74
|
+
try {
|
|
75
|
+
realPath = fs.realpathSync(absolutePath);
|
|
76
|
+
}
|
|
77
|
+
catch (_error) {
|
|
78
|
+
throw new Error(`Failed to resolve path: ${absolutePath}`);
|
|
79
|
+
}
|
|
80
|
+
this.initialDirectories.add(realPath);
|
|
81
|
+
}
|
|
58
82
|
/**
|
|
59
83
|
* Gets a copy of all workspace directories.
|
|
60
84
|
* @returns Array of absolute directory paths
|
|
@@ -62,6 +86,15 @@ export class WorkspaceContext {
|
|
|
62
86
|
getDirectories() {
|
|
63
87
|
return Array.from(this.directories);
|
|
64
88
|
}
|
|
89
|
+
getInitialDirectories() {
|
|
90
|
+
return Array.from(this.initialDirectories);
|
|
91
|
+
}
|
|
92
|
+
setDirectories(directories) {
|
|
93
|
+
this.directories.clear();
|
|
94
|
+
for (const dir of directories) {
|
|
95
|
+
this.addDirectoryInternal(dir);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
65
98
|
/**
|
|
66
99
|
* Checks if a given path is within any of the workspace directories.
|
|
67
100
|
* @param pathToCheck The path to validate
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspaceContext.js","sourceRoot":"","sources":["../../../src/utils/workspaceContext.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B;;;;GAIG;AACH,MAAM,OAAO,gBAAgB;IACnB,WAAW,CAAc;
|
|
1
|
+
{"version":3,"file":"workspaceContext.js","sourceRoot":"","sources":["../../../src/utils/workspaceContext.ts"],"names":[],"mappings":"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"}
|