@iobroker/js-controller-cli 7.0.2 → 7.0.4-alpha.0-20241116-db3148f4f

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/build/cjs/index.js +2 -1
  2. package/build/cjs/index.js.map +2 -2
  3. package/build/cjs/lib/_Types.d.ts +0 -1
  4. package/build/cjs/lib/cli/cliCert.js +17 -0
  5. package/build/cjs/lib/cli/cliCert.js.map +1 -1
  6. package/build/cjs/lib/cli/cliCommand.d.ts +0 -1
  7. package/build/cjs/lib/cli/cliCommand.js +6 -0
  8. package/build/cjs/lib/cli/cliCommand.js.map +1 -1
  9. package/build/cjs/lib/cli/cliCompact.js +30 -1
  10. package/build/cjs/lib/cli/cliCompact.js.map +1 -1
  11. package/build/cjs/lib/cli/cliDebug.js +16 -0
  12. package/build/cjs/lib/cli/cliDebug.js.map +1 -1
  13. package/build/cjs/lib/cli/cliHost.js +35 -0
  14. package/build/cjs/lib/cli/cliHost.js.map +1 -1
  15. package/build/cjs/lib/cli/cliLogs.js +33 -3
  16. package/build/cjs/lib/cli/cliLogs.js.map +3 -3
  17. package/build/cjs/lib/cli/cliMessage.js +10 -0
  18. package/build/cjs/lib/cli/cliMessage.js.map +1 -1
  19. package/build/cjs/lib/cli/cliObjects.d.ts +0 -1
  20. package/build/cjs/lib/cli/cliObjects.js +85 -0
  21. package/build/cjs/lib/cli/cliObjects.js.map +1 -1
  22. package/build/cjs/lib/cli/cliPlugin.js +23 -2
  23. package/build/cjs/lib/cli/cliPlugin.js.map +3 -3
  24. package/build/cjs/lib/cli/cliProcess.js +65 -2
  25. package/build/cjs/lib/cli/cliProcess.js.map +1 -1
  26. package/build/cjs/lib/cli/cliStates.d.ts +0 -1
  27. package/build/cjs/lib/cli/cliStates.js +38 -0
  28. package/build/cjs/lib/cli/cliStates.js.map +1 -1
  29. package/build/cjs/lib/cli/cliTools.js.map +1 -1
  30. package/build/cjs/lib/cli/messages.d.ts +27 -23
  31. package/build/cjs/lib/cli/messages.js.map +1 -1
  32. package/build/cjs/lib/setup/dbConnection.js +9 -0
  33. package/build/cjs/lib/setup/dbConnection.js.map +1 -1
  34. package/build/cjs/lib/setup/formatters.js.map +1 -1
  35. package/build/cjs/lib/setup/multihostClient.d.ts +0 -1
  36. package/build/cjs/lib/setup/multihostClient.js +36 -0
  37. package/build/cjs/lib/setup/multihostClient.js.map +1 -1
  38. package/build/cjs/lib/setup/setupBackup.js +112 -2
  39. package/build/cjs/lib/setup/setupBackup.js.map +1 -1
  40. package/build/cjs/lib/setup/setupInstall.d.ts +6 -6
  41. package/build/cjs/lib/setup/setupInstall.js +198 -57
  42. package/build/cjs/lib/setup/setupInstall.js.map +4 -4
  43. package/build/cjs/lib/setup/setupLicense.js +9 -0
  44. package/build/cjs/lib/setup/setupLicense.js.map +1 -1
  45. package/build/cjs/lib/setup/setupList.d.ts +0 -1
  46. package/build/cjs/lib/setup/setupList.js +4 -0
  47. package/build/cjs/lib/setup/setupList.js.map +1 -1
  48. package/build/cjs/lib/setup/setupMultihost.d.ts +2 -5
  49. package/build/cjs/lib/setup/setupMultihost.js +58 -33
  50. package/build/cjs/lib/setup/setupMultihost.js.map +3 -3
  51. package/build/cjs/lib/setup/setupPacketManager.js +41 -0
  52. package/build/cjs/lib/setup/setupPacketManager.js.map +1 -1
  53. package/build/cjs/lib/setup/setupRepo.js +60 -0
  54. package/build/cjs/lib/setup/setupRepo.js.map +1 -1
  55. package/build/cjs/lib/setup/setupSetup.d.ts +0 -1
  56. package/build/cjs/lib/setup/setupSetup.js +79 -5
  57. package/build/cjs/lib/setup/setupSetup.js.map +3 -3
  58. package/build/cjs/lib/setup/setupUpgrade.js +34 -0
  59. package/build/cjs/lib/setup/setupUpgrade.js.map +1 -1
  60. package/build/cjs/lib/setup/setupUpload.d.ts +0 -3
  61. package/build/cjs/lib/setup/setupUpload.js +43 -0
  62. package/build/cjs/lib/setup/setupUpload.js.map +1 -1
  63. package/build/cjs/lib/setup/setupUsers.d.ts +0 -1
  64. package/build/cjs/lib/setup/setupUsers.js +109 -0
  65. package/build/cjs/lib/setup/setupUsers.js.map +1 -1
  66. package/build/cjs/lib/setup/setupVendor.js +18 -1
  67. package/build/cjs/lib/setup/setupVendor.js.map +1 -1
  68. package/build/cjs/lib/setup/setupVisDebug.js +16 -0
  69. package/build/cjs/lib/setup/setupVisDebug.js.map +1 -1
  70. package/build/cjs/lib/setup/utils.d.ts +1 -1
  71. package/build/cjs/lib/setup/utils.js +8 -4
  72. package/build/cjs/lib/setup/utils.js.map +2 -2
  73. package/build/cjs/lib/setup.js +17 -6
  74. package/build/cjs/lib/setup.js.map +3 -3
  75. package/build/esm/index.d.ts.map +1 -1
  76. package/build/esm/index.js +1 -0
  77. package/build/esm/index.js.map +1 -1
  78. package/build/esm/lib/_Types.d.ts +0 -1
  79. package/build/esm/lib/_Types.d.ts.map +1 -1
  80. package/build/esm/lib/cli/cliCommand.d.ts +0 -1
  81. package/build/esm/lib/cli/cliCommand.d.ts.map +1 -1
  82. package/build/esm/lib/cli/cliObjects.d.ts +0 -1
  83. package/build/esm/lib/cli/cliObjects.d.ts.map +1 -1
  84. package/build/esm/lib/cli/cliStates.d.ts +0 -1
  85. package/build/esm/lib/cli/cliStates.d.ts.map +1 -1
  86. package/build/esm/lib/cli/messages.d.ts +27 -23
  87. package/build/esm/lib/cli/messages.d.ts.map +1 -1
  88. package/build/esm/lib/setup/multihostClient.d.ts +0 -1
  89. package/build/esm/lib/setup/multihostClient.d.ts.map +1 -1
  90. package/build/esm/lib/setup/setupInstall.d.ts +6 -6
  91. package/build/esm/lib/setup/setupInstall.d.ts.map +1 -1
  92. package/build/esm/lib/setup/setupInstall.js +37 -70
  93. package/build/esm/lib/setup/setupInstall.js.map +1 -1
  94. package/build/esm/lib/setup/setupList.d.ts +0 -1
  95. package/build/esm/lib/setup/setupList.d.ts.map +1 -1
  96. package/build/esm/lib/setup/setupMultihost.d.ts +2 -5
  97. package/build/esm/lib/setup/setupMultihost.d.ts.map +1 -1
  98. package/build/esm/lib/setup/setupMultihost.js +12 -37
  99. package/build/esm/lib/setup/setupMultihost.js.map +1 -1
  100. package/build/esm/lib/setup/setupSetup.d.ts +0 -1
  101. package/build/esm/lib/setup/setupSetup.d.ts.map +1 -1
  102. package/build/esm/lib/setup/setupUpload.d.ts +0 -3
  103. package/build/esm/lib/setup/setupUpload.d.ts.map +1 -1
  104. package/build/esm/lib/setup/setupUsers.d.ts +0 -1
  105. package/build/esm/lib/setup/setupUsers.d.ts.map +1 -1
  106. package/build/esm/lib/setup/utils.d.ts +1 -1
  107. package/build/esm/lib/setup/utils.d.ts.map +1 -1
  108. package/build/esm/lib/setup/utils.js +3 -3
  109. package/build/esm/lib/setup/utils.js.map +1 -1
  110. package/build/tsconfig.build.tsbuildinfo +1 -1
  111. package/package.json +4 -4
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/cli/cliMessage.ts"],
4
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: any[]): 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;;;;;UAAqB;AACrB,wBAAmD;AACnD,sBAA8B;AAGxB,MAAO,mBAAmB,6BAAU;EAEtC,YAAY,SAA0B;AAClC,UAAM,OAAO;EACjB;EAOA,QAAQ,MAAW;AACf,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,WAAW,UAAU;QAClE;AAGA,cAAM,kBAAkB,eAAe,IAAI,OAAK,YAAY,QAAQ,GAAG,SAAS,OAAO,CAAC;AACxF,cAAM,QAAQ,IAAI,eAAe;AACjC,eAAO,KAAK,SAAQ;MACxB,SAAS,KAAP;AACE,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;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;AAAA,UAAqB;AACrB,wBAAmD;AACnD,sBAA8B;AAGxB,MAAO,mBAAmB,6BAAU;;EAEtC,YAAY,SAA0B;AAClC,UAAM,OAAO;EACjB;;;;;;EAOA,QAAQ,MAAW;AACf,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;",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,3 @@
1
- /// <reference types="@iobroker/types-dev" />
2
1
  import { CLICommand, type CLICommandOptions } from './cliCommand.js';
