@platforma-sdk/bootstrap 5.3.34 → 5.3.36

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 (116) hide show
  1. package/bin/run.js +6 -5
  2. package/dist/cli.cjs +57 -0
  3. package/dist/cli.cjs.map +1 -0
  4. package/dist/cli.d.ts +8 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +55 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/cmd-opts.cjs +116 -109
  9. package/dist/cmd-opts.cjs.map +1 -1
  10. package/dist/cmd-opts.js +95 -91
  11. package/dist/cmd-opts.js.map +1 -1
  12. package/dist/commands/create-block.cjs +10 -10
  13. package/dist/commands/create-block.cjs.map +1 -1
  14. package/dist/commands/create-block.js +11 -12
  15. package/dist/commands/create-block.js.map +1 -1
  16. package/dist/commands/reset.cjs +10 -10
  17. package/dist/commands/reset.cjs.map +1 -1
  18. package/dist/commands/reset.js +11 -12
  19. package/dist/commands/reset.js.map +1 -1
  20. package/dist/commands/start/docker/s3.cjs +10 -22
  21. package/dist/commands/start/docker/s3.cjs.map +1 -1
  22. package/dist/commands/start/docker/s3.js +11 -23
  23. package/dist/commands/start/docker/s3.js.map +1 -1
  24. package/dist/commands/start/docker.cjs +10 -23
  25. package/dist/commands/start/docker.cjs.map +1 -1
  26. package/dist/commands/start/docker.js +11 -24
  27. package/dist/commands/start/docker.js.map +1 -1
  28. package/dist/commands/start/local/s3.cjs +10 -26
  29. package/dist/commands/start/local/s3.cjs.map +1 -1
  30. package/dist/commands/start/local/s3.js +11 -27
  31. package/dist/commands/start/local/s3.js.map +1 -1
  32. package/dist/commands/start/local.cjs +10 -25
  33. package/dist/commands/start/local.cjs.map +1 -1
  34. package/dist/commands/start/local.js +11 -26
  35. package/dist/commands/start/local.js.map +1 -1
  36. package/dist/commands/start.cjs +10 -10
  37. package/dist/commands/start.cjs.map +1 -1
  38. package/dist/commands/start.js +11 -12
  39. package/dist/commands/start.js.map +1 -1
  40. package/dist/commands/stop.cjs +10 -10
  41. package/dist/commands/stop.cjs.map +1 -1
  42. package/dist/commands/stop.js +11 -12
  43. package/dist/commands/stop.js.map +1 -1
  44. package/dist/commands/svc/create/arg-parser.cjs.map +1 -1
  45. package/dist/commands/svc/create/arg-parser.js.map +1 -1
  46. package/dist/commands/svc/create/docker/s3.cjs +25 -24
  47. package/dist/commands/svc/create/docker/s3.cjs.map +1 -1
  48. package/dist/commands/svc/create/docker/s3.js +26 -25
  49. package/dist/commands/svc/create/docker/s3.js.map +1 -1
  50. package/dist/commands/svc/create/docker.cjs +26 -25
  51. package/dist/commands/svc/create/docker.cjs.map +1 -1
  52. package/dist/commands/svc/create/docker.js +27 -26
  53. package/dist/commands/svc/create/docker.js.map +1 -1
  54. package/dist/commands/svc/create/local/s3.cjs +29 -28
  55. package/dist/commands/svc/create/local/s3.cjs.map +1 -1
  56. package/dist/commands/svc/create/local/s3.js +30 -29
  57. package/dist/commands/svc/create/local/s3.js.map +1 -1
  58. package/dist/commands/svc/create/local.cjs +28 -27
  59. package/dist/commands/svc/create/local.cjs.map +1 -1
  60. package/dist/commands/svc/create/local.js +29 -28
  61. package/dist/commands/svc/create/local.js.map +1 -1
  62. package/dist/commands/svc/delete.cjs +15 -21
  63. package/dist/commands/svc/delete.cjs.map +1 -1
  64. package/dist/commands/svc/delete.js +16 -23
  65. package/dist/commands/svc/delete.js.map +1 -1
  66. package/dist/commands/svc/down.cjs +12 -12
  67. package/dist/commands/svc/down.cjs.map +1 -1
  68. package/dist/commands/svc/down.js +13 -14
  69. package/dist/commands/svc/down.js.map +1 -1
  70. package/dist/commands/svc/list.cjs +8 -10
  71. package/dist/commands/svc/list.cjs.map +1 -1
  72. package/dist/commands/svc/list.js +8 -10
  73. package/dist/commands/svc/list.js.map +1 -1
  74. package/dist/commands/svc/up.cjs +12 -12
  75. package/dist/commands/svc/up.cjs.map +1 -1
  76. package/dist/commands/svc/up.js +13 -14
  77. package/dist/commands/svc/up.js.map +1 -1
  78. package/dist/index.cjs +3 -39
  79. package/dist/index.d.ts +2 -39
  80. package/dist/index.js +2 -39
  81. package/package.json +6 -18
  82. package/dist/commands/create-block.d.ts +0 -15
  83. package/dist/commands/create-block.d.ts.map +0 -1
  84. package/dist/commands/reset.d.ts +0 -15
  85. package/dist/commands/reset.d.ts.map +0 -1
  86. package/dist/commands/start/docker/s3.d.ts +0 -35
  87. package/dist/commands/start/docker/s3.d.ts.map +0 -1
  88. package/dist/commands/start/docker.d.ts +0 -35
  89. package/dist/commands/start/docker.d.ts.map +0 -1
  90. package/dist/commands/start/local/s3.d.ts +0 -39
  91. package/dist/commands/start/local/s3.d.ts.map +0 -1
  92. package/dist/commands/start/local.d.ts +0 -37
  93. package/dist/commands/start/local.d.ts.map +0 -1
  94. package/dist/commands/start.d.ts +0 -15
  95. package/dist/commands/start.d.ts.map +0 -1
  96. package/dist/commands/stop.d.ts +0 -15
  97. package/dist/commands/stop.d.ts.map +0 -1
  98. package/dist/commands/svc/create/docker/s3.d.ts +0 -38
  99. package/dist/commands/svc/create/docker/s3.d.ts.map +0 -1
  100. package/dist/commands/svc/create/docker.d.ts +0 -38
  101. package/dist/commands/svc/create/docker.d.ts.map +0 -1
  102. package/dist/commands/svc/create/local/s3.d.ts +0 -42
  103. package/dist/commands/svc/create/local/s3.d.ts.map +0 -1
  104. package/dist/commands/svc/create/local.d.ts +0 -40
  105. package/dist/commands/svc/create/local.d.ts.map +0 -1
  106. package/dist/commands/svc/delete.d.ts +0 -19
  107. package/dist/commands/svc/delete.d.ts.map +0 -1
  108. package/dist/commands/svc/down.d.ts +0 -18
  109. package/dist/commands/svc/down.d.ts.map +0 -1
  110. package/dist/commands/svc/list.d.ts +0 -12
  111. package/dist/commands/svc/list.d.ts.map +0 -1
  112. package/dist/commands/svc/up.d.ts +0 -18
  113. package/dist/commands/svc/up.d.ts.map +0 -1
  114. package/dist/index.cjs.map +0 -1
  115. package/dist/index.d.ts.map +0 -1
  116. package/dist/index.js.map +0 -1
@@ -1,18 +1,17 @@
1
- import { GlobalFlags } from "../cmd-opts.js";
1
+ import { GlobalOptions, addOptions, toFlags } from "../cmd-opts.js";
2
2
  import { createLogger } from "../util.js";
3
3
  import Core from "../core.js";
4
- import { Command } from "@oclif/core";
4
+ import { Command } from "commander";
5
5
  //#region src/commands/start.ts
6
- var Start = class Start extends Command {
7
- static description = "Start last run service configuraiton";
8
- static examples = ["<%= config.bin %> <%= command.id %>"];
9
- static flags = { ...GlobalFlags };
10
- async run() {
11
- const { flags } = await this.parse(Start);
12
- new Core(createLogger(flags["log-level"])).startLast();
13
- }
14
- };
6
+ function startCommand() {
7
+ const cmd = new Command("start").description("Start last run service configuraiton");
8
+ addOptions(cmd, GlobalOptions());
9
+ cmd.action(async (o) => {
10
+ new Core(createLogger(toFlags(o)["log-level"])).startLast();
11
+ });
12
+ return cmd;
13
+ }
15
14
  //#endregion
16
- export { Start as default };
15
+ export { startCommand as default };
17
16
 
18
17
  //# sourceMappingURL=start.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","names":["cmdOpts.GlobalFlags","util.createLogger"],"sources":["../../src/commands/start.ts"],"sourcesContent":["import { Command } from \"@oclif/core\";\nimport Core from \"../core\";\nimport * as cmdOpts from \"../cmd-opts\";\nimport * as util from \"../util\";\n\nexport default class Start extends Command {\n static override description = \"Start last run service configuraiton\";\n\n static override examples = [\"<%= config.bin %> <%= command.id %>\"];\n\n static override flags = {\n ...cmdOpts.GlobalFlags,\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(Start);\n\n const logger = util.createLogger(flags[\"log-level\"]);\n const core = new Core(logger);\n\n core.startLast();\n }\n}\n"],"mappings":";;;;;AAKA,IAAqB,QAArB,MAAqB,cAAc,QAAQ;CACzC,OAAgB,cAAc;CAE9B,OAAgB,WAAW,CAAC,sCAAsC;CAElE,OAAgB,QAAQ,EACtB,GAAGA,aACJ;CAED,MAAa,MAAqB;EAChC,MAAM,EAAE,UAAU,MAAM,KAAK,MAAM,MAAM;AAG5B,MAAI,KADFC,aAAkB,MAAM,aAAa,CACvB,CAExB,WAAW"}
1
+ {"version":3,"file":"start.js","names":["cmdOpts.GlobalOptions","cmdOpts.toFlags","util.createLogger"],"sources":["../../src/commands/start.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport Core from \"../core\";\nimport * as cmdOpts from \"../cmd-opts\";\nimport * as util from \"../util\";\n\nexport default function startCommand(): Command {\n const cmd = new Command(\"start\").description(\"Start last run service configuraiton\");\n\n cmdOpts.addOptions(cmd, cmdOpts.GlobalOptions());\n\n cmd.action(async (o) => {\n const flags = cmdOpts.toFlags(o);\n\n const logger = util.createLogger(flags[\"log-level\"]);\n const core = new Core(logger);\n\n core.startLast();\n });\n\n return cmd;\n}\n"],"mappings":";;;;;AAKA,SAAwB,eAAwB;CAC9C,MAAM,MAAM,IAAI,QAAQ,QAAQ,CAAC,YAAY,uCAAuC;AAEpF,YAAmB,KAAKA,eAAuB,CAAC;AAEhD,KAAI,OAAO,OAAO,MAAM;AAIT,MAAI,KADFE,aAFDD,QAAgB,EAAE,CAEO,aAAa,CACvB,CAExB,WAAW;GAChB;AAEF,QAAO"}
@@ -3,21 +3,21 @@ const require_cmd_opts = require("../cmd-opts.cjs");
3
3
  const require_util = require("../util.cjs");
4
4
  const require_state = require("../state.cjs");
5
5
  const require_core = require("../core.cjs");
6
- let _oclif_core = require("@oclif/core");
6
+ let commander = require("commander");
7
7
  //#region src/commands/stop.ts
8
- var Stop = class Stop extends _oclif_core.Command {
9
- static description = "Stop platforma service";
10
- static examples = ["<%= config.bin %> <%= command.id %>"];
11
- static flags = { ...require_cmd_opts.GlobalFlags };
12
- async run() {
13
- const { flags } = await this.parse(Stop);
8
+ function stopCommand() {
9
+ const cmd = new commander.Command("stop").description("Stop platforma service");
10
+ require_cmd_opts.addOptions(cmd, require_cmd_opts.GlobalOptions());
11
+ cmd.action(async (o) => {
12
+ const flags = require_cmd_opts.toFlags(o);
14
13
  const logger = require_util.createLogger(flags["log-level"]);
15
14
  const core = new require_core.default(logger);
16
15
  if (require_state.default.currentInstance) core.stopInstance(require_state.default.currentInstance);
17
16
  else logger.warn("up/start command was not called for any instance, nothing to stop");
18
- }
19
- };
17
+ });
18
+ return cmd;
19
+ }
20
20
  //#endregion
21
- exports.default = Stop;
21
+ exports.default = stopCommand;
22
22
 
23
23
  //# sourceMappingURL=stop.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"stop.cjs","names":["Command","Core","state"],"sources":["../../src/commands/stop.ts"],"sourcesContent":["import { Command } from \"@oclif/core\";\nimport Core from \"../core\";\nimport state from \"../state\";\nimport * as cmdOpts from \"../cmd-opts\";\nimport * as util from \"../util\";\n\nexport default class Stop extends Command {\n static override description = \"Stop platforma service\";\n\n static override examples = [\"<%= config.bin %> <%= command.id %>\"];\n\n static override flags = {\n ...cmdOpts.GlobalFlags,\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(Stop);\n\n const logger = util.createLogger(flags[\"log-level\"]);\n const core = new Core(logger);\n\n if (state.currentInstance) {\n core.stopInstance(state.currentInstance);\n } else {\n logger.warn(\"up/start command was not called for any instance, nothing to stop\");\n }\n }\n}\n"],"mappings":";;;;;;;AAMA,IAAqB,OAArB,MAAqB,aAAaA,YAAAA,QAAQ;CACxC,OAAgB,cAAc;CAE9B,OAAgB,WAAW,CAAC,sCAAsC;CAElE,OAAgB,QAAQ,EACtB,GAAA,iBAAA,aACD;CAED,MAAa,MAAqB;EAChC,MAAM,EAAE,UAAU,MAAM,KAAK,MAAM,KAAK;EAExC,MAAM,SAAA,aAAA,aAA2B,MAAM,aAAa;EACpD,MAAM,OAAO,IAAIC,aAAAA,QAAK,OAAO;AAE7B,MAAIC,cAAAA,QAAM,gBACR,MAAK,aAAaA,cAAAA,QAAM,gBAAgB;MAExC,QAAO,KAAK,oEAAoE"}
