@platforma-sdk/bootstrap 5.3.36 → 5.3.38

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 (78) hide show
  1. package/dist/block.cjs.map +1 -1
  2. package/dist/block.js.map +1 -1
  3. package/dist/cli.cjs +0 -1
  4. package/dist/cli.cjs.map +1 -1
  5. package/dist/cli.d.ts.map +1 -1
  6. package/dist/cli.js.map +1 -1
  7. package/dist/cmd-opts.cjs +0 -1
  8. package/dist/cmd-opts.cjs.map +1 -1
  9. package/dist/cmd-opts.js.map +1 -1
  10. package/dist/commands/create-block.cjs +0 -1
  11. package/dist/commands/create-block.cjs.map +1 -1
  12. package/dist/commands/create-block.js.map +1 -1
  13. package/dist/commands/reset.cjs +0 -1
  14. package/dist/commands/reset.cjs.map +1 -1
  15. package/dist/commands/reset.js.map +1 -1
  16. package/dist/commands/start/docker/s3.cjs.map +1 -1
  17. package/dist/commands/start/docker/s3.js.map +1 -1
  18. package/dist/commands/start/docker.cjs.map +1 -1
  19. package/dist/commands/start/docker.js.map +1 -1
  20. package/dist/commands/start/local/s3.cjs.map +1 -1
  21. package/dist/commands/start/local/s3.js.map +1 -1
  22. package/dist/commands/start/local.cjs.map +1 -1
  23. package/dist/commands/start/local.js.map +1 -1
  24. package/dist/commands/start.cjs +0 -1
  25. package/dist/commands/start.cjs.map +1 -1
  26. package/dist/commands/start.js.map +1 -1
  27. package/dist/commands/stop.cjs +0 -1
  28. package/dist/commands/stop.cjs.map +1 -1
  29. package/dist/commands/stop.js.map +1 -1
  30. package/dist/commands/svc/create/arg-parser.cjs.map +1 -1
  31. package/dist/commands/svc/create/arg-parser.js.map +1 -1
  32. package/dist/commands/svc/create/docker/s3.cjs.map +1 -1
  33. package/dist/commands/svc/create/docker/s3.js.map +1 -1
  34. package/dist/commands/svc/create/docker.cjs.map +1 -1
  35. package/dist/commands/svc/create/docker.js.map +1 -1
  36. package/dist/commands/svc/create/local/s3.cjs.map +1 -1
  37. package/dist/commands/svc/create/local/s3.js.map +1 -1
  38. package/dist/commands/svc/create/local.cjs.map +1 -1
  39. package/dist/commands/svc/create/local.js.map +1 -1
  40. package/dist/commands/svc/delete.cjs +0 -1
  41. package/dist/commands/svc/delete.cjs.map +1 -1
  42. package/dist/commands/svc/delete.js.map +1 -1
  43. package/dist/commands/svc/down.cjs +0 -1
  44. package/dist/commands/svc/down.cjs.map +1 -1
  45. package/dist/commands/svc/down.js.map +1 -1
  46. package/dist/commands/svc/list.cjs +0 -1
  47. package/dist/commands/svc/list.cjs.map +1 -1
  48. package/dist/commands/svc/list.js.map +1 -1
  49. package/dist/commands/svc/up.cjs +0 -1
  50. package/dist/commands/svc/up.cjs.map +1 -1
  51. package/dist/commands/svc/up.js.map +1 -1
  52. package/dist/core.cjs +5 -3
  53. package/dist/core.cjs.map +1 -1
  54. package/dist/core.js +5 -4
  55. package/dist/core.js.map +1 -1
  56. package/dist/package.cjs +1 -0
  57. package/dist/package.cjs.map +1 -1
  58. package/dist/package.js +1 -1
  59. package/dist/package.js.map +1 -1
  60. package/dist/platforma.cjs +6 -0
  61. package/dist/platforma.cjs.map +1 -1
  62. package/dist/platforma.js +1 -1
  63. package/dist/platforma.js.map +1 -1
  64. package/dist/run.cjs +2 -1
  65. package/dist/run.cjs.map +1 -1
  66. package/dist/run.js +1 -1
  67. package/dist/run.js.map +1 -1
  68. package/dist/state.cjs.map +1 -1
  69. package/dist/state.js.map +1 -1
  70. package/dist/templates/compose.cjs.map +1 -1
  71. package/dist/templates/compose.js.map +1 -1
  72. package/dist/templates/pl-config.cjs.map +1 -1
  73. package/dist/templates/pl-config.js.map +1 -1
  74. package/dist/templates/types.cjs.map +1 -1
  75. package/dist/templates/types.js.map +1 -1
  76. package/dist/util.cjs.map +1 -1
  77. package/dist/util.js.map +1 -1
  78. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"local.cjs","names":["Command","ArgParser","Core","path","state","os"],"sources":["../../../../src/commands/svc/create/local.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport path from \"node:path\";\nimport type { createLocalOptions } from \"../../../core\";\nimport Core from \"../../../core\";\nimport * as cmdOpts from \"../../../cmd-opts\";\nimport * as util from \"../../../util\";\nimport state from \"../../../state\";\nimport * as platforma from \"../../../platforma\";\nimport * as os from \"node:os\";\nimport type * as types from \"../../../templates/types\";\nimport { ArgParser } from \"./arg-parser\";\n\nconst optionGroups = (): Parameters<typeof cmdOpts.argDefs> => [\n cmdOpts.GlobalOptions(),\n cmdOpts.VersionOptions(),\n cmdOpts.AddressesOptions(),\n cmdOpts.PlBinaryOptions(),\n cmdOpts.PlSourcesOptions(),\n cmdOpts.ConfigOptions(),\n cmdOpts.LicenseOptions(),\n cmdOpts.StorageOptions(),\n cmdOpts.StoragePrimaryURLOptions(),\n cmdOpts.StorageWorkPathOptions(),\n cmdOpts.StorageLibraryURLOptions(),\n cmdOpts.PlLogFileOptions(),\n cmdOpts.PlWorkdirOptions(),\n cmdOpts.AuthOptions(),\n];\n\nexport default function svcCreateLocalCommand(): Command {\n const cmd = new Command(\"local\")\n .description(\n \"Run Platforma Backend service as local process on current host (no docker container)\",\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 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 createOptions: createLocalOptions = {\n sourcesPath: flags[\"pl-sources\"],\n binaryPath: flags[\"pl-binary\"],\n\n version: flags.version,\n configPath: flags.config,\n workdir: flags[\"pl-workdir\"],\n\n primaryURL: flags[\"storage-primary\"],\n libraryURL: flags[\"storage-library\"],\n\n backendCommands: backendCommands,\n\n configOptions: {\n grpc: { listen: flags[\"grpc-listen\"] },\n monitoring: { listen: flags[\"monitoring-listen\"] },\n debug: { listen: flags[\"debug-listen\"] },\n license: { value: flags[\"license\"], file: flags[\"license-file\"] },\n log: { path: flags[\"pl-log-file\"] },\n localRoot: storage,\n core: { auth: authOptions },\n storages: {\n work: { type: \"FS\", rootPath: flags[\"storage-work\"] },\n },\n\n // Backend could consume a lot of CPU power,\n // we want to keep at least a couple for UI and other apps to work.\n numCpu: Math.max(os.cpus().length - 2, 1),\n },\n };\n\n core.createLocal(instanceName, createOptions);\n\n if (createOptions.binaryPath || createOptions.sourcesPath) {\n logger.info(`Instance '${instanceName}' was created. To start it run 'up' command`);\n return;\n }\n\n platforma\n .getBinary(logger, { version: flags.version })\n .then(() =>\n logger.info(`Instance '${instanceName}' was created. To start it run 'svc up' command`),\n )\n .catch(function (err: Error) {\n logger.error(err.message);\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":"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"}
