@navios/commander 1.5.0 → 1.5.1

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 (119) hide show
  1. package/.turbo/turbo-build.log +49 -0
  2. package/.turbo/turbo-check.log +2 -0
  3. package/.turbo/turbo-lint.log +3 -0
  4. package/.turbo/turbo-test$colon$ci.log +117 -0
  5. package/CHANGELOG.md +3 -3
  6. package/README.md +8 -16
  7. package/dist/src/commander.factory.d.mts +126 -122
  8. package/dist/src/commander.factory.d.mts.map +1 -1
  9. package/dist/src/commands/help.command.d.mts +15 -11
  10. package/dist/src/commands/help.command.d.mts.map +1 -1
  11. package/dist/src/commands/index.d.mts +2 -2
  12. package/dist/src/decorators/cli-module.decorator.d.mts +51 -40
  13. package/dist/src/decorators/cli-module.decorator.d.mts.map +1 -1
  14. package/dist/src/decorators/command.decorator.d.mts +49 -37
  15. package/dist/src/decorators/command.decorator.d.mts.map +1 -1
  16. package/dist/src/decorators/index.d.mts +3 -3
  17. package/dist/src/define-environment.d.mts +9 -8
  18. package/dist/src/define-environment.d.mts.map +1 -1
  19. package/dist/src/index.d.mts +10 -10
  20. package/dist/src/interfaces/abstract-cli-adapter.interface.d.mts +45 -45
  21. package/dist/src/interfaces/command-handler.interface.d.mts +9 -9
  22. package/dist/src/interfaces/commander-execution-context.interface.d.mts +30 -30
  23. package/dist/src/interfaces/commander-execution-context.interface.d.mts.map +1 -1
  24. package/dist/src/interfaces/environment.interface.d.mts +7 -7
  25. package/dist/src/interfaces/index.d.mts +5 -5
  26. package/dist/src/legacy-compat/decorators/cli-module.decorator.d.mts +6 -5
  27. package/dist/src/legacy-compat/decorators/cli-module.decorator.d.mts.map +1 -1
  28. package/dist/src/legacy-compat/decorators/command.decorator.d.mts +7 -6
  29. package/dist/src/legacy-compat/decorators/command.decorator.d.mts.map +1 -1
  30. package/dist/src/legacy-compat/decorators/index.d.mts +3 -3
  31. package/dist/src/legacy-compat/index.d.mts +3 -3
  32. package/dist/src/metadata/command-entry.metadata.d.mts +5 -5
  33. package/dist/src/metadata/command-entry.metadata.d.mts.map +1 -1
  34. package/dist/src/metadata/command.metadata.d.mts +30 -24
  35. package/dist/src/metadata/command.metadata.d.mts.map +1 -1
  36. package/dist/src/metadata/index.d.mts +3 -3
  37. package/dist/src/overrides/help.command.d.mts +15 -11
  38. package/dist/src/overrides/help.command.d.mts.map +1 -1
  39. package/dist/src/services/cli-parser.service.d.mts +54 -54
  40. package/dist/src/services/cli-parser.service.d.mts.map +1 -1
  41. package/dist/src/services/command-registry.service.d.mts +75 -74
  42. package/dist/src/services/command-registry.service.d.mts.map +1 -1
  43. package/dist/src/services/commander-adapter.service.d.mts +49 -48
  44. package/dist/src/services/commander-adapter.service.d.mts.map +1 -1
  45. package/dist/src/services/index.d.mts +4 -4
  46. package/dist/src/tokens/execution-context.token.d.mts +9 -4
  47. package/dist/src/tokens/execution-context.token.d.mts.map +1 -1
  48. package/dist/src/tokens/help-command.token.d.mts +5 -4
  49. package/dist/src/tokens/index.d.mts +2 -2
  50. package/dist/src/utils/index.d.mts +2 -2
  51. package/dist/src/utils/runtime.d.mts +2 -2
  52. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  53. package/dist/tsconfig.tsbuildinfo +1 -1
  54. package/dist/tsdown.config.d.mts +3 -3
  55. package/dist/vitest.config.d.mts +3 -3
  56. package/lib/{cli-module.decorator-CRaNGvgl.d.cts → cli-module.decorator-BzsOEMPH.d.cts} +54 -53
  57. package/lib/cli-module.decorator-BzsOEMPH.d.cts.map +1 -0
  58. package/lib/{cli-module.decorator-bsP5gEn7.d.mts → cli-module.decorator-CCV_elPP.d.mts} +116 -115
  59. package/lib/cli-module.decorator-CCV_elPP.d.mts.map +1 -0
  60. package/lib/{cli-module.decorator-CkP22084.cjs → cli-module.decorator-CXt38aqF.cjs} +2 -2
  61. package/lib/cli-module.decorator-CXt38aqF.cjs.map +1 -0
  62. package/lib/{cli-module.decorator-UGbtkRYc.mjs → cli-module.decorator-DAjf_r_W.mjs} +2 -2
  63. package/lib/cli-module.decorator-DAjf_r_W.mjs.map +1 -0
  64. package/lib/{command.decorator-UrNJmQN0.cjs → command.decorator-HziankUv.cjs} +3 -3
  65. package/lib/command.decorator-HziankUv.cjs.map +1 -0
  66. package/lib/{command.decorator-DVLSAqYZ.mjs → command.decorator-QiRU7ny3.mjs} +3 -3
  67. package/lib/command.decorator-QiRU7ny3.mjs.map +1 -0
  68. package/lib/{help-command.token-CMWYI6em.cjs → help-command.token-DamE31Aw.cjs} +4 -4
  69. package/lib/{help-command.token-CMWYI6em.cjs.map → help-command.token-DamE31Aw.cjs.map} +1 -1
  70. package/lib/{help-command.token-C0Kgj60o.mjs → help-command.token-XHx3WkoD.mjs} +4 -4
  71. package/lib/{help-command.token-C0Kgj60o.mjs.map → help-command.token-XHx3WkoD.mjs.map} +1 -1
  72. package/lib/{help.command-dtZbhq0w.mjs → help.command-Bynoll_7.mjs} +5 -8
  73. package/lib/help.command-Bynoll_7.mjs.map +1 -0
  74. package/lib/{help.command-DQyv6ali.cjs → help.command-DvKmMpB7.cjs} +6 -9
  75. package/lib/help.command-DvKmMpB7.cjs.map +1 -0
  76. package/lib/index.cjs +102 -102
  77. package/lib/index.cjs.map +1 -1
  78. package/lib/index.d.cts +283 -283
  79. package/lib/index.d.cts.map +1 -1
  80. package/lib/index.d.mts +221 -221
  81. package/lib/index.d.mts.map +1 -1
  82. package/lib/index.mjs +101 -101
  83. package/lib/index.mjs.map +1 -1
  84. package/lib/legacy-compat/index.cjs +6 -28
  85. package/lib/legacy-compat/index.cjs.map +1 -1
  86. package/lib/legacy-compat/index.d.cts +3 -2
  87. package/lib/legacy-compat/index.d.cts.map +1 -1
  88. package/lib/legacy-compat/index.d.mts +3 -2
  89. package/lib/legacy-compat/index.d.mts.map +1 -1
  90. package/lib/legacy-compat/index.mjs +4 -25
  91. package/lib/legacy-compat/index.mjs.map +1 -1
  92. package/package.json +26 -16
  93. package/src/__tests__/commander.factory.e2e.spec.mts +22 -66
  94. package/src/commands/help.command.mts +1 -1
  95. package/src/decorators/cli-module.decorator.mts +4 -9
  96. package/src/decorators/command.decorator.mts +4 -4
  97. package/src/define-environment.mts +4 -4
  98. package/src/interfaces/command-handler.interface.mts +1 -1
  99. package/src/interfaces/commander-execution-context.interface.mts +1 -1
  100. package/src/legacy-compat/decorators/cli-module.decorator.mts +2 -1
  101. package/src/legacy-compat/decorators/command.decorator.mts +3 -2
  102. package/src/metadata/command-entry.metadata.mts +3 -6
  103. package/src/metadata/command.metadata.mts +6 -8
  104. package/src/overrides/help.command.mts +2 -2
  105. package/src/services/__tests__/cli-parser.service.spec.mts +23 -178
  106. package/src/services/cli-parser.service.mts +23 -27
  107. package/src/services/command-registry.service.mts +5 -5
  108. package/src/services/commander-adapter.service.mts +10 -27
  109. package/src/tokens/execution-context.token.mts +4 -6
  110. package/tsconfig.json +3 -0
  111. package/lib/cli-module.decorator-CRaNGvgl.d.cts.map +0 -1
  112. package/lib/cli-module.decorator-CkP22084.cjs.map +0 -1
  113. package/lib/cli-module.decorator-UGbtkRYc.mjs.map +0 -1
  114. package/lib/cli-module.decorator-bsP5gEn7.d.mts.map +0 -1
  115. package/lib/command.decorator-DVLSAqYZ.mjs.map +0 -1
  116. package/lib/command.decorator-UrNJmQN0.cjs.map +0 -1
  117. package/lib/help.command-DQyv6ali.cjs.map +0 -1
  118. package/lib/help.command-dtZbhq0w.mjs.map +0 -1
  119. package/project.json +0 -66
package/lib/index.mjs CHANGED
@@ -1,8 +1,8 @@
1
- import { a as extractCommandMetadata, i as CommandMetadataKey, n as CommandEntryKey, o as getCommandMetadata, r as extractModuleCommands, s as hasCommandMetadata, t as Command } from "./command.decorator-DVLSAqYZ.mjs";
2
- import { n as _CommandRegistryService, t as HelpCommandToken } from "./help-command.token-C0Kgj60o.mjs";
3
- import { t as CliModule } from "./cli-module.decorator-UGbtkRYc.mjs";
1
+ import { a as extractCommandMetadata, i as CommandMetadataKey, n as CommandEntryKey, o as getCommandMetadata, r as extractModuleCommands, s as hasCommandMetadata, t as Command } from "./command.decorator-QiRU7ny3.mjs";
2
+ import { n as _CommandRegistryService, t as HelpCommandToken } from "./help-command.token-XHx3WkoD.mjs";
3
+ import { t as CliModule } from "./cli-module.decorator-DAjf_r_W.mjs";
4
4
  import { AdapterToken, ConsoleLogger, Container, Injectable, InjectionToken, Logger, NaviosFactory, inject } from "@navios/core";
5
- import { z } from "zod";
5
+ import { z } from "zod/v4";
6
6
 
7
7
  export * from "@navios/core"
8
8
 
@@ -308,93 +308,6 @@ var HelpCommand = class {
308
308
  }
309
309
  };
310
310
 
311
- //#endregion
312
- //#region src/interfaces/commander-execution-context.interface.mts
313
- /**
314
- * Execution context for a command execution.
315
- *
316
- * Provides access to command metadata, path, and validated options during command execution.
317
- * This context is automatically injected and available via the `CommandExecutionContext` token.
318
- *
319
- * @example
320
- * ```typescript
321
- * import { inject, Injectable } from '@navios/core'
322
- * import { CommandExecutionContext } from '@navios/commander'
323
- *
324
- * @Injectable()
325
- * class CommandLogger {
326
- * private ctx = inject(CommandExecutionContext)
327
- *
328
- * log() {
329
- * console.log('Command:', this.ctx.getCommandPath())
330
- * console.log('Options:', this.ctx.getOptions())
331
- * }
332
- * }
333
- * ```
334
- */ var CommanderExecutionContext = class {
335
- command;
336
- commandPath;
337
- options;
338
- /**
339
- * @internal
340
- * Creates a new execution context.
341
- */ constructor(command, commandPath, options) {
342
- this.command = command;
343
- this.commandPath = commandPath;
344
- this.options = options;
345
- }
346
- /**
347
- * Gets the command metadata.
348
- *
349
- * @returns The command metadata including path and options schema
350
- */ getCommand() {
351
- return this.command;
352
- }
353
- /**
354
- * Gets the command path that was invoked.
355
- *
356
- * @returns The command path (e.g., 'greet', 'user:create')
357
- */ getCommandPath() {
358
- return this.commandPath;
359
- }
360
- /**
361
- * Gets the validated command options.
362
- *
363
- * Options are validated against the command's Zod schema if one was provided.
364
- *
365
- * @returns The validated options object
366
- */ getOptions() {
367
- return this.options;
368
- }
369
- };
370
-
371
- //#endregion
372
- //#region src/tokens/execution-context.token.mts
373
- const CommandExecutionContextInjectionToken = "CommanderExecutionContextInjectionToken";
374
- /**
375
- * Injection token for accessing the current command execution context.
376
- *
377
- * Use this token with `inject()` to access the `CommanderExecutionContext` in services
378
- * that need information about the currently executing command.
379
- *
380
- * @example
381
- * ```typescript
382
- * import { inject, Injectable } from '@navios/core'
383
- * import { CommandExecutionContext } from '@navios/commander'
384
- *
385
- * @Injectable()
386
- * class MyService {
387
- * private ctx = inject(CommandExecutionContext)
388
- *
389
- * doSomething() {
390
- * const commandPath = this.ctx.getCommandPath()
391
- * const options = this.ctx.getOptions()
392
- * // Use context information...
393
- * }
394
- * }
395
- * ```
396
- */ const CommandExecutionContext = InjectionToken.create(CommandExecutionContextInjectionToken);
397
-
398
311
  //#endregion
