@iobroker/js-controller-cli 7.2.3 → 8.0.0-alpha.1-20260921-e5941ca8a
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 +8 -1
- package/build/cjs/lib/cli/cliCert.d.ts +7 -4
- package/build/cjs/lib/cli/cliCert.js +10 -6
- package/build/cjs/lib/cli/cliCert.js.map +2 -2
- package/build/cjs/lib/cli/cliCommand.d.ts +63 -15
- package/build/cjs/lib/cli/cliCommand.js +8 -1
- package/build/cjs/lib/cli/cliCommand.js.map +2 -2
- package/build/cjs/lib/cli/cliCompact.d.ts +5 -2
- package/build/cjs/lib/cli/cliCompact.js +9 -2
- package/build/cjs/lib/cli/cliCompact.js.map +2 -2
- package/build/cjs/lib/cli/cliDebug.d.ts +5 -2
- package/build/cjs/lib/cli/cliDebug.js +8 -1
- package/build/cjs/lib/cli/cliDebug.js.map +2 -2
- package/build/cjs/lib/cli/cliHost.d.ts +13 -10
- package/build/cjs/lib/cli/cliHost.js +13 -5
- package/build/cjs/lib/cli/cliHost.js.map +2 -2
- package/build/cjs/lib/cli/cliLogs.d.ts +9 -3
- package/build/cjs/lib/cli/cliLogs.js +12 -1
- package/build/cjs/lib/cli/cliLogs.js.map +2 -2
- package/build/cjs/lib/cli/cliMessage.d.ts +2 -1
- package/build/cjs/lib/cli/cliMessage.js +5 -0
- package/build/cjs/lib/cli/cliMessage.js.map +2 -2
- package/build/cjs/lib/cli/cliObjects.d.ts +21 -18
- package/build/cjs/lib/cli/cliObjects.js +51 -33
- 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 +6 -0
- package/build/cjs/lib/cli/cliPlugin.js.map +2 -2
- package/build/cjs/lib/cli/cliProcess.d.ts +17 -7
- package/build/cjs/lib/cli/cliProcess.js +77 -24
- package/build/cjs/lib/cli/cliProcess.js.map +3 -3
- package/build/cjs/lib/cli/cliStates.d.ts +7 -4
- package/build/cjs/lib/cli/cliStates.js +14 -6
- package/build/cjs/lib/cli/cliStates.js.map +2 -2
- package/build/cjs/lib/cli/cliTools.js +11 -0
- package/build/cjs/lib/cli/cliTools.js.map +1 -1
- package/build/cjs/lib/cli/messages.js +47 -46
- package/build/cjs/lib/cli/messages.js.map +1 -1
- package/build/cjs/lib/progressBar.d.ts +59 -0
- package/build/cjs/lib/progressBar.js +115 -0
- package/build/cjs/lib/progressBar.js.map +7 -0
- package/build/cjs/lib/setup/customError.d.ts +4 -0
- package/build/cjs/lib/setup/customError.js +7 -0
- package/build/cjs/lib/setup/customError.js.map +2 -2
- package/build/cjs/lib/setup/dbConnection.js +69 -64
- 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 +5 -0
- package/build/cjs/lib/setup/formatters.js.map +2 -2
- package/build/cjs/lib/setup/multihostClient.js +6 -2
- package/build/cjs/lib/setup/multihostClient.js.map +1 -1
- package/build/cjs/lib/setup/pluginInfos.d.ts +5 -0
- package/build/cjs/lib/setup/pluginInfos.js +2 -0
- package/build/cjs/lib/setup/pluginInfos.js.map +2 -2
- package/build/cjs/lib/setup/setupBackup.d.ts +53 -0
- package/build/cjs/lib/setup/setupBackup.js +125 -14
- package/build/cjs/lib/setup/setupBackup.js.map +3 -3
- package/build/cjs/lib/setup/setupInstall.d.ts +51 -15
- package/build/cjs/lib/setup/setupInstall.js +212 -28
- package/build/cjs/lib/setup/setupInstall.js.map +2 -2
- package/build/cjs/lib/setup/setupLicense.d.ts +13 -0
- package/build/cjs/lib/setup/setupLicense.js +33 -2
- package/build/cjs/lib/setup/setupLicense.js.map +2 -2
- package/build/cjs/lib/setup/setupList.d.ts +55 -1
- package/build/cjs/lib/setup/setupList.js +78 -24
- package/build/cjs/lib/setup/setupList.js.map +3 -3
- package/build/cjs/lib/setup/setupMultihost.d.ts +7 -0
- package/build/cjs/lib/setup/setupMultihost.js +78 -11
- package/build/cjs/lib/setup/setupMultihost.js.map +3 -3
- package/build/cjs/lib/setup/setupPacketManager.d.ts +10 -0
- package/build/cjs/lib/setup/setupPacketManager.js +16 -6
- package/build/cjs/lib/setup/setupPacketManager.js.map +2 -2
- package/build/cjs/lib/setup/setupRepo.d.ts +19 -0
- package/build/cjs/lib/setup/setupRepo.js +141 -13
- package/build/cjs/lib/setup/setupRepo.js.map +2 -2
- package/build/cjs/lib/setup/setupSetup.d.ts +34 -0
- package/build/cjs/lib/setup/setupSetup.js +209 -35
- package/build/cjs/lib/setup/setupSetup.js.map +3 -3
- package/build/cjs/lib/setup/setupUpgrade.d.ts +13 -2
- package/build/cjs/lib/setup/setupUpgrade.js +72 -12
- package/build/cjs/lib/setup/setupUpgrade.js.map +2 -2
- package/build/cjs/lib/setup/setupUpload.d.ts +77 -1
- package/build/cjs/lib/setup/setupUpload.js +152 -9
- package/build/cjs/lib/setup/setupUpload.js.map +2 -2
- package/build/cjs/lib/setup/setupUsers.d.ts +44 -14
- package/build/cjs/lib/setup/setupUsers.js +330 -17
- package/build/cjs/lib/setup/setupUsers.js.map +2 -2
- package/build/cjs/lib/setup/setupVendor.d.ts +14 -1
- package/build/cjs/lib/setup/setupVendor.js +40 -8
- package/build/cjs/lib/setup/setupVendor.js.map +2 -2
- package/build/cjs/lib/setup/setupVisDebug.d.ts +16 -2
- package/build/cjs/lib/setup/setupVisDebug.js +41 -17
- 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 +13 -9
- package/build/cjs/lib/setup/utils.js.map +3 -3
- package/build/cjs/lib/setup.d.ts +1 -1
- package/build/cjs/lib/setup.js +858 -1758
- package/build/cjs/lib/setup.js.map +3 -3
- package/build/esm/lib/_Types.d.ts +8 -1
- package/build/esm/lib/_Types.d.ts.map +1 -1
- package/build/esm/lib/cli/cliCert.d.ts +7 -4
- 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 +63 -15
- package/build/esm/lib/cli/cliCommand.d.ts.map +1 -1
- package/build/esm/lib/cli/cliCommand.js +4 -1
- package/build/esm/lib/cli/cliCommand.js.map +1 -1
- package/build/esm/lib/cli/cliCompact.d.ts +5 -2
- package/build/esm/lib/cli/cliCompact.d.ts.map +1 -1
- package/build/esm/lib/cli/cliCompact.js +5 -2
- package/build/esm/lib/cli/cliCompact.js.map +1 -1
- package/build/esm/lib/cli/cliDebug.d.ts +5 -2
- package/build/esm/lib/cli/cliDebug.d.ts.map +1 -1
- package/build/esm/lib/cli/cliDebug.js +4 -1
- package/build/esm/lib/cli/cliDebug.js.map +1 -1
- package/build/esm/lib/cli/cliHost.d.ts +13 -10
- package/build/esm/lib/cli/cliHost.d.ts.map +1 -1
- package/build/esm/lib/cli/cliHost.js +8 -5
- package/build/esm/lib/cli/cliHost.js.map +1 -1
- package/build/esm/lib/cli/cliLogs.d.ts +9 -3
- package/build/esm/lib/cli/cliLogs.d.ts.map +1 -1
- package/build/esm/lib/cli/cliLogs.js +8 -1
- package/build/esm/lib/cli/cliLogs.js.map +1 -1
- package/build/esm/lib/cli/cliMessage.d.ts +2 -1
- package/build/esm/lib/cli/cliMessage.d.ts.map +1 -1
- package/build/esm/lib/cli/cliMessage.js +1 -0
- package/build/esm/lib/cli/cliMessage.js.map +1 -1
- package/build/esm/lib/cli/cliObjects.d.ts +21 -18
- package/build/esm/lib/cli/cliObjects.d.ts.map +1 -1
- package/build/esm/lib/cli/cliObjects.js +44 -38
- 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 +17 -7
- package/build/esm/lib/cli/cliProcess.d.ts.map +1 -1
- package/build/esm/lib/cli/cliProcess.js +73 -12
- package/build/esm/lib/cli/cliProcess.js.map +1 -1
- package/build/esm/lib/cli/cliStates.d.ts +7 -4
- package/build/esm/lib/cli/cliStates.d.ts.map +1 -1
- package/build/esm/lib/cli/cliStates.js +6 -2
- package/build/esm/lib/cli/cliStates.js.map +1 -1
- package/build/esm/lib/progressBar.d.ts +59 -0
- package/build/esm/lib/progressBar.d.ts.map +1 -0
- package/build/esm/lib/progressBar.js +104 -0
- package/build/esm/lib/progressBar.js.map +1 -0
- package/build/esm/lib/setup/customError.d.ts +4 -0
- package/build/esm/lib/setup/customError.d.ts.map +1 -1
- package/build/esm/lib/setup/customError.js +3 -0
- 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 +10 -13
- 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 +5 -0
- package/build/esm/lib/setup/pluginInfos.d.ts.map +1 -1
- package/build/esm/lib/setup/pluginInfos.js +5 -0
- package/build/esm/lib/setup/pluginInfos.js.map +1 -1
- package/build/esm/lib/setup/setupBackup.d.ts +53 -0
- package/build/esm/lib/setup/setupBackup.d.ts.map +1 -1
- package/build/esm/lib/setup/setupBackup.js +132 -13
- package/build/esm/lib/setup/setupBackup.js.map +1 -1
- package/build/esm/lib/setup/setupInstall.d.ts +51 -15
- package/build/esm/lib/setup/setupInstall.d.ts.map +1 -1
- package/build/esm/lib/setup/setupInstall.js +228 -23
- package/build/esm/lib/setup/setupInstall.js.map +1 -1
- package/build/esm/lib/setup/setupLicense.d.ts +13 -0
- package/build/esm/lib/setup/setupLicense.d.ts.map +1 -1
- package/build/esm/lib/setup/setupLicense.js +31 -1
- package/build/esm/lib/setup/setupLicense.js.map +1 -1
- package/build/esm/lib/setup/setupList.d.ts +55 -1
- package/build/esm/lib/setup/setupList.d.ts.map +1 -1
- package/build/esm/lib/setup/setupList.js +61 -8
- package/build/esm/lib/setup/setupList.js.map +1 -1
- package/build/esm/lib/setup/setupMultihost.d.ts +7 -0
- package/build/esm/lib/setup/setupMultihost.d.ts.map +1 -1
- package/build/esm/lib/setup/setupMultihost.js +85 -6
- package/build/esm/lib/setup/setupMultihost.js.map +1 -1
- package/build/esm/lib/setup/setupPacketManager.d.ts +10 -0
- package/build/esm/lib/setup/setupPacketManager.d.ts.map +1 -1
- package/build/esm/lib/setup/setupPacketManager.js +9 -0
- package/build/esm/lib/setup/setupPacketManager.js.map +1 -1
- package/build/esm/lib/setup/setupRepo.d.ts +19 -0
- package/build/esm/lib/setup/setupRepo.d.ts.map +1 -1
- package/build/esm/lib/setup/setupRepo.js +164 -14
- package/build/esm/lib/setup/setupRepo.js.map +1 -1
- package/build/esm/lib/setup/setupSetup.d.ts +34 -0
- package/build/esm/lib/setup/setupSetup.d.ts.map +1 -1
- package/build/esm/lib/setup/setupSetup.js +218 -21
- package/build/esm/lib/setup/setupSetup.js.map +1 -1
- package/build/esm/lib/setup/setupUpgrade.d.ts +13 -2
- package/build/esm/lib/setup/setupUpgrade.d.ts.map +1 -1
- package/build/esm/lib/setup/setupUpgrade.js +70 -6
- package/build/esm/lib/setup/setupUpgrade.js.map +1 -1
- package/build/esm/lib/setup/setupUpload.d.ts +77 -1
- package/build/esm/lib/setup/setupUpload.d.ts.map +1 -1
- package/build/esm/lib/setup/setupUpload.js +164 -7
- package/build/esm/lib/setup/setupUpload.js.map +1 -1
- package/build/esm/lib/setup/setupUsers.d.ts +44 -14
- package/build/esm/lib/setup/setupUsers.d.ts.map +1 -1
- package/build/esm/lib/setup/setupUsers.js +346 -14
- package/build/esm/lib/setup/setupUsers.js.map +1 -1
- package/build/esm/lib/setup/setupVendor.d.ts +14 -1
- package/build/esm/lib/setup/setupVendor.d.ts.map +1 -1
- package/build/esm/lib/setup/setupVendor.js +33 -2
- package/build/esm/lib/setup/setupVendor.js.map +1 -1
- package/build/esm/lib/setup/setupVisDebug.d.ts +16 -2
- package/build/esm/lib/setup/setupVisDebug.d.ts.map +1 -1
- package/build/esm/lib/setup/setupVisDebug.js +39 -14
- 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 +2 -4
- package/build/esm/lib/setup/utils.js.map +1 -1
- package/build/esm/lib/setup.d.ts +1 -1
- package/build/esm/lib/setup.d.ts.map +1 -1
- package/build/esm/lib/setup.js +959 -1910
- package/build/esm/lib/setup.js.map +1 -1
- package/build/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +14 -14
|
@@ -5,6 +5,7 @@ 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 });
|
|
8
9
|
var __export = (target, all) => {
|
|
9
10
|
for (var name in all)
|
|
10
11
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -38,13 +39,19 @@ var import_js_controller_common = require("@iobroker/js-controller-common");
|
|
|
38
39
|
var import_node_os = __toESM(require("node:os"), 1);
|
|
39
40
|
var import_fs_extra = __toESM(require("fs-extra"), 1);
|
|
40
41
|
class CLIHost extends import_cliCommand.CLICommand {
|
|
42
|
+
static {
|
|
43
|
+
__name(this, "CLIHost");
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* @param options The command options including context and parameters
|
|
47
|
+
*/
|
|
41
48
|
constructor(options) {
|
|
42
49
|
super(options);
|
|
43
50
|
}
|
|
44
51
|
/**
|
|
45
52
|
* Executes a command
|
|
46
53
|
*
|
|
47
|
-
* @param args
|
|
54
|
+
* @param args The command arguments (the first is the sub-command)
|
|
48
55
|
*/
|
|
49
56
|
execute(args) {
|
|
50
57
|
const command = args[0];
|
|
@@ -63,7 +70,7 @@ class CLIHost extends import_cliCommand.CLICommand {
|
|
|
63
70
|
/**
|
|
64
71
|
* When in single-host mode, changes the hostname of the host and all instances to the current one
|
|
65
72
|
*
|
|
66
|
-
* @param _args
|
|
73
|
+
* @param _args The command arguments (unused)
|
|
67
74
|
*/
|
|
68
75
|
self(_args) {
|
|
69
76
|
this.renameHost(void 0, import_node_os.default.hostname());
|
|
@@ -71,7 +78,7 @@ class CLIHost extends import_cliCommand.CLICommand {
|
|
|
71
78
|
/**
|
|
72
79
|
* Changes the current host's hostname to the given one
|
|
73
80
|
*
|
|
74
|
-
* @param args
|
|
81
|
+
* @param args The command arguments (the second is the new hostname)
|
|
75
82
|
*/
|
|
76
83
|
set(args) {
|
|
77
84
|
const { callback } = this.options;
|
|
@@ -85,7 +92,7 @@ class CLIHost extends import_cliCommand.CLICommand {
|
|
|
85
92
|
/**
|
|
86
93
|
* Removes the host with the given name
|
|
87
94
|
*
|
|
88
|
-
* @param args
|
|
95
|
+
* @param args The command arguments (the second is the hostname to remove)
|
|
89
96
|
*/
|
|
90
97
|
remove(args) {
|
|
91
98
|
const { callback, dbConnect } = this.options;
|
|
@@ -143,7 +150,7 @@ class CLIHost extends import_cliCommand.CLICommand {
|
|
|
143
150
|
/**
|
|
144
151
|
* Renames the host with the given name to the current one (opposite of `set()`)
|
|
145
152
|
*
|
|
146
|
-
* @param args
|
|
153
|
+
* @param args The command arguments (the second is the old hostname)
|
|
147
154
|
*/
|
|
148
155
|
rename(args) {
|
|
149
156
|
const { callback } = this.options;
|
|
@@ -270,6 +277,7 @@ async function changeInstanceHost(objects, instance, newHostname) {
|
|
|
270
277
|
CLI.error.cannotChangeObject(instance._id, e.message);
|
|
271
278
|
}
|
|
272
279
|
}
|
|
280
|
+
__name(changeInstanceHost, "changeInstanceHost");
|
|
273
281
|
// Annotate the CommonJS export names for ESM import in node:
|
|
274
282
|
0 && (module.exports = {
|
|
275
283
|
CLIHost
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/cli/cliHost.ts"],
|
|
4
|
-
"sourcesContent": ["import * as CLI from './messages.js';\nimport { CLICommand, type CLICommandOptions } from './cliCommand.js';\nimport { enumHosts, enumObjects, getObjectFrom, enumInstances } from './cliTools.js';\nimport { tools, EXIT_CODES } from '@iobroker/js-controller-common';\nimport type { Client as ObjectsClient } from '@iobroker/db-objects-redis';\nimport os from 'node:os';\nimport fs from 'fs-extra';\n\n/** Command iobroker host ... */\nexport class CLIHost extends CLICommand {\n constructor(options: CLICommandOptions) {\n super(options);\n }\n\n /**\n * Executes a command\n *\n * @param args\n */\n execute(args: any[]): void {\n const command = args[0];\n\n switch (command) {\n case 'this':\n case 'self':\n return this.self(args);\n case 'set':\n return this.set(args);\n case 'remove':\n return this.remove(args);\n default:\n return this.rename(args);\n }\n }\n\n /**\n * When in single-host mode, changes the hostname of the host and all instances to the current one\n *\n * @param _args\n */\n self(_args: any[]): void {\n this.renameHost(undefined, os.hostname());\n }\n\n /**\n * Changes the current host's hostname to the given one\n *\n * @param args\n */\n set(args: any[]): void {\n const { callback } = this.options;\n\n const newHostname: string = args[1];\n if (!newHostname) {\n CLI.error.requiredArgumentMissing('newHostname', 'host set newHostname');\n return void callback(34);\n }\n\n this.renameHost(tools.getHostName(), newHostname);\n }\n\n /**\n * Removes the host with the given name\n *\n * @param args\n */\n remove(args: any[]): void {\n const { callback, dbConnect } = this.options;\n\n const hostname: string = args[1];\n if (!hostname) {\n CLI.error.requiredArgumentMissing('hostname', 'host remove hostname');\n return void callback(34);\n }\n\n const newHostname = tools.getHostName();\n\n if (hostname === newHostname) {\n // avoid object deletion when target host is same host\n CLI.error.dontRemoveCurrentHost(hostname);\n return void callback(35);\n }\n\n dbConnect(async params => {\n const { objects, isOffline } = params;\n\n try {\n if (!isOffline) {\n CLI.error.cannotChangeRunningSystem();\n return void callback(EXIT_CODES.CONTROLLER_RUNNING);\n }\n\n // Find the requested host object\n const hosts = await enumHosts(objects);\n const hostToDelete = hosts.find(host => host?.common.hostname === hostname);\n if (!hostToDelete) {\n CLI.error.hostDoesNotExist(hostname);\n return void callback(30);\n }\n\n // Delete it\n try {\n await objects.delObjectAsync(hostToDelete._id);\n } catch (err) {\n CLI.error.cannotDeleteObject(hostToDelete._id, err.message);\n return void callback(30);\n }\n\n // Also delete its states\n const hostStates = await enumObjects(objects, 'state', `system.host.${hostname}.`);\n for (const state of hostStates) {\n // Therefore delete the old one because we will recreate it under a new name\n try {\n await objects.delObjectAsync(state._id);\n CLI.success.stateDeleted(state._id);\n } catch (err) {\n CLI.error.cannotDeleteObject(state._id, err.message);\n }\n }\n\n // Move all instances from the deleted host to the current one\n const instances = await enumInstances(objects);\n const instancesToRename = instances.filter(i => i?.common.host === hostname);\n for (const instance of instancesToRename) {\n await changeInstanceHost(objects, instance, newHostname);\n }\n\n // Notify the user that we are done\n CLI.success.hostDeleted(hostname);\n return void callback(EXIT_CODES.NO_ERROR);\n } catch (err) {\n CLI.error.unknown(err.message);\n return void callback(1);\n }\n });\n }\n\n /**\n * Renames the host with the given name to the current one (opposite of `set()`)\n *\n * @param args\n */\n rename(args: any[]): void {\n const { callback } = this.options;\n\n const oldHostname: string = args[0];\n\n if (!oldHostname) {\n CLI.error.requiredArgumentMissing('oldHostname', 'host oldHostname');\n return void callback(34);\n }\n\n this.renameHost(oldHostname, os.hostname());\n }\n\n /**\n * Renames the host with the hostname `oldHostname` to the hostname `newHostname`\n *\n * @param oldHostname The hostname to rename from or `undefined` to rename all hosts (single-host mode only!)\n * @param newHostname The hostname to rename to\n */\n renameHost(oldHostname: string | undefined, newHostname: string): void {\n const { callback, dbConnect, showHelp } = this.options;\n dbConnect(async params => {\n const { isOffline, objects } = params;\n\n try {\n if (!isOffline) {\n CLI.error.cannotChangeRunningSystem();\n return void callback(EXIT_CODES.CONTROLLER_RUNNING);\n }\n\n const hosts = await enumHosts(objects);\n if (hosts.length > 1 && oldHostname === undefined) {\n // iobroker host this/self in multihost is not allowed\n CLI.error.noHostThisInMultihost();\n showHelp();\n return void callback(30);\n }\n\n // Does another host with the target name exist?\n const hostExists = !!hosts.find(obj => obj?.common.hostname === newHostname);\n if (hostExists) {\n // This prevents migration of instances if host already exists, but we need it to prevent\n // multiple hosts with same name. Thus we only allow if no instances are on the host\n // Note: this is only a heuristic, if problems occur we need a `force` flag\n const instances = await enumInstances(objects);\n const hasExistingInstances = !!instances.find(instance => instance?.common.host === newHostname);\n\n if (hasExistingInstances) {\n CLI.error.hostAlreadyExists(newHostname);\n return void callback(EXIT_CODES.INSTANCE_ALREADY_EXISTS);\n }\n }\n\n // Remember the new hostname in the system settings\n const configFileName = tools.getConfigFileName();\n const configData = fs.readJSONSync(configFileName);\n if (configData.system && configData.system.hostname !== newHostname) {\n configData.system.hostname = newHostname;\n fs.writeFileSync(configFileName, JSON.stringify(configData, null, 2), 'utf8');\n }\n\n // Rename the host(s)\n for (const host of hosts) {\n // Remember the current hostname of this object because we need it later\n const prevHostname = host.common.hostname;\n\n // Rename only the hostname we're supposed to rename!\n if (oldHostname && prevHostname !== oldHostname) {\n continue;\n }\n\n // Rename the host object\n // Therefore delete the old one because we will recreate it under a new name\n try {\n await objects.delObjectAsync(host._id);\n } catch (err) {\n CLI.error.cannotDeleteObject(host._id, err.message);\n continue;\n }\n\n // Now update the object\n Object.assign(host, {\n _id: `system.host.${newHostname}`,\n from: getObjectFrom(),\n ts: Date.now(),\n });\n Object.assign(host.common, {\n name: host._id,\n hostname: newHostname,\n address: [],\n cmd: '',\n native: { process: {}, os: {}, hardware: {} },\n });\n // And save it\n try {\n await objects.setObjectAsync(host._id, host);\n } catch (err) {\n CLI.error.cannotChangeObject(host._id, err.message);\n continue;\n }\n\n // Rename its states\n const hostStateObjects = await enumObjects(objects, 'state', `system.host.${prevHostname}.`);\n const hostFolders = await enumObjects(objects, 'folder', `system.host.${prevHostname}.`);\n for (const object of [...hostStateObjects, ...hostFolders]) {\n // Therefore delete the old one because we will recreate it under a new name\n try {\n await objects.delObjectAsync(object._id);\n } catch (err) {\n CLI.error.cannotDeleteObject(object._id, err.message);\n continue;\n }\n\n // Now update the object\n Object.assign(object, {\n _id: object._id.replace(`system.host.${prevHostname}`, `system.host.${newHostname}`),\n from: getObjectFrom(),\n ts: Date.now(),\n });\n\n // And save it\n try {\n await objects.setObjectAsync(object._id, object);\n } catch (err) {\n CLI.error.cannotChangeObject(object._id, err.message);\n }\n }\n\n CLI.success.hostRenamed(prevHostname, newHostname);\n }\n\n // Also rename all instances\n const instances = await enumInstances(objects);\n const instancesToRename =\n oldHostname === undefined ? instances : instances.filter(i => i.common.host === oldHostname);\n if (instancesToRename.length > 0) {\n for (const instance of instancesToRename) {\n // Update each instance object\n await changeInstanceHost(objects, instance, newHostname);\n }\n } else {\n CLI.warn.noInstancesFoundOnHost(oldHostname);\n }\n return void callback(EXIT_CODES.NO_ERROR);\n } catch (err) {\n CLI.error.unknown(err.message);\n return void callback(1);\n }\n });\n }\n}\n\n/**\n * Changes the host an instance is running on\n *\n * @param objects The objects DB to use\n * @param instance The instance object\n * @param newHostname The new hostname the instance should be running on\n */\nasync function changeInstanceHost(\n objects: ObjectsClient,\n instance: ioBroker.InstanceObject,\n newHostname: string,\n): Promise<void> {\n const oldInstanceHost = instance.common.host;\n instance.from = getObjectFrom();\n instance.ts = Date.now();\n instance.common.host = newHostname;\n // and save it\n try {\n await objects.setObjectAsync(instance._id, instance);\n CLI.success.instanceHostChanged(instance._id, oldInstanceHost, newHostname);\n } catch (e) {\n CLI.error.cannotChangeObject(instance._id, e.message);\n // resolve anyways, we don't want to cause errors\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import * as CLI from './messages.js';\nimport { CLICommand, type CLICommandOptions } from './cliCommand.js';\nimport { enumHosts, enumObjects, getObjectFrom, enumInstances } from './cliTools.js';\nimport { tools, EXIT_CODES } from '@iobroker/js-controller-common';\nimport type { Client as ObjectsClient } from '@iobroker/db-objects-redis';\nimport os from 'node:os';\nimport fs from 'fs-extra';\n\n/** Command iobroker host ... */\nexport class CLIHost extends CLICommand {\n /**\n * @param options The command options including context and parameters\n */\n constructor(options: CLICommandOptions) {\n super(options);\n }\n\n /**\n * Executes a command\n *\n * @param args The command arguments (the first is the sub-command)\n */\n execute(args: string[]): void {\n const command = args[0];\n\n switch (command) {\n case 'this':\n case 'self':\n return this.self(args);\n case 'set':\n return this.set(args);\n case 'remove':\n return this.remove(args);\n default:\n return this.rename(args);\n }\n }\n\n /**\n * When in single-host mode, changes the hostname of the host and all instances to the current one\n *\n * @param _args The command arguments (unused)\n */\n self(_args: string[]): void {\n this.renameHost(undefined, os.hostname());\n }\n\n /**\n * Changes the current host's hostname to the given one\n *\n * @param args The command arguments (the second is the new hostname)\n */\n set(args: string[]): void {\n const { callback } = this.options;\n\n const newHostname: string = args[1];\n if (!newHostname) {\n CLI.error.requiredArgumentMissing('newHostname', 'host set newHostname');\n return void callback(34);\n }\n\n this.renameHost(tools.getHostName(), newHostname);\n }\n\n /**\n * Removes the host with the given name\n *\n * @param args The command arguments (the second is the hostname to remove)\n */\n remove(args: string[]): void {\n const { callback, dbConnect } = this.options;\n\n const hostname: string = args[1];\n if (!hostname) {\n CLI.error.requiredArgumentMissing('hostname', 'host remove hostname');\n return void callback(34);\n }\n\n const newHostname = tools.getHostName();\n\n if (hostname === newHostname) {\n // avoid object deletion when target host is same host\n CLI.error.dontRemoveCurrentHost(hostname);\n return void callback(35);\n }\n\n dbConnect(async params => {\n const { objects, isOffline } = params;\n\n try {\n if (!isOffline) {\n CLI.error.cannotChangeRunningSystem();\n return void callback(EXIT_CODES.CONTROLLER_RUNNING);\n }\n\n // Find the requested host object\n const hosts = await enumHosts(objects);\n const hostToDelete = hosts.find(host => host?.common.hostname === hostname);\n if (!hostToDelete) {\n CLI.error.hostDoesNotExist(hostname);\n return void callback(30);\n }\n\n // Delete it\n try {\n await objects.delObjectAsync(hostToDelete._id);\n } catch (err) {\n CLI.error.cannotDeleteObject(hostToDelete._id, err.message);\n return void callback(30);\n }\n\n // Also delete its states\n const hostStates = await enumObjects(objects, 'state', `system.host.${hostname}.`);\n for (const state of hostStates) {\n // Therefore delete the old one because we will recreate it under a new name\n try {\n await objects.delObjectAsync(state._id);\n CLI.success.stateDeleted(state._id);\n } catch (err) {\n CLI.error.cannotDeleteObject(state._id, err.message);\n }\n }\n\n // Move all instances from the deleted host to the current one\n const instances = await enumInstances(objects);\n const instancesToRename = instances.filter(i => i?.common.host === hostname);\n for (const instance of instancesToRename) {\n await changeInstanceHost(objects, instance, newHostname);\n }\n\n // Notify the user that we are done\n CLI.success.hostDeleted(hostname);\n return void callback(EXIT_CODES.NO_ERROR);\n } catch (err) {\n CLI.error.unknown(err.message);\n return void callback(1);\n }\n });\n }\n\n /**\n * Renames the host with the given name to the current one (opposite of `set()`)\n *\n * @param args The command arguments (the second is the old hostname)\n */\n rename(args: string[]): void {\n const { callback } = this.options;\n\n const oldHostname: string = args[0];\n\n if (!oldHostname) {\n CLI.error.requiredArgumentMissing('oldHostname', 'host oldHostname');\n return void callback(34);\n }\n\n this.renameHost(oldHostname, os.hostname());\n }\n\n /**\n * Renames the host with the hostname `oldHostname` to the hostname `newHostname`\n *\n * @param oldHostname The hostname to rename from or `undefined` to rename all hosts (single-host mode only!)\n * @param newHostname The hostname to rename to\n */\n renameHost(oldHostname: string | undefined, newHostname: string): void {\n const { callback, dbConnect, showHelp } = this.options;\n dbConnect(async params => {\n const { isOffline, objects } = params;\n\n try {\n if (!isOffline) {\n CLI.error.cannotChangeRunningSystem();\n return void callback(EXIT_CODES.CONTROLLER_RUNNING);\n }\n\n const hosts = await enumHosts(objects);\n if (hosts.length > 1 && oldHostname === undefined) {\n // iobroker host this/self in multihost is not allowed\n CLI.error.noHostThisInMultihost();\n showHelp();\n return void callback(30);\n }\n\n // Does another host with the target name exist?\n const hostExists = !!hosts.find(obj => obj?.common.hostname === newHostname);\n if (hostExists) {\n // This prevents migration of instances if host already exists, but we need it to prevent\n // multiple hosts with same name. Thus we only allow if no instances are on the host\n // Note: this is only a heuristic, if problems occur we need a `force` flag\n const instances = await enumInstances(objects);\n const hasExistingInstances = !!instances.find(instance => instance?.common.host === newHostname);\n\n if (hasExistingInstances) {\n CLI.error.hostAlreadyExists(newHostname);\n return void callback(EXIT_CODES.INSTANCE_ALREADY_EXISTS);\n }\n }\n\n // Remember the new hostname in the system settings\n const configFileName = tools.getConfigFileName();\n const configData = fs.readJSONSync(configFileName);\n if (configData.system && configData.system.hostname !== newHostname) {\n configData.system.hostname = newHostname;\n fs.writeFileSync(configFileName, JSON.stringify(configData, null, 2), 'utf8');\n }\n\n // Rename the host(s)\n for (const host of hosts) {\n // Remember the current hostname of this object because we need it later\n const prevHostname = host.common.hostname;\n\n // Rename only the hostname we're supposed to rename!\n if (oldHostname && prevHostname !== oldHostname) {\n continue;\n }\n\n // Rename the host object\n // Therefore delete the old one because we will recreate it under a new name\n try {\n await objects.delObjectAsync(host._id);\n } catch (err) {\n CLI.error.cannotDeleteObject(host._id, err.message);\n continue;\n }\n\n // Now update the object\n Object.assign(host, {\n _id: `system.host.${newHostname}`,\n from: getObjectFrom(),\n ts: Date.now(),\n });\n Object.assign(host.common, {\n name: host._id,\n hostname: newHostname,\n address: [],\n cmd: '',\n native: { process: {}, os: {}, hardware: {} },\n });\n // And save it\n try {\n await objects.setObjectAsync(host._id, host);\n } catch (err) {\n CLI.error.cannotChangeObject(host._id, err.message);\n continue;\n }\n\n // Rename its states\n const hostStateObjects = await enumObjects(objects, 'state', `system.host.${prevHostname}.`);\n const hostFolders = await enumObjects(objects, 'folder', `system.host.${prevHostname}.`);\n for (const object of [...hostStateObjects, ...hostFolders]) {\n // Therefore delete the old one because we will recreate it under a new name\n try {\n await objects.delObjectAsync(object._id);\n } catch (err) {\n CLI.error.cannotDeleteObject(object._id, err.message);\n continue;\n }\n\n // Now update the object\n Object.assign(object, {\n _id: object._id.replace(`system.host.${prevHostname}`, `system.host.${newHostname}`),\n from: getObjectFrom(),\n ts: Date.now(),\n });\n\n // And save it\n try {\n await objects.setObjectAsync(object._id, object);\n } catch (err) {\n CLI.error.cannotChangeObject(object._id, err.message);\n }\n }\n\n CLI.success.hostRenamed(prevHostname, newHostname);\n }\n\n // Also rename all instances\n const instances = await enumInstances(objects);\n const instancesToRename =\n oldHostname === undefined ? instances : instances.filter(i => i.common.host === oldHostname);\n if (instancesToRename.length > 0) {\n for (const instance of instancesToRename) {\n // Update each instance object\n await changeInstanceHost(objects, instance, newHostname);\n }\n } else {\n CLI.warn.noInstancesFoundOnHost(oldHostname);\n }\n return void callback(EXIT_CODES.NO_ERROR);\n } catch (err) {\n CLI.error.unknown(err.message);\n return void callback(1);\n }\n });\n }\n}\n\n/**\n * Changes the host an instance is running on\n *\n * @param objects The objects DB to use\n * @param instance The instance object\n * @param newHostname The new hostname the instance should be running on\n */\nasync function changeInstanceHost(\n objects: ObjectsClient,\n instance: ioBroker.InstanceObject,\n newHostname: string,\n): Promise<void> {\n const oldInstanceHost = instance.common.host;\n instance.from = getObjectFrom();\n instance.ts = Date.now();\n instance.common.host = newHostname;\n // and save it\n try {\n await objects.setObjectAsync(instance._id, instance);\n CLI.success.instanceHostChanged(instance._id, oldInstanceHost, newHostname);\n } catch (e) {\n CLI.error.cannotChangeObject(instance._id, e.message);\n // resolve anyways, we don't want to cause errors\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["os", "instances", "fs"]
|
|
7
7
|
}
|
|
@@ -9,14 +9,17 @@ interface CLILogsOptions {
|
|
|
9
9
|
export declare class CLILogs extends CLICommand {
|
|
10
10
|
private readonly fileSizes;
|
|
11
11
|
private isReady;
|
|
12
|
+
/**
|
|
13
|
+
* @param options The command options including context and parameters
|
|
14
|
+
*/
|
|
12
15
|
constructor(options: CLICommandOptions);
|
|
13
16
|
/**
|
|
14
17
|
* Executes a command
|
|
15
18
|
*
|
|
16
|
-
* @param args
|
|
19
|
+
* @param args The command arguments (the first is the sub-command)
|
|
17
20
|
* @param params additional parsed CLI parameters
|
|
18
21
|
*/
|
|
19
|
-
execute(args:
|
|
22
|
+
execute(args: string[], params: Record<string, any>): void;
|
|
20
23
|
/**
|
|
21
24
|
* Called by chokidar when watched files change
|
|
22
25
|
*
|
|
@@ -24,8 +27,11 @@ export declare class CLILogs extends CLICommand {
|
|
|
24
27
|
* @param event The type of change
|
|
25
28
|
* @param path Which path has changed
|
|
26
29
|
* @param stats Information about the file
|
|
30
|
+
* @param stats.size The current size of the file in bytes
|
|
27
31
|
*/
|
|
28
|
-
watchHandler(options: CLILogsOptions, event: string, path: string, stats
|
|
32
|
+
watchHandler(options: CLILogsOptions, event: string, path: string, stats?: {
|
|
33
|
+
size: number;
|
|
34
|
+
}): void;
|
|
29
35
|
/**
|
|
30
36
|
* If the log file belongs to today
|
|
31
37
|
*
|
|
@@ -5,6 +5,7 @@ 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 });
|
|
8
9
|
var __export = (target, all) => {
|
|
9
10
|
for (var name in all)
|
|
10
11
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -42,15 +43,21 @@ var import_node_module = require("node:module");
|
|
|
42
43
|
const require2 = (0, import_node_module.createRequire)(__import_meta_url || `file://${__filename}`);
|
|
43
44
|
const { getConfigFileName } = import_js_controller_common.tools;
|
|
44
45
|
class CLILogs extends import_cliCommand.CLICommand {
|
|
46
|
+
static {
|
|
47
|
+
__name(this, "CLILogs");
|
|
48
|
+
}
|
|
45
49
|
fileSizes = /* @__PURE__ */ new Map();
|
|
46
50
|
isReady = false;
|
|
51
|
+
/**
|
|
52
|
+
* @param options The command options including context and parameters
|
|
53
|
+
*/
|
|
47
54
|
constructor(options) {
|
|
48
55
|
super(options);
|
|
49
56
|
}
|
|
50
57
|
/**
|
|
51
58
|
* Executes a command
|
|
52
59
|
*
|
|
53
|
-
* @param args
|
|
60
|
+
* @param args The command arguments (the first is the sub-command)
|
|
54
61
|
* @param params additional parsed CLI parameters
|
|
55
62
|
*/
|
|
56
63
|
execute(args, params) {
|
|
@@ -100,8 +107,12 @@ class CLILogs extends import_cliCommand.CLICommand {
|
|
|
100
107
|
* @param event The type of change
|
|
101
108
|
* @param path Which path has changed
|
|
102
109
|
* @param stats Information about the file
|
|
110
|
+
* @param stats.size The current size of the file in bytes
|
|
103
111
|
*/
|
|
104
112
|
watchHandler(options, event, path, stats) {
|
|
113
|
+
if (!stats) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
105
116
|
if (event === "add" || !this.fileSizes.has(path)) {
|
|
106
117
|
this.fileSizes.set(path, stats.size);
|
|
107
118
|
if (stats.size > 0 && (this.isReady || options.complete && this.isTodaysLogfile(path))) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/cli/cliLogs.ts", "../../../../../../node_modules/@alcalzone/esm2cjs/shims/import.meta.url/shim.js"],
|
|
4
|
-
"sourcesContent": ["import { CLICommand, type CLICommandOptions } from './cliCommand.js';\nimport { tools, logger as toolsLogger } from '@iobroker/js-controller-common';\nimport chokidar from 'chokidar';\nimport fs from 'fs-extra';\nimport os from 'node:os';\nimport es from 'event-stream';\nimport { createRequire } from 'node:module';\n// eslint-disable-next-line unicorn/prefer-module\nconst require = createRequire(import.meta.url || `file://${__filename}`);\n\nconst { getConfigFileName } = tools;\n\ninterface CLILogsOptions {\n /** Whether to show today's full log */\n complete?: boolean;\n /** An optional RegExp to filter by */\n regex?: RegExp;\n}\n\n/** Command ioBroker state ... */\nexport class CLILogs extends CLICommand {\n private readonly fileSizes = new Map<string, number>();\n private isReady = false;\n\n constructor(options: CLICommandOptions) {\n super(options);\n }\n\n /**\n * Executes a command\n *\n * @param args\n * @param params additional parsed CLI parameters\n */\n execute(args:
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { CLICommand, type CLICommandOptions } from './cliCommand.js';\nimport { tools, logger as toolsLogger } from '@iobroker/js-controller-common';\nimport chokidar from 'chokidar';\nimport fs from 'fs-extra';\nimport os from 'node:os';\nimport es from 'event-stream';\nimport { createRequire } from 'node:module';\n// eslint-disable-next-line unicorn/prefer-module\nconst require = createRequire(import.meta.url || `file://${__filename}`);\n\nconst { getConfigFileName } = tools;\n\ninterface CLILogsOptions {\n /** Whether to show today's full log */\n complete?: boolean;\n /** An optional RegExp to filter by */\n regex?: RegExp;\n}\n\n/** Command ioBroker state ... */\nexport class CLILogs extends CLICommand {\n private readonly fileSizes = new Map<string, number>();\n private isReady = false;\n\n /**\n * @param options The command options including context and parameters\n */\n constructor(options: CLICommandOptions) {\n super(options);\n }\n\n /**\n * Executes a command\n *\n * @param args The command arguments (the first is the sub-command)\n * @param params additional parsed CLI parameters\n */\n execute(args: string[], params: Record<string, any>): void {\n const adapterName = args[0];\n const watch = params.watch || params.w;\n const count = params.lines || 1_000;\n\n const options: CLILogsOptions = {\n complete: this.options.all,\n };\n\n const config = fs.readJSONSync(require.resolve(getConfigFileName()));\n const logger = toolsLogger(config.log);\n // @ts-expect-error todo adjust logger type\n let fileName = logger.getFileName();\n if (fileName) {\n let lines = fs.readFileSync(fileName).toString('utf-8').split('\\n');\n lines = lines.filter(line => line);\n if (lines.length > count) {\n lines.splice(0, lines.length - count);\n }\n let regex: RegExp;\n if (adapterName) {\n //2019-03-02 13:26:54.698 - debug: iot.0 [ALEXA] Created ALEXA device: Bad.Hauptlicht.Aktor.STATE [\"turnOn\",\"turnOff\"]\n regex = new RegExp(`: ${adapterName}\\\\.`);\n options.regex = regex;\n }\n lines.forEach(line => {\n if (regex && !regex.test(line)) {\n return;\n }\n console.log(line);\n });\n\n if (watch) {\n fileName = fileName.replace(/\\\\/g, '/');\n const parts = fileName.split('/');\n parts.pop();\n chokidar\n .watch(`${parts.join('/')}/iobroker*`, {\n awaitWriteFinish: { stabilityThreshold: 500 },\n followSymlinks: false,\n })\n .on('all', this.watchHandler.bind(this, options))\n .on('ready', () => (this.isReady = true));\n }\n } else {\n console.log('No log file found');\n }\n }\n\n /**\n * Called by chokidar when watched files change\n *\n * @param options some options\n * @param event The type of change\n * @param path Which path has changed\n * @param stats Information about the file\n * @param stats.size The current size of the file in bytes\n */\n watchHandler(\n options: CLILogsOptions,\n event: string,\n path: string,\n stats?: {\n size: number;\n },\n ): void {\n if (!stats) {\n return;\n }\n if (event === 'add' || !this.fileSizes.has(path)) {\n this.fileSizes.set(path, stats.size);\n if (stats.size > 0 && (this.isReady || (options.complete && this.isTodaysLogfile(path)))) {\n this.streamChange(path, 0, options);\n }\n } else if (event === 'change') {\n const oldFileSize = this.fileSizes.get(path)!;\n this.fileSizes.set(path, stats.size);\n if (this.isReady && stats.size > oldFileSize) {\n this.streamChange(path, oldFileSize, options);\n }\n } else if (event === 'unlink') {\n this.fileSizes.delete(path);\n }\n }\n\n /**\n * If the log file belongs to today\n *\n * @param path The log file path\n */\n isTodaysLogfile(path: string): boolean {\n const YYYYMMDDDate = new Date().toJSON().slice(0, 10);\n return path.includes(YYYYMMDDDate);\n }\n\n /**\n * Streams a portion of a file to the console\n *\n * @param path The file to stream\n * @param start The offset in bytes where to start\n * @param options some options\n */\n streamChange(path: string, start: number, options: CLILogsOptions): void {\n const input = fs.createReadStream(path, {\n encoding: 'utf8',\n start,\n autoClose: true,\n });\n if (options.regex) {\n // Read the input line by line and only include the lines matching the filter\n input\n .pipe(es.split())\n .pipe(es.filterSync(line => options.regex!.test(line)))\n .pipe(es.mapSync((line: string) => line + os.EOL))\n .pipe(process.stdout);\n } else {\n // just pipe the input through\n tools.pipeLinewise(input, process.stdout);\n }\n }\n}\n", "export const __import_meta_url =\n typeof document === 'undefined' ? new (require('url'.replace('', '')).URL)('file:' + __filename).href :\n (document.currentScript && document.currentScript.src || new URL('main.js', document.baseURI).href)\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["require", "fs", "toolsLogger", "chokidar", "es", "os"]
|
|
7
7
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CLICommand, type CLICommandOptions } from './cliCommand.js';
|
|
2
|
+
/** Command iobroker message ... */
|
|
2
3
|
export declare class CLIMessage extends CLICommand {
|
|
3
4
|
/** @param options The CLI Message options */
|
|
4
5
|
constructor(options: CLICommandOptions);
|
|
@@ -7,6 +8,6 @@ export declare class CLIMessage extends CLICommand {
|
|
|
7
8
|
*
|
|
8
9
|
* @param args parsed arguments
|
|
9
10
|
*/
|
|
10
|
-
execute(args:
|
|
11
|
+
execute(args: string[]): void;
|
|
11
12
|
}
|
|
12
13
|
//# sourceMappingURL=cliMessage.d.ts.map
|
|
@@ -5,6 +5,7 @@ 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 });
|
|
8
9
|
var __export = (target, all) => {
|
|
9
10
|
for (var name in all)
|
|
10
11
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -35,6 +36,9 @@ var CLI = __toESM(require("./messages.js"), 1);
|
|
|
35
36
|
var import_cliCommand = require("./cliCommand.js");
|
|
36
37
|
var import_cliTools = require("./cliTools.js");
|
|
37
38
|
class CLIMessage extends import_cliCommand.CLICommand {
|
|
39
|
+
static {
|
|
40
|
+
__name(this, "CLIMessage");
|
|
41
|
+
}
|
|
38
42
|
/** @param options The CLI Message options */
|
|
39
43
|
constructor(options) {
|
|
40
44
|
super(options);
|
|
@@ -98,6 +102,7 @@ async function sendMessage(states, targetId, command, message) {
|
|
|
98
102
|
await states.pushMessage(targetId, { command, message, from: "cli" });
|
|
99
103
|
CLI.success.messageSent(targetId, command, message);
|
|
100
104
|
}
|
|
105
|
+
__name(sendMessage, "sendMessage");
|
|
101
106
|
// Annotate the CommonJS export names for ESM import in node:
|
|
102
107
|
0 && (module.exports = {
|
|
103
108
|
CLIMessage
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/cli/cliMessage.ts"],
|
|
4
|
-
"sourcesContent": ["import * as CLI from './messages.js';\nimport { CLICommand, type CLICommandOptions } from './cliCommand.js';\nimport { enumInstances } from './cliTools.js';\nimport type { Client as StatesClient } from '@iobroker/db-states-redis';\n\nexport class CLIMessage extends CLICommand {\n /** @param options The CLI Message options */\n constructor(options: CLICommandOptions) {\n super(options);\n }\n\n /**\n * Executes a command\n *\n * @param args parsed arguments\n */\n execute(args:
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import * as CLI from './messages.js';\nimport { CLICommand, type CLICommandOptions } from './cliCommand.js';\nimport { enumInstances } from './cliTools.js';\nimport type { Client as StatesClient } from '@iobroker/db-states-redis';\n\n/** Command iobroker message ... */\nexport class CLIMessage extends CLICommand {\n /** @param options The CLI Message options */\n constructor(options: CLICommandOptions) {\n super(options);\n }\n\n /**\n * Executes a command\n *\n * @param args parsed arguments\n */\n execute(args: string[]): void {\n const { callback, dbConnect, showHelp } = this.options;\n let [adapter, command, message] = args;\n if (adapter === null || adapter === undefined) {\n CLI.error.requiredArgumentMissing('adapter');\n showHelp();\n return void callback(1);\n }\n if (message === null || message === undefined) {\n if (command === null || command === undefined) {\n CLI.error.requiredArgumentMissing('message');\n showHelp();\n return void callback(1);\n }\n message = command;\n command = 'send';\n }\n // Try to parse JSON\n // TODO: can we use the methods from cliObjects?\n if (typeof message === 'string' && message.startsWith('{') && message.endsWith('}')) {\n message = JSON.parse(message);\n }\n\n dbConnect(async params => {\n const { states, objects } = params;\n\n try {\n const pos = adapter.indexOf('.');\n let instance = null;\n if (pos !== -1) {\n instance = adapter.substring(pos + 1);\n adapter = adapter.substring(0, pos);\n }\n let messageTargets = [];\n if (instance === null) {\n // This message wasn't meant for a specific instance,\n const adapterInstances = await enumInstances(objects, adapter);\n if (adapterInstances.length === 0) {\n CLI.error.noInstancesFound(adapter);\n return void callback(1);\n }\n messageTargets = adapterInstances.map(row => row._id);\n } else {\n messageTargets.unshift(`system.adapter.${adapter}.${instance}`);\n }\n\n // Send the message to all targets\n const messagePromises = messageTargets.map(t => sendMessage(states, t, command, message));\n await Promise.all(messagePromises);\n return void callback();\n } catch (err) {\n CLI.error.unknown(err.message);\n return void callback(1);\n }\n });\n }\n}\n\n/**\n * @param states The States DB\n * @param targetId The instance or adapter to send the message to\n * @param command The command to send\n * @param message The message to send\n */\nasync function sendMessage(states: StatesClient, targetId: string, command: string, message: string): Promise<void> {\n await states.pushMessage(targetId, { command, message, from: 'cli' });\n CLI.success.messageSent(targetId, command, message);\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;AAAA,UAAqB;AACrB,wBAAmD;AACnD,sBAA8B;AAIxB,MAAO,mBAAmB,6BAAU;EAN1C,OAM0C;;;;EAEtC,YAAY,SAA0B;AAClC,UAAM,OAAO;EACjB;;;;;;EAOA,QAAQ,MAAc;AAClB,UAAM,EAAE,UAAU,WAAW,SAAQ,IAAK,KAAK;AAC/C,QAAI,CAAC,SAAS,SAAS,OAAO,IAAI;AAClC,QAAI,YAAY,QAAQ,YAAY,QAAW;AAC3C,UAAI,MAAM,wBAAwB,SAAS;AAC3C,eAAQ;AACR,aAAO,KAAK,SAAS,CAAC;IAC1B;AACA,QAAI,YAAY,QAAQ,YAAY,QAAW;AAC3C,UAAI,YAAY,QAAQ,YAAY,QAAW;AAC3C,YAAI,MAAM,wBAAwB,SAAS;AAC3C,iBAAQ;AACR,eAAO,KAAK,SAAS,CAAC;MAC1B;AACA,gBAAU;AACV,gBAAU;IACd;AAGA,QAAI,OAAO,YAAY,YAAY,QAAQ,WAAW,GAAG,KAAK,QAAQ,SAAS,GAAG,GAAG;AACjF,gBAAU,KAAK,MAAM,OAAO;IAChC;AAEA,cAAU,OAAM,WAAS;AACrB,YAAM,EAAE,QAAQ,QAAO,IAAK;AAE5B,UAAI;AACA,cAAM,MAAM,QAAQ,QAAQ,GAAG;AAC/B,YAAI,WAAW;AACf,YAAI,QAAQ,IAAI;AACZ,qBAAW,QAAQ,UAAU,MAAM,CAAC;AACpC,oBAAU,QAAQ,UAAU,GAAG,GAAG;QACtC;AACA,YAAI,iBAAiB,CAAA;AACrB,YAAI,aAAa,MAAM;AAEnB,gBAAM,mBAAmB,UAAM,+BAAc,SAAS,OAAO;AAC7D,cAAI,iBAAiB,WAAW,GAAG;AAC/B,gBAAI,MAAM,iBAAiB,OAAO;AAClC,mBAAO,KAAK,SAAS,CAAC;UAC1B;AACA,2BAAiB,iBAAiB,IAAI,SAAO,IAAI,GAAG;QACxD,OAAO;AACH,yBAAe,QAAQ,kBAAkB,OAAO,IAAI,QAAQ,EAAE;QAClE;AAGA,cAAM,kBAAkB,eAAe,IAAI,OAAK,YAAY,QAAQ,GAAG,SAAS,OAAO,CAAC;AACxF,cAAM,QAAQ,IAAI,eAAe;AACjC,eAAO,KAAK,SAAQ;MACxB,SAAS,KAAK;AACV,YAAI,MAAM,QAAQ,IAAI,OAAO;AAC7B,eAAO,KAAK,SAAS,CAAC;MAC1B;IACJ,CAAC;EACL;;AASJ,eAAe,YAAY,QAAsB,UAAkB,SAAiB,SAAe;AAC/F,QAAM,OAAO,YAAY,UAAU,EAAE,SAAS,SAAS,MAAM,MAAK,CAAE;AACpE,MAAI,QAAQ,YAAY,UAAU,SAAS,OAAO;AACtD;AAHe;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -3,13 +3,16 @@ import type { Client as ObjectsClient } from '@iobroker/db-objects-redis';
|
|
|
3
3
|
import type { Client as StatesClient } from '@iobroker/db-states-redis';
|
|
4
4
|
/** Command iobroker object ... */
|
|
5
5
|
export declare class CLIObjects extends CLICommand {
|
|
6
|
+
/**
|
|
7
|
+
* @param options The command options including context and parameters
|
|
8
|
+
*/
|
|
6
9
|
constructor(options: CLICommandOptions);
|
|
7
10
|
/**
|
|
8
11
|
* Executes a command
|
|
9
12
|
*
|
|
10
|
-
* @param args
|
|
13
|
+
* @param args The command arguments (the first is the sub-command)
|
|
11
14
|
*/
|
|
12
|
-
execute(args:
|
|
15
|
+
execute(args: string[]): void;
|
|
13
16
|
/**
|
|
14
17
|
* Activates the usage of Redis Sets
|
|
15
18
|
*/
|
|
@@ -29,33 +32,33 @@ export declare class CLIObjects extends CLICommand {
|
|
|
29
32
|
/**
|
|
30
33
|
* Changes access rights for all objects matching the pattern
|
|
31
34
|
*
|
|
32
|
-
* @param args
|
|
35
|
+
* @param args The command arguments (object mode, state mode and pattern)
|
|
33
36
|
*/
|
|
34
|
-
chmod(args:
|
|
37
|
+
chmod(args: (string | number | undefined)[]): void;
|
|
35
38
|
/**
|
|
36
39
|
* Changes owner for all objects matching the pattern
|
|
37
40
|
*
|
|
38
|
-
* @param args
|
|
41
|
+
* @param args The command arguments (user, group and pattern)
|
|
39
42
|
*/
|
|
40
|
-
chown(args:
|
|
43
|
+
chown(args: (string | undefined)[]): void;
|
|
41
44
|
/**
|
|
42
45
|
* Lists all objects matching a pattern and their access rights
|
|
43
46
|
*
|
|
44
|
-
* @param args
|
|
47
|
+
* @param args The command arguments (the pattern to match)
|
|
45
48
|
*/
|
|
46
|
-
list(args:
|
|
49
|
+
list(args: string[]): void;
|
|
47
50
|
/**
|
|
48
51
|
* Retrieves an object or its property from the DB and prints it
|
|
49
52
|
*
|
|
50
|
-
* @param args
|
|
53
|
+
* @param args The command arguments (the object id and optional property path)
|
|
51
54
|
*/
|
|
52
|
-
get(args:
|
|
55
|
+
get(args: string[]): void;
|
|
53
56
|
/**
|
|
54
57
|
* Updates an object or its property with the given value
|
|
55
58
|
*
|
|
56
|
-
* @param args
|
|
59
|
+
* @param args The command arguments (the object id and the value to set)
|
|
57
60
|
*/
|
|
58
|
-
set(args:
|
|
61
|
+
set(args: string[]): void;
|
|
59
62
|
/**
|
|
60
63
|
* Encrypts all newly set properties of encryptedNative - currently customized for propPath
|
|
61
64
|
*
|
|
@@ -68,11 +71,11 @@ export declare class CLIObjects extends CLICommand {
|
|
|
68
71
|
/**
|
|
69
72
|
* Extends an object with the given value
|
|
70
73
|
*
|
|
71
|
-
* @param args
|
|
74
|
+
* @param args The command arguments (the object id and the value to extend with)
|
|
72
75
|
*/
|
|
73
|
-
extend(args:
|
|
76
|
+
extend(args: string[]): void;
|
|
74
77
|
/**
|
|
75
|
-
* Collects all
|
|
78
|
+
* Collects all objects for specific path
|
|
76
79
|
*
|
|
77
80
|
* @param objects class
|
|
78
81
|
* @param params parameters for getObjectView
|
|
@@ -83,15 +86,15 @@ export declare class CLIObjects extends CLICommand {
|
|
|
83
86
|
*
|
|
84
87
|
* @param objects class
|
|
85
88
|
* @param ids IDs
|
|
86
|
-
* @param callback
|
|
89
|
+
* @param callback Called with the exit code once all objects have been deleted
|
|
87
90
|
*/
|
|
88
91
|
_deleteObjects(objects: ObjectsClient, ids: string[], callback: (exitCode: number) => void): Promise<void>;
|
|
89
92
|
/**
|
|
90
93
|
* Deletes an object
|
|
91
94
|
*
|
|
92
|
-
* @param args
|
|
95
|
+
* @param args The command arguments (the object id to delete)
|
|
93
96
|
*/
|
|
94
|
-
delete(args:
|
|
97
|
+
delete(args: string[]): void;
|
|
95
98
|
/**
|
|
96
99
|
* Prints a list of objects and its access properties
|
|
97
100
|
*
|