3
2
  import type { Client as ObjectsClient } from '@iobroker/db-objects-redis';
4
3
  import type { Client as StatesClient } from '@iobroker/db-states-redis';
@@ -18,6 +18,10 @@ var __copyProps = (to, from, except, desc) => {
18
18
  return to;
19
19
  };
20
20
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
25
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
26
  mod
23
27
  ));
@@ -35,6 +39,11 @@ class CLIObjects extends import_cliCommand.CLICommand {
35
39
  constructor(options) {
36
40
  super(options);
37
41
  }
42
+ /**
43
+ * Executes a command
44
+ *
45
+ * @param args
46
+ */
38
47
  execute(args) {
39
48
  const { callback, showHelp } = this.options;
40
49
  const command = args[0];
@@ -69,6 +78,9 @@ class CLIObjects extends import_cliCommand.CLICommand {
69
78
  return void callback(3);
70
79
  }
71
80
  }
81
+ /**
82
+ * Activates the usage of Redis Sets
83
+ */
72
84
  activateSets() {
73
85
  const { callback, dbConnect } = this.options;
74
86
  dbConnect(async (params) => {
@@ -91,6 +103,9 @@ class CLIObjects extends import_cliCommand.CLICommand {
91
103
  return void callback(import_js_controller_common.EXIT_CODES.NO_ERROR);
92
104
  });
93
105
  }
106
+ /**
107
+ * Deactivates the usage of Redis Sets
108
+ */
94
109
  deactivateSets() {
95
110
  const { callback, dbConnect } = this.options;
96
111
  dbConnect(async (params) => {
@@ -105,6 +120,9 @@ class CLIObjects extends import_cliCommand.CLICommand {
105
120
  return void callback(import_js_controller_common.EXIT_CODES.NO_ERROR);
106
121
  });
107
122
  }
123
+ /**
124
+ * Get the protocol version
125
+ */
108
126
  getDBVersion() {
109
127
  const { callback, dbConnect } = this.options;
110
128
  dbConnect(async (params) => {
@@ -114,6 +132,9 @@ class CLIObjects extends import_cliCommand.CLICommand {
114
132
  return void callback(import_js_controller_common.EXIT_CODES.NO_ERROR);
115
133
  });
116
134
  }
135
+ /**
136
+ * Set protocol version
137
+ */
117
138
  setDBVersion() {
118
139
  const { callback, dbConnect } = this.options;
119
140
  dbConnect(async (params) => {
@@ -138,6 +159,11 @@ class CLIObjects extends import_cliCommand.CLICommand {
138
159
  return void callback(import_js_controller_common.EXIT_CODES.NO_ERROR);
139
160
  });
140
161
  }
162
+ /**
163
+ * Changes access rights for all objects matching the pattern
164
+ *
165
+ * @param args
166
+ */
141
167
  chmod(args) {
142
168
  const { callback, dbConnect } = this.options;
143
169
  let [modeObject, modeState, pattern] = args.slice(1);
@@ -163,6 +189,11 @@ class CLIObjects extends import_cliCommand.CLICommand {
163
189
  });
164
190
  });
165
191
  }
192
+ /**
193
+ * Changes owner for all objects matching the pattern
194
+ *
195
+ * @param args
196
+ */
166
197
  chown(args) {
167
198
  const { callback, dbConnect } = this.options;
168
199
  let [user, group, pattern] = args.slice(1);
@@ -190,6 +221,11 @@ class CLIObjects extends import_cliCommand.CLICommand {
190
221
  });
191
222
  });
192
223
  }
224
+ /**
225
+ * Lists all objects matching a pattern and their access rights
226
+ *
227
+ * @param args
228
+ */
193
229
  list(args) {
194
230
  const { callback, dbConnect } = this.options;
195
231
  let pattern = args[1];
@@ -204,6 +240,11 @@ class CLIObjects extends import_cliCommand.CLICommand {
204
240
  });
205
241
  });
206
242
  }
243
+ /**
244
+ * Retrieves an object or its property from the DB and prints it
245
+ *
246
+ * @param args
247
+ */
207
248
  get(args) {
208
249
  const { callback, pretty, dbConnect } = this.options;
209
250
  const [id, propPath] = args.slice(1);
@@ -231,6 +272,11 @@ class CLIObjects extends import_cliCommand.CLICommand {
231
272
  });
232
273
  });
233
274
  }
275
+ /**
276
+ * Updates an object or its property with the given value
277
+ *
278
+ * @param args
279
+ */
234
280
  set(args) {
235
281
  const { callback, dbConnect } = this.options;
236
282
  const id = args[1];
@@ -279,6 +325,14 @@ class CLIObjects extends import_cliCommand.CLICommand {
279
325
  }
280
326
  });
281
327
  }
328
+ /**
329
+ * Encrypts all newly set properties of encryptedNative - currently customized for propPath
330
+ *
331
+ * @param objects - objects db instance
332
+ * @param res - object which will be adapted
333
+ * @param propPath - path of the changed property
334
+ * @param value - value which has been newly set to the property
335
+ */
282
336
  async _autoEncrypt(objects, res, propPath, value) {
283
337
  if (/^native\..+[^.]$/g.test(propPath) && typeof value === "string") {
284
338
  const prop = propPath.split(".")[1];
@@ -304,6 +358,11 @@ class CLIObjects extends import_cliCommand.CLICommand {
304
358
  }
305
359
  }
306
360
  }
361
+ /**
362
+ * Extends an object with the given value
363
+ *
364
+ * @param args
365
+ */
307
366
  extend(args) {
308
367
  const { callback, dbConnect } = this.options;
309
368
  const id = args[1];
@@ -330,6 +389,12 @@ class CLIObjects extends import_cliCommand.CLICommand {
330
389
  });
331
390
  });
332
391
  }
392
+ /**
393
+ * Collects all object for specific path
394
+ *
395
+ * @param objects class
396
+ * @param params parameters for getObjectView
397
+ */
333
398
  async _collectObjects(objects, params) {
334
399
  const types = [
335
400
  "state",
@@ -359,6 +424,13 @@ class CLIObjects extends import_cliCommand.CLICommand {
359
424
  }
360
425
  return result;
361
426
  }
427
+ /**
428
+ * Delete all object from list sequentially
429
+ *
430
+ * @param objects class
431
+ * @param ids IDs
432
+ * @param callback
433
+ */
362
434
  async _deleteObjects(objects, ids, callback) {
363
435
  if (!ids || !ids.length) {
364
436
  return import_js_controller_common.tools.maybeCallback(callback, import_js_controller_common.EXIT_CODES.NO_ERROR);
@@ -379,6 +451,11 @@ class CLIObjects extends import_cliCommand.CLICommand {
379
451
  }
380
452
  return import_js_controller_common.tools.maybeCallback(callback, import_js_controller_common.EXIT_CODES.NO_ERROR);
381
453
  }
454
+ /**
455
+ * Deletes an object
456
+ *
457
+ * @param args
458
+ */
382
459
  delete(args) {
383
460
  const { callback, dbConnect } = this.options;
384
461
  const id = args[1];
@@ -435,6 +512,14 @@ class CLIObjects extends import_cliCommand.CLICommand {
435
512
  }
436
513
  });
437
514
  }
