@iobroker/js-controller-cli 7.2.3-alpha.8-20260709-8d8c9c5ed → 7.2.3

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 (214) hide show
  1. package/build/cjs/index.js +3 -3
  2. package/build/cjs/lib/_Types.d.ts +1 -8
  3. package/build/cjs/lib/cli/cliCert.d.ts +4 -7
  4. package/build/cjs/lib/cli/cliCert.js +6 -10
  5. package/build/cjs/lib/cli/cliCert.js.map +2 -2
  6. package/build/cjs/lib/cli/cliCommand.d.ts +14 -45
  7. package/build/cjs/lib/cli/cliCommand.js +1 -8
  8. package/build/cjs/lib/cli/cliCommand.js.map +2 -2
  9. package/build/cjs/lib/cli/cliCompact.d.ts +2 -5
  10. package/build/cjs/lib/cli/cliCompact.js +2 -9
  11. package/build/cjs/lib/cli/cliCompact.js.map +2 -2
  12. package/build/cjs/lib/cli/cliDebug.d.ts +2 -5
  13. package/build/cjs/lib/cli/cliDebug.js +1 -8
  14. package/build/cjs/lib/cli/cliDebug.js.map +2 -2
  15. package/build/cjs/lib/cli/cliHost.d.ts +10 -13
  16. package/build/cjs/lib/cli/cliHost.js +5 -13
  17. package/build/cjs/lib/cli/cliHost.js.map +2 -2
  18. package/build/cjs/lib/cli/cliLogs.d.ts +3 -9
  19. package/build/cjs/lib/cli/cliLogs.js +1 -12
  20. package/build/cjs/lib/cli/cliLogs.js.map +2 -2
  21. package/build/cjs/lib/cli/cliMessage.d.ts +1 -2
  22. package/build/cjs/lib/cli/cliMessage.js +0 -5
  23. package/build/cjs/lib/cli/cliMessage.js.map +2 -2
  24. package/build/cjs/lib/cli/cliObjects.d.ts +18 -21
  25. package/build/cjs/lib/cli/cliObjects.js +33 -51
  26. package/build/cjs/lib/cli/cliObjects.js.map +2 -2
  27. package/build/cjs/lib/cli/cliPlugin.d.ts +3 -3
  28. package/build/cjs/lib/cli/cliPlugin.js +0 -6
  29. package/build/cjs/lib/cli/cliPlugin.js.map +2 -2
  30. package/build/cjs/lib/cli/cliProcess.d.ts +4 -8
  31. package/build/cjs/lib/cli/cliProcess.js +16 -27
  32. package/build/cjs/lib/cli/cliProcess.js.map +3 -3
  33. package/build/cjs/lib/cli/cliStates.d.ts +4 -7
  34. package/build/cjs/lib/cli/cliStates.js +6 -14
  35. package/build/cjs/lib/cli/cliStates.js.map +2 -2
  36. package/build/cjs/lib/cli/cliTools.js +0 -11
  37. package/build/cjs/lib/cli/cliTools.js.map +1 -1
  38. package/build/cjs/lib/cli/messages.js +46 -47
  39. package/build/cjs/lib/cli/messages.js.map +1 -1
  40. package/build/cjs/lib/setup/customError.d.ts +0 -4
  41. package/build/cjs/lib/setup/customError.js +0 -7
  42. package/build/cjs/lib/setup/customError.js.map +2 -2
  43. package/build/cjs/lib/setup/dbConnection.js +64 -69
  44. package/build/cjs/lib/setup/dbConnection.js.map +3 -3
  45. package/build/cjs/lib/setup/formatters.d.ts +4 -4
  46. package/build/cjs/lib/setup/formatters.js +0 -5
  47. package/build/cjs/lib/setup/formatters.js.map +2 -2
  48. package/build/cjs/lib/setup/multihostClient.js +2 -6
  49. package/build/cjs/lib/setup/multihostClient.js.map +1 -1
  50. package/build/cjs/lib/setup/pluginInfos.d.ts +0 -5
  51. package/build/cjs/lib/setup/pluginInfos.js +0 -2
  52. package/build/cjs/lib/setup/pluginInfos.js.map +2 -2
  53. package/build/cjs/lib/setup/setupBackup.d.ts +0 -34
  54. package/build/cjs/lib/setup/setupBackup.js +12 -46
  55. package/build/cjs/lib/setup/setupBackup.js.map +3 -3
  56. package/build/cjs/lib/setup/setupInstall.d.ts +15 -38
  57. package/build/cjs/lib/setup/setupInstall.js +24 -42
  58. package/build/cjs/lib/setup/setupInstall.js.map +2 -2
  59. package/build/cjs/lib/setup/setupLicense.d.ts +0 -8
  60. package/build/cjs/lib/setup/setupLicense.js +0 -7
  61. package/build/cjs/lib/setup/setupLicense.js.map +2 -2
  62. package/build/cjs/lib/setup/setupList.d.ts +1 -55
  63. package/build/cjs/lib/setup/setupList.js +24 -78
  64. package/build/cjs/lib/setup/setupList.js.map +3 -3
  65. package/build/cjs/lib/setup/setupMultihost.js +9 -12
  66. package/build/cjs/lib/setup/setupMultihost.js.map +3 -3
  67. package/build/cjs/lib/setup/setupPacketManager.d.ts +0 -10
  68. package/build/cjs/lib/setup/setupPacketManager.js +6 -16
  69. package/build/cjs/lib/setup/setupPacketManager.js.map +2 -2
  70. package/build/cjs/lib/setup/setupRepo.d.ts +0 -6
  71. package/build/cjs/lib/setup/setupRepo.js +11 -28
  72. package/build/cjs/lib/setup/setupRepo.js.map +2 -2
  73. package/build/cjs/lib/setup/setupSetup.d.ts +0 -27
  74. package/build/cjs/lib/setup/setupSetup.js +33 -52
  75. package/build/cjs/lib/setup/setupSetup.js.map +3 -3
  76. package/build/cjs/lib/setup/setupUpgrade.d.ts +2 -8
  77. package/build/cjs/lib/setup/setupUpgrade.js +10 -19
  78. package/build/cjs/lib/setup/setupUpgrade.js.map +2 -2
  79. package/build/cjs/lib/setup/setupUpload.d.ts +1 -72
  80. package/build/cjs/lib/setup/setupUpload.js +6 -74
  81. package/build/cjs/lib/setup/setupUpload.js.map +2 -2
  82. package/build/cjs/lib/setup/setupUsers.d.ts +14 -23
  83. package/build/cjs/lib/setup/setupUsers.js +15 -58
  84. package/build/cjs/lib/setup/setupUsers.js.map +2 -2
  85. package/build/cjs/lib/setup/setupVendor.d.ts +1 -9
  86. package/build/cjs/lib/setup/setupVendor.js +6 -13
  87. package/build/cjs/lib/setup/setupVendor.js.map +2 -2
  88. package/build/cjs/lib/setup/setupVisDebug.d.ts +2 -11
  89. package/build/cjs/lib/setup/setupVisDebug.js +15 -21
  90. package/build/cjs/lib/setup/setupVisDebug.js.map +3 -3
  91. package/build/cjs/lib/setup/utils.d.ts +1 -1
  92. package/build/cjs/lib/setup/utils.js +9 -13
  93. package/build/cjs/lib/setup/utils.js.map +3 -3
  94. package/build/cjs/lib/setup.js +330 -269
  95. package/build/cjs/lib/setup.js.map +3 -3
  96. package/build/esm/lib/_Types.d.ts +1 -8
  97. package/build/esm/lib/_Types.d.ts.map +1 -1
  98. package/build/esm/lib/cli/cliCert.d.ts +4 -7
  99. package/build/esm/lib/cli/cliCert.d.ts.map +1 -1
  100. package/build/esm/lib/cli/cliCert.js +6 -6
  101. package/build/esm/lib/cli/cliCert.js.map +1 -1
  102. package/build/esm/lib/cli/cliCommand.d.ts +14 -45
  103. package/build/esm/lib/cli/cliCommand.d.ts.map +1 -1
  104. package/build/esm/lib/cli/cliCommand.js +1 -4
  105. package/build/esm/lib/cli/cliCommand.js.map +1 -1
  106. package/build/esm/lib/cli/cliCompact.d.ts +2 -5
  107. package/build/esm/lib/cli/cliCompact.d.ts.map +1 -1
  108. package/build/esm/lib/cli/cliCompact.js +2 -5
  109. package/build/esm/lib/cli/cliCompact.js.map +1 -1
  110. package/build/esm/lib/cli/cliDebug.d.ts +2 -5
  111. package/build/esm/lib/cli/cliDebug.d.ts.map +1 -1
  112. package/build/esm/lib/cli/cliDebug.js +1 -4
  113. package/build/esm/lib/cli/cliDebug.js.map +1 -1
  114. package/build/esm/lib/cli/cliHost.d.ts +10 -13
  115. package/build/esm/lib/cli/cliHost.d.ts.map +1 -1
  116. package/build/esm/lib/cli/cliHost.js +5 -8
  117. package/build/esm/lib/cli/cliHost.js.map +1 -1
  118. package/build/esm/lib/cli/cliLogs.d.ts +3 -9
  119. package/build/esm/lib/cli/cliLogs.d.ts.map +1 -1
  120. package/build/esm/lib/cli/cliLogs.js +1 -8
  121. package/build/esm/lib/cli/cliLogs.js.map +1 -1
  122. package/build/esm/lib/cli/cliMessage.d.ts +1 -2
  123. package/build/esm/lib/cli/cliMessage.d.ts.map +1 -1
  124. package/build/esm/lib/cli/cliMessage.js +0 -1
  125. package/build/esm/lib/cli/cliMessage.js.map +1 -1
  126. package/build/esm/lib/cli/cliObjects.d.ts +18 -21
  127. package/build/esm/lib/cli/cliObjects.d.ts.map +1 -1
  128. package/build/esm/lib/cli/cliObjects.js +38 -44
  129. package/build/esm/lib/cli/cliObjects.js.map +1 -1
  130. package/build/esm/lib/cli/cliPlugin.d.ts +3 -3
  131. package/build/esm/lib/cli/cliPlugin.d.ts.map +1 -1
  132. package/build/esm/lib/cli/cliPlugin.js +1 -1
  133. package/build/esm/lib/cli/cliPlugin.js.map +1 -1
  134. package/build/esm/lib/cli/cliProcess.d.ts +4 -8
  135. package/build/esm/lib/cli/cliProcess.d.ts.map +1 -1
  136. package/build/esm/lib/cli/cliProcess.js +4 -7
  137. package/build/esm/lib/cli/cliProcess.js.map +1 -1
  138. package/build/esm/lib/cli/cliStates.d.ts +4 -7
  139. package/build/esm/lib/cli/cliStates.d.ts.map +1 -1
  140. package/build/esm/lib/cli/cliStates.js +2 -6
  141. package/build/esm/lib/cli/cliStates.js.map +1 -1
  142. package/build/esm/lib/setup/customError.d.ts +0 -4
  143. package/build/esm/lib/setup/customError.d.ts.map +1 -1
  144. package/build/esm/lib/setup/customError.js +0 -3
  145. package/build/esm/lib/setup/customError.js.map +1 -1
  146. package/build/esm/lib/setup/dbConnection.d.ts.map +1 -1
  147. package/build/esm/lib/setup/dbConnection.js +13 -10
  148. package/build/esm/lib/setup/dbConnection.js.map +1 -1
  149. package/build/esm/lib/setup/formatters.d.ts +4 -4
  150. package/build/esm/lib/setup/formatters.js +4 -4
  151. package/build/esm/lib/setup/pluginInfos.d.ts +0 -5
  152. package/build/esm/lib/setup/pluginInfos.d.ts.map +1 -1
  153. package/build/esm/lib/setup/pluginInfos.js +0 -5
  154. package/build/esm/lib/setup/pluginInfos.js.map +1 -1
  155. package/build/esm/lib/setup/setupBackup.d.ts +0 -34
  156. package/build/esm/lib/setup/setupBackup.d.ts.map +1 -1
  157. package/build/esm/lib/setup/setupBackup.js +12 -46
  158. package/build/esm/lib/setup/setupBackup.js.map +1 -1
  159. package/build/esm/lib/setup/setupInstall.d.ts +15 -38
  160. package/build/esm/lib/setup/setupInstall.d.ts.map +1 -1
  161. package/build/esm/lib/setup/setupInstall.js +21 -38
  162. package/build/esm/lib/setup/setupInstall.js.map +1 -1
  163. package/build/esm/lib/setup/setupLicense.d.ts +0 -8
  164. package/build/esm/lib/setup/setupLicense.d.ts.map +1 -1
  165. package/build/esm/lib/setup/setupLicense.js +0 -6
  166. package/build/esm/lib/setup/setupLicense.js.map +1 -1
  167. package/build/esm/lib/setup/setupList.d.ts +1 -55
  168. package/build/esm/lib/setup/setupList.d.ts.map +1 -1
  169. package/build/esm/lib/setup/setupList.js +8 -61
  170. package/build/esm/lib/setup/setupList.js.map +1 -1
  171. package/build/esm/lib/setup/setupMultihost.d.ts.map +1 -1
  172. package/build/esm/lib/setup/setupMultihost.js +6 -5
  173. package/build/esm/lib/setup/setupMultihost.js.map +1 -1
  174. package/build/esm/lib/setup/setupPacketManager.d.ts +0 -10
  175. package/build/esm/lib/setup/setupPacketManager.d.ts.map +1 -1
  176. package/build/esm/lib/setup/setupPacketManager.js +0 -9
  177. package/build/esm/lib/setup/setupPacketManager.js.map +1 -1
  178. package/build/esm/lib/setup/setupRepo.d.ts +0 -6
  179. package/build/esm/lib/setup/setupRepo.d.ts.map +1 -1
  180. package/build/esm/lib/setup/setupRepo.js +14 -30
  181. package/build/esm/lib/setup/setupRepo.js.map +1 -1
  182. package/build/esm/lib/setup/setupSetup.d.ts +0 -27
  183. package/build/esm/lib/setup/setupSetup.d.ts.map +1 -1
  184. package/build/esm/lib/setup/setupSetup.js +21 -36
  185. package/build/esm/lib/setup/setupSetup.js.map +1 -1
  186. package/build/esm/lib/setup/setupUpgrade.d.ts +2 -8
  187. package/build/esm/lib/setup/setupUpgrade.d.ts.map +1 -1
  188. package/build/esm/lib/setup/setupUpgrade.js +6 -14
  189. package/build/esm/lib/setup/setupUpgrade.js.map +1 -1
  190. package/build/esm/lib/setup/setupUpload.d.ts +1 -72
  191. package/build/esm/lib/setup/setupUpload.d.ts.map +1 -1
  192. package/build/esm/lib/setup/setupUpload.js +5 -72
  193. package/build/esm/lib/setup/setupUpload.js.map +1 -1
  194. package/build/esm/lib/setup/setupUsers.d.ts +14 -23
  195. package/build/esm/lib/setup/setupUsers.d.ts.map +1 -1
  196. package/build/esm/lib/setup/setupUsers.js +14 -56
  197. package/build/esm/lib/setup/setupUsers.js.map +1 -1
  198. package/build/esm/lib/setup/setupVendor.d.ts +1 -9
  199. package/build/esm/lib/setup/setupVendor.d.ts.map +1 -1
  200. package/build/esm/lib/setup/setupVendor.js +1 -7
  201. package/build/esm/lib/setup/setupVendor.js.map +1 -1
  202. package/build/esm/lib/setup/setupVisDebug.d.ts +2 -11
  203. package/build/esm/lib/setup/setupVisDebug.d.ts.map +1 -1
  204. package/build/esm/lib/setup/setupVisDebug.js +14 -21
  205. package/build/esm/lib/setup/setupVisDebug.js.map +1 -1
  206. package/build/esm/lib/setup/utils.d.ts +1 -1
  207. package/build/esm/lib/setup/utils.d.ts.map +1 -1
  208. package/build/esm/lib/setup/utils.js +4 -2
  209. package/build/esm/lib/setup/utils.js.map +1 -1
  210. package/build/esm/lib/setup.d.ts.map +1 -1
  211. package/build/esm/lib/setup.js +211 -162
  212. package/build/esm/lib/setup.js.map +1 -1
  213. package/build/tsconfig.build.tsbuildinfo +1 -1
  214. package/package.json +14 -14
