@navios/commander-tui 1.1.0 → 1.2.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.
Files changed (37) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +27 -0
  3. package/dist/tsconfig.tsbuildinfo +1 -1
  4. package/lib/index.cjs +321 -14
  5. package/lib/index.cjs.map +1 -1
  6. package/lib/index.d.cts +160 -126
  7. package/lib/index.d.cts.map +1 -1
  8. package/lib/index.d.mts +146 -112
  9. package/lib/index.d.mts.map +1 -1
  10. package/lib/index.mjs +316 -16
  11. package/lib/index.mjs.map +1 -1
  12. package/lib/{screen_manager_bridge-DT-l0rxa.mjs → screen_manager_bridge-Bk1i53h5.mjs} +1 -1
  13. package/lib/{screen_manager_bridge-D2BBwKcF.mjs → screen_manager_bridge-BwPVr0bX.mjs} +5 -3
  14. package/lib/screen_manager_bridge-BwPVr0bX.mjs.map +1 -0
  15. package/lib/{screen_manager_bridge-hMUrLiBP.cjs → screen_manager_bridge-CWxLO0CK.cjs} +5 -3
  16. package/lib/screen_manager_bridge-CWxLO0CK.cjs.map +1 -0
  17. package/lib/{screen_manager_bridge-Cp2p1Ix3.cjs → screen_manager_bridge-DXc57iXW.cjs} +1 -1
  18. package/package.json +1 -1
  19. package/src/__tests__/components/__snapshots__/filter_bar.spec.tsx.snap +2556 -0
  20. package/src/__tests__/components/__snapshots__/loading_message.spec.tsx.snap +1589 -0
  21. package/src/__tests__/components/__snapshots__/log_message.spec.tsx.snap +3681 -0
  22. package/src/__tests__/components/__snapshots__/progress_message.spec.tsx.snap +2002 -0
  23. package/src/__tests__/components/__snapshots__/prompt_renderer.spec.tsx.snap +3584 -0
  24. package/src/__tests__/components/__snapshots__/sidebar.spec.tsx.snap +3186 -0
  25. package/src/__tests__/services/logger.spec.ts +5 -3
  26. package/src/factories/index.ts +1 -0
  27. package/src/factories/isomorphic-logger.factory.ts +23 -0
  28. package/src/index.ts +5 -0
  29. package/src/interfaces/index.ts +1 -0
  30. package/src/interfaces/isomorphic-logger.ts +9 -0
  31. package/src/services/logger.ts +1 -1
  32. package/src/services/screen_manager.tsx +1 -1
  33. package/src/tokens/logger.ts +9 -0
  34. package/src/types/screen.types.ts +1 -1
  35. package/src/utils/format.ts +3 -2
  36. package/lib/screen_manager_bridge-D2BBwKcF.mjs.map +0 -1
  37. package/lib/screen_manager_bridge-hMUrLiBP.cjs.map +0 -1
@@ -1,12 +1,14 @@
1
- import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
2
1
  import { TestContainer } from '@navios/core/testing'
2
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
3
+
4
+ import type { LogLevel } from '@navios/core'
3
5
 
4
6
  import { ScreenLoggerInstance } from '../../services/logger.ts'
5
7
  import { Screen } from '../../tokens/index.ts'
6
8
  import { createMockScreenInstance } from '../utils/factories.ts'
7
9
 
10
+ import type { ScreenInstance } from '../../index.js'
8
11
  import type { MockScreenInstance } from '../utils/factories.ts'
9
- import type { LogLevel } from '@navios/core'
10
12
 