515
+ /**
516
+ * Prints a list of objects and its access properties
517
+ *
518
+ * @param objects objects db
519
+ * @param states states db
520
+ * @param err An error (if one occurred)
521
+ * @param objList The object list to print
522
+ */
438
523
  async printObjectList(objects, states, err, objList) {
439
524
  const { callback } = this.options;
440
525
  if (err) {
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/cli/cliObjects.ts"],
4
4
  "sourcesContent": ["import { CLICommand, type CLICommandOptions } from './cliCommand.js';\n\nimport * as CLI from './messages.js';\nimport { formatValue } from './cliTools.js';\nimport { tools, EXIT_CODES } from '@iobroker/js-controller-common';\nimport type { Client as ObjectsClient } from '@iobroker/db-objects-redis';\nimport type { Client as StatesClient } from '@iobroker/db-states-redis';\n\ninterface ParsedPropPathAndAssignment {\n propPath?: string;\n value: unknown;\n}\n\n/** Command iobroker object ... */\nexport class CLIObjects 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 { callback, showHelp } = this.options;\n const command = args[0];\n\n switch (command) {\n case 'chmod':\n return this.chmod(args);\n case 'chown':\n return this.chown(args);\n case 'list':\n case 'l':\n return this.list(args);\n case 'get':\n return this.get(args);\n case 'set':\n return this.set(args);\n case 'extend':\n return this.extend(args);\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 case 'activateSets':\n return this.activateSets();\n case 'deactivateSets':\n return this.deactivateSets();\n default:\n CLI.error.unknownCommand('object', command);\n showHelp();\n return void callback(3);\n }\n }\n\n /**\n * Activates the usage of Redis Sets\n */\n activateSets(): void {\n const { callback, dbConnect } = this.options;\n dbConnect(async params => {\n const { states, objects } = params;\n\n const useSetsIndicator = await objects.getMeta('objects.features.useSets');\n\n if (!useSetsIndicator || !parseInt(useSetsIndicator)) {\n // all hosts need to be stopped for this\n if (await tools.isHostRunning(objects, states)) {\n console.log('Cannot activate the usage of Redis Sets while one or more hosts are running');\n return void callback(EXIT_CODES.CONTROLLER_RUNNING);\n }\n\n await objects.activateSets();\n const noMigrated = await objects.migrateToSets();\n\n if (noMigrated) {\n console.log(`Successfully migrated ${noMigrated} objects to Redis Sets`);\n }\n console.log(\n `Successfully activated the usage of Redis Sets. Please make sure to only use js-controller 4.0 or higher on all hosts!`,\n );\n } else {\n console.log('Redis Sets are already activated.');\n }\n return void callback(EXIT_CODES.NO_ERROR);\n });\n }\n\n /**\n * Deactivates the usage of Redis Sets\n */\n deactivateSets(): void {\n const { callback, dbConnect } = this.options;\n dbConnect(async params => {\n const { objects } = params;\n const useSetsIndicator = await objects.getMeta('objects.features.useSets');\n\n if (useSetsIndicator && parseInt(useSetsIndicator)) {\n await objects.deactivateSets();\n console.log(`Successfully deactivated the usage of Redis Sets.`);\n } else {\n console.log('Redis Sets are already deactivated.');\n }\n return void callback(EXIT_CODES.NO_ERROR);\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 { objects } = params;\n\n const version = await objects.getProtocolVersion();\n console.log(`Current Objects DB protocol version: ${version}`);\n return void callback(EXIT_CODES.NO_ERROR);\n });\n }\n\n /**\n * Set protocol version\n */\n setDBVersion(): void {\n const { callback, dbConnect } = this.options;\n dbConnect(async params => {\n const { objects } = params;\n const rl = await import('readline-sync');\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(EXIT_CODES.NO_ERROR);\n }\n\n try {\n await objects.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(`Objects DB protocol updated to version ${this.options.version}`);\n return void callback(EXIT_CODES.NO_ERROR);\n });\n }\n\n /**\n * Changes access rights for all objects matching the pattern\n *\n * @param args\n */\n chmod(args: any[]): void {\n const { callback, dbConnect } = this.options;\n let [modeObject, modeState, pattern] = args.slice(1);\n\n // Yargs converts numeric string to number, so we can use that to test\n // Afterwards we parse them ourselves, but with base16\n if (typeof modeObject !== 'number') {\n CLI.error.requiredArgumentMissing('mode', 'object chmod 644 system.*');\n return void callback(1);\n }\n modeObject = parseInt(modeObject.toString(), 16);\n\n if (typeof modeState === 'number') {\n // a mode for the state was given, convert it\n modeState = parseInt(modeState.toString(), 16);\n } else {\n pattern = modeState;\n modeState = undefined;\n }\n\n if (pattern === undefined) {\n CLI.error.requiredArgumentMissing('pattern', 'object chmod 644 system.*');\n return void callback(1);\n }\n\n dbConnect(params => {\n const { objects, states } = params;\n\n objects.chmodObject(\n pattern,\n { user: 'system.user.admin', object: modeObject, state: modeState },\n (err, processed) => {\n // Print the new object rights\n this.printObjectList(objects, states, err?.message, processed);\n },\n );\n });\n }\n\n /**\n * Changes owner for all objects matching the pattern\n *\n * @param args\n */\n chown(args: any[]): void {\n const { callback, dbConnect } = this.options;\n let [user, group, pattern] = args.slice(1);\n\n if (!pattern) {\n pattern = group;\n group = undefined;\n }\n\n if (!user) {\n CLI.error.requiredArgumentMissing('user', 'object chown user system.*');\n return void callback(1);\n } else if (!user.startsWith('system.user.')) {\n user = `system.user.${user}`;\n }\n if (group && !group.startsWith('system.group.')) {\n group = `system.group.${group}`;\n }\n\n if (!pattern) {\n CLI.error.requiredArgumentMissing('pattern', 'object chown user system.*');\n return void callback(1);\n }\n dbConnect(params => {\n const { objects, states } = params;\n\n objects.chownObject(\n pattern,\n { user: 'system.user.admin', owner: user, ownerGroup: group },\n (err, processed) => {\n // Print the new object rights\n this.printObjectList(objects, states, err?.message, processed);\n },\n );\n });\n }\n\n /**\n * Lists all objects matching a pattern and their access rights\n *\n * @param args\n */\n list(args: any[]): void {\n const { callback, dbConnect } = this.options;\n let pattern = args[1];\n if (typeof pattern === 'string') {\n pattern = { startkey: pattern.replace('*', ''), endkey: pattern.replace('*', '\\u9999') };\n }\n\n dbConnect(params => {\n const { objects, states } = params;\n\n objects.getObjectList(pattern, { user: 'system.user.admin', sorted: true }, (err, processed) => {\n this.printObjectList(\n objects,\n states,\n err?.message,\n processed && processed.rows && processed.rows.map(r => r.value),\n );\n return void callback(EXIT_CODES.NO_ERROR);\n });\n });\n }\n\n /**\n * Retrieves an object or its property from the DB and prints it\n *\n * @param args\n */\n get(args: any[]): void {\n const { callback, pretty, dbConnect } = this.options;\n const [id, propPath] = args.slice(1);\n if (!id) {\n CLI.error.requiredArgumentMissing('id', 'object get id [propertypath]');\n return void callback(1);\n }\n\n // If propPath is passed, the given property will be retrieved instead.\n // For example: `\"native.something[2].onething\"` selects `onething` of the 3rd array element of `object.native.something`.\n\n dbConnect(params => {\n const { objects } = params;\n\n objects.getObject(id, (err, res) => {\n if (err || !res) {\n CLI.error.objectNotFound(id, err?.message);\n return void callback(3);\n }\n if (typeof propPath === 'string') {\n // We want to select a part of the object\n try {\n res = deepSelectProperty(res, propPath);\n } catch {\n CLI.error.objectPropertyNotFound(id, propPath);\n return void callback(3);\n }\n }\n console.log(formatValue(res, pretty));\n return void callback(EXIT_CODES.NO_ERROR);\n });\n });\n }\n\n /**\n * Updates an object or its property with the given value\n *\n * @param args\n */\n set(args: any[]): void {\n const { callback, dbConnect } = this.options;\n const id: string = args[1];\n if (!id) {\n CLI.error.requiredArgumentMissing('id', 'object set id [propertypath=]value');\n return void callback(1);\n }\n\n const lastArg = args.length >= 2 ? args.slice(2).join(' ') : undefined;\n const parsedArg = parsePropPathAndAssignment(lastArg!);\n if (!parsedArg) {\n CLI.error.invalidPropertyOrValue();\n return void callback(3);\n }\n const { propPath, value } = parsedArg;\n\n dbConnect(params => {\n const { objects } = params;\n\n const doSetObject = (obj: any): void => {\n objects.setObject(id, obj, err => {\n if (err) {\n CLI.error.cannotUpdateObject(id, err.message);\n return void callback(1);\n }\n CLI.success.objectUpdated(id);\n return void callback(EXIT_CODES.NO_ERROR);\n });\n };\n if (!propPath) {\n // We set the entire object, no need to retrieve it first\n doSetObject(value as any);\n } else {\n // We want to update a part of the object\n // Retrieve the object first\n objects.getObject(id, async (err, res) => {\n if (err || !res) {\n CLI.error.objectNotFound(id, err?.message);\n return void callback(3);\n }\n try {\n deepSetProperty(res, propPath, value);\n } catch {\n CLI.error.objectPropertyNotFound(id, propPath);\n return void callback(3);\n }\n\n // auto encrypt -> only do that here, no one configures an instance by setting the whole object,\n // else it would be copied and probably already encrypted\n if (\n /^system\\.adapter\\.(?<adapterName>.+)\\.(?<instanceNr>\\d+)$/g.test(id) &&\n 'encryptedNative' in res\n ) {\n await this._autoEncrypt(objects, res, propPath, value);\n }\n\n doSetObject(res);\n });\n }\n });\n }\n\n /**\n * Encrypts all newly set properties of encryptedNative - currently customized for propPath\n *\n * @param objects - objects db instance\n * @param res - object which will be adapted\n * @param propPath - path of the changed property\n * @param value - value which has been newly set to the property\n */\n private async _autoEncrypt(\n objects: ObjectsClient,\n res: ioBroker.AnyObject,\n propPath: string,\n value: any,\n ): Promise<void> {\n // input: it's an instance object and has encrypted native, was a native value set?\n if (/^native\\..+[^.]$/g.test(propPath) && typeof value === 'string') {\n // single native property\n const prop = propPath.split('.')[1];\n if ('encryptedNative' in res && res.encryptedNative?.includes(prop)) {\n try {\n const config = await objects.getObjectAsync('system.config');\n res.native[prop] = tools.encrypt(config!.native.secret, res.native[prop]);\n } catch (e) {\n console.error(`Could not auto-encrypt property \"${prop}\": ${e.message}`);\n }\n }\n } else if (propPath === 'native' && tools.isObject(value)) {\n // whole native attribute\n let config;\n for (const prop in value) {\n if (\n typeof (res.native as Record<string, any>)[prop] === 'string' &&\n 'encryptedNative' in res &&\n res.encryptedNative?.includes(prop)\n ) {\n try {\n config = config || (await objects.getObjectAsync('system.config'))!;\n res.native[prop] = tools.encrypt(config.native.secret, res.native[prop]);\n } catch (e) {\n console.error(`Could not auto-encrypt property \"${prop}\": ${e.message}`);\n }\n }\n }\n }\n }\n\n /**\n * Extends an object with the given value\n *\n * @param args\n */\n extend(args: any[]): void {\n const { callback, dbConnect } = this.options;\n const id: string = args[1];\n if (!id) {\n CLI.error.requiredArgumentMissing('id', 'object extend id <json-value>');\n return void callback(1);\n }\n\n const lastArg = args.length >= 2 ? args.slice(2).join(' ') : undefined;\n const parsedArg = parsePropPathAndAssignment(lastArg!);\n // extend does not accept a property path, so error when one is passed\n if (!parsedArg || parsedArg.propPath) {\n CLI.error.invalidJSONValue();\n return void callback(3);\n }\n const { value } = parsedArg;\n\n dbConnect(params => {\n const { objects } = params;\n\n objects.extendObject(id, value as any, null, err => {\n if (err) {\n CLI.error.cannotUpdateObject(id, err.message);\n return void callback(1);\n }\n CLI.success.objectUpdated(id);\n return void callback(EXIT_CODES.NO_ERROR);\n });\n });\n }\n\n /**\n * Collects all object for specific path\n *\n * @param objects class\n * @param params parameters for getObjectView\n */\n async _collectObjects(objects: ObjectsClient, params: ioBroker.GetObjectViewParams): Promise<ioBroker.AnyObject[]> {\n const types = [\n 'state',\n 'channel',\n 'device',\n 'enum',\n 'instance',\n 'host',\n 'adapter',\n 'meta',\n 'config',\n 'group',\n 'user',\n 'script',\n ];\n const result: ioBroker.AnyObject[] = [];\n\n for (const type of types) {\n try {\n const res = await objects.getObjectViewAsync('system', type, params);\n res.rows.forEach(item => {\n if (item.value) {\n result.push(item.value);\n }\n });\n } catch {\n // ignore\n }\n }\n return result;\n }\n\n /**\n * Delete all object from list sequentially\n *\n * @param objects class\n * @param ids IDs\n * @param callback\n */\n async _deleteObjects(objects: ObjectsClient, ids: string[], callback: (exitCode: number) => void): Promise<void> {\n if (!ids || !ids.length) {\n return tools.maybeCallback(callback, EXIT_CODES.NO_ERROR);\n }\n let allEnums;\n\n try {\n // cache all enums, else it will be slow to delete many objects\n allEnums = await tools.getAllEnums(objects);\n } catch (e) {\n console.error(`Could not retrieve all enums: ${e.message}`);\n }\n\n for (const id of ids) {\n try {\n await objects.delObjectAsync(id);\n await tools.removeIdFromAllEnums(objects, id, allEnums);\n } catch (e) {\n console.warn(`Could not delete object or remove \"${id}\" from enums: ${e.message}`);\n }\n }\n return tools.maybeCallback(callback, EXIT_CODES.NO_ERROR);\n }\n\n /**\n * Deletes an object\n *\n * @param args\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', 'object delete id');\n return void callback(1);\n }\n\n dbConnect(async params => {\n const { objects } = params;\n\n if (id.endsWith('*')) {\n const params = {\n startkey: id.replace(/\\*/g, ''),\n endkey: id.replace(/\\*/g, '\\u9999'),\n };\n\n const result = await this._collectObjects(objects, params);\n if (!result || !result.length) {\n console.log('No IDs found for this pattern.');\n return void callback(EXIT_CODES.NO_ERROR);\n }\n const ids = result.map(item => item._id);\n\n // if no auto confirmation, ask user\n if (!this.options.f && this.options.y && !this.options.yes) {\n const rl = (await import('node:readline')).createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n rl.question(`${result.length} object(s) will be deleted. Are you sure? [y/N]: `, answer => {\n rl.close();\n if (\n answer === 'y' ||\n answer === 'yes' ||\n answer === 'j' ||\n answer === 'ja' ||\n answer === '\u0434\u0430' ||\n answer === '\u0434'\n ) {\n this._deleteObjects(objects, ids, callback);\n } else {\n console.log('Aborted.');\n return void callback(3);\n }\n });\n } else {\n this._deleteObjects(objects, ids, callback);\n }\n } else {\n // only one object\n objects.delObject(id, async err => {\n if (err) {\n CLI.error.objectNotFound(id, err.message);\n callback(3);\n } else {\n try {\n await tools.removeIdFromAllEnums(objects, id);\n CLI.success.objectDeleted(id);\n callback(EXIT_CODES.NO_ERROR);\n } catch (e) {\n CLI.error.cannotDeleteObjectFromEnums(id, e.message);\n callback(3);\n }\n }\n });\n }\n });\n }\n\n /**\n * Prints a list of objects and its access properties\n *\n * @param objects objects db\n * @param states states db\n * @param err An error (if one occurred)\n * @param objList The object list to print\n */\n async printObjectList(\n objects: ObjectsClient,\n states: StatesClient,\n err: string | undefined,\n objList?: ioBroker.AnyObject[],\n ): Promise<void> {\n // TODO: is this supposed to be here?\n const { callback } = this.options;\n if (err) {\n console.error(err);\n return void callback(33);\n }\n if (objList !== null && objList !== undefined) {\n const { List } = await import('../setup/setupList.js');\n const list = new List({\n states,\n objects,\n processExit: callback,\n });\n list.showObjectHeader();\n objList.forEach(list.showObject);\n }\n setTimeout(callback, 1_000);\n }\n}\n\n/**\n * Reverses a string\n *\n * @param str The string to reverse\n */\nfunction reverseString(str: string): string {\n return Array.from(str).reverse().join('');\n}\n\n/**\n * Normalizes a property path for use in deepSelectProperty and deepSetProperty\n *\n * @param path The property path to normalize\n */\nfunction normalizePropertyPath(path: string): string {\n // Basically we want to support paths like \"obj[1][2]\", but the other methods expect \"obj.[1].[2]\"\n // So we need to replace all occurences of square brackets without leading dots\n // JS Regex only supports negative lookbehind in ES 2018, so we fake it using reversed strings and\n // negative lookahead\n const arrayIndexRegex = /(]\\d+\\[)(?!\\.)/g; // Reversing the string reverses the brackets too\n let ret = reverseString(path);\n // Append the dot to each bracket, since we're going to reverse it\n ret = ret.replace(arrayIndexRegex, '$1.');\n return reverseString(ret);\n}\n\n/**\n * Selects a property of an object or its sub-objects and returns it if it exists. E.g.\n * `deepSelectProperty(obj, \"common.asdf.qwer\")` => `obj.common.asdf.qwer`\n *\n * @param object The object to select a property from\n * @param path The property path to search for\n */\nfunction deepSelectProperty(object: ioBroker.AnyObject, path: string): any {\n /**\n * @param obj\n * @param pathArr\n */\n function _deepSelectProperty(obj: any, pathArr: string[]): unknown {\n // are we there yet? then return obj\n if (!pathArr.length) {\n return obj;\n }\n // go deeper\n let propName = pathArr.shift()!;\n if (/\\[\\d+]/.test(propName)) {\n // this is an array index\n // @ts-expect-error // TODO: fix it - this is not ts fashion, assigning numbers to the string array here\n propName = parseInt(propName.slice(1, -1));\n }\n return _deepSelectProperty(obj[propName], pathArr);\n }\n path = normalizePropertyPath(path);\n return _deepSelectProperty(object, path.split('.'));\n}\n\n/**\n * Changes a property of an object or its sub-objects if it exists. Opposite of `deepSelectProperty`.\n *\n * @param object The object to replace a property in\n * @param path The property path to search for\n * @param value\n */\nfunction deepSetProperty(object: ioBroker.AnyObject, path: string, value: any): void {\n /**\n * @param obj\n * @param pathArr\n */\n function _deepSetProperty(obj: any, pathArr: string[]): void {\n // are we there yet? then return obj\n if (pathArr.length === 1) {\n obj[pathArr[0]] = value;\n return;\n }\n // go deeper\n let propName = pathArr.shift()!;\n if (/\\[\\d+]/.test(propName)) {\n // this is an array index\n // @ts-expect-error // TODO: fix it - this is not ts fashion, assigning numbers to the string array here\n propName = parseInt(propName.slice(1, -1));\n }\n _deepSetProperty(obj[propName], pathArr);\n }\n path = normalizePropertyPath(path);\n _deepSetProperty(object, path.split('.'));\n}\n\n/**\n * Tries to parse a CLI argument that could be used to set an object\n *\n * @param arg The CLI argument containing the value to be set\n */\nfunction parseCLIValue(arg: string): any {\n try {\n // JSON.parse does not allow plain strings\n return JSON.parse(arg);\n } catch {\n // arg is a string\n return arg;\n }\n}\n\n/**\n * Tries to parse a CLI argument of the form [propPath=]value.\n *\n * @param arg The CLI argument containing an optional prop path and a JSON value\n */\nfunction parsePropPathAndAssignment(arg: string): ParsedPropPathAndAssignment | undefined {\n const equalsIndex = arg.indexOf('=');\n if (equalsIndex > -1) {\n // This might contain a propPath AND a value\n const propPath = arg.substr(0, equalsIndex);\n const valueString = arg.substr(equalsIndex + 1);\n // For partial assignments, allow strings as the value\n const value = parseCLIValue(valueString);\n return { propPath, value };\n }\n // This is a full assignment, allow only objects\n try {\n const value = JSON.parse(arg);\n if (!tools.isObject(value)) {\n return undefined;\n }\n return { value };\n } catch {\n // nope!\n return undefined;\n }\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["params"]
7
7
  }
@@ -18,6 +18,10 @@ var __copyProps = (to, from, except, desc) => {
18
18
  return to;
19
19
  };
20
20
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
25
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
26
  mod
23
27
  ));