1
+ {"version":3,"file":"local.cjs","names":["Command","ArgParser","Core","path","state","os"],"sources":["../../../../src/commands/svc/create/local.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport path from \"node:path\";\nimport type { createLocalOptions } from \"../../../core\";\nimport Core from \"../../../core\";\nimport * as cmdOpts from \"../../../cmd-opts\";\nimport * as util from \"../../../util\";\nimport state from \"../../../state\";\nimport * as platforma from \"../../../platforma\";\nimport * as os from \"node:os\";\nimport type * as types from \"../../../templates/types\";\nimport { ArgParser } from \"./arg-parser\";\n\nconst optionGroups = (): Parameters<typeof cmdOpts.argDefs> => [\n cmdOpts.GlobalOptions(),\n cmdOpts.VersionOptions(),\n cmdOpts.AddressesOptions(),\n cmdOpts.PlBinaryOptions(),\n cmdOpts.PlSourcesOptions(),\n cmdOpts.ConfigOptions(),\n cmdOpts.LicenseOptions(),\n cmdOpts.StorageOptions(),\n cmdOpts.StoragePrimaryURLOptions(),\n cmdOpts.StorageWorkPathOptions(),\n cmdOpts.StorageLibraryURLOptions(),\n cmdOpts.PlLogFileOptions(),\n cmdOpts.PlWorkdirOptions(),\n cmdOpts.AuthOptions(),\n];\n\nexport default function svcCreateLocalCommand(): Command {\n const cmd = new Command(\"local\")\n .description(\n \"Run Platforma Backend service as local process on current host (no docker container)\",\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 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 createOptions: createLocalOptions = {\n sourcesPath: flags[\"pl-sources\"],\n binaryPath: flags[\"pl-binary\"],\n\n version: flags.version,\n configPath: flags.config,\n workdir: flags[\"pl-workdir\"],\n\n primaryURL: flags[\"storage-primary\"],\n libraryURL: flags[\"storage-library\"],\n\n backendCommands: backendCommands,\n\n configOptions: {\n grpc: { listen: flags[\"grpc-listen\"] },\n monitoring: { listen: flags[\"monitoring-listen\"] },\n debug: { listen: flags[\"debug-listen\"] },\n license: { value: flags[\"license\"], file: flags[\"license-file\"] },\n log: { path: flags[\"pl-log-file\"] },\n localRoot: storage,\n core: { auth: authOptions },\n storages: {\n work: { type: \"FS\", rootPath: flags[\"storage-work\"] },\n },\n\n // Backend could consume a lot of CPU power,\n // we want to keep at least a couple for UI and other apps to work.\n numCpu: Math.max(os.cpus().length - 2, 1),\n },\n };\n\n core.createLocal(instanceName, createOptions);\n\n if (createOptions.binaryPath || createOptions.sourcesPath) {\n logger.info(`Instance '${instanceName}' was created. To start it run 'up' command`);\n return;\n }\n\n platforma\n .getBinary(logger, { version: flags.version })\n .then(() =>\n logger.info(`Instance '${instanceName}' was created. To start it run 'svc up' command`),\n )\n .catch(function (err: Error) {\n logger.error(err.message);\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":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"local.js","names":["cmdOpts.GlobalOptions","cmdOpts.VersionOptions","cmdOpts.AddressesOptions","cmdOpts.PlBinaryOptions","cmdOpts.PlSourcesOptions","cmdOpts.ConfigOptions","cmdOpts.LicenseOptions","cmdOpts.StorageOptions","cmdOpts.StoragePrimaryURLOptions","cmdOpts.StorageWorkPathOptions","cmdOpts.StorageLibraryURLOptions","cmdOpts.PlLogFileOptions","cmdOpts.PlWorkdirOptions","cmdOpts.AuthOptions","cmdOpts.argDefs","util.createLogger","state","os"],"sources":["../../../../src/commands/svc/create/local.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport path from \"node:path\";\nimport type { createLocalOptions } from \"../../../core\";\nimport Core from \"../../../core\";\nimport * as cmdOpts from \"../../../cmd-opts\";\nimport * as util from \"../../../util\";\nimport state from \"../../../state\";\nimport * as platforma from \"../../../platforma\";\nimport * as os from \"node:os\";\nimport type * as types from \"../../../templates/types\";\nimport { ArgParser } from \"./arg-parser\";\n\nconst optionGroups = (): Parameters<typeof cmdOpts.argDefs> => [\n cmdOpts.GlobalOptions(),\n cmdOpts.VersionOptions(),\n cmdOpts.AddressesOptions(),\n cmdOpts.PlBinaryOptions(),\n cmdOpts.PlSourcesOptions(),\n cmdOpts.ConfigOptions(),\n cmdOpts.LicenseOptions(),\n cmdOpts.StorageOptions(),\n cmdOpts.StoragePrimaryURLOptions(),\n cmdOpts.StorageWorkPathOptions(),\n cmdOpts.StorageLibraryURLOptions(),\n cmdOpts.PlLogFileOptions(),\n cmdOpts.PlWorkdirOptions(),\n cmdOpts.AuthOptions(),\n];\n\nexport default function svcCreateLocalCommand(): Command {\n const cmd = new Command(\"local\")\n .description(\n \"Run Platforma Backend service as local process on current host (no docker container)\",\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 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 createOptions: createLocalOptions = {\n sourcesPath: flags[\"pl-sources\"],\n binaryPath: flags[\"pl-binary\"],\n\n version: flags.version,\n configPath: flags.config,\n workdir: flags[\"pl-workdir\"],\n\n primaryURL: flags[\"storage-primary\"],\n libraryURL: flags[\"storage-library\"],\n\n backendCommands: backendCommands,\n\n configOptions: {\n grpc: { listen: flags[\"grpc-listen\"] },\n monitoring: { listen: flags[\"monitoring-listen\"] },\n debug: { listen: flags[\"debug-listen\"] },\n license: { value: flags[\"license\"], file: flags[\"license-file\"] },\n log: { path: flags[\"pl-log-file\"] },\n localRoot: storage,\n core: { auth: authOptions },\n storages: {\n work: { type: \"FS\", rootPath: flags[\"storage-work\"] },\n },\n\n // Backend could consume a lot of CPU power,\n // we want to keep at least a couple for UI and other apps to work.\n numCpu: Math.max(os.cpus().length - 2, 1),\n },\n };\n\n core.createLocal(instanceName, createOptions);\n\n if (createOptions.binaryPath || createOptions.sourcesPath) {\n logger.info(`Instance '${instanceName}' was created. To start it run 'up' command`);\n return;\n }\n\n platforma\n .getBinary(logger, { version: flags.version })\n .then(() =>\n logger.info(`Instance '${instanceName}' was created. To start it run 'svc up' command`),\n )\n .catch(function (err: Error) {\n logger.error(err.message);\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":"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"}
1
+ {"version":3,"file":"local.js","names":["cmdOpts.GlobalOptions","cmdOpts.VersionOptions","cmdOpts.AddressesOptions","cmdOpts.PlBinaryOptions","cmdOpts.PlSourcesOptions","cmdOpts.ConfigOptions","cmdOpts.LicenseOptions","cmdOpts.StorageOptions","cmdOpts.StoragePrimaryURLOptions","cmdOpts.StorageWorkPathOptions","cmdOpts.StorageLibraryURLOptions","cmdOpts.PlLogFileOptions","cmdOpts.PlWorkdirOptions","cmdOpts.AuthOptions","cmdOpts.argDefs","util.createLogger","state","os"],"sources":["../../../../src/commands/svc/create/local.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport path from \"node:path\";\nimport type { createLocalOptions } from \"../../../core\";\nimport Core from \"../../../core\";\nimport * as cmdOpts from \"../../../cmd-opts\";\nimport * as util from \"../../../util\";\nimport state from \"../../../state\";\nimport * as platforma from \"../../../platforma\";\nimport * as os from \"node:os\";\nimport type * as types from \"../../../templates/types\";\nimport { ArgParser } from \"./arg-parser\";\n\nconst optionGroups = (): Parameters<typeof cmdOpts.argDefs> => [\n cmdOpts.GlobalOptions(),\n cmdOpts.VersionOptions(),\n cmdOpts.AddressesOptions(),\n cmdOpts.PlBinaryOptions(),\n cmdOpts.PlSourcesOptions(),\n cmdOpts.ConfigOptions(),\n cmdOpts.LicenseOptions(),\n cmdOpts.StorageOptions(),\n cmdOpts.StoragePrimaryURLOptions(),\n cmdOpts.StorageWorkPathOptions(),\n cmdOpts.StorageLibraryURLOptions(),\n cmdOpts.PlLogFileOptions(),\n cmdOpts.PlWorkdirOptions(),\n cmdOpts.AuthOptions(),\n];\n\nexport default function svcCreateLocalCommand(): Command {\n const cmd = new Command(\"local\")\n .description(\n \"Run Platforma Backend service as local process on current host (no docker container)\",\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 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 createOptions: createLocalOptions = {\n sourcesPath: flags[\"pl-sources\"],\n binaryPath: flags[\"pl-binary\"],\n\n version: flags.version,\n configPath: flags.config,\n workdir: flags[\"pl-workdir\"],\n\n primaryURL: flags[\"storage-primary\"],\n libraryURL: flags[\"storage-library\"],\n\n backendCommands: backendCommands,\n\n configOptions: {\n grpc: { listen: flags[\"grpc-listen\"] },\n monitoring: { listen: flags[\"monitoring-listen\"] },\n debug: { listen: flags[\"debug-listen\"] },\n license: { value: flags[\"license\"], file: flags[\"license-file\"] },\n log: { path: flags[\"pl-log-file\"] },\n localRoot: storage,\n core: { auth: authOptions },\n storages: {\n work: { type: \"FS\", rootPath: flags[\"storage-work\"] },\n },\n\n // Backend could consume a lot of CPU power,\n // we want to keep at least a couple for UI and other apps to work.\n numCpu: Math.max(os.cpus().length - 2, 1),\n },\n };\n\n core.createLocal(instanceName, createOptions);\n\n if (createOptions.binaryPath || createOptions.sourcesPath) {\n logger.info(`Instance '${instanceName}' was created. To start it run 'up' command`);\n return;\n }\n\n platforma\n .getBinary(logger, { version: flags.version })\n .then(() =>\n logger.info(`Instance '${instanceName}' was created. To start it run 'svc up' command`),\n )\n .catch(function (err: Error) {\n logger.error(err.message);\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":"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"}
@@ -1,4 +1,3 @@
1
- require("../../_virtual/_rolldown/runtime.cjs");
2
1
  const require_cmd_opts = require("../../cmd-opts.cjs");
3
2
  const require_util = require("../../util.cjs");
4
3
  const require_core = require("../../core.cjs");
@@ -1 +1 @@
1
- {"version":3,"file":"delete.cjs","names":["Command","Core"],"sources":["../../../src/commands/svc/delete.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 svcDeleteCommand(): Command {\n const cmd = new Command(\"delete\").description(\"List available instances\");\n\n cmd.argument(\"[name]\", \"instance name to remove\");\n cmdOpts.addOptions(cmd, cmdOpts.GlobalOptions());\n cmd.option(\"--all\", \"remove all known instances\");\n\n cmd.action(async (nameArg: string | undefined, 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 (o.all) {\n core.cleanupInstance();\n process.exit(0);\n }\n\n if (!nameArg) {\n logger.error(`Please, specify name of instance to be removed or set '--all' flag instead`);\n process.exit(1);\n }\n\n core.cleanupInstance(nameArg);\n });\n\n return cmd;\n}\n"],"mappings":";;;;;;AAKA,SAAwB,mBAA4B;CAClD,MAAM,MAAM,IAAIA,UAAAA,QAAQ,SAAS,CAAC,YAAY,2BAA2B;AAEzE,KAAI,SAAS,UAAU,0BAA0B;AACjD,kBAAA,WAAmB,KAAA,iBAAA,eAA4B,CAAC;AAChD,KAAI,OAAO,SAAS,6BAA6B;AAEjD,KAAI,OAAO,OAAO,SAA6B,MAAM;EACnD,MAAM,QAAA,iBAAA,QAAwB,EAAE;EAEhC,MAAM,SAAA,aAAA,aAA2B,MAAM,aAAa;EACpD,MAAM,OAAO,IAAIC,aAAAA,QAAK,OAAO;AAE7B,MAAI,EAAE,KAAK;AACT,QAAK,iBAAiB;AACtB,WAAQ,KAAK,EAAE;;AAGjB,MAAI,CAAC,SAAS;AACZ,UAAO,MAAM,6EAA6E;AAC1F,WAAQ,KAAK,EAAE;;AAGjB,OAAK,gBAAgB,QAAQ;GAC7B;AAEF,QAAO"}
1
+ {"version":3,"file":"delete.cjs","names":["Command","Core"],"sources":["../../../src/commands/svc/delete.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 svcDeleteCommand(): Command {\n const cmd = new Command(\"delete\").description(\"List available instances\");\n\n cmd.argument(\"[name]\", \"instance name to remove\");\n cmdOpts.addOptions(cmd, cmdOpts.GlobalOptions());\n cmd.option(\"--all\", \"remove all known instances\");\n\n cmd.action(async (nameArg: string | undefined, 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 (o.all) {\n core.cleanupInstance();\n process.exit(0);\n }\n\n if (!nameArg) {\n logger.error(`Please, specify name of instance to be removed or set '--all' flag instead`);\n process.exit(1);\n }\n\n core.cleanupInstance(nameArg);\n });\n\n return cmd;\n}\n"],"mappings":";;;;;AAKA,SAAwB,mBAA4B;CAClD,MAAM,MAAM,IAAIA,UAAAA,QAAQ,QAAQ,CAAC,CAAC,YAAY,0BAA0B;CAExE,IAAI,SAAS,UAAU,yBAAyB;CAChD,iBAAA,WAAmB,KAAA,iBAAA,cAA2B,CAAC;CAC/C,IAAI,OAAO,SAAS,4BAA4B;CAEhD,IAAI,OAAO,OAAO,SAA6B,MAAM;EACnD,MAAM,QAAA,iBAAA,QAAwB,CAAC;EAE/B,MAAM,SAAA,aAAA,aAA2B,MAAM,YAAY;EACnD,MAAM,OAAO,IAAIC,aAAAA,QAAK,MAAM;EAE5B,IAAI,EAAE,KAAK;GACT,KAAK,gBAAgB;GACrB,QAAQ,KAAK,CAAC;EAChB;EAEA,IAAI,CAAC,SAAS;GACZ,OAAO,MAAM,4EAA4E;GACzF,QAAQ,KAAK,CAAC;EAChB;EAEA,KAAK,gBAAgB,OAAO;CAC9B,CAAC;CAED,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"delete.js","names":["cmdOpts.GlobalOptions","cmdOpts.toFlags","util.createLogger"],"sources":["../../../src/commands/svc/delete.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 svcDeleteCommand(): Command {\n const cmd = new Command(\"delete\").description(\"List available instances\");\n\n cmd.argument(\"[name]\", \"instance name to remove\");\n cmdOpts.addOptions(cmd, cmdOpts.GlobalOptions());\n cmd.option(\"--all\", \"remove all known instances\");\n\n cmd.action(async (nameArg: string | undefined, 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 (o.all) {\n core.cleanupInstance();\n process.exit(0);\n }\n\n if (!nameArg) {\n logger.error(`Please, specify name of instance to be removed or set '--all' flag instead`);\n process.exit(1);\n }\n\n core.cleanupInstance(nameArg);\n });\n\n return cmd;\n}\n"],"mappings":";;;;;AAKA,SAAwB,mBAA4B;CAClD,MAAM,MAAM,IAAI,QAAQ,SAAS,CAAC,YAAY,2BAA2B;AAEzE,KAAI,SAAS,UAAU,0BAA0B;AACjD,YAAmB,KAAKA,eAAuB,CAAC;AAChD,KAAI,OAAO,SAAS,6BAA6B;AAEjD,KAAI,OAAO,OAAO,SAA6B,MAAM;EAGnD,MAAM,SAASE,aAFDD,QAAgB,EAAE,CAEO,aAAa;EACpD,MAAM,OAAO,IAAI,KAAK,OAAO;AAE7B,MAAI,EAAE,KAAK;AACT,QAAK,iBAAiB;AACtB,WAAQ,KAAK,EAAE;;AAGjB,MAAI,CAAC,SAAS;AACZ,UAAO,MAAM,6EAA6E;AAC1F,WAAQ,KAAK,EAAE;;AAGjB,OAAK,gBAAgB,QAAQ;GAC7B;AAEF,QAAO"}
1
+ {"version":3,"file":"delete.js","names":["cmdOpts.GlobalOptions","cmdOpts.toFlags","util.createLogger"],"sources":["../../../src/commands/svc/delete.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 svcDeleteCommand(): Command {\n const cmd = new Command(\"delete\").description(\"List available instances\");\n\n cmd.argument(\"[name]\", \"instance name to remove\");\n cmdOpts.addOptions(cmd, cmdOpts.GlobalOptions());\n cmd.option(\"--all\", \"remove all known instances\");\n\n cmd.action(async (nameArg: string | undefined, 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 (o.all) {\n core.cleanupInstance();\n process.exit(0);\n }\n\n if (!nameArg) {\n logger.error(`Please, specify name of instance to be removed or set '--all' flag instead`);\n process.exit(1);\n }\n\n core.cleanupInstance(nameArg);\n });\n\n return cmd;\n}\n"],"mappings":";;;;;AAKA,SAAwB,mBAA4B;CAClD,MAAM,MAAM,IAAI,QAAQ,QAAQ,CAAC,CAAC,YAAY,0BAA0B;CAExE,IAAI,SAAS,UAAU,yBAAyB;CAChD,WAAmB,KAAKA,cAAsB,CAAC;CAC/C,IAAI,OAAO,SAAS,4BAA4B;CAEhD,IAAI,OAAO,OAAO,SAA6B,MAAM;EAGnD,MAAM,SAASE,aAFDD,QAAgB,CAEG,CAAA,CAAM,YAAY;EACnD,MAAM,OAAO,IAAI,KAAK,MAAM;EAE5B,IAAI,EAAE,KAAK;GACT,KAAK,gBAAgB;GACrB,QAAQ,KAAK,CAAC;EAChB;EAEA,IAAI,CAAC,SAAS;GACZ,OAAO,MAAM,4EAA4E;GACzF,QAAQ,KAAK,CAAC;EAChB;EAEA,KAAK,gBAAgB,OAAO;CAC9B,CAAC;CAED,OAAO;AACT"}
@@ -1,4 +1,3 @@
1
- require("../../_virtual/_rolldown/runtime.cjs");
2
1
  const require_cmd_opts = require("../../cmd-opts.cjs");
3
2
  const require_util = require("../../util.cjs");
4
3
  const require_state = require("../../state.cjs");
@@ -1 +1 @@
1
- {"version":3,"file":"down.cjs","names":["Command","Core","state"],"sources":["../../../src/commands/svc/down.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport Core from \"../../core\";\nimport * as cmdOpts from \"../../cmd-opts\";\nimport * as util from \"../../util\";\nimport state from \"../../state\";\n\nexport default function svcDownCommand(): Command {\n const cmd = new Command(\"down\").description(\"List available instances\");\n\n cmd.argument(\"[name]\", \"instance name (defaults to the selected instance)\");\n cmdOpts.addOptions(cmd, cmdOpts.GlobalOptions());\n\n cmd.action(async (nameArg: string | undefined, o) => {\n const flags = cmdOpts.toFlags(o);\n\n const logger = util.createLogger(flags[\"log-level\"]);\n const core = new Core(logger);\n\n const name = nameArg ?? state.currentInstanceName;\n\n if (!name) {\n logger.info(`no pl service instance selected. No service was stopped`);\n process.exit(0);\n }\n\n core.stopInstance(state.getInstanceInfo(name));\n });\n\n return cmd;\n}\n"],"mappings":";;;;;;;AAMA,SAAwB,iBAA0B;CAChD,MAAM,MAAM,IAAIA,UAAAA,QAAQ,OAAO,CAAC,YAAY,2BAA2B;AAEvE,KAAI,SAAS,UAAU,oDAAoD;AAC3E,kBAAA,WAAmB,KAAA,iBAAA,eAA4B,CAAC;AAEhD,KAAI,OAAO,OAAO,SAA6B,MAAM;EACnD,MAAM,QAAA,iBAAA,QAAwB,EAAE;EAEhC,MAAM,SAAA,aAAA,aAA2B,MAAM,aAAa;EACpD,MAAM,OAAO,IAAIC,aAAAA,QAAK,OAAO;EAE7B,MAAM,OAAO,WAAWC,cAAAA,QAAM;AAE9B,MAAI,CAAC,MAAM;AACT,UAAO,KAAK,0DAA0D;AACtE,WAAQ,KAAK,EAAE;;AAGjB,OAAK,aAAaA,cAAAA,QAAM,gBAAgB,KAAK,CAAC;GAC9C;AAEF,QAAO"}
1
+ {"version":3,"file":"down.cjs","names":["Command","Core","state"],"sources":["../../../src/commands/svc/down.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport Core from \"../../core\";\nimport * as cmdOpts from \"../../cmd-opts\";\nimport * as util from \"../../util\";\nimport state from \"../../state\";\n\nexport default function svcDownCommand(): Command {\n const cmd = new Command(\"down\").description(\"List available instances\");\n\n cmd.argument(\"[name]\", \"instance name (defaults to the selected instance)\");\n cmdOpts.addOptions(cmd, cmdOpts.GlobalOptions());\n\n cmd.action(async (nameArg: string | undefined, o) => {\n const flags = cmdOpts.toFlags(o);\n\n const logger = util.createLogger(flags[\"log-level\"]);\n const core = new Core(logger);\n\n const name = nameArg ?? state.currentInstanceName;\n\n if (!name) {\n logger.info(`no pl service instance selected. No service was stopped`);\n process.exit(0);\n }\n\n core.stopInstance(state.getInstanceInfo(name));\n });\n\n return cmd;\n}\n"],"mappings":";;;;;;AAMA,SAAwB,iBAA0B;CAChD,MAAM,MAAM,IAAIA,UAAAA,QAAQ,MAAM,CAAC,CAAC,YAAY,0BAA0B;CAEtE,IAAI,SAAS,UAAU,mDAAmD;CAC1E,iBAAA,WAAmB,KAAA,iBAAA,cAA2B,CAAC;CAE/C,IAAI,OAAO,OAAO,SAA6B,MAAM;EACnD,MAAM,QAAA,iBAAA,QAAwB,CAAC;EAE/B,MAAM,SAAA,aAAA,aAA2B,MAAM,YAAY;EACnD,MAAM,OAAO,IAAIC,aAAAA,QAAK,MAAM;EAE5B,MAAM,OAAO,WAAWC,cAAAA,QAAM;EAE9B,IAAI,CAAC,MAAM;GACT,OAAO,KAAK,yDAAyD;GACrE,QAAQ,KAAK,CAAC;EAChB;EAEA,KAAK,aAAaA,cAAAA,QAAM,gBAAgB,IAAI,CAAC;CAC/C,CAAC;CAED,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"down.js","names":["cmdOpts.GlobalOptions","cmdOpts.toFlags","util.createLogger","state"],"sources":["../../../src/commands/svc/down.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport Core from \"../../core\";\nimport * as cmdOpts from \"../../cmd-opts\";\nimport * as util from \"../../util\";\nimport state from \"../../state\";\n\nexport default function svcDownCommand(): Command {\n const cmd = new Command(\"down\").description(\"List available instances\");\n\n cmd.argument(\"[name]\", \"instance name (defaults to the selected instance)\");\n cmdOpts.addOptions(cmd, cmdOpts.GlobalOptions());\n\n cmd.action(async (nameArg: string | undefined, o) => {\n const flags = cmdOpts.toFlags(o);\n\n const logger = util.createLogger(flags[\"log-level\"]);\n const core = new Core(logger);\n\n const name = nameArg ?? state.currentInstanceName;\n\n if (!name) {\n logger.info(`no pl service instance selected. No service was stopped`);\n process.exit(0);\n }\n\n core.stopInstance(state.getInstanceInfo(name));\n });\n\n return cmd;\n}\n"],"mappings":";;;;;;AAMA,SAAwB,iBAA0B;CAChD,MAAM,MAAM,IAAI,QAAQ,OAAO,CAAC,YAAY,2BAA2B;AAEvE,KAAI,SAAS,UAAU,oDAAoD;AAC3E,YAAmB,KAAKA,eAAuB,CAAC;AAEhD,KAAI,OAAO,OAAO,SAA6B,MAAM;EAGnD,MAAM,SAASE,aAFDD,QAAgB,EAAE,CAEO,aAAa;EACpD,MAAM,OAAO,IAAI,KAAK,OAAO;EAE7B,MAAM,OAAO,WAAWE,cAAM;AAE9B,MAAI,CAAC,MAAM;AACT,UAAO,KAAK,0DAA0D;AACtE,WAAQ,KAAK,EAAE;;AAGjB,OAAK,aAAaA,cAAM,gBAAgB,KAAK,CAAC;GAC9C;AAEF,QAAO"}
1
+ {"version":3,"file":"down.js","names":["cmdOpts.GlobalOptions","cmdOpts.toFlags","util.createLogger","state"],"sources":["../../../src/commands/svc/down.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport Core from \"../../core\";\nimport * as cmdOpts from \"../../cmd-opts\";\nimport * as util from \"../../util\";\nimport state from \"../../state\";\n\nexport default function svcDownCommand(): Command {\n const cmd = new Command(\"down\").description(\"List available instances\");\n\n cmd.argument(\"[name]\", \"instance name (defaults to the selected instance)\");\n cmdOpts.addOptions(cmd, cmdOpts.GlobalOptions());\n\n cmd.action(async (nameArg: string | undefined, o) => {\n const flags = cmdOpts.toFlags(o);\n\n const logger = util.createLogger(flags[\"log-level\"]);\n const core = new Core(logger);\n\n const name = nameArg ?? state.currentInstanceName;\n\n if (!name) {\n logger.info(`no pl service instance selected. No service was stopped`);\n process.exit(0);\n }\n\n core.stopInstance(state.getInstanceInfo(name));\n });\n\n return cmd;\n}\n"],"mappings":";;;;;;AAMA,SAAwB,iBAA0B;CAChD,MAAM,MAAM,IAAI,QAAQ,MAAM,CAAC,CAAC,YAAY,0BAA0B;CAEtE,IAAI,SAAS,UAAU,mDAAmD;CAC1E,WAAmB,KAAKA,cAAsB,CAAC;CAE/C,IAAI,OAAO,OAAO,SAA6B,MAAM;EAGnD,MAAM,SAASE,aAFDD,QAAgB,CAEG,CAAA,CAAM,YAAY;EACnD,MAAM,OAAO,IAAI,KAAK,MAAM;EAE5B,MAAM,OAAO,WAAWE,cAAM;EAE9B,IAAI,CAAC,MAAM;GACT,OAAO,KAAK,yDAAyD;GACrE,QAAQ,KAAK,CAAC;EAChB;EAEA,KAAK,aAAaA,cAAM,gBAAgB,IAAI,CAAC;CAC/C,CAAC;CAED,OAAO;AACT"}
@@ -1,4 +1,3 @@
1
- require("../../_virtual/_rolldown/runtime.cjs");
2
1
  const require_state = require("../../state.cjs");
3
2
  let commander = require("commander");
4
3
  //#region src/commands/svc/list.ts
@@ -1 +1 @@
1
- {"version":3,"file":"list.cjs","names":["Command","state"],"sources":["../../../src/commands/svc/list.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport state from \"../../state\";\n\nexport default function svcListCommand(): Command {\n const cmd = new Command(\"list\").description(\"List available instances\");\n\n cmd.action(() => {\n const instances = state.instanceList;\n const currentInstance = state.currentInstanceName;\n\n for (const iName of instances) {\n const statusReport = [];\n const instance = state.getInstanceInfo(iName);\n if (state.isInstanceActive(instance)) statusReport.push(\"status:up\");\n statusReport.push(`type:${instance.type}`);\n\n if (iName === currentInstance) {\n console.log(` * ${iName} (${statusReport.join(\", \")})`);\n } else {\n console.log(` ${iName} (${statusReport.join(\", \")})`);\n }\n }\n });\n\n return cmd;\n}\n"],"mappings":";;;;AAGA,SAAwB,iBAA0B;CAChD,MAAM,MAAM,IAAIA,UAAAA,QAAQ,OAAO,CAAC,YAAY,2BAA2B;AAEvE,KAAI,aAAa;EACf,MAAM,YAAYC,cAAAA,QAAM;EACxB,MAAM,kBAAkBA,cAAAA,QAAM;AAE9B,OAAK,MAAM,SAAS,WAAW;GAC7B,MAAM,eAAe,EAAE;GACvB,MAAM,WAAWA,cAAAA,QAAM,gBAAgB,MAAM;AAC7C,OAAIA,cAAAA,QAAM,iBAAiB,SAAS,CAAE,cAAa,KAAK,YAAY;AACpE,gBAAa,KAAK,QAAQ,SAAS,OAAO;AAE1C,OAAI,UAAU,gBACZ,SAAQ,IAAI,MAAM,MAAM,IAAI,aAAa,KAAK,KAAK,CAAC,GAAG;OAEvD,SAAQ,IAAI,MAAM,MAAM,IAAI,aAAa,KAAK,KAAK,CAAC,GAAG;;GAG3D;AAEF,QAAO"}
1
+ {"version":3,"file":"list.cjs","names":["Command","state"],"sources":["../../../src/commands/svc/list.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport state from \"../../state\";\n\nexport default function svcListCommand(): Command {\n const cmd = new Command(\"list\").description(\"List available instances\");\n\n cmd.action(() => {\n const instances = state.instanceList;\n const currentInstance = state.currentInstanceName;\n\n for (const iName of instances) {\n const statusReport = [];\n const instance = state.getInstanceInfo(iName);\n if (state.isInstanceActive(instance)) statusReport.push(\"status:up\");\n statusReport.push(`type:${instance.type}`);\n\n if (iName === currentInstance) {\n console.log(` * ${iName} (${statusReport.join(\", \")})`);\n } else {\n console.log(` ${iName} (${statusReport.join(\", \")})`);\n }\n }\n });\n\n return cmd;\n}\n"],"mappings":";;;AAGA,SAAwB,iBAA0B;CAChD,MAAM,MAAM,IAAIA,UAAAA,QAAQ,MAAM,CAAC,CAAC,YAAY,0BAA0B;CAEtE,IAAI,aAAa;EACf,MAAM,YAAYC,cAAAA,QAAM;EACxB,MAAM,kBAAkBA,cAAAA,QAAM;EAE9B,KAAK,MAAM,SAAS,WAAW;GAC7B,MAAM,eAAe,CAAC;GACtB,MAAM,WAAWA,cAAAA,QAAM,gBAAgB,KAAK;GAC5C,IAAIA,cAAAA,QAAM,iBAAiB,QAAQ,GAAG,aAAa,KAAK,WAAW;GACnE,aAAa,KAAK,QAAQ,SAAS,MAAM;GAEzC,IAAI,UAAU,iBACZ,QAAQ,IAAI,MAAM,MAAM,IAAI,aAAa,KAAK,IAAI,EAAE,EAAE;QAEtD,QAAQ,IAAI,MAAM,MAAM,IAAI,aAAa,KAAK,IAAI,EAAE,EAAE;EAE1D;CACF,CAAC;CAED,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","names":["state"],"sources":["../../../src/commands/svc/list.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport state from \"../../state\";\n\nexport default function svcListCommand(): Command {\n const cmd = new Command(\"list\").description(\"List available instances\");\n\n cmd.action(() => {\n const instances = state.instanceList;\n const currentInstance = state.currentInstanceName;\n\n for (const iName of instances) {\n const statusReport = [];\n const instance = state.getInstanceInfo(iName);\n if (state.isInstanceActive(instance)) statusReport.push(\"status:up\");\n statusReport.push(`type:${instance.type}`);\n\n if (iName === currentInstance) {\n console.log(` * ${iName} (${statusReport.join(\", \")})`);\n } else {\n console.log(` ${iName} (${statusReport.join(\", \")})`);\n }\n }\n });\n\n return cmd;\n}\n"],"mappings":";;;AAGA,SAAwB,iBAA0B;CAChD,MAAM,MAAM,IAAI,QAAQ,OAAO,CAAC,YAAY,2BAA2B;AAEvE,KAAI,aAAa;EACf,MAAM,YAAYA,cAAM;EACxB,MAAM,kBAAkBA,cAAM;AAE9B,OAAK,MAAM,SAAS,WAAW;GAC7B,MAAM,eAAe,EAAE;GACvB,MAAM,WAAWA,cAAM,gBAAgB,MAAM;AAC7C,OAAIA,cAAM,iBAAiB,SAAS,CAAE,cAAa,KAAK,YAAY;AACpE,gBAAa,KAAK,QAAQ,SAAS,OAAO;AAE1C,OAAI,UAAU,gBACZ,SAAQ,IAAI,MAAM,MAAM,IAAI,aAAa,KAAK,KAAK,CAAC,GAAG;OAEvD,SAAQ,IAAI,MAAM,MAAM,IAAI,aAAa,KAAK,KAAK,CAAC,GAAG;;GAG3D;AAEF,QAAO"}
1
+ {"version":3,"file":"list.js","names":["state"],"sources":["../../../src/commands/svc/list.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport state from \"../../state\";\n\nexport default function svcListCommand(): Command {\n const cmd = new Command(\"list\").description(\"List available instances\");\n\n cmd.action(() => {\n const instances = state.instanceList;\n const currentInstance = state.currentInstanceName;\n\n for (const iName of instances) {\n const statusReport = [];\n const instance = state.getInstanceInfo(iName);\n if (state.isInstanceActive(instance)) statusReport.push(\"status:up\");\n statusReport.push(`type:${instance.type}`);\n\n if (iName === currentInstance) {\n console.log(` * ${iName} (${statusReport.join(\", \")})`);\n } else {\n console.log(` ${iName} (${statusReport.join(\", \")})`);\n }\n }\n });\n\n return cmd;\n}\n"],"mappings":";;;AAGA,SAAwB,iBAA0B;CAChD,MAAM,MAAM,IAAI,QAAQ,MAAM,CAAC,CAAC,YAAY,0BAA0B;CAEtE,IAAI,aAAa;EACf,MAAM,YAAYA,cAAM;EACxB,MAAM,kBAAkBA,cAAM;EAE9B,KAAK,MAAM,SAAS,WAAW;GAC7B,MAAM,eAAe,CAAC;GACtB,MAAM,WAAWA,cAAM,gBAAgB,KAAK;GAC5C,IAAIA,cAAM,iBAAiB,QAAQ,GAAG,aAAa,KAAK,WAAW;GACnE,aAAa,KAAK,QAAQ,SAAS,MAAM;GAEzC,IAAI,UAAU,iBACZ,QAAQ,IAAI,MAAM,MAAM,IAAI,aAAa,KAAK,IAAI,EAAE,EAAE;QAEtD,QAAQ,IAAI,MAAM,MAAM,IAAI,aAAa,KAAK,IAAI,EAAE,EAAE;EAE1D;CACF,CAAC;CAED,OAAO;AACT"}
@@ -1,4 +1,3 @@
1
- require("../../_virtual/_rolldown/runtime.cjs");
2
1
  const require_cmd_opts = require("../../cmd-opts.cjs");
3
2
  const require_util = require("../../util.cjs");
4
3
  const require_state = require("../../state.cjs");
@@ -1 +1 @@
1
- {"version":3,"file":"up.cjs","names":["Command","Core","state"],"sources":["../../../src/commands/svc/up.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport Core from \"../../core\";\nimport * as cmdOpts from \"../../cmd-opts\";\nimport * as util from \"../../util\";\nimport state from \"../../state\";\n\nexport default function svcUpCommand(): Command {\n const cmd = new Command(\"up\").description(\"List available instances\");\n\n cmd.argument(\"[name]\", \"instance name (defaults to the selected instance)\");\n cmdOpts.addOptions(cmd, cmdOpts.GlobalOptions());\n\n cmd.action(async (nameArg: string | undefined, o) => {\n const flags = cmdOpts.toFlags(o);\n\n const logger = util.createLogger(flags[\"log-level\"]);\n const core = new Core(logger);\n\n const name = nameArg ?? state.currentInstanceName;\n\n if (!name) {\n logger.error(\n `no pl service instance is selected. Select instance with 'select' command or provide name to 'up'`,\n );\n process.exit(1);\n }\n\n const children = core.switchInstance(state.getInstanceInfo(name));\n\n const results: Promise<void>[] = [];\n for (const child of children) {\n results.push(\n new Promise((resolve, reject) => {\n child.on(\"close\", resolve);\n child.on(\"error\", reject);\n }),\n );\n }\n\n await Promise.all(results);\n });\n\n return cmd;\n}\n"],"mappings":";;;;;;;AAMA,SAAwB,eAAwB;CAC9C,MAAM,MAAM,IAAIA,UAAAA,QAAQ,KAAK,CAAC,YAAY,2BAA2B;AAErE,KAAI,SAAS,UAAU,oDAAoD;AAC3E,kBAAA,WAAmB,KAAA,iBAAA,eAA4B,CAAC;AAEhD,KAAI,OAAO,OAAO,SAA6B,MAAM;EACnD,MAAM,QAAA,iBAAA,QAAwB,EAAE;EAEhC,MAAM,SAAA,aAAA,aAA2B,MAAM,aAAa;EACpD,MAAM,OAAO,IAAIC,aAAAA,QAAK,OAAO;EAE7B,MAAM,OAAO,WAAWC,cAAAA,QAAM;AAE9B,MAAI,CAAC,MAAM;AACT,UAAO,MACL,oGACD;AACD,WAAQ,KAAK,EAAE;;EAGjB,MAAM,WAAW,KAAK,eAAeA,cAAAA,QAAM,gBAAgB,KAAK,CAAC;EAEjE,MAAM,UAA2B,EAAE;AACnC,OAAK,MAAM,SAAS,SAClB,SAAQ,KACN,IAAI,SAAS,SAAS,WAAW;AAC/B,SAAM,GAAG,SAAS,QAAQ;AAC1B,SAAM,GAAG,SAAS,OAAO;IACzB,CACH;AAGH,QAAM,QAAQ,IAAI,QAAQ;GAC1B;AAEF,QAAO"}
1
+ {"version":3,"file":"up.cjs","names":["Command","Core","state"],"sources":["../../../src/commands/svc/up.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport Core from \"../../core\";\nimport * as cmdOpts from \"../../cmd-opts\";\nimport * as util from \"../../util\";\nimport state from \"../../state\";\n\nexport default function svcUpCommand(): Command {\n const cmd = new Command(\"up\").description(\"List available instances\");\n\n cmd.argument(\"[name]\", \"instance name (defaults to the selected instance)\");\n cmdOpts.addOptions(cmd, cmdOpts.GlobalOptions());\n\n cmd.action(async (nameArg: string | undefined, o) => {\n const flags = cmdOpts.toFlags(o);\n\n const logger = util.createLogger(flags[\"log-level\"]);\n const core = new Core(logger);\n\n const name = nameArg ?? state.currentInstanceName;\n\n if (!name) {\n logger.error(\n `no pl service instance is selected. Select instance with 'select' command or provide name to 'up'`,\n );\n process.exit(1);\n }\n\n const children = core.switchInstance(state.getInstanceInfo(name));\n\n const results: Promise<void>[] = [];\n for (const child of children) {\n results.push(\n new Promise((resolve, reject) => {\n child.on(\"close\", resolve);\n child.on(\"error\", reject);\n }),\n );\n }\n\n await Promise.all(results);\n });\n\n return cmd;\n}\n"],"mappings":";;;;;;AAMA,SAAwB,eAAwB;CAC9C,MAAM,MAAM,IAAIA,UAAAA,QAAQ,IAAI,CAAC,CAAC,YAAY,0BAA0B;CAEpE,IAAI,SAAS,UAAU,mDAAmD;CAC1E,iBAAA,WAAmB,KAAA,iBAAA,cAA2B,CAAC;CAE/C,IAAI,OAAO,OAAO,SAA6B,MAAM;EACnD,MAAM,QAAA,iBAAA,QAAwB,CAAC;EAE/B,MAAM,SAAA,aAAA,aAA2B,MAAM,YAAY;EACnD,MAAM,OAAO,IAAIC,aAAAA,QAAK,MAAM;EAE5B,MAAM,OAAO,WAAWC,cAAAA,QAAM;EAE9B,IAAI,CAAC,MAAM;GACT,OAAO,MACL,mGACF;GACA,QAAQ,KAAK,CAAC;EAChB;EAEA,MAAM,WAAW,KAAK,eAAeA,cAAAA,QAAM,gBAAgB,IAAI,CAAC;EAEhE,MAAM,UAA2B,CAAC;EAClC,KAAK,MAAM,SAAS,UAClB,QAAQ,KACN,IAAI,SAAS,SAAS,WAAW;GAC/B,MAAM,GAAG,SAAS,OAAO;GACzB,MAAM,GAAG,SAAS,MAAM;EAC1B,CAAC,CACH;EAGF,MAAM,QAAQ,IAAI,OAAO;CAC3B,CAAC;CAED,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"up.js","names":["cmdOpts.GlobalOptions","cmdOpts.toFlags","util.createLogger","state"],"sources":["../../../src/commands/svc/up.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport Core from \"../../core\";\nimport * as cmdOpts from \"../../cmd-opts\";\nimport * as util from \"../../util\";\nimport state from \"../../state\";\n\nexport default function svcUpCommand(): Command {\n const cmd = new Command(\"up\").description(\"List available instances\");\n\n cmd.argument(\"[name]\", \"instance name (defaults to the selected instance)\");\n cmdOpts.addOptions(cmd, cmdOpts.GlobalOptions());\n\n cmd.action(async (nameArg: string | undefined, o) => {\n const flags = cmdOpts.toFlags(o);\n\n const logger = util.createLogger(flags[\"log-level\"]);\n const core = new Core(logger);\n\n const name = nameArg ?? state.currentInstanceName;\n\n if (!name) {\n logger.error(\n `no pl service instance is selected. Select instance with 'select' command or provide name to 'up'`,\n );\n process.exit(1);\n }\n\n const children = core.switchInstance(state.getInstanceInfo(name));\n\n const results: Promise<void>[] = [];\n for (const child of children) {\n results.push(\n new Promise((resolve, reject) => {\n child.on(\"close\", resolve);\n child.on(\"error\", reject);\n }),\n );\n }\n\n await Promise.all(results);\n });\n\n return cmd;\n}\n"],"mappings":";;;;;;AAMA,SAAwB,eAAwB;CAC9C,MAAM,MAAM,IAAI,QAAQ,KAAK,CAAC,YAAY,2BAA2B;AAErE,KAAI,SAAS,UAAU,oDAAoD;AAC3E,YAAmB,KAAKA,eAAuB,CAAC;AAEhD,KAAI,OAAO,OAAO,SAA6B,MAAM;EAGnD,MAAM,SAASE,aAFDD,QAAgB,EAAE,CAEO,aAAa;EACpD,MAAM,OAAO,IAAI,KAAK,OAAO;EAE7B,MAAM,OAAO,WAAWE,cAAM;AAE9B,MAAI,CAAC,MAAM;AACT,UAAO,MACL,oGACD;AACD,WAAQ,KAAK,EAAE;;EAGjB,MAAM,WAAW,KAAK,eAAeA,cAAM,gBAAgB,KAAK,CAAC;EAEjE,MAAM,UAA2B,EAAE;AACnC,OAAK,MAAM,SAAS,SAClB,SAAQ,KACN,IAAI,SAAS,SAAS,WAAW;AAC/B,SAAM,GAAG,SAAS,QAAQ;AAC1B,SAAM,GAAG,SAAS,OAAO;IACzB,CACH;AAGH,QAAM,QAAQ,IAAI,QAAQ;GAC1B;AAEF,QAAO"}
1
+ {"version":3,"file":"up.js","names":["cmdOpts.GlobalOptions","cmdOpts.toFlags","util.createLogger","state"],"sources":["../../../src/commands/svc/up.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport Core from \"../../core\";\nimport * as cmdOpts from \"../../cmd-opts\";\nimport * as util from \"../../util\";\nimport state from \"../../state\";\n\nexport default function svcUpCommand(): Command {\n const cmd = new Command(\"up\").description(\"List available instances\");\n\n cmd.argument(\"[name]\", \"instance name (defaults to the selected instance)\");\n cmdOpts.addOptions(cmd, cmdOpts.GlobalOptions());\n\n cmd.action(async (nameArg: string | undefined, o) => {\n const flags = cmdOpts.toFlags(o);\n\n const logger = util.createLogger(flags[\"log-level\"]);\n const core = new Core(logger);\n\n const name = nameArg ?? state.currentInstanceName;\n\n if (!name) {\n logger.error(\n `no pl service instance is selected. Select instance with 'select' command or provide name to 'up'`,\n );\n process.exit(1);\n }\n\n const children = core.switchInstance(state.getInstanceInfo(name));\n\n const results: Promise<void>[] = [];\n for (const child of children) {\n results.push(\n new Promise((resolve, reject) => {\n child.on(\"close\", resolve);\n child.on(\"error\", reject);\n }),\n );\n }\n\n await Promise.all(results);\n });\n\n return cmd;\n}\n"],"mappings":";;;;;;AAMA,SAAwB,eAAwB;CAC9C,MAAM,MAAM,IAAI,QAAQ,IAAI,CAAC,CAAC,YAAY,0BAA0B;CAEpE,IAAI,SAAS,UAAU,mDAAmD;CAC1E,WAAmB,KAAKA,cAAsB,CAAC;CAE/C,IAAI,OAAO,OAAO,SAA6B,MAAM;EAGnD,MAAM,SAASE,aAFDD,QAAgB,CAEG,CAAA,CAAM,YAAY;EACnD,MAAM,OAAO,IAAI,KAAK,MAAM;EAE5B,MAAM,OAAO,WAAWE,cAAM;EAE9B,IAAI,CAAC,MAAM;GACT,OAAO,MACL,mGACF;GACA,QAAQ,KAAK,CAAC;EAChB;EAEA,MAAM,WAAW,KAAK,eAAeA,cAAM,gBAAgB,IAAI,CAAC;EAEhE,MAAM,UAA2B,CAAC;EAClC,KAAK,MAAM,SAAS,UAClB,QAAQ,KACN,IAAI,SAAS,SAAS,WAAW;GAC/B,MAAM,GAAG,SAAS,OAAO;GACzB,MAAM,GAAG,SAAS,MAAM;EAC1B,CAAC,CACH;EAGF,MAAM,QAAQ,IAAI,OAAO;CAC3B,CAAC;CAED,OAAO;AACT"}
package/dist/core.cjs CHANGED
@@ -14,6 +14,7 @@ let node_path = require("node:path");
14
14
  node_path = require_runtime.__toESM(node_path);
15
15
  //#region src/core.ts
16
16
  var Core = class {
17
+ logger;
17
18
  constructor(logger) {
18
19
  this.logger = logger;
19
20
  }
@@ -190,7 +191,7 @@ var Core = class {
190
191
  this.logger.debug(" creating docker compose for minio service...");
191
192
  const composeSrc = require_package.assets("compose-backend.yaml");
192
193
  const composeMinio = require_state.default.instanceDir(instanceName, "compose-minio.yaml");
193
- require_compose.render(composeSrc, composeMinio, `pl-${instanceName}-minio`, new Map([["minio", {}]]), { dropVolumes: true });
194
+ require_compose.render(composeSrc, composeMinio, `pl-${instanceName}-minio`, /* @__PURE__ */ new Map([["minio", {}]]), { dropVolumes: true });
194
195
  const version = options?.version ? `:${options.version}` : "";
195
196
  this.logger.debug(` minio version: ${version}`);
196
197
  const image = options?.image ?? `quay.io/minio/minio${version}`;
@@ -281,7 +282,7 @@ var Core = class {
281
282
  hostPath: mnt.hostPath,
282
283
  containerPath: mnt.containerPath ?? mnt.hostPath
283
284
  });
284
- require_compose.render(composeS3Path, composeDstPath, `pl-${instanceName}`, new Map([["minio", {}], ["backend", {
285
+ require_compose.render(composeS3Path, composeDstPath, `pl-${instanceName}`, /* @__PURE__ */ new Map([["minio", {}], ["backend", {
285
286
  platform: options?.platformOverride,
286
287
  mounts: backendMounts,
287
288
  commands: options?.backendCommands
@@ -421,7 +422,7 @@ var Core = class {
421
422
  containerPath: mnt.containerPath ?? mnt.hostPath
422
423
  });
423
424
  this.logger.debug(`Rendering docker compose file '${composeDstPath}' using '${composeFSPath}' as base template`);
424
- require_compose.render(composeFSPath, composeDstPath, `pl-${instanceName}`, new Map([["backend", {
425
+ require_compose.render(composeFSPath, composeDstPath, `pl-${instanceName}`, /* @__PURE__ */ new Map([["backend", {
425
426
  platform: options?.platformOverride,
426
427
  mounts: backendMounts,
427
428
  commands: options?.backendCommands
@@ -727,6 +728,7 @@ function checkRunError(result, message) {
727
728
  }
728
729
  }
729
730
  //#endregion
731
+ exports.checkRunError = checkRunError;
730
732
  exports.default = Core;
731
733
 
732
734
  //# sourceMappingURL=core.cjs.map
package/dist/core.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"core.cjs","names":["state","path","os","fs"],"sources":["../src/core.ts"],"sourcesContent":["import type { ChildProcess, SpawnSyncReturns } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport * as pkg from \"./package\";\nimport * as run from \"./run\";\nimport * as composeCfg from \"./templates/compose\";\nimport * as plCfg from \"./templates/pl-config\";\nimport type * as types from \"./templates/types\";\nimport * as platforma from \"./platforma\";\nimport type { instanceInfo, instanceCommand } from \"./state\";\nimport state from \"./state\";\nimport * as util from \"./util\";\nimport type winston from \"winston\";\n\nexport default class Core {\n constructor(private readonly logger: winston.Logger) {}\n\n public startLast(): ChildProcess[] {\n const instance = state.currentInstance;\n if (!instance) {\n this.logger.error(\n \"failed to bring back Platforma Backend in the last started configuration: no last configuration found\",\n );\n throw new Error(\"no previous run info found\");\n }\n\n return this.startInstance(instance);\n }\n\n public startInstance(instance: instanceInfo): ChildProcess[] {\n if (instance.runInfo) {\n const runInfo = this.renderRunInfo(instance.runInfo);\n this.logger.info(`Starting platforma backend instance '${instance.name}':\\n${runInfo}`);\n }\n\n const result = run.runCommands(this.logger, instance.upCommands);\n checkRunError(result.executed);\n\n if (result.spawned.length > 0 && instance.type === \"process\") {\n instance.pid = result.spawned[result.spawned.length - 1].pid;\n state.setInstanceInfo(instance.name, instance);\n this.logger.info(`instance '${instance.name}' started`);\n }\n\n state.currentInstanceName = instance.name;\n\n return result.spawned;\n }\n\n public stopInstance(instance: instanceInfo) {\n this.logger.info(`stopping platforma backend instance '${instance.name}'...`);\n const result = run.runCommands(this.logger, instance.downCommands);\n checkRunError(result.executed);\n\n const iType = instance.type;\n switch (iType) {\n case \"docker\": {\n return;\n }\n\n case \"process\": {\n if (instance.pid && state.isInstanceActive(instance)) {\n process.kill(instance.pid);\n }\n\n return;\n }\n default:\n util.assertNever(iType);\n }\n }\n\n public switchInstance(instance: instanceInfo): ChildProcess[] {\n // Stop all other active instances before switching to new one;\n for (const iName of state.instanceList) {\n if (iName !== instance.name) {\n const iToStop = state.getInstanceInfo(iName);\n if (state.isInstanceActive(iToStop)) {\n this.stopInstance(iToStop);\n }\n }\n }\n\n return this.startInstance(instance);\n }\n\n public createLocal(instanceName: string, options?: createLocalOptions): instanceInfo {\n let plBinaryPath = platforma.binaryPath(options?.version, \"binaries\", \"platforma\");\n if (options?.sourcesPath) {\n plBinaryPath = path.join(os.tmpdir(), \"platforma-custom-build\");\n }\n if (options?.binaryPath) {\n plBinaryPath = options.binaryPath;\n }\n\n let configPath = options?.configPath;\n const workdir: string =\n options?.workdir ?? (configPath ? process.cwd() : state.instanceDir(instanceName));\n\n if (options?.primaryURL) {\n options.configOptions = {\n ...options.configOptions,\n storages: {\n ...options.configOptions?.storages,\n primary: plCfg.storageSettingsFromURL(\n options.primaryURL,\n workdir,\n options.configOptions?.storages?.primary,\n ),\n },\n };\n }\n if (options?.libraryURL) {\n options.configOptions = {\n ...options.configOptions,\n storages: {\n ...options.configOptions?.storages,\n library: plCfg.storageSettingsFromURL(\n options.libraryURL,\n workdir,\n options.configOptions?.storages?.library,\n ),\n },\n };\n }\n\n const configOptions = plCfg.loadDefaults(this.getLastJwt(), options?.configOptions);\n\n this.logger.debug(` checking license...`);\n this.checkLicense(\n options?.configOptions?.license?.value,\n options?.configOptions?.license?.file,\n );\n\n const storageDirs: string[] = [\n `${configOptions.localRoot}/packages`,\n `${configOptions.localRoot}/packages-local`,\n `${configOptions.localRoot}/blocks-local`,\n ];\n if (configOptions.storages.primary.type === \"FS\") {\n storageDirs.push(configOptions.storages.primary.rootPath);\n }\n if (configOptions.storages.library.type === \"FS\") {\n storageDirs.push(configOptions.storages.library.rootPath);\n configOptions.hacks.libraryDownloadable = false;\n }\n if (configOptions.storages.work.type === \"FS\") {\n storageDirs.push(configOptions.storages.work.rootPath);\n }\n\n this.logger.debug(\" creating pl state directories...\");\n for (const dir of storageDirs) {\n if (!fs.existsSync(dir)) {\n this.logger.debug(` '${dir}'`);\n fs.mkdirSync(dir, { recursive: true });\n }\n }\n\n for (const drv of configOptions.core.auth.drivers) {\n if (drv.driver === \"htpasswd\") {\n if (!fs.existsSync(drv.path)) {\n this.logger.debug(` installing default 'users.htpasswd' to ${drv.path}...`);\n fs.copyFileSync(pkg.assets(\"users.htpasswd\"), drv.path);\n }\n }\n }\n\n if (!configPath) {\n configPath = path.join(configOptions.localRoot, \"config.yaml\");\n this.logger.debug(` rendering configuration '${configPath}'...`);\n fs.writeFileSync(configPath, plCfg.render(configOptions));\n }\n\n const upCommands: instanceCommand[] = [];\n if (options?.sourcesPath) {\n upCommands.push({\n cmd: \"go\",\n args: [\"build\", \"-o\", plBinaryPath, \".\"],\n workdir: path.resolve(options.sourcesPath, \"cmd\", \"platforma\"),\n runOpts: {\n stdio: \"inherit\",\n },\n });\n }\n\n const runBinary: instanceCommand = {\n async: true,\n cmd: plBinaryPath,\n args: [\"--quiet\", \"--config\", configPath],\n workdir: workdir,\n runOpts: {\n stdio: \"inherit\",\n },\n };\n\n if (options?.configOptions?.numCpu) {\n runBinary.runOpts.env = {\n GOMAXPROCS: String(options?.configOptions?.numCpu),\n };\n }\n\n // Process additional environment variables from CLI options\n if (options?.backendCommands) {\n if (!runBinary.runOpts.env) {\n runBinary.runOpts.env = {};\n }\n for (const cmd of options.backendCommands) {\n const equalIndex = cmd.indexOf(\"=\");\n if (equalIndex > 0) {\n const key = cmd.substring(0, equalIndex);\n const value = cmd.substring(equalIndex + 1);\n runBinary.runOpts.env[key] = value;\n } else {\n this.logger.warn(\n `Invalid environment variable format: ${cmd}. Expected format: KEY=VALUE`,\n );\n }\n }\n }\n\n // Process additional backend commands\n if (options?.backendCommands && options.backendCommands.length > 0) {\n this.logger.debug(`Adding backend commands: ${options.backendCommands.join(\" \")}`);\n // Add commands as arguments to the binary\n runBinary.args = [...runBinary.args, ...options.backendCommands];\n }\n\n upCommands.push(runBinary);\n\n state.setInstanceInfo(instanceName, {\n type: \"process\",\n upCommands: upCommands,\n downCommands: [],\n cleanupCommands: [],\n runInfo: {\n configPath,\n dbPath: configOptions.core.db.path,\n apiAddr: configOptions.grpc.listen,\n logPath: configOptions.log.path,\n primary: configOptions.storages.primary,\n work: configOptions.storages.work,\n library: configOptions.storages.library,\n },\n });\n\n return state.getInstanceInfo(instanceName);\n }\n\n public createLocalS3(instanceName: string, options?: createLocalS3Options): instanceInfo {\n this.logger.debug(\"creating platforma instance in 'local s3' mode...\");\n\n const minioPort = options?.minioPort ?? 9000;\n\n const instance = this.createLocal(instanceName, {\n ...options,\n primaryURL:\n options?.primaryURL ??\n `s3e://testuser:testpassword@localhost:${minioPort}/platforma-primary-bucket/?region=no-region`,\n libraryURL:\n options?.libraryURL ??\n `s3e://testuser:testpassword@localhost:${minioPort}/platforma-library-bucket/?region=no-region`,\n });\n\n const localRoot = options?.configOptions?.localRoot;\n const minioRunCmd = this.createMinio(instanceName, {\n minioPort: minioPort,\n minioConsolePort: options?.minioConsolePort,\n storage: localRoot ? path.join(localRoot, \"minio\") : undefined,\n });\n\n instance.upCommands = [minioRunCmd.start, ...instance.upCommands];\n\n instance.downCommands = [minioRunCmd.stop, ...instance.downCommands];\n\n instance.cleanupCommands = [minioRunCmd.cleanup, ...instance.cleanupCommands];\n\n state.setInstanceInfo(instanceName, instance);\n return instance;\n }\n\n public createMinio(\n instanceName: string,\n options?: {\n image?: string;\n version?: string;\n minioPort?: number;\n minioConsolePort?: number;\n storage?: string;\n },\n ): {\n start: instanceCommand;\n stop: instanceCommand;\n cleanup: instanceCommand;\n } {\n this.logger.debug(\" creating docker compose for minio service...\");\n const composeSrc = pkg.assets(\"compose-backend.yaml\");\n const composeMinio = state.instanceDir(instanceName, \"compose-minio.yaml\");\n\n composeCfg.render(\n composeSrc,\n composeMinio,\n `pl-${instanceName}-minio`,\n new Map([[\"minio\", {}]]),\n { dropVolumes: true },\n );\n\n const version = options?.version ? `:${options.version}` : \"\";\n this.logger.debug(` minio version: ${version}`);\n const image = options?.image ?? `quay.io/minio/minio${version}`;\n this.logger.debug(` minio image: ${image}`);\n\n const storage = options?.storage ?? state.instanceDir(instanceName, \"minio\");\n util.ensureDir(storage, { mode: \"0775\" });\n\n const minioPort = options?.minioPort ?? 9000;\n const minioConsolePort = options?.minioConsolePort ?? 9001;\n\n const envs = {\n MINIO_IMAGE: image,\n MINIO_STORAGE: path.resolve(storage),\n MINIO_PORT: minioPort.toString(),\n MINIO_CONSOLE_PORT: minioConsolePort.toString(),\n };\n\n return {\n start: {\n cmd: \"docker\",\n args: [\n \"compose\",\n `--file=${composeMinio}`,\n \"up\",\n \"--detach\",\n \"--remove-orphans\",\n \"--pull=missing\",\n ],\n envs: envs,\n workdir: state.instanceDir(instanceName),\n runOpts: { stdio: \"inherit\" },\n },\n stop: {\n cmd: \"docker\",\n args: [\"compose\", `--file=${composeMinio}`, \"down\"],\n envs: envs,\n workdir: state.instanceDir(instanceName),\n runOpts: { stdio: \"inherit\" },\n },\n cleanup: {\n cmd: \"docker\",\n args: [\"compose\", `--file=${composeMinio}`, \"down\", \"--volumes\", \"--remove-orphans\"],\n envs: envs,\n workdir: state.instanceDir(instanceName),\n runOpts: { stdio: \"inherit\" },\n },\n };\n }\n\n public createDockerS3(\n instanceName: string,\n localRoot: string,\n options?: {\n image?: string;\n version?: string;\n platformOverride?: string;\n\n logLevel?: string;\n auth?: types.authOptions;\n\n license?: string;\n licenseFile?: string;\n\n grpcPort?: number;\n grpcAddr?: string;\n\n presignHost?: string;\n\n monitoringPort?: number;\n monitoringAddr?: string;\n\n debugPort?: number;\n debugAddr?: string;\n\n s3Port?: number;\n s3ConsolePort?: number;\n\n customMounts?: { hostPath: string; containerPath?: string }[];\n\n backendCommands?: string[];\n },\n ): instanceInfo {\n this.logger.debug(\"creating platforma instance in 'docker s3' mode...\");\n\n const composeS3Path = pkg.assets(\"compose-backend.yaml\");\n const image = options?.image ?? pkg.plImageTag(options?.version);\n\n this.checkLicense(options?.license, options?.licenseFile);\n\n const storagePath = (...s: string[]) => path.join(localRoot, ...s);\n const storageDir = (s: string) => {\n const p = storagePath(s);\n util.ensureDir(p, { mode: \"0775\" });\n return p;\n };\n\n const logFilePath = storagePath(\"logs\", \"platforma.log\");\n if (!fs.existsSync(logFilePath)) {\n fs.mkdirSync(path.dirname(logFilePath), { recursive: true });\n fs.writeFileSync(logFilePath, \"\");\n }\n\n const presignHost = options?.presignHost ?? \"localhost\";\n const presignPort = options?.s3Port ?? 9000;\n\n const primary = plCfg.storageSettingsFromURL(\n `s3e://testuser:testpassword@minio:${presignPort}/platforma-primary-bucket`,\n );\n if (primary.type !== \"S3\") {\n throw new Error(\"primary storage must have 'S3' type in 'docker s3' configuration\");\n } else {\n primary.presignEndpoint = `http://${presignHost}:${presignPort}`;\n }\n\n const library = plCfg.storageSettingsFromURL(\n `s3e://testuser:testpassword@minio:${presignPort}/platforma-library-bucket`,\n );\n if (library.type !== \"S3\") {\n throw new Error(`${library.type} storage type is not supported for library storage`);\n } else {\n library.presignEndpoint = `http://${presignHost}:${presignPort}`;\n }\n\n const dbFSPath = storageDir(\"db\");\n const workFSPath = storageDir(\"work\");\n const usersFSPath = storagePath(\"users.htpasswd\");\n if (!fs.existsSync(usersFSPath)) {\n fs.copyFileSync(pkg.assets(\"users.htpasswd\"), usersFSPath);\n }\n\n const composeDstPath = storagePath(\"compose.yaml\");\n if (fs.existsSync(composeDstPath)) {\n this.logger.info(`replacing docker compose file ${composeDstPath}`);\n }\n\n const backendMounts: composeCfg.VolumeMountOption[] = [];\n for (const mnt of options?.customMounts ?? []) {\n backendMounts.push({\n hostPath: mnt.hostPath,\n containerPath: mnt.containerPath ?? mnt.hostPath,\n });\n }\n composeCfg.render(\n composeS3Path,\n composeDstPath,\n `pl-${instanceName}`,\n new Map([\n [\"minio\", {}],\n [\n \"backend\",\n {\n platform: options?.platformOverride,\n mounts: backendMounts,\n commands: options?.backendCommands,\n },\n ],\n ]),\n );\n\n const envs: NodeJS.ProcessEnv = {\n MINIO_IMAGE: \"quay.io/minio/minio\",\n MINIO_STORAGE: storageDir(\"minio\"),\n\n PL_IMAGE: image,\n\n PL_AUTH_HTPASSWD: usersFSPath,\n PL_LICENSE: options?.license,\n PL_LICENSE_FILE: options?.licenseFile,\n\n PL_LOG_LEVEL: options?.logLevel ?? \"info\",\n PL_LOG_DIR: path.dirname(logFilePath),\n PL_LOG_ROTATION_ENABLED: \"true\",\n\n PL_RUNNER_WD_CACHE_ON_FAILURE: \"1h\",\n\n PL_DATA_DB_ROOT: dbFSPath,\n PL_DATA_PRIMARY_ROOT: storageDir(\"primary\"),\n PL_DATA_LIBRARY_ROOT: storageDir(\"library\"),\n PL_DATA_WORKDIR_ROOT: workFSPath,\n\n // Mount packages storage as volume, because APFS is case-insensitive on Mac OS X and this breaks some pl software installation.\n // PL_DATA_PACKAGE_ROOT: storageDir('packages'),\n\n ...this.configureDockerStorage(\"primary\", primary),\n ...this.configureDockerStorage(\"library\", library),\n };\n\n if (options?.grpcAddr) {\n const addrParts = options.grpcAddr.split(\":\");\n if (addrParts.length === 2) {\n envs.PL_LISTEN_ADDRESS = addrParts[0];\n envs.PL_LISTEN_PORT = addrParts[1];\n } else {\n envs.PL_LISTEN_ADDRESS = options.grpcAddr;\n }\n } else if (options?.grpcPort) {\n envs.PL_LISTEN_PORT = options.grpcPort.toString();\n }\n\n if (options?.monitoringAddr) {\n const addrParts = options.monitoringAddr.split(\":\");\n if (addrParts.length === 2) {\n envs.PL_MONITORING_IP = addrParts[0];\n envs.PL_MONITORING_PORT = addrParts[1];\n } else {\n envs.PL_MONITORING_IP = options.monitoringAddr;\n }\n } else if (options?.monitoringPort) {\n envs.PL_MONITORING_PORT = options.monitoringPort.toString();\n }\n\n if (options?.debugAddr) {\n const addrParts = options.debugAddr.split(\":\");\n if (addrParts.length === 2) {\n envs.PL_DEBUG_IP = addrParts[0];\n envs.PL_DEBUG_PORT = addrParts[1];\n } else {\n envs.PL_DEBUG_IP = options.debugAddr;\n }\n } else if (options?.debugPort) {\n envs.PL_DEBUG_PORT = options.debugPort.toString();\n }\n\n if (options?.s3Port) envs.MINIO_PORT = options.s3Port.toString();\n if (options?.s3ConsolePort) envs.MINIO_CONSOLE_PORT = options.s3ConsolePort.toString();\n\n if (options?.auth) {\n if (options.auth.enabled) {\n envs[\"PL_NO_AUTH\"] = \"false\";\n } else {\n envs[\"PL_NO_AUTH\"] = \"true\";\n }\n if (options.auth.drivers) {\n for (const drv of options.auth.drivers) {\n if (drv.driver === \"htpasswd\") {\n envs[\"PL_AUTH_HTPASSWD\"] = path.resolve(drv.path);\n drv.path = \"/etc/platforma/users.htpasswd\";\n }\n }\n envs[\"PL_AUTH_DRIVERS\"] = JSON.stringify(options.auth.drivers);\n }\n }\n\n // Process additional backend commands\n if (options?.backendCommands && options.backendCommands.length > 0) {\n this.logger.debug(`Adding backend commands: ${options.backendCommands.join(\" \")}`);\n }\n\n state.setInstanceInfo(instanceName, {\n type: \"docker\",\n upCommands: [\n {\n cmd: \"docker\",\n args: [\n \"compose\",\n `--file=${composeDstPath}`,\n \"up\",\n \"--detach\",\n \"--remove-orphans\",\n \"--pull=missing\",\n ],\n envs: envs,\n runOpts: { stdio: \"inherit\" },\n },\n ],\n downCommands: [\n {\n cmd: \"docker\",\n args: [\"compose\", `--file=${composeDstPath}`, \"down\"],\n envs: envs,\n runOpts: { stdio: \"inherit\" },\n },\n ],\n cleanupCommands: [\n {\n cmd: \"docker\",\n args: [\"compose\", `--file=${composeDstPath}`, \"down\", \"--volumes\", \"--remove-orphans\"],\n envs: envs,\n runOpts: { stdio: \"inherit\" },\n },\n ],\n runInfo: {\n apiPort: options?.grpcPort,\n apiAddr: options?.grpcAddr,\n logPath: logFilePath,\n primary: primary,\n work: { type: \"FS\", rootPath: workFSPath },\n library: library,\n dbPath: dbFSPath,\n },\n });\n\n return state.getInstanceInfo(instanceName);\n }\n\n public createDocker(\n instanceName: string,\n localRoot: string,\n options?: {\n primaryStorageURL?: string;\n workStoragePath?: string;\n libraryStorageURL?: string;\n customMounts?: { hostPath: string; containerPath?: string }[];\n\n image?: string;\n version?: string;\n platformOverride?: string;\n\n logLevel?: string;\n\n auth?: types.authOptions;\n\n license?: string;\n licenseFile?: string;\n grpcPort?: number;\n grpcAddr?: string;\n\n monitoringPort?: number;\n monitoringAddr?: string;\n\n debugPort?: number;\n debugAddr?: string;\n\n backendCommands?: string[];\n },\n ): instanceInfo {\n this.logger.debug(\"creating platforma instance in 'docker' mode...\");\n\n const composeFSPath = pkg.assets(\"compose-backend.yaml\");\n const image = options?.image ?? pkg.plImageTag(options?.version);\n\n this.checkLicense(options?.license, options?.licenseFile);\n\n const storagePath = (...s: string[]) => path.join(localRoot, ...s);\n const storageDir = (s: string) => {\n const p = storagePath(s);\n util.ensureDir(p, { mode: \"0775\" });\n return p;\n };\n\n const logFilePath = storagePath(\"logs\", \"platforma.log\");\n if (!fs.existsSync(logFilePath)) {\n fs.mkdirSync(path.dirname(logFilePath), { recursive: true });\n fs.writeFileSync(logFilePath, \"\");\n }\n\n const dbFSPath = storageDir(\"db\");\n const primaryFSPath = storageDir(\"primary\");\n const libraryFSPath = storageDir(\"library\");\n const workFSPath = storageDir(\"work\");\n const usersFSPath = storagePath(\"users.htpasswd\");\n if (!fs.existsSync(usersFSPath)) {\n fs.copyFileSync(pkg.assets(\"users.htpasswd\"), usersFSPath);\n }\n\n const composeDstPath = storagePath(\"compose.yaml\");\n if (fs.existsSync(composeDstPath)) {\n this.logger.info(`replacing docker compose file ${composeDstPath}`);\n }\n\n const backendMounts: composeCfg.VolumeMountOption[] = [];\n for (const mnt of options?.customMounts ?? []) {\n backendMounts.push({\n hostPath: mnt.hostPath,\n containerPath: mnt.containerPath ?? mnt.hostPath,\n });\n }\n this.logger.debug(\n `Rendering docker compose file '${composeDstPath}' using '${composeFSPath}' as base template`,\n );\n composeCfg.render(\n composeFSPath,\n composeDstPath,\n `pl-${instanceName}`,\n new Map([\n [\n \"backend\",\n {\n platform: options?.platformOverride,\n mounts: backendMounts,\n commands: options?.backendCommands,\n },\n ],\n ]),\n );\n\n const primary = plCfg.storageSettingsFromURL(\n options?.primaryStorageURL ?? `file:${primaryFSPath}`,\n \".\",\n );\n const library = plCfg.storageSettingsFromURL(\n options?.libraryStorageURL ?? `file:${libraryFSPath}`,\n \".\",\n );\n\n const envs: NodeJS.ProcessEnv = {\n PL_IMAGE: image,\n PL_AUTH_HTPASSWD: usersFSPath,\n PL_LICENSE: options?.license,\n PL_LICENSE_FILE: options?.licenseFile,\n\n PL_LOG_LEVEL: options?.logLevel ?? \"info\",\n PL_LOG_DIR: path.dirname(logFilePath),\n PL_LOG_ROTATION_ENABLED: \"true\",\n\n PL_RUNNER_WD_CACHE_ON_FAILURE: \"1h\",\n\n PL_DATA_DB_ROOT: dbFSPath,\n PL_DATA_PRIMARY_ROOT: primaryFSPath,\n PL_DATA_LIBRARY_ROOT: libraryFSPath,\n PL_DATA_WORKDIR_ROOT: workFSPath,\n PL_DATA_PACKAGE_ROOT: storageDir(\"packages\"),\n\n ...this.configureDockerStorage(\"primary\", primary),\n ...this.configureDockerStorage(\"library\", library),\n };\n\n if (options?.grpcAddr) {\n const addrParts = options.grpcAddr.split(\":\");\n if (addrParts.length === 2) {\n envs.PL_LISTEN_ADDRESS = addrParts[0];\n envs.PL_LISTEN_PORT = addrParts[1];\n } else {\n envs.PL_LISTEN_ADDRESS = options.grpcAddr;\n }\n } else if (options?.grpcPort) {\n envs.PL_LISTEN_PORT = options.grpcPort.toString();\n }\n\n if (options?.monitoringAddr) {\n const addrParts = options.monitoringAddr.split(\":\");\n if (addrParts.length === 2) {\n envs.PL_MONITORING_IP = addrParts[0];\n envs.PL_MONITORING_PORT = addrParts[1];\n } else {\n envs.PL_MONITORING_IP = options.monitoringAddr;\n }\n } else if (options?.monitoringPort) {\n envs.PL_MONITORING_PORT = options.monitoringPort.toString();\n }\n\n if (options?.debugAddr) {\n const addrParts = options.debugAddr.split(\":\");\n if (addrParts.length === 2) {\n envs.PL_DEBUG_IP = addrParts[0];\n envs.PL_DEBUG_PORT = addrParts[1];\n } else {\n envs.PL_DEBUG_IP = options.debugAddr;\n }\n } else if (options?.debugPort) {\n envs.PL_DEBUG_PORT = options.debugPort.toString();\n }\n\n if (options?.auth) {\n if (options.auth.enabled) {\n envs[\"PL_NO_AUTH\"] = \"false\";\n } else {\n envs[\"PL_NO_AUTH\"] = \"true\";\n }\n if (options.auth.drivers) {\n for (const drv of options.auth.drivers) {\n if (drv.driver === \"htpasswd\") {\n envs[\"PL_AUTH_HTPASSWD\"] = path.resolve(drv.path);\n drv.path = \"/etc/platforma/users.htpasswd\";\n }\n }\n envs[\"PL_AUTH_DRIVERS\"] = JSON.stringify(options.auth.drivers);\n }\n }\n\n // Process additional backend commands\n if (options?.backendCommands && options.backendCommands.length > 0) {\n this.logger.debug(`Adding backend commands: ${options.backendCommands.join(\" \")}`);\n }\n\n state.setInstanceInfo(instanceName, {\n type: \"docker\",\n upCommands: [\n {\n cmd: \"docker\",\n args: [\n \"compose\",\n `--file=${composeDstPath}`,\n \"up\",\n \"--detach\",\n \"--remove-orphans\",\n \"--pull=missing\",\n ],\n envs: envs,\n runOpts: { stdio: \"inherit\" },\n },\n ],\n downCommands: [\n {\n cmd: \"docker\",\n args: [\"compose\", `--file=${composeDstPath}`, \"down\"],\n envs: envs,\n runOpts: { stdio: \"inherit\" },\n },\n ],\n cleanupCommands: [\n {\n cmd: \"docker\",\n args: [\"compose\", `--file=${composeDstPath}`, \"down\", \"--volumes\", \"--remove-orphans\"],\n envs: envs,\n runOpts: { stdio: \"inherit\" },\n },\n ],\n runInfo: {\n apiPort: options?.grpcPort,\n apiAddr: options?.grpcAddr,\n logPath: logFilePath,\n primary: primary,\n work: { type: \"FS\", rootPath: workFSPath },\n library: library,\n dbPath: dbFSPath,\n },\n });\n\n return state.getInstanceInfo(instanceName);\n }\n\n public cleanupInstance(instanceName?: string) {\n const removeWarns: string[] = [];\n const instancesToDrop = new Map<string, instanceInfo>();\n let warnMessage: string = \"\";\n\n if (instanceName) {\n const instance = state.getInstanceInfo(instanceName);\n instancesToDrop.set(instanceName, instance);\n const iType = instance.type;\n switch (iType) {\n case \"docker\": {\n removeWarns.push(\n `docker service 'pl-${instanceName}', including all its volumes and data in '${state.instanceDir(instanceName)}' will be destroyed`,\n );\n break;\n }\n case \"process\": {\n removeWarns.push(`directory '${state.instanceDir(instanceName)}' would be deleted`);\n if (instance.downCommands) {\n removeWarns.push(\n `associated docker service, including all volumes and data will be destroyed`,\n );\n }\n break;\n }\n default:\n util.assertNever(iType);\n }\n\n if (instanceName === state.currentInstanceName) {\n removeWarns.push(\n \"last command run cache ('pl-dev start' shorthand will stop working until next full start command call)\",\n );\n }\n\n warnMessage = `\nYou are going to reset the state of platforma service '${instanceName}':\n - ${removeWarns.join(\"\\n - \")}\n`;\n } else {\n for (const iName of state.instanceList) {\n instancesToDrop.set(iName, state.getInstanceInfo(iName));\n }\n\n removeWarns.push(\n \"last command run cache ('pl-dev start' shorthand will stop working until next full start command call)\",\n `all service configurations stored in: ${state.instanceDir()} (including all associated docker containers and volumes)`,\n );\n\n warnMessage = `\nYou are going to reset the state of all platforma services configured with pl-bootstrap package.\n - ${removeWarns.join(\"\\n - \")}\n`;\n }\n\n this.logger.warn(warnMessage);\n if (!util.askYN(\"Are you sure?\")) {\n this.logger.info(\"Reset action was canceled\");\n return;\n }\n\n for (const [name, instance] of instancesToDrop.entries()) {\n if (instance.cleanupCommands.length) {\n this.logger.info(`Wiping instance ${name} services`);\n const result = run.runCommands(this.logger, instance.cleanupCommands);\n checkRunError(result.executed, `failed to wipe instance ${name} services`);\n }\n\n this.logger.info(`Destroying instance '${name}' data directory`);\n fs.rmSync(state.instanceDir(name), { recursive: true, force: true });\n }\n\n if (!instanceName) {\n this.logger.info(`Destroying state dir '${state.path()}'`);\n fs.rmSync(state.path(), { recursive: true, force: true });\n }\n\n this.logger.info(\n `\\nIf you want to remove all downloaded platforma binaries, delete '${state.binaries()}' dir manually\\n`,\n );\n }\n\n public mergeLicenseEnvs(flags: { license?: string; \"license-file\"?: string }) {\n if (flags.license === undefined) {\n if ((process.env.MI_LICENSE ?? \"\") != \"\") flags.license = process.env.MI_LICENSE;\n else if ((process.env.PL_LICENSE ?? \"\") != \"\") flags.license = process.env.PL_LICENSE;\n }\n\n // set 'license-file' only if license is still undefined\n if (flags[\"license-file\"] === undefined && flags.license === undefined) {\n if ((process.env.MI_LICENSE_FILE ?? \"\") != \"\")\n flags[\"license-file\"] = process.env.MI_LICENSE_FILE;\n else if ((process.env.PL_LICENSE_FILE ?? \"\") != \"\")\n flags[\"license-file\"] = process.env.PL_LICENSE_FILE;\n else if (fs.existsSync(path.resolve(os.homedir(), \".pl.license\")))\n flags[\"license-file\"] = path.resolve(os.homedir(), \".pl.license\");\n }\n }\n\n public initAuthDriversList(\n flags: {\n \"auth-htpasswd-file\"?: string;\n\n \"auth-ldap-server\"?: string;\n \"auth-ldap-default-dn\"?: string;\n },\n workdir: string,\n ): types.authDriver[] | undefined {\n const authDrivers: types.authDriver[] = [];\n if (flags[\"auth-htpasswd-file\"]) {\n authDrivers.push({\n driver: \"htpasswd\",\n path: path.resolve(workdir, flags[\"auth-htpasswd-file\"]),\n });\n }\n\n if (Boolean(flags[\"auth-ldap-server\"]) !== Boolean(flags[\"auth-ldap-default-dn\"])) {\n throw new Error(\n \"LDAP auth settings require both 'server' and 'default DN' options to be set\",\n );\n }\n\n if (flags[\"auth-ldap-server\"]) {\n authDrivers.push({\n driver: \"ldap\",\n serverUrl: flags[\"auth-ldap-server\"],\n defaultDN: flags[\"auth-ldap-default-dn\"]!,\n });\n }\n\n if (authDrivers.length === 0) {\n return undefined;\n }\n\n return [{ driver: \"jwt\", key: this.getLastJwt() }, ...authDrivers] as types.authDriver[];\n }\n\n /** Gets the last stored JWT secret key or generates it and stores in a file. */\n public getLastJwt() {\n const jwtFile = state.path(\"auth.jwt\");\n const encoding = \"utf-8\";\n\n let lastJwt = \"\";\n if (fs.existsSync(jwtFile)) {\n lastJwt = fs.readFileSync(jwtFile, { encoding });\n }\n\n if (lastJwt == \"\") {\n lastJwt = util.randomStr(64);\n fs.writeFileSync(jwtFile, lastJwt, { encoding });\n }\n\n return lastJwt;\n }\n\n private checkLicense(value?: string, file?: string) {\n if (value !== undefined && value != \"\") return;\n\n if (file !== undefined && file != \"\") return;\n\n this.logger.error(`A license for Platforma Backend must be set.\n\nYou can provide the license directly using the '--license' flag\nor use the '--license-file' flag if the license is stored in a file.\n\nAlternatively, you can set it via the environment variables 'MI_LICENSE' or 'PL_LICENSE'.\n\nThe license file can also be set with the variables 'MI_LICENSE_FILE' or 'PL_LICENSE_FILE',\nor stored in '$HOME/.pl.license'.\n\nYou can obtain the license from \"https://platforma.bio/getlicense\".`);\n\n throw new Error(`The license was not provided.`);\n }\n\n private configureDockerStorage(\n storageID: string,\n storage: types.storageOptions,\n ): NodeJS.ProcessEnv {\n const envs: NodeJS.ProcessEnv = {};\n const sType = storage.type;\n storageID = storageID.toUpperCase();\n\n switch (sType) {\n case \"S3\":\n switch (storageID) {\n case \"PRIMARY\": {\n // Construct the S3 URL for primary storage\n if (storage.endpoint && storage.bucketName) {\n envs[\"PL_PRIMARY_STORAGE_S3\"] = `${storage.endpoint}${storage.bucketName}`;\n }\n if (storage.endpoint) envs[\"PL_PRIMARY_STORAGE_S3_ENDPOINT\"] = storage.endpoint;\n if (storage.presignEndpoint)\n envs[\"PL_PRIMARY_STORAGE_S3_EXTERNAL_ENDPOINT\"] = storage.presignEndpoint;\n if (storage.region) envs[\"PL_PRIMARY_STORAGE_S3_REGION\"] = storage.region;\n if (storage.key) envs[\"PL_PRIMARY_STORAGE_S3_KEY\"] = storage.key;\n if (storage.secret) envs[\"PL_PRIMARY_STORAGE_S3_SECRET\"] = storage.secret;\n break;\n }\n case \"LIBRARY\": {\n // Construct the S3 URL for library storage\n if (storage.endpoint && storage.bucketName) {\n envs[\"PL_DATA_LIBRARY_S3_URL\"] = `library=${storage.endpoint}${storage.bucketName}`;\n }\n if (storage.endpoint)\n envs[\"PL_DATA_LIBRARY_S3_ENDPOINT\"] = `library=${storage.endpoint}`;\n if (storage.presignEndpoint)\n envs[\"PL_DATA_LIBRARY_S3_EXTERNAL_ENDPOINT\"] = `library=${storage.presignEndpoint}`;\n if (storage.region) envs[\"PL_DATA_LIBRARY_S3_REGION\"] = `library=${storage.region}`;\n if (storage.key) envs[\"PL_DATA_LIBRARY_S3_KEY\"] = `library=${storage.key}`;\n if (storage.secret) envs[\"PL_DATA_LIBRARY_S3_SECRET\"] = `library=${storage.secret}`;\n break;\n }\n default:\n throw new Error(`Unknown storage ID: ${storageID}`);\n }\n return envs;\n case \"FS\":\n switch (storageID) {\n case \"PRIMARY\":\n if (storage.rootPath) envs[\"PL_PRIMARY_STORAGE_FS\"] = storage.rootPath;\n break;\n case \"LIBRARY\":\n if (storage.rootPath) envs[\"PL_DATA_LIBRARY_FS_PATH\"] = storage.rootPath;\n break;\n default:\n throw new Error(`Unknown storage ID: ${storageID}`);\n }\n return envs;\n\n default:\n util.assertNever(sType);\n }\n\n return {};\n }\n\n private renderRunInfo(\n runInfo: {\n configPath?: string;\n apiPort?: number;\n apiAddr?: string;\n logPath?: string;\n dbPath?: string;\n primary?: types.storageOptions;\n work?: types.fsStorageOptions;\n library?: types.storageOptions;\n },\n indent: number = 10,\n ) {\n const report: string[] = [];\n\n const column = (t: string) => t.padStart(indent, \" \");\n if (runInfo.configPath) {\n report.push(`${column(\"config\")}: ${runInfo.configPath}`);\n }\n\n if (runInfo.apiAddr) {\n report.push(`${column(\"API\")}: ${runInfo.apiAddr}`);\n } else if (runInfo.apiPort) {\n report.push(`${column(\"API\")}: 127.0.0.1:${runInfo.apiPort.toString()}`);\n } else {\n report.push(`${column(\"API\")}: 127.0.0.1:6345`);\n }\n\n if (runInfo.logPath) {\n report.push(`${column(\"log\")}: ${runInfo.logPath}`);\n }\n\n const primaryType = runInfo.primary?.type;\n switch (primaryType) {\n case undefined:\n break;\n\n case \"FS\":\n report.push(`${column(\"primary\")}: ${runInfo.primary!.rootPath!}`);\n break;\n\n case \"S3\":\n report.push(\n `${column(\"primary\")}: S3 at '${runInfo.primary!.endpoint ?? \"AWS\"}', bucket '${runInfo.primary!.bucketName!}', prefix: '${runInfo.primary!.keyPrefix ?? \"\"}'`,\n );\n break;\n\n default:\n util.assertNever(primaryType);\n }\n\n const libraryType = runInfo.library?.type;\n switch (libraryType) {\n case undefined:\n break;\n\n case \"FS\":\n report.push(`${column(\"library\")}: ${runInfo.library!.rootPath!}`);\n break;\n\n case \"S3\":\n report.push(\n `${column(\"library\")}: S3 at '${runInfo.library!.endpoint ?? \"AWS\"}', bucket '${runInfo.library!.bucketName!}', prefix: '${runInfo.library!.keyPrefix ?? \"\"}'`,\n );\n break;\n\n default:\n util.assertNever(libraryType);\n }\n\n if (runInfo.work) {\n report.push(`${column(\"workdirs\")}: ${runInfo.work.rootPath}`);\n }\n\n if (runInfo.dbPath) {\n report.push(`${column(\"db\")}: ${runInfo.dbPath}`);\n }\n\n return report.join(\"\\n\");\n }\n}\n\nexport function checkRunError(result: SpawnSyncReturns<Buffer>[], message?: string) {\n for (const buffer of result) {\n if (buffer.error) {\n throw buffer.error;\n }\n\n const msg = message ?? \"failed to run command\";\n\n if (buffer.status !== 0) {\n throw new Error(`${msg}, process exited with code '${buffer.status}'`);\n }\n }\n}\n\nexport type createLocalOptions = {\n version?: string;\n sourcesPath?: string;\n binaryPath?: string;\n configPath?: string;\n configOptions?: plCfg.plOptions;\n workdir?: string;\n\n primaryURL?: string;\n libraryURL?: string;\n\n backendCommands?: string[];\n};\n\nexport type createLocalFSOptions = createLocalOptions;\n\nexport type createLocalS3Options = createLocalOptions & {\n minioPort?: number;\n minioConsolePort?: number;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"core.cjs","names":["state","path","os","fs"],"sources":["../src/core.ts"],"sourcesContent":["import type { ChildProcess, SpawnSyncReturns } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport * as pkg from \"./package\";\nimport * as run from \"./run\";\nimport * as composeCfg from \"./templates/compose\";\nimport * as plCfg from \"./templates/pl-config\";\nimport type * as types from \"./templates/types\";\nimport * as platforma from \"./platforma\";\nimport type { instanceInfo, instanceCommand } from \"./state\";\nimport state from \"./state\";\nimport * as util from \"./util\";\nimport type winston from \"winston\";\n\nexport default class Core {\n constructor(private readonly logger: winston.Logger) {}\n\n public startLast(): ChildProcess[] {\n const instance = state.currentInstance;\n if (!instance) {\n this.logger.error(\n \"failed to bring back Platforma Backend in the last started configuration: no last configuration found\",\n );\n throw new Error(\"no previous run info found\");\n }\n\n return this.startInstance(instance);\n }\n\n public startInstance(instance: instanceInfo): ChildProcess[] {\n if (instance.runInfo) {\n const runInfo = this.renderRunInfo(instance.runInfo);\n this.logger.info(`Starting platforma backend instance '${instance.name}':\\n${runInfo}`);\n }\n\n const result = run.runCommands(this.logger, instance.upCommands);\n checkRunError(result.executed);\n\n if (result.spawned.length > 0 && instance.type === \"process\") {\n instance.pid = result.spawned[result.spawned.length - 1].pid;\n state.setInstanceInfo(instance.name, instance);\n this.logger.info(`instance '${instance.name}' started`);\n }\n\n state.currentInstanceName = instance.name;\n\n return result.spawned;\n }\n\n public stopInstance(instance: instanceInfo) {\n this.logger.info(`stopping platforma backend instance '${instance.name}'...`);\n const result = run.runCommands(this.logger, instance.downCommands);\n checkRunError(result.executed);\n\n const iType = instance.type;\n switch (iType) {\n case \"docker\": {\n return;\n }\n\n case \"process\": {\n if (instance.pid && state.isInstanceActive(instance)) {\n process.kill(instance.pid);\n }\n\n return;\n }\n default:\n util.assertNever(iType);\n }\n }\n\n public switchInstance(instance: instanceInfo): ChildProcess[] {\n // Stop all other active instances before switching to new one;\n for (const iName of state.instanceList) {\n if (iName !== instance.name) {\n const iToStop = state.getInstanceInfo(iName);\n if (state.isInstanceActive(iToStop)) {\n this.stopInstance(iToStop);\n }\n }\n }\n\n return this.startInstance(instance);\n }\n\n public createLocal(instanceName: string, options?: createLocalOptions): instanceInfo {\n let plBinaryPath = platforma.binaryPath(options?.version, \"binaries\", \"platforma\");\n if (options?.sourcesPath) {\n plBinaryPath = path.join(os.tmpdir(), \"platforma-custom-build\");\n }\n if (options?.binaryPath) {\n plBinaryPath = options.binaryPath;\n }\n\n let configPath = options?.configPath;\n const workdir: string =\n options?.workdir ?? (configPath ? process.cwd() : state.instanceDir(instanceName));\n\n if (options?.primaryURL) {\n options.configOptions = {\n ...options.configOptions,\n storages: {\n ...options.configOptions?.storages,\n primary: plCfg.storageSettingsFromURL(\n options.primaryURL,\n workdir,\n options.configOptions?.storages?.primary,\n ),\n },\n };\n }\n if (options?.libraryURL) {\n options.configOptions = {\n ...options.configOptions,\n storages: {\n ...options.configOptions?.storages,\n library: plCfg.storageSettingsFromURL(\n options.libraryURL,\n workdir,\n options.configOptions?.storages?.library,\n ),\n },\n };\n }\n\n const configOptions = plCfg.loadDefaults(this.getLastJwt(), options?.configOptions);\n\n this.logger.debug(` checking license...`);\n this.checkLicense(\n options?.configOptions?.license?.value,\n options?.configOptions?.license?.file,\n );\n\n const storageDirs: string[] = [\n `${configOptions.localRoot}/packages`,\n `${configOptions.localRoot}/packages-local`,\n `${configOptions.localRoot}/blocks-local`,\n ];\n if (configOptions.storages.primary.type === \"FS\") {\n storageDirs.push(configOptions.storages.primary.rootPath);\n }\n if (configOptions.storages.library.type === \"FS\") {\n storageDirs.push(configOptions.storages.library.rootPath);\n configOptions.hacks.libraryDownloadable = false;\n }\n if (configOptions.storages.work.type === \"FS\") {\n storageDirs.push(configOptions.storages.work.rootPath);\n }\n\n this.logger.debug(\" creating pl state directories...\");\n for (const dir of storageDirs) {\n if (!fs.existsSync(dir)) {\n this.logger.debug(` '${dir}'`);\n fs.mkdirSync(dir, { recursive: true });\n }\n }\n\n for (const drv of configOptions.core.auth.drivers) {\n if (drv.driver === \"htpasswd\") {\n if (!fs.existsSync(drv.path)) {\n this.logger.debug(` installing default 'users.htpasswd' to ${drv.path}...`);\n fs.copyFileSync(pkg.assets(\"users.htpasswd\"), drv.path);\n }\n }\n }\n\n if (!configPath) {\n configPath = path.join(configOptions.localRoot, \"config.yaml\");\n this.logger.debug(` rendering configuration '${configPath}'...`);\n fs.writeFileSync(configPath, plCfg.render(configOptions));\n }\n\n const upCommands: instanceCommand[] = [];\n if (options?.sourcesPath) {\n upCommands.push({\n cmd: \"go\",\n args: [\"build\", \"-o\", plBinaryPath, \".\"],\n workdir: path.resolve(options.sourcesPath, \"cmd\", \"platforma\"),\n runOpts: {\n stdio: \"inherit\",\n },\n });\n }\n\n const runBinary: instanceCommand = {\n async: true,\n cmd: plBinaryPath,\n args: [\"--quiet\", \"--config\", configPath],\n workdir: workdir,\n runOpts: {\n stdio: \"inherit\",\n },\n };\n\n if (options?.configOptions?.numCpu) {\n runBinary.runOpts.env = {\n GOMAXPROCS: String(options?.configOptions?.numCpu),\n };\n }\n\n // Process additional environment variables from CLI options\n if (options?.backendCommands) {\n if (!runBinary.runOpts.env) {\n runBinary.runOpts.env = {};\n }\n for (const cmd of options.backendCommands) {\n const equalIndex = cmd.indexOf(\"=\");\n if (equalIndex > 0) {\n const key = cmd.substring(0, equalIndex);\n const value = cmd.substring(equalIndex + 1);\n runBinary.runOpts.env[key] = value;\n } else {\n this.logger.warn(\n `Invalid environment variable format: ${cmd}. Expected format: KEY=VALUE`,\n );\n }\n }\n }\n\n // Process additional backend commands\n if (options?.backendCommands && options.backendCommands.length > 0) {\n this.logger.debug(`Adding backend commands: ${options.backendCommands.join(\" \")}`);\n // Add commands as arguments to the binary\n runBinary.args = [...runBinary.args, ...options.backendCommands];\n }\n\n upCommands.push(runBinary);\n\n state.setInstanceInfo(instanceName, {\n type: \"process\",\n upCommands: upCommands,\n downCommands: [],\n cleanupCommands: [],\n runInfo: {\n configPath,\n dbPath: configOptions.core.db.path,\n apiAddr: configOptions.grpc.listen,\n logPath: configOptions.log.path,\n primary: configOptions.storages.primary,\n work: configOptions.storages.work,\n library: configOptions.storages.library,\n },\n });\n\n return state.getInstanceInfo(instanceName);\n }\n\n public createLocalS3(instanceName: string, options?: createLocalS3Options): instanceInfo {\n this.logger.debug(\"creating platforma instance in 'local s3' mode...\");\n\n const minioPort = options?.minioPort ?? 9000;\n\n const instance = this.createLocal(instanceName, {\n ...options,\n primaryURL:\n options?.primaryURL ??\n `s3e://testuser:testpassword@localhost:${minioPort}/platforma-primary-bucket/?region=no-region`,\n libraryURL:\n options?.libraryURL ??\n `s3e://testuser:testpassword@localhost:${minioPort}/platforma-library-bucket/?region=no-region`,\n });\n\n const localRoot = options?.configOptions?.localRoot;\n const minioRunCmd = this.createMinio(instanceName, {\n minioPort: minioPort,\n minioConsolePort: options?.minioConsolePort,\n storage: localRoot ? path.join(localRoot, \"minio\") : undefined,\n });\n\n instance.upCommands = [minioRunCmd.start, ...instance.upCommands];\n\n instance.downCommands = [minioRunCmd.stop, ...instance.downCommands];\n\n instance.cleanupCommands = [minioRunCmd.cleanup, ...instance.cleanupCommands];\n\n state.setInstanceInfo(instanceName, instance);\n return instance;\n }\n\n public createMinio(\n instanceName: string,\n options?: {\n image?: string;\n version?: string;\n minioPort?: number;\n minioConsolePort?: number;\n storage?: string;\n },\n ): {\n start: instanceCommand;\n stop: instanceCommand;\n cleanup: instanceCommand;\n } {\n this.logger.debug(\" creating docker compose for minio service...\");\n const composeSrc = pkg.assets(\"compose-backend.yaml\");\n const composeMinio = state.instanceDir(instanceName, \"compose-minio.yaml\");\n\n composeCfg.render(\n composeSrc,\n composeMinio,\n `pl-${instanceName}-minio`,\n new Map([[\"minio\", {}]]),\n { dropVolumes: true },\n );\n\n const version = options?.version ? `:${options.version}` : \"\";\n this.logger.debug(` minio version: ${version}`);\n const image = options?.image ?? `quay.io/minio/minio${version}`;\n this.logger.debug(` minio image: ${image}`);\n\n const storage = options?.storage ?? state.instanceDir(instanceName, \"minio\");\n util.ensureDir(storage, { mode: \"0775\" });\n\n const minioPort = options?.minioPort ?? 9000;\n const minioConsolePort = options?.minioConsolePort ?? 9001;\n\n const envs = {\n MINIO_IMAGE: image,\n MINIO_STORAGE: path.resolve(storage),\n MINIO_PORT: minioPort.toString(),\n MINIO_CONSOLE_PORT: minioConsolePort.toString(),\n };\n\n return {\n start: {\n cmd: \"docker\",\n args: [\n \"compose\",\n `--file=${composeMinio}`,\n \"up\",\n \"--detach\",\n \"--remove-orphans\",\n \"--pull=missing\",\n ],\n envs: envs,\n workdir: state.instanceDir(instanceName),\n runOpts: { stdio: \"inherit\" },\n },\n stop: {\n cmd: \"docker\",\n args: [\"compose\", `--file=${composeMinio}`, \"down\"],\n envs: envs,\n workdir: state.instanceDir(instanceName),\n runOpts: { stdio: \"inherit\" },\n },\n cleanup: {\n cmd: \"docker\",\n args: [\"compose\", `--file=${composeMinio}`, \"down\", \"--volumes\", \"--remove-orphans\"],\n envs: envs,\n workdir: state.instanceDir(instanceName),\n runOpts: { stdio: \"inherit\" },\n },\n };\n }\n\n public createDockerS3(\n instanceName: string,\n localRoot: string,\n options?: {\n image?: string;\n version?: string;\n platformOverride?: string;\n\n logLevel?: string;\n auth?: types.authOptions;\n\n license?: string;\n licenseFile?: string;\n\n grpcPort?: number;\n grpcAddr?: string;\n\n presignHost?: string;\n\n monitoringPort?: number;\n monitoringAddr?: string;\n\n debugPort?: number;\n debugAddr?: string;\n\n s3Port?: number;\n s3ConsolePort?: number;\n\n customMounts?: { hostPath: string; containerPath?: string }[];\n\n backendCommands?: string[];\n },\n ): instanceInfo {\n this.logger.debug(\"creating platforma instance in 'docker s3' mode...\");\n\n const composeS3Path = pkg.assets(\"compose-backend.yaml\");\n const image = options?.image ?? pkg.plImageTag(options?.version);\n\n this.checkLicense(options?.license, options?.licenseFile);\n\n const storagePath = (...s: string[]) => path.join(localRoot, ...s);\n const storageDir = (s: string) => {\n const p = storagePath(s);\n util.ensureDir(p, { mode: \"0775\" });\n return p;\n };\n\n const logFilePath = storagePath(\"logs\", \"platforma.log\");\n if (!fs.existsSync(logFilePath)) {\n fs.mkdirSync(path.dirname(logFilePath), { recursive: true });\n fs.writeFileSync(logFilePath, \"\");\n }\n\n const presignHost = options?.presignHost ?? \"localhost\";\n const presignPort = options?.s3Port ?? 9000;\n\n const primary = plCfg.storageSettingsFromURL(\n `s3e://testuser:testpassword@minio:${presignPort}/platforma-primary-bucket`,\n );\n if (primary.type !== \"S3\") {\n throw new Error(\"primary storage must have 'S3' type in 'docker s3' configuration\");\n } else {\n primary.presignEndpoint = `http://${presignHost}:${presignPort}`;\n }\n\n const library = plCfg.storageSettingsFromURL(\n `s3e://testuser:testpassword@minio:${presignPort}/platforma-library-bucket`,\n );\n if (library.type !== \"S3\") {\n throw new Error(`${library.type} storage type is not supported for library storage`);\n } else {\n library.presignEndpoint = `http://${presignHost}:${presignPort}`;\n }\n\n const dbFSPath = storageDir(\"db\");\n const workFSPath = storageDir(\"work\");\n const usersFSPath = storagePath(\"users.htpasswd\");\n if (!fs.existsSync(usersFSPath)) {\n fs.copyFileSync(pkg.assets(\"users.htpasswd\"), usersFSPath);\n }\n\n const composeDstPath = storagePath(\"compose.yaml\");\n if (fs.existsSync(composeDstPath)) {\n this.logger.info(`replacing docker compose file ${composeDstPath}`);\n }\n\n const backendMounts: composeCfg.VolumeMountOption[] = [];\n for (const mnt of options?.customMounts ?? []) {\n backendMounts.push({\n hostPath: mnt.hostPath,\n containerPath: mnt.containerPath ?? mnt.hostPath,\n });\n }\n composeCfg.render(\n composeS3Path,\n composeDstPath,\n `pl-${instanceName}`,\n new Map([\n [\"minio\", {}],\n [\n \"backend\",\n {\n platform: options?.platformOverride,\n mounts: backendMounts,\n commands: options?.backendCommands,\n },\n ],\n ]),\n );\n\n const envs: NodeJS.ProcessEnv = {\n MINIO_IMAGE: \"quay.io/minio/minio\",\n MINIO_STORAGE: storageDir(\"minio\"),\n\n PL_IMAGE: image,\n\n PL_AUTH_HTPASSWD: usersFSPath,\n PL_LICENSE: options?.license,\n PL_LICENSE_FILE: options?.licenseFile,\n\n PL_LOG_LEVEL: options?.logLevel ?? \"info\",\n PL_LOG_DIR: path.dirname(logFilePath),\n PL_LOG_ROTATION_ENABLED: \"true\",\n\n PL_RUNNER_WD_CACHE_ON_FAILURE: \"1h\",\n\n PL_DATA_DB_ROOT: dbFSPath,\n PL_DATA_PRIMARY_ROOT: storageDir(\"primary\"),\n PL_DATA_LIBRARY_ROOT: storageDir(\"library\"),\n PL_DATA_WORKDIR_ROOT: workFSPath,\n\n // Mount packages storage as volume, because APFS is case-insensitive on Mac OS X and this breaks some pl software installation.\n // PL_DATA_PACKAGE_ROOT: storageDir('packages'),\n\n ...this.configureDockerStorage(\"primary\", primary),\n ...this.configureDockerStorage(\"library\", library),\n };\n\n if (options?.grpcAddr) {\n const addrParts = options.grpcAddr.split(\":\");\n if (addrParts.length === 2) {\n envs.PL_LISTEN_ADDRESS = addrParts[0];\n envs.PL_LISTEN_PORT = addrParts[1];\n } else {\n envs.PL_LISTEN_ADDRESS = options.grpcAddr;\n }\n } else if (options?.grpcPort) {\n envs.PL_LISTEN_PORT = options.grpcPort.toString();\n }\n\n if (options?.monitoringAddr) {\n const addrParts = options.monitoringAddr.split(\":\");\n if (addrParts.length === 2) {\n envs.PL_MONITORING_IP = addrParts[0];\n envs.PL_MONITORING_PORT = addrParts[1];\n } else {\n envs.PL_MONITORING_IP = options.monitoringAddr;\n }\n } else if (options?.monitoringPort) {\n envs.PL_MONITORING_PORT = options.monitoringPort.toString();\n }\n\n if (options?.debugAddr) {\n const addrParts = options.debugAddr.split(\":\");\n if (addrParts.length === 2) {\n envs.PL_DEBUG_IP = addrParts[0];\n envs.PL_DEBUG_PORT = addrParts[1];\n } else {\n envs.PL_DEBUG_IP = options.debugAddr;\n }\n } else if (options?.debugPort) {\n envs.PL_DEBUG_PORT = options.debugPort.toString();\n }\n\n if (options?.s3Port) envs.MINIO_PORT = options.s3Port.toString();\n if (options?.s3ConsolePort) envs.MINIO_CONSOLE_PORT = options.s3ConsolePort.toString();\n\n if (options?.auth) {\n if (options.auth.enabled) {\n envs[\"PL_NO_AUTH\"] = \"false\";\n } else {\n envs[\"PL_NO_AUTH\"] = \"true\";\n }\n if (options.auth.drivers) {\n for (const drv of options.auth.drivers) {\n if (drv.driver === \"htpasswd\") {\n envs[\"PL_AUTH_HTPASSWD\"] = path.resolve(drv.path);\n drv.path = \"/etc/platforma/users.htpasswd\";\n }\n }\n envs[\"PL_AUTH_DRIVERS\"] = JSON.stringify(options.auth.drivers);\n }\n }\n\n // Process additional backend commands\n if (options?.backendCommands && options.backendCommands.length > 0) {\n this.logger.debug(`Adding backend commands: ${options.backendCommands.join(\" \")}`);\n }\n\n state.setInstanceInfo(instanceName, {\n type: \"docker\",\n upCommands: [\n {\n cmd: \"docker\",\n args: [\n \"compose\",\n `--file=${composeDstPath}`,\n \"up\",\n \"--detach\",\n \"--remove-orphans\",\n \"--pull=missing\",\n ],\n envs: envs,\n runOpts: { stdio: \"inherit\" },\n },\n ],\n downCommands: [\n {\n cmd: \"docker\",\n args: [\"compose\", `--file=${composeDstPath}`, \"down\"],\n envs: envs,\n runOpts: { stdio: \"inherit\" },\n },\n ],\n cleanupCommands: [\n {\n cmd: \"docker\",\n args: [\"compose\", `--file=${composeDstPath}`, \"down\", \"--volumes\", \"--remove-orphans\"],\n envs: envs,\n runOpts: { stdio: \"inherit\" },\n },\n ],\n runInfo: {\n apiPort: options?.grpcPort,\n apiAddr: options?.grpcAddr,\n logPath: logFilePath,\n primary: primary,\n work: { type: \"FS\", rootPath: workFSPath },\n library: library,\n dbPath: dbFSPath,\n },\n });\n\n return state.getInstanceInfo(instanceName);\n }\n\n public createDocker(\n instanceName: string,\n localRoot: string,\n options?: {\n primaryStorageURL?: string;\n workStoragePath?: string;\n libraryStorageURL?: string;\n customMounts?: { hostPath: string; containerPath?: string }[];\n\n image?: string;\n version?: string;\n platformOverride?: string;\n\n logLevel?: string;\n\n auth?: types.authOptions;\n\n license?: string;\n licenseFile?: string;\n grpcPort?: number;\n grpcAddr?: string;\n\n monitoringPort?: number;\n monitoringAddr?: string;\n\n debugPort?: number;\n debugAddr?: string;\n\n backendCommands?: string[];\n },\n ): instanceInfo {\n this.logger.debug(\"creating platforma instance in 'docker' mode...\");\n\n const composeFSPath = pkg.assets(\"compose-backend.yaml\");\n const image = options?.image ?? pkg.plImageTag(options?.version);\n\n this.checkLicense(options?.license, options?.licenseFile);\n\n const storagePath = (...s: string[]) => path.join(localRoot, ...s);\n const storageDir = (s: string) => {\n const p = storagePath(s);\n util.ensureDir(p, { mode: \"0775\" });\n return p;\n };\n\n const logFilePath = storagePath(\"logs\", \"platforma.log\");\n if (!fs.existsSync(logFilePath)) {\n fs.mkdirSync(path.dirname(logFilePath), { recursive: true });\n fs.writeFileSync(logFilePath, \"\");\n }\n\n const dbFSPath = storageDir(\"db\");\n const primaryFSPath = storageDir(\"primary\");\n const libraryFSPath = storageDir(\"library\");\n const workFSPath = storageDir(\"work\");\n const usersFSPath = storagePath(\"users.htpasswd\");\n if (!fs.existsSync(usersFSPath)) {\n fs.copyFileSync(pkg.assets(\"users.htpasswd\"), usersFSPath);\n }\n\n const composeDstPath = storagePath(\"compose.yaml\");\n if (fs.existsSync(composeDstPath)) {\n this.logger.info(`replacing docker compose file ${composeDstPath}`);\n }\n\n const backendMounts: composeCfg.VolumeMountOption[] = [];\n for (const mnt of options?.customMounts ?? []) {\n backendMounts.push({\n hostPath: mnt.hostPath,\n containerPath: mnt.containerPath ?? mnt.hostPath,\n });\n }\n this.logger.debug(\n `Rendering docker compose file '${composeDstPath}' using '${composeFSPath}' as base template`,\n );\n composeCfg.render(\n composeFSPath,\n composeDstPath,\n `pl-${instanceName}`,\n new Map([\n [\n \"backend\",\n {\n platform: options?.platformOverride,\n mounts: backendMounts,\n commands: options?.backendCommands,\n },\n ],\n ]),\n );\n\n const primary = plCfg.storageSettingsFromURL(\n options?.primaryStorageURL ?? `file:${primaryFSPath}`,\n \".\",\n );\n const library = plCfg.storageSettingsFromURL(\n options?.libraryStorageURL ?? `file:${libraryFSPath}`,\n \".\",\n );\n\n const envs: NodeJS.ProcessEnv = {\n PL_IMAGE: image,\n PL_AUTH_HTPASSWD: usersFSPath,\n PL_LICENSE: options?.license,\n PL_LICENSE_FILE: options?.licenseFile,\n\n PL_LOG_LEVEL: options?.logLevel ?? \"info\",\n PL_LOG_DIR: path.dirname(logFilePath),\n PL_LOG_ROTATION_ENABLED: \"true\",\n\n PL_RUNNER_WD_CACHE_ON_FAILURE: \"1h\",\n\n PL_DATA_DB_ROOT: dbFSPath,\n PL_DATA_PRIMARY_ROOT: primaryFSPath,\n PL_DATA_LIBRARY_ROOT: libraryFSPath,\n PL_DATA_WORKDIR_ROOT: workFSPath,\n PL_DATA_PACKAGE_ROOT: storageDir(\"packages\"),\n\n ...this.configureDockerStorage(\"primary\", primary),\n ...this.configureDockerStorage(\"library\", library),\n };\n\n if (options?.grpcAddr) {\n const addrParts = options.grpcAddr.split(\":\");\n if (addrParts.length === 2) {\n envs.PL_LISTEN_ADDRESS = addrParts[0];\n envs.PL_LISTEN_PORT = addrParts[1];\n } else {\n envs.PL_LISTEN_ADDRESS = options.grpcAddr;\n }\n } else if (options?.grpcPort) {\n envs.PL_LISTEN_PORT = options.grpcPort.toString();\n }\n\n if (options?.monitoringAddr) {\n const addrParts = options.monitoringAddr.split(\":\");\n if (addrParts.length === 2) {\n envs.PL_MONITORING_IP = addrParts[0];\n envs.PL_MONITORING_PORT = addrParts[1];\n } else {\n envs.PL_MONITORING_IP = options.monitoringAddr;\n }\n } else if (options?.monitoringPort) {\n envs.PL_MONITORING_PORT = options.monitoringPort.toString();\n }\n\n if (options?.debugAddr) {\n const addrParts = options.debugAddr.split(\":\");\n if (addrParts.length === 2) {\n envs.PL_DEBUG_IP = addrParts[0];\n envs.PL_DEBUG_PORT = addrParts[1];\n } else {\n envs.PL_DEBUG_IP = options.debugAddr;\n }\n } else if (options?.debugPort) {\n envs.PL_DEBUG_PORT = options.debugPort.toString();\n }\n\n if (options?.auth) {\n if (options.auth.enabled) {\n envs[\"PL_NO_AUTH\"] = \"false\";\n } else {\n envs[\"PL_NO_AUTH\"] = \"true\";\n }\n if (options.auth.drivers) {\n for (const drv of options.auth.drivers) {\n if (drv.driver === \"htpasswd\") {\n envs[\"PL_AUTH_HTPASSWD\"] = path.resolve(drv.path);\n drv.path = \"/etc/platforma/users.htpasswd\";\n }\n }\n envs[\"PL_AUTH_DRIVERS\"] = JSON.stringify(options.auth.drivers);\n }\n }\n\n // Process additional backend commands\n if (options?.backendCommands && options.backendCommands.length > 0) {\n this.logger.debug(`Adding backend commands: ${options.backendCommands.join(\" \")}`);\n }\n\n state.setInstanceInfo(instanceName, {\n type: \"docker\",\n upCommands: [\n {\n cmd: \"docker\",\n args: [\n \"compose\",\n `--file=${composeDstPath}`,\n \"up\",\n \"--detach\",\n \"--remove-orphans\",\n \"--pull=missing\",\n ],\n envs: envs,\n runOpts: { stdio: \"inherit\" },\n },\n ],\n downCommands: [\n {\n cmd: \"docker\",\n args: [\"compose\", `--file=${composeDstPath}`, \"down\"],\n envs: envs,\n runOpts: { stdio: \"inherit\" },\n },\n ],\n cleanupCommands: [\n {\n cmd: \"docker\",\n args: [\"compose\", `--file=${composeDstPath}`, \"down\", \"--volumes\", \"--remove-orphans\"],\n envs: envs,\n runOpts: { stdio: \"inherit\" },\n },\n ],\n runInfo: {\n apiPort: options?.grpcPort,\n apiAddr: options?.grpcAddr,\n logPath: logFilePath,\n primary: primary,\n work: { type: \"FS\", rootPath: workFSPath },\n library: library,\n dbPath: dbFSPath,\n },\n });\n\n return state.getInstanceInfo(instanceName);\n }\n\n public cleanupInstance(instanceName?: string) {\n const removeWarns: string[] = [];\n const instancesToDrop = new Map<string, instanceInfo>();\n let warnMessage: string = \"\";\n\n if (instanceName) {\n const instance = state.getInstanceInfo(instanceName);\n instancesToDrop.set(instanceName, instance);\n const iType = instance.type;\n switch (iType) {\n case \"docker\": {\n removeWarns.push(\n `docker service 'pl-${instanceName}', including all its volumes and data in '${state.instanceDir(instanceName)}' will be destroyed`,\n );\n break;\n }\n case \"process\": {\n removeWarns.push(`directory '${state.instanceDir(instanceName)}' would be deleted`);\n if (instance.downCommands) {\n removeWarns.push(\n `associated docker service, including all volumes and data will be destroyed`,\n );\n }\n break;\n }\n default:\n util.assertNever(iType);\n }\n\n if (instanceName === state.currentInstanceName) {\n removeWarns.push(\n \"last command run cache ('pl-dev start' shorthand will stop working until next full start command call)\",\n );\n }\n\n warnMessage = `\nYou are going to reset the state of platforma service '${instanceName}':\n - ${removeWarns.join(\"\\n - \")}\n`;\n } else {\n for (const iName of state.instanceList) {\n instancesToDrop.set(iName, state.getInstanceInfo(iName));\n }\n\n removeWarns.push(\n \"last command run cache ('pl-dev start' shorthand will stop working until next full start command call)\",\n `all service configurations stored in: ${state.instanceDir()} (including all associated docker containers and volumes)`,\n );\n\n warnMessage = `\nYou are going to reset the state of all platforma services configured with pl-bootstrap package.\n - ${removeWarns.join(\"\\n - \")}\n`;\n }\n\n this.logger.warn(warnMessage);\n if (!util.askYN(\"Are you sure?\")) {\n this.logger.info(\"Reset action was canceled\");\n return;\n }\n\n for (const [name, instance] of instancesToDrop.entries()) {\n if (instance.cleanupCommands.length) {\n this.logger.info(`Wiping instance ${name} services`);\n const result = run.runCommands(this.logger, instance.cleanupCommands);\n checkRunError(result.executed, `failed to wipe instance ${name} services`);\n }\n\n this.logger.info(`Destroying instance '${name}' data directory`);\n fs.rmSync(state.instanceDir(name), { recursive: true, force: true });\n }\n\n if (!instanceName) {\n this.logger.info(`Destroying state dir '${state.path()}'`);\n fs.rmSync(state.path(), { recursive: true, force: true });\n }\n\n this.logger.info(\n `\\nIf you want to remove all downloaded platforma binaries, delete '${state.binaries()}' dir manually\\n`,\n );\n }\n\n public mergeLicenseEnvs(flags: { license?: string; \"license-file\"?: string }) {\n if (flags.license === undefined) {\n if ((process.env.MI_LICENSE ?? \"\") != \"\") flags.license = process.env.MI_LICENSE;\n else if ((process.env.PL_LICENSE ?? \"\") != \"\") flags.license = process.env.PL_LICENSE;\n }\n\n // set 'license-file' only if license is still undefined\n if (flags[\"license-file\"] === undefined && flags.license === undefined) {\n if ((process.env.MI_LICENSE_FILE ?? \"\") != \"\")\n flags[\"license-file\"] = process.env.MI_LICENSE_FILE;\n else if ((process.env.PL_LICENSE_FILE ?? \"\") != \"\")\n flags[\"license-file\"] = process.env.PL_LICENSE_FILE;\n else if (fs.existsSync(path.resolve(os.homedir(), \".pl.license\")))\n flags[\"license-file\"] = path.resolve(os.homedir(), \".pl.license\");\n }\n }\n\n public initAuthDriversList(\n flags: {\n \"auth-htpasswd-file\"?: string;\n\n \"auth-ldap-server\"?: string;\n \"auth-ldap-default-dn\"?: string;\n },\n workdir: string,\n ): types.authDriver[] | undefined {\n const authDrivers: types.authDriver[] = [];\n if (flags[\"auth-htpasswd-file\"]) {\n authDrivers.push({\n driver: \"htpasswd\",\n path: path.resolve(workdir, flags[\"auth-htpasswd-file\"]),\n });\n }\n\n if (Boolean(flags[\"auth-ldap-server\"]) !== Boolean(flags[\"auth-ldap-default-dn\"])) {\n throw new Error(\n \"LDAP auth settings require both 'server' and 'default DN' options to be set\",\n );\n }\n\n if (flags[\"auth-ldap-server\"]) {\n authDrivers.push({\n driver: \"ldap\",\n serverUrl: flags[\"auth-ldap-server\"],\n defaultDN: flags[\"auth-ldap-default-dn\"]!,\n });\n }\n\n if (authDrivers.length === 0) {\n return undefined;\n }\n\n return [{ driver: \"jwt\", key: this.getLastJwt() }, ...authDrivers] as types.authDriver[];\n }\n\n /** Gets the last stored JWT secret key or generates it and stores in a file. */\n public getLastJwt() {\n const jwtFile = state.path(\"auth.jwt\");\n const encoding = \"utf-8\";\n\n let lastJwt = \"\";\n if (fs.existsSync(jwtFile)) {\n lastJwt = fs.readFileSync(jwtFile, { encoding });\n }\n\n if (lastJwt == \"\") {\n lastJwt = util.randomStr(64);\n fs.writeFileSync(jwtFile, lastJwt, { encoding });\n }\n\n return lastJwt;\n }\n\n private checkLicense(value?: string, file?: string) {\n if (value !== undefined && value != \"\") return;\n\n if (file !== undefined && file != \"\") return;\n\n this.logger.error(`A license for Platforma Backend must be set.\n\nYou can provide the license directly using the '--license' flag\nor use the '--license-file' flag if the license is stored in a file.\n\nAlternatively, you can set it via the environment variables 'MI_LICENSE' or 'PL_LICENSE'.\n\nThe license file can also be set with the variables 'MI_LICENSE_FILE' or 'PL_LICENSE_FILE',\nor stored in '$HOME/.pl.license'.\n\nYou can obtain the license from \"https://platforma.bio/getlicense\".`);\n\n throw new Error(`The license was not provided.`);\n }\n\n private configureDockerStorage(\n storageID: string,\n storage: types.storageOptions,\n ): NodeJS.ProcessEnv {\n const envs: NodeJS.ProcessEnv = {};\n const sType = storage.type;\n storageID = storageID.toUpperCase();\n\n switch (sType) {\n case \"S3\":\n switch (storageID) {\n case \"PRIMARY\": {\n // Construct the S3 URL for primary storage\n if (storage.endpoint && storage.bucketName) {\n envs[\"PL_PRIMARY_STORAGE_S3\"] = `${storage.endpoint}${storage.bucketName}`;\n }\n if (storage.endpoint) envs[\"PL_PRIMARY_STORAGE_S3_ENDPOINT\"] = storage.endpoint;\n if (storage.presignEndpoint)\n envs[\"PL_PRIMARY_STORAGE_S3_EXTERNAL_ENDPOINT\"] = storage.presignEndpoint;\n if (storage.region) envs[\"PL_PRIMARY_STORAGE_S3_REGION\"] = storage.region;\n if (storage.key) envs[\"PL_PRIMARY_STORAGE_S3_KEY\"] = storage.key;\n if (storage.secret) envs[\"PL_PRIMARY_STORAGE_S3_SECRET\"] = storage.secret;\n break;\n }\n case \"LIBRARY\": {\n // Construct the S3 URL for library storage\n if (storage.endpoint && storage.bucketName) {\n envs[\"PL_DATA_LIBRARY_S3_URL\"] = `library=${storage.endpoint}${storage.bucketName}`;\n }\n if (storage.endpoint)\n envs[\"PL_DATA_LIBRARY_S3_ENDPOINT\"] = `library=${storage.endpoint}`;\n if (storage.presignEndpoint)\n envs[\"PL_DATA_LIBRARY_S3_EXTERNAL_ENDPOINT\"] = `library=${storage.presignEndpoint}`;\n if (storage.region) envs[\"PL_DATA_LIBRARY_S3_REGION\"] = `library=${storage.region}`;\n if (storage.key) envs[\"PL_DATA_LIBRARY_S3_KEY\"] = `library=${storage.key}`;\n if (storage.secret) envs[\"PL_DATA_LIBRARY_S3_SECRET\"] = `library=${storage.secret}`;\n break;\n }\n default:\n throw new Error(`Unknown storage ID: ${storageID}`);\n }\n return envs;\n case \"FS\":\n switch (storageID) {\n case \"PRIMARY\":\n if (storage.rootPath) envs[\"PL_PRIMARY_STORAGE_FS\"] = storage.rootPath;\n break;\n case \"LIBRARY\":\n if (storage.rootPath) envs[\"PL_DATA_LIBRARY_FS_PATH\"] = storage.rootPath;\n break;\n default:\n throw new Error(`Unknown storage ID: ${storageID}`);\n }\n return envs;\n\n default:\n util.assertNever(sType);\n }\n\n return {};\n }\n\n private renderRunInfo(\n runInfo: {\n configPath?: string;\n apiPort?: number;\n apiAddr?: string;\n logPath?: string;\n dbPath?: string;\n primary?: types.storageOptions;\n work?: types.fsStorageOptions;\n library?: types.storageOptions;\n },\n indent: number = 10,\n ) {\n const report: string[] = [];\n\n const column = (t: string) => t.padStart(indent, \" \");\n if (runInfo.configPath) {\n report.push(`${column(\"config\")}: ${runInfo.configPath}`);\n }\n\n if (runInfo.apiAddr) {\n report.push(`${column(\"API\")}: ${runInfo.apiAddr}`);\n } else if (runInfo.apiPort) {\n report.push(`${column(\"API\")}: 127.0.0.1:${runInfo.apiPort.toString()}`);\n } else {\n report.push(`${column(\"API\")}: 127.0.0.1:6345`);\n }\n\n if (runInfo.logPath) {\n report.push(`${column(\"log\")}: ${runInfo.logPath}`);\n }\n\n const primaryType = runInfo.primary?.type;\n switch (primaryType) {\n case undefined:\n break;\n\n case \"FS\":\n report.push(`${column(\"primary\")}: ${runInfo.primary!.rootPath!}`);\n break;\n\n case \"S3\":\n report.push(\n `${column(\"primary\")}: S3 at '${runInfo.primary!.endpoint ?? \"AWS\"}', bucket '${runInfo.primary!.bucketName!}', prefix: '${runInfo.primary!.keyPrefix ?? \"\"}'`,\n );\n break;\n\n default:\n util.assertNever(primaryType);\n }\n\n const libraryType = runInfo.library?.type;\n switch (libraryType) {\n case undefined:\n break;\n\n case \"FS\":\n report.push(`${column(\"library\")}: ${runInfo.library!.rootPath!}`);\n break;\n\n case \"S3\":\n report.push(\n `${column(\"library\")}: S3 at '${runInfo.library!.endpoint ?? \"AWS\"}', bucket '${runInfo.library!.bucketName!}', prefix: '${runInfo.library!.keyPrefix ?? \"\"}'`,\n );\n break;\n\n default:\n util.assertNever(libraryType);\n }\n\n if (runInfo.work) {\n report.push(`${column(\"workdirs\")}: ${runInfo.work.rootPath}`);\n }\n\n if (runInfo.dbPath) {\n report.push(`${column(\"db\")}: ${runInfo.dbPath}`);\n }\n\n return report.join(\"\\n\");\n }\n}\n\nexport function checkRunError(result: SpawnSyncReturns<Buffer>[], message?: string) {\n for (const buffer of result) {\n if (buffer.error) {\n throw buffer.error;\n }\n\n const msg = message ?? \"failed to run command\";\n\n if (buffer.status !== 0) {\n throw new Error(`${msg}, process exited with code '${buffer.status}'`);\n }\n }\n}\n\nexport type createLocalOptions = {\n version?: string;\n sourcesPath?: string;\n binaryPath?: string;\n configPath?: string;\n configOptions?: plCfg.plOptions;\n workdir?: string;\n\n primaryURL?: string;\n libraryURL?: string;\n\n backendCommands?: string[];\n};\n\nexport type createLocalFSOptions = createLocalOptions;\n\nexport type createLocalS3Options = createLocalOptions & {\n minioPort?: number;\n minioConsolePort?: number;\n};\n"],"mappings":"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"}
package/dist/core.js CHANGED
@@ -10,6 +10,7 @@ import fs from "node:fs";
10
10
  import path from "node:path";
11
11
  //#region src/core.ts
12
12
  var Core = class {
13
+ logger;
13
14
  constructor(logger) {
14
15
  this.logger = logger;
15
16
  }
@@ -186,7 +187,7 @@ var Core = class {
186
187
  this.logger.debug(" creating docker compose for minio service...");
187
188
  const composeSrc = assets("compose-backend.yaml");
188
189
  const composeMinio = state_default.instanceDir(instanceName, "compose-minio.yaml");
189
- render(composeSrc, composeMinio, `pl-${instanceName}-minio`, new Map([["minio", {}]]), { dropVolumes: true });
190
+ render(composeSrc, composeMinio, `pl-${instanceName}-minio`, /* @__PURE__ */ new Map([["minio", {}]]), { dropVolumes: true });
190
191
  const version = options?.version ? `:${options.version}` : "";
191
192
  this.logger.debug(` minio version: ${version}`);
192
193
  const image = options?.image ?? `quay.io/minio/minio${version}`;
@@ -277,7 +278,7 @@ var Core = class {
277
278
  hostPath: mnt.hostPath,
278
279
  containerPath: mnt.containerPath ?? mnt.hostPath
279
280
  });
280
- render(composeS3Path, composeDstPath, `pl-${instanceName}`, new Map([["minio", {}], ["backend", {
281
+ render(composeS3Path, composeDstPath, `pl-${instanceName}`, /* @__PURE__ */ new Map([["minio", {}], ["backend", {
281
282
  platform: options?.platformOverride,
282
283
  mounts: backendMounts,
283
284
  commands: options?.backendCommands
@@ -417,7 +418,7 @@ var Core = class {
417
418
  containerPath: mnt.containerPath ?? mnt.hostPath
418
419
  });
419
420
  this.logger.debug(`Rendering docker compose file '${composeDstPath}' using '${composeFSPath}' as base template`);
420
- render(composeFSPath, composeDstPath, `pl-${instanceName}`, new Map([["backend", {
421
+ render(composeFSPath, composeDstPath, `pl-${instanceName}`, /* @__PURE__ */ new Map([["backend", {
421
422
  platform: options?.platformOverride,
422
423
  mounts: backendMounts,
423
424
  commands: options?.backendCommands
@@ -723,6 +724,6 @@ function checkRunError(result, message) {
723
724
  }
724
725
  }
725
726
  //#endregion
726
- export { Core as default };
727
+ export { checkRunError, Core as default };
727
728
 
728
729
  //# sourceMappingURL=core.js.map