@iobroker/js-controller-cli 7.2.3 → 8.0.0-alpha.2-20260923-99da17fcc
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/index.js +3 -3
- package/build/cjs/lib/_Types.d.ts +8 -1
- package/build/cjs/lib/cli/cliCert.d.ts +7 -4
- package/build/cjs/lib/cli/cliCert.js +10 -6
- package/build/cjs/lib/cli/cliCert.js.map +2 -2
- package/build/cjs/lib/cli/cliCommand.d.ts +63 -15
- package/build/cjs/lib/cli/cliCommand.js +8 -1
- package/build/cjs/lib/cli/cliCommand.js.map +2 -2
- package/build/cjs/lib/cli/cliCompact.d.ts +5 -2
- package/build/cjs/lib/cli/cliCompact.js +9 -2
- package/build/cjs/lib/cli/cliCompact.js.map +2 -2
- package/build/cjs/lib/cli/cliDebug.d.ts +5 -2
- package/build/cjs/lib/cli/cliDebug.js +8 -1
- package/build/cjs/lib/cli/cliDebug.js.map +2 -2
- package/build/cjs/lib/cli/cliHost.d.ts +13 -10
- package/build/cjs/lib/cli/cliHost.js +13 -5
- package/build/cjs/lib/cli/cliHost.js.map +2 -2
- package/build/cjs/lib/cli/cliLogs.d.ts +9 -3
- package/build/cjs/lib/cli/cliLogs.js +12 -1
- package/build/cjs/lib/cli/cliLogs.js.map +2 -2
- package/build/cjs/lib/cli/cliMessage.d.ts +2 -1
- package/build/cjs/lib/cli/cliMessage.js +5 -0
- package/build/cjs/lib/cli/cliMessage.js.map +2 -2
- package/build/cjs/lib/cli/cliObjects.d.ts +21 -18
- package/build/cjs/lib/cli/cliObjects.js +51 -33
- package/build/cjs/lib/cli/cliObjects.js.map +2 -2
- package/build/cjs/lib/cli/cliPlugin.d.ts +3 -3
- package/build/cjs/lib/cli/cliPlugin.js +6 -0
- package/build/cjs/lib/cli/cliPlugin.js.map +2 -2
- package/build/cjs/lib/cli/cliProcess.d.ts +17 -7
- package/build/cjs/lib/cli/cliProcess.js +77 -24
- package/build/cjs/lib/cli/cliProcess.js.map +3 -3
- package/build/cjs/lib/cli/cliStates.d.ts +7 -4
- package/build/cjs/lib/cli/cliStates.js +14 -6
- package/build/cjs/lib/cli/cliStates.js.map +2 -2
- package/build/cjs/lib/cli/cliTools.js +11 -0
- package/build/cjs/lib/cli/cliTools.js.map +1 -1
- package/build/cjs/lib/cli/messages.js +47 -46
- package/build/cjs/lib/cli/messages.js.map +1 -1
- package/build/cjs/lib/progressBar.d.ts +59 -0
- package/build/cjs/lib/progressBar.js +115 -0
- package/build/cjs/lib/progressBar.js.map +7 -0
- package/build/cjs/lib/setup/customError.d.ts +4 -0
- package/build/cjs/lib/setup/customError.js +7 -0
- package/build/cjs/lib/setup/customError.js.map +2 -2
- package/build/cjs/lib/setup/dbConnection.js +69 -64
- package/build/cjs/lib/setup/dbConnection.js.map +3 -3
- package/build/cjs/lib/setup/formatters.d.ts +4 -4
- package/build/cjs/lib/setup/formatters.js +5 -0
- package/build/cjs/lib/setup/formatters.js.map +2 -2
- package/build/cjs/lib/setup/multihostClient.js +6 -2
- package/build/cjs/lib/setup/multihostClient.js.map +1 -1
- package/build/cjs/lib/setup/pluginInfos.d.ts +5 -0
- package/build/cjs/lib/setup/pluginInfos.js +2 -0
- package/build/cjs/lib/setup/pluginInfos.js.map +2 -2
- package/build/cjs/lib/setup/setupBackup.d.ts +53 -0
- package/build/cjs/lib/setup/setupBackup.js +125 -14
- package/build/cjs/lib/setup/setupBackup.js.map +3 -3
- package/build/cjs/lib/setup/setupInstall.d.ts +66 -15
- package/build/cjs/lib/setup/setupInstall.js +282 -28
- package/build/cjs/lib/setup/setupInstall.js.map +2 -2
- package/build/cjs/lib/setup/setupLicense.d.ts +13 -0
- package/build/cjs/lib/setup/setupLicense.js +33 -2
- package/build/cjs/lib/setup/setupLicense.js.map +2 -2
- package/build/cjs/lib/setup/setupList.d.ts +55 -1
- package/build/cjs/lib/setup/setupList.js +78 -24
- package/build/cjs/lib/setup/setupList.js.map +3 -3
- package/build/cjs/lib/setup/setupMultihost.d.ts +7 -0
- package/build/cjs/lib/setup/setupMultihost.js +78 -11
- package/build/cjs/lib/setup/setupMultihost.js.map +3 -3
- package/build/cjs/lib/setup/setupPacketManager.d.ts +10 -0
- package/build/cjs/lib/setup/setupPacketManager.js +16 -6
- package/build/cjs/lib/setup/setupPacketManager.js.map +2 -2
- package/build/cjs/lib/setup/setupRepo.d.ts +19 -0
- package/build/cjs/lib/setup/setupRepo.js +141 -13
- package/build/cjs/lib/setup/setupRepo.js.map +2 -2
- package/build/cjs/lib/setup/setupSetup.d.ts +34 -0
- package/build/cjs/lib/setup/setupSetup.js +209 -35
- package/build/cjs/lib/setup/setupSetup.js.map +3 -3
- package/build/cjs/lib/setup/setupUpgrade.d.ts +13 -2
- package/build/cjs/lib/setup/setupUpgrade.js +72 -12
- package/build/cjs/lib/setup/setupUpgrade.js.map +2 -2
- package/build/cjs/lib/setup/setupUpload.d.ts +77 -1
- package/build/cjs/lib/setup/setupUpload.js +152 -9
- package/build/cjs/lib/setup/setupUpload.js.map +2 -2
- package/build/cjs/lib/setup/setupUsers.d.ts +44 -14
- package/build/cjs/lib/setup/setupUsers.js +330 -17
- package/build/cjs/lib/setup/setupUsers.js.map +2 -2
- package/build/cjs/lib/setup/setupVendor.d.ts +14 -1
- package/build/cjs/lib/setup/setupVendor.js +40 -8
- package/build/cjs/lib/setup/setupVendor.js.map +2 -2
- package/build/cjs/lib/setup/setupVisDebug.d.ts +16 -2
- package/build/cjs/lib/setup/setupVisDebug.js +41 -17
- package/build/cjs/lib/setup/setupVisDebug.js.map +3 -3
- package/build/cjs/lib/setup/utils.d.ts +1 -1
- package/build/cjs/lib/setup/utils.js +13 -9
- package/build/cjs/lib/setup/utils.js.map +3 -3
- package/build/cjs/lib/setup.d.ts +1 -1
- package/build/cjs/lib/setup.js +858 -1758
- package/build/cjs/lib/setup.js.map +3 -3
- package/build/esm/lib/_Types.d.ts +8 -1
- package/build/esm/lib/_Types.d.ts.map +1 -1
- package/build/esm/lib/cli/cliCert.d.ts +7 -4
- package/build/esm/lib/cli/cliCert.d.ts.map +1 -1
- package/build/esm/lib/cli/cliCert.js +6 -6
- package/build/esm/lib/cli/cliCert.js.map +1 -1
- package/build/esm/lib/cli/cliCommand.d.ts +63 -15
- package/build/esm/lib/cli/cliCommand.d.ts.map +1 -1
- package/build/esm/lib/cli/cliCommand.js +4 -1
- package/build/esm/lib/cli/cliCommand.js.map +1 -1
- package/build/esm/lib/cli/cliCompact.d.ts +5 -2
- package/build/esm/lib/cli/cliCompact.d.ts.map +1 -1
- package/build/esm/lib/cli/cliCompact.js +5 -2
- package/build/esm/lib/cli/cliCompact.js.map +1 -1
- package/build/esm/lib/cli/cliDebug.d.ts +5 -2
- package/build/esm/lib/cli/cliDebug.d.ts.map +1 -1
- package/build/esm/lib/cli/cliDebug.js +4 -1
- package/build/esm/lib/cli/cliDebug.js.map +1 -1
- package/build/esm/lib/cli/cliHost.d.ts +13 -10
- package/build/esm/lib/cli/cliHost.d.ts.map +1 -1
- package/build/esm/lib/cli/cliHost.js +8 -5
- package/build/esm/lib/cli/cliHost.js.map +1 -1
- package/build/esm/lib/cli/cliLogs.d.ts +9 -3
- package/build/esm/lib/cli/cliLogs.d.ts.map +1 -1
- package/build/esm/lib/cli/cliLogs.js +8 -1
- package/build/esm/lib/cli/cliLogs.js.map +1 -1
- package/build/esm/lib/cli/cliMessage.d.ts +2 -1
- package/build/esm/lib/cli/cliMessage.d.ts.map +1 -1
- package/build/esm/lib/cli/cliMessage.js +1 -0
- package/build/esm/lib/cli/cliMessage.js.map +1 -1
- package/build/esm/lib/cli/cliObjects.d.ts +21 -18
- package/build/esm/lib/cli/cliObjects.d.ts.map +1 -1
- package/build/esm/lib/cli/cliObjects.js +44 -38
- package/build/esm/lib/cli/cliObjects.js.map +1 -1
- package/build/esm/lib/cli/cliPlugin.d.ts +3 -3
- package/build/esm/lib/cli/cliPlugin.d.ts.map +1 -1
- package/build/esm/lib/cli/cliPlugin.js +1 -1
- package/build/esm/lib/cli/cliPlugin.js.map +1 -1
- package/build/esm/lib/cli/cliProcess.d.ts +17 -7
- package/build/esm/lib/cli/cliProcess.d.ts.map +1 -1
- package/build/esm/lib/cli/cliProcess.js +73 -12
- package/build/esm/lib/cli/cliProcess.js.map +1 -1
- package/build/esm/lib/cli/cliStates.d.ts +7 -4
- package/build/esm/lib/cli/cliStates.d.ts.map +1 -1
- package/build/esm/lib/cli/cliStates.js +6 -2
- package/build/esm/lib/cli/cliStates.js.map +1 -1
- package/build/esm/lib/progressBar.d.ts +59 -0
- package/build/esm/lib/progressBar.d.ts.map +1 -0
- package/build/esm/lib/progressBar.js +104 -0
- package/build/esm/lib/progressBar.js.map +1 -0
- package/build/esm/lib/setup/customError.d.ts +4 -0
- package/build/esm/lib/setup/customError.d.ts.map +1 -1
- package/build/esm/lib/setup/customError.js +3 -0
- package/build/esm/lib/setup/customError.js.map +1 -1
- package/build/esm/lib/setup/dbConnection.d.ts.map +1 -1
- package/build/esm/lib/setup/dbConnection.js +10 -13
- package/build/esm/lib/setup/dbConnection.js.map +1 -1
- package/build/esm/lib/setup/formatters.d.ts +4 -4
- package/build/esm/lib/setup/formatters.js +4 -4
- package/build/esm/lib/setup/pluginInfos.d.ts +5 -0
- package/build/esm/lib/setup/pluginInfos.d.ts.map +1 -1
- package/build/esm/lib/setup/pluginInfos.js +5 -0
- package/build/esm/lib/setup/pluginInfos.js.map +1 -1
- package/build/esm/lib/setup/setupBackup.d.ts +53 -0
- package/build/esm/lib/setup/setupBackup.d.ts.map +1 -1
- package/build/esm/lib/setup/setupBackup.js +132 -13
- package/build/esm/lib/setup/setupBackup.js.map +1 -1
- package/build/esm/lib/setup/setupInstall.d.ts +66 -15
- package/build/esm/lib/setup/setupInstall.d.ts.map +1 -1
- package/build/esm/lib/setup/setupInstall.js +309 -23
- package/build/esm/lib/setup/setupInstall.js.map +1 -1
- package/build/esm/lib/setup/setupLicense.d.ts +13 -0
- package/build/esm/lib/setup/setupLicense.d.ts.map +1 -1
- package/build/esm/lib/setup/setupLicense.js +31 -1
- package/build/esm/lib/setup/setupLicense.js.map +1 -1
- package/build/esm/lib/setup/setupList.d.ts +55 -1
- package/build/esm/lib/setup/setupList.d.ts.map +1 -1
- package/build/esm/lib/setup/setupList.js +61 -8
- package/build/esm/lib/setup/setupList.js.map +1 -1
- package/build/esm/lib/setup/setupMultihost.d.ts +7 -0
- package/build/esm/lib/setup/setupMultihost.d.ts.map +1 -1
- package/build/esm/lib/setup/setupMultihost.js +85 -6
- package/build/esm/lib/setup/setupMultihost.js.map +1 -1
- package/build/esm/lib/setup/setupPacketManager.d.ts +10 -0
- package/build/esm/lib/setup/setupPacketManager.d.ts.map +1 -1
- package/build/esm/lib/setup/setupPacketManager.js +9 -0
- package/build/esm/lib/setup/setupPacketManager.js.map +1 -1
- package/build/esm/lib/setup/setupRepo.d.ts +19 -0
- package/build/esm/lib/setup/setupRepo.d.ts.map +1 -1
- package/build/esm/lib/setup/setupRepo.js +164 -14
- package/build/esm/lib/setup/setupRepo.js.map +1 -1
- package/build/esm/lib/setup/setupSetup.d.ts +34 -0
- package/build/esm/lib/setup/setupSetup.d.ts.map +1 -1
- package/build/esm/lib/setup/setupSetup.js +218 -21
- package/build/esm/lib/setup/setupSetup.js.map +1 -1
- package/build/esm/lib/setup/setupUpgrade.d.ts +13 -2
- package/build/esm/lib/setup/setupUpgrade.d.ts.map +1 -1
- package/build/esm/lib/setup/setupUpgrade.js +70 -6
- package/build/esm/lib/setup/setupUpgrade.js.map +1 -1
- package/build/esm/lib/setup/setupUpload.d.ts +77 -1
- package/build/esm/lib/setup/setupUpload.d.ts.map +1 -1
- package/build/esm/lib/setup/setupUpload.js +164 -7
- package/build/esm/lib/setup/setupUpload.js.map +1 -1
- package/build/esm/lib/setup/setupUsers.d.ts +44 -14
- package/build/esm/lib/setup/setupUsers.d.ts.map +1 -1
- package/build/esm/lib/setup/setupUsers.js +346 -14
- package/build/esm/lib/setup/setupUsers.js.map +1 -1
- package/build/esm/lib/setup/setupVendor.d.ts +14 -1
- package/build/esm/lib/setup/setupVendor.d.ts.map +1 -1
- package/build/esm/lib/setup/setupVendor.js +33 -2
- package/build/esm/lib/setup/setupVendor.js.map +1 -1
- package/build/esm/lib/setup/setupVisDebug.d.ts +16 -2
- package/build/esm/lib/setup/setupVisDebug.d.ts.map +1 -1
- package/build/esm/lib/setup/setupVisDebug.js +39 -14
- package/build/esm/lib/setup/setupVisDebug.js.map +1 -1
- package/build/esm/lib/setup/utils.d.ts +1 -1
- package/build/esm/lib/setup/utils.d.ts.map +1 -1
- package/build/esm/lib/setup/utils.js +2 -4
- package/build/esm/lib/setup/utils.js.map +1 -1
- package/build/esm/lib/setup.d.ts +1 -1
- package/build/esm/lib/setup.d.ts.map +1 -1
- package/build/esm/lib/setup.js +959 -1910
- package/build/esm/lib/setup.js.map +1 -1
- package/build/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +14 -14
|
@@ -5,6 +5,7 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
6
|
var __getProtoOf = Object.getPrototypeOf;
|
|
7
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
8
9
|
var __export = (target, all) => {
|
|
9
10
|
for (var name in all)
|
|
10
11
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -36,13 +37,19 @@ var CLI = __toESM(require("./messages.js"), 1);
|
|
|
36
37
|
var import_cliTools = require("./cliTools.js");
|
|
37
38
|
var import_js_controller_common = require("@iobroker/js-controller-common");
|
|
38
39
|
class CLIObjects extends import_cliCommand.CLICommand {
|
|
40
|
+
static {
|
|
41
|
+
__name(this, "CLIObjects");
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* @param options The command options including context and parameters
|
|
45
|
+
*/
|
|
39
46
|
constructor(options) {
|
|
40
47
|
super(options);
|
|
41
48
|
}
|
|
42
49
|
/**
|
|
43
50
|
* Executes a command
|
|
44
51
|
*
|
|
45
|
-
* @param args
|
|
52
|
+
* @param args The command arguments (the first is the sub-command)
|
|
46
53
|
*/
|
|
47
54
|
execute(args) {
|
|
48
55
|
const { callback, showHelp } = this.options;
|
|
@@ -162,7 +169,7 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
162
169
|
/**
|
|
163
170
|
* Changes access rights for all objects matching the pattern
|
|
164
171
|
*
|
|
165
|
-
* @param args
|
|
172
|
+
* @param args The command arguments (object mode, state mode and pattern)
|
|
166
173
|
*/
|
|
167
174
|
chmod(args) {
|
|
168
175
|
const { callback, dbConnect } = this.options;
|
|
@@ -184,15 +191,15 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
184
191
|
}
|
|
185
192
|
dbConnect((params) => {
|
|
186
193
|
const { objects, states } = params;
|
|
187
|
-
objects.chmodObject(pattern, { user: "system.user.admin", object: modeObject, state: modeState }, (err, processed) => {
|
|
188
|
-
this.printObjectList(objects, states, err?.message, processed);
|
|
194
|
+
return objects.chmodObject(pattern, { user: "system.user.admin", object: modeObject, state: modeState }, (err, processed) => {
|
|
195
|
+
return this.printObjectList(objects, states, err?.message, processed);
|
|
189
196
|
});
|
|
190
197
|
});
|
|
191
198
|
}
|
|
192
199
|
/**
|
|
193
200
|
* Changes owner for all objects matching the pattern
|
|
194
201
|
*
|
|
195
|
-
* @param args
|
|
202
|
+
* @param args The command arguments (user, group and pattern)
|
|
196
203
|
*/
|
|
197
204
|
chown(args) {
|
|
198
205
|
const { callback, dbConnect } = this.options;
|
|
@@ -216,26 +223,30 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
216
223
|
}
|
|
217
224
|
dbConnect((params) => {
|
|
218
225
|
const { objects, states } = params;
|
|
219
|
-
objects.chownObject(pattern, {
|
|
220
|
-
|
|
226
|
+
return objects.chownObject(pattern, {
|
|
227
|
+
user: "system.user.admin",
|
|
228
|
+
owner: user,
|
|
229
|
+
ownerGroup: group
|
|
230
|
+
}, (err, processed) => {
|
|
231
|
+
return this.printObjectList(objects, states, err?.message, processed);
|
|
221
232
|
});
|
|
222
233
|
});
|
|
223
234
|
}
|
|
224
235
|
/**
|
|
225
236
|
* Lists all objects matching a pattern and their access rights
|
|
226
237
|
*
|
|
227
|
-
* @param args
|
|
238
|
+
* @param args The command arguments (the pattern to match)
|
|
228
239
|
*/
|
|
229
240
|
list(args) {
|
|
230
241
|
const { callback, dbConnect } = this.options;
|
|
231
|
-
let pattern
|
|
232
|
-
if (typeof
|
|
233
|
-
pattern = { startkey:
|
|
242
|
+
let pattern;
|
|
243
|
+
if (typeof args[1] === "string") {
|
|
244
|
+
pattern = { startkey: args[1].replace("*", ""), endkey: args[1].replace("*", "\u9999") };
|
|
234
245
|
}
|
|
235
246
|
dbConnect((params) => {
|
|
236
247
|
const { objects, states } = params;
|
|
237
248
|
objects.getObjectList(pattern, { user: "system.user.admin", sorted: true }, (err, processed) => {
|
|
238
|
-
this.printObjectList(objects, states, err?.message, processed && processed.rows && processed.rows.map((r) => r.value));
|
|
249
|
+
this.printObjectList(objects, states, err?.message, processed && processed.rows && processed.rows.map((r) => r.value)).catch((e) => console.error(`Cannot print object list: ${e.message}`));
|
|
239
250
|
return void callback(import_js_controller_common.EXIT_CODES.NO_ERROR);
|
|
240
251
|
});
|
|
241
252
|
});
|
|
@@ -243,7 +254,7 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
243
254
|
/**
|
|
244
255
|
* Retrieves an object or its property from the DB and prints it
|
|
245
256
|
*
|
|
246
|
-
* @param args
|
|
257
|
+
* @param args The command arguments (the object id and optional property path)
|
|
247
258
|
*/
|
|
248
259
|
get(args) {
|
|
249
260
|
const { callback, pretty, dbConnect } = this.options;
|
|
@@ -275,7 +286,7 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
275
286
|
/**
|
|
276
287
|
* Updates an object or its property with the given value
|
|
277
288
|
*
|
|
278
|
-
* @param args
|
|
289
|
+
* @param args The command arguments (the object id and the value to set)
|
|
279
290
|
*/
|
|
280
291
|
set(args) {
|
|
281
292
|
const { callback, dbConnect } = this.options;
|
|
@@ -293,7 +304,7 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
293
304
|
const { propPath, value } = parsedArg;
|
|
294
305
|
dbConnect((params) => {
|
|
295
306
|
const { objects } = params;
|
|
296
|
-
const doSetObject = (obj) => {
|
|
307
|
+
const doSetObject = /* @__PURE__ */ __name((obj) => {
|
|
297
308
|
objects.setObject(id, obj, (err) => {
|
|
298
309
|
if (err) {
|
|
299
310
|
CLI.error.cannotUpdateObject(id, err.message);
|
|
@@ -302,7 +313,7 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
302
313
|
CLI.success.objectUpdated(id);
|
|
303
314
|
return void callback(import_js_controller_common.EXIT_CODES.NO_ERROR);
|
|
304
315
|
});
|
|
305
|
-
};
|
|
316
|
+
}, "doSetObject");
|
|
306
317
|
if (!propPath) {
|
|
307
318
|
doSetObject(value);
|
|
308
319
|
} else {
|
|
@@ -346,7 +357,7 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
346
357
|
}
|
|
347
358
|
} else if (propPath === "native" && import_js_controller_common.tools.isObject(value)) {
|
|
348
359
|
let config;
|
|
349
|
-
for (const prop
|
|
360
|
+
for (const prop of Object.keys(value)) {
|
|
350
361
|
if (typeof res.native[prop] === "string" && "encryptedNative" in res && res.encryptedNative?.includes(prop)) {
|
|
351
362
|
try {
|
|
352
363
|
config = config || await objects.getObjectAsync("system.config");
|
|
@@ -361,7 +372,7 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
361
372
|
/**
|
|
362
373
|
* Extends an object with the given value
|
|
363
374
|
*
|
|
364
|
-
* @param args
|
|
375
|
+
* @param args The command arguments (the object id and the value to extend with)
|
|
365
376
|
*/
|
|
366
377
|
extend(args) {
|
|
367
378
|
const { callback, dbConnect } = this.options;
|
|
@@ -377,20 +388,20 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
377
388
|
return void callback(3);
|
|
378
389
|
}
|
|
379
390
|
const { value } = parsedArg;
|
|
380
|
-
dbConnect((params) => {
|
|
391
|
+
dbConnect(async (params) => {
|
|
381
392
|
const { objects } = params;
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
CLI.error.cannotUpdateObject(id, err.message);
|
|
385
|
-
return void callback(1);
|
|
386
|
-
}
|
|
393
|
+
try {
|
|
394
|
+
await objects.extendObject(id, value);
|
|
387
395
|
CLI.success.objectUpdated(id);
|
|
388
396
|
return void callback(import_js_controller_common.EXIT_CODES.NO_ERROR);
|
|
389
|
-
})
|
|
397
|
+
} catch (err) {
|
|
398
|
+
CLI.error.cannotUpdateObject(id, err.message);
|
|
399
|
+
return void callback(1);
|
|
400
|
+
}
|
|
390
401
|
});
|
|
391
402
|
}
|
|
392
403
|
/**
|
|
393
|
-
* Collects all
|
|
404
|
+
* Collects all objects for specific path
|
|
394
405
|
*
|
|
395
406
|
* @param objects class
|
|
396
407
|
* @param params parameters for getObjectView
|
|
@@ -429,7 +440,7 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
429
440
|
*
|
|
430
441
|
* @param objects class
|
|
431
442
|
* @param ids IDs
|
|
432
|
-
* @param callback
|
|
443
|
+
* @param callback Called with the exit code once all objects have been deleted
|
|
433
444
|
*/
|
|
434
445
|
async _deleteObjects(objects, ids, callback) {
|
|
435
446
|
if (!ids || !ids.length) {
|
|
@@ -454,7 +465,7 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
454
465
|
/**
|
|
455
466
|
* Deletes an object
|
|
456
467
|
*
|
|
457
|
-
* @param args
|
|
468
|
+
* @param args The command arguments (the object id to delete)
|
|
458
469
|
*/
|
|
459
470
|
delete(args) {
|
|
460
471
|
const { callback, dbConnect } = this.options;
|
|
@@ -484,14 +495,13 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
484
495
|
rl.question(`${result.length} object(s) will be deleted. Are you sure? [y/N]: `, (answer) => {
|
|
485
496
|
rl.close();
|
|
486
497
|
if (answer === "y" || answer === "yes" || answer === "j" || answer === "ja" || answer === "\u0434\u0430" || answer === "\u0434") {
|
|
487
|
-
this._deleteObjects(objects, ids, callback);
|
|
488
|
-
} else {
|
|
489
|
-
console.log("Aborted.");
|
|
490
|
-
return void callback(3);
|
|
498
|
+
return this._deleteObjects(objects, ids, callback);
|
|
491
499
|
}
|
|
500
|
+
console.log("Aborted.");
|
|
501
|
+
return void callback(3);
|
|
492
502
|
});
|
|
493
503
|
} else {
|
|
494
|
-
this._deleteObjects(objects, ids, callback);
|
|
504
|
+
return this._deleteObjects(objects, ids, callback);
|
|
495
505
|
}
|
|
496
506
|
} else {
|
|
497
507
|
objects.delObject(id, async (err) => {
|
|
@@ -542,12 +552,14 @@ class CLIObjects extends import_cliCommand.CLICommand {
|
|
|
542
552
|
function reverseString(str) {
|
|
543
553
|
return Array.from(str).reverse().join("");
|
|
544
554
|
}
|
|
555
|
+
__name(reverseString, "reverseString");
|
|
545
556
|
function normalizePropertyPath(path) {
|
|
546
557
|
const arrayIndexRegex = /(]\d+\[)(?!\.)/g;
|
|
547
558
|
let ret = reverseString(path);
|
|
548
559
|
ret = ret.replace(arrayIndexRegex, "$1.");
|
|
549
560
|
return reverseString(ret);
|
|
550
561
|
}
|
|
562
|
+
__name(normalizePropertyPath, "normalizePropertyPath");
|
|
551
563
|
function deepSelectProperty(object, path) {
|
|
552
564
|
function _deepSelectProperty(obj, pathArr) {
|
|
553
565
|
if (!pathArr.length) {
|
|
@@ -559,9 +571,11 @@ function deepSelectProperty(object, path) {
|
|
|
559
571
|
}
|
|
560
572
|
return _deepSelectProperty(obj[propName], pathArr);
|
|
561
573
|
}
|
|
574
|
+
__name(_deepSelectProperty, "_deepSelectProperty");
|
|
562
575
|
path = normalizePropertyPath(path);
|
|
563
576
|
return _deepSelectProperty(object, path.split("."));
|
|
564
577
|
}
|
|
578
|
+
__name(deepSelectProperty, "deepSelectProperty");
|
|
565
579
|
function deepSetProperty(object, path, value) {
|
|
566
580
|
function _deepSetProperty(obj, pathArr) {
|
|
567
581
|
if (pathArr.length === 1) {
|
|
@@ -574,9 +588,11 @@ function deepSetProperty(object, path, value) {
|
|
|
574
588
|
}
|
|
575
589
|
_deepSetProperty(obj[propName], pathArr);
|
|
576
590
|
}
|
|
591
|
+
__name(_deepSetProperty, "_deepSetProperty");
|
|
577
592
|
path = normalizePropertyPath(path);
|
|
578
593
|
_deepSetProperty(object, path.split("."));
|
|
579
594
|
}
|
|
595
|
+
__name(deepSetProperty, "deepSetProperty");
|
|
580
596
|
function parseCLIValue(arg) {
|
|
581
597
|
try {
|
|
582
598
|
return JSON.parse(arg);
|
|
@@ -584,6 +600,7 @@ function parseCLIValue(arg) {
|
|
|
584
600
|
return arg;
|
|
585
601
|
}
|
|
586
602
|
}
|
|
603
|
+
__name(parseCLIValue, "parseCLIValue");
|
|
587
604
|
function parsePropPathAndAssignment(arg) {
|
|
588
605
|
const equalsIndex = arg.indexOf("=");
|
|
589
606
|
if (equalsIndex > -1) {
|
|
@@ -602,6 +619,7 @@ function parsePropPathAndAssignment(arg) {
|
|
|
602
619
|
return void 0;
|
|
603
620
|
}
|
|
604
621
|
}
|
|
622
|
+
__name(parsePropPathAndAssignment, "parsePropPathAndAssignment");
|
|
605
623
|
// Annotate the CommonJS export names for ESM import in node:
|
|
606
624
|
0 && (module.exports = {
|
|
607
625
|
CLIObjects
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/cli/cliObjects.ts"],
|
|
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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",
|
|
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 /**\n * @param options The command options including context and parameters\n */\n constructor(options: CLICommandOptions) {\n super(options);\n }\n\n /**\n * Executes a command\n *\n * @param args The command arguments (the first is the sub-command)\n */\n execute(args: string[]): void {\n const { 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 The command arguments (object mode, state mode and pattern)\n */\n chmod(args: (string | number | undefined)[]): 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 return objects.chmodObject(\n pattern as string,\n { user: 'system.user.admin', object: modeObject, state: modeState },\n (err, processed) => {\n // Print the new object rights\n return 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 The command arguments (user, group and pattern)\n */\n chown(args: (string | undefined)[]): 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 return objects.chownObject(\n pattern,\n {\n user: 'system.user.admin',\n owner: user as ioBroker.ObjectIDs.User,\n ownerGroup: group as ioBroker.ObjectIDs.Group,\n },\n (err, processed) => {\n // Print the new object rights\n return 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 The command arguments (the pattern to match)\n */\n list(args: string[]): void {\n const { callback, dbConnect } = this.options;\n let pattern: { startkey: string; endkey: string } | undefined;\n if (typeof args[1] === 'string') {\n pattern = { startkey: args[1].replace('*', ''), endkey: args[1].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 ).catch(e => console.error(`Cannot print object list: ${e.message}`));\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 The command arguments (the object id and optional property path)\n */\n get(args: string[]): 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 The command arguments (the object id and the value to set)\n */\n set(args: string[]): 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: Error | null | undefined) => {\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);\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 as string);\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: string,\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 of Object.keys(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 The command arguments (the object id and the value to extend with)\n */\n extend(args: string[]): 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(async params => {\n const { objects } = params;\n\n try {\n await objects.extendObject(id, value as any);\n CLI.success.objectUpdated(id);\n return void callback(EXIT_CODES.NO_ERROR);\n } catch (err) {\n CLI.error.cannotUpdateObject(id, err.message);\n return void callback(1);\n }\n });\n }\n\n /**\n * Collects all objects 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 Called with the exit code once all objects have been deleted\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 The command arguments (the object id to delete)\n */\n delete(args: string[]): void {\n const { callback, dbConnect } = this.options;\n const id: string = args[1];\n if (!id) {\n CLI.error.requiredArgumentMissing('id', '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 return this._deleteObjects(objects, ids, callback);\n }\n console.log('Aborted.');\n return void callback(3);\n });\n } else {\n return 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 The current (sub-)object being traversed\n * @param pathArr The remaining property path segments\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 The value to set at the given property path\n */\nfunction deepSetProperty(object: ioBroker.AnyObject, path: string, value: any): void {\n /**\n * @param obj The current (sub-)object being traversed\n * @param pathArr The remaining property path segments\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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",
|
|
6
6
|
"names": ["params"]
|
|
7
7
|
}
|
|
@@ -14,20 +14,20 @@ export declare class CLIPlugin extends CLICommand<CLIPluginOptions> {
|
|
|
14
14
|
*
|
|
15
15
|
* @param args parsed cli args
|
|
16
16
|
*/
|
|
17
|
-
execute(args:
|
|
17
|
+
execute(args: string[]): void;
|
|
18
18
|
/**
|
|
19
19
|
* Enables or disables the given plugin
|
|
20
20
|
*
|
|
21
21
|
* @param args the parsed CLI args
|
|
22
22
|
* @param enabled if plugin should be enabled
|
|
23
23
|
*/
|
|
24
|
-
set(args:
|
|
24
|
+
set(args: string[], enabled: boolean): void;
|
|
25
25
|
/**
|
|
26
26
|
* Prints the status of the given plugin
|
|
27
27
|
*
|
|
28
28
|
* @param args the parsed CLI arguments
|
|
29
29
|
*/
|
|
30
|
-
status(args:
|
|
30
|
+
status(args: string[]): void;
|
|
31
31
|
}
|
|
32
32
|
export {};
|
|
33
33
|
//# sourceMappingURL=cliPlugin.d.ts.map
|
|
@@ -5,6 +5,7 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
6
|
var __getProtoOf = Object.getPrototypeOf;
|
|
7
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
8
9
|
var __export = (target, all) => {
|
|
9
10
|
for (var name in all)
|
|
10
11
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -42,6 +43,9 @@ var import_node_module = require("node:module");
|
|
|
42
43
|
const require2 = (0, import_node_module.createRequire)(__import_meta_url || `file://${__filename}`);
|
|
43
44
|
const controllerIoPackPath = require2.resolve("iobroker.js-controller/io-package.json");
|
|
44
45
|
class CLIPlugin extends import_cliCommand.CLICommand {
|
|
46
|
+
static {
|
|
47
|
+
__name(this, "CLIPlugin");
|
|
48
|
+
}
|
|
45
49
|
/** @param options the cli command options */
|
|
46
50
|
constructor(options) {
|
|
47
51
|
super(options);
|
|
@@ -242,6 +246,7 @@ function pluginExists(pluginName, iobrokerJson, adapter) {
|
|
|
242
246
|
}
|
|
243
247
|
return !!(iobrokerJson?.plugins && pluginName in iobrokerJson.plugins);
|
|
244
248
|
}
|
|
249
|
+
__name(pluginExists, "pluginExists");
|
|
245
250
|
function pluginEnabled(pluginName, adapter, systemConfig, iobrokerJson) {
|
|
246
251
|
if (systemConfig?.common?.diag === "none") {
|
|
247
252
|
return false;
|
|
@@ -259,6 +264,7 @@ function pluginEnabled(pluginName, adapter, systemConfig, iobrokerJson) {
|
|
|
259
264
|
}
|
|
260
265
|
return true;
|
|
261
266
|
}
|
|
267
|
+
__name(pluginEnabled, "pluginEnabled");
|
|
262
268
|
// Annotate the CommonJS export names for ESM import in node:
|
|
263
269
|
0 && (module.exports = {
|
|
264
270
|
CLIPlugin
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
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": "
|
|
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: string[]): 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: string[], 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 as string;\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: string[]): 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 as string;\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 The name of the plugin to check\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
|
}
|