@@ -27,6 +31,7 @@ __export(cliPlugin_exports, {
27
31
  CLIPlugin: () => CLIPlugin
28
32
  });
29
33
  module.exports = __toCommonJS(cliPlugin_exports);
34
+ var __import_meta_url = typeof document === "undefined" ? new (require("url".replace("", ""))).URL("file:" + __filename).href : document.currentScript && document.currentScript.src || new URL("main.js", document.baseURI).href;
30
35
  var CLI = __toESM(require("./messages.js"), 1);
31
36
  var import_cliCommand = require("./cliCommand.js");
32
37
  var import_cliTools = require("./cliTools.js");
@@ -34,13 +39,18 @@ var import_js_controller_common = require("@iobroker/js-controller-common");
34
39
  var import_fs_extra = __toESM(require("fs-extra"), 1);
35
40
  var import_node_path = __toESM(require("node:path"), 1);
36
41
  var import_node_module = require("node:module");
37
- const import_meta = {};
38
- const require2 = (0, import_node_module.createRequire)(import_meta.url || `file://${__filename}`);
42
+ const require2 = (0, import_node_module.createRequire)(__import_meta_url || `file://${__filename}`);
39
43
  const controllerIoPackPath = require2.resolve("iobroker.js-controller/io-package.json");
40
44
  class CLIPlugin extends import_cliCommand.CLICommand {
45
+ /** @param options the cli command options */
41
46
  constructor(options) {
42
47
  super(options);
43
48
  }
49
+ /**
50
+ * Executes a command
51
+ *
52
+ * @param args parsed cli args
53
+ */
44
54
  execute(args) {
45
55
  const { callback, showHelp } = this.options;
46
56
  const command = args[0];
@@ -59,6 +69,12 @@ class CLIPlugin extends import_cliCommand.CLICommand {
59
69
  return void callback(3);
60
70
  }
61
71
  }
72
+ /**
73
+ * Enables or disables the given plugin
74
+ *
75
+ * @param args the parsed CLI args
76
+ * @param enabled if plugin should be enabled
77
+ */
62
78
  set(args, enabled) {
63
79
  const { callback, dbConnect } = this.options;
64
80
  const pluginName = args[1];
@@ -148,6 +164,11 @@ class CLIPlugin extends import_cliCommand.CLICommand {
148
164
  }
149
165
  });
