@iobroker/js-controller-cli 7.2.3-alpha.9-20260711-3ea5f3c89 → 7.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/index.js +3 -3
- package/build/cjs/lib/_Types.d.ts +1 -8
- package/build/cjs/lib/cli/cliCert.d.ts +4 -7
- package/build/cjs/lib/cli/cliCert.js +6 -10
- package/build/cjs/lib/cli/cliCert.js.map +2 -2
- package/build/cjs/lib/cli/cliCommand.d.ts +14 -45
- package/build/cjs/lib/cli/cliCommand.js +1 -8
- package/build/cjs/lib/cli/cliCommand.js.map +2 -2
- package/build/cjs/lib/cli/cliCompact.d.ts +2 -5
- package/build/cjs/lib/cli/cliCompact.js +2 -9
- package/build/cjs/lib/cli/cliCompact.js.map +2 -2
- package/build/cjs/lib/cli/cliDebug.d.ts +2 -5
- package/build/cjs/lib/cli/cliDebug.js +1 -8
- package/build/cjs/lib/cli/cliDebug.js.map +2 -2
- package/build/cjs/lib/cli/cliHost.d.ts +10 -13
- package/build/cjs/lib/cli/cliHost.js +5 -13
- package/build/cjs/lib/cli/cliHost.js.map +2 -2
- package/build/cjs/lib/cli/cliLogs.d.ts +3 -9
- package/build/cjs/lib/cli/cliLogs.js +1 -12
- package/build/cjs/lib/cli/cliLogs.js.map +2 -2
- package/build/cjs/lib/cli/cliMessage.d.ts +1 -2
- package/build/cjs/lib/cli/cliMessage.js +0 -5
- package/build/cjs/lib/cli/cliMessage.js.map +2 -2
- package/build/cjs/lib/cli/cliObjects.d.ts +18 -21
- package/build/cjs/lib/cli/cliObjects.js +33 -51
- package/build/cjs/lib/cli/cliObjects.js.map +2 -2
- package/build/cjs/lib/cli/cliPlugin.d.ts +3 -3
- package/build/cjs/lib/cli/cliPlugin.js +0 -6
- package/build/cjs/lib/cli/cliPlugin.js.map +2 -2
- package/build/cjs/lib/cli/cliProcess.d.ts +4 -8
- package/build/cjs/lib/cli/cliProcess.js +16 -27
- package/build/cjs/lib/cli/cliProcess.js.map +3 -3
- package/build/cjs/lib/cli/cliStates.d.ts +4 -7
- package/build/cjs/lib/cli/cliStates.js +6 -14
- package/build/cjs/lib/cli/cliStates.js.map +2 -2
- package/build/cjs/lib/cli/cliTools.js +0 -11
- package/build/cjs/lib/cli/cliTools.js.map +1 -1
- package/build/cjs/lib/cli/messages.js +46 -47
- package/build/cjs/lib/cli/messages.js.map +1 -1
- package/build/cjs/lib/setup/customError.d.ts +0 -4
- package/build/cjs/lib/setup/customError.js +0 -7
- package/build/cjs/lib/setup/customError.js.map +2 -2
- package/build/cjs/lib/setup/dbConnection.js +64 -69
- package/build/cjs/lib/setup/dbConnection.js.map +3 -3
- package/build/cjs/lib/setup/formatters.d.ts +4 -4
- package/build/cjs/lib/setup/formatters.js +0 -5
- package/build/cjs/lib/setup/formatters.js.map +2 -2
- package/build/cjs/lib/setup/multihostClient.js +2 -6
- package/build/cjs/lib/setup/multihostClient.js.map +1 -1
- package/build/cjs/lib/setup/pluginInfos.d.ts +0 -5
- package/build/cjs/lib/setup/pluginInfos.js +0 -2
- package/build/cjs/lib/setup/pluginInfos.js.map +2 -2
- package/build/cjs/lib/setup/setupBackup.d.ts +0 -34
- package/build/cjs/lib/setup/setupBackup.js +12 -46
- package/build/cjs/lib/setup/setupBackup.js.map +3 -3
- package/build/cjs/lib/setup/setupInstall.d.ts +15 -38
- package/build/cjs/lib/setup/setupInstall.js +26 -44
- package/build/cjs/lib/setup/setupInstall.js.map +2 -2
- package/build/cjs/lib/setup/setupLicense.d.ts +0 -8
- package/build/cjs/lib/setup/setupLicense.js +0 -7
- package/build/cjs/lib/setup/setupLicense.js.map +2 -2
- package/build/cjs/lib/setup/setupList.d.ts +1 -55
- package/build/cjs/lib/setup/setupList.js +24 -78
- package/build/cjs/lib/setup/setupList.js.map +3 -3
- package/build/cjs/lib/setup/setupMultihost.js +9 -12
- package/build/cjs/lib/setup/setupMultihost.js.map +3 -3
- package/build/cjs/lib/setup/setupPacketManager.d.ts +0 -10
- package/build/cjs/lib/setup/setupPacketManager.js +6 -16
- package/build/cjs/lib/setup/setupPacketManager.js.map +2 -2
- package/build/cjs/lib/setup/setupRepo.d.ts +0 -6
- package/build/cjs/lib/setup/setupRepo.js +11 -28
- package/build/cjs/lib/setup/setupRepo.js.map +2 -2
- package/build/cjs/lib/setup/setupSetup.d.ts +0 -27
- package/build/cjs/lib/setup/setupSetup.js +33 -52
- package/build/cjs/lib/setup/setupSetup.js.map +3 -3
- package/build/cjs/lib/setup/setupUpgrade.d.ts +2 -8
- package/build/cjs/lib/setup/setupUpgrade.js +10 -19
- package/build/cjs/lib/setup/setupUpgrade.js.map +2 -2
- package/build/cjs/lib/setup/setupUpload.d.ts +1 -72
- package/build/cjs/lib/setup/setupUpload.js +6 -74
- package/build/cjs/lib/setup/setupUpload.js.map +2 -2
- package/build/cjs/lib/setup/setupUsers.d.ts +14 -23
- package/build/cjs/lib/setup/setupUsers.js +15 -58
- package/build/cjs/lib/setup/setupUsers.js.map +2 -2
- package/build/cjs/lib/setup/setupVendor.d.ts +1 -9
- package/build/cjs/lib/setup/setupVendor.js +6 -13
- package/build/cjs/lib/setup/setupVendor.js.map +2 -2
- package/build/cjs/lib/setup/setupVisDebug.d.ts +2 -11
- package/build/cjs/lib/setup/setupVisDebug.js +15 -21
- package/build/cjs/lib/setup/setupVisDebug.js.map +3 -3
- package/build/cjs/lib/setup/utils.d.ts +1 -1
- package/build/cjs/lib/setup/utils.js +9 -13
- package/build/cjs/lib/setup/utils.js.map +3 -3
- package/build/cjs/lib/setup.js +330 -269
- package/build/cjs/lib/setup.js.map +3 -3
- package/build/esm/lib/_Types.d.ts +1 -8
- package/build/esm/lib/_Types.d.ts.map +1 -1
- package/build/esm/lib/cli/cliCert.d.ts +4 -7
- package/build/esm/lib/cli/cliCert.d.ts.map +1 -1
- package/build/esm/lib/cli/cliCert.js +6 -6
- package/build/esm/lib/cli/cliCert.js.map +1 -1
- package/build/esm/lib/cli/cliCommand.d.ts +14 -45
- package/build/esm/lib/cli/cliCommand.d.ts.map +1 -1
- package/build/esm/lib/cli/cliCommand.js +1 -4
- package/build/esm/lib/cli/cliCommand.js.map +1 -1
- package/build/esm/lib/cli/cliCompact.d.ts +2 -5
- package/build/esm/lib/cli/cliCompact.d.ts.map +1 -1
- package/build/esm/lib/cli/cliCompact.js +2 -5
- package/build/esm/lib/cli/cliCompact.js.map +1 -1
- package/build/esm/lib/cli/cliDebug.d.ts +2 -5
- package/build/esm/lib/cli/cliDebug.d.ts.map +1 -1
- package/build/esm/lib/cli/cliDebug.js +1 -4
- package/build/esm/lib/cli/cliDebug.js.map +1 -1
- package/build/esm/lib/cli/cliHost.d.ts +10 -13
- package/build/esm/lib/cli/cliHost.d.ts.map +1 -1
- package/build/esm/lib/cli/cliHost.js +5 -8
- package/build/esm/lib/cli/cliHost.js.map +1 -1
- package/build/esm/lib/cli/cliLogs.d.ts +3 -9
- package/build/esm/lib/cli/cliLogs.d.ts.map +1 -1
- package/build/esm/lib/cli/cliLogs.js +1 -8
- package/build/esm/lib/cli/cliLogs.js.map +1 -1
- package/build/esm/lib/cli/cliMessage.d.ts +1 -2
- package/build/esm/lib/cli/cliMessage.d.ts.map +1 -1
- package/build/esm/lib/cli/cliMessage.js +0 -1
- package/build/esm/lib/cli/cliMessage.js.map +1 -1
- package/build/esm/lib/cli/cliObjects.d.ts +18 -21
- package/build/esm/lib/cli/cliObjects.d.ts.map +1 -1
- package/build/esm/lib/cli/cliObjects.js +38 -44
- package/build/esm/lib/cli/cliObjects.js.map +1 -1
- package/build/esm/lib/cli/cliPlugin.d.ts +3 -3
- package/build/esm/lib/cli/cliPlugin.d.ts.map +1 -1
- package/build/esm/lib/cli/cliPlugin.js +1 -1
- package/build/esm/lib/cli/cliPlugin.js.map +1 -1
- package/build/esm/lib/cli/cliProcess.d.ts +4 -8
- package/build/esm/lib/cli/cliProcess.d.ts.map +1 -1
- package/build/esm/lib/cli/cliProcess.js +4 -7
- package/build/esm/lib/cli/cliProcess.js.map +1 -1
- package/build/esm/lib/cli/cliStates.d.ts +4 -7
- package/build/esm/lib/cli/cliStates.d.ts.map +1 -1
- package/build/esm/lib/cli/cliStates.js +2 -6
- package/build/esm/lib/cli/cliStates.js.map +1 -1
- package/build/esm/lib/setup/customError.d.ts +0 -4
- package/build/esm/lib/setup/customError.d.ts.map +1 -1
- package/build/esm/lib/setup/customError.js +0 -3
- package/build/esm/lib/setup/customError.js.map +1 -1
- package/build/esm/lib/setup/dbConnection.d.ts.map +1 -1
- package/build/esm/lib/setup/dbConnection.js +13 -10
- package/build/esm/lib/setup/dbConnection.js.map +1 -1
- package/build/esm/lib/setup/formatters.d.ts +4 -4
- package/build/esm/lib/setup/formatters.js +4 -4
- package/build/esm/lib/setup/pluginInfos.d.ts +0 -5
- package/build/esm/lib/setup/pluginInfos.d.ts.map +1 -1
- package/build/esm/lib/setup/pluginInfos.js +0 -5
- package/build/esm/lib/setup/pluginInfos.js.map +1 -1
- package/build/esm/lib/setup/setupBackup.d.ts +0 -34
- package/build/esm/lib/setup/setupBackup.d.ts.map +1 -1
- package/build/esm/lib/setup/setupBackup.js +12 -46
- package/build/esm/lib/setup/setupBackup.js.map +1 -1
- package/build/esm/lib/setup/setupInstall.d.ts +15 -38
- package/build/esm/lib/setup/setupInstall.d.ts.map +1 -1
- package/build/esm/lib/setup/setupInstall.js +24 -40
- package/build/esm/lib/setup/setupInstall.js.map +1 -1
- package/build/esm/lib/setup/setupLicense.d.ts +0 -8
- package/build/esm/lib/setup/setupLicense.d.ts.map +1 -1
- package/build/esm/lib/setup/setupLicense.js +0 -6
- package/build/esm/lib/setup/setupLicense.js.map +1 -1
- package/build/esm/lib/setup/setupList.d.ts +1 -55
- package/build/esm/lib/setup/setupList.d.ts.map +1 -1
- package/build/esm/lib/setup/setupList.js +8 -61
- package/build/esm/lib/setup/setupList.js.map +1 -1
- package/build/esm/lib/setup/setupMultihost.d.ts.map +1 -1
- package/build/esm/lib/setup/setupMultihost.js +6 -5
- package/build/esm/lib/setup/setupMultihost.js.map +1 -1
- package/build/esm/lib/setup/setupPacketManager.d.ts +0 -10
- package/build/esm/lib/setup/setupPacketManager.d.ts.map +1 -1
- package/build/esm/lib/setup/setupPacketManager.js +0 -9
- package/build/esm/lib/setup/setupPacketManager.js.map +1 -1
- package/build/esm/lib/setup/setupRepo.d.ts +0 -6
- package/build/esm/lib/setup/setupRepo.d.ts.map +1 -1
- package/build/esm/lib/setup/setupRepo.js +14 -30
- package/build/esm/lib/setup/setupRepo.js.map +1 -1
- package/build/esm/lib/setup/setupSetup.d.ts +0 -27
- package/build/esm/lib/setup/setupSetup.d.ts.map +1 -1
- package/build/esm/lib/setup/setupSetup.js +21 -36
- package/build/esm/lib/setup/setupSetup.js.map +1 -1
- package/build/esm/lib/setup/setupUpgrade.d.ts +2 -8
- package/build/esm/lib/setup/setupUpgrade.d.ts.map +1 -1
- package/build/esm/lib/setup/setupUpgrade.js +6 -14
- package/build/esm/lib/setup/setupUpgrade.js.map +1 -1
- package/build/esm/lib/setup/setupUpload.d.ts +1 -72
- package/build/esm/lib/setup/setupUpload.d.ts.map +1 -1
- package/build/esm/lib/setup/setupUpload.js +5 -72
- package/build/esm/lib/setup/setupUpload.js.map +1 -1
- package/build/esm/lib/setup/setupUsers.d.ts +14 -23
- package/build/esm/lib/setup/setupUsers.d.ts.map +1 -1
- package/build/esm/lib/setup/setupUsers.js +14 -56
- package/build/esm/lib/setup/setupUsers.js.map +1 -1
- package/build/esm/lib/setup/setupVendor.d.ts +1 -9
- package/build/esm/lib/setup/setupVendor.d.ts.map +1 -1
- package/build/esm/lib/setup/setupVendor.js +1 -7
- package/build/esm/lib/setup/setupVendor.js.map +1 -1
- package/build/esm/lib/setup/setupVisDebug.d.ts +2 -11
- package/build/esm/lib/setup/setupVisDebug.d.ts.map +1 -1
- package/build/esm/lib/setup/setupVisDebug.js +14 -21
- package/build/esm/lib/setup/setupVisDebug.js.map +1 -1
- package/build/esm/lib/setup/utils.d.ts +1 -1
- package/build/esm/lib/setup/utils.d.ts.map +1 -1
- package/build/esm/lib/setup/utils.js +4 -2
- package/build/esm/lib/setup/utils.js.map +1 -1
- package/build/esm/lib/setup.d.ts.map +1 -1
- package/build/esm/lib/setup.js +211 -162
- package/build/esm/lib/setup.js.map +1 -1
- package/build/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +14 -14
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/cli/cliProcess.ts"],
|
|
4
|
-
"sourcesContent": ["import fs from 'fs-extra';\nimport path from 'node:path';\nimport os from 'node:os';\nimport { spawn } from 'node:child_process';\nimport deepClone from 'deep-clone';\nimport { setTimeout as wait } from 'node:timers/promises';\n\nimport {\n isLocalStatesDbServer,\n isLocalObjectsDbServer,\n getInstancesOrderedByStartPrio,\n tools,\n EXIT_CODES,\n} from '@iobroker/js-controller-common';\nimport * as CLI from '@/lib/cli/messages.js';\nimport { CLICommand } from '@/lib/cli/cliCommand.js';\nimport { getObjectFrom, getInstanceName, normalizeAdapterName, enumInstances } from '@/lib/cli/cliTools.js';\nimport type { Client as ObjectsClient } from '@iobroker/db-objects-redis';\nimport type { Client as StatesClient } from '@iobroker/db-states-redis';\nimport type { CLICommandOptions } from '@/lib/cli/cliCommand.js';\n\n/** Time to wait after killing pid until process is assumed as stopped */\nconst TRY_KILL_WAIT_MS = 5_000;\n\n// The root of this project. Change this when moving code to another directory\nconst rootDir = tools.getControllerDir();\nconst killAllScriptPath = path.join(rootDir, 'killall.sh');\n\n/** Command ioBroker process control (start/stop/restart/status) ... */\nexport class CLIProcess extends CLICommand {\n /**\n * @param options The command options including context and parameters\n */\n constructor(options: CLICommandOptions) {\n super(options);\n }\n\n // These CLI commands have no subcommands, but belong together thematically\n // (start/stop/restart/status)\n\n /**\n * Starts one or more adapters or the js-controller\n *\n * @param args parsed cli arguments\n */\n async start(args: string[]): Promise<void> {\n const adapterName = normalizeAdapterName(args[0]);\n if (!adapterName) {\n await this.startJSController();\n this.options.callback();\n } else if (adapterName === 'all') {\n this.setAllAdaptersEnabled(true);\n } else if (/\\.\\d+$/.test(adapterName)) {\n this.setAdapterInstanceEnabled(adapterName, true);\n } else {\n this.setAdapterEnabled(adapterName, true);\n }\n }\n\n /**\n * Restarts one or more instances or the js-controller\n *\n * @param args parsed cli arguments\n */\n async restart(args: string[]): Promise<void> {\n const adapterName = normalizeAdapterName(args[0]);\n if (!adapterName) {\n await this.restartJSController();\n this.options.callback();\n } else if (/\\.\\d+$/.test(adapterName)) {\n this.setAdapterInstanceEnabled(adapterName, true, /* restartIfRunning */ true);\n } else {\n this.setAdapterEnabled(adapterName, true, /* restartIfRunning */ true);\n }\n }\n\n /**\n * Stops one or more adapters or the js-controller\n *\n * @param args parsed cli arguments\n */\n async stop(args: string[]): Promise<void> {\n const adapterName = normalizeAdapterName(args[0]);\n if (adapterName === undefined) {\n await CLIProcess.stopJSController();\n this.options.callback();\n } else if (adapterName === 'all') {\n this.setAllAdaptersEnabled(false);\n } else if (/\\.\\d+$/.test(adapterName)) {\n this.setAdapterInstanceEnabled(adapterName, false);\n } else {\n this.setAdapterEnabled(adapterName, false);\n }\n }\n\n /**\n * Starts or stops all adapters\n *\n * @param enabled if adapters should be started or stopped\n */\n setAllAdaptersEnabled(enabled: boolean): void {\n const { callback, dbConnect } = this.options;\n dbConnect(async params => {\n const { objects } = params;\n // Enumerate all adapter instances\n const instances = await getInstancesOrderedByStartPrio(objects, console);\n // Create a promise for each. setInstanceEnabled only starts/stops when necessary\n const instancePromises = instances\n .filter(obj => obj.common.enabled !== enabled)\n .map(obj => setInstanceEnabled(objects, obj, enabled));\n // wait for all instances to be started/stopped\n await Promise.all(instancePromises);\n callback();\n });\n }\n\n /**\n * Starts or stops a single or all instances of adapter.\n * If there are multiple instances, all will be started/stopped/restarted\n *\n * @param adapter The adapter to start\n * @param enabled If adapter should be started or stopped\n * @param [restartIfRunning] Whether running instances should be restarted\n */\n setAdapterEnabled(adapter: string, enabled: boolean, restartIfRunning?: boolean): void {\n const { callback, dbConnect } = this.options;\n dbConnect(async params => {\n const { objects } = params;\n\n try {\n // Enumerate all adapter instances\n const adapterInstances = await enumInstances(objects, adapter);\n if (adapterInstances.length === 0) {\n CLI.error.noInstancesFound(adapter);\n return void callback(EXIT_CODES.UNKNOWN_ERROR);\n }\n for (const instance of adapterInstances) {\n await setInstanceEnabled(objects, instance, enabled, restartIfRunning);\n }\n return void callback();\n } catch (e) {\n CLI.error.unknown(e.message);\n return void callback(EXIT_CODES.UNKNOWN_ERROR);\n }\n });\n }\n\n /**\n * Starts or stops a specific adapter instance\n *\n * @param instance The instance to start, e.g. \"adaptername.0\"\n * @param enabled If the instance should be started or stopped\n * @param [restartIfRunning] Whether running instances should be restarted\n */\n setAdapterInstanceEnabled(instance: string, enabled: boolean, restartIfRunning?: boolean): void {\n const { callback, dbConnect } = this.options;\n dbConnect(async params => {\n const { objects } = params;\n\n const obj = (await objects.getObject(`system.adapter.${instance}`)) as\n ioBroker.InstanceObject | ioBroker.AdapterObject;\n\n if (!obj || obj.type !== 'instance') {\n CLI.error.invalidInstance(instance);\n return void callback();\n }\n\n try {\n await setInstanceEnabled(objects, obj, enabled, restartIfRunning);\n return void callback();\n } catch (e) {\n CLI.error.unknown(e.message);\n return void callback(EXIT_CODES.UNKNOWN_ERROR);\n }\n });\n }\n\n /**\n * Starts the JS controller\n */\n async startJSController(): Promise<void> {\n let memoryLimitMB = 0;\n try {\n const config: ioBroker.IoBrokerJson = fs.readJSONSync(tools.getConfigFileName(), { encoding: 'utf-8' });\n if (config?.system?.memoryLimitMB) {\n memoryLimitMB = Math.round(config.system.memoryLimitMB);\n }\n } catch {\n console.warn('Cannot read memoryLimitMB');\n console.warn(\n `May be config file does not exist.\\nPlease call \"${tools.appName} setup first\" to initialize the settings.`,\n );\n }\n\n let pid: number | undefined;\n try {\n pid = await tools.getControllerPid();\n } catch (e) {\n console.error(`Could not read pid file: ${e.message}`);\n }\n\n if (pid) {\n console.log(`Controller is already running with pid ${pid}`);\n return;\n }\n\n const args = [path.join(rootDir, 'controller.js')];\n if (memoryLimitMB) {\n args.push(`--max-old-space-size=${memoryLimitMB}`);\n }\n\n const child = spawn(process.execPath, args, {\n env: process.env,\n detached: true,\n stdio: ['ignore', 'ignore', 'ignore', 'ipc'],\n windowsHide: true,\n cwd: rootDir,\n });\n\n child.unref();\n }\n\n /**\n * Stops the JS controller\n */\n static async stopJSController(): Promise<void> {\n let pid: number | undefined;\n try {\n pid = await tools.getControllerPid();\n } catch (e) {\n console.error(`Could not read pid file: ${e.message}`);\n }\n\n if (!pid) {\n return;\n }\n\n await tryKill(pid);\n\n // On non-Windows OSes start a KILLALL script\n // to make sure nothing keeps running\n if (os.platform() !== 'win32') {\n let data = '';\n if (fs.existsSync(killAllScriptPath)) {\n fs.chmodSync(killAllScriptPath, '777');\n const child = spawn(killAllScriptPath, [], { windowsHide: true });\n child.stdout.on('data', _data => (data += _data.toString().replace(/\\n/g, '')));\n child.stderr.on('data', _data => (data += _data.toString().replace(/\\n/g, '')));\n return new Promise(resolve => {\n child.on('exit', exitCode => {\n console.log(`Exit code for \"killall.sh\": ${exitCode}`);\n resolve();\n });\n });\n }\n console.log('No \"killall.sh\" script found. Just stop.');\n }\n\n try {\n // delete pids.txt file\n fs.unlinkSync(tools.getPidsFileName());\n } catch {\n // ignore\n }\n }\n\n /** Restarts the JS controller */\n async restartJSController(): Promise<void> {\n await CLIProcess.stopJSController();\n await this.startJSController();\n }\n\n /**\n * Checks if ioBroker is running or not\n *\n * @param args parsed cli arguments\n */\n status(args: string[]): void {\n const { callback, dbConnect } = this.options;\n const adapterName = normalizeAdapterName(args[0]);\n const showEntireConfig = adapterName === 'all';\n\n dbConnect(async params => {\n const { objects, states, config, isOffline } = params;\n\n if (!adapterName || showEntireConfig) {\n // we want host info or/and whole config\n const hostAlive = await states.getState(`system.host.${tools.getHostName()}.alive`);\n\n const alive = hostAlive ? (hostAlive.val as boolean) : false;\n CLI.success.controllerStatus(alive);\n console.log();\n\n const hasLocalStatesServer = await isLocalStatesDbServer(config.states.type, config.states.host);\n const hasLocalObjectsServer = await isLocalObjectsDbServer(config.objects.type, config.objects.host);\n\n if (!hasLocalStatesServer && !hasLocalObjectsServer) {\n CLI.success.systemStatus(!isOffline);\n }\n\n console.log();\n if (showEntireConfig) {\n await showAllInstancesStatus(states, objects);\n console.log();\n showConfig(config);\n } else {\n console.log(`Objects type: ${config.objects.type}`);\n console.log(`States type: ${config.states.type}`);\n }\n return void callback(isOffline ? EXIT_CODES.CONTROLLER_NOT_RUNNING : undefined);\n }\n // we want to know the status of an adapter\n if (/\\.\\d+$/.test(adapterName)) {\n // instance specified\n await showInstanceStatus(states, adapterName);\n return void callback();\n }\n const adapterInstances = await enumInstances(objects, adapterName);\n // If there are multiple instances of this adapter, ask the user to specify which one\n if (adapterInstances.length > 1) {\n CLI.error.specifyInstance(\n adapterName,\n adapterInstances.map(obj => obj._id.substring('system.adapter.'.length)),\n );\n return void callback(EXIT_CODES.INVALID_ADAPTER_ID);\n } else if (adapterInstances.length === 0) {\n CLI.error.noInstancesFound(adapterName);\n return void callback(EXIT_CODES.UNKNOWN_ERROR);\n }\n\n const instanceId = adapterInstances[0]._id.split('.').pop();\n await showInstanceStatus(states, `${adapterName}.${instanceId}`);\n return void callback();\n });\n }\n}\n\n/**\n * Outputs the status of all existing adapter instances\n *\n * @param states The States DB\n * @param objects The Objects DB\n */\nasync function showAllInstancesStatus(states: StatesClient, objects: ObjectsClient): Promise<void> {\n const allInstances = await enumInstances(objects);\n for (const instance of allInstances) {\n const instanceId = instance._id.split('.').pop();\n await showInstanceStatus(states, `${instance.common.name}.${instanceId}`);\n }\n return Promise.resolve();\n}\n\n/**\n * Outputs the status of an adapter instance\n *\n * @param states the states object\n * @param adapterInstance <adapterName>.<instanceId>\n */\nasync function showInstanceStatus(states: StatesClient, adapterInstance: string): Promise<void> {\n const state = await states.getState(`system.adapter.${adapterInstance}.alive`);\n if (state?.val === true) {\n console.log(`Instance \"${adapterInstance}\" is running`);\n } else {\n console.log(`Instance \"${adapterInstance}\" is not running`);\n }\n}\n\n/**\n * Prints the config file to the console\n *\n * @param config the ioBroker json file content\n * @param root The path of the current config section being printed\n */\nfunction showConfig(config: ioBroker.IoBrokerJson, root?: string[]): void {\n if (!tools.isObject(config)) {\n return;\n }\n root ||= [];\n const prefix = root.join('/').toUpperCase();\n for (const attr of Object.keys(config)) {\n if (attr.match(/comment$/i)) {\n continue;\n }\n if (typeof (config as Record<string, any>)[attr] === 'object') {\n const nextRoot = deepClone(root);\n nextRoot.push(attr);\n showConfig((config as Record<string, any>)[attr], nextRoot);\n } else {\n console.log(`${prefix}${(prefix ? '/' : '') + attr}: ${(config as Record<string, any>)[attr]}`);\n }\n }\n}\n\n/**\n * Sets the enabled state of an instance to the given value\n *\n * @param objects The objects DB\n * @param instanceObj The instance object to change\n * @param enabled Whether the instance should be enabled or not\n * @param force Whether the object should be updated always\n */\nasync function setInstanceEnabled(\n objects: ObjectsClient,\n instanceObj: ioBroker.InstanceObject,\n enabled: boolean,\n force?: boolean,\n): Promise<void> {\n if (!force && instanceObj.common.enabled === enabled) {\n return;\n }\n\n instanceObj.common.enabled = enabled;\n instanceObj.from = getObjectFrom();\n instanceObj.ts = Date.now();\n await objects.setObject(instanceObj._id, instanceObj);\n const instanceName = getInstanceName(instanceObj._id);\n if (enabled) {\n CLI.success.adapterStarted(instanceName);\n } else {\n CLI.success.adapterStopped(instanceName);\n }\n}\n\n/**\n * Kills a process by its PID\n *\n * @param pid The PID of the process to kill\n */\nasync function tryKill(pid: number): Promise<void> {\n try {\n process.kill(pid, 'SIGTERM');\n } catch (e) {\n console.warn(`Could not send \"SIGTERM\" to process ${pid}: ${e.message}`);\n }\n\n await wait(TRY_KILL_WAIT_MS);\n}\n"],
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["path", "fs", "os", "deepClone", "wait"]
|
|
4
|
+
"sourcesContent": ["import fs from 'fs-extra';\nimport path from 'node:path';\nimport os from 'node:os';\nimport { spawn } from 'node:child_process';\nimport deepClone from 'deep-clone';\nimport { setTimeout as wait } from 'node:timers/promises';\n\nimport {\n isLocalStatesDbServer,\n isLocalObjectsDbServer,\n getInstancesOrderedByStartPrio,\n} from '@iobroker/js-controller-common';\nimport { tools, EXIT_CODES } from '@iobroker/js-controller-common';\nimport * as CLI from '@/lib/cli/messages.js';\nimport { CLICommand } from '@/lib/cli/cliCommand.js';\nimport { getObjectFrom, getInstanceName, normalizeAdapterName, enumInstances } from '@/lib/cli/cliTools.js';\nimport type { Client as ObjectsClient } from '@iobroker/db-objects-redis';\nimport type { Client as StatesClient } from '@iobroker/db-states-redis';\nimport type { CLICommandOptions } from '@/lib/cli/cliCommand.js';\n\n/** Time to wait after killing pid until process is assumed as stopped */\nconst TRY_KILL_WAIT_MS = 5_000;\n\n// The root of this project. Change this when moving code to another directory\nconst rootDir = tools.getControllerDir();\nconst killAllScriptPath = path.join(rootDir, 'killall.sh');\n\nexport class CLIProcess extends CLICommand {\n constructor(options: CLICommandOptions) {\n super(options);\n }\n\n // These CLI commands have no subcommands, but belong together thematically\n // (start/stop/restart/status)\n\n /**\n * Starts one or more adapters or the js-controller\n *\n * @param args parsed cli arguments\n */\n async start(args: any[]): Promise<void> {\n const adapterName = normalizeAdapterName(args[0]);\n if (!adapterName) {\n await this.startJSController();\n this.options.callback();\n } else if (adapterName === 'all') {\n this.setAllAdaptersEnabled(true);\n } else if (/\\.\\d+$/.test(adapterName)) {\n this.setAdapterInstanceEnabled(adapterName, true);\n } else {\n this.setAdapterEnabled(adapterName, true);\n }\n }\n\n /**\n * Restarts one or more instances or the js-controller\n *\n * @param args parsed cli arguments\n */\n async restart(args: any[]): Promise<void> {\n const adapterName = normalizeAdapterName(args[0]);\n if (!adapterName) {\n await this.restartJSController();\n this.options.callback();\n } else if (/\\.\\d+$/.test(adapterName)) {\n this.setAdapterInstanceEnabled(adapterName, true, /* restartIfRunning */ true);\n } else {\n this.setAdapterEnabled(adapterName, true, /* restartIfRunning */ true);\n }\n }\n\n /**\n * Stops one or more adapters or the js-controller\n *\n * @param args parsed cli arguments\n */\n async stop(args: any[]): Promise<void> {\n const adapterName = normalizeAdapterName(args[0]);\n if (adapterName === undefined) {\n await CLIProcess.stopJSController();\n this.options.callback();\n } else if (adapterName === 'all') {\n this.setAllAdaptersEnabled(false);\n } else if (/\\.\\d+$/.test(adapterName)) {\n this.setAdapterInstanceEnabled(adapterName, false);\n } else {\n this.setAdapterEnabled(adapterName, false);\n }\n }\n\n /**\n * Starts or stops all adapters\n *\n * @param enabled if adapters should be started or stopped\n */\n setAllAdaptersEnabled(enabled: boolean): void {\n const { callback, dbConnect } = this.options;\n dbConnect(async params => {\n const { objects } = params;\n // Enumerate all adapter instances\n const instances = await getInstancesOrderedByStartPrio(objects, console);\n // Create a promise for each. setInstanceEnabled only starts/stops when necessary\n const instancePromises = instances\n .filter(obj => obj.common.enabled !== enabled)\n .map(obj => setInstanceEnabled(objects, obj, enabled));\n // wait for all instances to be started/stopped\n await Promise.all(instancePromises);\n callback();\n });\n }\n\n /**\n * Starts or stops a single or all instances of adapter.\n * If there are multiple instances, all will be started/stopped/restarted\n *\n * @param adapter The adapter to start\n * @param enabled If adapter should be started or stopped\n * @param [restartIfRunning] Whether running instances should be restarted\n */\n setAdapterEnabled(adapter: string, enabled: boolean, restartIfRunning?: boolean): void {\n const { callback, dbConnect } = this.options;\n dbConnect(async params => {\n const { objects } = params;\n\n try {\n // Enumerate all adapter instances\n const adapterInstances = await enumInstances(objects, adapter);\n if (adapterInstances.length === 0) {\n CLI.error.noInstancesFound(adapter);\n return void callback(EXIT_CODES.UNKNOWN_ERROR);\n }\n for (const instance of adapterInstances) {\n await setInstanceEnabled(objects, instance, enabled, restartIfRunning);\n }\n return void callback();\n } catch (e) {\n CLI.error.unknown(e.message);\n return void callback(EXIT_CODES.UNKNOWN_ERROR);\n }\n });\n }\n\n /**\n * Starts or stops a specific adapter instance\n *\n * @param instance The instance to start, e.g. \"adaptername.0\"\n * @param enabled If the instance should be started or stopped\n * @param [restartIfRunning] Whether running instances should be restarted\n */\n setAdapterInstanceEnabled(instance: string, enabled: boolean, restartIfRunning?: boolean): void {\n const { callback, dbConnect } = this.options;\n dbConnect(async params => {\n const { objects } = params;\n\n const obj = (await objects.getObject(`system.adapter.${instance}`)) as\n | ioBroker.InstanceObject\n | ioBroker.AdapterObject;\n\n if (!obj || obj.type !== 'instance') {\n CLI.error.invalidInstance(instance);\n return void callback();\n }\n\n try {\n await setInstanceEnabled(objects, obj, enabled, restartIfRunning);\n return void callback();\n } catch (e) {\n CLI.error.unknown(e.message);\n return void callback(EXIT_CODES.UNKNOWN_ERROR);\n }\n });\n }\n\n /**\n * Starts the JS controller\n */\n async startJSController(): Promise<void> {\n let memoryLimitMB = 0;\n try {\n const config: ioBroker.IoBrokerJson = fs.readJSONSync(tools.getConfigFileName(), { encoding: 'utf-8' });\n if (config?.system?.memoryLimitMB) {\n memoryLimitMB = Math.round(config.system.memoryLimitMB);\n }\n } catch {\n console.warn('Cannot read memoryLimitMB');\n console.warn(\n `May be config file does not exist.\\nPlease call \"${tools.appName} setup first\" to initialize the settings.`,\n );\n }\n\n let pid: number | undefined;\n try {\n pid = await tools.getControllerPid();\n } catch (e) {\n console.error(`Could not read pid file: ${e.message}`);\n }\n\n if (pid) {\n console.log(`Controller is already running with pid ${pid}`);\n return;\n }\n\n const args = [path.join(rootDir, 'controller.js')];\n if (memoryLimitMB) {\n args.push(`--max-old-space-size=${memoryLimitMB}`);\n }\n\n const child = spawn(process.execPath, args, {\n env: process.env,\n detached: true,\n stdio: ['ignore', 'ignore', 'ignore', 'ipc'],\n windowsHide: true,\n cwd: rootDir,\n });\n\n child.unref();\n }\n\n /**\n * Stops the JS controller\n */\n static async stopJSController(): Promise<void> {\n let pid: number | undefined;\n try {\n pid = await tools.getControllerPid();\n } catch (e) {\n console.error(`Could not read pid file: ${e.message}`);\n }\n\n if (!pid) {\n return;\n }\n\n await tryKill(pid);\n\n // On non-Windows OSes start a KILLALL script\n // to make sure nothing keeps running\n if (os.platform() !== 'win32') {\n let data = '';\n if (fs.existsSync(killAllScriptPath)) {\n fs.chmodSync(killAllScriptPath, '777');\n const child = spawn(killAllScriptPath, [], { windowsHide: true });\n child.stdout.on('data', _data => (data += _data.toString().replace(/\\n/g, '')));\n child.stderr.on('data', _data => (data += _data.toString().replace(/\\n/g, '')));\n return new Promise(resolve => {\n child.on('exit', exitCode => {\n console.log(`Exit code for \"killall.sh\": ${exitCode}`);\n resolve();\n });\n });\n }\n console.log('No \"killall.sh\" script found. Just stop.');\n }\n\n try {\n // delete pids.txt file\n fs.unlinkSync(tools.getPidsFileName());\n } catch {\n // ignore\n }\n }\n\n /** Restarts the JS controller */\n async restartJSController(): Promise<void> {\n await CLIProcess.stopJSController();\n await this.startJSController();\n }\n\n /**\n * Checks if ioBroker is running or not\n *\n * @param args parsed cli arguments\n */\n status(args: any[]): void {\n const { callback, dbConnect } = this.options;\n const adapterName = normalizeAdapterName(args[0]);\n const showEntireConfig = adapterName === 'all';\n\n dbConnect(async params => {\n const { objects, states, config, isOffline } = params;\n\n if (!adapterName || showEntireConfig) {\n // we want host info or/and whole config\n const hostAlive = await states.getState(`system.host.${tools.getHostName()}.alive`);\n\n const alive = hostAlive ? (hostAlive.val as boolean) : false;\n CLI.success.controllerStatus(alive);\n console.log();\n\n const hasLocalStatesServer = await isLocalStatesDbServer(config.states.type, config.states.host);\n const hasLocalObjectsServer = await isLocalObjectsDbServer(config.objects.type, config.objects.host);\n\n if (!hasLocalStatesServer && !hasLocalObjectsServer) {\n CLI.success.systemStatus(!isOffline);\n }\n\n console.log();\n if (showEntireConfig) {\n await showAllInstancesStatus(states, objects);\n console.log();\n showConfig(config);\n } else {\n console.log(`Objects type: ${config.objects.type}`);\n console.log(`States type: ${config.states.type}`);\n }\n return void callback(isOffline ? EXIT_CODES.CONTROLLER_NOT_RUNNING : undefined);\n }\n // we want to know the status of an adapter\n if (/\\.\\d+$/.test(adapterName)) {\n // instance specified\n await showInstanceStatus(states, adapterName);\n return void callback();\n }\n const adapterInstances = await enumInstances(objects, adapterName);\n // If there are multiple instances of this adapter, ask the user to specify which one\n if (adapterInstances.length > 1) {\n CLI.error.specifyInstance(\n adapterName,\n adapterInstances.map(obj => obj._id.substring('system.adapter.'.length)),\n );\n return void callback(EXIT_CODES.INVALID_ADAPTER_ID);\n } else if (adapterInstances.length === 0) {\n CLI.error.noInstancesFound(adapterName);\n return void callback(EXIT_CODES.UNKNOWN_ERROR);\n }\n\n const instanceId = adapterInstances[0]._id.split('.').pop();\n await showInstanceStatus(states, `${adapterName}.${instanceId}`);\n return void callback();\n });\n }\n}\n\n/**\n * Outputs the status of all existing adapter instances\n *\n * @param states The States DB\n * @param objects The Objects DB\n */\nasync function showAllInstancesStatus(states: StatesClient, objects: ObjectsClient): Promise<void> {\n const allInstances = await enumInstances(objects);\n for (const instance of allInstances) {\n const instanceId = instance._id.split('.').pop();\n await showInstanceStatus(states, `${instance.common.name}.${instanceId}`);\n }\n return Promise.resolve();\n}\n\n/**\n * Outputs the status of an adapter instance\n *\n * @param states the states object\n * @param adapterInstance <adapterName>.<instanceId>\n */\nasync function showInstanceStatus(states: StatesClient, adapterInstance: string): Promise<void> {\n const state = await states.getState(`system.adapter.${adapterInstance}.alive`);\n if (state?.val === true) {\n console.log(`Instance \"${adapterInstance}\" is running`);\n } else {\n console.log(`Instance \"${adapterInstance}\" is not running`);\n }\n}\n\n/**\n * Prints the config file to the console\n *\n * @param config the ioBroker json file content\n * @param root\n */\nfunction showConfig(config: ioBroker.IoBrokerJson, root?: string[]): void {\n if (!tools.isObject(config)) {\n return;\n }\n root = root || [];\n const prefix = root.join('/').toUpperCase();\n for (const attr of Object.keys(config)) {\n if (attr.match(/comment$/i)) {\n continue;\n }\n if (typeof (config as Record<string, any>)[attr] === 'object') {\n const nextRoot = deepClone(root);\n nextRoot.push(attr);\n showConfig((config as Record<string, any>)[attr], nextRoot);\n } else {\n console.log(`${prefix}${(prefix ? '/' : '') + attr}: ${(config as Record<string, any>)[attr]}`);\n }\n }\n}\n\n/**\n * Sets the enabled state of an instance to the given value\n *\n * @param objects The objects DB\n * @param instanceObj The instance object to change\n * @param enabled Whether the instance should be enabled or not\n * @param force Whether the object should be updated always\n */\nasync function setInstanceEnabled(\n objects: ObjectsClient,\n instanceObj: ioBroker.InstanceObject,\n enabled: boolean,\n force?: boolean,\n): Promise<void> {\n if (!force && instanceObj.common.enabled === enabled) {\n return;\n }\n\n instanceObj.common.enabled = enabled;\n instanceObj.from = getObjectFrom();\n instanceObj.ts = Date.now();\n await objects.setObject(instanceObj._id, instanceObj);\n const instanceName = getInstanceName(instanceObj._id);\n if (enabled) {\n CLI.success.adapterStarted(instanceName);\n } else {\n CLI.success.adapterStopped(instanceName);\n }\n}\n\n/**\n * Kills a process by its PID\n *\n * @param pid The PID of the process to kill\n */\nasync function tryKill(pid: number): Promise<void> {\n try {\n process.kill(pid, 'SIGTERM');\n } catch (e) {\n console.warn(`Could not send \"SIGTERM\" to process ${pid}: ${e.message}`);\n }\n\n await wait(TRY_KILL_WAIT_MS);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_js_controller_common", "path", "fs", "os", "deepClone", "wait"]
|
|
7
7
|
}
|
|
@@ -7,16 +7,13 @@ interface CLIStatesOptions extends CLICommandOptions {
|
|
|
7
7
|
}
|
|
8
8
|
/** Command iobroker state ... */
|
|
9
9
|
export declare class CLIStates extends CLICommand<CLIStatesOptions> {
|
|
10
|
-
/**
|
|
11
|
-
* @param options The command options including context and parameters
|
|
12
|
-
*/
|
|
13
10
|
constructor(options: CLIStatesOptions);
|
|
14
11
|
/**
|
|
15
12
|
* Executes a command
|
|
16
13
|
*
|
|
17
14
|
* @param args parsed cli args
|
|
18
15
|
*/
|
|
19
|
-
execute(args:
|
|
16
|
+
execute(args: any[]): void;
|
|
20
17
|
/**
|
|
21
18
|
* Get the protocol version
|
|
22
19
|
*/
|
|
@@ -39,19 +36,19 @@ export declare class CLIStates extends CLICommand<CLIStatesOptions> {
|
|
|
39
36
|
* @param args parsed cli arguments
|
|
40
37
|
* @param resultTransform transform function for result
|
|
41
38
|
*/
|
|
42
|
-
get_(args:
|
|
39
|
+
get_(args: any[], resultTransform: ResultTransform): void;
|
|
43
40
|
/**
|
|
44
41
|
* Set state in database
|
|
45
42
|
*
|
|
46
43
|
* @param args parsed cli arguments
|
|
47
44
|
*/
|
|
48
|
-
set_(args:
|
|
45
|
+
set_(args: any[]): void;
|
|
49
46
|
/**
|
|
50
47
|
* Deletes a state
|
|
51
48
|
*
|
|
52
49
|
* @param args parsed cli arguments
|
|
53
50
|
*/
|
|
54
|
-
delete(args:
|
|
51
|
+
delete(args: any[]): void;
|
|
55
52
|
}
|
|
56
53
|
export {};
|
|
57
54
|
//# sourceMappingURL=cliStates.d.ts.map
|
|
@@ -5,7 +5,6 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
6
|
var __getProtoOf = Object.getPrototypeOf;
|
|
7
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
9
8
|
var __export = (target, all) => {
|
|
10
9
|
for (var name in all)
|
|
11
10
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -37,15 +36,8 @@ var import_cliCommand = require("./cliCommand.js");
|
|
|
37
36
|
var CLI = __toESM(require("../../lib/cli/messages.js"), 1);
|
|
38
37
|
var import_cliTools = require("../../lib/cli/cliTools.js");
|
|
39
38
|
var rl = __toESM(require("readline-sync"), 1);
|
|
40
|
-
var import_tools = require("@iobroker/js-controller-common-db/tools");
|
|
41
39
|
const ALIAS_STARTS_WITH = "alias.";
|
|
42
40
|
class CLIStates extends import_cliCommand.CLICommand {
|
|
43
|
-
static {
|
|
44
|
-
__name(this, "CLIStates");
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* @param options The command options including context and parameters
|
|
48
|
-
*/
|
|
49
41
|
constructor(options) {
|
|
50
42
|
super(options);
|
|
51
43
|
}
|
|
@@ -60,20 +52,20 @@ class CLIStates extends import_cliCommand.CLICommand {
|
|
|
60
52
|
let resultTransform;
|
|
61
53
|
switch (command) {
|
|
62
54
|
case "get":
|
|
63
|
-
resultTransform =
|
|
55
|
+
resultTransform = (obj) => (0, import_cliTools.formatValue)(obj, pretty);
|
|
64
56
|
return this.get_(args, resultTransform);
|
|
65
57
|
case "getPlain":
|
|
66
58
|
case "getplain":
|
|
67
|
-
resultTransform =
|
|
59
|
+
resultTransform = (obj) => {
|
|
68
60
|
if (!obj) {
|
|
69
61
|
return "null";
|
|
70
62
|
}
|
|
71
63
|
return [obj.val, obj.ack, obj.from, obj.ts, obj.lc].map((line) => (0, import_cliTools.formatValue)(line)).join("\n");
|
|
72
|
-
}
|
|
64
|
+
};
|
|
73
65
|
return this.get_(args, resultTransform);
|
|
74
66
|
case "getValue":
|
|
75
67
|
case "getvalue":
|
|
76
|
-
resultTransform =
|
|
68
|
+
resultTransform = (obj) => obj ? (0, import_cliTools.formatValue)(obj.val, pretty) : "null";
|
|
77
69
|
return this.get_(args, resultTransform);
|
|
78
70
|
case "set":
|
|
79
71
|
return this.set_(args);
|
|
@@ -176,7 +168,7 @@ class CLIStates extends import_cliCommand.CLICommand {
|
|
|
176
168
|
sourceCommon: sourceObj?.common,
|
|
177
169
|
targetCommon: targetObj.common,
|
|
178
170
|
state,
|
|
179
|
-
logger:
|
|
171
|
+
logger: console,
|
|
180
172
|
logNamespace: "",
|
|
181
173
|
sourceId: sourceObj?._id,
|
|
182
174
|
targetId: targetObj._id
|
|
@@ -268,7 +260,7 @@ class CLIStates extends import_cliCommand.CLICommand {
|
|
|
268
260
|
sourceCommon: obj.common,
|
|
269
261
|
targetCommon: targetObj?.common,
|
|
270
262
|
state: newVal,
|
|
271
|
-
logger:
|
|
263
|
+
logger: console,
|
|
272
264
|
logNamespace: "",
|
|
273
265
|
sourceId: obj._id,
|
|
274
266
|
targetId: targetObj?._id
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/cli/cliStates.ts"],
|
|
4
|
-
"sourcesContent": ["import { tools } from '@iobroker/js-controller-common';\nimport { CLICommand, type CLICommandOptions } from './cliCommand.js';\nimport type { Client as ObjectsClient } from '@iobroker/db-objects-redis';\nimport * as CLI from '@/lib/cli/messages.js';\nimport { formatValue } from '@/lib/cli/cliTools.js';\nimport * as rl from 'readline-sync';\nimport { getLogger } from '@iobroker/js-controller-common-db/tools';\n\nconst ALIAS_STARTS_WITH = 'alias.';\n\ntype ResultTransform = (input: ioBroker.State) => string;\n\ninterface CLIStatesOptions extends CLICommandOptions {\n id?: string;\n value?: string | boolean | number;\n ack?: 'true' | 'false' | 0 | 1;\n}\n\n/** Command iobroker state ... */\nexport class CLIStates extends CLICommand<CLIStatesOptions> {\n /**\n * @param options The command options including context and parameters\n */\n constructor(options: CLIStatesOptions) {\n super(options);\n }\n\n /**\n * Executes a command\n *\n * @param args parsed cli args\n */\n execute(args: string[]): void {\n const { callback, pretty, showHelp } = this.options;\n const command = args[0];\n let resultTransform: ResultTransform;\n\n switch (command) {\n case 'get':\n resultTransform = obj => formatValue(obj, pretty);\n return this.get_(args, resultTransform);\n case 'getPlain':\n case 'getplain':\n resultTransform = obj => {\n if (!obj) {\n return 'null';\n }\n\n return [obj.val, obj.ack, obj.from, obj.ts, obj.lc].map(line => formatValue(line)).join('\\n');\n };\n return this.get_(args, resultTransform);\n case 'getValue':\n case 'getvalue':\n resultTransform = obj => (obj ? formatValue(obj.val, pretty) : 'null');\n return this.get_(args, resultTransform);\n case 'set':\n return this.set_(args);\n case 'chmod':\n case 'chown':\n CLI.error.wrongCommandPrefix('state', command, 'object');\n return void callback(3);\n case 'delete':\n case 'del':\n return this.delete(args);\n case 'getDBVersion':\n return this.getDBVersion();\n case 'setDBVersion':\n return this.setDBVersion();\n default:\n CLI.error.unknownCommand('state', command);\n showHelp();\n return void callback(3);\n }\n }\n\n /**\n * Get the protocol version\n */\n getDBVersion(): void {\n const { callback, dbConnect } = this.options;\n dbConnect(async params => {\n const { states } = params;\n const version = await states.getProtocolVersion();\n console.log(`Current States DB protocol version: ${version}`);\n return void callback(0);\n });\n }\n\n /**\n * Set protocol version\n */\n setDBVersion(): void {\n const { callback, dbConnect } = this.options;\n dbConnect(async params => {\n const { states } = params;\n\n let answer = rl.question('Changing the protocol version will restart all hosts! Continue? [N/y]', {\n limit: /^(yes|y|n|no)$/i,\n defaultInput: 'no',\n });\n\n answer = answer.toLowerCase();\n\n if (answer !== 'y' && answer !== 'yes') {\n console.log('Protocol version has not been changed!');\n return void callback(0);\n }\n\n try {\n await states.setProtocolVersion(this.options.version as number);\n } catch (e) {\n console.error(`Cannot update protocol version: ${e.message}`);\n return void callback(1);\n }\n console.log(`States DB protocol updated to version ${this.options.version}`);\n return void callback(0);\n });\n }\n\n /**\n * Checks if state is a binary state\n *\n * @param id id of the state\n * @param objects the objects db\n * @param _obj cached object\n */\n private async _isBinary(id: string, objects: ObjectsClient, _obj?: ioBroker.AnyObject | null): Promise<boolean> {\n const obj = _obj || (await objects.getObject(id));\n\n return !!(obj && ('binary' in obj || (obj.common && 'type' in obj.common && obj.common.type === 'file')));\n }\n\n /**\n * Returns the value of a state\n *\n * @param args parsed cli arguments\n * @param resultTransform transform function for result\n */\n get_(args: string[], resultTransform: ResultTransform): void {\n const { callback, dbConnect } = this.options;\n const id = args[1];\n\n if (!id) {\n CLI.error.stateNotFound(id);\n return;\n }\n\n dbConnect(async params => {\n const { states, objects } = params;\n\n if (id.startsWith(ALIAS_STARTS_WITH)) {\n objects.getObject(id, (err, targetObj) => {\n // alias\n if (targetObj && targetObj.common && 'alias' in targetObj.common && targetObj.common.alias.id) {\n const aliasId =\n typeof targetObj.common.alias.id.read === 'string'\n ? targetObj.common.alias.id.read\n : targetObj.common.alias.id;\n objects.getObject(aliasId, async (_err, sourceObj) => {\n // read target\n try {\n if (await this._isBinary(aliasId, objects, targetObj)) {\n CLI.error.stateBinaryGetUnsupported(aliasId);\n return void callback(1);\n }\n\n const state = await states.getStateAsync(aliasId);\n if (!state) {\n CLI.error.stateNotFound(id);\n } else {\n tools.formatAliasValue({\n sourceCommon: sourceObj?.common as ioBroker.StateCommon | undefined,\n targetCommon: targetObj.common as ioBroker.StateCommon,\n state,\n logger: getLogger(),\n logNamespace: '',\n sourceId: sourceObj?._id,\n targetId: targetObj._id,\n });\n console.log(resultTransform(state));\n }\n } catch (e) {\n CLI.error.unknown(e);\n }\n return void callback(0);\n });\n } else {\n CLI.error.unknown(err?.message || `Alias ${id} has no target`);\n return void callback(1); // ?\n }\n });\n } else {\n try {\n if (await this._isBinary(id, objects)) {\n CLI.error.stateBinaryGetUnsupported(id);\n return void callback(1);\n }\n const state = await states.getStateAsync(id);\n if (!state) {\n CLI.error.stateNotFound(id);\n } else {\n console.log(resultTransform(state));\n }\n } catch (e) {\n CLI.error.unknown(e);\n }\n return void callback(0);\n }\n });\n }\n\n /**\n * Set state in database\n *\n * @param args parsed cli arguments\n */\n set_(args: string[]): void {\n const { callback, dbConnect, showHelp, value, ack: ackArg, id } = this.options;\n const force = args.includes('--force') || args.includes('-f');\n\n if (id === undefined) {\n CLI.error.requiredArgumentMissing('id');\n showHelp();\n return void callback(0);\n }\n\n if (value === undefined) {\n CLI.error.requiredArgumentMissing('value');\n showHelp();\n return void callback(0);\n }\n\n let ack = false;\n\n if (ackArg !== undefined) {\n ack = ackArg === 'true' || ackArg === 1;\n }\n\n dbConnect(params => {\n const { states, objects } = params;\n const newVal = { val: value, ack: !!ack };\n\n if (id.startsWith(ALIAS_STARTS_WITH)) {\n objects.getObject(id, async (_err, obj) => {\n if (await this._isBinary(id, objects, obj)) {\n CLI.error.stateBinarySetUnsupported(id);\n return void callback(1);\n }\n // alias\n if (obj?.common?.alias?.id) {\n const aliasId =\n typeof obj.common.alias.id.write === 'string'\n ? obj.common.alias.id.write\n : obj.common.alias.id;\n\n objects.getObject(aliasId, (err, targetObj) => {\n if (err) {\n CLI.error.unknown(err.message);\n return void callback(1); // access error\n }\n if (!obj && !force) {\n CLI.error.objectNotFound(id, 'null');\n return void callback(1); // object not exists\n }\n\n if (obj?.common?.type) {\n if (obj.common.type === 'string') {\n newVal.val = newVal.val.toString();\n } else if (obj.common.type === 'number') {\n newVal.val = Number(newVal.val);\n } else if (obj.common.type === 'boolean') {\n newVal.val = newVal.val.toString();\n newVal.val =\n newVal.val === 'true' ||\n newVal.val === '1' ||\n newVal.val === 'ON' ||\n newVal.val === 'on';\n }\n }\n\n // write target\n states.setState(\n aliasId,\n tools.formatAliasValue({\n sourceCommon: obj.common as ioBroker.StateCommon,\n targetCommon: targetObj?.common as ioBroker.StateCommon | undefined,\n state: newVal as ioBroker.State,\n logger: getLogger(),\n logNamespace: '',\n sourceId: obj._id,\n targetId: targetObj?._id,\n }),\n err => {\n if (err) {\n CLI.error.unknown(err.message);\n return void callback(1); // ?\n }\n CLI.success.stateUpdated(id, value, !!ack);\n return void callback(0);\n },\n );\n });\n } else {\n CLI.error.unknown(`Alias ${id} has no target`);\n return void callback(1); // ?\n }\n });\n } else {\n objects.getObject(id, async (err, obj) => {\n if (err) {\n CLI.error.unknown(err.message);\n return void callback(1); // access error\n }\n\n if (await this._isBinary(id, objects, obj)) {\n CLI.error.stateBinarySetUnsupported(id);\n return void callback(1);\n }\n\n if (!obj && !force) {\n CLI.error.objectNotFound(id, 'null');\n return void callback(1); // object not exists\n }\n\n if (obj?.common?.type) {\n if (obj.common.type === 'string') {\n newVal.val = newVal.val.toString();\n } else if (obj.common.type === 'number') {\n newVal.val = Number(newVal.val);\n } else if (obj.common.type === 'boolean') {\n newVal.val = newVal.val.toString();\n newVal.val =\n newVal.val === 'true' ||\n newVal.val === '1' ||\n newVal.val === 'ON' ||\n newVal.val === 'on';\n }\n }\n\n states.setState(id, newVal, err => {\n if (err) {\n CLI.error.unknown(err.message);\n return void callback(1); // ?\n }\n CLI.success.stateUpdated(id, value, !!ack);\n return void callback(0);\n });\n });\n }\n });\n }\n\n /**\n * Deletes a state\n *\n * @param args parsed cli arguments\n */\n delete(args: string[]): void {\n const { callback, dbConnect } = this.options;\n const id: string = args[1];\n if (!id) {\n CLI.error.requiredArgumentMissing('id', 'state delete id');\n return void callback(1);\n }\n\n dbConnect(params => {\n const { states } = params;\n\n states.delState(id, err => {\n if (err) {\n CLI.error.stateNotFound(id, err.message);\n return void callback(3);\n }\n CLI.success.stateDeleted(id);\n return void callback(0);\n });\n });\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { tools } from '@iobroker/js-controller-common';\nimport { CLICommand, type CLICommandOptions } from './cliCommand.js';\nimport type { Client as ObjectsClient } from '@iobroker/db-objects-redis';\nimport * as CLI from '@/lib/cli/messages.js';\nimport { formatValue } from '@/lib/cli/cliTools.js';\nimport * as rl from 'readline-sync';\n\nconst ALIAS_STARTS_WITH = 'alias.';\n\ntype ResultTransform = (input: ioBroker.State) => string;\n\ninterface CLIStatesOptions extends CLICommandOptions {\n id?: string;\n value?: string | boolean | number;\n ack?: 'true' | 'false' | 0 | 1;\n}\n\n/** Command iobroker state ... */\nexport class CLIStates extends CLICommand<CLIStatesOptions> {\n constructor(options: CLIStatesOptions) {\n super(options);\n }\n\n /**\n * Executes a command\n *\n * @param args parsed cli args\n */\n execute(args: any[]): void {\n const { callback, pretty, showHelp } = this.options;\n const command = args[0];\n let resultTransform: ResultTransform;\n\n switch (command) {\n case 'get':\n resultTransform = obj => formatValue(obj, pretty);\n return this.get_(args, resultTransform);\n case 'getPlain':\n case 'getplain':\n resultTransform = obj => {\n if (!obj) {\n return 'null';\n }\n\n return [obj.val, obj.ack, obj.from, obj.ts, obj.lc].map(line => formatValue(line)).join('\\n');\n };\n return this.get_(args, resultTransform);\n case 'getValue':\n case 'getvalue':\n resultTransform = obj => (obj ? formatValue(obj.val, pretty) : 'null');\n return this.get_(args, resultTransform);\n case 'set':\n return this.set_(args);\n case 'chmod':\n case 'chown':\n CLI.error.wrongCommandPrefix('state', command, 'object');\n return void callback(3);\n case 'delete':\n case 'del':\n return this.delete(args);\n case 'getDBVersion':\n return this.getDBVersion();\n case 'setDBVersion':\n return this.setDBVersion();\n default:\n CLI.error.unknownCommand('state', command);\n showHelp();\n return void callback(3);\n }\n }\n\n /**\n * Get the protocol version\n */\n getDBVersion(): void {\n const { callback, dbConnect } = this.options;\n dbConnect(async params => {\n const { states } = params;\n const version = await states.getProtocolVersion();\n console.log(`Current States DB protocol version: ${version}`);\n return void callback(0);\n });\n }\n\n /**\n * Set protocol version\n */\n setDBVersion(): void {\n const { callback, dbConnect } = this.options;\n dbConnect(async params => {\n const { states } = params;\n\n let answer = rl.question('Changing the protocol version will restart all hosts! Continue? [N/y]', {\n limit: /^(yes|y|n|no)$/i,\n defaultInput: 'no',\n });\n\n answer = answer.toLowerCase();\n\n if (answer !== 'y' && answer !== 'yes') {\n console.log('Protocol version has not been changed!');\n return void callback(0);\n }\n\n try {\n await states.setProtocolVersion(this.options.version);\n } catch (e) {\n console.error(`Cannot update protocol version: ${e.message}`);\n return void callback(1);\n }\n console.log(`States DB protocol updated to version ${this.options.version}`);\n return void callback(0);\n });\n }\n\n /**\n * Checks if state is a binary state\n *\n * @param id id of the state\n * @param objects the objects db\n * @param _obj cached object\n */\n private async _isBinary(id: string, objects: ObjectsClient, _obj?: ioBroker.AnyObject | null): Promise<boolean> {\n const obj = _obj || (await objects.getObject(id));\n\n return !!(obj && ('binary' in obj || (obj.common && 'type' in obj.common && obj.common.type === 'file')));\n }\n\n /**\n * Returns the value of a state\n *\n * @param args parsed cli arguments\n * @param resultTransform transform function for result\n */\n get_(args: any[], resultTransform: ResultTransform): void {\n const { callback, dbConnect } = this.options;\n const id = args[1];\n\n if (!id) {\n CLI.error.stateNotFound(id);\n return;\n }\n\n dbConnect(async params => {\n const { states, objects } = params;\n\n if (id.startsWith(ALIAS_STARTS_WITH)) {\n objects.getObject(id, (err, targetObj) => {\n // alias\n if (targetObj && targetObj.common && 'alias' in targetObj.common && targetObj.common.alias.id) {\n const aliasId =\n typeof targetObj.common.alias.id.read === 'string'\n ? targetObj.common.alias.id.read\n : targetObj.common.alias.id;\n objects.getObject(aliasId, async (_err, sourceObj) => {\n // read target\n try {\n if (await this._isBinary(aliasId, objects, targetObj)) {\n CLI.error.stateBinaryGetUnsupported(aliasId);\n return void callback(1);\n }\n\n const state = await states.getStateAsync(aliasId);\n if (!state) {\n CLI.error.stateNotFound(id);\n } else {\n tools.formatAliasValue({\n sourceCommon: sourceObj?.common as ioBroker.StateCommon | undefined,\n targetCommon: targetObj.common as ioBroker.StateCommon,\n state,\n logger: console,\n logNamespace: '',\n sourceId: sourceObj?._id,\n targetId: targetObj._id,\n });\n console.log(resultTransform(state));\n }\n } catch (e) {\n CLI.error.unknown(e);\n }\n return void callback(0);\n });\n } else {\n CLI.error.unknown(err?.message || `Alias ${id} has no target`);\n return void callback(1); // ?\n }\n });\n } else {\n try {\n if (await this._isBinary(id, objects)) {\n CLI.error.stateBinaryGetUnsupported(id);\n return void callback(1);\n }\n const state = await states.getStateAsync(id);\n if (!state) {\n CLI.error.stateNotFound(id);\n } else {\n console.log(resultTransform(state));\n }\n } catch (e) {\n CLI.error.unknown(e);\n }\n return void callback(0);\n }\n });\n }\n\n /**\n * Set state in database\n *\n * @param args parsed cli arguments\n */\n set_(args: any[]): void {\n const { callback, dbConnect, showHelp, value, ack: ackArg, id } = this.options;\n const force = args.includes('--force') || args.includes('-f');\n\n if (id === undefined) {\n CLI.error.requiredArgumentMissing('id');\n showHelp();\n return void callback(0);\n }\n\n if (value === undefined) {\n CLI.error.requiredArgumentMissing('value');\n showHelp();\n return void callback(0);\n }\n\n let ack = false;\n\n if (ackArg !== undefined) {\n ack = ackArg === 'true' || ackArg === 1;\n }\n\n dbConnect(params => {\n const { states, objects } = params;\n const newVal = { val: value, ack: !!ack };\n\n if (id.startsWith(ALIAS_STARTS_WITH)) {\n objects.getObject(id, async (_err, obj) => {\n if (await this._isBinary(id, objects, obj)) {\n CLI.error.stateBinarySetUnsupported(id);\n return void callback(1);\n }\n // alias\n if (obj?.common?.alias?.id) {\n const aliasId =\n typeof obj.common.alias.id.write === 'string'\n ? obj.common.alias.id.write\n : obj.common.alias.id;\n\n objects.getObject(aliasId, (err, targetObj) => {\n if (err) {\n CLI.error.unknown(err.message);\n return void callback(1); // access error\n }\n if (!obj && !force) {\n CLI.error.objectNotFound(id, 'null');\n return void callback(1); // object not exists\n }\n\n if (obj?.common?.type) {\n if (obj.common.type === 'string') {\n newVal.val = newVal.val.toString();\n } else if (obj.common.type === 'number') {\n newVal.val = Number(newVal.val);\n } else if (obj.common.type === 'boolean') {\n newVal.val = newVal.val.toString();\n newVal.val =\n newVal.val === 'true' ||\n newVal.val === '1' ||\n newVal.val === 'ON' ||\n newVal.val === 'on';\n }\n }\n\n // write target\n states.setState(\n aliasId,\n tools.formatAliasValue({\n sourceCommon: obj.common as ioBroker.StateCommon,\n targetCommon: targetObj?.common as ioBroker.StateCommon | undefined,\n state: newVal as ioBroker.State,\n logger: console,\n logNamespace: '',\n sourceId: obj._id,\n targetId: targetObj?._id,\n }),\n err => {\n if (err) {\n CLI.error.unknown(err.message);\n return void callback(1); // ?\n }\n CLI.success.stateUpdated(id, value, !!ack);\n return void callback(0);\n },\n );\n });\n } else {\n CLI.error.unknown(`Alias ${id} has no target`);\n return void callback(1); // ?\n }\n });\n } else {\n objects.getObject(id, async (err, obj) => {\n if (err) {\n CLI.error.unknown(err.message);\n return void callback(1); // access error\n }\n\n if (await this._isBinary(id, objects, obj)) {\n CLI.error.stateBinarySetUnsupported(id);\n return void callback(1);\n }\n\n if (!obj && !force) {\n CLI.error.objectNotFound(id, 'null');\n return void callback(1); // object not exists\n }\n\n if (obj?.common?.type) {\n if (obj.common.type === 'string') {\n newVal.val = newVal.val.toString();\n } else if (obj.common.type === 'number') {\n newVal.val = Number(newVal.val);\n } else if (obj.common.type === 'boolean') {\n newVal.val = newVal.val.toString();\n newVal.val =\n newVal.val === 'true' ||\n newVal.val === '1' ||\n newVal.val === 'ON' ||\n newVal.val === 'on';\n }\n }\n\n states.setState(id, newVal, err => {\n if (err) {\n CLI.error.unknown(err.message);\n return void callback(1); // ?\n }\n CLI.success.stateUpdated(id, value, !!ack);\n return void callback(0);\n });\n });\n }\n });\n }\n\n /**\n * Deletes a state\n *\n * @param args parsed cli arguments\n */\n delete(args: any[]): void {\n const { callback, dbConnect } = this.options;\n const id: string = args[1];\n if (!id) {\n CLI.error.requiredArgumentMissing('id', 'state delete id');\n return void callback(1);\n }\n\n dbConnect(params => {\n const { states } = params;\n\n states.delState(id, err => {\n if (err) {\n CLI.error.stateNotFound(id, err.message);\n return void callback(3);\n }\n CLI.success.stateDeleted(id);\n return void callback(0);\n });\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["err"]
|
|
7
7
|
}
|
|
@@ -3,7 +3,6 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
7
6
|
var __export = (target, all) => {
|
|
8
7
|
for (var name in all)
|
|
9
8
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -37,26 +36,21 @@ function formatValue(val, pretty = false) {
|
|
|
37
36
|
const output = !needsStringify ? val : pretty ? JSON.stringify(val, null, 2) : JSON.stringify(val);
|
|
38
37
|
return output;
|
|
39
38
|
}
|
|
40
|
-
__name(formatValue, "formatValue");
|
|
41
39
|
function getObjectFrom() {
|
|
42
40
|
return `system.host.${import_js_controller_common.tools.getHostName()}.cli`;
|
|
43
41
|
}
|
|
44
|
-
__name(getObjectFrom, "getObjectFrom");
|
|
45
42
|
function normalizeAdapterName(name) {
|
|
46
43
|
if (typeof name === "string") {
|
|
47
44
|
name = name.replace(new RegExp(`^${import_js_controller_common.tools.appName}\\.`, "i"), "");
|
|
48
45
|
}
|
|
49
46
|
return name;
|
|
50
47
|
}
|
|
51
|
-
__name(normalizeAdapterName, "normalizeAdapterName");
|
|
52
48
|
function validateAdapterIdentifier(name) {
|
|
53
49
|
return /^[a-z0-9\-_]+$/.test(name);
|
|
54
50
|
}
|
|
55
|
-
__name(validateAdapterIdentifier, "validateAdapterIdentifier");
|
|
56
51
|
function validateAdapterOrInstanceIdentifier(name) {
|
|
57
52
|
return /^[a-z0-9\-_]+(\.\d+)?$/.test(name);
|
|
58
53
|
}
|
|
59
|
-
__name(validateAdapterOrInstanceIdentifier, "validateAdapterOrInstanceIdentifier");
|
|
60
54
|
function splitAdapterOrInstanceIdentifierWithVersion(name) {
|
|
61
55
|
const res = name.match(/^([a-z0-9\-_]+)\.?(\d+)?@?([a-z0-9\-_.]*)?$/);
|
|
62
56
|
if (!res) {
|
|
@@ -69,21 +63,17 @@ function splitAdapterOrInstanceIdentifierWithVersion(name) {
|
|
|
69
63
|
nameWithVersion: `${res[1]}${res[3] ? `@${res[3]}` : ""}`
|
|
70
64
|
};
|
|
71
65
|
}
|
|
72
|
-
__name(splitAdapterOrInstanceIdentifierWithVersion, "splitAdapterOrInstanceIdentifierWithVersion");
|
|
73
66
|
function getInstanceName(instanceObjID) {
|
|
74
67
|
return instanceObjID.replace(/^system\.adapter\./i, "");
|
|
75
68
|
}
|
|
76
|
-
__name(getInstanceName, "getInstanceName");
|
|
77
69
|
async function enumInstances(objects, adapter) {
|
|
78
70
|
const startkey = `system.adapter.${adapter ? `${adapter}.` : ""}`;
|
|
79
71
|
const data = await enumObjects(objects, "instance", startkey);
|
|
80
72
|
return data.filter((it) => !!(it && it._id.startsWith(startkey)));
|
|
81
73
|
}
|
|
82
|
-
__name(enumInstances, "enumInstances");
|
|
83
74
|
function enumHosts(objects) {
|
|
84
75
|
return enumObjects(objects, "host", "system.host.");
|
|
85
76
|
}
|
|
86
|
-
__name(enumHosts, "enumHosts");
|
|
87
77
|
function enumObjects(objects, type, startkey) {
|
|
88
78
|
return new Promise((resolve, reject) => {
|
|
89
79
|
const endkey = `${startkey}\u9999`;
|
|
@@ -99,7 +89,6 @@ function enumObjects(objects, type, startkey) {
|
|
|
99
89
|
});
|
|
100
90
|
});
|
|
101
91
|
}
|
|
102
|
-
__name(enumObjects, "enumObjects");
|
|
103
92
|
// Annotate the CommonJS export names for ESM import in node:
|
|
104
93
|
0 && (module.exports = {
|
|
105
94
|
enumHosts,
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/cli/cliTools.ts"],
|
|
4
4
|
"sourcesContent": ["import { tools } from '@iobroker/js-controller-common';\nimport type { Client as ObjectsClient } from '@iobroker/db-objects-redis';\n\n/**\n *\n * @param val The value to format for output\n * @param pretty Whether it should be pretty-printed\n */\nexport function formatValue(val: any, pretty = false): string {\n // Only use JSON.stringify if we need it (for objects and arrays)\n const needsStringify = tools.isObject(val) || tools.isArray(val);\n const output = !needsStringify ? val : pretty ? JSON.stringify(val, null, 2) : JSON.stringify(val);\n return output;\n}\n\n/** Returns the \"from\" property for objects changed by the CLI */\nexport function getObjectFrom(): `system.host.${string}.cli` {\n return `system.host.${tools.getHostName()}.cli`;\n}\n\n/**\n * Removes <tools.appName> from the start of the adapter name if it is there\n * E.g. iobroker.admin -> admin\n *\n * @param name The adapter name to normalize\n */\nexport function normalizeAdapterName(name: string): string {\n if (typeof name === 'string') {\n name = name.replace(new RegExp(`^${tools.appName}\\\\.`, 'i'), '');\n }\n return name;\n}\n\n/**\n * Ensures that the given string is a valid adapter identifier (<adaptername>) WITHOUT instance number\n *\n * @param name The name which is supposed to be an adapter identifier\n */\nexport function validateAdapterIdentifier(name: string): boolean {\n return /^[a-z0-9\\-_]+$/.test(name);\n}\n\n/**\n * Ensures that the given string contains a valid identifier for\n * an adapter (without instance number) or instance (with instance number)\n *\n * @param name the adapter name or instance\n */\nexport function validateAdapterOrInstanceIdentifier(name: string): boolean {\n return /^[a-z0-9\\-_]+(\\.\\d+)?$/.test(name);\n}\n\n/**\n * Ensures that the given string contains a valid identifier for\n * an adapter (without instance number) or instance (with instance number)\n *\n * @param name the adapter name or instance\n */\nexport function splitAdapterOrInstanceIdentifierWithVersion(\n name: string,\n): { name: string; instance: string | null; version: string | null; nameWithVersion: string } | null {\n const res = name.match(/^([a-z0-9\\-_]+)\\.?(\\d+)?@?([a-z0-9\\-_.]*)?$/);\n if (!res) {\n return null;\n }\n return {\n name: res[1],\n instance: res[2] || null,\n version: res[3] || null,\n nameWithVersion: `${res[1]}${res[3] ? `@${res[3]}` : ''}`,\n };\n}\n\n/**\n * Extracts the instance name from an object ID\n *\n * @param instanceObjID The ID of the instance object\n */\nexport function getInstanceName(instanceObjID: string): string {\n return instanceObjID.replace(/^system\\.adapter\\./i, '');\n}\n\n/**\n * Enumerates the instances of an adapter or all of them\n *\n * @param objects The objects DB to use\n * @param adapter (optional) The adapter whose instances should be enumerated\n * @returns An array of instance objects\n */\nexport async function enumInstances(objects: ObjectsClient, adapter?: string): Promise<ioBroker.InstanceObject[]> {\n // if no adapter given all instances should be returned\n const startkey = `system.adapter.${adapter ? `${adapter}.` : ''}`;\n const data = await enumObjects(objects, 'instance', startkey);\n // because of startkey logic not only receive objects with the dot at the end, so filter them!\n return data.filter((it): it is ioBroker.InstanceObject => !!(it && it._id.startsWith(startkey)));\n}\n\n/**\n * Enumerates all known hosts\n *\n * @param objects The objects DB to use\n * @returns An array of host objects\n */\nexport function enumHosts(objects: ObjectsClient): Promise<ioBroker.InferGetObjectViewItemType<'system', 'host'>[]> {\n return enumObjects(objects, 'host', 'system.host.');\n}\n\n/**\n * Enumerates all objects of a given type\n *\n * @param objects The objects DB to use\n * @param type The type of the objects to enumerate\n * @param startkey The prefix of the objects\n */\nexport function enumObjects<T extends string>(\n objects: ObjectsClient,\n type: T,\n startkey: string,\n): Promise<ioBroker.InferGetObjectViewItemType<'system', T>[]> {\n return new Promise((resolve, reject) => {\n const endkey = `${startkey}\\u9999`;\n objects.getObjectView('system', type, { startkey, endkey }, null, (err, res) => {\n if (err) {\n return reject(err);\n }\n\n let ret: ioBroker.InferGetObjectViewItemType<'system', T>[] = [];\n if (res?.rows) {\n ret = res.rows.map(row => row.value);\n }\n resolve(ret);\n });\n });\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;AAAA,kCAAsB;AAQhB,SAAU,YAAY,KAAU,SAAS,OAAK;AAEhD,QAAM,iBAAiB,kCAAM,SAAS,GAAG,KAAK,kCAAM,QAAQ,GAAG;AAC/D,QAAM,SAAS,CAAC,iBAAiB,MAAM,SAAS,KAAK,UAAU,KAAK,MAAM,CAAC,IAAI,KAAK,UAAU,GAAG;AACjG,SAAO;AACX;AAGM,SAAU,gBAAa;AACzB,SAAO,eAAe,kCAAM,YAAW,CAAE;AAC7C;AAQM,SAAU,qBAAqB,MAAY;AAC7C,MAAI,OAAO,SAAS,UAAU;AAC1B,WAAO,KAAK,QAAQ,IAAI,OAAO,IAAI,kCAAM,OAAO,OAAO,GAAG,GAAG,EAAE;EACnE;AACA,SAAO;AACX;AAOM,SAAU,0BAA0B,MAAY;AAClD,SAAO,iBAAiB,KAAK,IAAI;AACrC;AAQM,SAAU,oCAAoC,MAAY;AAC5D,SAAO,yBAAyB,KAAK,IAAI;AAC7C;AAQM,SAAU,4CACZ,MAAY;AAEZ,QAAM,MAAM,KAAK,MAAM,6CAA6C;AACpE,MAAI,CAAC,KAAK;AACN,WAAO;EACX;AACA,SAAO;IACH,MAAM,IAAI,CAAC;IACX,UAAU,IAAI,CAAC,KAAK;IACpB,SAAS,IAAI,CAAC,KAAK;IACnB,iBAAiB,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE;;AAE/D;AAOM,SAAU,gBAAgB,eAAqB;AACjD,SAAO,cAAc,QAAQ,uBAAuB,EAAE;AAC1D;AASA,eAAsB,cAAc,SAAwB,SAAgB;AAExE,QAAM,WAAW,kBAAkB,UAAU,GAAG,OAAO,MAAM,EAAE;AAC/D,QAAM,OAAO,MAAM,YAAY,SAAS,YAAY,QAAQ;AAE5D,SAAO,KAAK,OAAO,CAAC,OAAsC,CAAC,EAAE,MAAM,GAAG,IAAI,WAAW,QAAQ,EAAE;AACnG;AAQM,SAAU,UAAU,SAAsB;AAC5C,SAAO,YAAY,SAAS,QAAQ,cAAc;AACtD;AASM,SAAU,YACZ,SACA,MACA,UAAgB;AAEhB,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAU;AACnC,UAAM,SAAS,GAAG,QAAQ;AAC1B,YAAQ,cAAc,UAAU,MAAM,EAAE,UAAU,OAAM,GAAI,MAAM,CAAC,KAAK,QAAO;AAC3E,UAAI,KAAK;AACL,eAAO,OAAO,GAAG;MACrB;AAEA,UAAI,MAA0D,CAAA;AAC9D,UAAI,KAAK,MAAM;AACX,cAAM,IAAI,KAAK,IAAI,SAAO,IAAI,KAAK;MACvC;AACA,cAAQ,GAAG;IACf,CAAC;EACL,CAAC;AACL;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -3,7 +3,6 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
7
6
|
var __export = (target, all) => {
|
|
8
7
|
for (var name in all)
|
|
9
8
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -26,56 +25,56 @@ __export(messages_exports, {
|
|
|
26
25
|
module.exports = __toCommonJS(messages_exports);
|
|
27
26
|
var import_js_controller_common = require("@iobroker/js-controller-common");
|
|
28
27
|
const errorMessages = Object.freeze({
|
|
29
|
-
stateNotFound:
|
|
30
|
-
stateNotBinary:
|
|
31
|
-
stateBinaryGetUnsupported:
|
|
32
|
-
stateBinarySetUnsupported:
|
|
33
|
-
objectNotFound:
|
|
34
|
-
cannotUpdateObject:
|
|
35
|
-
cannotDeleteObject:
|
|
36
|
-
cannotDeleteObjectFromEnums:
|
|
37
|
-
cannotChangeObject:
|
|
38
|
-
objectPropertyNotFound:
|
|
39
|
-
invalidPropertyOrValue:
|
|
40
|
-
invalidJSONValue:
|
|
41
|
-
unknownCommand:
|
|
42
|
-
requiredArgumentMissing:
|
|
43
|
-
noInstancesFound:
|
|
44
|
-
invalidInstance:
|
|
45
|
-
specifyInstance:
|
|
46
|
-
adapterDirNotFound:
|
|
47
|
-
mainFileNotFound:
|
|
48
|
-
cannotLoadIoPackage:
|
|
49
|
-
wrongCommandPrefix:
|
|
50
|
-
unknown:
|
|
51
|
-
cannotChangeRunningSystem:
|
|
52
|
-
noHostThisInMultihost:
|
|
53
|
-
hostAlreadyExists:
|
|
54
|
-
hostDoesNotExist:
|
|
55
|
-
dontRemoveCurrentHost:
|
|
56
|
-
pluginNotDefined:
|
|
57
|
-
cert:
|
|
58
|
-
instanceAlreadyRunning:
|
|
28
|
+
stateNotFound: (stateID, error2) => `The state ${stateID} was not found!${error2 ? ` Reason: ${error2}` : ""}`,
|
|
29
|
+
stateNotBinary: (stateId) => `State "${stateId}" is not binary.`,
|
|
30
|
+
stateBinaryGetUnsupported: (stateId) => `State "${stateId}" is a binary state, please use getBinary.`,
|
|
31
|
+
stateBinarySetUnsupported: (stateId) => `State "${stateId}" is a binary state and cannot be set via cli.`,
|
|
32
|
+
objectNotFound: (objectID, error2) => `The object ${objectID} was not found!${error2 ? ` Reason: ${error2}` : ""}`,
|
|
33
|
+
cannotUpdateObject: (objectID, error2) => `The object ${objectID} could not be updated!${error2 ? ` Reason: ${error2}` : ""}`,
|
|
34
|
+
cannotDeleteObject: (objectID, error2) => `The object ${objectID} cannot be deleted!${error2 ? ` Reason: ${error2}` : ""}`,
|
|
35
|
+
cannotDeleteObjectFromEnums: (objectID, error2) => `The object ${objectID} could not be deleted from enums!${error2 ? ` Reason: ${error2}` : ""}`,
|
|
36
|
+
cannotChangeObject: (objectID, error2) => `The object ${objectID} cannot be changed!${error2 ? ` Reason: ${error2}` : ""}`,
|
|
37
|
+
objectPropertyNotFound: (objectID, propPath) => `The requested property "${propPath}" or one of its parents was not found in the object "${objectID}"!`,
|
|
38
|
+
invalidPropertyOrValue: () => `The property path or value is not valid. Please make sure the value is valid JSON.`,
|
|
39
|
+
invalidJSONValue: () => `The given value is not valid JSON.`,
|
|
40
|
+
unknownCommand: (prefix, command) => `Unknown command "${prefix} ${command}"!`,
|
|
41
|
+
requiredArgumentMissing: (argName, exampleCommand) => `The required argument "${argName}" is missing!${exampleCommand ? ` Example: "${exampleCommand}"` : ""}`,
|
|
42
|
+
noInstancesFound: (adapter) => `Cannot find any instances of "${adapter}"!`,
|
|
43
|
+
invalidInstance: (instance) => `The instance "${instance}" does not exist!`,
|
|
44
|
+
specifyInstance: (adapter, adapterInstances) => `The adapter "${adapter}" has multiple instances! Please specify which one should be started: "${adapterInstances.join('", "')}".`,
|
|
45
|
+
adapterDirNotFound: (adapter) => `Cannot find the installation dir for adapter "${adapter}"!`,
|
|
46
|
+
mainFileNotFound: (adapter) => `Cannot find the main file for adapter "${adapter}"!`,
|
|
47
|
+
cannotLoadIoPackage: (adapter) => `Cannot load the io-package.json file for adapter "${adapter}"!`,
|
|
48
|
+
wrongCommandPrefix: (wrongPrefix, command, correctPrefix) => `The command ${command} is not intended to be used with ${wrongPrefix}!${correctPrefix ? ` Please use "${correctPrefix} ${command}" instead.` : ""}`,
|
|
49
|
+
unknown: (err) => `An unknown error occurred: ${err}`,
|
|
50
|
+
cannotChangeRunningSystem: () => `Cannot execute changes on running system. Stop ${import_js_controller_common.tools.appName} first.`,
|
|
51
|
+
noHostThisInMultihost: () => `Cannot use this command in multihost!`,
|
|
52
|
+
hostAlreadyExists: (hostname) => `A host with the name "${hostname}" already exists!`,
|
|
53
|
+
hostDoesNotExist: (hostname) => `The host "${hostname}" does not exist!`,
|
|
54
|
+
dontRemoveCurrentHost: (hostname) => `Cannot remove host "${hostname}" from itself!`,
|
|
55
|
+
pluginNotDefined: (pluginName, host, instance) => `The plugin "${pluginName}" does not exist for ${host ? `host "${host}"` : `instance "${instance}"`}!`,
|
|
56
|
+
cert: (certName) => `Certificate "${certName}" not found or error parsing certificate information.`,
|
|
57
|
+
instanceAlreadyRunning: (instance) => `The instance "${instance}" is already running, please stop instance first.`
|
|
59
58
|
});
|
|
60
59
|
const successMessages = Object.freeze({
|
|
61
|
-
objectUpdated:
|
|
62
|
-
objectDeleted:
|
|
63
|
-
stateUpdated:
|
|
64
|
-
stateDeleted:
|
|
65
|
-
adapterStarted:
|
|
66
|
-
adapterStopped:
|
|
67
|
-
adapterRestarted:
|
|
68
|
-
systemStatus:
|
|
69
|
-
controllerStatus:
|
|
70
|
-
messageSent:
|
|
71
|
-
hostRenamed:
|
|
72
|
-
instanceHostChanged:
|
|
73
|
-
hostDeleted:
|
|
74
|
-
pluginEnabledOrDisabled:
|
|
75
|
-
pluginStatus:
|
|
60
|
+
objectUpdated: (objectID) => `The object "${objectID}" was updated successfully.`,
|
|
61
|
+
objectDeleted: (objectID) => `The object "${objectID}" was deleted.`,
|
|
62
|
+
stateUpdated: (stateID, value, ack) => `The state "${stateID}" was set to "${value}"${ack === void 0 ? "" : ` with flag ack=${ack}`}`,
|
|
63
|
+
stateDeleted: (stateID) => `The state "${stateID}" was deleted.`,
|
|
64
|
+
adapterStarted: (adapter) => `The adapter "${adapter}" was started.`,
|
|
65
|
+
adapterStopped: (adapter) => `The adapter "${adapter}" was stopped.`,
|
|
66
|
+
adapterRestarted: (adapter) => `The adapter "${adapter}" was restarted.`,
|
|
67
|
+
systemStatus: (isRunning) => isRunning ? `At least one ${import_js_controller_common.tools.appName} host is running.` : `No ${import_js_controller_common.tools.appName} host is running.`,
|
|
68
|
+
controllerStatus: (isRunning) => `${import_js_controller_common.tools.appName} is ${isRunning ? "" : "not "}running on this host.`,
|
|
69
|
+
messageSent: (adapter, command, message) => `The command "${command}" was sent to "${adapter}" with the message "${message}".`,
|
|
70
|
+
hostRenamed: (from, to) => `Host "${from}" successfully renamed to "${to}".`,
|
|
71
|
+
instanceHostChanged: (instance, from, to) => `The host for instance "${instance}" was changed from "${from}" to "${to}".`,
|
|
72
|
+
hostDeleted: (hostname) => `The host "${hostname}" was deleted.`,
|
|
73
|
+
pluginEnabledOrDisabled: (pluginName, host, instance, status) => `The plugin "${pluginName}" was successfully ${status ? "enabled" : "disabled"} for ${host ? `host "${host}"` : `instance "${instance}"`}.`,
|
|
74
|
+
pluginStatus: (pluginName, host, instance, status) => `The plugin "${pluginName}" is ${status ? "enabled" : "disabled"} for ${host ? `host "${host}"` : `instance "${instance}"`}.`
|
|
76
75
|
});
|
|
77
76
|
const warnings = Object.freeze({
|
|
78
|
-
noInstancesFoundOnHost:
|
|
77
|
+
noInstancesFoundOnHost: (hostname) => hostname ? `No instances found for host "${hostname}"!` : `No instances found!`
|
|
79
78
|
});
|
|
80
79
|
const success = {};
|
|
81
80
|
for (const method of Object.keys(successMessages)) {
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/cli/messages.ts"],
|
|
4
4
|
"sourcesContent": ["import { tools } from '@iobroker/js-controller-common';\n\nconst errorMessages = Object.freeze({\n stateNotFound: (stateID: string, error?: string) =>\n `The state ${stateID} was not found!${error ? ` Reason: ${error}` : ''}`,\n stateNotBinary: (stateId: string) => `State \"${stateId}\" is not binary.`,\n stateBinaryGetUnsupported: (stateId: string) => `State \"${stateId}\" is a binary state, please use getBinary.`,\n stateBinarySetUnsupported: (stateId: string) => `State \"${stateId}\" is a binary state and cannot be set via cli.`,\n objectNotFound: (objectID: string, error?: string) =>\n `The object ${objectID} was not found!${error ? ` Reason: ${error}` : ''}`,\n cannotUpdateObject: (objectID: string, error?: string) =>\n `The object ${objectID} could not be updated!${error ? ` Reason: ${error}` : ''}`,\n cannotDeleteObject: (objectID: string, error?: string) =>\n `The object ${objectID} cannot be deleted!${error ? ` Reason: ${error}` : ''}`,\n cannotDeleteObjectFromEnums: (objectID: string, error?: string) =>\n `The object ${objectID} could not be deleted from enums!${error ? ` Reason: ${error}` : ''}`,\n cannotChangeObject: (objectID: string, error?: string) =>\n `The object ${objectID} cannot be changed!${error ? ` Reason: ${error}` : ''}`,\n objectPropertyNotFound: (objectID: string, propPath: string) =>\n `The requested property \"${propPath}\" or one of its parents was not found in the object \"${objectID}\"!`,\n invalidPropertyOrValue: () => `The property path or value is not valid. Please make sure the value is valid JSON.`,\n invalidJSONValue: () => `The given value is not valid JSON.`,\n\n unknownCommand: (prefix: string, command: string) => `Unknown command \"${prefix} ${command}\"!`,\n requiredArgumentMissing: (argName: string, exampleCommand?: string) =>\n `The required argument \"${argName}\" is missing!${exampleCommand ? ` Example: \"${exampleCommand}\"` : ''}`,\n\n noInstancesFound: (adapter: string) => `Cannot find any instances of \"${adapter}\"!`,\n invalidInstance: (instance: string) => `The instance \"${instance}\" does not exist!`,\n specifyInstance: (adapter: string, adapterInstances: string[]) =>\n `The adapter \"${adapter}\" has multiple instances! Please specify which one should be started: \"${adapterInstances.join(\n '\", \"',\n )}\".`,\n adapterDirNotFound: (adapter: string) => `Cannot find the installation dir for adapter \"${adapter}\"!`,\n mainFileNotFound: (adapter: string) => `Cannot find the main file for adapter \"${adapter}\"!`,\n cannotLoadIoPackage: (adapter: string) => `Cannot load the io-package.json file for adapter \"${adapter}\"!`,\n\n wrongCommandPrefix: (wrongPrefix: string, command: string, correctPrefix?: string) =>\n `The command ${command} is not intended to be used with ${wrongPrefix}!${\n correctPrefix ? ` Please use \"${correctPrefix} ${command}\" instead.` : ''\n }`,\n unknown: (err: string) => `An unknown error occurred: ${err}`,\n\n cannotChangeRunningSystem: () => `Cannot execute changes on running system. Stop ${tools.appName} first.`,\n noHostThisInMultihost: () => `Cannot use this command in multihost!`,\n hostAlreadyExists: (hostname: string) => `A host with the name \"${hostname}\" already exists!`,\n hostDoesNotExist: (hostname: string) => `The host \"${hostname}\" does not exist!`,\n dontRemoveCurrentHost: (hostname: string) => `Cannot remove host \"${hostname}\" from itself!`,\n\n pluginNotDefined: (pluginName: string, host: string, instance: string) =>\n `The plugin \"${pluginName}\" does not exist for ${host ? `host \"${host}\"` : `instance \"${instance}\"`}!`,\n\n cert: (certName: string) => `Certificate \"${certName}\" not found or error parsing certificate information.`,\n instanceAlreadyRunning: (instance: string) =>\n `The instance \"${instance}\" is already running, please stop instance first.`,\n});\n\nconst successMessages = Object.freeze({\n objectUpdated: (objectID: string) => `The object \"${objectID}\" was updated successfully.`,\n objectDeleted: (objectID: string) => `The object \"${objectID}\" was deleted.`,\n stateUpdated: (stateID: string, value: any, ack?: boolean) =>\n `The state \"${stateID}\" was set to \"${value}\"${ack === undefined ? '' : ` with flag ack=${ack}`}`,\n stateDeleted: (stateID: string) => `The state \"${stateID}\" was deleted.`,\n adapterStarted: (adapter: string) => `The adapter \"${adapter}\" was started.`,\n adapterStopped: (adapter: string) => `The adapter \"${adapter}\" was stopped.`,\n adapterRestarted: (adapter: string) => `The adapter \"${adapter}\" was restarted.`,\n systemStatus: (isRunning: boolean) =>\n isRunning ? `At least one ${tools.appName} host is running.` : `No ${tools.appName} host is running.`,\n controllerStatus: (isRunning: boolean) => `${tools.appName} is ${isRunning ? '' : 'not '}running on this host.`,\n messageSent: (adapter: string, command: string, message: string) =>\n `The command \"${command}\" was sent to \"${adapter}\" with the message \"${message}\".`,\n hostRenamed: (from: string, to: string) => `Host \"${from}\" successfully renamed to \"${to}\".`,\n instanceHostChanged: (instance: string, from: string, to: string) =>\n `The host for instance \"${instance}\" was changed from \"${from}\" to \"${to}\".`,\n hostDeleted: (hostname: string) => `The host \"${hostname}\" was deleted.`,\n\n pluginEnabledOrDisabled: (pluginName: string, host: string, instance: string, status: boolean) =>\n `The plugin \"${pluginName}\" was successfully ${status ? 'enabled' : 'disabled'} for ${\n host ? `host \"${host}\"` : `instance \"${instance}\"`\n }.`,\n pluginStatus: (pluginName: string, host: string, instance: string, status: boolean) =>\n `The plugin \"${pluginName}\" is ${status ? 'enabled' : 'disabled'} for ${\n host ? `host \"${host}\"` : `instance \"${instance}\"`\n }.`,\n});\n\nconst warnings = Object.freeze({\n noInstancesFoundOnHost: (hostname?: string) =>\n hostname ? `No instances found for host \"${hostname}\"!` : `No instances found!`,\n});\n\n// Capsule success messages in console.log\n/** Prints predefined success messages on the CLI */\nexport const success = {} as typeof successMessages;\nfor (const method of Object.keys(successMessages)) {\n // @ts-expect-error we are only using keys of sucessMessages so method is keyof\n success[method] = (...args: string[]) => console.log(successMessages[method](...args));\n}\n// warnings in console.warning\nexport const warn = {} as typeof warnings;\nfor (const method of Object.keys(warnings)) {\n // @ts-expect-error we are only using keys of sucessMessages so method is keyof\n warn[method] = (...args) => console.log(warnings[method](...args));\n}\n\n// error messages in console.error\n/** Prints predefined error messages on the CLI */\nexport const error = {} as typeof errorMessages;\nfor (const method of Object.keys(errorMessages)) {\n // @ts-expect-error we are only using keys of sucessMessages so method is keyof\n error[method] = (...args) => console.error(errorMessages[method](...args));\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["error"]
|
|
7
7
|
}
|