@@ -5,7 +5,6 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
9
8
  var __export = (target, all) => {
10
9
  for (var name in all)
11
10
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -45,19 +44,13 @@ var import_utils = require("../../lib/setup/utils.js");
45
44
  var import_customError = require("../../lib/setup/customError.js");
46
45
  const debug = (0, import_debug.default)("iobroker:cli");
47
46
  class Upgrade {
48
- static {
49
- __name(this, "Upgrade");
50
- }
51
47
  hostname = import_js_controller_common.tools.getHostName();
52
48
  upload;
53
49
  install;
54
50
  objects;
55
51
  processExit;
56
- /**
57
- * @param options The objects client, the upload/install helpers and the process-exit callback
58
- */
59
52
  constructor(options) {
60
- options ||= {};
53
+ options = options || {};
61
54
  if (!options.processExit) {
62
55
  throw new Error("Invalid arguments: processExit is missing");
63
56
  }
@@ -77,14 +70,13 @@ class Upgrade {
77
70
  async upgradeAdapterHelper(repo, list, forceDowngrade, autoConfirm) {
78
71
  const relevantAdapters = [];
79
72
  for (const adapter of list) {
80
- const repoAdapter = repo[adapter];
81
- if (repoAdapter.controller) {
73
+ if (repo[adapter].controller) {
82
74
  continue;
83
75
  }
84
76
  const adapterDir = import_js_controller_common.tools.getAdapterDir(adapter);
85
77
  if (adapterDir && import_fs_extra.default.existsSync(import_node_path.default.join(adapterDir, "io-package.json"))) {
86
78
  const ioInstalled = import_fs_extra.default.readJsonSync(import_node_path.default.join(adapterDir, "io-package.json"));
87
- if (!import_js_controller_common.tools.upToDate(repoAdapter.version, ioInstalled.common.version)) {
79
+ if (!import_js_controller_common.tools.upToDate(repo[adapter].version, ioInstalled.common.version)) {
88
80
  relevantAdapters.push(adapter);
89
81
  }
90
82
  }
@@ -95,15 +87,14 @@ class Upgrade {
95
87
  let oneAdapterAdded = false;
96
88
  for (let i = relevantAdapters.length - 1; i >= 0; i--) {
97
89
  const relAdapter = relevantAdapters[i];
98
- const relevantAdapter = repo[relAdapter];
99
- if (!relevantAdapter.dependencies && !relevantAdapter.globalDependencies) {
90
+ if (!repo[relAdapter].dependencies && !repo[relAdapter].globalDependencies) {
100
91
  sortedAdapters.push(relAdapter);
101
92
  relevantAdapters.splice(relevantAdapters.indexOf(relAdapter), 1);
102
93
  oneAdapterAdded = true;
103
94
  } else {
104
95
  const allDeps = {
105
- ...import_js_controller_common.tools.parseDependencies(relevantAdapter.dependencies),
106
- ...import_js_controller_common.tools.parseDependencies(relevantAdapter.globalDependencies)
96
+ ...import_js_controller_common.tools.parseDependencies(repo[relAdapter].dependencies),
97
+ ...import_js_controller_common.tools.parseDependencies(repo[relAdapter].globalDependencies)
107
98
  };
108
99
  let conflict = false;
109
100
  for (const [depName, version] of Object.entries(allDeps)) {
@@ -253,7 +244,7 @@ class Upgrade {
253
244
  forceDowngrade = true;
254
245
  }
255
246
  const repoAdapter = sources[adapter];
256
- const finishUpgrade = /* @__PURE__ */ __name(async (name, ioPack) => {
247
+ const finishUpgrade = async (name, ioPack) => {
257
248
  if (!ioPack) {
258
249
  const adapterDir2 = import_js_controller_common.tools.getAdapterDir(name);
259
250
  if (!adapterDir2) {
@@ -273,7 +264,7 @@ class Upgrade {
273
264
  await this.upload.uploadAdapter(name, false, true);
274
265
  await this.upload.upgradeAdapterObjects(name, ioPack);
275
266
  await this.upload.uploadAdapter(name, true, true);
276
- }, "finishUpgrade");
267
+ };
277
268
  const adapterDir = import_js_controller_common.tools.getAdapterDir(adapter);
278
269
  if (!adapterDir || !version && !import_fs_extra.default.existsSync(import_node_path.default.join(adapterDir, "io-package.json"))) {
279
270
  return console.log(`Adapter "${adapter}"${adapter.length < 15 ? new Array(15 - adapter.length).join(" ") : ""} is not installed.`);
@@ -292,7 +283,7 @@ class Upgrade {
292
283
  ioInstalled = { common: { version: "0.0.0" } };
293
284
  }
294
285
  const installedVersion = ioInstalled.common.version;
295
- const showUpgradeDialog = /* @__PURE__ */ __name((installedVersion2, targetVersion, adapterName) => {
286
+ const showUpgradeDialog = (installedVersion2, targetVersion, adapterName) => {
296
287
  const isMajor = import_semver.default.major(installedVersion2) !== import_semver.default.major(targetVersion);
297
288
  if (autoConfirm || !import_node_tty.default.isatty(process.stdout.fd) && (!isMajor || !upgradeAll)) {
298
289
  return true;
@@ -369,7 +360,7 @@ This downgrade of "${adapter}" will ${noMissingNews ? "" : "at least "}remove th
369
360
  }
370
361
  } while (answer !== "y" && answer !== "yes");
371
362
  return true;
372
- }, "showUpgradeDialog");
363
+ };
373
364
  if (repoAdapter.version) {
374
365
  if (!forceDowngrade) {
375
366
  try {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/setup/setupUpgrade.ts"],
4
- "sourcesContent": ["import Debug from 'debug';\nimport fs from 'fs-extra';\nimport { tools, EXIT_CODES } from '@iobroker/js-controller-common';\nimport semver from 'semver';\nimport { Upload } from '@/lib/setup/setupUpload.js';\nimport { Install } from '@/lib/setup/setupInstall.js';\nimport rl from 'readline-sync';\nimport tty from 'node:tty';\nimport path from 'node:path';\nimport { getRepository, isVersionIgnored } from '@/lib/setup/utils.js';\nimport type { Client as ObjectsInRedisClient } from '@iobroker/db-objects-redis';\nimport type { Client as StatesInRedisClient } from '@iobroker/db-states-redis';\nimport type { ProcessExitCallback } from '@/lib/_Types.js';\nimport { IoBrokerError } from '@/lib/setup/customError.js';\n\nconst debug = Debug('iobroker:cli');\n\ntype IoPackDependencies = string[] | Record<string, any>[] | Record<string, any>;\n\ninterface CLIUpgradeOptions {\n processExit: ProcessExitCallback;\n objects: ObjectsInRedisClient;\n states: StatesInRedisClient;\n params: Record<string, any>;\n}\n\ninterface UpgradeControllerOptions {\n /** The repo or url */\n repoUrl?: string;\n /** If downgrades are allowed */\n forceDowngrade: boolean;\n /** If controller is currently running */\n controllerRunning: boolean;\n /** Version to upgrade controller too */\n version?: string;\n}\n\n/**\n * CLI command to upgrade the js-controller\n */\nexport class Upgrade {\n private readonly hostname = tools.getHostName();\n private readonly upload: Upload;\n private readonly install: Install;\n private readonly objects: ObjectsInRedisClient;\n private readonly processExit: ProcessExitCallback;\n\n /**\n * @param options The objects client, the upload/install helpers and the process-exit callback\n */\n constructor(options: CLIUpgradeOptions) {\n options ||= {} as CLIUpgradeOptions;\n\n if (!options.processExit) {\n throw new Error('Invalid arguments: processExit is missing');\n }\n\n this.processExit = options.processExit;\n this.objects = options.objects;\n\n this.upload = new Upload(options);\n this.install = new Install(options);\n }\n\n /**\n * Sorts the adapters by their dependencies and then upgrades multiple adapters from the given repository url\n *\n * @param repo the repository content\n * @param list list of adapters to upgrade\n * @param forceDowngrade flag to force downgrade\n * @param autoConfirm automatically confirm the tty questions (bypass)\n */\n async upgradeAdapterHelper(\n repo: ioBroker.RepositoryJson,\n list: string[],\n forceDowngrade: boolean,\n autoConfirm: boolean,\n ): Promise<void> {\n const relevantAdapters = [];\n // check which adapters are upgradeable and sort them according to their dependencies\n for (const adapter of list) {\n const repoAdapter = repo[adapter] as ioBroker.RepositoryJsonAdapterContent;\n if (repoAdapter.controller) {\n // skip controller\n continue;\n }\n const adapterDir = tools.getAdapterDir(adapter);\n if (adapterDir && fs.existsSync(path.join(adapterDir, 'io-package.json'))) {\n const ioInstalled = fs.readJsonSync(path.join(adapterDir, 'io-package.json'));\n if (!tools.upToDate(repoAdapter.version, ioInstalled.common.version)) {\n // not up to date, we need to put it into account for our dependency check\n relevantAdapters.push(adapter);\n }\n }\n }\n\n if (relevantAdapters.length) {\n const sortedAdapters = [];\n\n while (relevantAdapters.length) {\n let oneAdapterAdded = false;\n // create an ordered list for upgrades\n for (let i = relevantAdapters.length - 1; i >= 0; i--) {\n const relAdapter = relevantAdapters[i];\n const relevantAdapter = repo[relAdapter] as ioBroker.RepositoryJsonAdapterContent;\n // if a new version has no dependencies, we can upgrade\n if (!relevantAdapter.dependencies && !relevantAdapter.globalDependencies) {\n // no deps, simply add it\n sortedAdapters.push(relAdapter);\n relevantAdapters.splice(relevantAdapters.indexOf(relAdapter), 1);\n oneAdapterAdded = true;\n } else {\n const allDeps: Record<string, string> = {\n ...tools.parseDependencies(relevantAdapter.dependencies),\n ...tools.parseDependencies(relevantAdapter.globalDependencies),\n };\n\n // we have to check if the deps are there\n let conflict = false;\n for (const [depName, version] of Object.entries(allDeps)) {\n debug(`adapter \"${relAdapter}\" has dependency \"${depName}\": \"${version}\"`);\n if (version !== '*') {\n // dependency is important because it affects the version range\n if (relevantAdapters.includes(depName)) {\n // the dependency is also in the upgrade list and not previously added, we should add the dependency first\n debug(`conflict for dependency \"${depName}\" at adapter \"${relAdapter}\"`);\n conflict = true;\n break;\n }\n }\n }\n // we reached here and no conflict, so every dep is satisfied\n if (!conflict) {\n sortedAdapters.push(relAdapter);\n relevantAdapters.splice(relevantAdapters.indexOf(relAdapter), 1);\n oneAdapterAdded = true;\n }\n }\n }\n\n if (!oneAdapterAdded) {\n // no adapter during this loop -> circular dependency\n console.warn(`Circular dependency detected between adapters \"${relevantAdapters.join(', ')}\"`);\n sortedAdapters.concat(relevantAdapters);\n break; // however, break and try to update\n }\n }\n\n debug(`upgrade order is \"${sortedAdapters.join(', ')}\"`);\n\n for (const sortedAdapter of sortedAdapters) {\n if ((repo[sortedAdapter] as ioBroker.RepositoryJsonAdapterContent)?.controller) {\n continue;\n }\n await this.upgradeAdapter(repo, sortedAdapter, forceDowngrade, autoConfirm, true);\n }\n } else {\n console.log('All adapters are up to date');\n }\n }\n\n /**\n * Checks that local and global deps are fulfilled else rejects promise\n *\n * @param deps local dependencies - required on this host\n * @param globalDeps global dependencies - required on one of the hosts\n */\n private async _checkDependencies(deps: IoPackDependencies, globalDeps: IoPackDependencies): Promise<void> {\n if (!deps && !globalDeps) {\n return Promise.resolve();\n }\n\n deps = tools.parseDependencies(deps);\n globalDeps = tools.parseDependencies(globalDeps);\n // combine both dependencies\n const allDeps = { ...deps, ...globalDeps };\n\n // Get all installed adapters\n const objs = await this.objects.getObjectViewAsync(\n 'system',\n 'instance',\n {\n startkey: 'system.adapter.',\n endkey: 'system.adapter.\\u9999',\n },\n undefined,\n );\n\n if (objs?.rows?.length) {\n for (const dName in allDeps) {\n if (dName === 'js-controller') {\n const version = allDeps[dName];\n // Check only if version not *, else we don't have to read io-pack unnecessarily\n if (version !== '*') {\n const iopkg_ = fs.readJSONSync(`${tools.getControllerDir()}/package.json`);\n try {\n if (!semver.satisfies(iopkg_.version, version, { includePrerelease: true })) {\n return Promise.reject(\n new Error(\n `Invalid version of \"${dName}\". Installed \"${iopkg_.version}\", required \"${version}`,\n ),\n );\n }\n } catch (e) {\n console.log(`Can not check js-controller dependency requirement: ${e.message}`);\n return Promise.reject(\n new Error(\n `Invalid version of \"${dName}\". Installed \"${iopkg_.version}\", required \"${version}`,\n ),\n );\n }\n }\n } else {\n let gInstances: ioBroker.GetObjectViewItem<ioBroker.InstanceObject>[] = [];\n let locInstances: ioBroker.GetObjectViewItem<ioBroker.InstanceObject>[] = [];\n // if global dep get all instances of adapter\n if (globalDeps[dName] !== undefined) {\n gInstances = objs.rows.filter(obj => obj.value.common && obj.value.common.name === dName);\n }\n if (deps[dName] !== undefined) {\n // local dependencies: get all instances on the same host\n locInstances = objs.rows.filter(\n obj =>\n obj.value.common &&\n obj.value.common.name === dName &&\n obj.value.common.host === this.hostname,\n );\n if (locInstances.length === 0) {\n return Promise.reject(new Error(`Required dependency \"${dName}\" not found on this host.`));\n }\n }\n\n let isFound = false;\n // we check that all instances match - respect different local and global dep versions\n for (const instance of locInstances) {\n const instanceVersion = instance.value.common.version;\n try {\n if (\n !semver.satisfies(instanceVersion, deps[dName], {\n includePrerelease: true,\n })\n ) {\n return Promise.reject(\n new Error(\n `Invalid version of \"${dName}\". Installed \"${instanceVersion}\", required \"${deps[dName]}`,\n ),\n );\n }\n } catch (e) {\n console.log(`Can not check dependency requirement: ${e.message}`);\n return Promise.reject(\n new Error(\n `Invalid version of \"${dName}\". Installed \"${instanceVersion}\", required \"${deps[dName]}`,\n ),\n );\n }\n isFound = true;\n }\n\n for (const instance of gInstances) {\n const instanceVersion = instance.value.common.version;\n try {\n if (\n !semver.satisfies(instanceVersion, globalDeps[dName], {\n includePrerelease: true,\n })\n ) {\n return Promise.reject(\n new Error(\n `Invalid version of \"${dName}\". Installed \"${instanceVersion}\", required \"${globalDeps[dName]}`,\n ),\n );\n }\n } catch (e) {\n console.log(`Can not check dependency requirement: ${e.message}`);\n return Promise.reject(\n new Error(\n `Invalid version of \"${dName}\". Installed \"${instanceVersion}\", required \"${globalDeps[dName]}`,\n ),\n );\n }\n isFound = true;\n }\n\n if (isFound === false) {\n return Promise.reject(new Error(`Required dependency \"${dName}\" not found.`));\n }\n }\n }\n }\n }\n\n /**\n * Try to async upgrade adapter from a given source with some checks\n *\n * @param repoUrlOrObject url of the selected repository or parsed repo, if undefined, use current active repository\n * @param adapter name of the adapter (can also include version like web@3.0.0)\n * @param forceDowngrade flag to force downgrade\n * @param autoConfirm automatically confirm the tty questions (bypass)\n * @param upgradeAll if true, this is an upgrade all call, we don't do major upgrades if no tty\n */\n async upgradeAdapter(\n repoUrlOrObject: string | ioBroker.RepositoryJson | undefined,\n adapter: string,\n forceDowngrade: boolean,\n autoConfirm: boolean,\n upgradeAll: boolean,\n ): Promise<void> {\n let sources: ioBroker.RepositoryJson;\n if (!repoUrlOrObject || !tools.isObject(repoUrlOrObject)) {\n try {\n sources = await getRepository({ repoName: repoUrlOrObject, objects: this.objects });\n } catch (e) {\n console.error(e.message);\n return this.processExit(e instanceof IoBrokerError ? e.code : e);\n }\n } else {\n sources = repoUrlOrObject;\n }\n\n let version: string;\n if (adapter.includes('@')) {\n const parts = adapter.split('@');\n adapter = parts[0];\n version = parts[1];\n } else {\n version = '';\n }\n if (version) {\n forceDowngrade = true;\n }\n\n /** Repository entry of this adapter */\n const repoAdapter = sources[adapter] as ioBroker.RepositoryJsonAdapterContent;\n\n // TODO: not really adapter object but close enough\n const finishUpgrade = async (name: string, ioPack?: ioBroker.AdapterObject): Promise<void> => {\n if (!ioPack) {\n const adapterDir = tools.getAdapterDir(name);\n\n if (!adapterDir) {\n console.error(`Cannot find io-package.json in ${adapterDir}`);\n return this.processExit(EXIT_CODES.MISSING_ADAPTER_FILES);\n }\n\n try {\n // close enough to an AdapterObject\n ioPack = fs.readJSONSync(path.join(adapterDir, 'io-package.json')) as ioBroker.AdapterObject;\n } catch {\n console.error(`Cannot find io-package.json in ${adapterDir}`);\n return this.processExit(EXIT_CODES.MISSING_ADAPTER_FILES);\n }\n }\n\n if (ioPack.common.osDependencies) {\n // install linux/osx libraries\n await this.install.installOSPackages(ioPack.common.osDependencies);\n }\n\n // Upload www and admin files of adapter\n await this.upload.uploadAdapter(name, false, true);\n // extend all adapter instance default configs with current config\n // (introduce potentially new attributes while keeping current settings)\n await this.upload.upgradeAdapterObjects(name, ioPack);\n await this.upload.uploadAdapter(name, true, true);\n };\n\n const adapterDir = tools.getAdapterDir(adapter);\n\n // Read the actual description of installed adapter with a version\n if (!adapterDir || (!version && !fs.existsSync(path.join(adapterDir, 'io-package.json')))) {\n return console.log(\n `Adapter \"${adapter}\"${\n adapter.length < 15 ? new Array(15 - adapter.length).join(' ') : ''\n } is not installed.`,\n );\n }\n // Get the url of io-package.json or direct the version\n if (!repoAdapter) {\n console.log(`Adapter \"${adapter}\" is not in the repository and cannot be updated.`);\n return this.processExit(EXIT_CODES.ADAPTER_NOT_FOUND);\n }\n if (repoAdapter.controller) {\n return console.log(\n `Cannot update ${adapter} using this command. Please use \"iobroker upgrade self\" instead!`,\n );\n }\n\n // TODO: not 100 % true but should be correct enough\n let ioInstalled: Pick<ioBroker.AdapterObject, 'common'>;\n if (adapterDir && fs.existsSync(path.join(adapterDir, 'io-package.json'))) {\n ioInstalled = fs.readJsonSync(`${adapterDir}/io-package.json`);\n } else {\n // @ts-expect-error https://github.com/ioBroker/adapter-core/issues/455\n ioInstalled = { common: { version: '0.0.0' } };\n }\n\n const installedVersion = ioInstalled.common.version;\n\n /**\n * We show changelog (news) and ask user if he really wants to upgrade but only if fd is associated with a tty, returns true if upgrade desired\n *\n * @param installedVersion - installed version of adapter\n * @param targetVersion - target version of adapter\n * @param adapterName - name of the adapter\n */\n const showUpgradeDialog = (installedVersion: string, targetVersion: string, adapterName: string): boolean => {\n // major upgrade or downgrade\n const isMajor = semver.major(installedVersion) !== semver.major(targetVersion);\n\n if (autoConfirm || (!tty.isatty(process.stdout.fd) && (!isMajor || !upgradeAll))) {\n // force flag or script on non-major or single adapter upgrade -> always upgrade\n return true;\n }\n\n if (!tty.isatty(process.stdout.fd) && isMajor && upgradeAll) {\n // no tty and not forced and multiple adapters, do not upgrade\n console.log(`Skip major upgrade of ${adapterName} from ${installedVersion} to ${targetVersion}`);\n return false;\n }\n\n const isUpgrade = semver.gt(targetVersion, installedVersion);\n const isDowngrade = semver.lt(targetVersion, installedVersion);\n\n // if information in repo files -> show news\n if (repoAdapter?.news) {\n const news = repoAdapter.news;\n\n let first = true;\n // check if upgrade or downgrade\n if (isUpgrade) {\n for (const version in news) {\n try {\n if (semver.lte(version, targetVersion) && semver.gt(version, installedVersion)) {\n if (first === true) {\n const noMissingNews = news[targetVersion] && news[installedVersion];\n console.log(\n `\\nThis upgrade of \"${adapter}\" will ${\n noMissingNews ? '' : 'at least '\n }introduce the following changes:`,\n );\n console.log(\n '==========================================================================',\n );\n first = false;\n } else if (first === false) {\n console.log();\n }\n console.log(`-> ${version}:`);\n console.log(news[version].en);\n }\n } catch {\n // ignore\n }\n }\n } else if (isDowngrade) {\n for (const version in news) {\n try {\n if (semver.gt(version, targetVersion) && semver.lte(version, installedVersion)) {\n if (first === true) {\n const noMissingNews = news[targetVersion] && news[installedVersion];\n console.log(\n `\\nThis downgrade of \"${adapter}\" will ${\n noMissingNews ? '' : 'at least '\n }remove the following changes:`,\n );\n console.log(\n '==========================================================================',\n );\n first = false;\n } else if (first === false) {\n console.log();\n }\n console.log(`-> ${version}`);\n console.log(news[version].en);\n }\n } catch {\n // ignore\n }\n }\n }\n if (first === false) {\n console.log('==========================================================================\\n');\n }\n }\n\n let answer;\n\n // ask user if he really wants to upgrade/downgrade/reinstall - repeat until (y)es or (n)o given\n do {\n if (isUpgrade || isDowngrade) {\n if (isMajor) {\n console.log(\n `BE CAREFUL: THIS IS A MAJOR ${\n isUpgrade ? 'UPGRADE' : 'DOWNGRADE'\n }, WHICH WILL MOST LIKELY INTRODUCE BREAKING CHANGES!`,\n );\n }\n answer = rl.question(\n `Would you like to ${\n isUpgrade ? 'upgrade' : 'downgrade'\n } ${adapter} from @${installedVersion} to @${\n version || repoAdapter.version\n } now? [(y)es, (n)o]: `,\n {\n defaultInput: 'n',\n },\n );\n } else {\n answer = rl.question(\n `Would you like to reinstall version ${\n version || repoAdapter.version\n } of ${adapter} now? [(y)es, (n)o]: `,\n {\n defaultInput: 'n',\n },\n );\n }\n\n answer = answer.toLowerCase();\n\n if (answer === 'n' || answer === 'no') {\n return false;\n }\n } while (answer !== 'y' && answer !== 'yes');\n return true;\n };\n\n // If a version is included in the repository\n if (repoAdapter.version) {\n if (!forceDowngrade) {\n try {\n await this._checkDependencies(repoAdapter.dependencies, repoAdapter.globalDependencies);\n } catch (e) {\n return console.error(`Cannot check dependencies: ${e.message}`);\n }\n }\n\n if (\n !forceDowngrade &&\n (repoAdapter.version === installedVersion || tools.upToDate(repoAdapter.version, installedVersion))\n ) {\n return console.log(\n `Adapter \"${adapter}\"${\n adapter.length < 15 ? new Array(15 - adapter.length).join(' ') : ''\n } is up to date.`,\n );\n }\n const targetVersion = version || repoAdapter.version;\n\n const isIgnored = await isVersionIgnored({\n adapterName: adapter,\n version: targetVersion,\n objects: this.objects,\n });\n\n if (isIgnored) {\n console.log(\n `No upgrade of \"${adapter}\" desired, because version \"${targetVersion}\" is configured to be ignored by the user. Run \"${tools.appNameLowerCase} version ${adapter} --recognize\" to allow this upgrade!`,\n );\n return;\n }\n\n try {\n if (!showUpgradeDialog(installedVersion, targetVersion, adapter)) {\n console.log(`No upgrade of \"${adapter}\" desired.`);\n return;\n }\n } catch (e) {\n console.log(`Can not check version information to display upgrade infos: ${e.message}`);\n }\n console.log(`Update ${adapter} from @${installedVersion} to @${targetVersion}`);\n const npmPacketName = `${tools.appNameLowerCase}.${adapter}`;\n\n try {\n if (!semver.diff(installedVersion, targetVersion)) {\n console.log(`Uninstall npm packet \"${npmPacketName}\" for a clean re-installation`);\n await tools.uninstallNodeModule(npmPacketName, { debug: process.argv.includes('--debug') });\n }\n } catch (e) {\n console.warn(`Could not uninstall npm packet \"${npmPacketName}\": ${e.message}`);\n }\n\n // Get the adapter from website\n const { packetName, stoppedList } = await this.install.downloadPacket(\n sources,\n `${adapter}@${targetVersion}`,\n );\n await finishUpgrade(packetName);\n await this.install.enableInstances(stoppedList, true);\n } else if (repoAdapter.meta) {\n // Read repository from url or file\n const ioPack = (await tools.getJsonAsync(repoAdapter.meta)) as ioBroker.AdapterObject;\n if (!ioPack) {\n console.error(`Cannot parse file${repoAdapter.meta}`);\n return;\n }\n\n if (!forceDowngrade) {\n try {\n // @ts-expect-error https://github.com/ioBroker/adapter-core/issues/455\n await this._checkDependencies(ioPack.common.dependencies, ioPack.common.globalDependencies);\n } catch (e) {\n console.error(`Cannot check dependencies: ${e.message}`);\n return;\n }\n }\n\n if (\n !version &&\n (ioPack.common.version === installedVersion ||\n (!forceDowngrade && tools.upToDate(ioPack.common.version, installedVersion)))\n ) {\n console.log(\n `Adapter \"${adapter}\"${\n adapter.length < 15 ? new Array(15 - adapter.length).join(' ') : ''\n } is up to date.`,\n );\n } else {\n // Get the adapter from website\n const targetVersion = version || ioPack.common.version;\n\n const isIgnored = await isVersionIgnored({\n adapterName: adapter,\n version: targetVersion,\n objects: this.objects,\n });\n\n if (isIgnored) {\n console.log(\n `No upgrade of \"${adapter}\" desired, because version \"${targetVersion}\" is configured to be ignored by the user. Run \"${tools.appNameLowerCase} version ${adapter} --recognize\" to allow this upgrade!`,\n );\n return;\n }\n\n try {\n if (!showUpgradeDialog(installedVersion, targetVersion, adapter)) {\n console.log(`No upgrade of \"${adapter}\" desired.`);\n return;\n }\n } catch (e) {\n console.log(`Can not check version information to display upgrade infos: ${e.message}`);\n }\n console.log(`Update ${adapter} from @${installedVersion} to @${targetVersion}`);\n const { packetName, stoppedList } = await this.install.downloadPacket(\n sources,\n `${adapter}@${targetVersion}`,\n );\n await finishUpgrade(packetName, ioPack);\n await this.install.enableInstances(stoppedList, true);\n }\n } else if (forceDowngrade) {\n try {\n if (!showUpgradeDialog(installedVersion, version, adapter)) {\n return console.log(`No upgrade of \"${adapter}\" desired.`);\n }\n } catch (e) {\n console.log(`Can not check version information to display upgrade infos: ${e.message}`);\n }\n console.warn(`Unable to get version for \"${adapter}\". Update anyway.`);\n console.log(`Update ${adapter} from @${installedVersion} to @${version}`);\n // Get the adapter from website\n const { packetName, stoppedList } = await this.install.downloadPacket(sources, `${adapter}@${version}`);\n await finishUpgrade(packetName);\n await this.install.enableInstances(stoppedList, true);\n } else {\n return console.error(`Unable to get version for \"${adapter}\".`);\n }\n }\n\n /**\n * Upgrade the js-controller\n *\n * @param options additional information like if controller running, optional url, version\n */\n async upgradeController(options: UpgradeControllerOptions): Promise<void> {\n const { repoUrl, forceDowngrade, controllerRunning, version } = options;\n let targetVersion = version;\n\n const installed = fs.readJSONSync(`${tools.getControllerDir()}/io-package.json`);\n if (!installed || !installed.common || !installed.common.version) {\n return console.error(\n `Host \"${this.hostname}\"${\n this.hostname.length < 15 ? ''.padStart(15 - this.hostname.length) : ''\n } is not installed.`,\n );\n }\n\n const controllerName = installed.common.name;\n let sources: ioBroker.RepositoryJson | undefined;\n\n if (targetVersion === undefined) {\n try {\n const result = await getRepository({ repoName: repoUrl, objects: this.objects });\n if (!result) {\n return console.warn(`Cannot get repository under \"${repoUrl}\"`);\n }\n sources = result;\n } catch (e) {\n console.error(e.message);\n return this.processExit(e instanceof IoBrokerError ? e.code : e);\n }\n\n /** Repository entry of the controller */\n const repoController = sources[controllerName] as ioBroker.RepositoryJsonAdapterContent;\n targetVersion = version ?? repoController.version;\n }\n\n if (!targetVersion) {\n // no info for controller\n return console.error(`Cannot find this controller \"${controllerName}\" in repository.`);\n }\n\n if (\n !forceDowngrade &&\n (targetVersion === installed.common.version || tools.upToDate(targetVersion, installed.common.version))\n ) {\n console.log(\n `Host \"${this.hostname}\"${\n this.hostname.length < 15 ? new Array(15 - this.hostname.length).join(' ') : ''\n } is up to date.`,\n );\n } else if (controllerRunning) {\n console.warn(`Controller is running. Please stop ioBroker first.`);\n } else {\n console.log(`Update ${controllerName} from @${installed.common.version} to @${targetVersion}`);\n // Get the controller from website\n await this.install.downloadPacket(sources, `${controllerName}@${targetVersion}`, {\n stopDb: true,\n });\n }\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import Debug from 'debug';\nimport fs from 'fs-extra';\nimport { tools, EXIT_CODES } from '@iobroker/js-controller-common';\nimport semver from 'semver';\nimport { Upload } from '@/lib/setup/setupUpload.js';\nimport { Install } from '@/lib/setup/setupInstall.js';\nimport rl from 'readline-sync';\nimport tty from 'node:tty';\nimport path from 'node:path';\nimport { getRepository, isVersionIgnored } from '@/lib/setup/utils.js';\nimport type { Client as ObjectsInRedisClient } from '@iobroker/db-objects-redis';\nimport type { Client as StatesInRedisClient } from '@iobroker/db-states-redis';\nimport type { ProcessExitCallback } from '@/lib/_Types.js';\nimport { IoBrokerError } from '@/lib/setup/customError.js';\n\nconst debug = Debug('iobroker:cli');\n\ntype IoPackDependencies = string[] | Record<string, any>[] | Record<string, any>;\n\ninterface CLIUpgradeOptions {\n processExit: ProcessExitCallback;\n objects: ObjectsInRedisClient;\n states: StatesInRedisClient;\n params: Record<string, any>;\n}\n\ninterface UpgradeControllerOptions {\n /** The repo or url */\n repoUrl?: string;\n /** If downgrades are allowed */\n forceDowngrade: boolean;\n /** If controller is currently running */\n controllerRunning: boolean;\n /** Version to upgrade controller too */\n version?: string;\n}\n\nexport class Upgrade {\n private readonly hostname = tools.getHostName();\n private readonly upload: Upload;\n private readonly install: Install;\n private readonly objects: ObjectsInRedisClient;\n private readonly processExit: ProcessExitCallback;\n\n constructor(options: CLIUpgradeOptions) {\n options = options || {};\n\n if (!options.processExit) {\n throw new Error('Invalid arguments: processExit is missing');\n }\n\n this.processExit = options.processExit;\n this.objects = options.objects;\n\n this.upload = new Upload(options);\n this.install = new Install(options);\n }\n\n /**\n * Sorts the adapters by their dependencies and then upgrades multiple adapters from the given repository url\n *\n * @param repo the repository content\n * @param list list of adapters to upgrade\n * @param forceDowngrade flag to force downgrade\n * @param autoConfirm automatically confirm the tty questions (bypass)\n */\n async upgradeAdapterHelper(\n repo: Record<string, any>,\n list: string[],\n forceDowngrade: boolean,\n autoConfirm: boolean,\n ): Promise<void> {\n const relevantAdapters = [];\n // check which adapters are upgradeable and sort them according to their dependencies\n for (const adapter of list) {\n if (repo[adapter].controller) {\n // skip controller\n continue;\n }\n const adapterDir = tools.getAdapterDir(adapter);\n if (adapterDir && fs.existsSync(path.join(adapterDir, 'io-package.json'))) {\n const ioInstalled = fs.readJsonSync(path.join(adapterDir, 'io-package.json'));\n if (!tools.upToDate(repo[adapter].version, ioInstalled.common.version)) {\n // not up to date, we need to put it into account for our dependency check\n relevantAdapters.push(adapter);\n }\n }\n }\n\n if (relevantAdapters.length) {\n const sortedAdapters = [];\n\n while (relevantAdapters.length) {\n let oneAdapterAdded = false;\n // create an ordered list for upgrades\n for (let i = relevantAdapters.length - 1; i >= 0; i--) {\n const relAdapter = relevantAdapters[i];\n // if a new version has no dependencies, we can upgrade\n if (!repo[relAdapter].dependencies && !repo[relAdapter].globalDependencies) {\n // no deps, simply add it\n sortedAdapters.push(relAdapter);\n relevantAdapters.splice(relevantAdapters.indexOf(relAdapter), 1);\n oneAdapterAdded = true;\n } else {\n const allDeps: Record<string, string> = {\n ...tools.parseDependencies(repo[relAdapter].dependencies),\n ...tools.parseDependencies(repo[relAdapter].globalDependencies),\n };\n\n // we have to check if the deps are there\n let conflict = false;\n for (const [depName, version] of Object.entries(allDeps)) {\n debug(`adapter \"${relAdapter}\" has dependency \"${depName}\": \"${version}\"`);\n if (version !== '*') {\n // dependency is important because it affects the version range\n if (relevantAdapters.includes(depName)) {\n // the dependency is also in the upgrade list and not previously added, we should add the dependency first\n debug(`conflict for dependency \"${depName}\" at adapter \"${relAdapter}\"`);\n conflict = true;\n break;\n }\n }\n }\n // we reached here and no conflict, so every dep is satisfied\n if (!conflict) {\n sortedAdapters.push(relAdapter);\n relevantAdapters.splice(relevantAdapters.indexOf(relAdapter), 1);\n oneAdapterAdded = true;\n }\n }\n }\n\n if (!oneAdapterAdded) {\n // no adapter during this loop -> circular dependency\n console.warn(`Circular dependency detected between adapters \"${relevantAdapters.join(', ')}\"`);\n sortedAdapters.concat(relevantAdapters);\n break; // however, break and try to update\n }\n }\n\n debug(`upgrade order is \"${sortedAdapters.join(', ')}\"`);\n\n for (const sortedAdapter of sortedAdapters) {\n if (repo[sortedAdapter]?.controller) {\n continue;\n }\n await this.upgradeAdapter(repo, sortedAdapter, forceDowngrade, autoConfirm, true);\n }\n } else {\n console.log('All adapters are up to date');\n }\n }\n\n /**\n * Checks that local and global deps are fulfilled else rejects promise\n *\n * @param deps local dependencies - required on this host\n * @param globalDeps global dependencies - required on one of the hosts\n */\n private async _checkDependencies(deps: IoPackDependencies, globalDeps: IoPackDependencies): Promise<void> {\n if (!deps && !globalDeps) {\n return Promise.resolve();\n }\n\n deps = tools.parseDependencies(deps);\n globalDeps = tools.parseDependencies(globalDeps);\n // combine both dependencies\n const allDeps = { ...deps, ...globalDeps };\n\n // Get all installed adapters\n const objs = await this.objects.getObjectViewAsync(\n 'system',\n 'instance',\n {\n startkey: 'system.adapter.',\n endkey: 'system.adapter.\\u9999',\n },\n undefined,\n );\n\n if (objs?.rows?.length) {\n for (const dName in allDeps) {\n if (dName === 'js-controller') {\n const version = allDeps[dName];\n // Check only if version not *, else we don't have to read io-pack unnecessarily\n if (version !== '*') {\n const iopkg_ = fs.readJSONSync(`${tools.getControllerDir()}/package.json`);\n try {\n if (!semver.satisfies(iopkg_.version, version, { includePrerelease: true })) {\n return Promise.reject(\n new Error(\n `Invalid version of \"${dName}\". Installed \"${iopkg_.version}\", required \"${version}`,\n ),\n );\n }\n } catch (e) {\n console.log(`Can not check js-controller dependency requirement: ${e.message}`);\n return Promise.reject(\n new Error(\n `Invalid version of \"${dName}\". Installed \"${iopkg_.version}\", required \"${version}`,\n ),\n );\n }\n }\n } else {\n let gInstances: ioBroker.GetObjectViewItem<ioBroker.InstanceObject>[] = [];\n let locInstances: ioBroker.GetObjectViewItem<ioBroker.InstanceObject>[] = [];\n // if global dep get all instances of adapter\n if (globalDeps[dName] !== undefined) {\n gInstances = objs.rows.filter(obj => obj.value.common && obj.value.common.name === dName);\n }\n if (deps[dName] !== undefined) {\n // local dependencies: get all instances on the same host\n locInstances = objs.rows.filter(\n obj =>\n obj.value.common &&\n obj.value.common.name === dName &&\n obj.value.common.host === this.hostname,\n );\n if (locInstances.length === 0) {\n return Promise.reject(new Error(`Required dependency \"${dName}\" not found on this host.`));\n }\n }\n\n let isFound = false;\n // we check that all instances match - respect different local and global dep versions\n for (const instance of locInstances) {\n const instanceVersion = instance.value.common.version;\n try {\n if (\n !semver.satisfies(instanceVersion, deps[dName], {\n includePrerelease: true,\n })\n ) {\n return Promise.reject(\n new Error(\n `Invalid version of \"${dName}\". Installed \"${instanceVersion}\", required \"${deps[dName]}`,\n ),\n );\n }\n } catch (e) {\n console.log(`Can not check dependency requirement: ${e.message}`);\n return Promise.reject(\n new Error(\n `Invalid version of \"${dName}\". Installed \"${instanceVersion}\", required \"${deps[dName]}`,\n ),\n );\n }\n isFound = true;\n }\n\n for (const instance of gInstances) {\n const instanceVersion = instance.value.common.version;\n try {\n if (\n !semver.satisfies(instanceVersion, globalDeps[dName], {\n includePrerelease: true,\n })\n ) {\n return Promise.reject(\n new Error(\n `Invalid version of \"${dName}\". Installed \"${instanceVersion}\", required \"${globalDeps[dName]}`,\n ),\n );\n }\n } catch (e) {\n console.log(`Can not check dependency requirement: ${e.message}`);\n return Promise.reject(\n new Error(\n `Invalid version of \"${dName}\". Installed \"${instanceVersion}\", required \"${globalDeps[dName]}`,\n ),\n );\n }\n isFound = true;\n }\n\n if (isFound === false) {\n return Promise.reject(new Error(`Required dependency \"${dName}\" not found.`));\n }\n }\n }\n }\n }\n\n /**\n * Try to async upgrade adapter from a given source with some checks\n *\n * @param repoUrlOrObject url of the selected repository or parsed repo, if undefined, use current active repository\n * @param adapter name of the adapter (can also include version like web@3.0.0)\n * @param forceDowngrade flag to force downgrade\n * @param autoConfirm automatically confirm the tty questions (bypass)\n * @param upgradeAll if true, this is an upgrade all call, we don't do major upgrades if no tty\n */\n async upgradeAdapter(\n repoUrlOrObject: string | Record<string, any> | undefined,\n adapter: string,\n forceDowngrade: boolean,\n autoConfirm: boolean,\n upgradeAll: boolean,\n ): Promise<void> {\n let sources: Record<string, any>;\n if (!repoUrlOrObject || !tools.isObject(repoUrlOrObject)) {\n try {\n sources = await getRepository({ repoName: repoUrlOrObject, objects: this.objects });\n } catch (e) {\n console.error(e.message);\n return this.processExit(e instanceof IoBrokerError ? e.code : e);\n }\n } else {\n sources = repoUrlOrObject;\n }\n\n let version: string;\n if (adapter.includes('@')) {\n const parts = adapter.split('@');\n adapter = parts[0];\n version = parts[1];\n } else {\n version = '';\n }\n if (version) {\n forceDowngrade = true;\n }\n\n /** Repository entry of this adapter */\n const repoAdapter: Record<string, any> = sources[adapter];\n\n // TODO: not really adapter object but close enough\n const finishUpgrade = async (name: string, ioPack?: ioBroker.AdapterObject): Promise<void> => {\n if (!ioPack) {\n const adapterDir = tools.getAdapterDir(name);\n\n if (!adapterDir) {\n console.error(`Cannot find io-package.json in ${adapterDir}`);\n return this.processExit(EXIT_CODES.MISSING_ADAPTER_FILES);\n }\n\n try {\n // close enough to an AdapterObject\n ioPack = fs.readJSONSync(path.join(adapterDir, 'io-package.json')) as ioBroker.AdapterObject;\n } catch {\n console.error(`Cannot find io-package.json in ${adapterDir}`);\n return this.processExit(EXIT_CODES.MISSING_ADAPTER_FILES);\n }\n }\n\n if (ioPack.common.osDependencies) {\n // install linux/osx libraries\n await this.install.installOSPackages(ioPack.common.osDependencies);\n }\n\n // Upload www and admin files of adapter\n await this.upload.uploadAdapter(name, false, true);\n // extend all adapter instance default configs with current config\n // (introduce potentially new attributes while keeping current settings)\n await this.upload.upgradeAdapterObjects(name, ioPack);\n await this.upload.uploadAdapter(name, true, true);\n };\n\n const adapterDir = tools.getAdapterDir(adapter);\n\n // Read the actual description of installed adapter with a version\n if (!adapterDir || (!version && !fs.existsSync(path.join(adapterDir, 'io-package.json')))) {\n return console.log(\n `Adapter \"${adapter}\"${\n adapter.length < 15 ? new Array(15 - adapter.length).join(' ') : ''\n } is not installed.`,\n );\n }\n // Get the url of io-package.json or direct the version\n if (!repoAdapter) {\n console.log(`Adapter \"${adapter}\" is not in the repository and cannot be updated.`);\n return this.processExit(EXIT_CODES.ADAPTER_NOT_FOUND);\n }\n if (repoAdapter.controller) {\n return console.log(\n `Cannot update ${adapter} using this command. Please use \"iobroker upgrade self\" instead!`,\n );\n }\n\n // TODO: not 100 % true but should be correct enough\n let ioInstalled: Pick<ioBroker.AdapterObject, 'common'>;\n if (adapterDir && fs.existsSync(path.join(adapterDir, 'io-package.json'))) {\n ioInstalled = fs.readJsonSync(`${adapterDir}/io-package.json`);\n } else {\n // @ts-expect-error https://github.com/ioBroker/adapter-core/issues/455\n ioInstalled = { common: { version: '0.0.0' } };\n }\n\n const installedVersion = ioInstalled.common.version;\n\n /**\n * We show changelog (news) and ask user if he really wants to upgrade but only if fd is associated with a tty, returns true if upgrade desired\n *\n * @param installedVersion - installed version of adapter\n * @param targetVersion - target version of adapter\n * @param adapterName - name of the adapter\n */\n const showUpgradeDialog = (installedVersion: string, targetVersion: string, adapterName: string): boolean => {\n // major upgrade or downgrade\n const isMajor = semver.major(installedVersion) !== semver.major(targetVersion);\n\n if (autoConfirm || (!tty.isatty(process.stdout.fd) && (!isMajor || !upgradeAll))) {\n // force flag or script on non-major or single adapter upgrade -> always upgrade\n return true;\n }\n\n if (!tty.isatty(process.stdout.fd) && isMajor && upgradeAll) {\n // no tty and not forced and multiple adapters, do not upgrade\n console.log(`Skip major upgrade of ${adapterName} from ${installedVersion} to ${targetVersion}`);\n return false;\n }\n\n const isUpgrade = semver.gt(targetVersion, installedVersion);\n const isDowngrade = semver.lt(targetVersion, installedVersion);\n\n // if information in repo files -> show news\n if (repoAdapter?.news) {\n const news = repoAdapter.news;\n\n let first = true;\n // check if upgrade or downgrade\n if (isUpgrade) {\n for (const version in news) {\n try {\n if (semver.lte(version, targetVersion) && semver.gt(version, installedVersion)) {\n if (first === true) {\n const noMissingNews = news[targetVersion] && news[installedVersion];\n console.log(\n `\\nThis upgrade of \"${adapter}\" will ${\n noMissingNews ? '' : 'at least '\n }introduce the following changes:`,\n );\n console.log(\n '==========================================================================',\n );\n first = false;\n } else if (first === false) {\n console.log();\n }\n console.log(`-> ${version}:`);\n console.log(news[version].en);\n }\n } catch {\n // ignore\n }\n }\n } else if (isDowngrade) {\n for (const version in news) {\n try {\n if (semver.gt(version, targetVersion) && semver.lte(version, installedVersion)) {\n if (first === true) {\n const noMissingNews = news[targetVersion] && news[installedVersion];\n console.log(\n `\\nThis downgrade of \"${adapter}\" will ${\n noMissingNews ? '' : 'at least '\n }remove the following changes:`,\n );\n console.log(\n '==========================================================================',\n );\n first = false;\n } else if (first === false) {\n console.log();\n }\n console.log(`-> ${version}`);\n console.log(news[version].en);\n }\n } catch {\n // ignore\n }\n }\n }\n if (first === false) {\n console.log('==========================================================================\\n');\n }\n }\n\n let answer;\n\n // ask user if he really wants to upgrade/downgrade/reinstall - repeat until (y)es or (n)o given\n do {\n if (isUpgrade || isDowngrade) {\n if (isMajor) {\n console.log(\n `BE CAREFUL: THIS IS A MAJOR ${\n isUpgrade ? 'UPGRADE' : 'DOWNGRADE'\n }, WHICH WILL MOST LIKELY INTRODUCE BREAKING CHANGES!`,\n );\n }\n answer = rl.question(\n `Would you like to ${\n isUpgrade ? 'upgrade' : 'downgrade'\n } ${adapter} from @${installedVersion} to @${\n version || repoAdapter.version\n } now? [(y)es, (n)o]: `,\n {\n defaultInput: 'n',\n },\n );\n } else {\n answer = rl.question(\n `Would you like to reinstall version ${\n version || repoAdapter.version\n } of ${adapter} now? [(y)es, (n)o]: `,\n {\n defaultInput: 'n',\n },\n );\n }\n\n answer = answer.toLowerCase();\n\n if (answer === 'n' || answer === 'no') {\n return false;\n }\n } while (answer !== 'y' && answer !== 'yes');\n return true;\n };\n\n // If a version is included in the repository\n if (repoAdapter.version) {\n if (!forceDowngrade) {\n try {\n await this._checkDependencies(repoAdapter.dependencies, repoAdapter.globalDependencies);\n } catch (e) {\n return console.error(`Cannot check dependencies: ${e.message}`);\n }\n }\n\n if (\n !forceDowngrade &&\n (repoAdapter.version === installedVersion || tools.upToDate(repoAdapter.version, installedVersion))\n ) {\n return console.log(\n `Adapter \"${adapter}\"${\n adapter.length < 15 ? new Array(15 - adapter.length).join(' ') : ''\n } is up to date.`,\n );\n }\n const targetVersion = version || repoAdapter.version;\n\n const isIgnored = await isVersionIgnored({\n adapterName: adapter,\n version: targetVersion,\n objects: this.objects,\n });\n\n if (isIgnored) {\n console.log(\n `No upgrade of \"${adapter}\" desired, because version \"${targetVersion}\" is configured to be ignored by the user. Run \"${tools.appNameLowerCase} version ${adapter} --recognize\" to allow this upgrade!`,\n );\n return;\n }\n\n try {\n if (!showUpgradeDialog(installedVersion, targetVersion, adapter)) {\n console.log(`No upgrade of \"${adapter}\" desired.`);\n return;\n }\n } catch (e) {\n console.log(`Can not check version information to display upgrade infos: ${e.message}`);\n }\n console.log(`Update ${adapter} from @${installedVersion} to @${targetVersion}`);\n const npmPacketName = `${tools.appNameLowerCase}.${adapter}`;\n\n try {\n if (!semver.diff(installedVersion, targetVersion)) {\n console.log(`Uninstall npm packet \"${npmPacketName}\" for a clean re-installation`);\n await tools.uninstallNodeModule(npmPacketName, { debug: process.argv.includes('--debug') });\n }\n } catch (e) {\n console.warn(`Could not uninstall npm packet \"${npmPacketName}\": ${e.message}`);\n }\n\n // Get the adapter from website\n const { packetName, stoppedList } = await this.install.downloadPacket(\n sources,\n `${adapter}@${targetVersion}`,\n );\n await finishUpgrade(packetName);\n await this.install.enableInstances(stoppedList, true);\n } else if (repoAdapter.meta) {\n // Read repository from url or file\n const ioPack = (await tools.getJsonAsync(repoAdapter.meta)) as ioBroker.AdapterObject;\n if (!ioPack) {\n console.error(`Cannot parse file${repoAdapter.meta}`);\n return;\n }\n\n if (!forceDowngrade) {\n try {\n // @ts-expect-error https://github.com/ioBroker/adapter-core/issues/455\n await this._checkDependencies(ioPack.common.dependencies, ioPack.common.globalDependencies);\n } catch (e) {\n console.error(`Cannot check dependencies: ${e.message}`);\n return;\n }\n }\n\n if (\n !version &&\n (ioPack.common.version === installedVersion ||\n (!forceDowngrade && tools.upToDate(ioPack.common.version, installedVersion)))\n ) {\n console.log(\n `Adapter \"${adapter}\"${\n adapter.length < 15 ? new Array(15 - adapter.length).join(' ') : ''\n } is up to date.`,\n );\n } else {\n // Get the adapter from website\n const targetVersion = version || ioPack.common.version;\n\n const isIgnored = await isVersionIgnored({\n adapterName: adapter,\n version: targetVersion,\n objects: this.objects,\n });\n\n if (isIgnored) {\n console.log(\n `No upgrade of \"${adapter}\" desired, because version \"${targetVersion}\" is configured to be ignored by the user. Run \"${tools.appNameLowerCase} version ${adapter} --recognize\" to allow this upgrade!`,\n );\n return;\n }\n\n try {\n if (!showUpgradeDialog(installedVersion, targetVersion, adapter)) {\n console.log(`No upgrade of \"${adapter}\" desired.`);\n return;\n }\n } catch (e) {\n console.log(`Can not check version information to display upgrade infos: ${e.message}`);\n }\n console.log(`Update ${adapter} from @${installedVersion} to @${targetVersion}`);\n const { packetName, stoppedList } = await this.install.downloadPacket(\n sources,\n `${adapter}@${targetVersion}`,\n );\n await finishUpgrade(packetName, ioPack);\n await this.install.enableInstances(stoppedList, true);\n }\n } else if (forceDowngrade) {\n try {\n if (!showUpgradeDialog(installedVersion, version, adapter)) {\n return console.log(`No upgrade of \"${adapter}\" desired.`);\n }\n } catch (e) {\n console.log(`Can not check version information to display upgrade infos: ${e.message}`);\n }\n console.warn(`Unable to get version for \"${adapter}\". Update anyway.`);\n console.log(`Update ${adapter} from @${installedVersion} to @${version}`);\n // Get the adapter from website\n const { packetName, stoppedList } = await this.install.downloadPacket(sources, `${adapter}@${version}`);\n await finishUpgrade(packetName);\n await this.install.enableInstances(stoppedList, true);\n } else {\n return console.error(`Unable to get version for \"${adapter}\".`);\n }\n }\n\n /**\n * Upgrade the js-controller\n *\n * @param options additional information like if controller running, optional url, version\n */\n async upgradeController(options: UpgradeControllerOptions): Promise<void> {\n const { repoUrl, forceDowngrade, controllerRunning, version } = options;\n let targetVersion = version;\n\n const installed = fs.readJSONSync(`${tools.getControllerDir()}/io-package.json`);\n if (!installed || !installed.common || !installed.common.version) {\n return console.error(\n `Host \"${this.hostname}\"${\n this.hostname.length < 15 ? ''.padStart(15 - this.hostname.length) : ''\n } is not installed.`,\n );\n }\n\n const controllerName = installed.common.name;\n let sources: Record<string, ioBroker.RepositoryJsonAdapterContent> | undefined;\n\n if (targetVersion === undefined) {\n try {\n const result = await getRepository({ repoName: repoUrl, objects: this.objects });\n if (!result) {\n return console.warn(`Cannot get repository under \"${repoUrl}\"`);\n }\n sources = result;\n } catch (e) {\n console.error(e.message);\n return this.processExit(e instanceof IoBrokerError ? e.code : e);\n }\n\n /** Repository entry of the controller */\n const repoController = sources[controllerName];\n targetVersion = version ?? repoController.version;\n }\n\n if (!targetVersion) {\n // no info for controller\n return console.error(`Cannot find this controller \"${controllerName}\" in repository.`);\n }\n\n if (\n !forceDowngrade &&\n (targetVersion === installed.common.version || tools.upToDate(targetVersion, installed.common.version))\n ) {\n console.log(\n `Host \"${this.hostname}\"${\n this.hostname.length < 15 ? new Array(15 - this.hostname.length).join(' ') : ''\n } is up to date.`,\n );\n } else if (controllerRunning) {\n console.warn(`Controller is running. Please stop ioBroker first.`);\n } else {\n console.log(`Update ${controllerName} from @${installed.common.version} to @${targetVersion}`);\n // Get the controller from website\n await this.install.downloadPacket(sources, `${controllerName}@${targetVersion}`, {\n stopDb: true,\n });\n }\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["Debug", "fs", "path", "semver", "adapterDir", "installedVersion", "tty", "version", "rl"]
7
7
  }
@@ -9,11 +9,8 @@
9
9
  import type { Client as StatesRedisClient } from '@iobroker/db-states-redis';
10
10
  import type { Client as ObjectsRedisClient } from '@iobroker/db-objects-redis';
11
11
  import type { InternalLogger } from '@iobroker/js-controller-common-db/tools';
12
- /** Options for the upload command */
13
12
  export interface CLIUploadOptions {
14
- /** The states database client */
15
13
  states: StatesRedisClient;
16
- /** The objects database client */
17
14
  objects: ObjectsRedisClient;
18
15
  }
19
16
  interface File {
@@ -25,9 +22,6 @@ interface Logger extends InternalLogger {
25
22
  }
26
23
  /** Logger without noisy levels */
27
24
  type MinimalLogger = Omit<Logger, 'info' | 'silly' | 'debug'>;
28
- /**
29
- * CLI command to upload adapter files into the objects database
30
- */
31
25
  export declare class Upload {
32
26
  private readonly states;
33
27
  private readonly objects;
@@ -36,42 +30,11 @@ export declare class Upload {
36
30
  private readonly sendToHostFromCliAsync;
37
31
  private callbacks;
38
32
  private lastProgressUpdate;
39
- /**
40
- * @param _options The states and objects database clients
41
- */
42
33
  constructor(_options: CLIUploadOptions);
43
- /**
44
- * Filter the given hosts to those that are currently alive
45
- *
46
- * @param hosts The hosts to check
47
- */
48
34
  checkHostsIfAlive(hosts: string[]): Promise<string[]>;
49
- /**
50
- * Get the list of known hosts
51
- *
52
- * @param onlyAlive Whether to only return hosts that are currently alive
53
- */
54
35
  getHosts(onlyAlive: boolean): Promise<string[]>;
55
- /**
56
- * Check if some adapters must be restarted because of the given adapter's files and restart them
57
- *
58
- * @param adapter The adapter whose dependents should be restarted
59
- */
60
36
  checkRestartOther(adapter: string): Promise<void>;
61
- /**
62
- * Send a message to a host from the CLI
63
- *
64
- * @param host The target host id
65
- * @param command The command to send
66
- * @param message The message payload
67
- * @param callback Called with the host's response
68
- */
69
37
  sendToHostFromCli(host: string, command: string, message: ioBroker.MessagePayload, callback: ioBroker.MessageCallback | null): void;
70
- /**
71
- * Upload the files of all given adapters from every host
72
- *
73
- * @param adapters The adapters to upload
74
- */
75
38
  uploadAdapterFullAsync(adapters: string[]): Promise<void>;
76
39
  /**
77
40
  * Uploads a file
@@ -80,13 +43,7 @@ export declare class Upload {
80
43
  * @param target target path
81
44
  */
82
45
  uploadFile(source: string, target: string): Promise<string>;
83
- /**
84
- * Delete the given files from the objects database
85
- *
86
- * @param files The files to delete
87
- * @param logger Logger used to report errors
88
- */
89
- eraseFiles(files: File[], logger: MinimalLogger | typeof console): Promise<void>;
46
+ eraseFiles(files: any[], logger: MinimalLogger | typeof console): Promise<void>;
90
47
  /**
91
48
  * Collect Files of an adapter specific directory from the ioBroker storage
92
49
  *
@@ -98,22 +55,7 @@ export declare class Upload {
98
55
  filesToDelete: File[];
99
56
  dirs: File[];
100
57
  }>;
101
- /**
102
- * Upload the files of a single adapter into the objects database
103
- *
104
- * @param adapter The adapter whose files are uploaded
105
- * @param isAdmin Whether the admin files should be uploaded
106
- * @param files The files to upload
107
- * @param id The upload state id used to report progress
108
- * @param logger Logger used to report progress
109
- */
110
58
  upload(adapter: string, isAdmin: boolean, files: string[], id: string, logger: MinimalLogger | typeof console): Promise<string>;
111
- /**
112
- * Recursively collect all file paths below the given directory
113
- *
114
- * @param dir The directory to walk
115
- * @param _results Accumulator of results collected so far
116
- */
117
59
  walk(dir: string, _results?: string[]): string[];
118
60
  /**
119
61
  * Upload given adapter
@@ -125,20 +67,7 @@ export declare class Upload {
125
67
  * @param _logger logger instance
126
68
  */
127
69
  uploadAdapter(adapter: string, isAdmin: boolean, forceUpload: boolean, subTree?: string, _logger?: MinimalLogger): Promise<string>;
128
- /**
129
- * Deep-merge additional values into the native section of an object
130
- *
131
- * @param target The target object to extend
132
- * @param additional The additional values to merge in
133
- */
134
70
  extendNative(target: Record<string, any>, additional: Record<string, unknown>): Record<string, any>;
135
- /**
136
- * Merge additional values into the common section of an instance object, preserving some attributes
137
- *
138
- * @param target The target common object to extend
139
- * @param additional The additional values to merge in
140
- * @param instance The instance id the common belongs to
141
- */
142
71
  extendCommon(target: Record<string, any>, additional: Record<string, any>, instance: string): ioBroker.InstanceCommon;
143
72
  /**
144
73
  * Extends the `system.instance.adapter.<instanceNumber>` objects with the native properties from adapters io-package.json
@@ -5,7 +5,6 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
9
8
  var __export = (target, all) => {
10
9
  for (var name in all)
11
10
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -41,9 +40,6 @@ var import_mime_types = __toESM(require("mime-types"), 1);
41
40
  var import_node_path = require("node:path");
42
41
  const hostname = import_js_controller_common.tools.getHostName();
43
42
  class Upload {
44
- static {
45
- __name(this, "Upload");
46
- }
47
43
  states;
48
44
  objects;
49
45
  regApp = new RegExp(`/${import_js_controller_common.tools.appName.replace(/\./g, "\\.")}\\.`, "i");
@@ -51,9 +47,6 @@ class Upload {
51
47
  sendToHostFromCliAsync;
52
48
  callbacks = {};
53
49
  lastProgressUpdate = Date.now();
54
- /**
55
- * @param _options The states and objects database clients
56
- */
57
50
  constructor(_options) {
58
51
  const options = _options || {};
59
52
  if (!options.states) {
@@ -66,11 +59,6 @@ class Upload {
66
59
  this.objects = options.objects;
67
60
  this.sendToHostFromCliAsync = import_js_controller_common.tools.promisifyNoError(this.sendToHostFromCli);
68
61
  }
69
- /**
70
- * Filter the given hosts to those that are currently alive
71
- *
72
- * @param hosts The hosts to check
73
- */
74
62
  async checkHostsIfAlive(hosts) {
75
63
  const result = [];
76
64
  if (hosts) {
@@ -83,11 +71,6 @@ class Upload {
83
71
  }
84
72
  return result;
85
73
  }
86
- /**
87
- * Get the list of known hosts
88
- *
89
- * @param onlyAlive Whether to only return hosts that are currently alive
90
- */
91
74
  async getHosts(onlyAlive) {
92
75
  const hosts = [];
93
76
  try {
@@ -111,11 +94,7 @@ class Upload {
111
94
  }
112
95
  return hosts;
113
96
  }
114
- /**
115
- * Check if some adapters must be restarted because of the given adapter's files and restart them
116
- *
117
- * @param adapter The adapter whose dependents should be restarted
118
- */
97
+ // Check if some adapters must be restarted and restart them
119
98
  async checkRestartOther(adapter) {
120
99
  const adapterDir = import_js_controller_common.tools.getAdapterDir(adapter);
121
100
  if (!adapterDir) {
@@ -158,14 +137,6 @@ class Upload {
158
137
  console.error(`Cannot parse ${adapterDir}/io-package.json: ${e.message}`);
159
138
  }
160
139
  }
161
- /**
162
- * Send a message to a host from the CLI
163
- *
164
- * @param host The target host id
165
- * @param command The command to send
166
- * @param message The message payload
167
- * @param callback Called with the host's response
168
- */
169
140
  sendToHostFromCli(host, command, message, callback) {
170
141
  const time = Date.now();
171
142
  const from = `system.host.${hostname}_cli_${time}`;
@@ -174,7 +145,7 @@ class Upload {
174
145
  callback();
175
146
  }
176
147
  callback = null;
177
- this.states.unsubscribeMessage(from).catch((e) => console.error(`Cannot unsubscribe: ${e.message}`));
148
+ this.states.unsubscribeMessage(from);
178
149
  this.states.onChange = null;
179
150
  }, 6e4);
180
151
  this.states.onChange = (id, msg) => {
@@ -185,7 +156,7 @@ class Upload {
185
156
  callback(msg && msg.message);
186
157
  callback = null;
187
158
  clearTimeout(timeout);
188
- this.states.unsubscribeMessage(from).catch((e) => console.error(`Cannot unsubscribe: ${e.message}`));
159
+ this.states.unsubscribeMessage(from);
189
160
  this.states.onChange = null;
190
161
  }
191
162
  }
@@ -206,14 +177,9 @@ class Upload {
206
177
  this.callbackId = 1;
207
178
  }
208
179
  this.callbacks[`_${obj.callback.id}`] = { cb: callback };
209
- this.states.pushMessage(host, obj).catch((e) => console.error(`Cannot push message: ${e.message}`));
180
+ this.states.pushMessage(host, obj);
210
181
  });
211
182
  }
212
- /**
213
- * Upload the files of all given adapters from every host
214
- *
215
- * @param adapters The adapters to upload
216
- */
217
183
  async uploadAdapterFullAsync(adapters) {
218
184
  if (adapters?.length) {
219
185
  const liveHosts = await this.getHosts(true);
@@ -273,7 +239,7 @@ class Upload {
273
239
  try {
274
240
  const result = await (0, import_axios.default)(source, {
275
241
  responseType: "arraybuffer",
276
- validateStatus: /* @__PURE__ */ __name((status) => status === 200, "validateStatus")
242
+ validateStatus: (status) => status === 200
277
243
  });
278
244
  if (result?.data) {
279
245
  await this.objects.writeFileAsync(adapter, target, result.data);
@@ -303,14 +269,8 @@ class Upload {
303
269
  }
304
270
  return `${adapter}/${target}`;
305
271
  }
306
- /**
307
- * Delete the given files from the objects database
308
- *
309
- * @param files The files to delete
310
- * @param logger Logger used to report errors
311
- */
312
272
  async eraseFiles(files, logger) {
313
- if (files?.length) {
273
+ if (files && files.length) {
314
274
  for (const file of files) {
315
275
  try {
316
276
  await this.objects.unlinkAsync(file.adapter, file.path);
@@ -362,15 +322,6 @@ class Upload {
362
322
  }
363
323
  return { filesToDelete: _files, dirs: _dirs };
364
324
  }
365
- /**
366
- * Upload the files of a single adapter into the objects database
367
- *
368
- * @param adapter The adapter whose files are uploaded
369
- * @param isAdmin Whether the admin files should be uploaded
370
- * @param files The files to upload
371
- * @param id The upload state id used to report progress
372
- * @param logger Logger used to report progress
373
- */
374
325
  async upload(adapter, isAdmin, files, id, logger) {
375
326
  const uploadID = `system.adapter.${adapter}.upload`;
376
327
  await this.states.setState(uploadID, { val: 0, ack: true });
@@ -419,12 +370,6 @@ class Upload {
419
370
  return adapter;
420
371
  }
421
372
  // Read synchronous all files recursively from local directory
422
- /**
423
- * Recursively collect all file paths below the given directory
424
- *
425
- * @param dir The directory to walk
426
- * @param _results Accumulator of results collected so far
427
- */
428
373
  walk(dir, _results) {
429
374
  const results = _results || [];
430
375
  try {
@@ -548,12 +493,6 @@ class Upload {
548
493
  }
549
494
  return adapter;
550
495
  }
551
- /**
552
- * Deep-merge additional values into the native section of an object
553
- *
554
- * @param target The target object to extend
555
- * @param additional The additional values to merge in
556
- */
557
496
  extendNative(target, additional) {
558
497
  if (import_js_controller_common.tools.isObject(additional)) {
559
498
  for (const [attr, attrData] of Object.entries(additional)) {
@@ -573,13 +512,6 @@ class Upload {
573
512
  }
574
513
  return target;
575
514
  }
576
- /**
577
- * Merge additional values into the common section of an instance object, preserving some attributes
578
- *
579
- * @param target The target common object to extend
580
- * @param additional The additional values to merge in
581
- * @param instance The instance id the common belongs to
582
- */
583
515
  extendCommon(target, additional, instance) {
584
516
  if (import_js_controller_common.tools.isObject(additional)) {
585
517
  const preserveAttributes = [