150
166
  }
167
+ /**
168
+ * Prints the status of the given plugin
169
+ *
170
+ * @param args the parsed CLI arguments
171
+ */
151
172
  status(args) {
152
173
  const { callback, dbConnect } = this.options;
153
174
  const pluginName = args[1];
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../../src/lib/cli/cliPlugin.ts"],
4
- "sourcesContent": ["import * as CLI from './messages.js';\nimport { type CLICommandOptions, CLICommand } from './cliCommand.js';\nimport { getObjectFrom } from './cliTools.js';\nimport { tools } from '@iobroker/js-controller-common';\nimport fs from 'fs-extra';\nimport path from 'node:path';\nimport { createRequire } from 'node:module';\n\n// eslint-disable-next-line unicorn/prefer-module\nconst require = createRequire(import.meta.url || `file://${__filename}`);\n\nconst controllerIoPackPath = require.resolve('iobroker.js-controller/io-package.json');\n\ninterface CLIPluginOptions extends CLICommandOptions {\n /** If plugin is scoped on adapter */\n adapter?: string;\n /** If plugin is scoped on instance */\n instance?: string;\n}\n\n/** Command iobroker plugin <enable/disable/status> <pluginname> [--host this/hostname] ... */\nexport class CLIPlugin extends CLICommand<CLIPluginOptions> {\n /** @param options the cli command options */\n constructor(options: CLIPluginOptions) {\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, showHelp } = this.options;\n const command = args[0];\n\n switch (command) {\n case 'on':\n case 'enable':\n return this.set(args, true);\n case 'off':\n case 'disable':\n return this.set(args, false);\n case 'status':\n return this.status(args);\n default:\n CLI.error.unknownCommand('plugin', command);\n showHelp();\n return void callback(3);\n }\n }\n\n /**\n * Enables or disables the given plugin\n *\n * @param args the parsed CLI args\n * @param enabled if plugin should be enabled\n */\n set(args: any[], enabled: boolean): void {\n const { callback, dbConnect } = this.options;\n const pluginName: string = args[1];\n if (!pluginName) {\n CLI.error.requiredArgumentMissing('pluginName', 'plugin enable <pluginname>');\n return void callback(34);\n }\n\n let hostname: string;\n let instance: string;\n\n if (this.options.adapter || this.options.instance) {\n instance = (this.options.adapter || this.options.instance) as string;\n // default to instance 0\n if (!/\\.\\d+$/.test(instance)) {\n instance += '.0';\n }\n } else {\n // Use host if no adapter was specified and fallback to the current one\n hostname = this.options.host;\n if (!hostname || hostname === 'this') {\n hostname = tools.getHostName();\n }\n }\n\n dbConnect(async params => {\n const { states, objects, config: iobrokerJson } = params;\n\n try {\n // Check if the host or instance exists\n let objectNamespace: string;\n if (hostname) {\n objectNamespace = `system.host.${hostname}`;\n const hostObject = await objects.getObject(objectNamespace);\n if (!hostObject) {\n CLI.error.hostDoesNotExist(hostname);\n return void callback(30);\n }\n } else {\n objectNamespace = `system.adapter.${instance}`;\n const instanceObject = await objects.getObject(objectNamespace);\n if (!instanceObject) {\n CLI.error.invalidInstance(instance);\n return void callback(30);\n }\n }\n\n // Check if the plugin is defined\n if (!pluginExists(pluginName, iobrokerJson, instance)) {\n CLI.error.pluginNotDefined(pluginName, hostname, instance);\n return void callback(30);\n }\n\n // Create the plugin state if it does not exist\n const pluginsFolderId = `${objectNamespace}.plugins`;\n if (!(await objects.getObjectAsync(pluginsFolderId))) {\n await objects.setObject(pluginsFolderId, {\n type: 'folder',\n common: {\n name: `${hostname ? 'host' : 'instance'}: plugin states`,\n },\n native: {},\n });\n }\n const pluginFolderId = `${objectNamespace}.plugins.${pluginName}`;\n if (!(await objects.getObjectAsync(pluginFolderId))) {\n await objects.setObject(pluginFolderId, {\n type: 'folder',\n common: {\n name: `${pluginName}: plugin states`,\n },\n native: {},\n });\n }\n const pluginEnabledId = `${pluginFolderId}.enabled`;\n if (!(await objects.getObjectAsync(pluginEnabledId))) {\n await objects.setObject(pluginEnabledId, {\n type: 'state',\n common: {\n name: 'Plugin enabled',\n type: 'boolean',\n read: true,\n write: true,\n role: 'value',\n },\n native: {},\n });\n }\n\n // Update the state\n await states.setStateAsync(pluginEnabledId, {\n val: enabled,\n from: getObjectFrom(),\n });\n\n // Notify the user that we are done\n CLI.success.pluginEnabledOrDisabled(pluginName, hostname, instance, enabled);\n return void callback();\n } catch (err) {\n CLI.error.unknown(err.message);\n return void callback(1);\n }\n });\n }\n\n /**\n * Prints the status of the given plugin\n *\n * @param args the parsed CLI arguments\n */\n status(args: any[]): void {\n const { callback, dbConnect } = this.options;\n const pluginName = args[1];\n if (!pluginName) {\n CLI.error.requiredArgumentMissing('pluginName', 'plugin status <pluginname>');\n return void callback(34);\n }\n\n let hostname: string;\n let instance: string;\n\n if (this.options.adapter || this.options.instance) {\n instance = (this.options.adapter || this.options.instance) as string;\n // default to instance 0\n if (!/\\.\\d+$/.test(instance)) {\n instance += '.0';\n }\n } else {\n // Use host if no adapter was specified and fallback to the current one\n hostname = this.options.host;\n if (!hostname || hostname === 'this') {\n hostname = tools.getHostName();\n }\n }\n\n dbConnect(async params => {\n const { states, objects, config: iobrokerJson } = params;\n\n try {\n // Check if the host or instance exists\n let objectNamespace: string;\n if (hostname) {\n objectNamespace = `system.host.${hostname}`;\n const hostObject = await objects.getObject(objectNamespace);\n if (!hostObject) {\n CLI.error.hostDoesNotExist(hostname);\n return void callback(30);\n }\n } else {\n objectNamespace = `system.adapter.${instance}`;\n const instanceObject = await objects.getObject(objectNamespace);\n if (!instanceObject) {\n CLI.error.invalidInstance(instance);\n return void callback(30);\n }\n }\n\n // Check if the plugin is defined\n if (!pluginExists(pluginName, iobrokerJson, instance)) {\n CLI.error.pluginNotDefined(pluginName, hostname, instance);\n return void callback(30);\n }\n\n const pluginEnabledId = `${objectNamespace}.plugins.${pluginName}.enabled`;\n\n // Read the state\n try {\n const val = (await states.getStateAsync(pluginEnabledId))?.val;\n\n if (typeof val === 'boolean') {\n CLI.success.pluginStatus(pluginName, hostname, instance, val);\n return void callback();\n }\n } catch {\n /* ignore */\n }\n\n // If the state could not be read or had no value, fall back to the configuration\n const enabled = pluginEnabled(\n pluginName,\n instance,\n await objects.getObjectAsync('system.config'),\n iobrokerJson,\n );\n CLI.success.pluginStatus(pluginName, hostname, instance, enabled);\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 * Checks if a plugin exists and can be configured\n *\n * @param pluginName\n * @param iobrokerJson The contents of iobroker.json\n * @param [adapter] (optional) - If passed, the adapter configuration will be searched for defined plugins instead of js-controller\n */\nfunction pluginExists(pluginName: string, iobrokerJson?: ioBroker.IoBrokerJson, adapter?: string): boolean {\n // 1. check if the plugin is defined in io-package.json\n try {\n const ioPackPath = adapter ? path.join(tools.getAdapterDir(adapter)!, 'io-package.json') : controllerIoPackPath;\n const ioPack = fs.readJSONSync(ioPackPath, { encoding: 'utf8' });\n if (ioPack?.common?.plugins && pluginName in ioPack.common.plugins) {\n return true;\n }\n } catch {\n /* ignore */\n }\n\n // 2. check if the plugin is defined in iobroker.json\n return !!(iobrokerJson?.plugins && pluginName in iobrokerJson.plugins);\n}\n\n/**\n * Checks if a plugin exists and can be configured\n *\n * @param pluginName name of the plugin, e.g. `sentry`\n * @param adapter If defined, the adapter configuration will be searched for defined plugins instead of js-controller\n * @param systemConfig The system.config object\n * @param iobrokerJson The contents of iobroker.json\n */\nfunction pluginEnabled(\n pluginName: string,\n adapter?: string,\n systemConfig?: ioBroker.SystemConfigObject | null,\n iobrokerJson?: ioBroker.IoBrokerJson,\n): boolean {\n // 1. check if diagnostics are disabled in ioBroker\n if (systemConfig?.common?.diag === 'none') {\n return false;\n }\n\n // 2. check if the plugin is disabled in io-package.json\n try {\n const ioPackPath = adapter ? path.join(tools.getAdapterDir(adapter)!, 'io-package.json') : controllerIoPackPath;\n const ioPack = fs.readJSONSync(ioPackPath, { encoding: 'utf8' });\n if (\n ioPack?.common?.plugins &&\n pluginName in ioPack.common.plugins &&\n ioPack.common.plugins[pluginName].enabled === false\n ) {\n return false;\n }\n } catch {\n /* ignore */\n }\n\n // 3. check if the plugin is disabled in iobroker.json\n if (\n iobrokerJson?.plugins &&\n pluginName in iobrokerJson.plugins &&\n iobrokerJson.plugins[pluginName].enabled === false\n ) {\n return false;\n }\n\n // default: enabled\n return true;\n}\n"],
5
- "mappings": "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",
3
+ "sources": ["../../../../src/lib/cli/cliPlugin.ts", "../../../../../../node_modules/@alcalzone/esm2cjs/shims/import.meta.url/shim.js"],
4
+ "sourcesContent": ["import * as CLI from './messages.js';\nimport { type CLICommandOptions, CLICommand } from './cliCommand.js';\nimport { getObjectFrom } from './cliTools.js';\nimport { tools } from '@iobroker/js-controller-common';\nimport fs from 'fs-extra';\nimport path from 'node:path';\nimport { createRequire } from 'node:module';\n\n// eslint-disable-next-line unicorn/prefer-module\nconst require = createRequire(import.meta.url || `file://${__filename}`);\n\nconst controllerIoPackPath = require.resolve('iobroker.js-controller/io-package.json');\n\ninterface CLIPluginOptions extends CLICommandOptions {\n /** If plugin is scoped on adapter */\n adapter?: string;\n /** If plugin is scoped on instance */\n instance?: string;\n}\n\n/** Command iobroker plugin <enable/disable/status> <pluginname> [--host this/hostname] ... */\nexport class CLIPlugin extends CLICommand<CLIPluginOptions> {\n /** @param options the cli command options */\n constructor(options: CLIPluginOptions) {\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, showHelp } = this.options;\n const command = args[0];\n\n switch (command) {\n case 'on':\n case 'enable':\n return this.set(args, true);\n case 'off':\n case 'disable':\n return this.set(args, false);\n case 'status':\n return this.status(args);\n default:\n CLI.error.unknownCommand('plugin', command);\n showHelp();\n return void callback(3);\n }\n }\n\n /**\n * Enables or disables the given plugin\n *\n * @param args the parsed CLI args\n * @param enabled if plugin should be enabled\n */\n set(args: any[], enabled: boolean): void {\n const { callback, dbConnect } = this.options;\n const pluginName: string = args[1];\n if (!pluginName) {\n CLI.error.requiredArgumentMissing('pluginName', 'plugin enable <pluginname>');\n return void callback(34);\n }\n\n let hostname: string;\n let instance: string;\n\n if (this.options.adapter || this.options.instance) {\n instance = (this.options.adapter || this.options.instance) as string;\n // default to instance 0\n if (!/\\.\\d+$/.test(instance)) {\n instance += '.0';\n }\n } else {\n // Use host if no adapter was specified and fallback to the current one\n hostname = this.options.host;\n if (!hostname || hostname === 'this') {\n hostname = tools.getHostName();\n }\n }\n\n dbConnect(async params => {\n const { states, objects, config: iobrokerJson } = params;\n\n try {\n // Check if the host or instance exists\n let objectNamespace: string;\n if (hostname) {\n objectNamespace = `system.host.${hostname}`;\n const hostObject = await objects.getObject(objectNamespace);\n if (!hostObject) {\n CLI.error.hostDoesNotExist(hostname);\n return void callback(30);\n }\n } else {\n objectNamespace = `system.adapter.${instance}`;\n const instanceObject = await objects.getObject(objectNamespace);\n if (!instanceObject) {\n CLI.error.invalidInstance(instance);\n return void callback(30);\n }\n }\n\n // Check if the plugin is defined\n if (!pluginExists(pluginName, iobrokerJson, instance)) {\n CLI.error.pluginNotDefined(pluginName, hostname, instance);\n return void callback(30);\n }\n\n // Create the plugin state if it does not exist\n const pluginsFolderId = `${objectNamespace}.plugins`;\n if (!(await objects.getObjectAsync(pluginsFolderId))) {\n await objects.setObject(pluginsFolderId, {\n type: 'folder',\n common: {\n name: `${hostname ? 'host' : 'instance'}: plugin states`,\n },\n native: {},\n });\n }\n const pluginFolderId = `${objectNamespace}.plugins.${pluginName}`;\n if (!(await objects.getObjectAsync(pluginFolderId))) {\n await objects.setObject(pluginFolderId, {\n type: 'folder',\n common: {\n name: `${pluginName}: plugin states`,\n },\n native: {},\n });\n }\n const pluginEnabledId = `${pluginFolderId}.enabled`;\n if (!(await objects.getObjectAsync(pluginEnabledId))) {\n await objects.setObject(pluginEnabledId, {\n type: 'state',\n common: {\n name: 'Plugin enabled',\n type: 'boolean',\n read: true,\n write: true,\n role: 'value',\n },\n native: {},\n });\n }\n\n // Update the state\n await states.setStateAsync(pluginEnabledId, {\n val: enabled,\n from: getObjectFrom(),\n });\n\n // Notify the user that we are done\n CLI.success.pluginEnabledOrDisabled(pluginName, hostname, instance, enabled);\n return void callback();\n } catch (err) {\n CLI.error.unknown(err.message);\n return void callback(1);\n }\n });\n }\n\n /**\n * Prints the status of the given plugin\n *\n * @param args the parsed CLI arguments\n */\n status(args: any[]): void {\n const { callback, dbConnect } = this.options;\n const pluginName = args[1];\n if (!pluginName) {\n CLI.error.requiredArgumentMissing('pluginName', 'plugin status <pluginname>');\n return void callback(34);\n }\n\n let hostname: string;\n let instance: string;\n\n if (this.options.adapter || this.options.instance) {\n instance = (this.options.adapter || this.options.instance) as string;\n // default to instance 0\n if (!/\\.\\d+$/.test(instance)) {\n instance += '.0';\n }\n } else {\n // Use host if no adapter was specified and fallback to the current one\n hostname = this.options.host;\n if (!hostname || hostname === 'this') {\n hostname = tools.getHostName();\n }\n }\n\n dbConnect(async params => {\n const { states, objects, config: iobrokerJson } = params;\n\n try {\n // Check if the host or instance exists\n let objectNamespace: string;\n if (hostname) {\n objectNamespace = `system.host.${hostname}`;\n const hostObject = await objects.getObject(objectNamespace);\n if (!hostObject) {\n CLI.error.hostDoesNotExist(hostname);\n return void callback(30);\n }\n } else {\n objectNamespace = `system.adapter.${instance}`;\n const instanceObject = await objects.getObject(objectNamespace);\n if (!instanceObject) {\n CLI.error.invalidInstance(instance);\n return void callback(30);\n }\n }\n\n // Check if the plugin is defined\n if (!pluginExists(pluginName, iobrokerJson, instance)) {\n CLI.error.pluginNotDefined(pluginName, hostname, instance);\n return void callback(30);\n }\n\n const pluginEnabledId = `${objectNamespace}.plugins.${pluginName}.enabled`;\n\n // Read the state\n try {\n const val = (await states.getStateAsync(pluginEnabledId))?.val;\n\n if (typeof val === 'boolean') {\n CLI.success.pluginStatus(pluginName, hostname, instance, val);\n return void callback();\n }\n } catch {\n /* ignore */\n }\n\n // If the state could not be read or had no value, fall back to the configuration\n const enabled = pluginEnabled(\n pluginName,\n instance,\n await objects.getObjectAsync('system.config'),\n iobrokerJson,\n );\n CLI.success.pluginStatus(pluginName, hostname, instance, enabled);\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 * Checks if a plugin exists and can be configured\n *\n * @param pluginName\n * @param iobrokerJson The contents of iobroker.json\n * @param [adapter] (optional) - If passed, the adapter configuration will be searched for defined plugins instead of js-controller\n */\nfunction pluginExists(pluginName: string, iobrokerJson?: ioBroker.IoBrokerJson, adapter?: string): boolean {\n // 1. check if the plugin is defined in io-package.json\n try {\n const ioPackPath = adapter ? path.join(tools.getAdapterDir(adapter)!, 'io-package.json') : controllerIoPackPath;\n const ioPack = fs.readJSONSync(ioPackPath, { encoding: 'utf8' });\n if (ioPack?.common?.plugins && pluginName in ioPack.common.plugins) {\n return true;\n }\n } catch {\n /* ignore */\n }\n\n // 2. check if the plugin is defined in iobroker.json\n return !!(iobrokerJson?.plugins && pluginName in iobrokerJson.plugins);\n}\n\n/**\n * Checks if a plugin exists and can be configured\n *\n * @param pluginName name of the plugin, e.g. `sentry`\n * @param adapter If defined, the adapter configuration will be searched for defined plugins instead of js-controller\n * @param systemConfig The system.config object\n * @param iobrokerJson The contents of iobroker.json\n */\nfunction pluginEnabled(\n pluginName: string,\n adapter?: string,\n systemConfig?: ioBroker.SystemConfigObject | null,\n iobrokerJson?: ioBroker.IoBrokerJson,\n): boolean {\n // 1. check if diagnostics are disabled in ioBroker\n if (systemConfig?.common?.diag === 'none') {\n return false;\n }\n\n // 2. check if the plugin is disabled in io-package.json\n try {\n const ioPackPath = adapter ? path.join(tools.getAdapterDir(adapter)!, 'io-package.json') : controllerIoPackPath;\n const ioPack = fs.readJSONSync(ioPackPath, { encoding: 'utf8' });\n if (\n ioPack?.common?.plugins &&\n pluginName in ioPack.common.plugins &&\n ioPack.common.plugins[pluginName].enabled === false\n ) {\n return false;\n }\n } catch {\n /* ignore */\n }\n\n // 3. check if the plugin is disabled in iobroker.json\n if (\n iobrokerJson?.plugins &&\n pluginName in iobrokerJson.plugins &&\n iobrokerJson.plugins[pluginName].enabled === false\n ) {\n return false;\n }\n\n // default: enabled\n return true;\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", "path", "fs"]
7
7
  }