1
+ {"version":3,"file":"stop.cjs","names":["Command","Core","state"],"sources":["../../src/commands/stop.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport Core from \"../core\";\nimport state from \"../state\";\nimport * as cmdOpts from \"../cmd-opts\";\nimport * as util from \"../util\";\n\nexport default function stopCommand(): Command {\n const cmd = new Command(\"stop\").description(\"Stop platforma service\");\n\n cmdOpts.addOptions(cmd, cmdOpts.GlobalOptions());\n\n cmd.action(async (o) => {\n const flags = cmdOpts.toFlags(o);\n\n const logger = util.createLogger(flags[\"log-level\"]);\n const core = new Core(logger);\n\n if (state.currentInstance) {\n core.stopInstance(state.currentInstance);\n } else {\n logger.warn(\"up/start command was not called for any instance, nothing to stop\");\n }\n });\n\n return cmd;\n}\n"],"mappings":";;;;;;;AAMA,SAAwB,cAAuB;CAC7C,MAAM,MAAM,IAAIA,UAAAA,QAAQ,OAAO,CAAC,YAAY,yBAAyB;AAErE,kBAAA,WAAmB,KAAA,iBAAA,eAA4B,CAAC;AAEhD,KAAI,OAAO,OAAO,MAAM;EACtB,MAAM,QAAA,iBAAA,QAAwB,EAAE;EAEhC,MAAM,SAAA,aAAA,aAA2B,MAAM,aAAa;EACpD,MAAM,OAAO,IAAIC,aAAAA,QAAK,OAAO;AAE7B,MAAIC,cAAAA,QAAM,gBACR,MAAK,aAAaA,cAAAA,QAAM,gBAAgB;MAExC,QAAO,KAAK,oEAAoE;GAElF;AAEF,QAAO"}
@@ -1,22 +1,21 @@
1
- import { GlobalFlags } from "../cmd-opts.js";
1
+ import { GlobalOptions, addOptions, toFlags } from "../cmd-opts.js";
2
2
  import { createLogger } from "../util.js";
3
3
  import state_default from "../state.js";
4
4
  import Core from "../core.js";
5
- import { Command } from "@oclif/core";
5
+ import { Command } from "commander";
6
6
  //#region src/commands/stop.ts
7
- var Stop = class Stop extends Command {
8
- static description = "Stop platforma service";
9
- static examples = ["<%= config.bin %> <%= command.id %>"];
10
- static flags = { ...GlobalFlags };
11
- async run() {
12
- const { flags } = await this.parse(Stop);
13
- const logger = createLogger(flags["log-level"]);
7
+ function stopCommand() {
8
+ const cmd = new Command("stop").description("Stop platforma service");
9
+ addOptions(cmd, GlobalOptions());
10
+ cmd.action(async (o) => {
11
+ const logger = createLogger(toFlags(o)["log-level"]);
14
12
  const core = new Core(logger);
15
13
  if (state_default.currentInstance) core.stopInstance(state_default.currentInstance);
16
14
  else logger.warn("up/start command was not called for any instance, nothing to stop");
17
- }
18
- };
15
+ });
16
+ return cmd;
17
+ }
19
18
  //#endregion
20
- export { Stop as default };
19
+ export { stopCommand as default };
21
20
 
22
21
  //# sourceMappingURL=stop.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stop.js","names":["cmdOpts.GlobalFlags","util.createLogger","state"],"sources":["../../src/commands/stop.ts"],"sourcesContent":["import { Command } from \"@oclif/core\";\nimport Core from \"../core\";\nimport state from \"../state\";\nimport * as cmdOpts from \"../cmd-opts\";\nimport * as util from \"../util\";\n\nexport default class Stop extends Command {\n static override description = \"Stop platforma service\";\n\n static override examples = [\"<%= config.bin %> <%= command.id %>\"];\n\n static override flags = {\n ...cmdOpts.GlobalFlags,\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(Stop);\n\n const logger = util.createLogger(flags[\"log-level\"]);\n const core = new Core(logger);\n\n if (state.currentInstance) {\n core.stopInstance(state.currentInstance);\n } else {\n logger.warn(\"up/start command was not called for any instance, nothing to stop\");\n }\n }\n}\n"],"mappings":";;;;;;AAMA,IAAqB,OAArB,MAAqB,aAAa,QAAQ;CACxC,OAAgB,cAAc;CAE9B,OAAgB,WAAW,CAAC,sCAAsC;CAElE,OAAgB,QAAQ,EACtB,GAAGA,aACJ;CAED,MAAa,MAAqB;EAChC,MAAM,EAAE,UAAU,MAAM,KAAK,MAAM,KAAK;EAExC,MAAM,SAASC,aAAkB,MAAM,aAAa;EACpD,MAAM,OAAO,IAAI,KAAK,OAAO;AAE7B,MAAIC,cAAM,gBACR,MAAK,aAAaA,cAAM,gBAAgB;MAExC,QAAO,KAAK,oEAAoE"}