11
13
  describe('ScreenLoggerInstance', () => {
12
14
  let container: TestContainer
@@ -17,7 +19,7 @@ describe('ScreenLoggerInstance', () => {
17
19
  beforeEach(() => {
18
20
  container = new TestContainer()
19
21
  mockScreen = createMockScreenInstance()
20
- container.bind(Screen).toValue(mockScreen)
22
+ container.bind(Screen).toValue(mockScreen as unknown as ScreenInstance)
21
23
  })
22
24
 
23
25
  afterEach(async () => {
@@ -1 +1,2 @@
1
+ export * from './isomorphic-logger.factory.js'
1
2
  export * from './screen.factory.ts'
@@ -0,0 +1,23 @@
1
+ import { Factory, inject, Logger, type FactoryContext } from '@navios/core'
2
+
3
+ import { ScreenManager } from '../services/screen_manager.js'
4
+ import { IsomorphicLogger, ScreenLogger } from '../tokens/logger.js'
5
+
6
+ import type { IsomorphicLoggerInterface } from '../interfaces/isomorphic-logger.js'
7
+ import type { LoggerOptions } from '../schemas/index.js'
8
+
9
+ @Factory({
10
+ token: IsomorphicLogger,
11
+ })
12
+ export class IsomorphicLoggerFactory {
13
+ private readonly screenManager = inject(ScreenManager)
14
+
15
+ async create(ctx: FactoryContext, options: LoggerOptions): Promise<IsomorphicLoggerInterface> {
16
+ if (this.screenManager.isTuiBound()) {
17
+ return ctx.inject(ScreenLogger, options)
18
+ }
19
+ return ctx.inject(Logger, {
20
+ context: options.context,
21
+ })
22
+ }
23
+ }
package/src/index.ts CHANGED
@@ -3,6 +3,11 @@
3
3
  // ============================================
4
4
  export * from './types/index.ts'
5
5
 
6
+ // ============================================
7
+ // Interfaces
8
+ // ============================================
9
+ export * from './interfaces/index.ts'
10
+
6
11
  // ============================================
7
12
  // Components
8
13
  // ============================================
@@ -0,0 +1 @@
1
+ export * from './isomorphic-logger.ts'
@@ -0,0 +1,9 @@
1
+ import type { LoggerInstance } from '@navios/core'
2
+
3
+ import type { ScreenLoggerInstance } from '../services/logger.ts'
4
+
5
+ type PublicLoggerMethods = Pick<LoggerInstance, keyof LoggerInstance>
6
+ type PublicScreenLoggerMethods = Pick<ScreenLoggerInstance, keyof ScreenLoggerInstance>
7
+ type ScreenOwnMethods = Partial<Omit<PublicScreenLoggerMethods, keyof PublicLoggerMethods>>
8
+
9
+ export interface IsomorphicLoggerInterface extends PublicLoggerMethods, ScreenOwnMethods {}
@@ -68,7 +68,7 @@ export class ScreenLoggerInstance implements LoggerService {
68
68
  }
69
69
 
70
70
  trace(msg: string | object, label?: string): this {
71
- const trace = captureTrace()
71
+ const trace = captureTrace(1)
72
72
  return this.write('verbose', msg, label, trace, 'trace')
73
73
  }
74
74
 
@@ -101,7 +101,7 @@ export class ScreenManager {
101
101
  this.renderer = await createCliRenderer({
102
102
  exitOnCtrlC: options?.exitOnCtrlC ?? true,
103
103
  useAlternateScreen: true,
104
- useMouse: options?.useMouse ?? false,
104
+ useMouse: options?.useMouse ?? true,
105
105
  })
106
106
 
107
107
  this.root = createRoot(this.renderer)
@@ -2,9 +2,18 @@ import { InjectionToken } from '@navios/core'
2
2
 
3
3
  import { LoggerOptionsSchema } from '../schemas/index.ts'
4
4
 
5
+ import type { IsomorphicLoggerInterface } from '../interfaces/isomorphic-logger.ts'
5
6
  import type { ScreenLoggerInstance } from '../services/index.ts'
6
7
 
7
8
  export const ScreenLogger = InjectionToken.create<ScreenLoggerInstance, typeof LoggerOptionsSchema>(
8
9
  'ScreenLoggerInstance',
9
10
  LoggerOptionsSchema,
10
11
  )
12
+ /**
13
+ * Isomorphic logger token for shared logger between TUI and Server.
14
+ * This token is used to inject the logger instance into the application.
15
+ */
16
+ export const IsomorphicLogger = InjectionToken.create<
17
+ IsomorphicLoggerInterface,
18
+ typeof LoggerOptionsSchema
19
+ >('IsomorphicLogger', LoggerOptionsSchema)
@@ -119,6 +119,6 @@ export interface BindOptions {
119
119
  autoClose?: boolean | number
120
120
  /** Theme to use for the TUI (theme object or preset name) */
121
121
  theme?: Theme | ThemePreset
122
- /** Enable mouse support (default: false) */
122
+ /** Enable mouse support (default: true) */
123
123
  useMouse?: boolean
124
124
  }
@@ -43,10 +43,11 @@ export function formatObject(obj: unknown, depth: number = 2, currentDepth: numb
43
43
  /**
44
44
  * Capture a stack trace, filtering out internal frames
45
45
  */
46
- export function captureTrace(): string {
46
+ export function captureTrace(offset: number = 0): string {
47
47
  const err = new Error()
48
48
  const stack = err.stack ?? ''
49
49
  const lines = stack.split('\n')
50
+ const begin = lines.findIndex((line) => line.includes('captureTrace'))
50
51
  // Skip the first 4 lines: Error, captureTrace, trace method, and the log method
51
- return lines.slice(4).join('\n')
52
+ return lines.slice(begin !== -1 ? begin + 1 + offset : 4).join('\n')
52
53
  }