@@ -18,6 +18,10 @@ var __copyProps = (to, from, except, desc) => {
18
18
  return to;
19
19
  };
20
20
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
25
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
26
  mod
23
27
  ));
@@ -45,6 +49,13 @@ class CLIProcess extends import_cliCommand.CLICommand {
45
49
  constructor(options) {
46
50
  super(options);
47
51
  }
52
+ // These CLI commands have no subcommands, but belong together thematically
53
+ // (start/stop/restart/status)
54
+ /**
55
+ * Starts one or more adapters or the js-controller
56
+ *
57
+ * @param args parsed cli arguments
58
+ */
48
59
  async start(args) {
49
60
  const adapterName = (0, import_cliTools.normalizeAdapterName)(args[0]);
50
61
  if (!adapterName) {
@@ -58,17 +69,37 @@ class CLIProcess extends import_cliCommand.CLICommand {
58
69
  this.setAdapterEnabled(adapterName, true);
59
70
  }
60
71
  }
72
+ /**
73
+ * Restarts one or more instances or the js-controller
74
+ *
75
+ * @param args parsed cli arguments
76
+ */
61
77
  async restart(args) {
62
78
  const adapterName = (0, import_cliTools.normalizeAdapterName)(args[0]);
63
79
  if (!adapterName) {
64
80
  await this.restartJSController();
65
81
  this.options.callback();
66
82
  } else if (/\.\d+$/.test(adapterName)) {
67
- this.setAdapterInstanceEnabled(adapterName, true, true);
83
+ this.setAdapterInstanceEnabled(
84
+ adapterName,
85
+ true,
86
+ /* restartIfRunning */
87
+ true
88
+ );
68
89
  } else {
69
- this.setAdapterEnabled(adapterName, true, true);
90
+ this.setAdapterEnabled(
91
+ adapterName,
92
+ true,
93
+ /* restartIfRunning */
94
+ true
95
+ );
70
96
  }
71
97
  }
98
+ /**
99
+ * Stops one or more adapters or the js-controller
100
+ *
101
+ * @param args parsed cli arguments
102
+ */
72
103
  async stop(args) {
73
104
  const adapterName = (0, import_cliTools.normalizeAdapterName)(args[0]);
74
105
  if (adapterName === void 0) {
@@ -82,6 +113,11 @@ class CLIProcess extends import_cliCommand.CLICommand {
82
113
  this.setAdapterEnabled(adapterName, false);
83
114
  }
84
115
  }
116
+ /**
117
+ * Starts or stops all adapters
118
+ *
119
+ * @param enabled if adapters should be started or stopped
120
+ */
85
121
  setAllAdaptersEnabled(enabled) {
86
122
  const { callback, dbConnect } = this.options;
87
123
  dbConnect(async (params) => {
@@ -92,6 +128,14 @@ class CLIProcess extends import_cliCommand.CLICommand {
92
128
  callback();
93
129
  });
94
130
  }
131
+ /**
132
+ * Starts or stops a single or all instances of adapter.
133
+ * If there are multiple instances, all will be started/stopped/restarted
134
+ *
135
+ * @param adapter The adapter to start
136
+ * @param enabled If adapter should be started or stopped
137
+ * @param [restartIfRunning] Whether running instances should be restarted
138
+ */
95
139
  setAdapterEnabled(adapter, enabled, restartIfRunning) {
96
140
  const { callback, dbConnect } = this.options;
97
141
  dbConnect(async (params) => {
@@ -112,6 +156,13 @@ class CLIProcess extends import_cliCommand.CLICommand {
112
156
  }
113
157
  });
114
158
  }
159
+ /**
160
+ * Starts or stops a specific adapter instance
161
+ *
162
+ * @param instance The instance to start, e.g. "adaptername.0"
163
+ * @param enabled If the instance should be started or stopped
164
+ * @param [restartIfRunning] Whether running instances should be restarted
165
+ */
115
166
  setAdapterInstanceEnabled(instance, enabled, restartIfRunning) {
116
167
  const { callback, dbConnect } = this.options;
117
168
  dbConnect(async (params) => {
@@ -130,6 +181,9 @@ class CLIProcess extends import_cliCommand.CLICommand {
130
181
  }
131
182
  });
132
183
  }
184
+ /**
185
+ * Starts the JS controller
186
+ */
133
187
  async startJSController() {
134
188
  let memoryLimitMB = 0;
135
189
  try {
@@ -165,6 +219,9 @@ Please call "${import_js_controller_common2.tools.appName} setup first" to initi
165
219
  });
166
220
  child.unref();
167
221
  }
222
+ /**
223
+ * Stops the JS controller
224
+ */
168
225
  static async stopJSController() {
169
226
  let pid;
170
227
  try {
@@ -197,10 +254,16 @@ Please call "${import_js_controller_common2.tools.appName} setup first" to initi
197
254
  } catch {
198
255
  }
199
256
  }
257
+ /** Restarts the JS controller */
200
258
  async restartJSController() {
201
259
  await CLIProcess.stopJSController();
202
260
  await this.startJSController();
203
261
  }
262
+ /**
263
+ * Checks if ioBroker is running or not
264
+ *
265
+ * @param args parsed cli arguments
266
+ */
204
267
  status(args) {
205
268
  const { callback, dbConnect } = this.options;
206
269
  const adapterName = (0, import_cliTools.normalizeAdapterName)(args[0]);