399
312
  //#region src/services/cli-parser.service.mts
400
313
  function applyDecs2203RFactory$1() {
@@ -687,7 +600,7 @@ var CliParserService = class {
687
600
  * Expected format: node script.js command [subcommand...] --flag value --boolean-flag positional1 positional2
688
601
  *
689
602
  * @param argv - Array of command-line arguments (typically process.argv)
690
- * @param optionsSchema - Optional Zod schema to determine boolean flags and option types
603
+ * @param optionsSchema - Optional zod/v4 schema to determine boolean flags and option types
691
604
  * @returns Parsed command (space-separated if multi-word), options, and positional arguments
692
605
  */ parse(argv, optionsSchema) {
693
606
  const args = argv.slice(2);
@@ -795,8 +708,8 @@ var CliParserService = class {
795
708
  return value;
796
709
  }
797
710
  /**
798
- * Extracts boolean field names from a Zod schema
799
- * Handles ZodObject, ZodOptional, and ZodDefault wrappers
711
+ * Extracts boolean field names from a zod/v4 schema
712
+ * Handles z.ZodObject, zod/v4Optional, and zod/v4Default wrappers
800
713
  */ extractBooleanFields(schema) {
801
714
  const booleanFields = /* @__PURE__ */ new Set();
802
715
  try {
@@ -810,8 +723,8 @@ var CliParserService = class {
810
723
  return booleanFields;
811
724
  }
812
725
  /**
813
- * Extracts array field names from a Zod schema
814
- * Handles ZodObject, ZodOptional, and ZodDefault wrappers
726
+ * Extracts array field names from a zod/v4 schema
727
+ * Handles z.ZodObject, zod/v4Optional, and zod/v4Default wrappers
815
728
  */ extractArrayFields(schema) {
816
729
  const arrayFields = /* @__PURE__ */ new Set();
817
730
  try {
@@ -825,8 +738,8 @@ var CliParserService = class {
825
738
  return arrayFields;
826
739
  }
827
740
  /**
828
- * Checks if a Zod schema represents a boolean type
829
- * Unwraps ZodOptional and ZodDefault using Zod v4 API
741
+ * Checks if a zod/v4 schema represents a boolean type
742
+ * Unwraps zod/v4Optional and zod/v4Default using zod/v4 v4 API
830
743
  */ isSchemaBoolean(schema) {
831
744
  try {
832
745
  let currentSchema = schema;
@@ -841,8 +754,8 @@ var CliParserService = class {
841
754
  }
842
755
  }
843
756
  /**
844
- * Checks if a Zod schema represents an array type
845
- * Unwraps ZodOptional and ZodDefault using Zod v4 API
757
+ * Checks if a zod/v4 schema represents an array type
758
+ * Unwraps zod/v4Optional and zod/v4Default using zod/v4 v4 API
846
759
  */ isSchemaArray(schema) {
847
760
  try {
848
761
  let currentSchema = schema;
@@ -861,6 +774,93 @@ var CliParserService = class {
861
774
  }
862
775
  };
863
776
 
777
+ //#endregion
778
+ //#region src/interfaces/commander-execution-context.interface.mts
779
+ /**
780
+ * Execution context for a command execution.
781
+ *
782
+ * Provides access to command metadata, path, and validated options during command execution.
783
+ * This context is automatically injected and available via the `CommandExecutionContext` token.
784
+ *
785
+ * @example
786
+ * ```typescript
787
+ * import { inject, Injectable } from '@navios/core'
788
+ * import { CommandExecutionContext } from '@navios/commander'
789
+ *
790
+ * @Injectable()
791
+ * class CommandLogger {
792
+ * private ctx = inject(CommandExecutionContext)
793
+ *
794
+ * log() {
795
+ * console.log('Command:', this.ctx.getCommandPath())
796
+ * console.log('Options:', this.ctx.getOptions())
797
+ * }
798
+ * }
799
+ * ```
800
+ */ var CommanderExecutionContext = class {
801
+ command;
802
+ commandPath;
803
+ options;
804
+ /**
805
+ * @internal
806
+ * Creates a new execution context.
807
+ */ constructor(command, commandPath, options) {
808
+ this.command = command;
809
+ this.commandPath = commandPath;
810
+ this.options = options;
811
+ }
812
+ /**
813
+ * Gets the command metadata.
814
+ *
815
+ * @returns The command metadata including path and options schema
816
+ */ getCommand() {
817
+ return this.command;
818
+ }
819
+ /**
820
+ * Gets the command path that was invoked.
821
+ *
822
+ * @returns The command path (e.g., 'greet', 'user:create')
823
+ */ getCommandPath() {
824
+ return this.commandPath;
825
+ }
826
+ /**
827
+ * Gets the validated command options.
828
+ *
829
+ * Options are validated against the command's zod/v4 schema if one was provided.
830
+ *
831
+ * @returns The validated options object
832
+ */ getOptions() {
833
+ return this.options;
834
+ }
835
+ };
836
+
837
+ //#endregion
838
+ //#region src/tokens/execution-context.token.mts
839
+ const CommandExecutionContextInjectionToken = "CommanderExecutionContextInjectionToken";
840
+ /**
841
+ * Injection token for accessing the current command execution context.
842
+ *
843
+ * Use this token with `inject()` to access the `CommanderExecutionContext` in services
844
+ * that need information about the currently executing command.
845
+ *
846
+ * @example
847
+ * ```typescript
848
+ * import { inject, Injectable } from '@navios/core'
849
+ * import { CommandExecutionContext } from '@navios/commander'
850
+ *
851
+ * @Injectable()
852
+ * class MyService {
853
+ * private ctx = inject(CommandExecutionContext)
854
+ *
855
+ * doSomething() {
856
+ * const commandPath = this.ctx.getCommandPath()
857
+ * const options = this.ctx.getOptions()
858
+ * // Use context information...
859
+ * }
860
+ * }
861
+ * ```
862
+ */ const CommandExecutionContext = InjectionToken.create(CommandExecutionContextInjectionToken);
863
+
864
864
  //#endregion
865
865
  //#region src/services/commander-adapter.service.mts
866
866
  function applyDecs2203RFactory() {
@@ -1362,7 +1362,7 @@ function dynamicImport(modulePath) {
1362
1362
  }
1363
1363
  const { overrideConsoleLogger, ScreenManager } = tuiModule;
1364
1364
  overrideConsoleLogger(options.tuiOptions?.hideDefaultScreen ?? false);
1365
- if (options.tuiOptions?.hideDefaultScreen) await import("./help.command-dtZbhq0w.mjs");
1365
+ if (options.tuiOptions?.hideDefaultScreen) await import("./help.command-Bynoll_7.mjs");
1366
1366
  const app = await NaviosFactory.create(appModule, {
1367
1367
  adapter: defineCliEnvironment(),
1368
1368
  logger: options.logLevels
package/lib/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["inject","Logger","z","Command","CommandRegistryService","HelpCommandToken","helpOptionsSchema","object","command","string","optional","token","path","description","optionsSchema","HelpCommand","logger","context","commandRegistry","execute","options","log","formatCommandHelp","formatCommandList","CommanderExecutionContext","command","commandPath","options","getCommand","getCommandPath","getOptions","InjectionToken","CommandExecutionContextInjectionToken","CommandExecutionContext","create","Injectable","CliParserService","parse","argv","optionsSchema","args","slice","length","Error","booleanFields","extractBooleanFields","Set","arrayFields","extractArrayFields","commandParts","i","startsWith","push","command","join","options","positionals","arg","key","equalIndex","indexOf","optionName","optionValue","camelCaseKey","camelCase","isArray","has","parseValue","isBoolean","nextArg","flags","flag","str","replace","_","letter","toUpperCase","value","undefined","test","parseInt","parseFloat","endsWith","JSON","schema","typeName","def","type","shape","fieldSchema","Object","entries","isSchemaBoolean","add","isSchemaArray","currentSchema","innerType","Container","inject","Injectable","Logger","HelpCommand","CommanderExecutionContext","CommandEntryKey","extractCommandMetadata","hasCommandMetadata","CommandExecutionContext","CliParserService","CommandRegistryService","CommanderAdapterService","container","commandRegistry","cliParser","logger","context","options","isReady","setupAdapter","onModulesInit","modules","registerBuiltInCommands","moduleName","metadata","commands","customEntries","get","commandClass","warn","name","commandMetadata","register","path","class","helpMetadata","ready","dispose","clear","run","argv","process","Error","preliminaryParse","parse","help","h","command","executeCommand","getByPath","parsed","optionsSchema","error","message","includes","log","validatedOptions","executionContext","requestId","Date","now","Math","random","toString","substring","scopeContainer","beginRequest","addInstance","commandInstance","execute","endRequest","getAllCommands","getAllAsArray","AdapterToken","CommanderAdapterService","CommandRegistryService","CliParserService","defineCliEnvironment","tokens","Map","ConsoleLogger","NaviosFactory","defineCliEnvironment","dynamicImport","CommanderFactory","create","appModule","options","enableTUI","tuiModule","adapter","tuiOptions","isBun","isBunRuntime","error","console","Error","overrideConsoleLogger","ScreenManager","hideDefaultScreen","app","logger","logLevels","screenManager","get","setup","bind","exitOnCtrlC","sidebarWidth","sidebarPosition","sidebarTitle","autoClose","theme","useMouse","useOpenTUI","undefined","showTimeDiff","showPid","showLogLevel","showPrefix","showContext","showTimestamp"],"sources":["../src/commands/help.command.mts","../src/interfaces/commander-execution-context.interface.mts","../src/tokens/execution-context.token.mts","../src/services/cli-parser.service.mts","../src/services/commander-adapter.service.mts","../src/define-environment.mts","../src/utils/runtime.mts","../src/commander.factory.mts"],"sourcesContent":["import { inject, Logger } from '@navios/core'\nimport { z } from 'zod'\n\nimport { Command } from '../decorators/command.decorator.mjs'\nimport { CommandRegistryService } from '../services/command-registry.service.mjs'\nimport { HelpCommandToken } from '../tokens/help-command.token.mjs'\n\nimport type { CommandHandler } from '../interfaces/command-handler.interface.mjs'\n\nconst helpOptionsSchema = z.object({\n command: z.string().optional(),\n})\n\ntype HelpOptions = z.infer<typeof helpOptionsSchema>\n\n/**\n * Built-in help command that lists all available commands or shows help for a specific command.\n *\n * @public\n */\n@Command({\n token: HelpCommandToken,\n path: 'help',\n description: 'Show available commands or help for a specific command',\n optionsSchema: helpOptionsSchema,\n})\nexport class HelpCommand implements CommandHandler<HelpOptions> {\n private logger = inject(Logger, { context: 'Commander' })\n private commandRegistry = inject(CommandRegistryService)\n\n async execute(options: HelpOptions): Promise<void> {\n if (options.command) {\n this.logger.log(this.commandRegistry.formatCommandHelp(options.command))\n } else {\n this.logger.log(this.commandRegistry.formatCommandList())\n }\n }\n}\n","import type { CommandMetadata } from '../metadata/command.metadata.mjs'\n\n/**\n * Execution context for a command execution.\n *\n * Provides access to command metadata, path, and validated options during command execution.\n * This context is automatically injected and available via the `CommandExecutionContext` token.\n *\n * @example\n * ```typescript\n * import { inject, Injectable } from '@navios/core'\n * import { CommandExecutionContext } from '@navios/commander'\n *\n * @Injectable()\n * class CommandLogger {\n * private ctx = inject(CommandExecutionContext)\n *\n * log() {\n * console.log('Command:', this.ctx.getCommandPath())\n * console.log('Options:', this.ctx.getOptions())\n * }\n * }\n * ```\n */\nexport class CommanderExecutionContext {\n /**\n * @internal\n * Creates a new execution context.\n */\n constructor(\n private readonly command: CommandMetadata,\n private readonly commandPath: string,\n private readonly options: any,\n ) {}\n\n /**\n * Gets the command metadata.\n *\n * @returns The command metadata including path and options schema\n */\n getCommand(): CommandMetadata {\n return this.command\n }\n\n /**\n * Gets the command path that was invoked.\n *\n * @returns The command path (e.g., 'greet', 'user:create')\n */\n getCommandPath(): string {\n return this.commandPath\n }\n\n /**\n * Gets the validated command options.\n *\n * Options are validated against the command's Zod schema if one was provided.\n *\n * @returns The validated options object\n */\n getOptions(): any {\n return this.options\n }\n}\n","import { InjectionToken } from '@navios/core'\n\nimport type { CommanderExecutionContext } from '../interfaces/index.mjs'\n\nconst CommandExecutionContextInjectionToken =\n 'CommanderExecutionContextInjectionToken'\n\n/**\n * Injection token for accessing the current command execution context.\n *\n * Use this token with `inject()` to access the `CommanderExecutionContext` in services\n * that need information about the currently executing command.\n *\n * @example\n * ```typescript\n * import { inject, Injectable } from '@navios/core'\n * import { CommandExecutionContext } from '@navios/commander'\n *\n * @Injectable()\n * class MyService {\n * private ctx = inject(CommandExecutionContext)\n *\n * doSomething() {\n * const commandPath = this.ctx.getCommandPath()\n * const options = this.ctx.getOptions()\n * // Use context information...\n * }\n * }\n * ```\n */\nexport const CommandExecutionContext =\n InjectionToken.create<CommanderExecutionContext>(\n CommandExecutionContextInjectionToken,\n )\n","import type { ZodObject, ZodType } from 'zod'\n\nimport { Injectable } from '@navios/core'\n\n/**\n * Result of parsing command-line arguments.\n *\n * @public\n */\nexport interface ParsedCliArgs {\n /**\n * The command path (e.g., 'greet', 'user:create').\n * Multi-word commands are joined with spaces.\n */\n command: string\n /**\n * Parsed options as key-value pairs.\n * Keys are converted from kebab-case to camelCase.\n */\n options: Record<string, any>\n /**\n * Positional arguments that don't match any option flags.\n */\n positionals: string[]\n}\n\n/**\n * Service for parsing command-line arguments.\n *\n * Handles parsing of various CLI argument formats including:\n * - Long options: `--key value` or `--key=value`\n * - Short options: `-k value` or `-abc` (multiple flags)\n * - Boolean flags\n * - Array options\n * - Positional arguments\n *\n * @public\n */\n@Injectable()\nexport class CliParserService {\n /**\n * Parses command-line arguments from process.argv\n * Commands can be multi-word (e.g., 'db migrate', 'cache clear')\n * Expected format: node script.js command [subcommand...] --flag value --boolean-flag positional1 positional2\n *\n * @param argv - Array of command-line arguments (typically process.argv)\n * @param optionsSchema - Optional Zod schema to determine boolean flags and option types\n * @returns Parsed command (space-separated if multi-word), options, and positional arguments\n */\n parse(argv: string[], optionsSchema?: ZodObject): ParsedCliArgs {\n // Skip first two args (node and script path)\n const args = argv.slice(2)\n\n if (args.length === 0) {\n throw new Error('[Navios Commander] No command provided')\n }\n\n // Extract boolean and array field names from schema for accurate parsing\n const booleanFields = optionsSchema\n ? this.extractBooleanFields(optionsSchema)\n : new Set<string>()\n const arrayFields = optionsSchema\n ? this.extractArrayFields(optionsSchema)\n : new Set<string>()\n\n // Collect command words until we hit an argument that starts with '-' or '--'\n const commandParts: string[] = []\n let i = 0\n while (i < args.length && !args[i].startsWith('-')) {\n commandParts.push(args[i])\n i++\n }\n\n if (commandParts.length === 0) {\n throw new Error('[Navios Commander] No command provided')\n }\n\n const command = commandParts.join(' ')\n const options: Record<string, any> = {}\n const positionals: string[] = []\n while (i < args.length) {\n const arg = args[i]\n\n if (arg.startsWith('--')) {\n // Long option format: --key=value or --key value\n const key = arg.slice(2)\n const equalIndex = key.indexOf('=')\n\n if (equalIndex !== -1) {\n // Format: --key=value\n const optionName = key.slice(0, equalIndex)\n const optionValue = key.slice(equalIndex + 1)\n const camelCaseKey = this.camelCase(optionName)\n const isArray =\n arrayFields.has(camelCaseKey) || arrayFields.has(optionName)\n\n if (isArray) {\n // For array fields, accumulate values\n if (!options[camelCaseKey]) {\n options[camelCaseKey] = []\n }\n options[camelCaseKey].push(this.parseValue(optionValue))\n } else {\n options[camelCaseKey] = this.parseValue(optionValue)\n }\n i++\n } else {\n // Format: --key value or --boolean-flag\n const camelCaseKey = this.camelCase(key)\n const isBoolean =\n booleanFields.has(camelCaseKey) || booleanFields.has(key)\n const isArray = arrayFields.has(camelCaseKey) || arrayFields.has(key)\n const nextArg = args[i + 1]\n\n if (isBoolean) {\n // Known boolean flag from schema\n options[camelCaseKey] = true\n i++\n } else if (isArray && nextArg && !nextArg.startsWith('-')) {\n // Known array field from schema - accumulate values\n if (!options[camelCaseKey]) {\n options[camelCaseKey] = []\n }\n options[camelCaseKey].push(this.parseValue(nextArg))\n i += 2\n } else if (nextArg && !nextArg.startsWith('-')) {\n // Has a value\n options[camelCaseKey] = this.parseValue(nextArg)\n i += 2\n } else {\n // Assume boolean flag\n options[camelCaseKey] = true\n i++\n }\n }\n } else if (arg.startsWith('-') && arg.length > 1 && arg !== '-') {\n // Short option format: -k value or -abc (multiple flags)\n const flags = arg.slice(1)\n\n if (flags.length === 1) {\n // Single short flag: -k value or -k\n const isBoolean = booleanFields.has(flags)\n const isArray = arrayFields.has(flags)\n const nextArg = args[i + 1]\n\n if (isBoolean) {\n // Known boolean flag from schema\n options[flags] = true\n i++\n } else if (isArray && nextArg && !nextArg.startsWith('-')) {\n // Known array field from schema - accumulate values\n if (!options[flags]) {\n options[flags] = []\n }\n options[flags].push(this.parseValue(nextArg))\n i += 2\n } else if (nextArg && !nextArg.startsWith('-')) {\n options[flags] = this.parseValue(nextArg)\n i += 2\n } else {\n options[flags] = true\n i++\n }\n } else {\n // Multiple short flags: -abc -> {a: true, b: true, c: true}\n for (const flag of flags) {\n options[flag] = true\n }\n i++\n }\n } else {\n // Positional argument\n positionals.push(arg)\n i++\n }\n }\n\n return {\n command,\n options,\n positionals,\n }\n }\n\n /**\n * Converts kebab-case to camelCase\n */\n private camelCase(str: string): string {\n return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase())\n }\n\n /**\n * Attempts to parse string values into appropriate types\n */\n private parseValue(value: string): any {\n // Check for boolean\n if (value === 'true') return true\n if (value === 'false') return false\n\n // Check for null/undefined\n if (value === 'null') return null\n if (value === 'undefined') return undefined\n\n // Check for number\n if (/^-?\\d+$/.test(value)) {\n return parseInt(value, 10)\n }\n if (/^-?\\d+\\.\\d+$/.test(value)) {\n return parseFloat(value)\n }\n\n // Check for JSON\n if (\n (value.startsWith('{') && value.endsWith('}')) ||\n (value.startsWith('[') && value.endsWith(']'))\n ) {\n try {\n return JSON.parse(value)\n } catch {\n // If parsing fails, return as string\n return value\n }\n }\n\n // Return as string\n return value\n }\n\n /**\n * Extracts boolean field names from a Zod schema\n * Handles ZodObject, ZodOptional, and ZodDefault wrappers\n */\n private extractBooleanFields(schema: ZodObject): Set<string> {\n const booleanFields = new Set<string>()\n\n try {\n // Check if schema has _def.typeName (Zod schema structure)\n const typeName = schema.def.type\n\n if (typeName === 'object') {\n // Extract shape from ZodObject\n const shape = schema.def.shape\n\n if (shape && typeof shape === 'object') {\n for (const [key, fieldSchema] of Object.entries(shape)) {\n if (this.isSchemaBoolean(fieldSchema as any)) {\n booleanFields.add(key)\n }\n }\n }\n }\n } catch {\n // Silently fail if schema introspection fails\n }\n\n return booleanFields\n }\n\n /**\n * Extracts array field names from a Zod schema\n * Handles ZodObject, ZodOptional, and ZodDefault wrappers\n */\n private extractArrayFields(schema: ZodObject): Set<string> {\n const arrayFields = new Set<string>()\n\n try {\n const typeName = schema.def.type\n\n if (typeName === 'object') {\n const shape = schema.def.shape\n\n if (shape && typeof shape === 'object') {\n for (const [key, fieldSchema] of Object.entries(shape)) {\n if (this.isSchemaArray(fieldSchema as any)) {\n arrayFields.add(key)\n }\n }\n }\n }\n } catch {\n // Silently fail if schema introspection fails\n }\n\n return arrayFields\n }\n\n /**\n * Checks if a Zod schema represents a boolean type\n * Unwraps ZodOptional and ZodDefault using Zod v4 API\n */\n private isSchemaBoolean(schema: ZodType): boolean {\n try {\n let currentSchema = schema\n let typeName = currentSchema.def.type\n\n // Unwrap ZodOptional and ZodDefault using Zod v4's def.innerType\n while (typeName === 'optional' || typeName === 'default') {\n currentSchema = (currentSchema as any)?.def?.innerType || currentSchema\n typeName = currentSchema.def.type\n }\n\n return typeName === 'boolean'\n } catch {\n return false\n }\n }\n\n /**\n * Checks if a Zod schema represents an array type\n * Unwraps ZodOptional and ZodDefault using Zod v4 API\n */\n private isSchemaArray(schema: ZodType): boolean {\n try {\n let currentSchema = schema\n let typeName = currentSchema.def.type\n\n // Unwrap ZodOptional and ZodDefault using Zod v4's def.innerType\n while (typeName === 'optional' || typeName === 'default') {\n currentSchema = (currentSchema as any)?.def?.innerType || currentSchema\n typeName = currentSchema.def.type\n }\n\n return typeName === 'array'\n } catch {\n return false\n }\n }\n}\n","import type { ClassType, ModuleMetadata } from '@navios/core'\n\nimport {\n Container,\n inject,\n Injectable,\n InjectionToken,\n Logger,\n} from '@navios/core'\n\nimport type { AbstractCliAdapterInterface } from '../interfaces/abstract-cli-adapter.interface.mjs'\nimport type { CommandHandler } from '../interfaces/command-handler.interface.mjs'\nimport type { CliAdapterOptions } from '../interfaces/environment.interface.mjs'\nimport type { CommandEntryValue } from '../metadata/command-entry.metadata.mjs'\n\nimport { HelpCommand } from '../commands/help.command.mjs'\nimport { CommanderExecutionContext } from '../interfaces/commander-execution-context.interface.mjs'\nimport { CommandEntryKey } from '../metadata/command-entry.metadata.mjs'\nimport {\n extractCommandMetadata,\n hasCommandMetadata,\n} from '../metadata/index.mjs'\nimport { CommandExecutionContext } from '../tokens/index.mjs'\nimport { CliParserService } from './cli-parser.service.mjs'\nimport { CommandRegistryService } from './command-registry.service.mjs'\n\n/**\n * CLI adapter service that implements the AbstractCliAdapterInterface.\n * Handles command discovery, registration, parsing, and execution.\n *\n * @public\n */\n@Injectable()\nexport class CommanderAdapterService implements AbstractCliAdapterInterface {\n private container = inject(Container)\n private commandRegistry = inject(CommandRegistryService)\n private cliParser = inject(CliParserService)\n private logger = inject(Logger, { context: 'Commander' })\n\n private options: CliAdapterOptions = {}\n private isReady = false\n\n /**\n * Sets up the adapter with the provided options.\n * Called during application initialization.\n */\n async setupAdapter(options: CliAdapterOptions): Promise<void> {\n this.options = options ?? {}\n }\n\n /**\n * Called after all modules are loaded.\n * Iterates through modules and extracts commands from customEntries.\n */\n async onModulesInit(modules: Map<string, ModuleMetadata>): Promise<void> {\n // Register built-in help command\n this.registerBuiltInCommands()\n\n for (const [moduleName, metadata] of modules) {\n const commands = metadata.customEntries.get(CommandEntryKey) as\n | CommandEntryValue\n | undefined\n if (!commands) continue\n\n for (const commandClass of commands) {\n if (!hasCommandMetadata(commandClass)) {\n this.logger.warn(\n `Class ${commandClass.name} in module ${moduleName} ` +\n `is listed in commands but has no @Command decorator. Skipping.`,\n )\n continue\n }\n\n const commandMetadata = extractCommandMetadata(commandClass)\n this.commandRegistry.register(commandMetadata.path, {\n class: commandClass,\n metadata: commandMetadata,\n moduleName,\n })\n }\n }\n }\n\n /**\n * Registers built-in commands like help.\n */\n private registerBuiltInCommands(): void {\n const helpMetadata = extractCommandMetadata(HelpCommand)\n this.commandRegistry.register(helpMetadata.path, {\n class: HelpCommand,\n metadata: helpMetadata,\n moduleName: '@navios/commander',\n })\n }\n\n /**\n * Signals that the adapter is ready to handle commands.\n */\n async ready(): Promise<void> {\n this.isReady = true\n }\n\n /**\n * Disposes of the adapter and cleans up resources.\n */\n async dispose(): Promise<void> {\n this.commandRegistry.clear()\n this.isReady = false\n }\n\n /**\n * Run the CLI application with the given arguments.\n * Parses arguments and executes the matching command.\n */\n async run(argv: string[] = process.argv): Promise<void> {\n if (!this.isReady) {\n throw new Error('Adapter not ready. Call app.init() first.')\n }\n\n try {\n // Preliminary parse to find command\n const preliminaryParse = this.cliParser.parse(argv)\n\n // Handle --help or -h flags by showing help for the specific command\n if (preliminaryParse.options.help || preliminaryParse.options.h) {\n // If command is 'help', show general help\n // Otherwise show help for the specific command\n if (preliminaryParse.command === 'help') {\n await this.executeCommand('help', {})\n } else {\n await this.executeCommand('help', { command: preliminaryParse.command })\n }\n return\n }\n\n const command = this.commandRegistry.getByPath(preliminaryParse.command)\n\n // Re-parse with schema if available\n const parsed = command?.metadata.optionsSchema\n ? this.cliParser.parse(argv, command.metadata.optionsSchema)\n : preliminaryParse\n\n await this.executeCommand(parsed.command, parsed.options)\n } catch (error) {\n if (error instanceof Error) {\n this.logger.error(`Error: ${error.message}`)\n if (error.message.includes('Command not found')) {\n this.logger.log('')\n await this.executeCommand('help', {})\n }\n }\n throw error\n }\n }\n\n /**\n * Execute a command programmatically with the provided options.\n */\n async executeCommand(\n path: string,\n options: Record<string, unknown> = {},\n ): Promise<void> {\n const command = this.commandRegistry.getByPath(path)\n if (!command) {\n throw new Error(`[Navios Commander] Command not found: ${path}`)\n }\n\n const { class: commandClass, metadata } = command\n\n // Validate options\n let validatedOptions = options\n if (metadata.optionsSchema) {\n validatedOptions = metadata.optionsSchema.parse(options)\n }\n\n // Create execution context\n const executionContext = new CommanderExecutionContext(\n metadata,\n path,\n validatedOptions,\n )\n\n // Begin request scope\n const requestId = `cmd-${Date.now()}-${Math.random().toString(36).substring(7)}`\n const scopeContainer = this.container.beginRequest(requestId)\n scopeContainer.addInstance(CommandExecutionContext, executionContext)\n\n try {\n const commandInstance = await scopeContainer.get<CommandHandler>(\n commandClass as unknown as InjectionToken<CommandHandler>,\n )\n\n if (!commandInstance.execute) {\n throw new Error(`Command ${path} does not implement execute method`)\n }\n\n await commandInstance.execute(validatedOptions)\n } finally {\n await scopeContainer.endRequest()\n }\n }\n\n /**\n * Get all registered command paths and their class references.\n */\n getAllCommands(): Array<{ path: string; class: ClassType }> {\n return this.commandRegistry.getAllAsArray()\n }\n}\n","import type { AnyInjectableType, InjectionToken } from '@navios/core'\n\nimport { AdapterToken } from '@navios/core'\n\nimport { CommanderAdapterService } from './services/commander-adapter.service.mjs'\nimport { CommandRegistryService } from './services/command-registry.service.mjs'\nimport { CliParserService } from './services/cli-parser.service.mjs'\n\n/**\n * Defines the CLI environment configuration for use with NaviosFactory.\n *\n * This function returns the token mappings needed to configure a CLI application.\n * Use it with `NaviosFactory.create()` to create a CLI application.\n *\n * @returns Environment configuration with token mappings\n *\n * @example\n * ```typescript\n * import { NaviosFactory } from '@navios/core'\n * import { defineCliEnvironment, type CliEnvironment } from '@navios/commander'\n *\n * const app = await NaviosFactory.create<CliEnvironment>(AppModule, {\n * adapter: defineCliEnvironment(),\n * })\n * await app.init()\n *\n * const adapter = app.getAdapter() as AbstractCliAdapterInterface\n * await adapter.run(process.argv)\n * ```\n */\nexport function defineCliEnvironment() {\n const tokens = new Map<InjectionToken<any, undefined>, AnyInjectableType>([\n [AdapterToken, CommanderAdapterService],\n ])\n return { tokens }\n}\n\n// Re-export services for direct access if needed\nexport { CommanderAdapterService, CommandRegistryService, CliParserService }\n","/**\n * Dynamic import that bypasses bundler static analysis.\n * Uses Function constructor to prevent bundlers from resolving the import at build time.\n */\nexport function dynamicImport<T = unknown>(modulePath: string): Promise<T> {\n return new Function('modulePath', 'return import(modulePath)')(modulePath) as Promise<T>\n}\n","import { ConsoleLogger, NaviosFactory } from '@navios/core'\n\nimport type { ClassTypeWithInstance, LogLevel, NaviosApplication, NaviosModule } from '@navios/core'\n\nimport { defineCliEnvironment } from './define-environment.mjs'\nimport { dynamicImport } from './utils/index.mjs'\n\nimport type { CliEnvironment } from './interfaces/environment.interface.mjs'\n\n/**\n * Logger display options for CLI applications.\n * All options default to false for cleaner CLI output.\n *\n * @public\n */\nexport interface CommanderLoggerOptions {\n /**\n * Enabled log levels.\n * @default ['log', 'error', 'warn', 'debug', 'verbose', 'fatal']\n */\n logLevels?: LogLevel[]\n /**\n * If true, will print the process ID in the log message.\n * @default false\n */\n showPid?: boolean\n /**\n * If true, will print the log level in the log message.\n * @default true\n */\n showLogLevel?: boolean\n /**\n * If true, will print the prefix/app name in the log message.\n * @default false\n */\n showPrefix?: boolean\n /**\n * If true, will print the context in the log message.\n * @default true\n */\n showContext?: boolean\n /**\n * If true, will print the absolute timestamp in the log message.\n * @default false\n */\n showTimestamp?: boolean\n /**\n * If enabled, will print timestamp difference between current and previous log message.\n * @default false\n */\n showTimeDiff?: boolean\n}\n\n/**\n * TUI-specific options for terminal UI mode.\n * Only used when enableTUI is true.\n *\n * @public\n */\nexport interface CommanderTuiOptions {\n /**\n * Exit on Ctrl+C.\n * @default true\n */\n exitOnCtrlC?: boolean\n /**\n * Adapter to use for the TUI.\n * @default 'none'\n */\n adapter?: 'react' | 'solid' | 'ink' | 'none'\n /**\n * Sidebar width in columns.\n */\n sidebarWidth?: number\n /**\n * Sidebar position.\n */\n sidebarPosition?: 'left' | 'right'\n /**\n * Sidebar header title.\n */\n sidebarTitle?: string\n /**\n * Auto close after all screens complete successfully.\n * Set to true for default delay (5000ms), or specify delay in milliseconds.\n */\n autoClose?: boolean | number\n /**\n * Theme preset name ('dark', 'light', 'high-contrast') or custom theme object.\n */\n theme?: string | Record<string, unknown>\n /**\n * Enable mouse support.\n * @default false\n */\n useMouse?: boolean\n /**\n * Hide the default console logger screen from the sidebar.\n * @default false\n */\n hideDefaultScreen?: boolean\n /**\n * Use OpenTUI for terminal rendering.\n * When true: Full TUI with sidebar, scrolling, interactive prompts.\n * When false: Stdout mode - static screens print immediately, others on completion.\n * @default true for Node.js, false for Bun (OpenTUI not supported)\n */\n useOpenTUI?: boolean\n}\n\n/**\n * Configuration options for CommanderFactory.\n *\n * @public\n */\nexport interface CommanderFactoryOptions {\n /**\n * Enabled log levels.\n * @default ['log', 'error', 'warn', 'debug', 'verbose', 'fatal']\n */\n logLevels?: LogLevel[]\n /**\n * Logger display options. These override the default CLI-friendly logger settings.\n * Ignored when enableTUI is true.\n */\n logger?: CommanderLoggerOptions\n /**\n * Enable TUI mode with @navios/commander-tui.\n * Requires @navios/commander-tui to be installed.\n */\n enableTUI?: boolean\n /**\n * TUI-specific options. Only used when enableTUI is true.\n */\n tuiOptions?: CommanderTuiOptions\n}\n\n/**\n * Factory class for creating CLI applications.\n *\n * This is a convenience wrapper around `NaviosFactory.create()` that\n * configures everything needed for CLI usage. It sets up the CLI adapter\n * and returns a typed `NaviosApplication<CliEnvironment>`.\n *\n * @example\n * ```typescript\n * import { CommanderFactory } from '@navios/commander'\n * import { AppModule } from './app.module'\n *\n * async function bootstrap() {\n * const app = await CommanderFactory.create(AppModule)\n * await app.init()\n *\n * const adapter = app.getAdapter()\n * await adapter.run(process.argv)\n *\n * await app.close()\n * }\n * ```\n *\n * @example\n * ```typescript\n * // Alternative: use NaviosFactory directly\n * import { NaviosFactory } from '@navios/core'\n * import { defineCliEnvironment, type CliEnvironment } from '@navios/commander'\n *\n * const app = await NaviosFactory.create<CliEnvironment>(AppModule, {\n * adapter: defineCliEnvironment(),\n * })\n * ```\n */\nexport class CommanderFactory {\n /**\n * Creates a new CLI application instance configured with the provided module.\n *\n * @param appModule - The root CLI module class decorated with `@CliModule`\n * @param options - Optional configuration options for the CLI application\n * @returns A promise that resolves to a configured NaviosApplication instance\n *\n * @example\n * ```typescript\n * const app = await CommanderFactory.create(AppModule)\n * await app.init()\n *\n * const adapter = app.getAdapter()\n * await adapter.run(process.argv)\n * ```\n */\n static async create<TModule extends NaviosModule = NaviosModule>(\n appModule: ClassTypeWithInstance<TModule>,\n options: CommanderFactoryOptions = {},\n ): Promise<NaviosApplication<CliEnvironment>> {\n if (options.enableTUI) {\n // Dynamic import to keep commander-tui as optional peer dependency\n let tuiModule: typeof import('@navios/commander-tui')\n try {\n // Dynamic imports using Function constructor to bypass bundler static analysis\n tuiModule =\n await dynamicImport<typeof import('@navios/commander-tui')>('@navios/commander-tui')\n // Load the appropriate adapter based on configuration\n const adapter = options.tuiOptions?.adapter\n const isBun = tuiModule.isBunRuntime()\n\n if (adapter === 'ink') {\n await dynamicImport('@navios/tui-adapter-ink')\n } else if (adapter === 'solid' && isBun) {\n await dynamicImport('@navios/tui-adapter-solid')\n } else if (adapter === 'react' && isBun) {\n await dynamicImport('@navios/tui-adapter-react')\n }\n } catch (error) {\n console.error(error)\n throw new Error(\n 'TUI mode requires @navios/commander-tui package. ' +\n 'Install it with: npm install @navios/commander-tui',\n )\n }\n\n const { overrideConsoleLogger, ScreenManager } = tuiModule\n\n // Override the ConsoleLogger service to use the ScreenLogger service instead of the default ConsoleLogger service.\n overrideConsoleLogger(options.tuiOptions?.hideDefaultScreen ?? false)\n\n if (options.tuiOptions?.hideDefaultScreen) {\n // Import the help command override to ensure it is registered\n await import('./overrides/help.command.mjs')\n }\n // Create app without custom logger - TUI override handles it\n const app = await NaviosFactory.create<CliEnvironment>(appModule, {\n adapter: defineCliEnvironment(),\n logger: options.logLevels,\n })\n\n // Get screen manager and bind TUI before returning\n const screenManager = await app.get(ScreenManager)\n screenManager.setup({\n logLevels: options.logLevels,\n })\n await screenManager.bind({\n exitOnCtrlC: options.tuiOptions?.exitOnCtrlC,\n sidebarWidth: options.tuiOptions?.sidebarWidth,\n sidebarPosition: options.tuiOptions?.sidebarPosition,\n sidebarTitle: options.tuiOptions?.sidebarTitle,\n autoClose: options.tuiOptions?.autoClose,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n theme: options.tuiOptions?.theme as any,\n useMouse: options.tuiOptions?.useMouse,\n useOpenTUI:\n options.tuiOptions?.useOpenTUI ??\n (options.tuiOptions?.adapter === 'ink' ? true : undefined),\n })\n\n return app\n }\n\n // Standard (non-TUI) mode - existing behavior unchanged\n const app = await NaviosFactory.create<CliEnvironment>(appModule, {\n adapter: defineCliEnvironment(),\n logger: ConsoleLogger.create({\n logLevels: options.logger?.logLevels,\n showTimeDiff: options.logger?.showTimeDiff ?? false,\n showPid: options.logger?.showPid ?? false,\n showLogLevel: options.logger?.showLogLevel ?? true,\n showPrefix: options.logger?.showPrefix ?? false,\n showContext: options.logger?.showContext ?? true,\n showTimestamp: options.logger?.showTimestamp ?? false,\n }),\n })\n\n return app\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["inject","Logger","z","Command","CommandRegistryService","HelpCommandToken","helpOptionsSchema","object","command","string","optional","token","path","description","optionsSchema","HelpCommand","logger","context","commandRegistry","execute","options","log","formatCommandHelp","formatCommandList","Injectable","CliParserService","parse","argv","optionsSchema","args","slice","length","Error","booleanFields","extractBooleanFields","Set","arrayFields","extractArrayFields","commandParts","i","startsWith","push","command","join","options","positionals","arg","key","equalIndex","indexOf","optionName","optionValue","camelCaseKey","camelCase","isArray","has","parseValue","isBoolean","nextArg","flags","flag","str","replace","_","letter","toUpperCase","value","undefined","test","parseInt","parseFloat","endsWith","JSON","schema","typeName","def","type","shape","fieldSchema","Object","entries","isSchemaBoolean","add","isSchemaArray","currentSchema","innerType","CommanderExecutionContext","command","commandPath","options","getCommand","getCommandPath","getOptions","InjectionToken","CommandExecutionContextInjectionToken","CommandExecutionContext","create","Container","inject","Injectable","Logger","HelpCommand","CommanderExecutionContext","CommandEntryKey","extractCommandMetadata","hasCommandMetadata","CommandExecutionContext","CliParserService","CommandRegistryService","CommanderAdapterService","container","commandRegistry","cliParser","logger","context","options","isReady","setupAdapter","onModulesInit","modules","registerBuiltInCommands","moduleName","metadata","commands","customEntries","get","commandClass","warn","name","commandMetadata","register","path","class","helpMetadata","ready","dispose","clear","run","argv","process","Error","preliminaryParse","parse","help","h","command","executeCommand","getByPath","parsed","optionsSchema","error","message","includes","log","validatedOptions","executionContext","requestId","Date","now","Math","random","toString","substring","scopeContainer","beginRequest","addInstance","commandInstance","execute","endRequest","getAllCommands","getAllAsArray","AdapterToken","CliParserService","CommandRegistryService","CommanderAdapterService","defineCliEnvironment","tokens","Map","ConsoleLogger","NaviosFactory","defineCliEnvironment","dynamicImport","CommanderFactory","create","appModule","options","enableTUI","tuiModule","adapter","tuiOptions","isBun","isBunRuntime","error","console","Error","overrideConsoleLogger","ScreenManager","hideDefaultScreen","app","logger","logLevels","screenManager","get","setup","bind","exitOnCtrlC","sidebarWidth","sidebarPosition","sidebarTitle","autoClose","theme","useMouse","useOpenTUI","undefined","showTimeDiff","showPid","showLogLevel","showPrefix","showContext","showTimestamp"],"sources":["../src/commands/help.command.mts","../src/services/cli-parser.service.mts","../src/interfaces/commander-execution-context.interface.mts","../src/tokens/execution-context.token.mts","../src/services/commander-adapter.service.mts","../src/define-environment.mts","../src/utils/runtime.mts","../src/commander.factory.mts"],"sourcesContent":["import { inject, Logger } from '@navios/core'\nimport { z } from 'zod/v4'\n\nimport { Command } from '../decorators/command.decorator.mjs'\nimport { CommandRegistryService } from '../services/command-registry.service.mjs'\nimport { HelpCommandToken } from '../tokens/help-command.token.mjs'\n\nimport type { CommandHandler } from '../interfaces/command-handler.interface.mjs'\n\nconst helpOptionsSchema = z.object({\n command: z.string().optional(),\n})\n\ntype HelpOptions = z.infer<typeof helpOptionsSchema>\n\n/**\n * Built-in help command that lists all available commands or shows help for a specific command.\n *\n * @public\n */\n@Command({\n token: HelpCommandToken,\n path: 'help',\n description: 'Show available commands or help for a specific command',\n optionsSchema: helpOptionsSchema,\n})\nexport class HelpCommand implements CommandHandler<HelpOptions> {\n private logger = inject(Logger, { context: 'Commander' })\n private commandRegistry = inject(CommandRegistryService)\n\n async execute(options: HelpOptions): Promise<void> {\n if (options.command) {\n this.logger.log(this.commandRegistry.formatCommandHelp(options.command))\n } else {\n this.logger.log(this.commandRegistry.formatCommandList())\n }\n }\n}\n","import { Injectable } from '@navios/core'\n\nimport type { z } from 'zod/v4'\n\n/**\n * Result of parsing command-line arguments.\n *\n * @public\n */\nexport interface ParsedCliArgs {\n /**\n * The command path (e.g., 'greet', 'user:create').\n * Multi-word commands are joined with spaces.\n */\n command: string\n /**\n * Parsed options as key-value pairs.\n * Keys are converted from kebab-case to camelCase.\n */\n options: Record<string, any>\n /**\n * Positional arguments that don't match any option flags.\n */\n positionals: string[]\n}\n\n/**\n * Service for parsing command-line arguments.\n *\n * Handles parsing of various CLI argument formats including:\n * - Long options: `--key value` or `--key=value`\n * - Short options: `-k value` or `-abc` (multiple flags)\n * - Boolean flags\n * - Array options\n * - Positional arguments\n *\n * @public\n */\n@Injectable()\nexport class CliParserService {\n /**\n * Parses command-line arguments from process.argv\n * Commands can be multi-word (e.g., 'db migrate', 'cache clear')\n * Expected format: node script.js command [subcommand...] --flag value --boolean-flag positional1 positional2\n *\n * @param argv - Array of command-line arguments (typically process.argv)\n * @param optionsSchema - Optional zod/v4 schema to determine boolean flags and option types\n * @returns Parsed command (space-separated if multi-word), options, and positional arguments\n */\n parse(argv: string[], optionsSchema?: z.ZodObject): ParsedCliArgs {\n // Skip first two args (node and script path)\n const args = argv.slice(2)\n\n if (args.length === 0) {\n throw new Error('[Navios Commander] No command provided')\n }\n\n // Extract boolean and array field names from schema for accurate parsing\n const booleanFields = optionsSchema\n ? this.extractBooleanFields(optionsSchema)\n : new Set<string>()\n const arrayFields = optionsSchema ? this.extractArrayFields(optionsSchema) : new Set<string>()\n\n // Collect command words until we hit an argument that starts with '-' or '--'\n const commandParts: string[] = []\n let i = 0\n while (i < args.length && !args[i].startsWith('-')) {\n commandParts.push(args[i])\n i++\n }\n\n if (commandParts.length === 0) {\n throw new Error('[Navios Commander] No command provided')\n }\n\n const command = commandParts.join(' ')\n const options: Record<string, any> = {}\n const positionals: string[] = []\n while (i < args.length) {\n const arg = args[i]\n\n if (arg.startsWith('--')) {\n // Long option format: --key=value or --key value\n const key = arg.slice(2)\n const equalIndex = key.indexOf('=')\n\n if (equalIndex !== -1) {\n // Format: --key=value\n const optionName = key.slice(0, equalIndex)\n const optionValue = key.slice(equalIndex + 1)\n const camelCaseKey = this.camelCase(optionName)\n const isArray = arrayFields.has(camelCaseKey) || arrayFields.has(optionName)\n\n if (isArray) {\n // For array fields, accumulate values\n if (!options[camelCaseKey]) {\n options[camelCaseKey] = []\n }\n options[camelCaseKey].push(this.parseValue(optionValue))\n } else {\n options[camelCaseKey] = this.parseValue(optionValue)\n }\n i++\n } else {\n // Format: --key value or --boolean-flag\n const camelCaseKey = this.camelCase(key)\n const isBoolean = booleanFields.has(camelCaseKey) || booleanFields.has(key)\n const isArray = arrayFields.has(camelCaseKey) || arrayFields.has(key)\n const nextArg = args[i + 1]\n\n if (isBoolean) {\n // Known boolean flag from schema\n options[camelCaseKey] = true\n i++\n } else if (isArray && nextArg && !nextArg.startsWith('-')) {\n // Known array field from schema - accumulate values\n if (!options[camelCaseKey]) {\n options[camelCaseKey] = []\n }\n options[camelCaseKey].push(this.parseValue(nextArg))\n i += 2\n } else if (nextArg && !nextArg.startsWith('-')) {\n // Has a value\n options[camelCaseKey] = this.parseValue(nextArg)\n i += 2\n } else {\n // Assume boolean flag\n options[camelCaseKey] = true\n i++\n }\n }\n } else if (arg.startsWith('-') && arg.length > 1 && arg !== '-') {\n // Short option format: -k value or -abc (multiple flags)\n const flags = arg.slice(1)\n\n if (flags.length === 1) {\n // Single short flag: -k value or -k\n const isBoolean = booleanFields.has(flags)\n const isArray = arrayFields.has(flags)\n const nextArg = args[i + 1]\n\n if (isBoolean) {\n // Known boolean flag from schema\n options[flags] = true\n i++\n } else if (isArray && nextArg && !nextArg.startsWith('-')) {\n // Known array field from schema - accumulate values\n if (!options[flags]) {\n options[flags] = []\n }\n options[flags].push(this.parseValue(nextArg))\n i += 2\n } else if (nextArg && !nextArg.startsWith('-')) {\n options[flags] = this.parseValue(nextArg)\n i += 2\n } else {\n options[flags] = true\n i++\n }\n } else {\n // Multiple short flags: -abc -> {a: true, b: true, c: true}\n for (const flag of flags) {\n options[flag] = true\n }\n i++\n }\n } else {\n // Positional argument\n positionals.push(arg)\n i++\n }\n }\n\n return {\n command,\n options,\n positionals,\n }\n }\n\n /**\n * Converts kebab-case to camelCase\n */\n private camelCase(str: string): string {\n return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase())\n }\n\n /**\n * Attempts to parse string values into appropriate types\n */\n private parseValue(value: string): any {\n // Check for boolean\n if (value === 'true') return true\n if (value === 'false') return false\n\n // Check for null/undefined\n if (value === 'null') return null\n if (value === 'undefined') return undefined\n\n // Check for number\n if (/^-?\\d+$/.test(value)) {\n return parseInt(value, 10)\n }\n if (/^-?\\d+\\.\\d+$/.test(value)) {\n return parseFloat(value)\n }\n\n // Check for JSON\n if (\n (value.startsWith('{') && value.endsWith('}')) ||\n (value.startsWith('[') && value.endsWith(']'))\n ) {\n try {\n return JSON.parse(value)\n } catch {\n // If parsing fails, return as string\n return value\n }\n }\n\n // Return as string\n return value\n }\n\n /**\n * Extracts boolean field names from a zod/v4 schema\n * Handles z.ZodObject, zod/v4Optional, and zod/v4Default wrappers\n */\n private extractBooleanFields(schema: z.ZodObject): Set<string> {\n const booleanFields = new Set<string>()\n\n try {\n // Check if schema has _def.typeName (zod/v4 schema structure)\n const typeName = schema.def.type\n\n if (typeName === 'object') {\n // Extract shape from z.ZodObject\n const shape = schema.def.shape\n\n if (shape && typeof shape === 'object') {\n for (const [key, fieldSchema] of Object.entries(shape)) {\n if (this.isSchemaBoolean(fieldSchema as any)) {\n booleanFields.add(key)\n }\n }\n }\n }\n } catch {\n // Silently fail if schema introspection fails\n }\n\n return booleanFields\n }\n\n /**\n * Extracts array field names from a zod/v4 schema\n * Handles z.ZodObject, zod/v4Optional, and zod/v4Default wrappers\n */\n private extractArrayFields(schema: z.ZodObject): Set<string> {\n const arrayFields = new Set<string>()\n\n try {\n const typeName = schema.def.type\n\n if (typeName === 'object') {\n const shape = schema.def.shape\n\n if (shape && typeof shape === 'object') {\n for (const [key, fieldSchema] of Object.entries(shape)) {\n if (this.isSchemaArray(fieldSchema as any)) {\n arrayFields.add(key)\n }\n }\n }\n }\n } catch {\n // Silently fail if schema introspection fails\n }\n\n return arrayFields\n }\n\n /**\n * Checks if a zod/v4 schema represents a boolean type\n * Unwraps zod/v4Optional and zod/v4Default using zod/v4 v4 API\n */\n private isSchemaBoolean(schema: z.ZodType): boolean {\n try {\n let currentSchema = schema\n let typeName = currentSchema.def.type\n\n // Unwrap zod/v4Optional and zod/v4Default using zod/v4 v4's def.innerType\n while (typeName === 'optional' || typeName === 'default') {\n currentSchema = (currentSchema as any)?.def?.innerType || currentSchema\n typeName = currentSchema.def.type\n }\n\n return typeName === 'boolean'\n } catch {\n return false\n }\n }\n\n /**\n * Checks if a zod/v4 schema represents an array type\n * Unwraps zod/v4Optional and zod/v4Default using zod/v4 v4 API\n */\n private isSchemaArray(schema: z.ZodType): boolean {\n try {\n let currentSchema = schema\n let typeName = currentSchema.def.type\n\n // Unwrap zod/v4Optional and zod/v4Default using zod/v4 v4's def.innerType\n while (typeName === 'optional' || typeName === 'default') {\n currentSchema = (currentSchema as any)?.def?.innerType || currentSchema\n typeName = currentSchema.def.type\n }\n\n return typeName === 'array'\n } catch {\n return false\n }\n }\n}\n","import type { CommandMetadata } from '../metadata/command.metadata.mjs'\n\n/**\n * Execution context for a command execution.\n *\n * Provides access to command metadata, path, and validated options during command execution.\n * This context is automatically injected and available via the `CommandExecutionContext` token.\n *\n * @example\n * ```typescript\n * import { inject, Injectable } from '@navios/core'\n * import { CommandExecutionContext } from '@navios/commander'\n *\n * @Injectable()\n * class CommandLogger {\n * private ctx = inject(CommandExecutionContext)\n *\n * log() {\n * console.log('Command:', this.ctx.getCommandPath())\n * console.log('Options:', this.ctx.getOptions())\n * }\n * }\n * ```\n */\nexport class CommanderExecutionContext {\n /**\n * @internal\n * Creates a new execution context.\n */\n constructor(\n private readonly command: CommandMetadata,\n private readonly commandPath: string,\n private readonly options: any,\n ) {}\n\n /**\n * Gets the command metadata.\n *\n * @returns The command metadata including path and options schema\n */\n getCommand(): CommandMetadata {\n return this.command\n }\n\n /**\n * Gets the command path that was invoked.\n *\n * @returns The command path (e.g., 'greet', 'user:create')\n */\n getCommandPath(): string {\n return this.commandPath\n }\n\n /**\n * Gets the validated command options.\n *\n * Options are validated against the command's zod/v4 schema if one was provided.\n *\n * @returns The validated options object\n */\n getOptions(): any {\n return this.options\n }\n}\n","import { InjectionToken } from '@navios/core'\n\nimport type { CommanderExecutionContext } from '../interfaces/index.mjs'\n\nconst CommandExecutionContextInjectionToken = 'CommanderExecutionContextInjectionToken'\n\n/**\n * Injection token for accessing the current command execution context.\n *\n * Use this token with `inject()` to access the `CommanderExecutionContext` in services\n * that need information about the currently executing command.\n *\n * @example\n * ```typescript\n * import { inject, Injectable } from '@navios/core'\n * import { CommandExecutionContext } from '@navios/commander'\n *\n * @Injectable()\n * class MyService {\n * private ctx = inject(CommandExecutionContext)\n *\n * doSomething() {\n * const commandPath = this.ctx.getCommandPath()\n * const options = this.ctx.getOptions()\n * // Use context information...\n * }\n * }\n * ```\n */\nexport const CommandExecutionContext = InjectionToken.create<CommanderExecutionContext>(\n CommandExecutionContextInjectionToken,\n)\n","import { Container, inject, Injectable, InjectionToken, Logger } from '@navios/core'\n\nimport type { ClassType, ModuleMetadata } from '@navios/core'\n\nimport { HelpCommand } from '../commands/help.command.mjs'\nimport { CommanderExecutionContext } from '../interfaces/commander-execution-context.interface.mjs'\nimport { CommandEntryKey } from '../metadata/command-entry.metadata.mjs'\nimport { extractCommandMetadata, hasCommandMetadata } from '../metadata/index.mjs'\nimport { CommandExecutionContext } from '../tokens/index.mjs'\n\nimport type { AbstractCliAdapterInterface } from '../interfaces/abstract-cli-adapter.interface.mjs'\nimport type { CommandHandler } from '../interfaces/command-handler.interface.mjs'\nimport type { CliAdapterOptions } from '../interfaces/environment.interface.mjs'\nimport type { CommandEntryValue } from '../metadata/command-entry.metadata.mjs'\n\nimport { CliParserService } from './cli-parser.service.mjs'\nimport { CommandRegistryService } from './command-registry.service.mjs'\n\n/**\n * CLI adapter service that implements the AbstractCliAdapterInterface.\n * Handles command discovery, registration, parsing, and execution.\n *\n * @public\n */\n@Injectable()\nexport class CommanderAdapterService implements AbstractCliAdapterInterface {\n private container = inject(Container)\n private commandRegistry = inject(CommandRegistryService)\n private cliParser = inject(CliParserService)\n private logger = inject(Logger, { context: 'Commander' })\n\n private options: CliAdapterOptions = {}\n private isReady = false\n\n /**\n * Sets up the adapter with the provided options.\n * Called during application initialization.\n */\n async setupAdapter(options: CliAdapterOptions): Promise<void> {\n this.options = options ?? {}\n }\n\n /**\n * Called after all modules are loaded.\n * Iterates through modules and extracts commands from customEntries.\n */\n async onModulesInit(modules: Map<string, ModuleMetadata>): Promise<void> {\n // Register built-in help command\n this.registerBuiltInCommands()\n\n for (const [moduleName, metadata] of modules) {\n const commands = metadata.customEntries.get(CommandEntryKey) as CommandEntryValue | undefined\n if (!commands) continue\n\n for (const commandClass of commands) {\n if (!hasCommandMetadata(commandClass)) {\n this.logger.warn(\n `Class ${commandClass.name} in module ${moduleName} ` +\n `is listed in commands but has no @Command decorator. Skipping.`,\n )\n continue\n }\n\n const commandMetadata = extractCommandMetadata(commandClass)\n this.commandRegistry.register(commandMetadata.path, {\n class: commandClass,\n metadata: commandMetadata,\n moduleName,\n })\n }\n }\n }\n\n /**\n * Registers built-in commands like help.\n */\n private registerBuiltInCommands(): void {\n const helpMetadata = extractCommandMetadata(HelpCommand)\n this.commandRegistry.register(helpMetadata.path, {\n class: HelpCommand,\n metadata: helpMetadata,\n moduleName: '@navios/commander',\n })\n }\n\n /**\n * Signals that the adapter is ready to handle commands.\n */\n async ready(): Promise<void> {\n this.isReady = true\n }\n\n /**\n * Disposes of the adapter and cleans up resources.\n */\n async dispose(): Promise<void> {\n this.commandRegistry.clear()\n this.isReady = false\n }\n\n /**\n * Run the CLI application with the given arguments.\n * Parses arguments and executes the matching command.\n */\n async run(argv: string[] = process.argv): Promise<void> {\n if (!this.isReady) {\n throw new Error('Adapter not ready. Call app.init() first.')\n }\n\n try {\n // Preliminary parse to find command\n const preliminaryParse = this.cliParser.parse(argv)\n\n // Handle --help or -h flags by showing help for the specific command\n if (preliminaryParse.options.help || preliminaryParse.options.h) {\n // If command is 'help', show general help\n // Otherwise show help for the specific command\n if (preliminaryParse.command === 'help') {\n await this.executeCommand('help', {})\n } else {\n await this.executeCommand('help', { command: preliminaryParse.command })\n }\n return\n }\n\n const command = this.commandRegistry.getByPath(preliminaryParse.command)\n\n // Re-parse with schema if available\n const parsed = command?.metadata.optionsSchema\n ? this.cliParser.parse(argv, command.metadata.optionsSchema)\n : preliminaryParse\n\n await this.executeCommand(parsed.command, parsed.options)\n } catch (error) {\n if (error instanceof Error) {\n this.logger.error(`Error: ${error.message}`)\n if (error.message.includes('Command not found')) {\n this.logger.log('')\n await this.executeCommand('help', {})\n }\n }\n throw error\n }\n }\n\n /**\n * Execute a command programmatically with the provided options.\n */\n async executeCommand(path: string, options: Record<string, unknown> = {}): Promise<void> {\n const command = this.commandRegistry.getByPath(path)\n if (!command) {\n throw new Error(`[Navios Commander] Command not found: ${path}`)\n }\n\n const { class: commandClass, metadata } = command\n\n // Validate options\n let validatedOptions = options\n if (metadata.optionsSchema) {\n validatedOptions = metadata.optionsSchema.parse(options)\n }\n\n // Create execution context\n const executionContext = new CommanderExecutionContext(metadata, path, validatedOptions)\n\n // Begin request scope\n const requestId = `cmd-${Date.now()}-${Math.random().toString(36).substring(7)}`\n const scopeContainer = this.container.beginRequest(requestId)\n scopeContainer.addInstance(CommandExecutionContext, executionContext)\n\n try {\n const commandInstance = await scopeContainer.get<CommandHandler>(\n commandClass as unknown as InjectionToken<CommandHandler>,\n )\n\n if (!commandInstance.execute) {\n throw new Error(`Command ${path} does not implement execute method`)\n }\n\n await commandInstance.execute(validatedOptions)\n } finally {\n await scopeContainer.endRequest()\n }\n }\n\n /**\n * Get all registered command paths and their class references.\n */\n getAllCommands(): Array<{ path: string; class: ClassType }> {\n return this.commandRegistry.getAllAsArray()\n }\n}\n","import { AdapterToken } from '@navios/core'\n\nimport type { AnyInjectableType, InjectionToken } from '@navios/core'\n\nimport { CliParserService } from './services/cli-parser.service.mjs'\nimport { CommandRegistryService } from './services/command-registry.service.mjs'\nimport { CommanderAdapterService } from './services/commander-adapter.service.mjs'\n\n/**\n * Defines the CLI environment configuration for use with NaviosFactory.\n *\n * This function returns the token mappings needed to configure a CLI application.\n * Use it with `NaviosFactory.create()` to create a CLI application.\n *\n * @returns Environment configuration with token mappings\n *\n * @example\n * ```typescript\n * import { NaviosFactory } from '@navios/core'\n * import { defineCliEnvironment, type CliEnvironment } from '@navios/commander'\n *\n * const app = await NaviosFactory.create<CliEnvironment>(AppModule, {\n * adapter: defineCliEnvironment(),\n * })\n * await app.init()\n *\n * const adapter = app.getAdapter() as AbstractCliAdapterInterface\n * await adapter.run(process.argv)\n * ```\n */\nexport function defineCliEnvironment() {\n const tokens = new Map<InjectionToken<any, undefined>, AnyInjectableType>([\n [AdapterToken, CommanderAdapterService],\n ])\n return { tokens }\n}\n\n// Re-export services for direct access if needed\nexport { CommanderAdapterService, CommandRegistryService, CliParserService }\n","/**\n * Dynamic import that bypasses bundler static analysis.\n * Uses Function constructor to prevent bundlers from resolving the import at build time.\n */\nexport function dynamicImport<T = unknown>(modulePath: string): Promise<T> {\n return new Function('modulePath', 'return import(modulePath)')(modulePath) as Promise<T>\n}\n","import { ConsoleLogger, NaviosFactory } from '@navios/core'\n\nimport type { ClassTypeWithInstance, LogLevel, NaviosApplication, NaviosModule } from '@navios/core'\n\nimport { defineCliEnvironment } from './define-environment.mjs'\nimport { dynamicImport } from './utils/index.mjs'\n\nimport type { CliEnvironment } from './interfaces/environment.interface.mjs'\n\n/**\n * Logger display options for CLI applications.\n * All options default to false for cleaner CLI output.\n *\n * @public\n */\nexport interface CommanderLoggerOptions {\n /**\n * Enabled log levels.\n * @default ['log', 'error', 'warn', 'debug', 'verbose', 'fatal']\n */\n logLevels?: LogLevel[]\n /**\n * If true, will print the process ID in the log message.\n * @default false\n */\n showPid?: boolean\n /**\n * If true, will print the log level in the log message.\n * @default true\n */\n showLogLevel?: boolean\n /**\n * If true, will print the prefix/app name in the log message.\n * @default false\n */\n showPrefix?: boolean\n /**\n * If true, will print the context in the log message.\n * @default true\n */\n showContext?: boolean\n /**\n * If true, will print the absolute timestamp in the log message.\n * @default false\n */\n showTimestamp?: boolean\n /**\n * If enabled, will print timestamp difference between current and previous log message.\n * @default false\n */\n showTimeDiff?: boolean\n}\n\n/**\n * TUI-specific options for terminal UI mode.\n * Only used when enableTUI is true.\n *\n * @public\n */\nexport interface CommanderTuiOptions {\n /**\n * Exit on Ctrl+C.\n * @default true\n */\n exitOnCtrlC?: boolean\n /**\n * Adapter to use for the TUI.\n * @default 'none'\n */\n adapter?: 'react' | 'solid' | 'ink' | 'none'\n /**\n * Sidebar width in columns.\n */\n sidebarWidth?: number\n /**\n * Sidebar position.\n */\n sidebarPosition?: 'left' | 'right'\n /**\n * Sidebar header title.\n */\n sidebarTitle?: string\n /**\n * Auto close after all screens complete successfully.\n * Set to true for default delay (5000ms), or specify delay in milliseconds.\n */\n autoClose?: boolean | number\n /**\n * Theme preset name ('dark', 'light', 'high-contrast') or custom theme object.\n */\n theme?: string | Record<string, unknown>\n /**\n * Enable mouse support.\n * @default false\n */\n useMouse?: boolean\n /**\n * Hide the default console logger screen from the sidebar.\n * @default false\n */\n hideDefaultScreen?: boolean\n /**\n * Use OpenTUI for terminal rendering.\n * When true: Full TUI with sidebar, scrolling, interactive prompts.\n * When false: Stdout mode - static screens print immediately, others on completion.\n * @default true for Node.js, false for Bun (OpenTUI not supported)\n */\n useOpenTUI?: boolean\n}\n\n/**\n * Configuration options for CommanderFactory.\n *\n * @public\n */\nexport interface CommanderFactoryOptions {\n /**\n * Enabled log levels.\n * @default ['log', 'error', 'warn', 'debug', 'verbose', 'fatal']\n */\n logLevels?: LogLevel[]\n /**\n * Logger display options. These override the default CLI-friendly logger settings.\n * Ignored when enableTUI is true.\n */\n logger?: CommanderLoggerOptions\n /**\n * Enable TUI mode with @navios/commander-tui.\n * Requires @navios/commander-tui to be installed.\n */\n enableTUI?: boolean\n /**\n * TUI-specific options. Only used when enableTUI is true.\n */\n tuiOptions?: CommanderTuiOptions\n}\n\n/**\n * Factory class for creating CLI applications.\n *\n * This is a convenience wrapper around `NaviosFactory.create()` that\n * configures everything needed for CLI usage. It sets up the CLI adapter\n * and returns a typed `NaviosApplication<CliEnvironment>`.\n *\n * @example\n * ```typescript\n * import { CommanderFactory } from '@navios/commander'\n * import { AppModule } from './app.module'\n *\n * async function bootstrap() {\n * const app = await CommanderFactory.create(AppModule)\n * await app.init()\n *\n * const adapter = app.getAdapter()\n * await adapter.run(process.argv)\n *\n * await app.close()\n * }\n * ```\n *\n * @example\n * ```typescript\n * // Alternative: use NaviosFactory directly\n * import { NaviosFactory } from '@navios/core'\n * import { defineCliEnvironment, type CliEnvironment } from '@navios/commander'\n *\n * const app = await NaviosFactory.create<CliEnvironment>(AppModule, {\n * adapter: defineCliEnvironment(),\n * })\n * ```\n */\nexport class CommanderFactory {\n /**\n * Creates a new CLI application instance configured with the provided module.\n *\n * @param appModule - The root CLI module class decorated with `@CliModule`\n * @param options - Optional configuration options for the CLI application\n * @returns A promise that resolves to a configured NaviosApplication instance\n *\n * @example\n * ```typescript\n * const app = await CommanderFactory.create(AppModule)\n * await app.init()\n *\n * const adapter = app.getAdapter()\n * await adapter.run(process.argv)\n * ```\n */\n static async create<TModule extends NaviosModule = NaviosModule>(\n appModule: ClassTypeWithInstance<TModule>,\n options: CommanderFactoryOptions = {},\n ): Promise<NaviosApplication<CliEnvironment>> {\n if (options.enableTUI) {\n // Dynamic import to keep commander-tui as optional peer dependency\n let tuiModule: typeof import('@navios/commander-tui')\n try {\n // Dynamic imports using Function constructor to bypass bundler static analysis\n tuiModule =\n await dynamicImport<typeof import('@navios/commander-tui')>('@navios/commander-tui')\n // Load the appropriate adapter based on configuration\n const adapter = options.tuiOptions?.adapter\n const isBun = tuiModule.isBunRuntime()\n\n if (adapter === 'ink') {\n await dynamicImport('@navios/tui-adapter-ink')\n } else if (adapter === 'solid' && isBun) {\n await dynamicImport('@navios/tui-adapter-solid')\n } else if (adapter === 'react' && isBun) {\n await dynamicImport('@navios/tui-adapter-react')\n }\n } catch (error) {\n console.error(error)\n throw new Error(\n 'TUI mode requires @navios/commander-tui package. ' +\n 'Install it with: npm install @navios/commander-tui',\n )\n }\n\n const { overrideConsoleLogger, ScreenManager } = tuiModule\n\n // Override the ConsoleLogger service to use the ScreenLogger service instead of the default ConsoleLogger service.\n overrideConsoleLogger(options.tuiOptions?.hideDefaultScreen ?? false)\n\n if (options.tuiOptions?.hideDefaultScreen) {\n // Import the help command override to ensure it is registered\n await import('./overrides/help.command.mjs')\n }\n // Create app without custom logger - TUI override handles it\n const app = await NaviosFactory.create<CliEnvironment>(appModule, {\n adapter: defineCliEnvironment(),\n logger: options.logLevels,\n })\n\n // Get screen manager and bind TUI before returning\n const screenManager = await app.get(ScreenManager)\n screenManager.setup({\n logLevels: options.logLevels,\n })\n await screenManager.bind({\n exitOnCtrlC: options.tuiOptions?.exitOnCtrlC,\n sidebarWidth: options.tuiOptions?.sidebarWidth,\n sidebarPosition: options.tuiOptions?.sidebarPosition,\n sidebarTitle: options.tuiOptions?.sidebarTitle,\n autoClose: options.tuiOptions?.autoClose,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n theme: options.tuiOptions?.theme as any,\n useMouse: options.tuiOptions?.useMouse,\n useOpenTUI:\n options.tuiOptions?.useOpenTUI ??\n (options.tuiOptions?.adapter === 'ink' ? true : undefined),\n })\n\n return app\n }\n\n // Standard (non-TUI) mode - existing behavior unchanged\n const app = await NaviosFactory.create<CliEnvironment>(appModule, {\n adapter: defineCliEnvironment(),\n logger: ConsoleLogger.create({\n logLevels: options.logger?.logLevels,\n showTimeDiff: options.logger?.showTimeDiff ?? false,\n showPid: options.logger?.showPid ?? false,\n showLogLevel: options.logger?.showLogLevel ?? true,\n showPrefix: options.logger?.showPrefix ?? false,\n showContext: options.logger?.showContext ?? true,\n showTimestamp: options.logger?.showTimestamp ?? false,\n }),\n })\n\n return app\n }\n}\n"],"mappings":"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"}
@@ -1,28 +1,7 @@
1
- const require_command_decorator = require('../command.decorator-UrNJmQN0.cjs');
2
- const require_cli_module_decorator = require('../cli-module.decorator-CkP22084.cjs');
1
+ const require_command_decorator = require('../command.decorator-HziankUv.cjs');
2
+ const require_cli_module_decorator = require('../cli-module.decorator-CXt38aqF.cjs');
3
+ let _navios_core_legacy_compat = require("@navios/core/legacy-compat");
3
4
 
4
- //#region ../../node_modules/@navios/di/lib/legacy-compat/index.mjs
5
- /**
6
- * Compatibility layer for converting legacy decorator signatures to Stage 3 format.
7
- *
8
- * This module provides utilities to create mock Stage 3 decorator contexts
9
- * from legacy decorator arguments, and manages metadata storage using WeakMap.
10
- */ const classMetadataMap = /* @__PURE__ */ new WeakMap();
11
- /**
12
- * Creates a mock ClassDecoratorContext for legacy class decorators.
13
- * @internal
14
- */ function createClassContext(target) {
15
- if (!classMetadataMap.has(target)) classMetadataMap.set(target, {});
16
- const metadata = classMetadataMap.get(target);
17
- return {
18
- kind: "class",
19
- name: target.name,
20
- metadata,
21
- addInitializer() {}
22
- };
23
- }
24
-
25
- //#endregion
26
5
  //#region src/legacy-compat/decorators/command.decorator.mts
27
6
  /**
28
7
  * Legacy-compatible Command decorator.
@@ -35,7 +14,7 @@ const require_cli_module_decorator = require('../cli-module.decorator-CkP22084.c
35
14
  * @example
36
15
  * ```typescript
37
16
  * import { Command, CommandHandler } from '@navios/commander/legacy-compat'
38
- * import { z } from 'zod'
17
+ * import { z } from 'zod/v4'
39
18
  *
40
19
  * const optionsSchema = z.object({
41
20
  * name: z.string(),
@@ -54,7 +33,7 @@ const require_cli_module_decorator = require('../cli-module.decorator-CkP22084.c
54
33
  * ```
55
34
  */ function Command(options) {
56
35
  return function(target) {
57
- const context = createClassContext(target);
36
+ const context = (0, _navios_core_legacy_compat.createClassContext)(target);
58
37
  return require_command_decorator.Command(options)(target, context);
59
38
  };
60
39
  }
@@ -89,7 +68,7 @@ const require_cli_module_decorator = require('../cli-module.decorator-CkP22084.c
89
68
  overrides: []
90
69
  }) {
91
70
  return function(target) {
92
- const context = createClassContext(target);
71
+ const context = (0, _navios_core_legacy_compat.createClassContext)(target);
93
72
  return require_cli_module_decorator.CliModule(options)(target, context);
94
73
  };
95
74
  }
@@ -97,7 +76,6 @@ const require_cli_module_decorator = require('../cli-module.decorator-CkP22084.c
97
76
  //#endregion
98
77
  exports.CliModule = CliModule;
99
78
  exports.Command = Command;
100
- var _navios_core_legacy_compat = require("@navios/core/legacy-compat");
101
79
  Object.keys(_navios_core_legacy_compat).forEach(function (k) {
102
80
  if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
103
81
  enumerable: true,
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["createClassContext","Command","OriginalCommand","options","target","context","originalDecorator","createClassContext","CliModule","OriginalCliModule","options","commands","controllers","imports","guards","overrides","target","context","originalDecorator"],"sources":["../../../../node_modules/@navios/di/lib/legacy-compat/index.mjs","../../src/legacy-compat/decorators/command.decorator.mts","../../src/legacy-compat/decorators/cli-module.decorator.mts"],"sourcesContent":["import { t as Injectable$1 } from \"../injectable.decorator-CyPrBzBN.mjs\";\nimport { t as Factory$1 } from \"../factory.decorator-_IPWcwQn.mjs\";\n\n//#region src/legacy-compat/context-compat.mts\n/**\n* Compatibility layer for converting legacy decorator signatures to Stage 3 format.\n*\n* This module provides utilities to create mock Stage 3 decorator contexts\n* from legacy decorator arguments, and manages metadata storage using WeakMap.\n*/ const classMetadataMap = /* @__PURE__ */ new WeakMap();\n/**\n* Gets the constructor from a prototype (for method decorators).\n*/ function getConstructor(prototype) {\n\tif (!prototype || typeof prototype !== \"object\") return null;\n\tconst constructor = prototype.constructor;\n\tif (constructor && typeof constructor === \"function\") return constructor;\n\treturn null;\n}\n/**\n* Creates a mock ClassDecoratorContext for legacy class decorators.\n* @internal\n*/ function createClassContext(target) {\n\tif (!classMetadataMap.has(target)) classMetadataMap.set(target, {});\n\tconst metadata = classMetadataMap.get(target);\n\treturn {\n\t\tkind: \"class\",\n\t\tname: target.name,\n\t\tmetadata,\n\t\taddInitializer() {}\n\t};\n}\n/**\n* Creates a mock ClassMethodDecoratorContext for legacy method decorators.\n*\n* Note: Method decorators need to share metadata with the class context\n* because endpoint metadata is stored at the class level.\n* @internal\n*/ function createMethodContext(target, propertyKey, descriptor) {\n\tconst constructor = getConstructor(target);\n\tif (!constructor) throw new Error(\"[Navios] Could not determine class constructor from method decorator target.\");\n\tif (!classMetadataMap.has(constructor)) classMetadataMap.set(constructor, {});\n\treturn {\n\t\tkind: \"method\",\n\t\tname: propertyKey,\n\t\tmetadata: classMetadataMap.get(constructor),\n\t\tstatic: false,\n\t\tprivate: false,\n\t\taccess: {\n\t\t\thas: () => true,\n\t\t\tget: () => descriptor.value,\n\t\t\tset: () => {}\n\t\t},\n\t\taddInitializer() {}\n\t};\n}\n\n//#endregion\n//#region src/legacy-compat/injectable.decorator.mts\n/**\n* Legacy-compatible Injectable decorator.\n*\n* Works with TypeScript experimental decorators (legacy API).\n*\n* @param options - Injectable configuration options\n* @returns A class decorator compatible with legacy decorator API\n*\n* @example\n* ```typescript\n* @Injectable()\n* export class UserService {\n* getUser(id: string) {\n* return { id, name: 'John' }\n* }\n* }\n* ```\n*/ function Injectable(options = {}) {\n\treturn function(target) {\n\t\tconst context = createClassContext(target);\n\t\treturn (Object.keys(options).length === 0 ? Injectable$1() : Injectable$1(options))(target, context);\n\t};\n}\n\n//#endregion\n//#region src/legacy-compat/factory.decorator.mts\n/**\n* Legacy-compatible Factory decorator.\n*\n* Works with TypeScript experimental decorators (legacy API).\n*\n* @param options - Factory configuration options\n* @returns A class decorator compatible with legacy decorator API\n*\n* @example\n* ```typescript\n* @Factory()\n* export class DatabaseConnectionFactory {\n* create() {\n* return { host: 'localhost', port: 5432 }\n* }\n* }\n* ```\n*/ function Factory(options = {}) {\n\treturn function(target) {\n\t\tconst context = createClassContext(target);\n\t\treturn (Object.keys(options).length === 0 ? Factory$1() : Factory$1(options))(target, context);\n\t};\n}\n\n//#endregion\nexport { Factory, Injectable, createClassContext, createMethodContext };\n//# sourceMappingURL=index.mjs.map","import type { ClassType } from '@navios/core'\nimport { createClassContext } from '@navios/di/legacy-compat'\n\nimport {\n Command as OriginalCommand,\n type CommandOptions,\n} from '../../decorators/command.decorator.mjs'\n\nexport type { CommandOptions }\n\n/**\n * Legacy-compatible Command decorator.\n *\n * Works with TypeScript experimental decorators (legacy API).\n *\n * @param options - Command configuration options\n * @returns A class decorator compatible with legacy decorator API\n *\n * @example\n * ```typescript\n * import { Command, CommandHandler } from '@navios/commander/legacy-compat'\n * import { z } from 'zod'\n *\n * const optionsSchema = z.object({\n * name: z.string(),\n * greeting: z.string().optional().default('Hello')\n * })\n *\n * @Command({\n * path: 'greet',\n * optionsSchema: optionsSchema\n * })\n * export class GreetCommand implements CommandHandler<z.infer<typeof optionsSchema>> {\n * async execute(options) {\n * console.log(`${options.greeting}, ${options.name}!`)\n * }\n * }\n * ```\n */\nexport function Command(options: CommandOptions) {\n return function (target: ClassType) {\n const context = createClassContext(target)\n const originalDecorator = OriginalCommand(options)\n return originalDecorator(target, context)\n }\n}\n","import type { ClassType } from '@navios/core'\nimport { createClassContext } from '@navios/di/legacy-compat'\n\nimport {\n CliModule as OriginalCliModule,\n type CliModuleOptions,\n} from '../../decorators/cli-module.decorator.mjs'\n\nexport type { CliModuleOptions }\n\n/**\n * Legacy-compatible CliModule decorator.\n *\n * Works with TypeScript experimental decorators (legacy API).\n *\n * @param options - CLI module configuration options\n * @returns A class decorator compatible with legacy decorator API\n *\n * @example\n * ```typescript\n * import { CliModule } from '@navios/commander/legacy-compat'\n * import { GreetCommand } from './greet.command'\n * import { UserModule } from './user.module'\n *\n * @CliModule({\n * commands: [GreetCommand],\n * imports: [UserModule]\n * })\n * export class AppModule {}\n * ```\n */\nexport function CliModule(\n options: CliModuleOptions = {\n commands: [],\n controllers: [],\n imports: [],\n guards: [],\n overrides: [],\n },\n) {\n return function (target: ClassType) {\n const context = createClassContext(target)\n const originalDecorator = OriginalCliModule(options)\n return originalDecorator(target, context)\n }\n}\n"],"x_google_ignoreList":[0],"mappings":";;;;;;;;;GASG,MAAM,mCAAmC,IAAI,SAAS;;;;GAYtD,SAAS,mBAAmB,QAAQ;AACtC,KAAI,CAAC,iBAAiB,IAAI,OAAO,CAAE,kBAAiB,IAAI,QAAQ,EAAE,CAAC;CACnE,MAAM,WAAW,iBAAiB,IAAI,OAAO;AAC7C,QAAO;EACN,MAAM;EACN,MAAM,OAAO;EACb;EACA,iBAAiB;EACjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GCUF,SAAgBC,QAAQE,SAAuB;AAC7C,QAAO,SAAUC,QAAiB;EAChC,MAAMC,UAAUL,mBAAmBI,OAAAA;AAEnC,SAD0BF,kCAAgBC,QAAAA,CACjBC,QAAQC,QAAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GCZrC,SAAgBG,UACdE,UAA4B;CAC1BC,UAAU,EAAE;CACZC,aAAa,EAAE;CACfC,SAAS,EAAE;CACXC,QAAQ,EAAE;CACVC,WAAW,EAAE;CACd,EAAA;AAED,QAAO,SAAUC,QAAiB;EAChC,MAAMC,UAAUV,mBAAmBS,OAAAA;AAEnC,SAD0BP,uCAAkBC,QAAAA,CACnBM,QAAQC,QAAAA"}
1
+ {"version":3,"file":"index.cjs","names":["createClassContext","Command","OriginalCommand","options","target","context","originalDecorator","createClassContext","CliModule","OriginalCliModule","options","commands","controllers","imports","guards","overrides","target","context","originalDecorator"],"sources":["../../src/legacy-compat/decorators/command.decorator.mts","../../src/legacy-compat/decorators/cli-module.decorator.mts"],"sourcesContent":["import { createClassContext } from '@navios/core/legacy-compat'\n\nimport type { ClassType } from '@navios/core'\n\nimport {\n Command as OriginalCommand,\n type CommandOptions,\n} from '../../decorators/command.decorator.mjs'\n\nexport type { CommandOptions }\n\n/**\n * Legacy-compatible Command decorator.\n *\n * Works with TypeScript experimental decorators (legacy API).\n *\n * @param options - Command configuration options\n * @returns A class decorator compatible with legacy decorator API\n *\n * @example\n * ```typescript\n * import { Command, CommandHandler } from '@navios/commander/legacy-compat'\n * import { z } from 'zod/v4'\n *\n * const optionsSchema = z.object({\n * name: z.string(),\n * greeting: z.string().optional().default('Hello')\n * })\n *\n * @Command({\n * path: 'greet',\n * optionsSchema: optionsSchema\n * })\n * export class GreetCommand implements CommandHandler<z.infer<typeof optionsSchema>> {\n * async execute(options) {\n * console.log(`${options.greeting}, ${options.name}!`)\n * }\n * }\n * ```\n */\nexport function Command(options: CommandOptions) {\n return function (target: ClassType) {\n const context = createClassContext(target)\n const originalDecorator = OriginalCommand(options)\n return originalDecorator(target, context)\n }\n}\n","import { createClassContext } from '@navios/core/legacy-compat'\n\nimport type { ClassType } from '@navios/core'\n\nimport {\n CliModule as OriginalCliModule,\n type CliModuleOptions,\n} from '../../decorators/cli-module.decorator.mjs'\n\nexport type { CliModuleOptions }\n\n/**\n * Legacy-compatible CliModule decorator.\n *\n * Works with TypeScript experimental decorators (legacy API).\n *\n * @param options - CLI module configuration options\n * @returns A class decorator compatible with legacy decorator API\n *\n * @example\n * ```typescript\n * import { CliModule } from '@navios/commander/legacy-compat'\n * import { GreetCommand } from './greet.command'\n * import { UserModule } from './user.module'\n *\n * @CliModule({\n * commands: [GreetCommand],\n * imports: [UserModule]\n * })\n * export class AppModule {}\n * ```\n */\nexport function CliModule(\n options: CliModuleOptions = {\n commands: [],\n controllers: [],\n imports: [],\n guards: [],\n overrides: [],\n },\n) {\n return function (target: ClassType) {\n const context = createClassContext(target)\n const originalDecorator = OriginalCliModule(options)\n return originalDecorator(target, context)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCA,SAAgBC,QAAQE,SAAuB;AAC7C,QAAO,SAAUC,QAAiB;EAChC,MAAMC,6DAA6BD,OAAAA;AAEnC,SAD0BF,kCAAgBC,QAAAA,CACjBC,QAAQC,QAAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GCZrC,SAAgBG,UACdE,UAA4B;CAC1BC,UAAU,EAAE;CACZC,aAAa,EAAE;CACfC,SAAS,EAAE;CACXC,QAAQ,EAAE;CACVC,WAAW,EAAE;CACd,EAAA;AAED,QAAO,SAAUC,QAAiB;EAChC,MAAMC,6DAA6BD,OAAAA;AAEnC,SAD0BP,uCAAkBC,QAAAA,CACnBM,QAAQC,QAAAA"}
@@ -1,8 +1,9 @@
1
- import { i as CommandOptions, n as CliModuleOptions } from "../cli-module.decorator-CRaNGvgl.cjs";
1
+ import { i as CommandOptions, n as CliModuleOptions } from "../cli-module.decorator-BzsOEMPH.cjs";
2
2
  import { ClassType } from "@navios/core";
3
3
  export * from "@navios/core/legacy-compat";
4
4
 
5
5
  //#region src/legacy-compat/decorators/command.decorator.d.mts
6
+
6
7
  /**
7
8
  * Legacy-compatible Command decorator.
8
9
  *
@@ -14,7 +15,7 @@ export * from "@navios/core/legacy-compat";
14
15
  * @example
15
16
  * ```typescript
16
17
  * import { Command, CommandHandler } from '@navios/commander/legacy-compat'
17
- * import { z } from 'zod'
18
+ * import { z } from 'zod/v4'
18
19
  *
19
20
  * const optionsSchema = z.object({
20
21
  * name: z.string(),
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":["ClassType","CommandOptions","Command","ClassType","CliModuleOptions","CliModule"],"sources":["../../src/legacy-compat/decorators/command.decorator.d.mts","../../src/legacy-compat/decorators/cli-module.decorator.d.mts"],"mappings":";;;;;;AAgCA;;;;ACRA;;;;;;;;;;;;;;;;;;;;;;;;iBDQwBE,OAAAA,CAAAA,OAAAA,EAAiBD,cAAAA,IAAAA,MAAAA,EAA0BD,SAAAA;;;;ACRnE;;;;;;;;;;;;;;;;;;;;iBAAwBK,SAAAA,CAAAA,OAAAA,GAAoBD,gBAAAA,IAAAA,MAAAA,EAA4BD,SAAAA,KAAcA,SAAAA"}
1
+ {"version":3,"file":"index.d.cts","names":["ClassType","CommandOptions","Command","ClassType","CliModuleOptions","CliModule"],"sources":["../../src/legacy-compat/decorators/command.decorator.d.mts","../../src/legacy-compat/decorators/cli-module.decorator.d.mts"],"sourcesContent":["import type { ClassType } from '@navios/core'\n\nimport { type CommandOptions } from '../../decorators/command.decorator.mjs'\nexport type { CommandOptions }\n/**\n * Legacy-compatible Command decorator.\n *\n * Works with TypeScript experimental decorators (legacy API).\n *\n * @param options - Command configuration options\n * @returns A class decorator compatible with legacy decorator API\n *\n * @example\n * ```typescript\n * import { Command, CommandHandler } from '@navios/commander/legacy-compat'\n * import { z } from 'zod/v4'\n *\n * const optionsSchema = z.object({\n * name: z.string(),\n * greeting: z.string().optional().default('Hello')\n * })\n *\n * @Command({\n * path: 'greet',\n * optionsSchema: optionsSchema\n * })\n * export class GreetCommand implements CommandHandler<z.infer<typeof optionsSchema>> {\n * async execute(options) {\n * console.log(`${options.greeting}, ${options.name}!`)\n * }\n * }\n * ```\n */\nexport declare function Command(options: CommandOptions): (target: ClassType) => any\n//# sourceMappingURL=command.decorator.d.mts.map\n","import type { ClassType } from '@navios/core'\n\nimport { type CliModuleOptions } from '../../decorators/cli-module.decorator.mjs'\nexport type { CliModuleOptions }\n/**\n * Legacy-compatible CliModule decorator.\n *\n * Works with TypeScript experimental decorators (legacy API).\n *\n * @param options - CLI module configuration options\n * @returns A class decorator compatible with legacy decorator API\n *\n * @example\n * ```typescript\n * import { CliModule } from '@navios/commander/legacy-compat'\n * import { GreetCommand } from './greet.command'\n * import { UserModule } from './user.module'\n *\n * @CliModule({\n * commands: [GreetCommand],\n * imports: [UserModule]\n * })\n * export class AppModule {}\n * ```\n */\nexport declare function CliModule(options?: CliModuleOptions): (target: ClassType) => ClassType\n//# sourceMappingURL=cli-module.decorator.d.mts.map\n"],"mappings":";;;;;;;;AAiCA;;;;ACRA;;;;;;;;;;;;;;;;;;;;;;;iBDQwBE,OAAAA,UAAiBD,0BAA0BD;;;;;AAAnE;;;;ACRA;;;;;;;;;;;;;;;iBAAwBK,SAAAA,WAAoBD,4BAA4BD,cAAcA"}
@@ -1,8 +1,9 @@
1
- import { i as CommandOptions, n as CliModuleOptions } from "../cli-module.decorator-bsP5gEn7.mjs";
1
+ import { i as CommandOptions, n as CliModuleOptions } from "../cli-module.decorator-CCV_elPP.mjs";
2
2
  import { ClassType } from "@navios/core";
3
3
  export * from "@navios/core/legacy-compat";
4
4
 
5
5
  //#region src/legacy-compat/decorators/command.decorator.d.mts
6
+
6
7
  /**
7
8
  * Legacy-compatible Command decorator.
8
9
  *
@@ -14,7 +15,7 @@ export * from "@navios/core/legacy-compat";
14
15
  * @example
15
16
  * ```typescript
16
17
  * import { Command, CommandHandler } from '@navios/commander/legacy-compat'
17
- * import { z } from 'zod'
18
+ * import { z } from 'zod/v4'
18
19
  *
19
20
  * const optionsSchema = z.object({
20
21
  * name: z.string(),