1
+ {"version":3,"file":"stop.js","names":["cmdOpts.GlobalOptions","cmdOpts.toFlags","util.createLogger","state"],"sources":["../../src/commands/stop.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport Core from \"../core\";\nimport state from \"../state\";\nimport * as cmdOpts from \"../cmd-opts\";\nimport * as util from \"../util\";\n\nexport default function stopCommand(): Command {\n const cmd = new Command(\"stop\").description(\"Stop platforma service\");\n\n cmdOpts.addOptions(cmd, cmdOpts.GlobalOptions());\n\n cmd.action(async (o) => {\n const flags = cmdOpts.toFlags(o);\n\n const logger = util.createLogger(flags[\"log-level\"]);\n const core = new Core(logger);\n\n if (state.currentInstance) {\n core.stopInstance(state.currentInstance);\n } else {\n logger.warn(\"up/start command was not called for any instance, nothing to stop\");\n }\n });\n\n return cmd;\n}\n"],"mappings":";;;;;;AAMA,SAAwB,cAAuB;CAC7C,MAAM,MAAM,IAAI,QAAQ,OAAO,CAAC,YAAY,yBAAyB;AAErE,YAAmB,KAAKA,eAAuB,CAAC;AAEhD,KAAI,OAAO,OAAO,MAAM;EAGtB,MAAM,SAASE,aAFDD,QAAgB,EAAE,CAEO,aAAa;EACpD,MAAM,OAAO,IAAI,KAAK,OAAO;AAE7B,MAAIE,cAAM,gBACR,MAAK,aAAaA,cAAM,gBAAgB;MAExC,QAAO,KAAK,oEAAoE;GAElF;AAEF,QAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"arg-parser.cjs","names":[],"sources":["../../../../src/commands/svc/create/arg-parser.ts"],"sourcesContent":["/**\n * Enhanced command line argument parser for OCLIF commands\n * Handles both known and unknown flags\n */\n\nexport interface ParsedArgs {\n instanceName: string;\n knownFlags: Record<string, any>;\n unknownFlags: string[];\n positionalArgs: string[];\n}\n\nexport interface FlagDefinition {\n name: string;\n type: \"string\" | \"boolean\" | \"number\" | \"array\";\n required?: boolean;\n default?: any;\n multiple?: boolean;\n}\n\nexport class ArgParser {\n private knownFlags: Set<string>;\n private flagDefinitions: Map<string, FlagDefinition>;\n\n constructor(flags: Record<string, any>) {\n this.knownFlags = new Set(Object.keys(flags));\n this.flagDefinitions = new Map();\n\n // Analyze flag definitions\n for (const [name, flag] of Object.entries(flags)) {\n if (flag.type) {\n this.flagDefinitions.set(name, {\n name,\n type: flag.type,\n required: flag.required || false,\n default: flag.default,\n multiple: flag.multiple || false,\n });\n }\n }\n }\n\n /**\n * Parse command line arguments\n */\n parse(argv: string[]): ParsedArgs {\n const result: ParsedArgs = {\n instanceName: \"\",\n knownFlags: {},\n unknownFlags: [],\n positionalArgs: [],\n };\n\n let i = 0;\n while (i < argv.length) {\n const arg = argv[i];\n\n if (arg.startsWith(\"--\")) {\n // Handle flag\n if (arg.includes(\"=\")) {\n // Flag with value: --flag=value\n const [flagName, value] = arg.split(\"=\", 2);\n const cleanFlagName = flagName.substring(2);\n\n if (this.knownFlags.has(cleanFlagName)) {\n result.knownFlags[cleanFlagName] = this.parseFlagValue(cleanFlagName, value);\n } else {\n result.unknownFlags.push(arg);\n }\n } else {\n // Flag without value: --flag or --flag value\n const flagName = arg.substring(2);\n\n if (this.knownFlags.has(flagName)) {\n const flagDef = this.flagDefinitions.get(flagName);\n\n if (flagDef?.type === \"boolean\") {\n // Boolean flag\n result.knownFlags[flagName] = true;\n } else if (i + 1 < argv.length && !argv[i + 1].startsWith(\"-\")) {\n // Flag with value in next argument\n const value = argv[i + 1];\n result.knownFlags[flagName] = this.parseFlagValue(flagName, value);\n i++; // Skip next argument\n } else {\n // Flag without value\n result.knownFlags[flagName] = true;\n }\n } else {\n result.unknownFlags.push(arg);\n }\n }\n } else if (arg.startsWith(\"-\") && arg.length > 1) {\n // Short flags: -f, -abc\n const shortFlags = arg.substring(1).split(\"\");\n for (const shortFlag of shortFlags) {\n // Find long name for short flag\n const longFlagName = this.findLongFlagName(shortFlag);\n if (longFlagName) {\n result.knownFlags[longFlagName] = true;\n } else {\n result.unknownFlags.push(`-${shortFlag}`);\n }\n }\n } else {\n // Positional argument\n if (!result.instanceName) {\n result.instanceName = arg;\n } else {\n result.positionalArgs.push(arg);\n }\n }\n\n i++;\n }\n\n // Set default values\n this.setDefaultValues(result.knownFlags);\n\n return result;\n }\n\n /**\n * Parse flag value according to its type\n */\n private parseFlagValue(flagName: string, value: string): any {\n const flagDef = this.flagDefinitions.get(flagName);\n\n if (!flagDef) {\n return value;\n }\n\n switch (flagDef.type) {\n case \"number\":\n const num = parseFloat(value);\n if (isNaN(num)) {\n throw new Error(`Invalid number value for flag --${flagName}: ${value}`);\n }\n return num;\n\n case \"boolean\":\n if (value === \"true\" || value === \"1\") return true;\n if (value === \"false\" || value === \"0\") return false;\n return Boolean(value);\n\n case \"array\":\n if (flagDef.multiple) {\n // For multiple flags create array\n // This will be handled in main parse method\n return [value];\n }\n return value;\n\n default:\n return value;\n }\n }\n\n /**\n * Find long flag name by short flag\n */\n private findLongFlagName(shortFlag: string): string | null {\n // Simple implementation - can be extended\n for (const flagName of this.knownFlags) {\n if (flagName.startsWith(shortFlag)) {\n return flagName;\n }\n }\n return null;\n }\n\n /**\n * Set default values for flags\n */\n private setDefaultValues(flags: Record<string, any>): void {\n for (const [name, flagDef] of this.flagDefinitions) {\n if (flagDef.default !== undefined && flags[name] === undefined) {\n flags[name] = flagDef.default;\n }\n }\n }\n\n /**\n * Validate required flags\n */\n validateRequired(flags: Record<string, any>): string[] {\n const errors: string[] = [];\n\n for (const [name, flagDef] of this.flagDefinitions) {\n if (flagDef.required && flags[name] === undefined) {\n errors.push(`Required flag --${name} is missing`);\n }\n }\n\n return errors;\n }\n}\n"],"mappings":";AAoBA,IAAa,YAAb,MAAuB;CACrB;CACA;CAEA,YAAY,OAA4B;AACtC,OAAK,aAAa,IAAI,IAAI,OAAO,KAAK,MAAM,CAAC;AAC7C,OAAK,kCAAkB,IAAI,KAAK;AAGhC,OAAK,MAAM,CAAC,MAAM,SAAS,OAAO,QAAQ,MAAM,CAC9C,KAAI,KAAK,KACP,MAAK,gBAAgB,IAAI,MAAM;GAC7B;GACA,MAAM,KAAK;GACX,UAAU,KAAK,YAAY;GAC3B,SAAS,KAAK;GACd,UAAU,KAAK,YAAY;GAC5B,CAAC;;;;;CAQR,MAAM,MAA4B;EAChC,MAAM,SAAqB;GACzB,cAAc;GACd,YAAY,EAAE;GACd,cAAc,EAAE;GAChB,gBAAgB,EAAE;GACnB;EAED,IAAI,IAAI;AACR,SAAO,IAAI,KAAK,QAAQ;GACtB,MAAM,MAAM,KAAK;AAEjB,OAAI,IAAI,WAAW,KAAK,CAEtB,KAAI,IAAI,SAAS,IAAI,EAAE;IAErB,MAAM,CAAC,UAAU,SAAS,IAAI,MAAM,KAAK,EAAE;IAC3C,MAAM,gBAAgB,SAAS,UAAU,EAAE;AAE3C,QAAI,KAAK,WAAW,IAAI,cAAc,CACpC,QAAO,WAAW,iBAAiB,KAAK,eAAe,eAAe,MAAM;QAE5E,QAAO,aAAa,KAAK,IAAI;UAE1B;IAEL,MAAM,WAAW,IAAI,UAAU,EAAE;AAEjC,QAAI,KAAK,WAAW,IAAI,SAAS,CAG/B,KAFgB,KAAK,gBAAgB,IAAI,SAAS,EAErC,SAAS,UAEpB,QAAO,WAAW,YAAY;aACrB,IAAI,IAAI,KAAK,UAAU,CAAC,KAAK,IAAI,GAAG,WAAW,IAAI,EAAE;KAE9D,MAAM,QAAQ,KAAK,IAAI;AACvB,YAAO,WAAW,YAAY,KAAK,eAAe,UAAU,MAAM;AAClE;UAGA,QAAO,WAAW,YAAY;QAGhC,QAAO,aAAa,KAAK,IAAI;;YAGxB,IAAI,WAAW,IAAI,IAAI,IAAI,SAAS,GAAG;IAEhD,MAAM,aAAa,IAAI,UAAU,EAAE,CAAC,MAAM,GAAG;AAC7C,SAAK,MAAM,aAAa,YAAY;KAElC,MAAM,eAAe,KAAK,iBAAiB,UAAU;AACrD,SAAI,aACF,QAAO,WAAW,gBAAgB;SAElC,QAAO,aAAa,KAAK,IAAI,YAAY;;cAKzC,CAAC,OAAO,aACV,QAAO,eAAe;OAEtB,QAAO,eAAe,KAAK,IAAI;AAInC;;AAIF,OAAK,iBAAiB,OAAO,WAAW;AAExC,SAAO;;;;;CAMT,eAAuB,UAAkB,OAAoB;EAC3D,MAAM,UAAU,KAAK,gBAAgB,IAAI,SAAS;AAElD,MAAI,CAAC,QACH,QAAO;AAGT,UAAQ,QAAQ,MAAhB;GACE,KAAK;IACH,MAAM,MAAM,WAAW,MAAM;AAC7B,QAAI,MAAM,IAAI,CACZ,OAAM,IAAI,MAAM,mCAAmC,SAAS,IAAI,QAAQ;AAE1E,WAAO;GAET,KAAK;AACH,QAAI,UAAU,UAAU,UAAU,IAAK,QAAO;AAC9C,QAAI,UAAU,WAAW,UAAU,IAAK,QAAO;AAC/C,WAAO,QAAQ,MAAM;GAEvB,KAAK;AACH,QAAI,QAAQ,SAGV,QAAO,CAAC,MAAM;AAEhB,WAAO;GAET,QACE,QAAO;;;;;;CAOb,iBAAyB,WAAkC;AAEzD,OAAK,MAAM,YAAY,KAAK,WAC1B,KAAI,SAAS,WAAW,UAAU,CAChC,QAAO;AAGX,SAAO;;;;;CAMT,iBAAyB,OAAkC;AACzD,OAAK,MAAM,CAAC,MAAM,YAAY,KAAK,gBACjC,KAAI,QAAQ,YAAY,KAAA,KAAa,MAAM,UAAU,KAAA,EACnD,OAAM,QAAQ,QAAQ;;;;;CAQ5B,iBAAiB,OAAsC;EACrD,MAAM,SAAmB,EAAE;AAE3B,OAAK,MAAM,CAAC,MAAM,YAAY,KAAK,gBACjC,KAAI,QAAQ,YAAY,MAAM,UAAU,KAAA,EACtC,QAAO,KAAK,mBAAmB,KAAK,aAAa;AAIrD,SAAO"}
1
+ {"version":3,"file":"arg-parser.cjs","names":[],"sources":["../../../../src/commands/svc/create/arg-parser.ts"],"sourcesContent":["/** Argument parser that separates known flags from unknown ones (forwarded to the backend). */\n\nexport interface ParsedArgs {\n instanceName: string;\n knownFlags: Record<string, any>;\n unknownFlags: string[];\n positionalArgs: string[];\n}\n\nexport interface FlagDefinition {\n name: string;\n type: \"string\" | \"boolean\" | \"number\" | \"array\";\n required?: boolean;\n default?: any;\n multiple?: boolean;\n}\n\nexport class ArgParser {\n private knownFlags: Set<string>;\n private flagDefinitions: Map<string, FlagDefinition>;\n\n constructor(flags: Record<string, any>) {\n this.knownFlags = new Set(Object.keys(flags));\n this.flagDefinitions = new Map();\n\n // Analyze flag definitions\n for (const [name, flag] of Object.entries(flags)) {\n if (flag.type) {\n this.flagDefinitions.set(name, {\n name,\n type: flag.type,\n required: flag.required || false,\n default: flag.default,\n multiple: flag.multiple || false,\n });\n }\n }\n }\n\n /**\n * Parse command line arguments\n */\n parse(argv: string[]): ParsedArgs {\n const result: ParsedArgs = {\n instanceName: \"\",\n knownFlags: {},\n unknownFlags: [],\n positionalArgs: [],\n };\n\n let i = 0;\n while (i < argv.length) {\n const arg = argv[i];\n\n if (arg.startsWith(\"--\")) {\n // Handle flag\n if (arg.includes(\"=\")) {\n // Flag with value: --flag=value\n const [flagName, value] = arg.split(\"=\", 2);\n const cleanFlagName = flagName.substring(2);\n\n if (this.knownFlags.has(cleanFlagName)) {\n result.knownFlags[cleanFlagName] = this.parseFlagValue(cleanFlagName, value);\n } else {\n result.unknownFlags.push(arg);\n }\n } else {\n // Flag without value: --flag or --flag value\n const flagName = arg.substring(2);\n\n if (this.knownFlags.has(flagName)) {\n const flagDef = this.flagDefinitions.get(flagName);\n\n if (flagDef?.type === \"boolean\") {\n // Boolean flag\n result.knownFlags[flagName] = true;\n } else if (i + 1 < argv.length && !argv[i + 1].startsWith(\"-\")) {\n // Flag with value in next argument\n const value = argv[i + 1];\n result.knownFlags[flagName] = this.parseFlagValue(flagName, value);\n i++; // Skip next argument\n } else {\n // Flag without value\n result.knownFlags[flagName] = true;\n }\n } else {\n result.unknownFlags.push(arg);\n }\n }\n } else if (arg.startsWith(\"-\") && arg.length > 1) {\n // Short flags: -f, -abc\n const shortFlags = arg.substring(1).split(\"\");\n for (const shortFlag of shortFlags) {\n // Find long name for short flag\n const longFlagName = this.findLongFlagName(shortFlag);\n if (longFlagName) {\n result.knownFlags[longFlagName] = true;\n } else {\n result.unknownFlags.push(`-${shortFlag}`);\n }\n }\n } else {\n // Positional argument\n if (!result.instanceName) {\n result.instanceName = arg;\n } else {\n result.positionalArgs.push(arg);\n }\n }\n\n i++;\n }\n\n // Set default values\n this.setDefaultValues(result.knownFlags);\n\n return result;\n }\n\n /**\n * Parse flag value according to its type\n */\n private parseFlagValue(flagName: string, value: string): any {\n const flagDef = this.flagDefinitions.get(flagName);\n\n if (!flagDef) {\n return value;\n }\n\n switch (flagDef.type) {\n case \"number\":\n const num = parseFloat(value);\n if (isNaN(num)) {\n throw new Error(`Invalid number value for flag --${flagName}: ${value}`);\n }\n return num;\n\n case \"boolean\":\n if (value === \"true\" || value === \"1\") return true;\n if (value === \"false\" || value === \"0\") return false;\n return Boolean(value);\n\n case \"array\":\n if (flagDef.multiple) {\n // For multiple flags create array\n // This will be handled in main parse method\n return [value];\n }\n return value;\n\n default:\n return value;\n }\n }\n\n /**\n * Find long flag name by short flag\n */\n private findLongFlagName(shortFlag: string): string | null {\n // Simple implementation - can be extended\n for (const flagName of this.knownFlags) {\n if (flagName.startsWith(shortFlag)) {\n return flagName;\n }\n }\n return null;\n }\n\n /**\n * Set default values for flags\n */\n private setDefaultValues(flags: Record<string, any>): void {\n for (const [name, flagDef] of this.flagDefinitions) {\n if (flagDef.default !== undefined && flags[name] === undefined) {\n flags[name] = flagDef.default;\n }\n }\n }\n\n /**\n * Validate required flags\n */\n validateRequired(flags: Record<string, any>): string[] {\n const errors: string[] = [];\n\n for (const [name, flagDef] of this.flagDefinitions) {\n if (flagDef.required && flags[name] === undefined) {\n errors.push(`Required flag --${name} is missing`);\n }\n }\n\n return errors;\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"arg-parser.js","names":[],"sources":["../../../../src/commands/svc/create/arg-parser.ts"],"sourcesContent":["/**\n * Enhanced command line argument parser for OCLIF commands\n * Handles both known and unknown flags\n */\n\nexport interface ParsedArgs {\n instanceName: string;\n knownFlags: Record<string, any>;\n unknownFlags: string[];\n positionalArgs: string[];\n}\n\nexport interface FlagDefinition {\n name: string;\n type: \"string\" | \"boolean\" | \"number\" | \"array\";\n required?: boolean;\n default?: any;\n multiple?: boolean;\n}\n\nexport class ArgParser {\n private knownFlags: Set<string>;\n private flagDefinitions: Map<string, FlagDefinition>;\n\n constructor(flags: Record<string, any>) {\n this.knownFlags = new Set(Object.keys(flags));\n this.flagDefinitions = new Map();\n\n // Analyze flag definitions\n for (const [name, flag] of Object.entries(flags)) {\n if (flag.type) {\n this.flagDefinitions.set(name, {\n name,\n type: flag.type,\n required: flag.required || false,\n default: flag.default,\n multiple: flag.multiple || false,\n });\n }\n }\n }\n\n /**\n * Parse command line arguments\n */\n parse(argv: string[]): ParsedArgs {\n const result: ParsedArgs = {\n instanceName: \"\",\n knownFlags: {},\n unknownFlags: [],\n positionalArgs: [],\n };\n\n let i = 0;\n while (i < argv.length) {\n const arg = argv[i];\n\n if (arg.startsWith(\"--\")) {\n // Handle flag\n if (arg.includes(\"=\")) {\n // Flag with value: --flag=value\n const [flagName, value] = arg.split(\"=\", 2);\n const cleanFlagName = flagName.substring(2);\n\n if (this.knownFlags.has(cleanFlagName)) {\n result.knownFlags[cleanFlagName] = this.parseFlagValue(cleanFlagName, value);\n } else {\n result.unknownFlags.push(arg);\n }\n } else {\n // Flag without value: --flag or --flag value\n const flagName = arg.substring(2);\n\n if (this.knownFlags.has(flagName)) {\n const flagDef = this.flagDefinitions.get(flagName);\n\n if (flagDef?.type === \"boolean\") {\n // Boolean flag\n result.knownFlags[flagName] = true;\n } else if (i + 1 < argv.length && !argv[i + 1].startsWith(\"-\")) {\n // Flag with value in next argument\n const value = argv[i + 1];\n result.knownFlags[flagName] = this.parseFlagValue(flagName, value);\n i++; // Skip next argument\n } else {\n // Flag without value\n result.knownFlags[flagName] = true;\n }\n } else {\n result.unknownFlags.push(arg);\n }\n }\n } else if (arg.startsWith(\"-\") && arg.length > 1) {\n // Short flags: -f, -abc\n const shortFlags = arg.substring(1).split(\"\");\n for (const shortFlag of shortFlags) {\n // Find long name for short flag\n const longFlagName = this.findLongFlagName(shortFlag);\n if (longFlagName) {\n result.knownFlags[longFlagName] = true;\n } else {\n result.unknownFlags.push(`-${shortFlag}`);\n }\n }\n } else {\n // Positional argument\n if (!result.instanceName) {\n result.instanceName = arg;\n } else {\n result.positionalArgs.push(arg);\n }\n }\n\n i++;\n }\n\n // Set default values\n this.setDefaultValues(result.knownFlags);\n\n return result;\n }\n\n /**\n * Parse flag value according to its type\n */\n private parseFlagValue(flagName: string, value: string): any {\n const flagDef = this.flagDefinitions.get(flagName);\n\n if (!flagDef) {\n return value;\n }\n\n switch (flagDef.type) {\n case \"number\":\n const num = parseFloat(value);\n if (isNaN(num)) {\n throw new Error(`Invalid number value for flag --${flagName}: ${value}`);\n }\n return num;\n\n case \"boolean\":\n if (value === \"true\" || value === \"1\") return true;\n if (value === \"false\" || value === \"0\") return false;\n return Boolean(value);\n\n case \"array\":\n if (flagDef.multiple) {\n // For multiple flags create array\n // This will be handled in main parse method\n return [value];\n }\n return value;\n\n default:\n return value;\n }\n }\n\n /**\n * Find long flag name by short flag\n */\n private findLongFlagName(shortFlag: string): string | null {\n // Simple implementation - can be extended\n for (const flagName of this.knownFlags) {\n if (flagName.startsWith(shortFlag)) {\n return flagName;\n }\n }\n return null;\n }\n\n /**\n * Set default values for flags\n */\n private setDefaultValues(flags: Record<string, any>): void {\n for (const [name, flagDef] of this.flagDefinitions) {\n if (flagDef.default !== undefined && flags[name] === undefined) {\n flags[name] = flagDef.default;\n }\n }\n }\n\n /**\n * Validate required flags\n */\n validateRequired(flags: Record<string, any>): string[] {\n const errors: string[] = [];\n\n for (const [name, flagDef] of this.flagDefinitions) {\n if (flagDef.required && flags[name] === undefined) {\n errors.push(`Required flag --${name} is missing`);\n }\n }\n\n return errors;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"arg-parser.js","names":[],"sources":["../../../../src/commands/svc/create/arg-parser.ts"],"sourcesContent":["/** Argument parser that separates known flags from unknown ones (forwarded to the backend). */\n\nexport interface ParsedArgs {\n instanceName: string;\n knownFlags: Record<string, any>;\n unknownFlags: string[];\n positionalArgs: string[];\n}\n\nexport interface FlagDefinition {\n name: string;\n type: \"string\" | \"boolean\" | \"number\" | \"array\";\n required?: boolean;\n default?: any;\n multiple?: boolean;\n}\n\nexport class ArgParser {\n private knownFlags: Set<string>;\n private flagDefinitions: Map<string, FlagDefinition>;\n\n constructor(flags: Record<string, any>) {\n this.knownFlags = new Set(Object.keys(flags));\n this.flagDefinitions = new Map();\n\n // Analyze flag definitions\n for (const [name, flag] of Object.entries(flags)) {\n if (flag.type) {\n this.flagDefinitions.set(name, {\n name,\n type: flag.type,\n required: flag.required || false,\n default: flag.default,\n multiple: flag.multiple || false,\n });\n }\n }\n }\n\n /**\n * Parse command line arguments\n */\n parse(argv: string[]): ParsedArgs {\n const result: ParsedArgs = {\n instanceName: \"\",\n knownFlags: {},\n unknownFlags: [],\n positionalArgs: [],\n };\n\n let i = 0;\n while (i < argv.length) {\n const arg = argv[i];\n\n if (arg.startsWith(\"--\")) {\n // Handle flag\n if (arg.includes(\"=\")) {\n // Flag with value: --flag=value\n const [flagName, value] = arg.split(\"=\", 2);\n const cleanFlagName = flagName.substring(2);\n\n if (this.knownFlags.has(cleanFlagName)) {\n result.knownFlags[cleanFlagName] = this.parseFlagValue(cleanFlagName, value);\n } else {\n result.unknownFlags.push(arg);\n }\n } else {\n // Flag without value: --flag or --flag value\n const flagName = arg.substring(2);\n\n if (this.knownFlags.has(flagName)) {\n const flagDef = this.flagDefinitions.get(flagName);\n\n if (flagDef?.type === \"boolean\") {\n // Boolean flag\n result.knownFlags[flagName] = true;\n } else if (i + 1 < argv.length && !argv[i + 1].startsWith(\"-\")) {\n // Flag with value in next argument\n const value = argv[i + 1];\n result.knownFlags[flagName] = this.parseFlagValue(flagName, value);\n i++; // Skip next argument\n } else {\n // Flag without value\n result.knownFlags[flagName] = true;\n }\n } else {\n result.unknownFlags.push(arg);\n }\n }\n } else if (arg.startsWith(\"-\") && arg.length > 1) {\n // Short flags: -f, -abc\n const shortFlags = arg.substring(1).split(\"\");\n for (const shortFlag of shortFlags) {\n // Find long name for short flag\n const longFlagName = this.findLongFlagName(shortFlag);\n if (longFlagName) {\n result.knownFlags[longFlagName] = true;\n } else {\n result.unknownFlags.push(`-${shortFlag}`);\n }\n }\n } else {\n // Positional argument\n if (!result.instanceName) {\n result.instanceName = arg;\n } else {\n result.positionalArgs.push(arg);\n }\n }\n\n i++;\n }\n\n // Set default values\n this.setDefaultValues(result.knownFlags);\n\n return result;\n }\n\n /**\n * Parse flag value according to its type\n */\n private parseFlagValue(flagName: string, value: string): any {\n const flagDef = this.flagDefinitions.get(flagName);\n\n if (!flagDef) {\n return value;\n }\n\n switch (flagDef.type) {\n case \"number\":\n const num = parseFloat(value);\n if (isNaN(num)) {\n throw new Error(`Invalid number value for flag --${flagName}: ${value}`);\n }\n return num;\n\n case \"boolean\":\n if (value === \"true\" || value === \"1\") return true;\n if (value === \"false\" || value === \"0\") return false;\n return Boolean(value);\n\n case \"array\":\n if (flagDef.multiple) {\n // For multiple flags create array\n // This will be handled in main parse method\n return [value];\n }\n return value;\n\n default:\n return value;\n }\n }\n\n /**\n * Find long flag name by short flag\n */\n private findLongFlagName(shortFlag: string): string | null {\n // Simple implementation - can be extended\n for (const flagName of this.knownFlags) {\n if (flagName.startsWith(shortFlag)) {\n return flagName;\n }\n }\n return null;\n }\n\n /**\n * Set default values for flags\n */\n private setDefaultValues(flags: Record<string, any>): void {\n for (const [name, flagDef] of this.flagDefinitions) {\n if (flagDef.default !== undefined && flags[name] === undefined) {\n flags[name] = flagDef.default;\n }\n }\n }\n\n /**\n * Validate required flags\n */\n validateRequired(flags: Record<string, any>): string[] {\n const errors: string[] = [];\n\n for (const [name, flagDef] of this.flagDefinitions) {\n if (flagDef.required && flags[name] === undefined) {\n errors.push(`Required flag --${name} is missing`);\n }\n }\n\n return errors;\n }\n}\n"],"mappings":"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"}
@@ -4,30 +4,30 @@ const require_util = require("../../../../util.cjs");
4
4
  const require_state = require("../../../../state.cjs");
5
5
  const require_core = require("../../../../core.cjs");
6
6
  const require_arg_parser = require("../arg-parser.cjs");
7
- let _oclif_core = require("@oclif/core");
7
+ let commander = require("commander");
8
8
  let node_path = require("node:path");
9
9
  node_path = require_runtime.__toESM(node_path);
10
10
  //#region src/commands/svc/create/docker/s3.ts
11
- var S3 = class S3 extends _oclif_core.Command {
12
- static description = "Run Platforma Backend service as docker container on current host with MinIO as local S3 storage";
13
- static examples = ["<%= config.bin %> <%= command.id %>"];
14
- static flags = {
15
- ...require_cmd_opts.GlobalFlags,
16
- ...require_cmd_opts.AddressesFlags,
17
- ...require_cmd_opts.S3AddressesFlags,
18
- ...require_cmd_opts.ImageFlag,
19
- ...require_cmd_opts.VersionFlag,
20
- ...require_cmd_opts.ArchFlag,
21
- ...require_cmd_opts.AuthFlags,
22
- ...require_cmd_opts.LicenseFlags,
23
- ...require_cmd_opts.MountFlag,
24
- ...require_cmd_opts.StorageFlag,
25
- ...require_cmd_opts.MinioPresignHostFlag
26
- };
27
- static args = { name: _oclif_core.Args.string({ required: true }) };
28
- async run() {
29
- const parser = new require_arg_parser.ArgParser(S3.flags);
30
- const parsed = parser.parse(this.argv);
11
+ const optionGroups = () => [
12
+ require_cmd_opts.GlobalOptions(),
13
+ require_cmd_opts.AddressesOptions(),
14
+ require_cmd_opts.S3AddressesOptions(),
15
+ require_cmd_opts.ImageOptions(),
16
+ require_cmd_opts.VersionOptions(),
17
+ require_cmd_opts.ArchOptions(),
18
+ require_cmd_opts.AuthOptions(),
19
+ require_cmd_opts.LicenseOptions(),
20
+ require_cmd_opts.MountOptions(),
21
+ require_cmd_opts.StorageOptions(),
22
+ require_cmd_opts.MinioPresignHostOptions()
23
+ ];
24
+ function svcCreateDockerS3Command() {
25
+ const cmd = new commander.Command("s3").description("Run Platforma Backend service as docker container on current host with MinIO as local S3 storage").allowUnknownOption().allowExcessArguments();
26
+ cmd.argument("[args...]", "instance name followed by optional backend flags");
27
+ cmd.action(async () => {
28
+ const args = cmd.args;
29
+ const parser = new require_arg_parser.ArgParser(require_cmd_opts.argDefs(...optionGroups()));
30
+ const parsed = parser.parse(args);
31
31
  const errors = parser.validateRequired(parsed.knownFlags);
32
32
  if (errors.length > 0) throw new Error(`Validation errors:\n${errors.join("\n")}`);
33
33
  const instanceName = parsed.instanceName;
@@ -71,9 +71,10 @@ var S3 = class S3 extends _oclif_core.Command {
71
71
  logger.info(`Instance '${instanceName}' was created. To start it run 'up' command`);
72
72
  if (flags["minio-presign-host"]) logger.info(" NOTE: make sure you have 'minio' host in your hosts file as 127.0.0.1 address");
73
73
  if (backendCommands.length > 0) logger.info(`Unknown flags will be passed to backend: ${backendCommands.join(" ")}`);
74
- }
75
- };
74
+ });
75
+ return cmd;
76
+ }
76
77
  //#endregion
77
- exports.default = S3;
78
+ exports.default = svcCreateDockerS3Command;
78
79
 
79
80
  //# sourceMappingURL=s3.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"s3.cjs","names":["Command","Args","ArgParser","Core","path","state"],"sources":["../../../../../src/commands/svc/create/docker/s3.ts"],"sourcesContent":["import { Command, Args } from \"@oclif/core\";\nimport path from \"node:path\";\nimport type * as types from \"../../../../templates/types\";\nimport Core from \"../../../../core\";\nimport * as cmdOpts from \"../../../../cmd-opts\";\nimport * as util from \"../../../../util\";\nimport state from \"../../../../state\";\nimport { ArgParser } from \"../arg-parser\";\n\nexport default class S3 extends Command {\n static override description =\n \"Run Platforma Backend service as docker container on current host with MinIO as local S3 storage\";\n\n static override examples = [\"<%= config.bin %> <%= command.id %>\"];\n\n static override flags = {\n ...cmdOpts.GlobalFlags,\n\n ...cmdOpts.AddressesFlags,\n ...cmdOpts.S3AddressesFlags,\n ...cmdOpts.ImageFlag,\n ...cmdOpts.VersionFlag,\n ...cmdOpts.ArchFlag,\n\n ...cmdOpts.AuthFlags,\n ...cmdOpts.LicenseFlags,\n\n ...cmdOpts.MountFlag,\n ...cmdOpts.StorageFlag,\n ...cmdOpts.MinioPresignHostFlag,\n };\n\n static override args = {\n name: Args.string({ required: true }),\n };\n\n public async run(): Promise<void> {\n // Use custom parser instead of OCLIF parse\n const parser = new ArgParser(S3.flags);\n const parsed = parser.parse(this.argv);\n\n // Validate required flags\n const errors = parser.validateRequired(parsed.knownFlags);\n if (errors.length > 0) {\n throw new Error(`Validation errors:\\n${errors.join(\"\\n\")}`);\n }\n\n const instanceName = parsed.instanceName;\n const flags = parsed.knownFlags;\n\n const backendCommands = parsed.unknownFlags;\n if (flags[\"log-level\"]) {\n backendCommands.push(`--log-level=${flags[\"log-level\"]}`);\n }\n\n // Set default values for S3-specific flags\n if (!flags[\"s3-port\"]) flags[\"s3-port\"] = 9000;\n if (!flags[\"s3-console-port\"]) flags[\"s3-console-port\"] = 9001;\n\n const logger = util.createLogger(flags[\"log-level\"] || \"info\");\n const core = new Core(logger);\n core.mergeLicenseEnvs(flags);\n\n const authEnabled = flags[\"auth-enabled\"];\n const authOptions: types.authOptions | undefined = authEnabled\n ? {\n enabled: authEnabled,\n drivers: core.initAuthDriversList(flags, \".\"),\n }\n : undefined;\n\n const storage = flags.storage ? path.join(\".\", flags.storage) : state.instanceDir(instanceName);\n\n const mounts: { hostPath: string; containerPath?: string }[] = [];\n for (const p of flags.mount ?? []) {\n mounts.push({ hostPath: p });\n }\n\n const platformOverride = flags.arch ? `linux/${flags.arch}` : undefined;\n const presignHost = flags[\"minio-presign-host\"] ? \"minio\" : \"localhost\";\n\n core.createDockerS3(instanceName, storage, {\n image: flags.image,\n version: flags.version,\n\n license: flags[\"license\"],\n licenseFile: flags[\"license-file\"],\n\n platformOverride: platformOverride,\n customMounts: mounts,\n\n auth: authOptions,\n\n grpcAddr: flags[\"grpc-listen\"],\n grpcPort: flags[\"grpc-port\"],\n\n monitoringAddr: flags[\"monitoring-listen\"],\n monitoringPort: flags[\"monitoring-port\"],\n\n debugAddr: flags[\"debug-listen\"],\n debugPort: flags[\"debug-port\"],\n\n s3Port: flags[\"s3-port\"],\n s3ConsolePort: flags[\"s3-console-port\"],\n\n presignHost: presignHost,\n\n backendCommands: backendCommands,\n });\n\n logger.info(`Instance '${instanceName}' was created. To start it run 'up' command`);\n if (flags[\"minio-presign-host\"]) {\n logger.info(\n \" NOTE: make sure you have 'minio' host in your hosts file as 127.0.0.1 address\",\n );\n }\n\n // Log unknown flags that will be passed to backend\n if (backendCommands.length > 0) {\n logger.info(`Unknown flags will be passed to backend: ${backendCommands.join(\" \")}`);\n }\n }\n}\n"],"mappings":";;;;;;;;;;AASA,IAAqB,KAArB,MAAqB,WAAWA,YAAAA,QAAQ;CACtC,OAAgB,cACd;CAEF,OAAgB,WAAW,CAAC,sCAAsC;CAElE,OAAgB,QAAQ;EACtB,GAAA,iBAAA;EAEA,GAAA,iBAAA;EACA,GAAA,iBAAA;EACA,GAAA,iBAAA;EACA,GAAA,iBAAA;EACA,GAAA,iBAAA;EAEA,GAAA,iBAAA;EACA,GAAA,iBAAA;EAEA,GAAA,iBAAA;EACA,GAAA,iBAAA;EACA,GAAA,iBAAA;EACD;CAED,OAAgB,OAAO,EACrB,MAAMC,YAAAA,KAAK,OAAO,EAAE,UAAU,MAAM,CAAC,EACtC;CAED,MAAa,MAAqB;EAEhC,MAAM,SAAS,IAAIC,mBAAAA,UAAU,GAAG,MAAM;EACtC,MAAM,SAAS,OAAO,MAAM,KAAK,KAAK;EAGtC,MAAM,SAAS,OAAO,iBAAiB,OAAO,WAAW;AACzD,MAAI,OAAO,SAAS,EAClB,OAAM,IAAI,MAAM,uBAAuB,OAAO,KAAK,KAAK,GAAG;EAG7D,MAAM,eAAe,OAAO;EAC5B,MAAM,QAAQ,OAAO;EAErB,MAAM,kBAAkB,OAAO;AAC/B,MAAI,MAAM,aACR,iBAAgB,KAAK,eAAe,MAAM,eAAe;AAI3D,MAAI,CAAC,MAAM,WAAY,OAAM,aAAa;AAC1C,MAAI,CAAC,MAAM,mBAAoB,OAAM,qBAAqB;EAE1D,MAAM,SAAA,aAAA,aAA2B,MAAM,gBAAgB,OAAO;EAC9D,MAAM,OAAO,IAAIC,aAAAA,QAAK,OAAO;AAC7B,OAAK,iBAAiB,MAAM;EAE5B,MAAM,cAAc,MAAM;EAC1B,MAAM,cAA6C,cAC/C;GACE,SAAS;GACT,SAAS,KAAK,oBAAoB,OAAO,IAAI;GAC9C,GACD,KAAA;EAEJ,MAAM,UAAU,MAAM,UAAUC,UAAAA,QAAK,KAAK,KAAK,MAAM,QAAQ,GAAGC,cAAAA,QAAM,YAAY,aAAa;EAE/F,MAAM,SAAyD,EAAE;AACjE,OAAK,MAAM,KAAK,MAAM,SAAS,EAAE,CAC/B,QAAO,KAAK,EAAE,UAAU,GAAG,CAAC;EAG9B,MAAM,mBAAmB,MAAM,OAAO,SAAS,MAAM,SAAS,KAAA;EAC9D,MAAM,cAAc,MAAM,wBAAwB,UAAU;AAE5D,OAAK,eAAe,cAAc,SAAS;GACzC,OAAO,MAAM;GACb,SAAS,MAAM;GAEf,SAAS,MAAM;GACf,aAAa,MAAM;GAED;GAClB,cAAc;GAEd,MAAM;GAEN,UAAU,MAAM;GAChB,UAAU,MAAM;GAEhB,gBAAgB,MAAM;GACtB,gBAAgB,MAAM;GAEtB,WAAW,MAAM;GACjB,WAAW,MAAM;GAEjB,QAAQ,MAAM;GACd,eAAe,MAAM;GAER;GAEI;GAClB,CAAC;AAEF,SAAO,KAAK,aAAa,aAAa,6CAA6C;AACnF,MAAI,MAAM,sBACR,QAAO,KACL,kFACD;AAIH,MAAI,gBAAgB,SAAS,EAC3B,QAAO,KAAK,4CAA4C,gBAAgB,KAAK,IAAI,GAAG"}
1
+ {"version":3,"file":"s3.cjs","names":["Command","ArgParser","Core","path","state"],"sources":["../../../../../src/commands/svc/create/docker/s3.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport path from \"node:path\";\nimport type * as types from \"../../../../templates/types\";\nimport Core from \"../../../../core\";\nimport * as cmdOpts from \"../../../../cmd-opts\";\nimport * as util from \"../../../../util\";\nimport state from \"../../../../state\";\nimport { ArgParser } from \"../arg-parser\";\n\nconst optionGroups = (): Parameters<typeof cmdOpts.argDefs> => [\n cmdOpts.GlobalOptions(),\n cmdOpts.AddressesOptions(),\n cmdOpts.S3AddressesOptions(),\n cmdOpts.ImageOptions(),\n cmdOpts.VersionOptions(),\n cmdOpts.ArchOptions(),\n cmdOpts.AuthOptions(),\n cmdOpts.LicenseOptions(),\n cmdOpts.MountOptions(),\n cmdOpts.StorageOptions(),\n cmdOpts.MinioPresignHostOptions(),\n];\n\nexport default function svcCreateDockerS3Command(): Command {\n const cmd = new Command(\"s3\")\n .description(\n \"Run Platforma Backend service as docker container on current host with MinIO as local S3 storage\",\n )\n .allowUnknownOption()\n .allowExcessArguments();\n\n // Unknown flags are forwarded to the backend, so parse the raw token list\n // ourselves instead of letting commander reject them.\n cmd.argument(\"[args...]\", \"instance name followed by optional backend flags\");\n\n cmd.action(async () => {\n const args = cmd.args;\n const parser = new ArgParser(cmdOpts.argDefs(...optionGroups()));\n const parsed = parser.parse(args);\n\n const errors = parser.validateRequired(parsed.knownFlags);\n if (errors.length > 0) {\n throw new Error(`Validation errors:\\n${errors.join(\"\\n\")}`);\n }\n\n const instanceName = parsed.instanceName;\n const flags = parsed.knownFlags;\n\n const backendCommands = parsed.unknownFlags;\n if (flags[\"log-level\"]) {\n backendCommands.push(`--log-level=${flags[\"log-level\"]}`);\n }\n\n if (!flags[\"s3-port\"]) flags[\"s3-port\"] = 9000;\n if (!flags[\"s3-console-port\"]) flags[\"s3-console-port\"] = 9001;\n\n const logger = util.createLogger(flags[\"log-level\"] || \"info\");\n const core = new Core(logger);\n core.mergeLicenseEnvs(flags);\n\n const authEnabled = flags[\"auth-enabled\"];\n const authOptions: types.authOptions | undefined = authEnabled\n ? {\n enabled: authEnabled,\n drivers: core.initAuthDriversList(flags, \".\"),\n }\n : undefined;\n\n const storage = flags.storage ? path.join(\".\", flags.storage) : state.instanceDir(instanceName);\n\n const mounts: { hostPath: string; containerPath?: string }[] = [];\n for (const p of flags.mount ?? []) {\n mounts.push({ hostPath: p });\n }\n\n const platformOverride = flags.arch ? `linux/${flags.arch}` : undefined;\n const presignHost = flags[\"minio-presign-host\"] ? \"minio\" : \"localhost\";\n\n core.createDockerS3(instanceName, storage, {\n image: flags.image,\n version: flags.version,\n\n license: flags[\"license\"],\n licenseFile: flags[\"license-file\"],\n\n platformOverride: platformOverride,\n customMounts: mounts,\n\n auth: authOptions,\n\n grpcAddr: flags[\"grpc-listen\"],\n grpcPort: flags[\"grpc-port\"],\n\n monitoringAddr: flags[\"monitoring-listen\"],\n monitoringPort: flags[\"monitoring-port\"],\n\n debugAddr: flags[\"debug-listen\"],\n debugPort: flags[\"debug-port\"],\n\n s3Port: flags[\"s3-port\"],\n s3ConsolePort: flags[\"s3-console-port\"],\n\n presignHost: presignHost,\n\n backendCommands: backendCommands,\n });\n\n logger.info(`Instance '${instanceName}' was created. To start it run 'up' command`);\n if (flags[\"minio-presign-host\"]) {\n logger.info(\n \" NOTE: make sure you have 'minio' host in your hosts file as 127.0.0.1 address\",\n );\n }\n\n if (backendCommands.length > 0) {\n logger.info(`Unknown flags will be passed to backend: ${backendCommands.join(\" \")}`);\n }\n });\n\n return cmd;\n}\n"],"mappings":";;;;;;;;;;AASA,MAAM,qBAAyD;iCACtC;oCACG;sCACE;gCACN;kCACE;+BACH;+BACA;kCACG;gCACF;kCACE;2CACS;CAClC;AAED,SAAwB,2BAAoC;CAC1D,MAAM,MAAM,IAAIA,UAAAA,QAAQ,KAAK,CAC1B,YACC,mGACD,CACA,oBAAoB,CACpB,sBAAsB;AAIzB,KAAI,SAAS,aAAa,mDAAmD;AAE7E,KAAI,OAAO,YAAY;EACrB,MAAM,OAAO,IAAI;EACjB,MAAM,SAAS,IAAIC,mBAAAA,UAAAA,iBAAAA,QAA0B,GAAG,cAAc,CAAC,CAAC;EAChE,MAAM,SAAS,OAAO,MAAM,KAAK;EAEjC,MAAM,SAAS,OAAO,iBAAiB,OAAO,WAAW;AACzD,MAAI,OAAO,SAAS,EAClB,OAAM,IAAI,MAAM,uBAAuB,OAAO,KAAK,KAAK,GAAG;EAG7D,MAAM,eAAe,OAAO;EAC5B,MAAM,QAAQ,OAAO;EAErB,MAAM,kBAAkB,OAAO;AAC/B,MAAI,MAAM,aACR,iBAAgB,KAAK,eAAe,MAAM,eAAe;AAG3D,MAAI,CAAC,MAAM,WAAY,OAAM,aAAa;AAC1C,MAAI,CAAC,MAAM,mBAAoB,OAAM,qBAAqB;EAE1D,MAAM,SAAA,aAAA,aAA2B,MAAM,gBAAgB,OAAO;EAC9D,MAAM,OAAO,IAAIC,aAAAA,QAAK,OAAO;AAC7B,OAAK,iBAAiB,MAAM;EAE5B,MAAM,cAAc,MAAM;EAC1B,MAAM,cAA6C,cAC/C;GACE,SAAS;GACT,SAAS,KAAK,oBAAoB,OAAO,IAAI;GAC9C,GACD,KAAA;EAEJ,MAAM,UAAU,MAAM,UAAUC,UAAAA,QAAK,KAAK,KAAK,MAAM,QAAQ,GAAGC,cAAAA,QAAM,YAAY,aAAa;EAE/F,MAAM,SAAyD,EAAE;AACjE,OAAK,MAAM,KAAK,MAAM,SAAS,EAAE,CAC/B,QAAO,KAAK,EAAE,UAAU,GAAG,CAAC;EAG9B,MAAM,mBAAmB,MAAM,OAAO,SAAS,MAAM,SAAS,KAAA;EAC9D,MAAM,cAAc,MAAM,wBAAwB,UAAU;AAE5D,OAAK,eAAe,cAAc,SAAS;GACzC,OAAO,MAAM;GACb,SAAS,MAAM;GAEf,SAAS,MAAM;GACf,aAAa,MAAM;GAED;GAClB,cAAc;GAEd,MAAM;GAEN,UAAU,MAAM;GAChB,UAAU,MAAM;GAEhB,gBAAgB,MAAM;GACtB,gBAAgB,MAAM;GAEtB,WAAW,MAAM;GACjB,WAAW,MAAM;GAEjB,QAAQ,MAAM;GACd,eAAe,MAAM;GAER;GAEI;GAClB,CAAC;AAEF,SAAO,KAAK,aAAa,aAAa,6CAA6C;AACnF,MAAI,MAAM,sBACR,QAAO,KACL,kFACD;AAGH,MAAI,gBAAgB,SAAS,EAC3B,QAAO,KAAK,4CAA4C,gBAAgB,KAAK,IAAI,GAAG;GAEtF;AAEF,QAAO"}
@@ -1,31 +1,31 @@
1
- import { AddressesFlags, ArchFlag, AuthFlags, GlobalFlags, ImageFlag, LicenseFlags, MinioPresignHostFlag, MountFlag, S3AddressesFlags, StorageFlag, VersionFlag } from "../../../../cmd-opts.js";
1
+ import { AddressesOptions, ArchOptions, AuthOptions, GlobalOptions, ImageOptions, LicenseOptions, MinioPresignHostOptions, MountOptions, S3AddressesOptions, StorageOptions, VersionOptions, argDefs } from "../../../../cmd-opts.js";
2
2
  import { createLogger } from "../../../../util.js";
3
3
  import state_default from "../../../../state.js";
4
4
  import Core from "../../../../core.js";
5
5
  import { ArgParser } from "../arg-parser.js";
6
- import { Args, Command } from "@oclif/core";
6
+ import { Command } from "commander";
7
7
  import path from "node:path";
8
8
  //#region src/commands/svc/create/docker/s3.ts
9
- var S3 = class S3 extends Command {
10
- static description = "Run Platforma Backend service as docker container on current host with MinIO as local S3 storage";
11
- static examples = ["<%= config.bin %> <%= command.id %>"];
12
- static flags = {
13
- ...GlobalFlags,
14
- ...AddressesFlags,
15
- ...S3AddressesFlags,
16
- ...ImageFlag,
17
- ...VersionFlag,
18
- ...ArchFlag,
19
- ...AuthFlags,
20
- ...LicenseFlags,
21
- ...MountFlag,
22
- ...StorageFlag,
23
- ...MinioPresignHostFlag
24
- };
25
- static args = { name: Args.string({ required: true }) };
26
- async run() {
27
- const parser = new ArgParser(S3.flags);
28
- const parsed = parser.parse(this.argv);
9
+ const optionGroups = () => [
10
+ GlobalOptions(),
11
+ AddressesOptions(),
12
+ S3AddressesOptions(),
13
+ ImageOptions(),
14
+ VersionOptions(),
15
+ ArchOptions(),
16
+ AuthOptions(),
17
+ LicenseOptions(),
18
+ MountOptions(),
19
+ StorageOptions(),
20
+ MinioPresignHostOptions()
21
+ ];
22
+ function svcCreateDockerS3Command() {
23
+ const cmd = new Command("s3").description("Run Platforma Backend service as docker container on current host with MinIO as local S3 storage").allowUnknownOption().allowExcessArguments();
24
+ cmd.argument("[args...]", "instance name followed by optional backend flags");
25
+ cmd.action(async () => {
26
+ const args = cmd.args;
27
+ const parser = new ArgParser(argDefs(...optionGroups()));
28
+ const parsed = parser.parse(args);
29
29
  const errors = parser.validateRequired(parsed.knownFlags);
30
30
  if (errors.length > 0) throw new Error(`Validation errors:\n${errors.join("\n")}`);
31
31
  const instanceName = parsed.instanceName;
@@ -69,9 +69,10 @@ var S3 = class S3 extends Command {
69
69
  logger.info(`Instance '${instanceName}' was created. To start it run 'up' command`);
70
70
  if (flags["minio-presign-host"]) logger.info(" NOTE: make sure you have 'minio' host in your hosts file as 127.0.0.1 address");
71
71
  if (backendCommands.length > 0) logger.info(`Unknown flags will be passed to backend: ${backendCommands.join(" ")}`);
72
- }
73
- };
72
+ });
73
+ return cmd;
74
+ }
74
75
  //#endregion
75
- export { S3 as default };
76
+ export { svcCreateDockerS3Command as default };
76
77
 
77
78
  //# sourceMappingURL=s3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"s3.js","names":["cmdOpts.GlobalFlags","cmdOpts.AddressesFlags","cmdOpts.S3AddressesFlags","cmdOpts.ImageFlag","cmdOpts.VersionFlag","cmdOpts.ArchFlag","cmdOpts.AuthFlags","cmdOpts.LicenseFlags","cmdOpts.MountFlag","cmdOpts.StorageFlag","cmdOpts.MinioPresignHostFlag","util.createLogger","state"],"sources":["../../../../../src/commands/svc/create/docker/s3.ts"],"sourcesContent":["import { Command, Args } from \"@oclif/core\";\nimport path from \"node:path\";\nimport type * as types from \"../../../../templates/types\";\nimport Core from \"../../../../core\";\nimport * as cmdOpts from \"../../../../cmd-opts\";\nimport * as util from \"../../../../util\";\nimport state from \"../../../../state\";\nimport { ArgParser } from \"../arg-parser\";\n\nexport default class S3 extends Command {\n static override description =\n \"Run Platforma Backend service as docker container on current host with MinIO as local S3 storage\";\n\n static override examples = [\"<%= config.bin %> <%= command.id %>\"];\n\n static override flags = {\n ...cmdOpts.GlobalFlags,\n\n ...cmdOpts.AddressesFlags,\n ...cmdOpts.S3AddressesFlags,\n ...cmdOpts.ImageFlag,\n ...cmdOpts.VersionFlag,\n ...cmdOpts.ArchFlag,\n\n ...cmdOpts.AuthFlags,\n ...cmdOpts.LicenseFlags,\n\n ...cmdOpts.MountFlag,\n ...cmdOpts.StorageFlag,\n ...cmdOpts.MinioPresignHostFlag,\n };\n\n static override args = {\n name: Args.string({ required: true }),\n };\n\n public async run(): Promise<void> {\n // Use custom parser instead of OCLIF parse\n const parser = new ArgParser(S3.flags);\n const parsed = parser.parse(this.argv);\n\n // Validate required flags\n const errors = parser.validateRequired(parsed.knownFlags);\n if (errors.length > 0) {\n throw new Error(`Validation errors:\\n${errors.join(\"\\n\")}`);\n }\n\n const instanceName = parsed.instanceName;\n const flags = parsed.knownFlags;\n\n const backendCommands = parsed.unknownFlags;\n if (flags[\"log-level\"]) {\n backendCommands.push(`--log-level=${flags[\"log-level\"]}`);\n }\n\n // Set default values for S3-specific flags\n if (!flags[\"s3-port\"]) flags[\"s3-port\"] = 9000;\n if (!flags[\"s3-console-port\"]) flags[\"s3-console-port\"] = 9001;\n\n const logger = util.createLogger(flags[\"log-level\"] || \"info\");\n const core = new Core(logger);\n core.mergeLicenseEnvs(flags);\n\n const authEnabled = flags[\"auth-enabled\"];\n const authOptions: types.authOptions | undefined = authEnabled\n ? {\n enabled: authEnabled,\n drivers: core.initAuthDriversList(flags, \".\"),\n }\n : undefined;\n\n const storage = flags.storage ? path.join(\".\", flags.storage) : state.instanceDir(instanceName);\n\n const mounts: { hostPath: string; containerPath?: string }[] = [];\n for (const p of flags.mount ?? []) {\n mounts.push({ hostPath: p });\n }\n\n const platformOverride = flags.arch ? `linux/${flags.arch}` : undefined;\n const presignHost = flags[\"minio-presign-host\"] ? \"minio\" : \"localhost\";\n\n core.createDockerS3(instanceName, storage, {\n image: flags.image,\n version: flags.version,\n\n license: flags[\"license\"],\n licenseFile: flags[\"license-file\"],\n\n platformOverride: platformOverride,\n customMounts: mounts,\n\n auth: authOptions,\n\n grpcAddr: flags[\"grpc-listen\"],\n grpcPort: flags[\"grpc-port\"],\n\n monitoringAddr: flags[\"monitoring-listen\"],\n monitoringPort: flags[\"monitoring-port\"],\n\n debugAddr: flags[\"debug-listen\"],\n debugPort: flags[\"debug-port\"],\n\n s3Port: flags[\"s3-port\"],\n s3ConsolePort: flags[\"s3-console-port\"],\n\n presignHost: presignHost,\n\n backendCommands: backendCommands,\n });\n\n logger.info(`Instance '${instanceName}' was created. To start it run 'up' command`);\n if (flags[\"minio-presign-host\"]) {\n logger.info(\n \" NOTE: make sure you have 'minio' host in your hosts file as 127.0.0.1 address\",\n );\n }\n\n // Log unknown flags that will be passed to backend\n if (backendCommands.length > 0) {\n logger.info(`Unknown flags will be passed to backend: ${backendCommands.join(\" \")}`);\n }\n }\n}\n"],"mappings":";;;;;;;;AASA,IAAqB,KAArB,MAAqB,WAAW,QAAQ;CACtC,OAAgB,cACd;CAEF,OAAgB,WAAW,CAAC,sCAAsC;CAElE,OAAgB,QAAQ;EACtB,GAAGA;EAEH,GAAGC;EACH,GAAGC;EACH,GAAGC;EACH,GAAGC;EACH,GAAGC;EAEH,GAAGC;EACH,GAAGC;EAEH,GAAGC;EACH,GAAGC;EACH,GAAGC;EACJ;CAED,OAAgB,OAAO,EACrB,MAAM,KAAK,OAAO,EAAE,UAAU,MAAM,CAAC,EACtC;CAED,MAAa,MAAqB;EAEhC,MAAM,SAAS,IAAI,UAAU,GAAG,MAAM;EACtC,MAAM,SAAS,OAAO,MAAM,KAAK,KAAK;EAGtC,MAAM,SAAS,OAAO,iBAAiB,OAAO,WAAW;AACzD,MAAI,OAAO,SAAS,EAClB,OAAM,IAAI,MAAM,uBAAuB,OAAO,KAAK,KAAK,GAAG;EAG7D,MAAM,eAAe,OAAO;EAC5B,MAAM,QAAQ,OAAO;EAErB,MAAM,kBAAkB,OAAO;AAC/B,MAAI,MAAM,aACR,iBAAgB,KAAK,eAAe,MAAM,eAAe;AAI3D,MAAI,CAAC,MAAM,WAAY,OAAM,aAAa;AAC1C,MAAI,CAAC,MAAM,mBAAoB,OAAM,qBAAqB;EAE1D,MAAM,SAASC,aAAkB,MAAM,gBAAgB,OAAO;EAC9D,MAAM,OAAO,IAAI,KAAK,OAAO;AAC7B,OAAK,iBAAiB,MAAM;EAE5B,MAAM,cAAc,MAAM;EAC1B,MAAM,cAA6C,cAC/C;GACE,SAAS;GACT,SAAS,KAAK,oBAAoB,OAAO,IAAI;GAC9C,GACD,KAAA;EAEJ,MAAM,UAAU,MAAM,UAAU,KAAK,KAAK,KAAK,MAAM,QAAQ,GAAGC,cAAM,YAAY,aAAa;EAE/F,MAAM,SAAyD,EAAE;AACjE,OAAK,MAAM,KAAK,MAAM,SAAS,EAAE,CAC/B,QAAO,KAAK,EAAE,UAAU,GAAG,CAAC;EAG9B,MAAM,mBAAmB,MAAM,OAAO,SAAS,MAAM,SAAS,KAAA;EAC9D,MAAM,cAAc,MAAM,wBAAwB,UAAU;AAE5D,OAAK,eAAe,cAAc,SAAS;GACzC,OAAO,MAAM;GACb,SAAS,MAAM;GAEf,SAAS,MAAM;GACf,aAAa,MAAM;GAED;GAClB,cAAc;GAEd,MAAM;GAEN,UAAU,MAAM;GAChB,UAAU,MAAM;GAEhB,gBAAgB,MAAM;GACtB,gBAAgB,MAAM;GAEtB,WAAW,MAAM;GACjB,WAAW,MAAM;GAEjB,QAAQ,MAAM;GACd,eAAe,MAAM;GAER;GAEI;GAClB,CAAC;AAEF,SAAO,KAAK,aAAa,aAAa,6CAA6C;AACnF,MAAI,MAAM,sBACR,QAAO,KACL,kFACD;AAIH,MAAI,gBAAgB,SAAS,EAC3B,QAAO,KAAK,4CAA4C,gBAAgB,KAAK,IAAI,GAAG"}
1
+ {"version":3,"file":"s3.js","names":["cmdOpts.GlobalOptions","cmdOpts.AddressesOptions","cmdOpts.S3AddressesOptions","cmdOpts.ImageOptions","cmdOpts.VersionOptions","cmdOpts.ArchOptions","cmdOpts.AuthOptions","cmdOpts.LicenseOptions","cmdOpts.MountOptions","cmdOpts.StorageOptions","cmdOpts.MinioPresignHostOptions","cmdOpts.argDefs","util.createLogger","state"],"sources":["../../../../../src/commands/svc/create/docker/s3.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport path from \"node:path\";\nimport type * as types from \"../../../../templates/types\";\nimport Core from \"../../../../core\";\nimport * as cmdOpts from \"../../../../cmd-opts\";\nimport * as util from \"../../../../util\";\nimport state from \"../../../../state\";\nimport { ArgParser } from \"../arg-parser\";\n\nconst optionGroups = (): Parameters<typeof cmdOpts.argDefs> => [\n cmdOpts.GlobalOptions(),\n cmdOpts.AddressesOptions(),\n cmdOpts.S3AddressesOptions(),\n cmdOpts.ImageOptions(),\n cmdOpts.VersionOptions(),\n cmdOpts.ArchOptions(),\n cmdOpts.AuthOptions(),\n cmdOpts.LicenseOptions(),\n cmdOpts.MountOptions(),\n cmdOpts.StorageOptions(),\n cmdOpts.MinioPresignHostOptions(),\n];\n\nexport default function svcCreateDockerS3Command(): Command {\n const cmd = new Command(\"s3\")\n .description(\n \"Run Platforma Backend service as docker container on current host with MinIO as local S3 storage\",\n )\n .allowUnknownOption()\n .allowExcessArguments();\n\n // Unknown flags are forwarded to the backend, so parse the raw token list\n // ourselves instead of letting commander reject them.\n cmd.argument(\"[args...]\", \"instance name followed by optional backend flags\");\n\n cmd.action(async () => {\n const args = cmd.args;\n const parser = new ArgParser(cmdOpts.argDefs(...optionGroups()));\n const parsed = parser.parse(args);\n\n const errors = parser.validateRequired(parsed.knownFlags);\n if (errors.length > 0) {\n throw new Error(`Validation errors:\\n${errors.join(\"\\n\")}`);\n }\n\n const instanceName = parsed.instanceName;\n const flags = parsed.knownFlags;\n\n const backendCommands = parsed.unknownFlags;\n if (flags[\"log-level\"]) {\n backendCommands.push(`--log-level=${flags[\"log-level\"]}`);\n }\n\n if (!flags[\"s3-port\"]) flags[\"s3-port\"] = 9000;\n if (!flags[\"s3-console-port\"]) flags[\"s3-console-port\"] = 9001;\n\n const logger = util.createLogger(flags[\"log-level\"] || \"info\");\n const core = new Core(logger);\n core.mergeLicenseEnvs(flags);\n\n const authEnabled = flags[\"auth-enabled\"];\n const authOptions: types.authOptions | undefined = authEnabled\n ? {\n enabled: authEnabled,\n drivers: core.initAuthDriversList(flags, \".\"),\n }\n : undefined;\n\n const storage = flags.storage ? path.join(\".\", flags.storage) : state.instanceDir(instanceName);\n\n const mounts: { hostPath: string; containerPath?: string }[] = [];\n for (const p of flags.mount ?? []) {\n mounts.push({ hostPath: p });\n }\n\n const platformOverride = flags.arch ? `linux/${flags.arch}` : undefined;\n const presignHost = flags[\"minio-presign-host\"] ? \"minio\" : \"localhost\";\n\n core.createDockerS3(instanceName, storage, {\n image: flags.image,\n version: flags.version,\n\n license: flags[\"license\"],\n licenseFile: flags[\"license-file\"],\n\n platformOverride: platformOverride,\n customMounts: mounts,\n\n auth: authOptions,\n\n grpcAddr: flags[\"grpc-listen\"],\n grpcPort: flags[\"grpc-port\"],\n\n monitoringAddr: flags[\"monitoring-listen\"],\n monitoringPort: flags[\"monitoring-port\"],\n\n debugAddr: flags[\"debug-listen\"],\n debugPort: flags[\"debug-port\"],\n\n s3Port: flags[\"s3-port\"],\n s3ConsolePort: flags[\"s3-console-port\"],\n\n presignHost: presignHost,\n\n backendCommands: backendCommands,\n });\n\n logger.info(`Instance '${instanceName}' was created. To start it run 'up' command`);\n if (flags[\"minio-presign-host\"]) {\n logger.info(\n \" NOTE: make sure you have 'minio' host in your hosts file as 127.0.0.1 address\",\n );\n }\n\n if (backendCommands.length > 0) {\n logger.info(`Unknown flags will be passed to backend: ${backendCommands.join(\" \")}`);\n }\n });\n\n return cmd;\n}\n"],"mappings":";;;;;;;;AASA,MAAM,qBAAyD;CAC7DA,eAAuB;CACvBC,kBAA0B;CAC1BC,oBAA4B;CAC5BC,cAAsB;CACtBC,gBAAwB;CACxBC,aAAqB;CACrBC,aAAqB;CACrBC,gBAAwB;CACxBC,cAAsB;CACtBC,gBAAwB;CACxBC,yBAAiC;CAClC;AAED,SAAwB,2BAAoC;CAC1D,MAAM,MAAM,IAAI,QAAQ,KAAK,CAC1B,YACC,mGACD,CACA,oBAAoB,CACpB,sBAAsB;AAIzB,KAAI,SAAS,aAAa,mDAAmD;AAE7E,KAAI,OAAO,YAAY;EACrB,MAAM,OAAO,IAAI;EACjB,MAAM,SAAS,IAAI,UAAUC,QAAgB,GAAG,cAAc,CAAC,CAAC;EAChE,MAAM,SAAS,OAAO,MAAM,KAAK;EAEjC,MAAM,SAAS,OAAO,iBAAiB,OAAO,WAAW;AACzD,MAAI,OAAO,SAAS,EAClB,OAAM,IAAI,MAAM,uBAAuB,OAAO,KAAK,KAAK,GAAG;EAG7D,MAAM,eAAe,OAAO;EAC5B,MAAM,QAAQ,OAAO;EAErB,MAAM,kBAAkB,OAAO;AAC/B,MAAI,MAAM,aACR,iBAAgB,KAAK,eAAe,MAAM,eAAe;AAG3D,MAAI,CAAC,MAAM,WAAY,OAAM,aAAa;AAC1C,MAAI,CAAC,MAAM,mBAAoB,OAAM,qBAAqB;EAE1D,MAAM,SAASC,aAAkB,MAAM,gBAAgB,OAAO;EAC9D,MAAM,OAAO,IAAI,KAAK,OAAO;AAC7B,OAAK,iBAAiB,MAAM;EAE5B,MAAM,cAAc,MAAM;EAC1B,MAAM,cAA6C,cAC/C;GACE,SAAS;GACT,SAAS,KAAK,oBAAoB,OAAO,IAAI;GAC9C,GACD,KAAA;EAEJ,MAAM,UAAU,MAAM,UAAU,KAAK,KAAK,KAAK,MAAM,QAAQ,GAAGC,cAAM,YAAY,aAAa;EAE/F,MAAM,SAAyD,EAAE;AACjE,OAAK,MAAM,KAAK,MAAM,SAAS,EAAE,CAC/B,QAAO,KAAK,EAAE,UAAU,GAAG,CAAC;EAG9B,MAAM,mBAAmB,MAAM,OAAO,SAAS,MAAM,SAAS,KAAA;EAC9D,MAAM,cAAc,MAAM,wBAAwB,UAAU;AAE5D,OAAK,eAAe,cAAc,SAAS;GACzC,OAAO,MAAM;GACb,SAAS,MAAM;GAEf,SAAS,MAAM;GACf,aAAa,MAAM;GAED;GAClB,cAAc;GAEd,MAAM;GAEN,UAAU,MAAM;GAChB,UAAU,MAAM;GAEhB,gBAAgB,MAAM;GACtB,gBAAgB,MAAM;GAEtB,WAAW,MAAM;GACjB,WAAW,MAAM;GAEjB,QAAQ,MAAM;GACd,eAAe,MAAM;GAER;GAEI;GAClB,CAAC;AAEF,SAAO,KAAK,aAAa,aAAa,6CAA6C;AACnF,MAAI,MAAM,sBACR,QAAO,KACL,kFACD;AAGH,MAAI,gBAAgB,SAAS,EAC3B,QAAO,KAAK,4CAA4C,gBAAgB,KAAK,IAAI,GAAG;GAEtF;AAEF,QAAO"}
@@ -4,31 +4,31 @@ const require_util = require("../../../util.cjs");
4
4
  const require_state = require("../../../state.cjs");
5
5
  const require_core = require("../../../core.cjs");
6
6
  const require_arg_parser = require("./arg-parser.cjs");
7
- let _oclif_core = require("@oclif/core");
7
+ let commander = require("commander");
8
8
  let node_path = require("node:path");
9
9
  node_path = require_runtime.__toESM(node_path);
10
10
  //#region src/commands/svc/create/docker.ts
11
- var Docker = class Docker extends _oclif_core.Command {
12
- static description = "Run Platforma Backend service as docker container on current host";
13
- static examples = ["<%= config.bin %> <%= command.id %>"];
14
- static flags = {
15
- ...require_cmd_opts.GlobalFlags,
16
- ...require_cmd_opts.AddressesFlags,
17
- ...require_cmd_opts.ImageFlag,
18
- ...require_cmd_opts.VersionFlag,
19
- ...require_cmd_opts.ArchFlag,
20
- ...require_cmd_opts.AuthFlags,
21
- ...require_cmd_opts.LicenseFlags,
22
- ...require_cmd_opts.MountFlag,
23
- ...require_cmd_opts.StorageFlag,
24
- ...require_cmd_opts.StoragePrimaryURLFlag,
25
- ...require_cmd_opts.StorageWorkPathFlag,
26
- ...require_cmd_opts.StorageLibraryURLFlag
27
- };
28
- static args = { name: _oclif_core.Args.string({ required: true }) };
29
- async run() {
30
- const parser = new require_arg_parser.ArgParser(Docker.flags);
31
- const parsed = parser.parse(this.argv);
11
+ const optionGroups = () => [
12
+ require_cmd_opts.GlobalOptions(),
13
+ require_cmd_opts.AddressesOptions(),
14
+ require_cmd_opts.ImageOptions(),
15
+ require_cmd_opts.VersionOptions(),
16
+ require_cmd_opts.ArchOptions(),
17
+ require_cmd_opts.AuthOptions(),
18
+ require_cmd_opts.LicenseOptions(),
19
+ require_cmd_opts.MountOptions(),
20
+ require_cmd_opts.StorageOptions(),
21
+ require_cmd_opts.StoragePrimaryURLOptions(),
22
+ require_cmd_opts.StorageWorkPathOptions(),
23
+ require_cmd_opts.StorageLibraryURLOptions()
24
+ ];
25
+ function svcCreateDockerCommand() {
26
+ const cmd = new commander.Command("docker").description("Run Platforma Backend service as docker container on current host").allowUnknownOption().allowExcessArguments();
27
+ cmd.argument("[args...]", "instance name followed by optional backend flags");
28
+ cmd.action(async () => {
29
+ const args = cmd.args;
30
+ const parser = new require_arg_parser.ArgParser(require_cmd_opts.argDefs(...optionGroups()));
31
+ const parsed = parser.parse(args);
32
32
  const errors = parser.validateRequired(parsed.knownFlags);
33
33
  if (errors.length > 0) throw new Error(`Validation errors:\n${errors.join("\n")}`);
34
34
  const instanceName = parsed.instanceName;
@@ -75,9 +75,10 @@ var Docker = class Docker extends _oclif_core.Command {
75
75
  });
76
76
  logger.info(`Instance '${instanceName}' was created. To start it run 'up' command`);
77
77
  if (backendCommands.length > 0) logger.info(`Unknown flags will be passed to backend: ${backendCommands.join(" ")}`);
78
- }
79
- };
78
+ });
79
+ return cmd;
80
+ }
80
81
  //#endregion
81
- exports.default = Docker;
82
+ exports.default = svcCreateDockerCommand;
82
83
 
83
84
  //# sourceMappingURL=docker.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"docker.cjs","names":["Command","Args","ArgParser","Core","path","state"],"sources":["../../../../src/commands/svc/create/docker.ts"],"sourcesContent":["import { Command, Args } from \"@oclif/core\";\nimport path from \"node:path\";\nimport type * as types from \"../../../templates/types\";\nimport Core from \"../../../core\";\nimport * as cmdOpts from \"../../../cmd-opts\";\nimport * as util from \"../../../util\";\nimport state from \"../../../state\";\nimport { ArgParser } from \"./arg-parser\";\n\nexport default class Docker extends Command {\n static override description = \"Run Platforma Backend service as docker container on current host\";\n\n static override examples = [\"<%= config.bin %> <%= command.id %>\"];\n\n static override flags = {\n ...cmdOpts.GlobalFlags,\n\n ...cmdOpts.AddressesFlags,\n ...cmdOpts.ImageFlag,\n ...cmdOpts.VersionFlag,\n ...cmdOpts.ArchFlag,\n\n ...cmdOpts.AuthFlags,\n ...cmdOpts.LicenseFlags,\n\n ...cmdOpts.MountFlag,\n ...cmdOpts.StorageFlag,\n ...cmdOpts.StoragePrimaryURLFlag,\n ...cmdOpts.StorageWorkPathFlag,\n ...cmdOpts.StorageLibraryURLFlag,\n };\n\n static override args = {\n name: Args.string({ required: true }),\n };\n\n public async run(): Promise<void> {\n // Use custom parser instead of OCLIF parse\n const parser = new ArgParser(Docker.flags);\n const parsed = parser.parse(this.argv);\n\n // Validate required flags\n const errors = parser.validateRequired(parsed.knownFlags);\n if (errors.length > 0) {\n throw new Error(`Validation errors:\\n${errors.join(\"\\n\")}`);\n }\n\n const instanceName = parsed.instanceName;\n const flags = parsed.knownFlags;\n const backendCommands = parsed.unknownFlags;\n if (flags[\"log-level\"]) {\n backendCommands.push(`--log-level=${flags[\"log-level\"]}`);\n }\n\n // Set default values for flags that weren't specified\n if (!flags[\"log-level\"]) flags[\"log-level\"] = \"info\";\n if (!flags[\"grpc-port\"]) flags[\"grpc-port\"] = 6345;\n if (!flags[\"grpc-listen\"]) flags[\"grpc-listen\"] = \"127.0.0.1:6345\";\n if (!flags[\"monitoring-port\"]) flags[\"monitoring-port\"] = 9090;\n if (!flags[\"monitoring-listen\"]) flags[\"monitoring-listen\"] = \"127.0.0.1:9090\";\n if (!flags[\"debug-port\"]) flags[\"debug-port\"] = 9091;\n if (!flags[\"debug-listen\"]) flags[\"debug-listen\"] = \"127.0.0.1:9091\";\n\n const logger = util.createLogger(flags[\"log-level\"] || \"info\");\n const core = new Core(logger);\n core.mergeLicenseEnvs(flags);\n\n const authEnabled = flags[\"auth-enabled\"];\n const authOptions: types.authOptions | undefined = authEnabled\n ? {\n enabled: authEnabled,\n drivers: core.initAuthDriversList(flags, \".\"),\n }\n : undefined;\n\n const storage = flags.storage ? path.join(\".\", flags.storage) : state.instanceDir(instanceName);\n\n const mounts: { hostPath: string; containerPath?: string }[] = [];\n for (const p of flags.mount ?? []) {\n mounts.push({ hostPath: p });\n }\n\n const platformOverride = flags.arch ? `linux/${flags.arch}` : undefined;\n\n core.createDocker(instanceName, storage, {\n primaryStorageURL: flags[\"storage-primary\"],\n workStoragePath: flags[\"storage-work\"],\n libraryStorageURL: flags[\"storage-library\"],\n\n image: flags.image,\n version: flags.version,\n\n platformOverride: platformOverride,\n customMounts: mounts,\n\n license: flags[\"license\"],\n licenseFile: flags[\"license-file\"],\n\n auth: authOptions,\n\n grpcAddr: flags[\"grpc-listen\"],\n grpcPort: flags[\"grpc-port\"],\n\n monitoringAddr: flags[\"monitoring-listen\"],\n monitoringPort: flags[\"monitoring-port\"],\n\n debugAddr: flags[\"debug-listen\"],\n debugPort: flags[\"debug-port\"],\n\n backendCommands: backendCommands,\n });\n\n logger.info(`Instance '${instanceName}' was created. To start it run 'up' command`);\n\n // Log unknown flags that will be passed to backend\n if (backendCommands.length > 0) {\n logger.info(`Unknown flags will be passed to backend: ${backendCommands.join(\" \")}`);\n }\n }\n}\n"],"mappings":";;;;;;;;;;AASA,IAAqB,SAArB,MAAqB,eAAeA,YAAAA,QAAQ;CAC1C,OAAgB,cAAc;CAE9B,OAAgB,WAAW,CAAC,sCAAsC;CAElE,OAAgB,QAAQ;EACtB,GAAA,iBAAA;EAEA,GAAA,iBAAA;EACA,GAAA,iBAAA;EACA,GAAA,iBAAA;EACA,GAAA,iBAAA;EAEA,GAAA,iBAAA;EACA,GAAA,iBAAA;EAEA,GAAA,iBAAA;EACA,GAAA,iBAAA;EACA,GAAA,iBAAA;EACA,GAAA,iBAAA;EACA,GAAA,iBAAA;EACD;CAED,OAAgB,OAAO,EACrB,MAAMC,YAAAA,KAAK,OAAO,EAAE,UAAU,MAAM,CAAC,EACtC;CAED,MAAa,MAAqB;EAEhC,MAAM,SAAS,IAAIC,mBAAAA,UAAU,OAAO,MAAM;EAC1C,MAAM,SAAS,OAAO,MAAM,KAAK,KAAK;EAGtC,MAAM,SAAS,OAAO,iBAAiB,OAAO,WAAW;AACzD,MAAI,OAAO,SAAS,EAClB,OAAM,IAAI,MAAM,uBAAuB,OAAO,KAAK,KAAK,GAAG;EAG7D,MAAM,eAAe,OAAO;EAC5B,MAAM,QAAQ,OAAO;EACrB,MAAM,kBAAkB,OAAO;AAC/B,MAAI,MAAM,aACR,iBAAgB,KAAK,eAAe,MAAM,eAAe;AAI3D,MAAI,CAAC,MAAM,aAAc,OAAM,eAAe;AAC9C,MAAI,CAAC,MAAM,aAAc,OAAM,eAAe;AAC9C,MAAI,CAAC,MAAM,eAAgB,OAAM,iBAAiB;AAClD,MAAI,CAAC,MAAM,mBAAoB,OAAM,qBAAqB;AAC1D,MAAI,CAAC,MAAM,qBAAsB,OAAM,uBAAuB;AAC9D,MAAI,CAAC,MAAM,cAAe,OAAM,gBAAgB;AAChD,MAAI,CAAC,MAAM,gBAAiB,OAAM,kBAAkB;EAEpD,MAAM,SAAA,aAAA,aAA2B,MAAM,gBAAgB,OAAO;EAC9D,MAAM,OAAO,IAAIC,aAAAA,QAAK,OAAO;AAC7B,OAAK,iBAAiB,MAAM;EAE5B,MAAM,cAAc,MAAM;EAC1B,MAAM,cAA6C,cAC/C;GACE,SAAS;GACT,SAAS,KAAK,oBAAoB,OAAO,IAAI;GAC9C,GACD,KAAA;EAEJ,MAAM,UAAU,MAAM,UAAUC,UAAAA,QAAK,KAAK,KAAK,MAAM,QAAQ,GAAGC,cAAAA,QAAM,YAAY,aAAa;EAE/F,MAAM,SAAyD,EAAE;AACjE,OAAK,MAAM,KAAK,MAAM,SAAS,EAAE,CAC/B,QAAO,KAAK,EAAE,UAAU,GAAG,CAAC;EAG9B,MAAM,mBAAmB,MAAM,OAAO,SAAS,MAAM,SAAS,KAAA;AAE9D,OAAK,aAAa,cAAc,SAAS;GACvC,mBAAmB,MAAM;GACzB,iBAAiB,MAAM;GACvB,mBAAmB,MAAM;GAEzB,OAAO,MAAM;GACb,SAAS,MAAM;GAEG;GAClB,cAAc;GAEd,SAAS,MAAM;GACf,aAAa,MAAM;GAEnB,MAAM;GAEN,UAAU,MAAM;GAChB,UAAU,MAAM;GAEhB,gBAAgB,MAAM;GACtB,gBAAgB,MAAM;GAEtB,WAAW,MAAM;GACjB,WAAW,MAAM;GAEA;GAClB,CAAC;AAEF,SAAO,KAAK,aAAa,aAAa,6CAA6C;AAGnF,MAAI,gBAAgB,SAAS,EAC3B,QAAO,KAAK,4CAA4C,gBAAgB,KAAK,IAAI,GAAG"}
1
+ {"version":3,"file":"docker.cjs","names":["Command","ArgParser","Core","path","state"],"sources":["../../../../src/commands/svc/create/docker.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport path from \"node:path\";\nimport type * as types from \"../../../templates/types\";\nimport Core from \"../../../core\";\nimport * as cmdOpts from \"../../../cmd-opts\";\nimport * as util from \"../../../util\";\nimport state from \"../../../state\";\nimport { ArgParser } from \"./arg-parser\";\n\nconst optionGroups = (): Parameters<typeof cmdOpts.argDefs> => [\n cmdOpts.GlobalOptions(),\n cmdOpts.AddressesOptions(),\n cmdOpts.ImageOptions(),\n cmdOpts.VersionOptions(),\n cmdOpts.ArchOptions(),\n cmdOpts.AuthOptions(),\n cmdOpts.LicenseOptions(),\n cmdOpts.MountOptions(),\n cmdOpts.StorageOptions(),\n cmdOpts.StoragePrimaryURLOptions(),\n cmdOpts.StorageWorkPathOptions(),\n cmdOpts.StorageLibraryURLOptions(),\n];\n\nexport default function svcCreateDockerCommand(): Command {\n const cmd = new Command(\"docker\")\n .description(\"Run Platforma Backend service as docker container on current host\")\n .allowUnknownOption()\n .allowExcessArguments();\n\n // Unknown flags are forwarded to the backend, so parse the raw token list\n // ourselves instead of letting commander reject them.\n cmd.argument(\"[args...]\", \"instance name followed by optional backend flags\");\n\n cmd.action(async () => {\n const args = cmd.args;\n const parser = new ArgParser(cmdOpts.argDefs(...optionGroups()));\n const parsed = parser.parse(args);\n\n const errors = parser.validateRequired(parsed.knownFlags);\n if (errors.length > 0) {\n throw new Error(`Validation errors:\\n${errors.join(\"\\n\")}`);\n }\n\n const instanceName = parsed.instanceName;\n const flags = parsed.knownFlags;\n const backendCommands = parsed.unknownFlags;\n if (flags[\"log-level\"]) {\n backendCommands.push(`--log-level=${flags[\"log-level\"]}`);\n }\n\n if (!flags[\"log-level\"]) flags[\"log-level\"] = \"info\";\n if (!flags[\"grpc-port\"]) flags[\"grpc-port\"] = 6345;\n if (!flags[\"grpc-listen\"]) flags[\"grpc-listen\"] = \"127.0.0.1:6345\";\n if (!flags[\"monitoring-port\"]) flags[\"monitoring-port\"] = 9090;\n if (!flags[\"monitoring-listen\"]) flags[\"monitoring-listen\"] = \"127.0.0.1:9090\";\n if (!flags[\"debug-port\"]) flags[\"debug-port\"] = 9091;\n if (!flags[\"debug-listen\"]) flags[\"debug-listen\"] = \"127.0.0.1:9091\";\n\n const logger = util.createLogger(flags[\"log-level\"] || \"info\");\n const core = new Core(logger);\n core.mergeLicenseEnvs(flags);\n\n const authEnabled = flags[\"auth-enabled\"];\n const authOptions: types.authOptions | undefined = authEnabled\n ? {\n enabled: authEnabled,\n drivers: core.initAuthDriversList(flags, \".\"),\n }\n : undefined;\n\n const storage = flags.storage ? path.join(\".\", flags.storage) : state.instanceDir(instanceName);\n\n const mounts: { hostPath: string; containerPath?: string }[] = [];\n for (const p of flags.mount ?? []) {\n mounts.push({ hostPath: p });\n }\n\n const platformOverride = flags.arch ? `linux/${flags.arch}` : undefined;\n\n core.createDocker(instanceName, storage, {\n primaryStorageURL: flags[\"storage-primary\"],\n workStoragePath: flags[\"storage-work\"],\n libraryStorageURL: flags[\"storage-library\"],\n\n image: flags.image,\n version: flags.version,\n\n platformOverride: platformOverride,\n customMounts: mounts,\n\n license: flags[\"license\"],\n licenseFile: flags[\"license-file\"],\n\n auth: authOptions,\n\n grpcAddr: flags[\"grpc-listen\"],\n grpcPort: flags[\"grpc-port\"],\n\n monitoringAddr: flags[\"monitoring-listen\"],\n monitoringPort: flags[\"monitoring-port\"],\n\n debugAddr: flags[\"debug-listen\"],\n debugPort: flags[\"debug-port\"],\n\n backendCommands: backendCommands,\n });\n\n logger.info(`Instance '${instanceName}' was created. To start it run 'up' command`);\n\n if (backendCommands.length > 0) {\n logger.info(`Unknown flags will be passed to backend: ${backendCommands.join(\" \")}`);\n }\n });\n\n return cmd;\n}\n"],"mappings":";;;;;;;;;;AASA,MAAM,qBAAyD;iCACtC;oCACG;gCACJ;kCACE;+BACH;+BACA;kCACG;gCACF;kCACE;4CACU;0CACF;4CACE;CACnC;AAED,SAAwB,yBAAkC;CACxD,MAAM,MAAM,IAAIA,UAAAA,QAAQ,SAAS,CAC9B,YAAY,oEAAoE,CAChF,oBAAoB,CACpB,sBAAsB;AAIzB,KAAI,SAAS,aAAa,mDAAmD;AAE7E,KAAI,OAAO,YAAY;EACrB,MAAM,OAAO,IAAI;EACjB,MAAM,SAAS,IAAIC,mBAAAA,UAAAA,iBAAAA,QAA0B,GAAG,cAAc,CAAC,CAAC;EAChE,MAAM,SAAS,OAAO,MAAM,KAAK;EAEjC,MAAM,SAAS,OAAO,iBAAiB,OAAO,WAAW;AACzD,MAAI,OAAO,SAAS,EAClB,OAAM,IAAI,MAAM,uBAAuB,OAAO,KAAK,KAAK,GAAG;EAG7D,MAAM,eAAe,OAAO;EAC5B,MAAM,QAAQ,OAAO;EACrB,MAAM,kBAAkB,OAAO;AAC/B,MAAI,MAAM,aACR,iBAAgB,KAAK,eAAe,MAAM,eAAe;AAG3D,MAAI,CAAC,MAAM,aAAc,OAAM,eAAe;AAC9C,MAAI,CAAC,MAAM,aAAc,OAAM,eAAe;AAC9C,MAAI,CAAC,MAAM,eAAgB,OAAM,iBAAiB;AAClD,MAAI,CAAC,MAAM,mBAAoB,OAAM,qBAAqB;AAC1D,MAAI,CAAC,MAAM,qBAAsB,OAAM,uBAAuB;AAC9D,MAAI,CAAC,MAAM,cAAe,OAAM,gBAAgB;AAChD,MAAI,CAAC,MAAM,gBAAiB,OAAM,kBAAkB;EAEpD,MAAM,SAAA,aAAA,aAA2B,MAAM,gBAAgB,OAAO;EAC9D,MAAM,OAAO,IAAIC,aAAAA,QAAK,OAAO;AAC7B,OAAK,iBAAiB,MAAM;EAE5B,MAAM,cAAc,MAAM;EAC1B,MAAM,cAA6C,cAC/C;GACE,SAAS;GACT,SAAS,KAAK,oBAAoB,OAAO,IAAI;GAC9C,GACD,KAAA;EAEJ,MAAM,UAAU,MAAM,UAAUC,UAAAA,QAAK,KAAK,KAAK,MAAM,QAAQ,GAAGC,cAAAA,QAAM,YAAY,aAAa;EAE/F,MAAM,SAAyD,EAAE;AACjE,OAAK,MAAM,KAAK,MAAM,SAAS,EAAE,CAC/B,QAAO,KAAK,EAAE,UAAU,GAAG,CAAC;EAG9B,MAAM,mBAAmB,MAAM,OAAO,SAAS,MAAM,SAAS,KAAA;AAE9D,OAAK,aAAa,cAAc,SAAS;GACvC,mBAAmB,MAAM;GACzB,iBAAiB,MAAM;GACvB,mBAAmB,MAAM;GAEzB,OAAO,MAAM;GACb,SAAS,MAAM;GAEG;GAClB,cAAc;GAEd,SAAS,MAAM;GACf,aAAa,MAAM;GAEnB,MAAM;GAEN,UAAU,MAAM;GAChB,UAAU,MAAM;GAEhB,gBAAgB,MAAM;GACtB,gBAAgB,MAAM;GAEtB,WAAW,MAAM;GACjB,WAAW,MAAM;GAEA;GAClB,CAAC;AAEF,SAAO,KAAK,aAAa,aAAa,6CAA6C;AAEnF,MAAI,gBAAgB,SAAS,EAC3B,QAAO,KAAK,4CAA4C,gBAAgB,KAAK,IAAI,GAAG;GAEtF;AAEF,QAAO"}