@navios/commander-tui 1.0.0
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/CHANGELOG.md +25 -0
- package/README.md +275 -0
- package/coverage/__tests__/utils/factories.ts.html +1147 -0
- package/coverage/__tests__/utils/index.html +131 -0
- package/coverage/__tests__/utils/render-utils.tsx.html +202 -0
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/clover.xml +959 -0
- package/coverage/components/filter/filter_bar.tsx.html +322 -0
- package/coverage/components/filter/index.html +116 -0
- package/coverage/components/log/index.html +131 -0
- package/coverage/components/log/index.ts.html +88 -0
- package/coverage/components/log/log_message.tsx.html +391 -0
- package/coverage/components/prompt/index.html +116 -0
- package/coverage/components/prompt/prompt_renderer.tsx.html +1123 -0
- package/coverage/components/screen/index.html +131 -0
- package/coverage/components/screen/loading_message.tsx.html +217 -0
- package/coverage/components/screen/progress_message.tsx.html +265 -0
- package/coverage/components/sidebar/index.html +146 -0
- package/coverage/components/sidebar/sidebar.tsx.html +391 -0
- package/coverage/components/sidebar/sidebar_item.tsx.html +235 -0
- package/coverage/components/sidebar/sidebar_separator.tsx.html +124 -0
- package/coverage/context/index.html +131 -0
- package/coverage/context/index.ts.html +88 -0
- package/coverage/context/logger_context.tsx.html +412 -0
- package/coverage/coverage-final.json +55 -0
- package/coverage/favicon.png +0 -0
- package/coverage/filter/filter_engine.ts.html +424 -0
- package/coverage/filter/index.html +116 -0
- package/coverage/hooks/index.html +131 -0
- package/coverage/hooks/index.ts.html +88 -0
- package/coverage/hooks/use_theme.ts.html +121 -0
- package/coverage/index.html +356 -0
- package/coverage/keyboard/index.html +116 -0
- package/coverage/keyboard/keyboard_manager.ts.html +784 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/schemas/index.html +161 -0
- package/coverage/schemas/index.ts.html +94 -0
- package/coverage/schemas/logger-options.ts.html +124 -0
- package/coverage/schemas/prompt-options.ts.html +112 -0
- package/coverage/schemas/screen-options.ts.html +127 -0
- package/coverage/services/index.html +146 -0
- package/coverage/services/logger.ts.html +1192 -0
- package/coverage/services/prompt.ts.html +568 -0
- package/coverage/services/screen.ts.html +1804 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +210 -0
- package/coverage/themes/dark.ts.html +604 -0
- package/coverage/themes/high-contrast.ts.html +619 -0
- package/coverage/themes/index.html +176 -0
- package/coverage/themes/index.ts.html +97 -0
- package/coverage/themes/light.ts.html +601 -0
- package/coverage/themes/utils.ts.html +334 -0
- package/coverage/tokens/index.html +161 -0
- package/coverage/tokens/index.ts.html +94 -0
- package/coverage/tokens/logger.ts.html +115 -0
- package/coverage/tokens/prompt.ts.html +115 -0
- package/coverage/tokens/screen.ts.html +115 -0
- package/coverage/types/file.types.ts.html +265 -0
- package/coverage/types/filter.types.ts.html +238 -0
- package/coverage/types/index.html +236 -0
- package/coverage/types/index.ts.html +151 -0
- package/coverage/types/keyboard.types.ts.html +364 -0
- package/coverage/types/log.types.ts.html +268 -0
- package/coverage/types/message.types.ts.html +445 -0
- package/coverage/types/prompt.types.ts.html +403 -0
- package/coverage/types/screen.types.ts.html +451 -0
- package/coverage/types/theme.types.ts.html +841 -0
- package/coverage/utils/colors/file-colors.ts.html +112 -0
- package/coverage/utils/colors/helpers.ts.html +235 -0
- package/coverage/utils/colors/index.html +221 -0
- package/coverage/utils/colors/index.ts.html +145 -0
- package/coverage/utils/colors/log-colors.ts.html +253 -0
- package/coverage/utils/colors/progress-colors.ts.html +160 -0
- package/coverage/utils/colors/prompt-colors.ts.html +175 -0
- package/coverage/utils/colors/sidebar-colors.ts.html +241 -0
- package/coverage/utils/colors/table-colors.ts.html +118 -0
- package/coverage/utils/filetype.ts.html +277 -0
- package/coverage/utils/format.ts.html +241 -0
- package/coverage/utils/index.html +161 -0
- package/coverage/utils/index.ts.html +118 -0
- package/coverage/utils/stdout-printer.ts.html +523 -0
- package/dist/src/components/file/file_log.d.ts +35 -0
- package/dist/src/components/file/file_log.d.ts.map +1 -0
- package/dist/src/components/file/index.d.ts +2 -0
- package/dist/src/components/file/index.d.ts.map +1 -0
- package/dist/src/components/filter/filter_bar.d.ts +10 -0
- package/dist/src/components/filter/filter_bar.d.ts.map +1 -0
- package/dist/src/components/filter/index.d.ts +2 -0
- package/dist/src/components/filter/index.d.ts.map +1 -0
- package/dist/src/components/help/help_overlay.d.ts +10 -0
- package/dist/src/components/help/help_overlay.d.ts.map +1 -0
- package/dist/src/components/help/index.d.ts +2 -0
- package/dist/src/components/help/index.d.ts.map +1 -0
- package/dist/src/components/index.d.ts +27 -0
- package/dist/src/components/index.d.ts.map +1 -0
- package/dist/src/components/log/debug_log.d.ts +3 -0
- package/dist/src/components/log/debug_log.d.ts.map +1 -0
- package/dist/src/components/log/error_log.d.ts +3 -0
- package/dist/src/components/log/error_log.d.ts.map +1 -0
- package/dist/src/components/log/fatal_log.d.ts +3 -0
- package/dist/src/components/log/fatal_log.d.ts.map +1 -0
- package/dist/src/components/log/index.d.ts +9 -0
- package/dist/src/components/log/index.d.ts.map +1 -0
- package/dist/src/components/log/info_log.d.ts +3 -0
- package/dist/src/components/log/info_log.d.ts.map +1 -0
- package/dist/src/components/log/log_message.d.ts +33 -0
- package/dist/src/components/log/log_message.d.ts.map +1 -0
- package/dist/src/components/log/success_log.d.ts +3 -0
- package/dist/src/components/log/success_log.d.ts.map +1 -0
- package/dist/src/components/log/trace_log.d.ts +3 -0
- package/dist/src/components/log/trace_log.d.ts.map +1 -0
- package/dist/src/components/log/warning_log.d.ts +3 -0
- package/dist/src/components/log/warning_log.d.ts.map +1 -0
- package/dist/src/components/prompt/index.d.ts +3 -0
- package/dist/src/components/prompt/index.d.ts.map +1 -0
- package/dist/src/components/prompt/prompt_renderer.d.ts +6 -0
- package/dist/src/components/prompt/prompt_renderer.d.ts.map +1 -0
- package/dist/src/components/screen/group_renderer.d.ts +19 -0
- package/dist/src/components/screen/group_renderer.d.ts.map +1 -0
- package/dist/src/components/screen/index.d.ts +13 -0
- package/dist/src/components/screen/index.d.ts.map +1 -0
- package/dist/src/components/screen/loading_message.d.ts +6 -0
- package/dist/src/components/screen/loading_message.d.ts.map +1 -0
- package/dist/src/components/screen/message_renderer.d.ts +8 -0
- package/dist/src/components/screen/message_renderer.d.ts.map +1 -0
- package/dist/src/components/screen/progress_message.d.ts +8 -0
- package/dist/src/components/screen/progress_message.d.ts.map +1 -0
- package/dist/src/components/screen/screen_bridge.d.ts +20 -0
- package/dist/src/components/screen/screen_bridge.d.ts.map +1 -0
- package/dist/src/components/screen/table_message.d.ts +6 -0
- package/dist/src/components/screen/table_message.d.ts.map +1 -0
- package/dist/src/components/screen_manager_bridge.d.ts +11 -0
- package/dist/src/components/screen_manager_bridge.d.ts.map +1 -0
- package/dist/src/components/sidebar/index.d.ts +6 -0
- package/dist/src/components/sidebar/index.d.ts.map +1 -0
- package/dist/src/components/sidebar/sidebar.d.ts +18 -0
- package/dist/src/components/sidebar/sidebar.d.ts.map +1 -0
- package/dist/src/components/sidebar/sidebar_item.d.ts +14 -0
- package/dist/src/components/sidebar/sidebar_item.d.ts.map +1 -0
- package/dist/src/components/sidebar/sidebar_separator.d.ts +2 -0
- package/dist/src/components/sidebar/sidebar_separator.d.ts.map +1 -0
- package/dist/src/context/logger_context.d.ts +60 -0
- package/dist/src/context/logger_context.d.ts.map +1 -0
- package/dist/src/filter/filter_engine.d.ts +20 -0
- package/dist/src/filter/filter_engine.d.ts.map +1 -0
- package/dist/src/filter/index.d.ts +4 -0
- package/dist/src/filter/index.d.ts.map +1 -0
- package/dist/src/hooks/index.d.ts +2 -0
- package/dist/src/hooks/index.d.ts.map +1 -0
- package/dist/src/hooks/use_theme.d.ts +7 -0
- package/dist/src/hooks/use_theme.d.ts.map +1 -0
- package/dist/src/index.d.ts +88 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/keyboard/create_bindings.d.ts +31 -0
- package/dist/src/keyboard/create_bindings.d.ts.map +1 -0
- package/dist/src/keyboard/index.d.ts +12 -0
- package/dist/src/keyboard/index.d.ts.map +1 -0
- package/dist/src/keyboard/keyboard_manager.d.ts +69 -0
- package/dist/src/keyboard/keyboard_manager.d.ts.map +1 -0
- package/dist/src/services/index.d.ts +5 -0
- package/dist/src/services/index.d.ts.map +1 -0
- package/dist/src/services/logger.d.ts +61 -0
- package/dist/src/services/logger.d.ts.map +1 -0
- package/dist/src/services/prompt.d.ts +37 -0
- package/dist/src/services/prompt.d.ts.map +1 -0
- package/dist/src/services/screen.d.ts +165 -0
- package/dist/src/services/screen.d.ts.map +1 -0
- package/dist/src/services/screen_manager.d.ts +124 -0
- package/dist/src/services/screen_manager.d.ts.map +1 -0
- package/dist/src/themes/dark.d.ts +7 -0
- package/dist/src/themes/dark.d.ts.map +1 -0
- package/dist/src/themes/high-contrast.d.ts +7 -0
- package/dist/src/themes/high-contrast.d.ts.map +1 -0
- package/dist/src/themes/index.d.ts +18 -0
- package/dist/src/themes/index.d.ts.map +1 -0
- package/dist/src/themes/light.d.ts +6 -0
- package/dist/src/themes/light.d.ts.map +1 -0
- package/dist/src/themes/utils.d.ts +22 -0
- package/dist/src/themes/utils.d.ts.map +1 -0
- package/dist/src/types/file.types.d.ts +40 -0
- package/dist/src/types/file.types.d.ts.map +1 -0
- package/dist/src/types/filter.types.d.ts +31 -0
- package/dist/src/types/filter.types.d.ts.map +1 -0
- package/dist/src/types/index.d.ts +81 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/keyboard.types.d.ts +83 -0
- package/dist/src/types/keyboard.types.d.ts.map +1 -0
- package/dist/src/types/log.types.d.ts +32 -0
- package/dist/src/types/log.types.d.ts.map +1 -0
- package/dist/src/types/message.types.d.ts +91 -0
- package/dist/src/types/message.types.d.ts.map +1 -0
- package/dist/src/types/prompt.types.d.ts +89 -0
- package/dist/src/types/prompt.types.d.ts.map +1 -0
- package/dist/src/types/screen.types.d.ts +85 -0
- package/dist/src/types/screen.types.d.ts.map +1 -0
- package/dist/src/types/theme.types.d.ts +216 -0
- package/dist/src/types/theme.types.d.ts.map +1 -0
- package/dist/src/utils/colors/file-colors.d.ts +10 -0
- package/dist/src/utils/colors/file-colors.d.ts.map +1 -0
- package/dist/src/utils/colors/helpers.d.ts +29 -0
- package/dist/src/utils/colors/helpers.d.ts.map +1 -0
- package/dist/src/utils/colors/index.d.ts +13 -0
- package/dist/src/utils/colors/index.d.ts.map +1 -0
- package/dist/src/utils/colors/log-colors.d.ts +15 -0
- package/dist/src/utils/colors/log-colors.d.ts.map +1 -0
- package/dist/src/utils/colors/progress-colors.d.ts +25 -0
- package/dist/src/utils/colors/progress-colors.d.ts.map +1 -0
- package/dist/src/utils/colors/prompt-colors.d.ts +22 -0
- package/dist/src/utils/colors/prompt-colors.d.ts.map +1 -0
- package/dist/src/utils/colors/sidebar-colors.d.ts +50 -0
- package/dist/src/utils/colors/sidebar-colors.d.ts.map +1 -0
- package/dist/src/utils/colors/table-colors.d.ts +12 -0
- package/dist/src/utils/colors/table-colors.d.ts.map +1 -0
- package/dist/src/utils/filetype.d.ts +19 -0
- package/dist/src/utils/filetype.d.ts.map +1 -0
- package/dist/src/utils/format.d.ts +9 -0
- package/dist/src/utils/format.d.ts.map +1 -0
- package/dist/src/utils/index.d.ts +20 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/stdout-printer.d.ts +10 -0
- package/dist/src/utils/stdout-printer.d.ts.map +1 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/tsdown.config.d.mts +5 -0
- package/dist/tsdown.config.d.mts.map +1 -0
- package/dist/vitest.config.d.mts +3 -0
- package/dist/vitest.config.d.mts.map +1 -0
- package/lib/index.cjs +6349 -0
- package/lib/index.cjs.map +1 -0
- package/lib/index.d.cts +1720 -0
- package/lib/index.d.cts.map +1 -0
- package/lib/index.d.mts +1720 -0
- package/lib/index.d.mts.map +1 -0
- package/lib/index.mjs +6264 -0
- package/lib/index.mjs.map +1 -0
- package/lib/screen_manager_bridge-BpDgVu3e.cjs +3357 -0
- package/lib/screen_manager_bridge-BpDgVu3e.cjs.map +1 -0
- package/lib/screen_manager_bridge-CkV7637i.cjs +3 -0
- package/lib/screen_manager_bridge-DN2J6_k1.mjs +3 -0
- package/lib/screen_manager_bridge-Dfg4QUrl.mjs +3034 -0
- package/lib/screen_manager_bridge-Dfg4QUrl.mjs.map +1 -0
- package/package.json +43 -0
- package/project.json +60 -0
- package/src/__tests__/components/__snapshots__/filter_bar.spec.tsx.snap +2245 -0
- package/src/__tests__/components/__snapshots__/loading_message.spec.tsx.snap +1382 -0
- package/src/__tests__/components/__snapshots__/log_message.spec.tsx.snap +3169 -0
- package/src/__tests__/components/__snapshots__/progress_message.spec.tsx.snap +1743 -0
- package/src/__tests__/components/__snapshots__/prompt_renderer.spec.tsx.snap +3135 -0
- package/src/__tests__/components/__snapshots__/sidebar.spec.tsx.snap +2617 -0
- package/src/__tests__/components/filter_bar.spec.tsx +190 -0
- package/src/__tests__/components/loading_message.spec.tsx +110 -0
- package/src/__tests__/components/log_message.spec.tsx +166 -0
- package/src/__tests__/components/progress_message.spec.tsx +147 -0
- package/src/__tests__/components/prompt_renderer.spec.tsx +274 -0
- package/src/__tests__/components/sidebar.spec.tsx +305 -0
- package/src/__tests__/filter/filter_engine.spec.ts +325 -0
- package/src/__tests__/keyboard/keyboard_manager.spec.ts +557 -0
- package/src/__tests__/mocks/scm-mock.ts +5 -0
- package/src/__tests__/services/logger.spec.ts +630 -0
- package/src/__tests__/services/prompt.spec.ts +411 -0
- package/src/__tests__/services/screen.spec.ts +721 -0
- package/src/__tests__/setup.ts +43 -0
- package/src/__tests__/utils/factories.ts +354 -0
- package/src/__tests__/utils/filetype.spec.ts +195 -0
- package/src/__tests__/utils/format.spec.ts +178 -0
- package/src/__tests__/utils/render-utils.tsx +39 -0
- package/src/__tests__/utils/test-container.ts +48 -0
- package/src/components/file/file_log.tsx +241 -0
- package/src/components/file/index.ts +1 -0
- package/src/components/filter/filter_bar.tsx +79 -0
- package/src/components/filter/index.ts +1 -0
- package/src/components/help/help_overlay.tsx +100 -0
- package/src/components/help/index.ts +1 -0
- package/src/components/index.ts +15 -0
- package/src/components/log/index.ts +1 -0
- package/src/components/log/log_message.tsx +102 -0
- package/src/components/prompt/index.ts +2 -0
- package/src/components/prompt/prompt_renderer.tsx +346 -0
- package/src/components/screen/group_renderer.tsx +64 -0
- package/src/components/screen/index.ts +6 -0
- package/src/components/screen/loading_message.tsx +44 -0
- package/src/components/screen/message_renderer.tsx +108 -0
- package/src/components/screen/progress_message.tsx +60 -0
- package/src/components/screen/screen_bridge.tsx +149 -0
- package/src/components/screen/table_message.tsx +57 -0
- package/src/components/screen_manager_bridge.tsx +245 -0
- package/src/components/sidebar/index.ts +3 -0
- package/src/components/sidebar/sidebar.tsx +102 -0
- package/src/components/sidebar/sidebar_item.tsx +50 -0
- package/src/components/sidebar/sidebar_separator.tsx +13 -0
- package/src/context/index.ts +1 -0
- package/src/context/logger_context.tsx +109 -0
- package/src/factories/index.ts +1 -0
- package/src/factories/screen.factory.ts +22 -0
- package/src/filter/filter_engine.ts +113 -0
- package/src/filter/index.ts +1 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/use_theme.ts +12 -0
- package/src/index.ts +64 -0
- package/src/keyboard/create_bindings.ts +457 -0
- package/src/keyboard/index.ts +2 -0
- package/src/keyboard/keyboard_manager.ts +233 -0
- package/src/overrides/console.logger.override.ts +61 -0
- package/src/overrides/index.ts +1 -0
- package/src/schemas/index.ts +3 -0
- package/src/schemas/logger-options.ts +13 -0
- package/src/schemas/prompt-options.ts +9 -0
- package/src/schemas/screen-options.ts +14 -0
- package/src/services/index.ts +4 -0
- package/src/services/logger.ts +369 -0
- package/src/services/prompt.ts +169 -0
- package/src/services/screen.ts +590 -0
- package/src/services/screen_manager.tsx +390 -0
- package/src/themes/dark.ts +173 -0
- package/src/themes/high-contrast.ts +178 -0
- package/src/themes/index.ts +4 -0
- package/src/themes/light.ts +172 -0
- package/src/themes/utils.ts +83 -0
- package/src/tokens/index.ts +3 -0
- package/src/tokens/logger.ts +10 -0
- package/src/tokens/prompt.ts +10 -0
- package/src/tokens/screen.ts +10 -0
- package/src/types/file.types.ts +60 -0
- package/src/types/filter.types.ts +51 -0
- package/src/types/index.ts +22 -0
- package/src/types/keyboard.types.ts +93 -0
- package/src/types/log.types.ts +61 -0
- package/src/types/message.types.ts +120 -0
- package/src/types/prompt.types.ts +106 -0
- package/src/types/screen.types.ts +124 -0
- package/src/types/theme.types.ts +252 -0
- package/src/utils/colors/file-colors.ts +9 -0
- package/src/utils/colors/helpers.ts +50 -0
- package/src/utils/colors/index.ts +20 -0
- package/src/utils/colors/log-colors.ts +56 -0
- package/src/utils/colors/progress-colors.ts +25 -0
- package/src/utils/colors/prompt-colors.ts +30 -0
- package/src/utils/colors/sidebar-colors.ts +52 -0
- package/src/utils/colors/table-colors.ts +11 -0
- package/src/utils/filetype.ts +64 -0
- package/src/utils/format.ts +52 -0
- package/src/utils/index.ts +11 -0
- package/src/utils/stdout-printer.ts +255 -0
- package/tsconfig.json +14 -0
- package/tsdown.config.mts +34 -0
- package/vitest.config.mts +10 -0
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import type { LogLevel } from '@navios/core'
|
|
2
|
+
|
|
3
|
+
// ============================================
|
|
4
|
+
// Theme Type Definitions
|
|
5
|
+
// ============================================
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Color scheme for a single log level.
|
|
9
|
+
*/
|
|
10
|
+
export interface LogLevelTheme {
|
|
11
|
+
border: string
|
|
12
|
+
background: string
|
|
13
|
+
text?: string
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Sidebar color scheme.
|
|
18
|
+
*/
|
|
19
|
+
export interface SidebarTheme {
|
|
20
|
+
background?: string
|
|
21
|
+
selectedBackground: string
|
|
22
|
+
hoverBackground: string
|
|
23
|
+
text: string
|
|
24
|
+
textDim: string
|
|
25
|
+
border: string
|
|
26
|
+
badge: string
|
|
27
|
+
focusBorder: string
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Screen header color scheme.
|
|
32
|
+
*/
|
|
33
|
+
export interface HeaderTheme {
|
|
34
|
+
background?: string
|
|
35
|
+
text: string
|
|
36
|
+
border: string
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Status indicator with icon and color.
|
|
41
|
+
*/
|
|
42
|
+
export interface StatusIndicator {
|
|
43
|
+
icon: string
|
|
44
|
+
color: string
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Status indicators for all screen states.
|
|
49
|
+
*/
|
|
50
|
+
export interface StatusIndicatorsTheme {
|
|
51
|
+
waiting: StatusIndicator
|
|
52
|
+
pending: StatusIndicator
|
|
53
|
+
success: StatusIndicator
|
|
54
|
+
fail: StatusIndicator
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Separator colors for sidebar sections.
|
|
59
|
+
*/
|
|
60
|
+
export interface SeparatorTheme {
|
|
61
|
+
line: string
|
|
62
|
+
text: string
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Progress bar and loading indicator colors.
|
|
67
|
+
*/
|
|
68
|
+
export interface ProgressTheme {
|
|
69
|
+
border: string
|
|
70
|
+
background: string
|
|
71
|
+
barFilled: string
|
|
72
|
+
barEmpty: string
|
|
73
|
+
text: string
|
|
74
|
+
textDim: string
|
|
75
|
+
complete: string
|
|
76
|
+
completeBackground: string
|
|
77
|
+
failed: string
|
|
78
|
+
failedBackground: string
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Collapsible group colors.
|
|
83
|
+
*/
|
|
84
|
+
export interface GroupTheme {
|
|
85
|
+
border: string
|
|
86
|
+
background: string
|
|
87
|
+
headerText: string
|
|
88
|
+
icon: string
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Table display colors.
|
|
93
|
+
*/
|
|
94
|
+
export interface TableTheme {
|
|
95
|
+
border: string
|
|
96
|
+
background: string
|
|
97
|
+
headerText: string
|
|
98
|
+
cellText: string
|
|
99
|
+
title: string
|
|
100
|
+
separator: string
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* File display colors.
|
|
105
|
+
*/
|
|
106
|
+
export interface FileTheme {
|
|
107
|
+
border: string
|
|
108
|
+
background: string
|
|
109
|
+
headerText: string
|
|
110
|
+
headerBackground: string
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Interactive prompt colors.
|
|
115
|
+
*/
|
|
116
|
+
export interface PromptTheme {
|
|
117
|
+
question: string
|
|
118
|
+
optionText: string
|
|
119
|
+
optionTextDim: string
|
|
120
|
+
optionSelected: string
|
|
121
|
+
optionSelectedBackground: string
|
|
122
|
+
confirmButton: string
|
|
123
|
+
cancelButton: string
|
|
124
|
+
buttonBackground: string
|
|
125
|
+
buttonSelectedBackground: string
|
|
126
|
+
inputBorder: string
|
|
127
|
+
inputBackground: string
|
|
128
|
+
inputText: string
|
|
129
|
+
inputPlaceholder: string
|
|
130
|
+
inputCursor: string
|
|
131
|
+
border: string
|
|
132
|
+
focusBorder: string
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Error highlighting colors for file displays.
|
|
137
|
+
*/
|
|
138
|
+
export interface ErrorHighlightTheme {
|
|
139
|
+
background: string
|
|
140
|
+
border: string
|
|
141
|
+
gutterBackground: string
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Filter bar colors.
|
|
146
|
+
*/
|
|
147
|
+
export interface FilterTheme {
|
|
148
|
+
background: string
|
|
149
|
+
border: string
|
|
150
|
+
text: string
|
|
151
|
+
textDim: string
|
|
152
|
+
inputBackground: string
|
|
153
|
+
inputText: string
|
|
154
|
+
inputPlaceholder: string
|
|
155
|
+
cursor: string
|
|
156
|
+
activeLevel: string
|
|
157
|
+
inactiveLevel: string
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Help overlay colors.
|
|
162
|
+
*/
|
|
163
|
+
export interface HelpTheme {
|
|
164
|
+
background: string
|
|
165
|
+
border: string
|
|
166
|
+
title: string
|
|
167
|
+
category: string
|
|
168
|
+
key: string
|
|
169
|
+
description: string
|
|
170
|
+
hint: string
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* General semantic colors.
|
|
175
|
+
*/
|
|
176
|
+
export interface SemanticColors {
|
|
177
|
+
primary: string
|
|
178
|
+
secondary: string
|
|
179
|
+
success: string
|
|
180
|
+
warning: string
|
|
181
|
+
error: string
|
|
182
|
+
muted: string
|
|
183
|
+
background?: string
|
|
184
|
+
foreground: string
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Complete theme definition.
|
|
189
|
+
*/
|
|
190
|
+
export interface Theme {
|
|
191
|
+
/** Theme identifier */
|
|
192
|
+
name: string
|
|
193
|
+
|
|
194
|
+
/** Log level color schemes */
|
|
195
|
+
logLevels: Record<LogLevel, LogLevelTheme>
|
|
196
|
+
|
|
197
|
+
/** Sidebar colors */
|
|
198
|
+
sidebar: SidebarTheme
|
|
199
|
+
|
|
200
|
+
/** Screen header colors */
|
|
201
|
+
header: HeaderTheme
|
|
202
|
+
|
|
203
|
+
/** Status indicator colors and icons */
|
|
204
|
+
statusIndicators: StatusIndicatorsTheme
|
|
205
|
+
|
|
206
|
+
/** Separator colors */
|
|
207
|
+
separator: SeparatorTheme
|
|
208
|
+
|
|
209
|
+
/** Progress bar colors */
|
|
210
|
+
progress: ProgressTheme
|
|
211
|
+
|
|
212
|
+
/** Collapsible group colors */
|
|
213
|
+
group: GroupTheme
|
|
214
|
+
|
|
215
|
+
/** Table display colors */
|
|
216
|
+
table: TableTheme
|
|
217
|
+
|
|
218
|
+
/** File display colors */
|
|
219
|
+
file: FileTheme
|
|
220
|
+
|
|
221
|
+
/** Prompt colors */
|
|
222
|
+
prompt: PromptTheme
|
|
223
|
+
|
|
224
|
+
/** Error highlighting colors */
|
|
225
|
+
errorHighlight: ErrorHighlightTheme
|
|
226
|
+
|
|
227
|
+
/** Filter bar colors */
|
|
228
|
+
filter: FilterTheme
|
|
229
|
+
|
|
230
|
+
/** Help overlay colors */
|
|
231
|
+
help: HelpTheme
|
|
232
|
+
|
|
233
|
+
/** General semantic colors */
|
|
234
|
+
colors: SemanticColors
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Theme preset names.
|
|
239
|
+
*/
|
|
240
|
+
export type ThemePreset = 'dark' | 'light' | 'high-contrast'
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Deep partial type for theme overrides.
|
|
244
|
+
*/
|
|
245
|
+
export type DeepPartial<T> = {
|
|
246
|
+
[P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P]
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Partial theme for creating custom themes.
|
|
251
|
+
*/
|
|
252
|
+
export type PartialTheme = DeepPartial<Theme>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File display colors (uses info/blue scheme).
|
|
3
|
+
*/
|
|
4
|
+
export const FILE_COLORS = {
|
|
5
|
+
border: '#3B82F6', // Blue-500 (same as info)
|
|
6
|
+
background: '#3B82F615', // Blue with 8% opacity
|
|
7
|
+
headerText: '#F9FAFB', // Gray-50
|
|
8
|
+
headerBackground: '#3B82F625', // Blue with 15% opacity
|
|
9
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { RGBA } from '@opentui/core'
|
|
2
|
+
|
|
3
|
+
import type { LogLevel } from '@navios/core'
|
|
4
|
+
|
|
5
|
+
import type { LogLevelColorMap, LogLevelColors } from '../../types/index.ts'
|
|
6
|
+
|
|
7
|
+
import { DEFAULT_LOG_LEVEL_COLORS } from './log-colors.ts'
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Creates a tinted (subtle) version of a color by setting alpha.
|
|
11
|
+
*
|
|
12
|
+
* @param color - The base color (hex string or RGBA)
|
|
13
|
+
* @param alpha - Target alpha value (0-1), default 0.08 for subtle tinting
|
|
14
|
+
* @returns New RGBA with adjusted alpha
|
|
15
|
+
*/
|
|
16
|
+
export function createTintedColor(color: string | RGBA, alpha: number = 0.08): RGBA {
|
|
17
|
+
const rgba = typeof color === 'string' ? RGBA.fromHex(color) : color
|
|
18
|
+
return RGBA.fromValues(rgba.r, rgba.g, rgba.b, alpha)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Creates a more prominent version of a color for borders.
|
|
23
|
+
*
|
|
24
|
+
* @param color - The base color
|
|
25
|
+
* @param alpha - Target alpha, default 1.0 for solid borders
|
|
26
|
+
*/
|
|
27
|
+
export function createBorderColor(color: string | RGBA, alpha: number = 1.0): RGBA {
|
|
28
|
+
const rgba = typeof color === 'string' ? RGBA.fromHex(color) : color
|
|
29
|
+
return RGBA.fromValues(rgba.r, rgba.g, rgba.b, alpha)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Gets colors for a specific log level.
|
|
34
|
+
*
|
|
35
|
+
* @param level - The log level
|
|
36
|
+
* @param customColors - Optional custom color map
|
|
37
|
+
*/
|
|
38
|
+
export function getLogLevelColors(
|
|
39
|
+
level: LogLevel,
|
|
40
|
+
customColors?: Partial<LogLevelColorMap>,
|
|
41
|
+
): LogLevelColors {
|
|
42
|
+
const defaultColors = DEFAULT_LOG_LEVEL_COLORS[level]
|
|
43
|
+
const custom = customColors?.[level]
|
|
44
|
+
|
|
45
|
+
return {
|
|
46
|
+
border: custom?.border ?? defaultColors.border,
|
|
47
|
+
background: custom?.background ?? defaultColors.background,
|
|
48
|
+
text: custom?.text ?? defaultColors.text,
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Log level colors
|
|
2
|
+
export * from './log-colors.ts'
|
|
3
|
+
|
|
4
|
+
// Sidebar and header colors
|
|
5
|
+
export * from './sidebar-colors.ts'
|
|
6
|
+
|
|
7
|
+
// Progress and group colors
|
|
8
|
+
export * from './progress-colors.ts'
|
|
9
|
+
|
|
10
|
+
// Table colors
|
|
11
|
+
export * from './table-colors.ts'
|
|
12
|
+
|
|
13
|
+
// File colors
|
|
14
|
+
export * from './file-colors.ts'
|
|
15
|
+
|
|
16
|
+
// Prompt colors
|
|
17
|
+
export * from './prompt-colors.ts'
|
|
18
|
+
|
|
19
|
+
// Helper functions
|
|
20
|
+
export * from './helpers.ts'
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { LogLevelColorMap, LogLevelColors, LogMessageVariant } from '../../types/index.ts'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Default color scheme for all log levels.
|
|
5
|
+
* Each level has a prominent border color and a subtle background tint.
|
|
6
|
+
*/
|
|
7
|
+
export const DEFAULT_LOG_LEVEL_COLORS: LogLevelColorMap = {
|
|
8
|
+
verbose: {
|
|
9
|
+
border: '#6B7280', // Gray-500
|
|
10
|
+
background: '#6B728015', // Gray with 8% opacity
|
|
11
|
+
},
|
|
12
|
+
debug: {
|
|
13
|
+
border: '#8B5CF6', // Violet-500
|
|
14
|
+
background: '#8B5CF615', // Violet with 8% opacity
|
|
15
|
+
},
|
|
16
|
+
log: {
|
|
17
|
+
border: '#3B82F6', // Blue-500
|
|
18
|
+
background: '#3B82F615', // Blue with 8% opacity
|
|
19
|
+
},
|
|
20
|
+
warn: {
|
|
21
|
+
border: '#F59E0B', // Amber-500
|
|
22
|
+
background: '#F59E0B15', // Amber with 8% opacity
|
|
23
|
+
},
|
|
24
|
+
error: {
|
|
25
|
+
border: '#EF4444', // Red-500
|
|
26
|
+
background: '#EF444415', // Red with 8% opacity
|
|
27
|
+
},
|
|
28
|
+
fatal: {
|
|
29
|
+
border: '#DC2626', // Red-600
|
|
30
|
+
background: '#DC262625', // Red with 15% opacity (more prominent)
|
|
31
|
+
text: '#FCA5A5', // Light red text for contrast
|
|
32
|
+
},
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Colors for semantic variants (override level colors when variant is set).
|
|
37
|
+
*/
|
|
38
|
+
export const VARIANT_COLORS: Record<LogMessageVariant, LogLevelColors> = {
|
|
39
|
+
success: {
|
|
40
|
+
border: '#22C55E', // Green-500
|
|
41
|
+
background: '#22C55E15', // Green with 8% opacity
|
|
42
|
+
},
|
|
43
|
+
trace: {
|
|
44
|
+
border: '#6B7280', // Gray-500
|
|
45
|
+
background: '#6B728015', // Gray with 8% opacity
|
|
46
|
+
},
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Error highlighting colors.
|
|
51
|
+
*/
|
|
52
|
+
export const ERROR_HIGHLIGHT_COLORS = {
|
|
53
|
+
background: '#EF444425', // Red with 15% opacity
|
|
54
|
+
border: '#EF4444', // Red-500
|
|
55
|
+
gutterBackground: '#EF444440', // Red with 25% opacity for line number gutter
|
|
56
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress bar colors.
|
|
3
|
+
*/
|
|
4
|
+
export const PROGRESS_COLORS = {
|
|
5
|
+
border: '#3B82F6', // Blue-500
|
|
6
|
+
background: '#3B82F615', // Blue with 8% opacity
|
|
7
|
+
barFilled: '#3B82F6', // Blue-500
|
|
8
|
+
barEmpty: '#374151', // Gray-700
|
|
9
|
+
text: '#E5E7EB', // Gray-200
|
|
10
|
+
textDim: '#9CA3AF', // Gray-400
|
|
11
|
+
complete: '#22C55E', // Green-500
|
|
12
|
+
completeBackground: '#22C55E15',
|
|
13
|
+
failed: '#EF4444', // Red-500
|
|
14
|
+
failedBackground: '#EF444415',
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Group colors for collapsible log groups.
|
|
19
|
+
*/
|
|
20
|
+
export const GROUP_COLORS = {
|
|
21
|
+
border: '#6B7280', // Gray-500
|
|
22
|
+
background: '#6B728010', // Gray with 6% opacity
|
|
23
|
+
headerText: '#E5E7EB', // Gray-200
|
|
24
|
+
icon: '#9CA3AF', // Gray-400
|
|
25
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt colors for interactive prompts.
|
|
3
|
+
*/
|
|
4
|
+
export const PROMPT_COLORS = {
|
|
5
|
+
// Question text
|
|
6
|
+
question: '#F9FAFB', // Gray-50
|
|
7
|
+
|
|
8
|
+
// Choice options
|
|
9
|
+
optionText: '#E5E7EB', // Gray-200
|
|
10
|
+
optionTextDim: '#9CA3AF', // Gray-400
|
|
11
|
+
optionSelected: '#3B82F6', // Blue-500
|
|
12
|
+
optionSelectedBackground: '#1E3A5F', // Dark blue
|
|
13
|
+
|
|
14
|
+
// Confirm buttons
|
|
15
|
+
confirmButton: '#22C55E', // Green-500
|
|
16
|
+
cancelButton: '#EF4444', // Red-500
|
|
17
|
+
buttonBackground: '#374151', // Gray-700
|
|
18
|
+
buttonSelectedBackground: '#1F2937', // Gray-800
|
|
19
|
+
|
|
20
|
+
// Input field
|
|
21
|
+
inputBorder: '#3B82F6', // Blue-500
|
|
22
|
+
inputBackground: '#1F2937', // Gray-800
|
|
23
|
+
inputText: '#F9FAFB', // Gray-50
|
|
24
|
+
inputPlaceholder: '#6B7280', // Gray-500
|
|
25
|
+
inputCursor: '#3B82F6', // Blue-500
|
|
26
|
+
|
|
27
|
+
// General
|
|
28
|
+
border: '#374151', // Gray-700
|
|
29
|
+
focusBorder: '#3B82F6', // Blue-500
|
|
30
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sidebar colors.
|
|
3
|
+
*/
|
|
4
|
+
export const SIDEBAR_COLORS = {
|
|
5
|
+
background: undefined, // Transparent - blend with terminal
|
|
6
|
+
selectedBackground: '#1F293780', // Gray-800 with 50% opacity
|
|
7
|
+
hoverBackground: '#374151', // Gray-700
|
|
8
|
+
text: '#E5E7EB', // Gray-200
|
|
9
|
+
textDim: '#6B7280', // Gray-500
|
|
10
|
+
border: '#374151', // Gray-700
|
|
11
|
+
badge: '#3B82F6', // Blue-500
|
|
12
|
+
focusBorder: '#3B82F6', // Blue-500
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Screen header colors.
|
|
17
|
+
*/
|
|
18
|
+
export const HEADER_COLORS = {
|
|
19
|
+
background: undefined, // Transparent - blend with terminal
|
|
20
|
+
text: '#F9FAFB', // Gray-50
|
|
21
|
+
border: '#374151', // Gray-700
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Screen status indicator colors and icons.
|
|
26
|
+
*/
|
|
27
|
+
export const STATUS_INDICATORS = {
|
|
28
|
+
waiting: {
|
|
29
|
+
icon: '○', // Empty circle
|
|
30
|
+
color: '#6B7280', // Gray-500
|
|
31
|
+
},
|
|
32
|
+
pending: {
|
|
33
|
+
icon: '◐', // Half circle (spinner-like)
|
|
34
|
+
color: '#F59E0B', // Amber-500
|
|
35
|
+
},
|
|
36
|
+
success: {
|
|
37
|
+
icon: '✓', // Checkmark
|
|
38
|
+
color: '#22C55E', // Green-500
|
|
39
|
+
},
|
|
40
|
+
fail: {
|
|
41
|
+
icon: '✗', // X mark
|
|
42
|
+
color: '#EF4444', // Red-500
|
|
43
|
+
},
|
|
44
|
+
} as const
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Separator colors for sidebar sections.
|
|
48
|
+
*/
|
|
49
|
+
export const SEPARATOR_COLORS = {
|
|
50
|
+
line: '#374151', // Gray-700
|
|
51
|
+
text: '#6B7280', // Gray-500
|
|
52
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Table colors (uses info/blue scheme).
|
|
3
|
+
*/
|
|
4
|
+
export const TABLE_COLORS = {
|
|
5
|
+
border: '#3B82F6', // Blue-500 (same as info)
|
|
6
|
+
background: '#3B82F615', // Blue with 8% opacity
|
|
7
|
+
headerText: '#F9FAFB', // Gray-50
|
|
8
|
+
cellText: '#E5E7EB', // Gray-200
|
|
9
|
+
title: '#F9FAFB', // Gray-50
|
|
10
|
+
separator: '#3B82F650', // Blue with 30% opacity
|
|
11
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Common file extension to filetype mapping for syntax highlighting.
|
|
3
|
+
*/
|
|
4
|
+
export const COMMON_FILETYPES: Record<string, string> = {
|
|
5
|
+
ts: 'typescript',
|
|
6
|
+
tsx: 'tsx',
|
|
7
|
+
js: 'javascript',
|
|
8
|
+
jsx: 'javascript',
|
|
9
|
+
json: 'json',
|
|
10
|
+
md: 'markdown',
|
|
11
|
+
py: 'python',
|
|
12
|
+
rs: 'rust',
|
|
13
|
+
go: 'go',
|
|
14
|
+
java: 'java',
|
|
15
|
+
c: 'c',
|
|
16
|
+
cpp: 'cpp',
|
|
17
|
+
h: 'c',
|
|
18
|
+
hpp: 'cpp',
|
|
19
|
+
css: 'css',
|
|
20
|
+
html: 'html',
|
|
21
|
+
yaml: 'yaml',
|
|
22
|
+
yml: 'yaml',
|
|
23
|
+
sh: 'bash',
|
|
24
|
+
bash: 'bash',
|
|
25
|
+
zsh: 'bash',
|
|
26
|
+
toml: 'toml',
|
|
27
|
+
xml: 'xml',
|
|
28
|
+
sql: 'sql',
|
|
29
|
+
rb: 'ruby',
|
|
30
|
+
php: 'php',
|
|
31
|
+
swift: 'swift',
|
|
32
|
+
kt: 'kotlin',
|
|
33
|
+
scala: 'scala',
|
|
34
|
+
hs: 'haskell',
|
|
35
|
+
elm: 'elm',
|
|
36
|
+
vue: 'vue',
|
|
37
|
+
svelte: 'svelte',
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Resolves filetype from file path for syntax highlighting.
|
|
42
|
+
*
|
|
43
|
+
* @param filePath - Full file path or just filename
|
|
44
|
+
* @returns Filetype string for tree-sitter, or undefined
|
|
45
|
+
*/
|
|
46
|
+
export function resolveFiletype(filePath: string): string | undefined {
|
|
47
|
+
// Extract extension from path
|
|
48
|
+
const lastDot = filePath.lastIndexOf('.')
|
|
49
|
+
if (lastDot === -1) return undefined
|
|
50
|
+
|
|
51
|
+
const ext = filePath.slice(lastDot + 1).toLowerCase()
|
|
52
|
+
return COMMON_FILETYPES[ext]
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Gets the filename from a full path.
|
|
57
|
+
*
|
|
58
|
+
* @param filePath - Full file path
|
|
59
|
+
* @returns Just the filename
|
|
60
|
+
*/
|
|
61
|
+
export function getFileName(filePath: string): string {
|
|
62
|
+
const lastSlash = Math.max(filePath.lastIndexOf('/'), filePath.lastIndexOf('\\'))
|
|
63
|
+
return lastSlash === -1 ? filePath : filePath.slice(lastSlash + 1)
|
|
64
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format an object for display with configurable depth
|
|
3
|
+
*/
|
|
4
|
+
export function formatObject(obj: unknown, depth: number = 2, currentDepth: number = 0): string {
|
|
5
|
+
if (currentDepth >= depth) {
|
|
6
|
+
if (Array.isArray(obj)) return '[Array]'
|
|
7
|
+
if (typeof obj === 'object' && obj !== null) {
|
|
8
|
+
const constructorName = obj.constructor?.name ?? 'Object'
|
|
9
|
+
return `[${constructorName}]`
|
|
10
|
+
}
|
|
11
|
+
return String(obj)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
if (obj === null) return 'null'
|
|
15
|
+
if (obj === undefined) return 'undefined'
|
|
16
|
+
if (typeof obj === 'string') return `"${obj}"`
|
|
17
|
+
if (typeof obj === 'number' || typeof obj === 'boolean') return String(obj)
|
|
18
|
+
if (typeof obj === 'function') return '[Function]'
|
|
19
|
+
if (obj instanceof Date) return obj.toISOString()
|
|
20
|
+
if (obj instanceof Error) return `${obj.name}: ${obj.message}`
|
|
21
|
+
|
|
22
|
+
const indent = ' '.repeat(currentDepth)
|
|
23
|
+
const childIndent = ' '.repeat(currentDepth + 1)
|
|
24
|
+
|
|
25
|
+
if (Array.isArray(obj)) {
|
|
26
|
+
if (obj.length === 0) return '[]'
|
|
27
|
+
const items = obj.map((item) => formatObject(item, depth, currentDepth + 1))
|
|
28
|
+
return `[\n${childIndent}${items.join(`,\n${childIndent}`)}\n${indent}]`
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (typeof obj === 'object') {
|
|
32
|
+
const entries = Object.entries(obj)
|
|
33
|
+
if (entries.length === 0) return '{}'
|
|
34
|
+
const pairs = entries.map(
|
|
35
|
+
([key, value]) => `${key}: ${formatObject(value, depth, currentDepth + 1)}`,
|
|
36
|
+
)
|
|
37
|
+
return `{\n${childIndent}${pairs.join(`,\n${childIndent}`)}\n${indent}}`
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return String(obj)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Capture a stack trace, filtering out internal frames
|
|
45
|
+
*/
|
|
46
|
+
export function captureTrace(): string {
|
|
47
|
+
const err = new Error()
|
|
48
|
+
const stack = err.stack ?? ''
|
|
49
|
+
const lines = stack.split('\n')
|
|
50
|
+
// Skip the first 4 lines: Error, captureTrace, trace method, and the log method
|
|
51
|
+
return lines.slice(4).join('\n')
|
|
52
|
+
}
|