@vybestack/llxprt-code 0.3.4 → 0.4.1-nightly.250922.4a350bed
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 +3 -0
- package/dist/package.json +7 -6
- package/dist/src/auth/anthropic-oauth-provider.d.ts +4 -0
- package/dist/src/auth/anthropic-oauth-provider.js +14 -0
- package/dist/src/auth/anthropic-oauth-provider.js.map +1 -1
- package/dist/src/auth/gemini-oauth-provider.d.ts +7 -1
- package/dist/src/auth/gemini-oauth-provider.js +39 -8
- package/dist/src/auth/gemini-oauth-provider.js.map +1 -1
- package/dist/src/auth/qwen-oauth-provider.d.ts +5 -1
- package/dist/src/auth/qwen-oauth-provider.js +6 -0
- package/dist/src/auth/qwen-oauth-provider.js.map +1 -1
- package/dist/src/commands/extensions/examples/context/LLXPRT.md +8 -0
- package/dist/src/commands/extensions/examples/context/llxprt-extension.json +5 -0
- package/dist/src/commands/extensions/examples/custom-commands/commands/fs/grep-code.toml +6 -0
- package/dist/src/commands/extensions/examples/custom-commands/llxprt-extension.json +4 -0
- package/dist/src/commands/extensions/examples/exclude-tools/llxprt-extension.json +5 -0
- package/dist/src/commands/extensions/examples/mcp-server/example.d.ts +6 -0
- package/dist/src/commands/extensions/examples/mcp-server/example.js +46 -0
- package/dist/src/commands/extensions/examples/mcp-server/example.js.map +1 -0
- package/dist/src/commands/extensions/examples/mcp-server/example.ts +60 -0
- package/dist/src/commands/extensions/examples/mcp-server/llxprt-extension.json +10 -0
- package/dist/src/commands/extensions/install.js +35 -7
- package/dist/src/commands/extensions/install.js.map +1 -1
- package/dist/src/commands/extensions/install.test.js +20 -2
- package/dist/src/commands/extensions/install.test.js.map +1 -1
- package/dist/src/commands/extensions/link.d.ts +12 -0
- package/dist/src/commands/extensions/link.js +37 -0
- package/dist/src/commands/extensions/link.js.map +1 -0
- package/dist/src/commands/extensions/new.d.ts +7 -0
- package/dist/src/commands/extensions/new.js +70 -0
- package/dist/src/commands/extensions/new.js.map +1 -0
- package/dist/src/commands/extensions/new.test.d.ts +6 -0
- package/dist/src/commands/extensions/new.test.js +50 -0
- package/dist/src/commands/extensions/new.test.js.map +1 -0
- package/dist/src/commands/extensions/update.d.ts +2 -1
- package/dist/src/commands/extensions/update.js +40 -13
- package/dist/src/commands/extensions/update.js.map +1 -1
- package/dist/src/commands/extensions.js +4 -0
- package/dist/src/commands/extensions.js.map +1 -1
- package/dist/src/commands/mcp/add.js +1 -1
- package/dist/src/commands/mcp/add.js.map +1 -1
- package/dist/src/commands/mcp/list.js +2 -2
- package/dist/src/commands/mcp/list.js.map +1 -1
- package/dist/src/commands/mcp/remove.js +1 -1
- package/dist/src/commands/mcp/remove.js.map +1 -1
- package/dist/src/config/auth.d.ts +1 -1
- package/dist/src/config/auth.js +6 -13
- package/dist/src/config/auth.js.map +1 -1
- package/dist/src/config/auth.test.js +13 -7
- package/dist/src/config/auth.test.js.map +1 -1
- package/dist/src/config/config.d.ts +4 -1
- package/dist/src/config/config.js +47 -23
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/extension.d.ts +8 -5
- package/dist/src/config/extension.js +76 -24
- package/dist/src/config/extension.js.map +1 -1
- package/dist/src/config/keyBindings.d.ts +1 -0
- package/dist/src/config/keyBindings.js +6 -25
- package/dist/src/config/keyBindings.js.map +1 -1
- package/dist/src/config/settings.d.ts +4 -4
- package/dist/src/config/settings.js +101 -68
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/config/settingsSchema.d.ts +252 -3
- package/dist/src/config/settingsSchema.js +248 -3
- package/dist/src/config/settingsSchema.js.map +1 -1
- package/dist/src/config/trustedFolders.d.ts +14 -3
- package/dist/src/config/trustedFolders.js +63 -37
- package/dist/src/config/trustedFolders.js.map +1 -1
- package/dist/src/config/trustedFolders.test.js +84 -9
- package/dist/src/config/trustedFolders.test.js.map +1 -1
- package/dist/src/gemini.js +74 -18
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/gemini.test.js +7 -23
- package/dist/src/gemini.test.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +1 -1
- package/dist/src/generated/git-commit.js +1 -1
- package/dist/src/nonInteractiveCli.js +32 -2
- package/dist/src/nonInteractiveCli.js.map +1 -1
- package/dist/src/providers/providerManagerInstance.d.ts +2 -1
- package/dist/src/providers/providerManagerInstance.js +27 -5
- package/dist/src/providers/providerManagerInstance.js.map +1 -1
- package/dist/src/services/FileCommandLoader.d.ts +2 -0
- package/dist/src/services/FileCommandLoader.js +7 -0
- package/dist/src/services/FileCommandLoader.js.map +1 -1
- package/dist/src/ui/App.js +104 -52
- package/dist/src/ui/App.js.map +1 -1
- package/dist/src/ui/commands/directoryCommand.js +1 -1
- package/dist/src/ui/commands/directoryCommand.js.map +1 -1
- package/dist/src/ui/commands/memoryCommand.js +1 -1
- package/dist/src/ui/commands/memoryCommand.js.map +1 -1
- package/dist/src/ui/commands/providerCommand.js +21 -8
- package/dist/src/ui/commands/providerCommand.js.map +1 -1
- package/dist/src/ui/components/AuthDialog.test.js +13 -13
- package/dist/src/ui/components/AuthDialog.test.js.map +1 -1
- package/dist/src/ui/components/FolderTrustDialog.js +5 -3
- package/dist/src/ui/components/FolderTrustDialog.js.map +1 -1
- package/dist/src/ui/components/FolderTrustDialog.test.js +21 -6
- package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -1
- package/dist/src/ui/components/Footer.d.ts +3 -0
- package/dist/src/ui/components/Footer.js +4 -4
- package/dist/src/ui/components/Footer.js.map +1 -1
- package/dist/src/ui/components/GeminiRespondingSpinner.js +5 -3
- package/dist/src/ui/components/GeminiRespondingSpinner.js.map +1 -1
- package/dist/src/ui/components/InputPrompt.d.ts +2 -2
- package/dist/src/ui/components/InputPrompt.js +35 -25
- package/dist/src/ui/components/InputPrompt.js.map +1 -1
- package/dist/src/ui/components/MemoryUsageDisplay.js +1 -1
- package/dist/src/ui/components/MemoryUsageDisplay.js.map +1 -1
- package/dist/src/ui/components/ProQuotaDialog.d.ts +13 -0
- package/dist/src/ui/components/ProQuotaDialog.js +22 -0
- package/dist/src/ui/components/ProQuotaDialog.js.map +1 -0
- package/dist/src/ui/components/ProQuotaDialog.test.d.ts +6 -0
- package/dist/src/ui/components/ProQuotaDialog.test.js +57 -0
- package/dist/src/ui/components/ProQuotaDialog.test.js.map +1 -0
- package/dist/src/ui/components/SettingsDialog.test.js +2 -2
- package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
- package/dist/src/ui/components/ShellConfirmationDialog.js +7 -1
- package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -1
- package/dist/src/ui/components/TodoPanel.js +75 -10
- package/dist/src/ui/components/TodoPanel.js.map +1 -1
- package/dist/src/ui/components/messages/CompressionMessage.js +1 -1
- package/dist/src/ui/components/messages/CompressionMessage.js.map +1 -1
- package/dist/src/ui/components/messages/DiffRenderer.js +5 -1
- package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -1
- package/dist/src/ui/components/messages/GeminiMessage.js +1 -1
- package/dist/src/ui/components/messages/GeminiMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +0 -8
- package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +1 -1
- package/dist/src/ui/components/messages/ToolMessage.js +2 -1
- package/dist/src/ui/components/messages/ToolMessage.js.map +1 -1
- package/dist/src/ui/components/messages/UserMessage.js +1 -1
- package/dist/src/ui/components/messages/UserMessage.js.map +1 -1
- package/dist/src/ui/components/shared/MaxSizedBox.js.map +1 -1
- package/dist/src/ui/components/shared/RadioButtonSelect.js +1 -1
- package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
- package/dist/src/ui/components/shared/RadioButtonSelect.test.js +2 -2
- package/dist/src/ui/components/shared/RadioButtonSelect.test.js.map +1 -1
- package/dist/src/ui/components/shared/text-buffer.js +35 -51
- package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
- package/dist/src/ui/constants.d.ts +8 -2
- package/dist/src/ui/constants.js +9 -2
- package/dist/src/ui/constants.js.map +1 -1
- package/dist/src/ui/containers/SessionController.js +1 -1
- package/dist/src/ui/containers/SessionController.js.map +1 -1
- package/dist/src/ui/containers/SessionController.test.js +1 -0
- package/dist/src/ui/containers/SessionController.test.js.map +1 -1
- package/dist/src/ui/contexts/KeypressContext.js +255 -42
- package/dist/src/ui/contexts/KeypressContext.js.map +1 -1
- package/dist/src/ui/contexts/KeypressContext.test.js +115 -1
- package/dist/src/ui/contexts/KeypressContext.test.js.map +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.js +3 -1
- package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/useFolderTrust.js +6 -3
- package/dist/src/ui/hooks/useFolderTrust.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.d.ts +2 -1
- package/dist/src/ui/hooks/useGeminiStream.integration.test.js +1 -1
- package/dist/src/ui/hooks/useGeminiStream.integration.test.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.js +170 -35
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useIdeTrustListener.d.ts +15 -0
- package/dist/src/ui/hooks/useIdeTrustListener.js +37 -0
- package/dist/src/ui/hooks/useIdeTrustListener.js.map +1 -0
- package/dist/src/ui/hooks/useInputHistoryStore.d.ts +19 -0
- package/dist/src/ui/hooks/useInputHistoryStore.js +81 -0
- package/dist/src/ui/hooks/useInputHistoryStore.js.map +1 -0
- package/dist/src/ui/hooks/useInputHistoryStore.test.d.ts +6 -0
- package/dist/src/ui/hooks/useInputHistoryStore.test.js +234 -0
- package/dist/src/ui/hooks/useInputHistoryStore.test.js.map +1 -0
- package/dist/src/ui/hooks/useLoadingIndicator.d.ts +1 -1
- package/dist/src/ui/hooks/useLoadingIndicator.js +2 -2
- package/dist/src/ui/hooks/useLoadingIndicator.js.map +1 -1
- package/dist/src/ui/hooks/useLoadingIndicator.test.d.ts +6 -0
- package/dist/src/ui/hooks/useLoadingIndicator.test.js +102 -0
- package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +1 -0
- package/dist/src/ui/hooks/usePhraseCycler.d.ts +1 -1
- package/dist/src/ui/hooks/usePhraseCycler.js +25 -17
- package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -1
- package/dist/src/ui/hooks/usePrivacySettings.d.ts +1 -1
- package/dist/src/ui/hooks/usePrivacySettings.js +20 -13
- package/dist/src/ui/hooks/usePrivacySettings.js.map +1 -1
- package/dist/src/ui/hooks/usePrivacySettings.test.js +52 -105
- package/dist/src/ui/hooks/usePrivacySettings.test.js.map +1 -1
- package/dist/src/ui/hooks/useTerminalSize.js +22 -8
- package/dist/src/ui/hooks/useTerminalSize.js.map +1 -1
- package/dist/src/ui/hooks/useToolScheduler.test.js +57 -70
- package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
- package/dist/src/ui/keyMatchers.test.js +9 -0
- package/dist/src/ui/keyMatchers.test.js.map +1 -1
- package/dist/src/ui/textConstants.d.ts +9 -0
- package/dist/src/ui/textConstants.js +10 -0
- package/dist/src/ui/textConstants.js.map +1 -0
- package/dist/src/ui/utils/MarkdownDisplay.test.js +2 -2
- package/dist/src/ui/utils/MarkdownDisplay.test.js.map +1 -1
- package/dist/src/ui/utils/highlight.d.ts +10 -0
- package/dist/src/ui/utils/highlight.js +41 -0
- package/dist/src/ui/utils/highlight.js.map +1 -0
- package/dist/src/ui/utils/highlight.test.d.ts +6 -0
- package/dist/src/ui/utils/highlight.test.js +93 -0
- package/dist/src/ui/utils/highlight.test.js.map +1 -0
- package/dist/src/ui/utils/platformConstants.d.ts +24 -1
- package/dist/src/ui/utils/platformConstants.js +26 -1
- package/dist/src/ui/utils/platformConstants.js.map +1 -1
- package/dist/src/utils/envVarResolver.d.ts +39 -0
- package/dist/src/utils/envVarResolver.js +97 -0
- package/dist/src/utils/envVarResolver.js.map +1 -0
- package/dist/src/utils/envVarResolver.test.d.ts +6 -0
- package/dist/src/utils/envVarResolver.test.js +221 -0
- package/dist/src/utils/envVarResolver.test.js.map +1 -0
- package/dist/src/utils/errors.d.ts +9 -0
- package/dist/src/utils/errors.js +18 -0
- package/dist/src/utils/errors.js.map +1 -0
- package/dist/src/utils/userStartupWarnings.d.ts +1 -1
- package/dist/src/utils/userStartupWarnings.js +1 -1
- package/dist/src/utils/userStartupWarnings.js.map +1 -1
- package/dist/src/zed-integration/schema.d.ts +398 -398
- package/dist/src/zed-integration/zedIntegration.js +11 -7
- package/dist/src/zed-integration/zedIntegration.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -6
@@ -0,0 +1,93 @@
|
|
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 { parseInputForHighlighting } from './highlight.js';
|
8
|
+
describe('parseInputForHighlighting', () => {
|
9
|
+
it('should handle an empty string', () => {
|
10
|
+
expect(parseInputForHighlighting('')).toEqual([
|
11
|
+
{ text: '', type: 'default' },
|
12
|
+
]);
|
13
|
+
});
|
14
|
+
it('should handle text with no commands or files', () => {
|
15
|
+
const text = 'this is a normal sentence';
|
16
|
+
expect(parseInputForHighlighting(text)).toEqual([
|
17
|
+
{ text, type: 'default' },
|
18
|
+
]);
|
19
|
+
});
|
20
|
+
it('should highlight a single command at the beginning', () => {
|
21
|
+
const text = '/help me';
|
22
|
+
expect(parseInputForHighlighting(text)).toEqual([
|
23
|
+
{ text: '/help', type: 'command' },
|
24
|
+
{ text: ' me', type: 'default' },
|
25
|
+
]);
|
26
|
+
});
|
27
|
+
it('should highlight a single file path at the beginning', () => {
|
28
|
+
const text = '@path/to/file.txt please';
|
29
|
+
expect(parseInputForHighlighting(text)).toEqual([
|
30
|
+
{ text: '@path/to/file.txt', type: 'file' },
|
31
|
+
{ text: ' please', type: 'default' },
|
32
|
+
]);
|
33
|
+
});
|
34
|
+
it('should highlight a command in the middle', () => {
|
35
|
+
const text = 'I need /help with this';
|
36
|
+
expect(parseInputForHighlighting(text)).toEqual([
|
37
|
+
{ text: 'I need ', type: 'default' },
|
38
|
+
{ text: '/help', type: 'command' },
|
39
|
+
{ text: ' with this', type: 'default' },
|
40
|
+
]);
|
41
|
+
});
|
42
|
+
it('should highlight a file path in the middle', () => {
|
43
|
+
const text = 'Please check @path/to/file.txt for details';
|
44
|
+
expect(parseInputForHighlighting(text)).toEqual([
|
45
|
+
{ text: 'Please check ', type: 'default' },
|
46
|
+
{ text: '@path/to/file.txt', type: 'file' },
|
47
|
+
{ text: ' for details', type: 'default' },
|
48
|
+
]);
|
49
|
+
});
|
50
|
+
it('should highlight multiple commands and files', () => {
|
51
|
+
const text = 'Use /run with @file.js and also /format @another/file.ts';
|
52
|
+
expect(parseInputForHighlighting(text)).toEqual([
|
53
|
+
{ text: 'Use ', type: 'default' },
|
54
|
+
{ text: '/run', type: 'command' },
|
55
|
+
{ text: ' with ', type: 'default' },
|
56
|
+
{ text: '@file.js', type: 'file' },
|
57
|
+
{ text: ' and also ', type: 'default' },
|
58
|
+
{ text: '/format', type: 'command' },
|
59
|
+
{ text: ' ', type: 'default' },
|
60
|
+
{ text: '@another/file.ts', type: 'file' },
|
61
|
+
]);
|
62
|
+
});
|
63
|
+
it('should handle adjacent highlights', () => {
|
64
|
+
const text = '/run@file.js';
|
65
|
+
expect(parseInputForHighlighting(text)).toEqual([
|
66
|
+
{ text: '/run', type: 'command' },
|
67
|
+
{ text: '@file.js', type: 'file' },
|
68
|
+
]);
|
69
|
+
});
|
70
|
+
it('should handle highlights at the end of the string', () => {
|
71
|
+
const text = 'Get help with /help';
|
72
|
+
expect(parseInputForHighlighting(text)).toEqual([
|
73
|
+
{ text: 'Get help with ', type: 'default' },
|
74
|
+
{ text: '/help', type: 'command' },
|
75
|
+
]);
|
76
|
+
});
|
77
|
+
it('should handle file paths with dots and dashes', () => {
|
78
|
+
const text = 'Check @./path-to/file-name.v2.txt';
|
79
|
+
expect(parseInputForHighlighting(text)).toEqual([
|
80
|
+
{ text: 'Check ', type: 'default' },
|
81
|
+
{ text: '@./path-to/file-name.v2.txt', type: 'file' },
|
82
|
+
]);
|
83
|
+
});
|
84
|
+
it('should handle commands with dashes and numbers', () => {
|
85
|
+
const text = 'Run /command-123 now';
|
86
|
+
expect(parseInputForHighlighting(text)).toEqual([
|
87
|
+
{ text: 'Run ', type: 'default' },
|
88
|
+
{ text: '/command-123', type: 'command' },
|
89
|
+
{ text: ' now', type: 'default' },
|
90
|
+
]);
|
91
|
+
});
|
92
|
+
});
|
93
|
+
//# sourceMappingURL=highlight.test.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"highlight.test.js","sourceRoot":"","sources":["../../../../src/ui/utils/highlight.test.ts"],"names":[],"mappings":"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"}
|
@@ -21,6 +21,29 @@ export declare const KITTY_KEYCODE_ENTER = 13;
|
|
21
21
|
export declare const KITTY_KEYCODE_NUMPAD_ENTER = 57414;
|
22
22
|
export declare const KITTY_KEYCODE_TAB = 9;
|
23
23
|
export declare const KITTY_KEYCODE_BACKSPACE = 127;
|
24
|
+
/**
|
25
|
+
* Kitty modifier decoding constants
|
26
|
+
*
|
27
|
+
* In Kitty/Ghostty, the modifier parameter is encoded as (1 + bitmask).
|
28
|
+
* Some terminals also set bit 7 (i.e., add 128) when reporting event types.
|
29
|
+
*/
|
30
|
+
export declare const KITTY_MODIFIER_BASE = 1;
|
31
|
+
export declare const KITTY_MODIFIER_EVENT_TYPES_OFFSET = 128;
|
32
|
+
/**
|
33
|
+
* Modifier bit flags for Kitty/Xterm-style parameters.
|
34
|
+
*
|
35
|
+
* Per spec, the modifiers parameter encodes (1 + bitmask) where:
|
36
|
+
* - 1: no modifiers
|
37
|
+
* - bit 0 (1): Shift
|
38
|
+
* - bit 1 (2): Alt/Option (reported as "alt" in spec; we map to meta)
|
39
|
+
* - bit 2 (4): Ctrl
|
40
|
+
*
|
41
|
+
* Some terminals add 128 to the entire modifiers field when reporting event types.
|
42
|
+
* See: https://sw.kovidgoyal.net/kitty/keyboard-protocol/#modifiers
|
43
|
+
*/
|
44
|
+
export declare const MODIFIER_SHIFT_BIT = 1;
|
45
|
+
export declare const MODIFIER_ALT_BIT = 2;
|
46
|
+
export declare const MODIFIER_CTRL_BIT = 4;
|
24
47
|
/**
|
25
48
|
* Timing constants for terminal interactions
|
26
49
|
*/
|
@@ -42,7 +65,7 @@ export declare const BACKSLASH_ENTER_DETECTION_WINDOW_MS = 5;
|
|
42
65
|
* Longest reasonable: \x1b[127;15~ = 11 chars (Del with all modifiers)
|
43
66
|
* We use 12 to provide a small buffer.
|
44
67
|
*/
|
45
|
-
export declare const MAX_KITTY_SEQUENCE_LENGTH =
|
68
|
+
export declare const MAX_KITTY_SEQUENCE_LENGTH = 32;
|
46
69
|
/**
|
47
70
|
* Character codes for common escape sequences
|
48
71
|
*/
|
@@ -21,6 +21,29 @@ export const KITTY_KEYCODE_ENTER = 13;
|
|
21
21
|
export const KITTY_KEYCODE_NUMPAD_ENTER = 57414;
|
22
22
|
export const KITTY_KEYCODE_TAB = 9;
|
23
23
|
export const KITTY_KEYCODE_BACKSPACE = 127;
|
24
|
+
/**
|
25
|
+
* Kitty modifier decoding constants
|
26
|
+
*
|
27
|
+
* In Kitty/Ghostty, the modifier parameter is encoded as (1 + bitmask).
|
28
|
+
* Some terminals also set bit 7 (i.e., add 128) when reporting event types.
|
29
|
+
*/
|
30
|
+
export const KITTY_MODIFIER_BASE = 1; // Base value per spec before bitmask decode
|
31
|
+
export const KITTY_MODIFIER_EVENT_TYPES_OFFSET = 128; // Added when event types are included
|
32
|
+
/**
|
33
|
+
* Modifier bit flags for Kitty/Xterm-style parameters.
|
34
|
+
*
|
35
|
+
* Per spec, the modifiers parameter encodes (1 + bitmask) where:
|
36
|
+
* - 1: no modifiers
|
37
|
+
* - bit 0 (1): Shift
|
38
|
+
* - bit 1 (2): Alt/Option (reported as "alt" in spec; we map to meta)
|
39
|
+
* - bit 2 (4): Ctrl
|
40
|
+
*
|
41
|
+
* Some terminals add 128 to the entire modifiers field when reporting event types.
|
42
|
+
* See: https://sw.kovidgoyal.net/kitty/keyboard-protocol/#modifiers
|
43
|
+
*/
|
44
|
+
export const MODIFIER_SHIFT_BIT = 1;
|
45
|
+
export const MODIFIER_ALT_BIT = 2;
|
46
|
+
export const MODIFIER_CTRL_BIT = 4;
|
24
47
|
/**
|
25
48
|
* Timing constants for terminal interactions
|
26
49
|
*/
|
@@ -42,7 +65,9 @@ export const BACKSLASH_ENTER_DETECTION_WINDOW_MS = 5;
|
|
42
65
|
* Longest reasonable: \x1b[127;15~ = 11 chars (Del with all modifiers)
|
43
66
|
* We use 12 to provide a small buffer.
|
44
67
|
*/
|
45
|
-
|
68
|
+
// Increased to accommodate parameterized forms and occasional colon subfields
|
69
|
+
// while still being small enough to avoid pathological buffering.
|
70
|
+
export const MAX_KITTY_SEQUENCE_LENGTH = 32;
|
46
71
|
/**
|
47
72
|
* Character codes for common escape sequences
|
48
73
|
*/
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"platformConstants.js","sourceRoot":"","sources":["../../../../src/ui/utils/platformConstants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;AAErC;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AACtC,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC;AAChD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AACnC,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAE3C;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,QAAQ,CAAC;AAEpD;;;;GAIG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAE5C;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC;AAChC,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AACzC,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAC9B,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC"}
|
1
|
+
{"version":3,"file":"platformConstants.js","sourceRoot":"","sources":["../../../../src/ui/utils/platformConstants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;AAErC;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AACtC,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC;AAChD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AACnC,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,CAAC,4CAA4C;AAClF,MAAM,CAAC,MAAM,iCAAiC,GAAG,GAAG,CAAC,CAAC,sCAAsC;AAE5F;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AACpC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAClC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAEnC;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,QAAQ,CAAC;AAEpD;;;;GAIG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC,CAAC;AAErD;;;;;;GAMG;AACH,8EAA8E;AAC9E,kEAAkE;AAClE,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAE5C;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC;AAChC,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AACzC,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAC9B,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC"}
|
@@ -0,0 +1,39 @@
|
|
1
|
+
/**
|
2
|
+
* @license
|
3
|
+
* Copyright 2025 Google LLC
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
5
|
+
*/
|
6
|
+
/**
|
7
|
+
* Resolves environment variables in a string.
|
8
|
+
* Replaces $VAR_NAME and ${VAR_NAME} with their corresponding environment variable values.
|
9
|
+
* If the environment variable is not defined, the original placeholder is preserved.
|
10
|
+
*
|
11
|
+
* @param value - The string that may contain environment variable placeholders
|
12
|
+
* @returns The string with environment variables resolved
|
13
|
+
*
|
14
|
+
* @example
|
15
|
+
* resolveEnvVarsInString("Token: $API_KEY") // Returns "Token: secret-123"
|
16
|
+
* resolveEnvVarsInString("URL: ${BASE_URL}/api") // Returns "URL: https://api.example.com/api"
|
17
|
+
* resolveEnvVarsInString("Missing: $UNDEFINED_VAR") // Returns "Missing: $UNDEFINED_VAR"
|
18
|
+
*/
|
19
|
+
export declare function resolveEnvVarsInString(value: string): string;
|
20
|
+
/**
|
21
|
+
* Recursively resolves environment variables in an object of any type.
|
22
|
+
* Handles strings, arrays, nested objects, and preserves other primitive types.
|
23
|
+
* Protected against circular references using a WeakSet to track visited objects.
|
24
|
+
*
|
25
|
+
* @param obj - The object to process for environment variable resolution
|
26
|
+
* @returns A new object with environment variables resolved
|
27
|
+
*
|
28
|
+
* @example
|
29
|
+
* const config = {
|
30
|
+
* server: {
|
31
|
+
* host: "$HOST",
|
32
|
+
* port: "${PORT}",
|
33
|
+
* enabled: true,
|
34
|
+
* tags: ["$ENV", "api"]
|
35
|
+
* }
|
36
|
+
* };
|
37
|
+
* const resolved = resolveEnvVarsInObject(config);
|
38
|
+
*/
|
39
|
+
export declare function resolveEnvVarsInObject<T>(obj: T): T;
|
@@ -0,0 +1,97 @@
|
|
1
|
+
/**
|
2
|
+
* @license
|
3
|
+
* Copyright 2025 Google LLC
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
5
|
+
*/
|
6
|
+
/**
|
7
|
+
* Resolves environment variables in a string.
|
8
|
+
* Replaces $VAR_NAME and ${VAR_NAME} with their corresponding environment variable values.
|
9
|
+
* If the environment variable is not defined, the original placeholder is preserved.
|
10
|
+
*
|
11
|
+
* @param value - The string that may contain environment variable placeholders
|
12
|
+
* @returns The string with environment variables resolved
|
13
|
+
*
|
14
|
+
* @example
|
15
|
+
* resolveEnvVarsInString("Token: $API_KEY") // Returns "Token: secret-123"
|
16
|
+
* resolveEnvVarsInString("URL: ${BASE_URL}/api") // Returns "URL: https://api.example.com/api"
|
17
|
+
* resolveEnvVarsInString("Missing: $UNDEFINED_VAR") // Returns "Missing: $UNDEFINED_VAR"
|
18
|
+
*/
|
19
|
+
export function resolveEnvVarsInString(value) {
|
20
|
+
const envVarRegex = /\$(?:(\w+)|{([^}]+)})/g; // Find $VAR_NAME or ${VAR_NAME}
|
21
|
+
return value.replace(envVarRegex, (match, varName1, varName2) => {
|
22
|
+
const varName = varName1 || varName2;
|
23
|
+
if (process && process.env && typeof process.env[varName] === 'string') {
|
24
|
+
return process.env[varName];
|
25
|
+
}
|
26
|
+
return match;
|
27
|
+
});
|
28
|
+
}
|
29
|
+
/**
|
30
|
+
* Recursively resolves environment variables in an object of any type.
|
31
|
+
* Handles strings, arrays, nested objects, and preserves other primitive types.
|
32
|
+
* Protected against circular references using a WeakSet to track visited objects.
|
33
|
+
*
|
34
|
+
* @param obj - The object to process for environment variable resolution
|
35
|
+
* @returns A new object with environment variables resolved
|
36
|
+
*
|
37
|
+
* @example
|
38
|
+
* const config = {
|
39
|
+
* server: {
|
40
|
+
* host: "$HOST",
|
41
|
+
* port: "${PORT}",
|
42
|
+
* enabled: true,
|
43
|
+
* tags: ["$ENV", "api"]
|
44
|
+
* }
|
45
|
+
* };
|
46
|
+
* const resolved = resolveEnvVarsInObject(config);
|
47
|
+
*/
|
48
|
+
export function resolveEnvVarsInObject(obj) {
|
49
|
+
return resolveEnvVarsInObjectInternal(obj, new WeakSet());
|
50
|
+
}
|
51
|
+
/**
|
52
|
+
* Internal implementation of resolveEnvVarsInObject with circular reference protection.
|
53
|
+
*
|
54
|
+
* @param obj - The object to process
|
55
|
+
* @param visited - WeakSet to track visited objects and prevent circular references
|
56
|
+
* @returns A new object with environment variables resolved
|
57
|
+
*/
|
58
|
+
function resolveEnvVarsInObjectInternal(obj, visited) {
|
59
|
+
if (obj === null ||
|
60
|
+
obj === undefined ||
|
61
|
+
typeof obj === 'boolean' ||
|
62
|
+
typeof obj === 'number') {
|
63
|
+
return obj;
|
64
|
+
}
|
65
|
+
if (typeof obj === 'string') {
|
66
|
+
return resolveEnvVarsInString(obj);
|
67
|
+
}
|
68
|
+
if (Array.isArray(obj)) {
|
69
|
+
// Check for circular reference
|
70
|
+
if (visited.has(obj)) {
|
71
|
+
// Return a shallow copy to break the cycle
|
72
|
+
return [...obj];
|
73
|
+
}
|
74
|
+
visited.add(obj);
|
75
|
+
const result = obj.map((item) => resolveEnvVarsInObjectInternal(item, visited));
|
76
|
+
visited.delete(obj);
|
77
|
+
return result;
|
78
|
+
}
|
79
|
+
if (typeof obj === 'object') {
|
80
|
+
// Check for circular reference
|
81
|
+
if (visited.has(obj)) {
|
82
|
+
// Return a shallow copy to break the cycle
|
83
|
+
return { ...obj };
|
84
|
+
}
|
85
|
+
visited.add(obj);
|
86
|
+
const newObj = { ...obj };
|
87
|
+
for (const key in newObj) {
|
88
|
+
if (Object.prototype.hasOwnProperty.call(newObj, key)) {
|
89
|
+
newObj[key] = resolveEnvVarsInObjectInternal(newObj[key], visited);
|
90
|
+
}
|
91
|
+
}
|
92
|
+
visited.delete(obj);
|
93
|
+
return newObj;
|
94
|
+
}
|
95
|
+
return obj;
|
96
|
+
}
|
97
|
+
//# sourceMappingURL=envVarResolver.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"envVarResolver.js","sourceRoot":"","sources":["../../../src/utils/envVarResolver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,MAAM,WAAW,GAAG,wBAAwB,CAAC,CAAC,gCAAgC;IAC9E,OAAO,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;QAC9D,MAAM,OAAO,GAAG,QAAQ,IAAI,QAAQ,CAAC;QACrC,IAAI,OAAO,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YACvE,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC;QAC/B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,sBAAsB,CAAI,GAAM;IAC9C,OAAO,8BAA8B,CAAC,GAAG,EAAE,IAAI,OAAO,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED;;;;;;GAMG;AACH,SAAS,8BAA8B,CACrC,GAAM,EACN,OAAwB;IAExB,IACE,GAAG,KAAK,IAAI;QACZ,GAAG,KAAK,SAAS;QACjB,OAAO,GAAG,KAAK,SAAS;QACxB,OAAO,GAAG,KAAK,QAAQ,EACvB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,sBAAsB,CAAC,GAAG,CAAiB,CAAC;IACrD,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,+BAA+B;QAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,2CAA2C;YAC3C,OAAO,CAAC,GAAG,GAAG,CAAiB,CAAC;QAClC,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC9B,8BAA8B,CAAC,IAAI,EAAE,OAAO,CAAC,CAC9B,CAAC;QAClB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,+BAA+B;QAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,GAAa,CAAC,EAAE,CAAC;YAC/B,2CAA2C;YAC3C,OAAO,EAAE,GAAG,GAAG,EAAO,CAAC;QACzB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,GAAa,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,EAAE,GAAG,GAAG,EAAO,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;gBACtD,MAAM,CAAC,GAAG,CAAC,GAAG,8BAA8B,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,GAAa,CAAC,CAAC;QAC9B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
@@ -0,0 +1,221 @@
|
|
1
|
+
/**
|
2
|
+
* @license
|
3
|
+
* Copyright 2025 Google LLC
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
5
|
+
*/
|
6
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
7
|
+
import { resolveEnvVarsInString, resolveEnvVarsInObject, } from './envVarResolver.js';
|
8
|
+
describe('resolveEnvVarsInString', () => {
|
9
|
+
let originalEnv;
|
10
|
+
beforeEach(() => {
|
11
|
+
originalEnv = { ...process.env };
|
12
|
+
});
|
13
|
+
afterEach(() => {
|
14
|
+
process.env = originalEnv;
|
15
|
+
});
|
16
|
+
it('should resolve $VAR_NAME format', () => {
|
17
|
+
process.env['TEST_VAR'] = 'test-value';
|
18
|
+
const result = resolveEnvVarsInString('Value is $TEST_VAR');
|
19
|
+
expect(result).toBe('Value is test-value');
|
20
|
+
});
|
21
|
+
it('should resolve ${VAR_NAME} format', () => {
|
22
|
+
process.env['TEST_VAR'] = 'test-value';
|
23
|
+
const result = resolveEnvVarsInString('Value is ${TEST_VAR}');
|
24
|
+
expect(result).toBe('Value is test-value');
|
25
|
+
});
|
26
|
+
it('should resolve multiple variables in the same string', () => {
|
27
|
+
process.env['HOST'] = 'localhost';
|
28
|
+
process.env['PORT'] = '3000';
|
29
|
+
const result = resolveEnvVarsInString('URL: http://$HOST:${PORT}/api');
|
30
|
+
expect(result).toBe('URL: http://localhost:3000/api');
|
31
|
+
});
|
32
|
+
it('should leave undefined variables unchanged', () => {
|
33
|
+
const result = resolveEnvVarsInString('Value is $UNDEFINED_VAR');
|
34
|
+
expect(result).toBe('Value is $UNDEFINED_VAR');
|
35
|
+
});
|
36
|
+
it('should leave undefined variables with braces unchanged', () => {
|
37
|
+
const result = resolveEnvVarsInString('Value is ${UNDEFINED_VAR}');
|
38
|
+
expect(result).toBe('Value is ${UNDEFINED_VAR}');
|
39
|
+
});
|
40
|
+
it('should handle empty string', () => {
|
41
|
+
const result = resolveEnvVarsInString('');
|
42
|
+
expect(result).toBe('');
|
43
|
+
});
|
44
|
+
it('should handle string without variables', () => {
|
45
|
+
const result = resolveEnvVarsInString('No variables here');
|
46
|
+
expect(result).toBe('No variables here');
|
47
|
+
});
|
48
|
+
it('should handle mixed defined and undefined variables', () => {
|
49
|
+
process.env['DEFINED'] = 'value';
|
50
|
+
const result = resolveEnvVarsInString('$DEFINED and $UNDEFINED mixed');
|
51
|
+
expect(result).toBe('value and $UNDEFINED mixed');
|
52
|
+
});
|
53
|
+
});
|
54
|
+
describe('resolveEnvVarsInObject', () => {
|
55
|
+
let originalEnv;
|
56
|
+
beforeEach(() => {
|
57
|
+
originalEnv = { ...process.env };
|
58
|
+
});
|
59
|
+
afterEach(() => {
|
60
|
+
process.env = originalEnv;
|
61
|
+
});
|
62
|
+
it('should resolve variables in nested objects', () => {
|
63
|
+
process.env['API_KEY'] = 'secret-123';
|
64
|
+
process.env['DB_URL'] = 'postgresql://localhost/test';
|
65
|
+
const config = {
|
66
|
+
server: {
|
67
|
+
auth: {
|
68
|
+
key: '$API_KEY',
|
69
|
+
},
|
70
|
+
database: '${DB_URL}',
|
71
|
+
},
|
72
|
+
port: 3000,
|
73
|
+
};
|
74
|
+
const result = resolveEnvVarsInObject(config);
|
75
|
+
expect(result).toEqual({
|
76
|
+
server: {
|
77
|
+
auth: {
|
78
|
+
key: 'secret-123',
|
79
|
+
},
|
80
|
+
database: 'postgresql://localhost/test',
|
81
|
+
},
|
82
|
+
port: 3000,
|
83
|
+
});
|
84
|
+
});
|
85
|
+
it('should resolve variables in arrays', () => {
|
86
|
+
process.env['ENV'] = 'production';
|
87
|
+
process.env['VERSION'] = '1.0.0';
|
88
|
+
const config = {
|
89
|
+
tags: ['$ENV', 'app', '${VERSION}'],
|
90
|
+
metadata: {
|
91
|
+
env: '$ENV',
|
92
|
+
},
|
93
|
+
};
|
94
|
+
const result = resolveEnvVarsInObject(config);
|
95
|
+
expect(result).toEqual({
|
96
|
+
tags: ['production', 'app', '1.0.0'],
|
97
|
+
metadata: {
|
98
|
+
env: 'production',
|
99
|
+
},
|
100
|
+
});
|
101
|
+
});
|
102
|
+
it('should preserve non-string types', () => {
|
103
|
+
const config = {
|
104
|
+
enabled: true,
|
105
|
+
count: 42,
|
106
|
+
value: null,
|
107
|
+
data: undefined,
|
108
|
+
tags: ['item1', 'item2'],
|
109
|
+
};
|
110
|
+
const result = resolveEnvVarsInObject(config);
|
111
|
+
expect(result).toEqual(config);
|
112
|
+
});
|
113
|
+
it('should handle MCP server config structure', () => {
|
114
|
+
process.env['API_TOKEN'] = 'token-123';
|
115
|
+
process.env['SERVER_PORT'] = '8080';
|
116
|
+
const extensionConfig = {
|
117
|
+
name: 'test-extension',
|
118
|
+
version: '1.0.0',
|
119
|
+
mcpServers: {
|
120
|
+
'test-server': {
|
121
|
+
command: 'node',
|
122
|
+
args: ['server.js', '--port', '${SERVER_PORT}'],
|
123
|
+
env: {
|
124
|
+
API_KEY: '$API_TOKEN',
|
125
|
+
STATIC_VALUE: 'unchanged',
|
126
|
+
},
|
127
|
+
timeout: 5000,
|
128
|
+
},
|
129
|
+
},
|
130
|
+
};
|
131
|
+
const result = resolveEnvVarsInObject(extensionConfig);
|
132
|
+
expect(result).toEqual({
|
133
|
+
name: 'test-extension',
|
134
|
+
version: '1.0.0',
|
135
|
+
mcpServers: {
|
136
|
+
'test-server': {
|
137
|
+
command: 'node',
|
138
|
+
args: ['server.js', '--port', '8080'],
|
139
|
+
env: {
|
140
|
+
API_KEY: 'token-123',
|
141
|
+
STATIC_VALUE: 'unchanged',
|
142
|
+
},
|
143
|
+
timeout: 5000,
|
144
|
+
},
|
145
|
+
},
|
146
|
+
});
|
147
|
+
});
|
148
|
+
it('should handle empty and null values', () => {
|
149
|
+
const config = {
|
150
|
+
empty: '',
|
151
|
+
nullValue: null,
|
152
|
+
undefinedValue: undefined,
|
153
|
+
zero: 0,
|
154
|
+
false: false,
|
155
|
+
};
|
156
|
+
const result = resolveEnvVarsInObject(config);
|
157
|
+
expect(result).toEqual(config);
|
158
|
+
});
|
159
|
+
it('should handle circular references in objects without infinite recursion', () => {
|
160
|
+
process.env['TEST_VAR'] = 'resolved-value';
|
161
|
+
const config = {
|
162
|
+
name: '$TEST_VAR',
|
163
|
+
value: 42,
|
164
|
+
};
|
165
|
+
// Create circular reference
|
166
|
+
config.self = config;
|
167
|
+
const result = resolveEnvVarsInObject(config);
|
168
|
+
expect(result.name).toBe('resolved-value');
|
169
|
+
expect(result.value).toBe(42);
|
170
|
+
expect(result.self).toBeDefined();
|
171
|
+
expect(result.self?.name).toBe('$TEST_VAR'); // Circular reference should be shallow copied
|
172
|
+
expect(result.self?.value).toBe(42);
|
173
|
+
// Verify it doesn't create infinite recursion by checking it's not the same object
|
174
|
+
expect(result.self).not.toBe(result);
|
175
|
+
});
|
176
|
+
it('should handle circular references in arrays without infinite recursion', () => {
|
177
|
+
process.env['ARRAY_VAR'] = 'array-value';
|
178
|
+
const arr = ['$ARRAY_VAR', 123];
|
179
|
+
// Create circular reference
|
180
|
+
arr.push(arr);
|
181
|
+
const result = resolveEnvVarsInObject(arr);
|
182
|
+
expect(result[0]).toBe('array-value');
|
183
|
+
expect(result[1]).toBe(123);
|
184
|
+
expect(Array.isArray(result[2])).toBe(true);
|
185
|
+
const subArray = result[2];
|
186
|
+
expect(subArray[0]).toBe('$ARRAY_VAR'); // Circular reference should be shallow copied
|
187
|
+
expect(subArray[1]).toBe(123);
|
188
|
+
// Verify it doesn't create infinite recursion
|
189
|
+
expect(result[2]).not.toBe(result);
|
190
|
+
});
|
191
|
+
it('should handle complex nested circular references', () => {
|
192
|
+
process.env['NESTED_VAR'] = 'nested-resolved';
|
193
|
+
const obj1 = { name: '$NESTED_VAR', id: 1 };
|
194
|
+
const obj2 = { name: 'static', id: 2 };
|
195
|
+
// Create cross-references
|
196
|
+
obj1.ref = obj2;
|
197
|
+
obj2.ref = obj1;
|
198
|
+
const config = {
|
199
|
+
primary: obj1,
|
200
|
+
secondary: obj2,
|
201
|
+
value: '$NESTED_VAR',
|
202
|
+
};
|
203
|
+
const result = resolveEnvVarsInObject(config);
|
204
|
+
expect(result.value).toBe('nested-resolved');
|
205
|
+
expect(result.primary.name).toBe('nested-resolved');
|
206
|
+
expect(result.primary.id).toBe(1);
|
207
|
+
expect(result.secondary.name).toBe('static');
|
208
|
+
expect(result.secondary.id).toBe(2);
|
209
|
+
// Check that circular references are handled (shallow copied)
|
210
|
+
expect(result.primary.ref).toBeDefined();
|
211
|
+
expect(result.secondary.ref).toBeDefined();
|
212
|
+
expect(result.primary.ref?.name).toBe('static'); // Should be shallow copy
|
213
|
+
expect(result.secondary.ref?.name).toBe('nested-resolved'); // The shallow copy still gets processed
|
214
|
+
// Most importantly: verify no infinite recursion by checking objects are different
|
215
|
+
expect(result.primary.ref).not.toBe(result.secondary);
|
216
|
+
expect(result.secondary.ref).not.toBe(result.primary);
|
217
|
+
expect(result.primary).not.toBe(obj1); // New object created
|
218
|
+
expect(result.secondary).not.toBe(obj2); // New object created
|
219
|
+
});
|
220
|
+
});
|
221
|
+
//# sourceMappingURL=envVarResolver.test.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"envVarResolver.test.js","sourceRoot":"","sources":["../../../src/utils/envVarResolver.test.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
/**
|
2
|
+
* @license
|
3
|
+
* Copyright 2025 Vybestack LLC
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
5
|
+
*/
|
6
|
+
/**
|
7
|
+
* Extracts a string error message from an unknown error type
|
8
|
+
*/
|
9
|
+
export function getErrorMessage(error) {
|
10
|
+
if (error instanceof Error) {
|
11
|
+
return error.message;
|
12
|
+
}
|
13
|
+
if (typeof error === 'string') {
|
14
|
+
return error;
|
15
|
+
}
|
16
|
+
return String(error);
|
17
|
+
}
|
18
|
+
//# sourceMappingURL=errors.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC"}
|
@@ -47,7 +47,7 @@ const WARNING_CHECKS = [
|
|
47
47
|
homeDirectoryCheck,
|
48
48
|
rootDirectoryCheck,
|
49
49
|
];
|
50
|
-
export async function getUserStartupWarnings(workspaceRoot) {
|
50
|
+
export async function getUserStartupWarnings(workspaceRoot = process.cwd()) {
|
51
51
|
const results = await Promise.all(WARNING_CHECKS.map((check) => check.check(workspaceRoot)));
|
52
52
|
return results.filter((msg) => msg !== null);
|
53
53
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"userStartupWarnings.js","sourceRoot":"","sources":["../../../src/utils/userStartupWarnings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,IAAI,MAAM,MAAM,CAAC;AAOxB,4BAA4B;AAC5B,MAAM,kBAAkB,GAAiB;IACvC,EAAE,EAAE,gBAAgB;IACpB,KAAK,EAAE,KAAK,EAAE,aAAqB,EAAE,EAAE;QACrC,IAAI,CAAC;YACH,MAAM,CAAC,iBAAiB,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC1D,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;gBAC1B,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;aAC1B,CAAC,CAAC;YAEH,IAAI,iBAAiB,KAAK,YAAY,EAAE,CAAC;gBACvC,OAAO,8GAA8G,CAAC;YACxH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,IAAa,EAAE,CAAC;YACvB,OAAO,oEAAoE,CAAC;QAC9E,CAAC;IACH,CAAC;CACF,CAAC;AAEF,MAAM,kBAAkB,GAAiB;IACvC,EAAE,EAAE,gBAAgB;IACpB,KAAK,EAAE,KAAK,EAAE,aAAqB,EAAE,EAAE;QACrC,IAAI,CAAC;YACH,MAAM,iBAAiB,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAC3D,MAAM,YAAY,GAChB,sLAAsL,CAAC;YAEzL,gCAAgC;YAChC,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,iBAAiB,EAAE,CAAC;gBAC1D,OAAO,YAAY,CAAC;YACtB,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,IAAa,EAAE,CAAC;YACvB,OAAO,oEAAoE,CAAC;QAC9E,CAAC;IACH,CAAC;CACF,CAAC;AAEF,qBAAqB;AACrB,MAAM,cAAc,GAA4B;IAC9C,kBAAkB;IAClB,kBAAkB;CACnB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,
|
1
|
+
{"version":3,"file":"userStartupWarnings.js","sourceRoot":"","sources":["../../../src/utils/userStartupWarnings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,IAAI,MAAM,MAAM,CAAC;AAOxB,4BAA4B;AAC5B,MAAM,kBAAkB,GAAiB;IACvC,EAAE,EAAE,gBAAgB;IACpB,KAAK,EAAE,KAAK,EAAE,aAAqB,EAAE,EAAE;QACrC,IAAI,CAAC;YACH,MAAM,CAAC,iBAAiB,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC1D,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;gBAC1B,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;aAC1B,CAAC,CAAC;YAEH,IAAI,iBAAiB,KAAK,YAAY,EAAE,CAAC;gBACvC,OAAO,8GAA8G,CAAC;YACxH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,IAAa,EAAE,CAAC;YACvB,OAAO,oEAAoE,CAAC;QAC9E,CAAC;IACH,CAAC;CACF,CAAC;AAEF,MAAM,kBAAkB,GAAiB;IACvC,EAAE,EAAE,gBAAgB;IACpB,KAAK,EAAE,KAAK,EAAE,aAAqB,EAAE,EAAE;QACrC,IAAI,CAAC;YACH,MAAM,iBAAiB,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAC3D,MAAM,YAAY,GAChB,sLAAsL,CAAC;YAEzL,gCAAgC;YAChC,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,iBAAiB,EAAE,CAAC;gBAC1D,OAAO,YAAY,CAAC;YACtB,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,IAAa,EAAE,CAAC;YACvB,OAAO,oEAAoE,CAAC;QAC9E,CAAC;IACH,CAAC;CACF,CAAC;AAEF,qBAAqB;AACrB,MAAM,cAAc,GAA4B;IAC9C,kBAAkB;IAClB,kBAAkB;CACnB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,gBAAwB,OAAO,CAAC,GAAG,EAAE;IAErC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAC1D,CAAC;IACF,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;AAC/C,CAAC"}
|