@rockcarver/frodo-cli 2.0.0-33 → 2.0.0-35

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 (50) hide show
  1. package/CHANGELOG.md +9 -1
  2. package/esm/cli/admin/admin-execute-rfc7523-authz-grant-flow.js +42 -0
  3. package/esm/cli/admin/admin-execute-rfc7523-authz-grant-flow.js.map +1 -0
  4. package/esm/cli/admin/admin-generate-rfc7523-authz-grant-artifacts.js +44 -0
  5. package/esm/cli/admin/admin-generate-rfc7523-authz-grant-artifacts.js.map +1 -0
  6. package/esm/cli/admin/admin.js +2 -0
  7. package/esm/cli/admin/admin.js.map +1 -1
  8. package/esm/cli/esv/esv-secret-create.js +2 -1
  9. package/esm/cli/esv/esv-secret-create.js.map +1 -1
  10. package/esm/cli/esv/esv-secret-delete.js +4 -3
  11. package/esm/cli/esv/esv-secret-delete.js.map +1 -1
  12. package/esm/cli/esv/esv-secret-describe.js +2 -1
  13. package/esm/cli/esv/esv-secret-describe.js.map +1 -1
  14. package/esm/cli/esv/esv-secret-export.js +6 -4
  15. package/esm/cli/esv/esv-secret-export.js.map +1 -1
  16. package/esm/cli/esv/esv-secret-list.js +2 -1
  17. package/esm/cli/esv/esv-secret-list.js.map +1 -1
  18. package/esm/cli/esv/esv-secret-set.js +2 -1
  19. package/esm/cli/esv/esv-secret-set.js.map +1 -1
  20. package/esm/cli/esv/esv-secret-version-activate.js +2 -2
  21. package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
  22. package/esm/cli/esv/esv-secret-version-create.js +2 -1
  23. package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
  24. package/esm/cli/esv/esv-secret-version-deactivate.js +2 -2
  25. package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
  26. package/esm/cli/esv/esv-secret-version-delete.js +4 -3
  27. package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
  28. package/esm/cli/esv/esv-secret-version-list.js +2 -1
  29. package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
  30. package/esm/cli/esv/esv-variable-create.js +2 -1
  31. package/esm/cli/esv/esv-variable-create.js.map +1 -1
  32. package/esm/cli/esv/esv-variable-delete.js +4 -2
  33. package/esm/cli/esv/esv-variable-delete.js.map +1 -1
  34. package/esm/cli/esv/esv-variable-describe.js +2 -1
  35. package/esm/cli/esv/esv-variable-describe.js.map +1 -1
  36. package/esm/cli/esv/esv-variable-export.js +6 -3
  37. package/esm/cli/esv/esv-variable-export.js.map +1 -1
  38. package/esm/cli/esv/esv-variable-list.js +2 -1
  39. package/esm/cli/esv/esv-variable-list.js.map +1 -1
  40. package/esm/cli/esv/esv-variable-set.js +4 -2
  41. package/esm/cli/esv/esv-variable-set.js.map +1 -1
  42. package/esm/ops/AdminOps.js +142 -1
  43. package/esm/ops/AdminOps.js.map +1 -1
  44. package/esm/ops/SecretsOps.js +156 -59
  45. package/esm/ops/SecretsOps.js.map +1 -1
  46. package/esm/ops/VariablesOps.js +116 -48
  47. package/esm/ops/VariablesOps.js.map +1 -1
  48. package/esm/utils/Console.js +2 -1
  49. package/esm/utils/Console.js.map +1 -1
  50. package/package.json +10 -2
@@ -1,5 +1,5 @@
1
1
  import { frodo, state } from '@rockcarver/frodo-lib';
2
- import { createKeyValueTable, createProgressIndicator, createTable, debugMessage, failSpinner, printMessage, showSpinner, stopProgressIndicator, succeedSpinner, updateProgressIndicator } from '../utils/Console';
2
+ import { createKeyValueTable, createProgressIndicator, createTable, debugMessage, printMessage, stopProgressIndicator, updateProgressIndicator } from '../utils/Console';
3
3
  import { getTypedFilename, saveJsonToFile, saveToFile, titleCase } from '../utils/ExportImportUtils';
4
4
  import wordwrap from './utils/Wordwrap';
5
5
  const {
@@ -22,15 +22,20 @@ const {
22
22
  /**
23
23
  * List variables
24
24
  * @param {boolean} long Long version, all the fields
25
+ * @returns {Promise<boolean>} true if successful, false otherwise
25
26
  */
26
27
  export async function listVariables(long) {
28
+ let outcome = false;
29
+ let spinnerId;
27
30
  let variables = [];
28
31
  try {
32
+ spinnerId = createProgressIndicator('indeterminate', 0, `Reading variables...`);
29
33
  variables = await readVariables();
30
34
  variables.sort((a, b) => a._id.localeCompare(b._id));
35
+ stopProgressIndicator(spinnerId, `Successfully read ${variables.length} variables.`, 'success');
31
36
  } catch (error) {
32
- printMessage(`${error.message}`, 'error');
33
- printMessage(error.response.data, 'error');
37
+ var _error$response;
38
+ stopProgressIndicator(spinnerId, `Error reading variables: ${((_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.data) || error.message}`, 'fail');
34
39
  }
35
40
  if (long) {
36
41
  const table = createTable(['Id'['brightCyan'], 'Value'['brightCyan'], 'Status'['brightCyan'], 'Description'['brightCyan'], 'Modifier'['brightCyan'], 'Modified (UTC)'['brightCyan']]);
@@ -38,11 +43,14 @@ export async function listVariables(long) {
38
43
  table.push([variable._id, wordwrap(decodeBase64(variable.valueBase64), 40), variable.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'], wordwrap(variable.description, 40), state.getUseBearerTokenForAmApis() ? variable.lastChangedBy : await resolvePerpetratorUuid(variable.lastChangedBy), new Date(variable.lastChangeDate).toUTCString()]);
39
44
  }
40
45
  printMessage(table.toString(), 'data');
46
+ outcome = true;
41
47
  } else {
42
48
  variables.forEach(variable => {
43
49
  printMessage(variable._id, 'data');
44
50
  });
51
+ outcome = true;
45
52
  }
53
+ return outcome;
46
54
  }
47
55
 
48
56
  /**
@@ -51,15 +59,19 @@ export async function listVariables(long) {
51
59
  * @param {string} value variable value
52
60
  * @param {string} description variable description
53
61
  * @param {VariableExpressionType} type variable type
62
+ * @returns {Promise<boolean>} true if successful, false otherwise
54
63
  */
55
64
  export async function createVariable(variableId, value, description, type = 'string') {
56
- showSpinner(`Creating variable ${variableId}...`);
65
+ let outcome = false;
66
+ const spinnerId = createProgressIndicator('indeterminate', 0, `Creating variable ${variableId}...`);
57
67
  try {
58
68
  await _updateVariable(variableId, value, description, type);
59
- succeedSpinner(`Created variable ${variableId}`);
69
+ stopProgressIndicator(spinnerId, `Created variable ${variableId}`, 'success');
70
+ outcome = true;
60
71
  } catch (error) {
61
- failSpinner(error.response ? `Error: ${error.response.data.code} - ${error.response.data.message}` : error);
72
+ stopProgressIndicator(spinnerId, error.response ? `Error: ${error.response.data.code} - ${error.response.data.message}` : error, 'fail');
62
73
  }
74
+ return outcome;
63
75
  }
64
76
 
65
77
  /**
@@ -67,50 +79,64 @@ export async function createVariable(variableId, value, description, type = 'str
67
79
  * @param {string} variableId variable id
68
80
  * @param {string} value variable value
69
81
  * @param {string} description variable description
82
+ * @returns {Promise<boolean>} true if successful, false otherwise
70
83
  */
71
84
  export async function updateVariable(variableId, value, description) {
72
- showSpinner(`Updating variable ${variableId}...`);
85
+ let outcome = false;
86
+ const spinnerId = createProgressIndicator('indeterminate', 0, `Updating variable ${variableId}...`);
73
87
  try {
74
88
  await _updateVariable(variableId, value, description);
75
- succeedSpinner(`Updated variable ${variableId}`);
89
+ stopProgressIndicator(spinnerId, `Updated variable ${variableId}`, 'success');
90
+ outcome = true;
76
91
  } catch (error) {
77
- failSpinner(`Error: ${error.response.data.code} - ${error.response.data.message}`);
92
+ stopProgressIndicator(spinnerId, `Error: ${error.response.data.code} - ${error.response.data.message}`, 'fail');
78
93
  }
94
+ return outcome;
79
95
  }
80
96
 
81
97
  /**
82
98
  * Set description of variable
83
99
  * @param {string} variableId variable id
84
100
  * @param {string} description variable description
101
+ * @returns {Promise<boolean>} true if successful, false otherwise
85
102
  */
86
103
  export async function setVariableDescription(variableId, description) {
87
- showSpinner(`Setting description of variable ${variableId}...`);
104
+ let outcome = false;
105
+ const spinnerId = createProgressIndicator('indeterminate', 0, `Setting description of variable ${variableId}...`);
88
106
  try {
89
107
  await updateVariableDescription(variableId, description);
90
- succeedSpinner(`Set description of variable ${variableId}`);
108
+ stopProgressIndicator(spinnerId, `Set description of variable ${variableId}`, 'success');
109
+ outcome = true;
91
110
  } catch (error) {
92
- failSpinner(`Error: ${error.response.data.code} - ${error.response.data.message}`);
111
+ stopProgressIndicator(spinnerId, `Error: ${error.response.data.code} - ${error.response.data.message}`, 'fail');
93
112
  }
113
+ return outcome;
94
114
  }
95
115
 
96
116
  /**
97
117
  * Delete a variable
98
118
  * @param {string} variableId variable id
119
+ * @returns {Promise<boolean>} true if successful, false otherwise
99
120
  */
100
121
  export async function deleteVariableById(variableId) {
101
- showSpinner(`Deleting variable ${variableId}...`);
122
+ let outcome = false;
123
+ const spinnerId = createProgressIndicator('indeterminate', 0, `Deleting variable ${variableId}...`);
102
124
  try {
103
125
  await deleteVariable(variableId);
104
- succeedSpinner(`Deleted variable ${variableId}`);
126
+ stopProgressIndicator(spinnerId, `Deleted variable ${variableId}`, 'success');
127
+ outcome = true;
105
128
  } catch (error) {
106
- failSpinner(`Error: ${error.response.data.code} - ${error.response.data.message}`);
129
+ stopProgressIndicator(spinnerId, `Error: ${error.response.data.code} - ${error.response.data.message}`, 'fail');
107
130
  }
131
+ return outcome;
108
132
  }
109
133
 
110
134
  /**
111
135
  * Delete all variables
136
+ * @returns {Promise<boolean>} true if successful, false otherwise
112
137
  */
113
138
  export async function deleteVariables() {
139
+ let outcome = false;
114
140
  let indicatorId;
115
141
  try {
116
142
  const variables = await readVariables();
@@ -123,36 +149,53 @@ export async function deleteVariables() {
123
149
  printMessage(`Error: ${error.response.data.code} - ${error.response.data.message}`, 'error');
124
150
  }
125
151
  }
152
+ outcome = true;
126
153
  stopProgressIndicator(indicatorId, `Variables deleted.`);
127
154
  } catch (error) {
128
155
  stopProgressIndicator(indicatorId, `Error: ${error.response.data.code} - ${error.response.data.message}`);
129
156
  printMessage(`Error: ${error.response.data.code} - ${error.response.data.message}`, 'error');
130
157
  }
158
+ return outcome;
131
159
  }
132
160
 
133
161
  /**
134
162
  * Describe a variable
135
163
  * @param {string} variableId variable id
164
+ * @returns {Promise<boolean>} true if successful, false otherwise
136
165
  */
137
166
  export async function describeVariable(variableId, json = false) {
138
- const variable = await readVariable(variableId);
139
- if (json) {
140
- printMessage(variable, 'data');
141
- } else {
142
- const table = createKeyValueTable();
143
- table.push(['Name'['brightCyan'], variable._id]);
144
- table.push(['Value'['brightCyan'], wordwrap(decodeBase64(variable.valueBase64), 40)]);
145
- table.push(['Type'['brightCyan'], variable.expressionType]);
146
- table.push(['Status'['brightCyan'], variable.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed']]);
147
- table.push(['Description'['brightCyan'], wordwrap(variable.description, 60)]);
148
- table.push(['Modified'['brightCyan'], new Date(variable.lastChangeDate).toLocaleString()]);
149
- const modifierName = await resolvePerpetratorUuid(variable.lastChangedBy);
150
- if (modifierName && modifierName !== variable.lastChangedBy) {
151
- table.push(['Modifier'['brightCyan'], modifierName]);
167
+ let outcome = false;
168
+ const spinnerId = createProgressIndicator('indeterminate', 0, `Describing variable ${variableId}...`);
169
+ try {
170
+ const variable = await readVariable(variableId);
171
+ stopProgressIndicator(spinnerId, `Successfully retrieved variable ${variableId}`, 'success');
172
+ if (json) {
173
+ printMessage(variable, 'data');
174
+ } else {
175
+ const table = createKeyValueTable();
176
+ table.push(['Name'['brightCyan'], variable._id]);
177
+ table.push(['Value'['brightCyan'], wordwrap(decodeBase64(variable.valueBase64), 40)]);
178
+ table.push(['Type'['brightCyan'], variable.expressionType]);
179
+ table.push(['Status'['brightCyan'], variable.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed']]);
180
+ table.push(['Description'['brightCyan'], wordwrap(variable.description, 60)]);
181
+ table.push(['Modified'['brightCyan'], new Date(variable.lastChangeDate).toLocaleString()]);
182
+ let modifierName;
183
+ try {
184
+ modifierName = await resolvePerpetratorUuid(variable.lastChangedBy);
185
+ } catch (error) {
186
+ // ignore
187
+ }
188
+ if (modifierName && modifierName !== variable.lastChangedBy) {
189
+ table.push(['Modifier'['brightCyan'], modifierName]);
190
+ }
191
+ table.push(['Modifier UUID'['brightCyan'], variable.lastChangedBy]);
192
+ printMessage(table.toString(), 'data');
152
193
  }
153
- table.push(['Modifier UUID'['brightCyan'], variable.lastChangedBy]);
154
- printMessage(table.toString(), 'data');
194
+ outcome = true;
195
+ } catch (error) {
196
+ stopProgressIndicator(spinnerId, `Error describing variable ${variableId}`, 'fail');
155
197
  }
198
+ return outcome;
156
199
  }
157
200
 
158
201
  /**
@@ -160,9 +203,11 @@ export async function describeVariable(variableId, json = false) {
160
203
  * @param {String} variableId Variable id
161
204
  * @param {String} file Optional filename
162
205
  * @param {boolean} noDecode Do not include decoded variable value in export
206
+ * @returns {Promise<boolean>} true if successful, false otherwise
163
207
  */
164
208
  export async function exportVariableToFile(variableId, file, noDecode) {
165
209
  debugMessage(`Cli.VariablesOps.exportVariableToFile: start [variableId=${variableId}, file=${file}]`);
210
+ let outcome = false;
166
211
  let fileName = file;
167
212
  if (!fileName) {
168
213
  fileName = getTypedFilename(variableId, 'variable');
@@ -177,50 +222,73 @@ export async function exportVariableToFile(variableId, file, noDecode) {
177
222
  stopProgressIndicator(indicatorId,
178
223
  // @ts-expect-error - brightCyan colors the string, even though it is not a property of string
179
224
  `Exported ${variableId.brightCyan} to ${filePath.brightCyan}.`);
225
+ outcome = true;
180
226
  } catch (err) {
181
227
  stopProgressIndicator(indicatorId, `${err}`);
182
228
  printMessage(err, 'error');
183
229
  }
184
230
  debugMessage(`Cli.VariablesOps.exportVariableToFile: end [variableId=${variableId}, file=${file}]`);
231
+ return outcome;
185
232
  }
186
233
 
187
234
  /**
188
235
  * Export all variables to single file
189
236
  * @param {string} file Optional filename
190
237
  * @param {boolean} noDecode Do not include decoded variable value in export
238
+ * @returns {Promise<boolean>} true if successful, false otherwise
191
239
  */
192
240
  export async function exportVariablesToFile(file, noDecode) {
193
241
  debugMessage(`Cli.VariablesOps.exportVariablesToFile: start [file=${file}]`);
194
- let fileName = file;
195
- if (!fileName) {
196
- fileName = getTypedFilename(`all${titleCase(state.getRealm())}Variables`, 'variable');
242
+ let outcome = false;
243
+ const spinnerId = createProgressIndicator('indeterminate', 0, `Exporting variables...`);
244
+ if (!file) {
245
+ file = getTypedFilename(`all${titleCase(state.getRealm())}Variables`, 'variable');
197
246
  }
198
247
  try {
199
248
  const variablesExport = await exportVariables(noDecode);
200
- saveJsonToFile(variablesExport, getFilePath(fileName, true));
249
+ saveJsonToFile(variablesExport, getFilePath(file, true));
250
+ stopProgressIndicator(spinnerId, `Exported variables to ${file}`, 'success');
251
+ outcome = true;
201
252
  } catch (error) {
202
- var _error$response;
203
- printMessage(error.message, 'error');
204
- printMessage(`exportVariablesToFile: ${(_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.status}`, 'error');
253
+ var _error$response2;
254
+ stopProgressIndicator(spinnerId, `Error exporting variables: ${((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.status) || error.message}`, 'fail');
205
255
  }
206
- debugMessage(`Cli.VariablesOps.exportVariablesToFile: end [file=${file}]`);
256
+ debugMessage(`Cli.VariablesOps.exportVariablesToFile: end [outcome=${outcome}, file=${file}]`);
257
+ return outcome;
207
258
  }
208
259
 
209
260
  /**
210
261
  * Export all variables to seperate files
211
262
  * @param {boolean} noDecode Do not include decoded variable value in export
263
+ * @returns {Promise<boolean>} true if successful, false otherwise
212
264
  */
213
265
  export async function exportVariablesToFiles(noDecode) {
214
- const variableList = await readVariables();
215
- const indicatorId = createProgressIndicator('determinate', variableList.length, 'Exporting variables');
216
- for (const variable of variableList) {
217
- if (!noDecode) {
218
- variable.value = decodeBase64(variable.valueBase64);
266
+ let outcome = false;
267
+ let spinnerId;
268
+ let indicatorId;
269
+ let variableList = [];
270
+ try {
271
+ spinnerId = createProgressIndicator('indeterminate', 0, `Retrieving variables...`);
272
+ variableList = await readVariables();
273
+ stopProgressIndicator(spinnerId, `Successfully retrieved ${variableList.length} variables`, 'success');
274
+ } catch (error) {
275
+ stopProgressIndicator(spinnerId, `Error retrieving variables: ${error.message}`, 'fail');
276
+ }
277
+ try {
278
+ const indicatorId = createProgressIndicator('determinate', variableList.length, 'Exporting variables');
279
+ for (const variable of variableList) {
280
+ if (!noDecode) {
281
+ variable.value = decodeBase64(variable.valueBase64);
282
+ }
283
+ updateProgressIndicator(indicatorId, `Writing variable ${variable._id}`);
284
+ const fileName = getTypedFilename(variable._id, 'variable');
285
+ saveToFile('variable', variable, '_id', getFilePath(fileName, true));
219
286
  }
220
- updateProgressIndicator(indicatorId, `Writing variable ${variable._id}`);
221
- const fileName = getTypedFilename(variable._id, 'variable');
222
- saveToFile('variable', variable, '_id', getFilePath(fileName, true));
287
+ stopProgressIndicator(indicatorId, `${variableList.length} variables exported`);
288
+ outcome = true;
289
+ } catch (error) {
290
+ stopProgressIndicator(indicatorId, `Error exporting variables: ${error.message}`);
223
291
  }
224
- stopProgressIndicator(indicatorId, `${variableList.length} variables exported`);
292
+ return outcome;
225
293
  }
226
294
  //# sourceMappingURL=VariablesOps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VariablesOps.js","names":["frodo","state","createKeyValueTable","createProgressIndicator","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressIndicator","succeedSpinner","updateProgressIndicator","getTypedFilename","saveJsonToFile","saveToFile","titleCase","wordwrap","decodeBase64","getFilePath","utils","resolvePerpetratorUuid","idm","managed","readVariables","readVariable","exportVariable","exportVariables","deleteVariable","updateVariableDescription","updateVariable","_updateVariable","cloud","variable","listVariables","long","variables","sort","a","b","_id","localeCompare","error","message","response","data","table","push","valueBase64","loaded","description","getUseBearerTokenForAmApis","lastChangedBy","Date","lastChangeDate","toUTCString","toString","forEach","createVariable","variableId","value","type","code","setVariableDescription","deleteVariableById","deleteVariables","indicatorId","length","describeVariable","json","expressionType","toLocaleString","modifierName","exportVariableToFile","file","noDecode","fileName","filePath","fileData","brightCyan","err","exportVariablesToFile","getRealm","variablesExport","_error$response","status","exportVariablesToFiles","variableList"],"sources":["../../src/ops/VariablesOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { VariableExpressionType } from '@rockcarver/frodo-lib/types/api/cloud/VariablesApi';\n\nimport {\n createKeyValueTable,\n createProgressIndicator,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressIndicator,\n succeedSpinner,\n updateProgressIndicator,\n} from '../utils/Console';\nimport {\n getTypedFilename,\n saveJsonToFile,\n saveToFile,\n titleCase,\n} from '../utils/ExportImportUtils';\nimport wordwrap from './utils/Wordwrap';\n\nconst { decodeBase64, getFilePath } = frodo.utils;\nconst { resolvePerpetratorUuid } = frodo.idm.managed;\nconst {\n readVariables,\n readVariable,\n exportVariable,\n exportVariables,\n deleteVariable,\n updateVariableDescription,\n updateVariable: _updateVariable,\n} = frodo.cloud.variable;\n\n/**\n * List variables\n * @param {boolean} long Long version, all the fields\n */\nexport async function listVariables(long) {\n let variables = [];\n try {\n variables = await readVariables();\n variables.sort((a, b) => a._id.localeCompare(b._id));\n } catch (error) {\n printMessage(`${error.message}`, 'error');\n printMessage(error.response.data, 'error');\n }\n if (long) {\n const table = createTable([\n 'Id'['brightCyan'],\n 'Value'['brightCyan'],\n 'Status'['brightCyan'],\n 'Description'['brightCyan'],\n 'Modifier'['brightCyan'],\n 'Modified (UTC)'['brightCyan'],\n ]);\n for (const variable of variables) {\n table.push([\n variable._id,\n wordwrap(decodeBase64(variable.valueBase64), 40),\n variable.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'],\n wordwrap(variable.description, 40),\n state.getUseBearerTokenForAmApis()\n ? variable.lastChangedBy\n : await resolvePerpetratorUuid(variable.lastChangedBy),\n new Date(variable.lastChangeDate).toUTCString(),\n ]);\n }\n printMessage(table.toString(), 'data');\n } else {\n variables.forEach((variable) => {\n printMessage(variable._id, 'data');\n });\n }\n}\n\n/**\n * Create variable\n * @param {string} variableId variable id\n * @param {string} value variable value\n * @param {string} description variable description\n * @param {VariableExpressionType} type variable type\n */\nexport async function createVariable(\n variableId: string,\n value: string,\n description: string,\n type: VariableExpressionType = 'string'\n) {\n showSpinner(`Creating variable ${variableId}...`);\n try {\n await _updateVariable(variableId, value, description, type);\n succeedSpinner(`Created variable ${variableId}`);\n } catch (error) {\n failSpinner(\n error.response\n ? `Error: ${error.response.data.code} - ${error.response.data.message}`\n : error\n );\n }\n}\n\n/**\n * Update variable\n * @param {string} variableId variable id\n * @param {string} value variable value\n * @param {string} description variable description\n */\nexport async function updateVariable(variableId, value, description) {\n showSpinner(`Updating variable ${variableId}...`);\n try {\n await _updateVariable(variableId, value, description);\n succeedSpinner(`Updated variable ${variableId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Set description of variable\n * @param {string} variableId variable id\n * @param {string} description variable description\n */\nexport async function setVariableDescription(variableId, description) {\n showSpinner(`Setting description of variable ${variableId}...`);\n try {\n await updateVariableDescription(variableId, description);\n succeedSpinner(`Set description of variable ${variableId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Delete a variable\n * @param {string} variableId variable id\n */\nexport async function deleteVariableById(variableId) {\n showSpinner(`Deleting variable ${variableId}...`);\n try {\n await deleteVariable(variableId);\n succeedSpinner(`Deleted variable ${variableId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Delete all variables\n */\nexport async function deleteVariables() {\n let indicatorId: string;\n try {\n const variables = await readVariables();\n indicatorId = createProgressIndicator(\n 'determinate',\n variables.length,\n `Deleting variable...`\n );\n for (const variable of variables) {\n try {\n await deleteVariable(variable._id);\n updateProgressIndicator(\n indicatorId,\n `Deleted variable ${variable._id}`\n );\n } catch (error) {\n printMessage(\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'error'\n );\n }\n }\n stopProgressIndicator(indicatorId, `Variables deleted.`);\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n printMessage(\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'error'\n );\n }\n}\n\n/**\n * Describe a variable\n * @param {string} variableId variable id\n */\nexport async function describeVariable(variableId, json = false) {\n const variable = await readVariable(variableId);\n if (json) {\n printMessage(variable, 'data');\n } else {\n const table = createKeyValueTable();\n table.push(['Name'['brightCyan'], variable._id]);\n table.push([\n 'Value'['brightCyan'],\n wordwrap(decodeBase64(variable.valueBase64), 40),\n ]);\n table.push(['Type'['brightCyan'], variable.expressionType]);\n table.push([\n 'Status'['brightCyan'],\n variable.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'],\n ]);\n table.push([\n 'Description'['brightCyan'],\n wordwrap(variable.description, 60),\n ]);\n table.push([\n 'Modified'['brightCyan'],\n new Date(variable.lastChangeDate).toLocaleString(),\n ]);\n const modifierName = await resolvePerpetratorUuid(variable.lastChangedBy);\n if (modifierName && modifierName !== variable.lastChangedBy) {\n table.push(['Modifier'['brightCyan'], modifierName]);\n }\n table.push(['Modifier UUID'['brightCyan'], variable.lastChangedBy]);\n printMessage(table.toString(), 'data');\n }\n}\n\n/**\n * Export a single variable to file\n * @param {String} variableId Variable id\n * @param {String} file Optional filename\n * @param {boolean} noDecode Do not include decoded variable value in export\n */\nexport async function exportVariableToFile(\n variableId: string,\n file: string | null,\n noDecode: boolean\n) {\n debugMessage(\n `Cli.VariablesOps.exportVariableToFile: start [variableId=${variableId}, file=${file}]`\n );\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(variableId, 'variable');\n }\n const filePath = getFilePath(fileName, true);\n let indicatorId: string;\n try {\n indicatorId = createProgressIndicator(\n 'determinate',\n 1,\n `Exporting variable ${variableId}`\n );\n const fileData = await exportVariable(variableId, noDecode);\n saveJsonToFile(fileData, filePath);\n updateProgressIndicator(indicatorId, `Exported variable ${variableId}`);\n stopProgressIndicator(\n indicatorId,\n // @ts-expect-error - brightCyan colors the string, even though it is not a property of string\n `Exported ${variableId.brightCyan} to ${filePath.brightCyan}.`\n );\n } catch (err) {\n stopProgressIndicator(indicatorId, `${err}`);\n printMessage(err, 'error');\n }\n debugMessage(\n `Cli.VariablesOps.exportVariableToFile: end [variableId=${variableId}, file=${file}]`\n );\n}\n\n/**\n * Export all variables to single file\n * @param {string} file Optional filename\n * @param {boolean} noDecode Do not include decoded variable value in export\n */\nexport async function exportVariablesToFile(\n file: string | null,\n noDecode: boolean\n) {\n debugMessage(`Cli.VariablesOps.exportVariablesToFile: start [file=${file}]`);\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(\n `all${titleCase(state.getRealm())}Variables`,\n 'variable'\n );\n }\n try {\n const variablesExport = await exportVariables(noDecode);\n saveJsonToFile(variablesExport, getFilePath(fileName, true));\n } catch (error) {\n printMessage(error.message, 'error');\n printMessage(`exportVariablesToFile: ${error.response?.status}`, 'error');\n }\n debugMessage(`Cli.VariablesOps.exportVariablesToFile: end [file=${file}]`);\n}\n\n/**\n * Export all variables to seperate files\n * @param {boolean} noDecode Do not include decoded variable value in export\n */\nexport async function exportVariablesToFiles(noDecode: boolean) {\n const variableList = await readVariables();\n const indicatorId = createProgressIndicator(\n 'determinate',\n variableList.length,\n 'Exporting variables'\n );\n for (const variable of variableList) {\n if (!noDecode) {\n variable.value = decodeBase64(variable.valueBase64);\n }\n updateProgressIndicator(indicatorId, `Writing variable ${variable._id}`);\n const fileName = getTypedFilename(variable._id, 'variable');\n saveToFile('variable', variable, '_id', getFilePath(fileName, true));\n }\n stopProgressIndicator(\n indicatorId,\n `${variableList.length} variables exported`\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"VariablesOps.js","names":["frodo","state","createKeyValueTable","createProgressIndicator","createTable","debugMessage","printMessage","stopProgressIndicator","updateProgressIndicator","getTypedFilename","saveJsonToFile","saveToFile","titleCase","wordwrap","decodeBase64","getFilePath","utils","resolvePerpetratorUuid","idm","managed","readVariables","readVariable","exportVariable","exportVariables","deleteVariable","updateVariableDescription","updateVariable","_updateVariable","cloud","variable","listVariables","long","outcome","spinnerId","variables","sort","a","b","_id","localeCompare","length","error","_error$response","response","data","message","table","push","valueBase64","loaded","description","getUseBearerTokenForAmApis","lastChangedBy","Date","lastChangeDate","toUTCString","toString","forEach","createVariable","variableId","value","type","code","setVariableDescription","deleteVariableById","deleteVariables","indicatorId","describeVariable","json","expressionType","toLocaleString","modifierName","exportVariableToFile","file","noDecode","fileName","filePath","fileData","brightCyan","err","exportVariablesToFile","getRealm","variablesExport","_error$response2","status","exportVariablesToFiles","variableList"],"sources":["../../src/ops/VariablesOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport {\n VariableExpressionType,\n VariableSkeleton,\n} from '@rockcarver/frodo-lib/types/api/cloud/VariablesApi';\n\nimport {\n createKeyValueTable,\n createProgressIndicator,\n createTable,\n debugMessage,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n} from '../utils/Console';\nimport {\n getTypedFilename,\n saveJsonToFile,\n saveToFile,\n titleCase,\n} from '../utils/ExportImportUtils';\nimport wordwrap from './utils/Wordwrap';\n\nconst { decodeBase64, getFilePath } = frodo.utils;\nconst { resolvePerpetratorUuid } = frodo.idm.managed;\nconst {\n readVariables,\n readVariable,\n exportVariable,\n exportVariables,\n deleteVariable,\n updateVariableDescription,\n updateVariable: _updateVariable,\n} = frodo.cloud.variable;\n\n/**\n * List variables\n * @param {boolean} long Long version, all the fields\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function listVariables(long: boolean): Promise<boolean> {\n let outcome = false;\n let spinnerId: string;\n let variables: VariableSkeleton[] = [];\n try {\n spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Reading variables...`\n );\n variables = await readVariables();\n variables.sort((a, b) => a._id.localeCompare(b._id));\n stopProgressIndicator(\n spinnerId,\n `Successfully read ${variables.length} variables.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error reading variables: ${error.response?.data || error.message}`,\n 'fail'\n );\n }\n if (long) {\n const table = createTable([\n 'Id'['brightCyan'],\n 'Value'['brightCyan'],\n 'Status'['brightCyan'],\n 'Description'['brightCyan'],\n 'Modifier'['brightCyan'],\n 'Modified (UTC)'['brightCyan'],\n ]);\n for (const variable of variables) {\n table.push([\n variable._id,\n wordwrap(decodeBase64(variable.valueBase64), 40),\n variable.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'],\n wordwrap(variable.description, 40),\n state.getUseBearerTokenForAmApis()\n ? variable.lastChangedBy\n : await resolvePerpetratorUuid(variable.lastChangedBy),\n new Date(variable.lastChangeDate).toUTCString(),\n ]);\n }\n printMessage(table.toString(), 'data');\n outcome = true;\n } else {\n variables.forEach((variable) => {\n printMessage(variable._id, 'data');\n });\n outcome = true;\n }\n return outcome;\n}\n\n/**\n * Create variable\n * @param {string} variableId variable id\n * @param {string} value variable value\n * @param {string} description variable description\n * @param {VariableExpressionType} type variable type\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function createVariable(\n variableId: string,\n value: string,\n description: string,\n type: VariableExpressionType = 'string'\n): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Creating variable ${variableId}...`\n );\n try {\n await _updateVariable(variableId, value, description, type);\n stopProgressIndicator(\n spinnerId,\n `Created variable ${variableId}`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n error.response\n ? `Error: ${error.response.data.code} - ${error.response.data.message}`\n : error,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Update variable\n * @param {string} variableId variable id\n * @param {string} value variable value\n * @param {string} description variable description\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function updateVariable(variableId, value, description) {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Updating variable ${variableId}...`\n );\n try {\n await _updateVariable(variableId, value, description);\n stopProgressIndicator(\n spinnerId,\n `Updated variable ${variableId}`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Set description of variable\n * @param {string} variableId variable id\n * @param {string} description variable description\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function setVariableDescription(variableId, description) {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Setting description of variable ${variableId}...`\n );\n try {\n await updateVariableDescription(variableId, description);\n stopProgressIndicator(\n spinnerId,\n `Set description of variable ${variableId}`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Delete a variable\n * @param {string} variableId variable id\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteVariableById(variableId) {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Deleting variable ${variableId}...`\n );\n try {\n await deleteVariable(variableId);\n stopProgressIndicator(\n spinnerId,\n `Deleted variable ${variableId}`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Delete all variables\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteVariables() {\n let outcome = false;\n let indicatorId: string;\n try {\n const variables = await readVariables();\n indicatorId = createProgressIndicator(\n 'determinate',\n variables.length,\n `Deleting variable...`\n );\n for (const variable of variables) {\n try {\n await deleteVariable(variable._id);\n updateProgressIndicator(\n indicatorId,\n `Deleted variable ${variable._id}`\n );\n } catch (error) {\n printMessage(\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'error'\n );\n }\n }\n outcome = true;\n stopProgressIndicator(indicatorId, `Variables deleted.`);\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n printMessage(\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'error'\n );\n }\n return outcome;\n}\n\n/**\n * Describe a variable\n * @param {string} variableId variable id\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function describeVariable(variableId, json = false) {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Describing variable ${variableId}...`\n );\n try {\n const variable = await readVariable(variableId);\n stopProgressIndicator(\n spinnerId,\n `Successfully retrieved variable ${variableId}`,\n 'success'\n );\n if (json) {\n printMessage(variable, 'data');\n } else {\n const table = createKeyValueTable();\n table.push(['Name'['brightCyan'], variable._id]);\n table.push([\n 'Value'['brightCyan'],\n wordwrap(decodeBase64(variable.valueBase64), 40),\n ]);\n table.push(['Type'['brightCyan'], variable.expressionType]);\n table.push([\n 'Status'['brightCyan'],\n variable.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'],\n ]);\n table.push([\n 'Description'['brightCyan'],\n wordwrap(variable.description, 60),\n ]);\n table.push([\n 'Modified'['brightCyan'],\n new Date(variable.lastChangeDate).toLocaleString(),\n ]);\n let modifierName: string;\n try {\n modifierName = await resolvePerpetratorUuid(variable.lastChangedBy);\n } catch (error) {\n // ignore\n }\n if (modifierName && modifierName !== variable.lastChangedBy) {\n table.push(['Modifier'['brightCyan'], modifierName]);\n }\n table.push(['Modifier UUID'['brightCyan'], variable.lastChangedBy]);\n printMessage(table.toString(), 'data');\n }\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error describing variable ${variableId}`,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Export a single variable to file\n * @param {String} variableId Variable id\n * @param {String} file Optional filename\n * @param {boolean} noDecode Do not include decoded variable value in export\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportVariableToFile(\n variableId: string,\n file: string | null,\n noDecode: boolean\n) {\n debugMessage(\n `Cli.VariablesOps.exportVariableToFile: start [variableId=${variableId}, file=${file}]`\n );\n let outcome = false;\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(variableId, 'variable');\n }\n const filePath = getFilePath(fileName, true);\n let indicatorId: string;\n try {\n indicatorId = createProgressIndicator(\n 'determinate',\n 1,\n `Exporting variable ${variableId}`\n );\n const fileData = await exportVariable(variableId, noDecode);\n saveJsonToFile(fileData, filePath);\n updateProgressIndicator(indicatorId, `Exported variable ${variableId}`);\n stopProgressIndicator(\n indicatorId,\n // @ts-expect-error - brightCyan colors the string, even though it is not a property of string\n `Exported ${variableId.brightCyan} to ${filePath.brightCyan}.`\n );\n outcome = true;\n } catch (err) {\n stopProgressIndicator(indicatorId, `${err}`);\n printMessage(err, 'error');\n }\n debugMessage(\n `Cli.VariablesOps.exportVariableToFile: end [variableId=${variableId}, file=${file}]`\n );\n return outcome;\n}\n\n/**\n * Export all variables to single file\n * @param {string} file Optional filename\n * @param {boolean} noDecode Do not include decoded variable value in export\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportVariablesToFile(\n file: string | null,\n noDecode: boolean\n) {\n debugMessage(`Cli.VariablesOps.exportVariablesToFile: start [file=${file}]`);\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Exporting variables...`\n );\n if (!file) {\n file = getTypedFilename(\n `all${titleCase(state.getRealm())}Variables`,\n 'variable'\n );\n }\n try {\n const variablesExport = await exportVariables(noDecode);\n saveJsonToFile(variablesExport, getFilePath(file, true));\n stopProgressIndicator(\n spinnerId,\n `Exported variables to ${file}`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error exporting variables: ${error.response?.status || error.message}`,\n 'fail'\n );\n }\n debugMessage(\n `Cli.VariablesOps.exportVariablesToFile: end [outcome=${outcome}, file=${file}]`\n );\n return outcome;\n}\n\n/**\n * Export all variables to seperate files\n * @param {boolean} noDecode Do not include decoded variable value in export\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportVariablesToFiles(noDecode: boolean) {\n let outcome = false;\n let spinnerId: string;\n let indicatorId: string;\n let variableList: VariableSkeleton[] = [];\n try {\n spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Retrieving variables...`\n );\n variableList = await readVariables();\n stopProgressIndicator(\n spinnerId,\n `Successfully retrieved ${variableList.length} variables`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error retrieving variables: ${error.message}`,\n 'fail'\n );\n }\n try {\n const indicatorId = createProgressIndicator(\n 'determinate',\n variableList.length,\n 'Exporting variables'\n );\n for (const variable of variableList) {\n if (!noDecode) {\n variable.value = decodeBase64(variable.valueBase64);\n }\n updateProgressIndicator(indicatorId, `Writing variable ${variable._id}`);\n const fileName = getTypedFilename(variable._id, 'variable');\n saveToFile('variable', variable, '_id', getFilePath(fileName, true));\n }\n stopProgressIndicator(\n indicatorId,\n `${variableList.length} variables exported`\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error exporting variables: ${error.message}`\n );\n }\n return outcome;\n}\n"],"mappings":"AAAA,SAASA,KAAK,EAAEC,KAAK,QAAQ,uBAAuB;AAMpD,SACEC,mBAAmB,EACnBC,uBAAuB,EACvBC,WAAW,EACXC,YAAY,EACZC,YAAY,EACZC,qBAAqB,EACrBC,uBAAuB,QAClB,kBAAkB;AACzB,SACEC,gBAAgB,EAChBC,cAAc,EACdC,UAAU,EACVC,SAAS,QACJ,4BAA4B;AACnC,OAAOC,QAAQ,MAAM,kBAAkB;AAEvC,MAAM;EAAEC,YAAY;EAAEC;AAAY,CAAC,GAAGf,KAAK,CAACgB,KAAK;AACjD,MAAM;EAAEC;AAAuB,CAAC,GAAGjB,KAAK,CAACkB,GAAG,CAACC,OAAO;AACpD,MAAM;EACJC,aAAa;EACbC,YAAY;EACZC,cAAc;EACdC,eAAe;EACfC,cAAc;EACdC,yBAAyB;EACzBC,cAAc,EAAEC;AAClB,CAAC,GAAG3B,KAAK,CAAC4B,KAAK,CAACC,QAAQ;;AAExB;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeC,aAAaA,CAACC,IAAa,EAAoB;EACnE,IAAIC,OAAO,GAAG,KAAK;EACnB,IAAIC,SAAiB;EACrB,IAAIC,SAA6B,GAAG,EAAE;EACtC,IAAI;IACFD,SAAS,GAAG9B,uBAAuB,CACjC,eAAe,EACf,CAAC,EACA,sBACH,CAAC;IACD+B,SAAS,GAAG,MAAMd,aAAa,CAAC,CAAC;IACjCc,SAAS,CAACC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACE,GAAG,CAACC,aAAa,CAACF,CAAC,CAACC,GAAG,CAAC,CAAC;IACpD/B,qBAAqB,CACnB0B,SAAS,EACR,qBAAoBC,SAAS,CAACM,MAAO,aAAY,EAClD,SACF,CAAC;EACH,CAAC,CAAC,OAAOC,KAAK,EAAE;IAAA,IAAAC,eAAA;IACdnC,qBAAqB,CACnB0B,SAAS,EACR,4BAA2B,EAAAS,eAAA,GAAAD,KAAK,CAACE,QAAQ,cAAAD,eAAA,uBAAdA,eAAA,CAAgBE,IAAI,KAAIH,KAAK,CAACI,OAAQ,EAAC,EACnE,MACF,CAAC;EACH;EACA,IAAId,IAAI,EAAE;IACR,MAAMe,KAAK,GAAG1C,WAAW,CAAC,CACxB,IAAI,CAAC,YAAY,CAAC,EAClB,OAAO,CAAC,YAAY,CAAC,EACrB,QAAQ,CAAC,YAAY,CAAC,EACtB,aAAa,CAAC,YAAY,CAAC,EAC3B,UAAU,CAAC,YAAY,CAAC,EACxB,gBAAgB,CAAC,YAAY,CAAC,CAC/B,CAAC;IACF,KAAK,MAAMyB,QAAQ,IAAIK,SAAS,EAAE;MAChCY,KAAK,CAACC,IAAI,CAAC,CACTlB,QAAQ,CAACS,GAAG,EACZzB,QAAQ,CAACC,YAAY,CAACe,QAAQ,CAACmB,WAAW,CAAC,EAAE,EAAE,CAAC,EAChDnB,QAAQ,CAACoB,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC,EACnEpC,QAAQ,CAACgB,QAAQ,CAACqB,WAAW,EAAE,EAAE,CAAC,EAClCjD,KAAK,CAACkD,0BAA0B,CAAC,CAAC,GAC9BtB,QAAQ,CAACuB,aAAa,GACtB,MAAMnC,sBAAsB,CAACY,QAAQ,CAACuB,aAAa,CAAC,EACxD,IAAIC,IAAI,CAACxB,QAAQ,CAACyB,cAAc,CAAC,CAACC,WAAW,CAAC,CAAC,CAChD,CAAC;IACJ;IACAjD,YAAY,CAACwC,KAAK,CAACU,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACtCxB,OAAO,GAAG,IAAI;EAChB,CAAC,MAAM;IACLE,SAAS,CAACuB,OAAO,CAAE5B,QAAQ,IAAK;MAC9BvB,YAAY,CAACuB,QAAQ,CAACS,GAAG,EAAE,MAAM,CAAC;IACpC,CAAC,CAAC;IACFN,OAAO,GAAG,IAAI;EAChB;EACA,OAAOA,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAe0B,cAAcA,CAClCC,UAAkB,EAClBC,KAAa,EACbV,WAAmB,EACnBW,IAA4B,GAAG,QAAQ,EACrB;EAClB,IAAI7B,OAAO,GAAG,KAAK;EACnB,MAAMC,SAAS,GAAG9B,uBAAuB,CACvC,eAAe,EACf,CAAC,EACA,qBAAoBwD,UAAW,KAClC,CAAC;EACD,IAAI;IACF,MAAMhC,eAAe,CAACgC,UAAU,EAAEC,KAAK,EAAEV,WAAW,EAAEW,IAAI,CAAC;IAC3DtD,qBAAqB,CACnB0B,SAAS,EACR,oBAAmB0B,UAAW,EAAC,EAChC,SACF,CAAC;IACD3B,OAAO,GAAG,IAAI;EAChB,CAAC,CAAC,OAAOS,KAAK,EAAE;IACdlC,qBAAqB,CACnB0B,SAAS,EACTQ,KAAK,CAACE,QAAQ,GACT,UAASF,KAAK,CAACE,QAAQ,CAACC,IAAI,CAACkB,IAAK,MAAKrB,KAAK,CAACE,QAAQ,CAACC,IAAI,CAACC,OAAQ,EAAC,GACrEJ,KAAK,EACT,MACF,CAAC;EACH;EACA,OAAOT,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeN,cAAcA,CAACiC,UAAU,EAAEC,KAAK,EAAEV,WAAW,EAAE;EACnE,IAAIlB,OAAO,GAAG,KAAK;EACnB,MAAMC,SAAS,GAAG9B,uBAAuB,CACvC,eAAe,EACf,CAAC,EACA,qBAAoBwD,UAAW,KAClC,CAAC;EACD,IAAI;IACF,MAAMhC,eAAe,CAACgC,UAAU,EAAEC,KAAK,EAAEV,WAAW,CAAC;IACrD3C,qBAAqB,CACnB0B,SAAS,EACR,oBAAmB0B,UAAW,EAAC,EAChC,SACF,CAAC;IACD3B,OAAO,GAAG,IAAI;EAChB,CAAC,CAAC,OAAOS,KAAK,EAAE;IACdlC,qBAAqB,CACnB0B,SAAS,EACR,UAASQ,KAAK,CAACE,QAAQ,CAACC,IAAI,CAACkB,IAAK,MAAKrB,KAAK,CAACE,QAAQ,CAACC,IAAI,CAACC,OAAQ,EAAC,EACrE,MACF,CAAC;EACH;EACA,OAAOb,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAe+B,sBAAsBA,CAACJ,UAAU,EAAET,WAAW,EAAE;EACpE,IAAIlB,OAAO,GAAG,KAAK;EACnB,MAAMC,SAAS,GAAG9B,uBAAuB,CACvC,eAAe,EACf,CAAC,EACA,mCAAkCwD,UAAW,KAChD,CAAC;EACD,IAAI;IACF,MAAMlC,yBAAyB,CAACkC,UAAU,EAAET,WAAW,CAAC;IACxD3C,qBAAqB,CACnB0B,SAAS,EACR,+BAA8B0B,UAAW,EAAC,EAC3C,SACF,CAAC;IACD3B,OAAO,GAAG,IAAI;EAChB,CAAC,CAAC,OAAOS,KAAK,EAAE;IACdlC,qBAAqB,CACnB0B,SAAS,EACR,UAASQ,KAAK,CAACE,QAAQ,CAACC,IAAI,CAACkB,IAAK,MAAKrB,KAAK,CAACE,QAAQ,CAACC,IAAI,CAACC,OAAQ,EAAC,EACrE,MACF,CAAC;EACH;EACA,OAAOb,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAegC,kBAAkBA,CAACL,UAAU,EAAE;EACnD,IAAI3B,OAAO,GAAG,KAAK;EACnB,MAAMC,SAAS,GAAG9B,uBAAuB,CACvC,eAAe,EACf,CAAC,EACA,qBAAoBwD,UAAW,KAClC,CAAC;EACD,IAAI;IACF,MAAMnC,cAAc,CAACmC,UAAU,CAAC;IAChCpD,qBAAqB,CACnB0B,SAAS,EACR,oBAAmB0B,UAAW,EAAC,EAChC,SACF,CAAC;IACD3B,OAAO,GAAG,IAAI;EAChB,CAAC,CAAC,OAAOS,KAAK,EAAE;IACdlC,qBAAqB,CACnB0B,SAAS,EACR,UAASQ,KAAK,CAACE,QAAQ,CAACC,IAAI,CAACkB,IAAK,MAAKrB,KAAK,CAACE,QAAQ,CAACC,IAAI,CAACC,OAAQ,EAAC,EACrE,MACF,CAAC;EACH;EACA,OAAOb,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAeiC,eAAeA,CAAA,EAAG;EACtC,IAAIjC,OAAO,GAAG,KAAK;EACnB,IAAIkC,WAAmB;EACvB,IAAI;IACF,MAAMhC,SAAS,GAAG,MAAMd,aAAa,CAAC,CAAC;IACvC8C,WAAW,GAAG/D,uBAAuB,CACnC,aAAa,EACb+B,SAAS,CAACM,MAAM,EACf,sBACH,CAAC;IACD,KAAK,MAAMX,QAAQ,IAAIK,SAAS,EAAE;MAChC,IAAI;QACF,MAAMV,cAAc,CAACK,QAAQ,CAACS,GAAG,CAAC;QAClC9B,uBAAuB,CACrB0D,WAAW,EACV,oBAAmBrC,QAAQ,CAACS,GAAI,EACnC,CAAC;MACH,CAAC,CAAC,OAAOG,KAAK,EAAE;QACdnC,YAAY,CACT,UAASmC,KAAK,CAACE,QAAQ,CAACC,IAAI,CAACkB,IAAK,MAAKrB,KAAK,CAACE,QAAQ,CAACC,IAAI,CAACC,OAAQ,EAAC,EACrE,OACF,CAAC;MACH;IACF;IACAb,OAAO,GAAG,IAAI;IACdzB,qBAAqB,CAAC2D,WAAW,EAAG,oBAAmB,CAAC;EAC1D,CAAC,CAAC,OAAOzB,KAAK,EAAE;IACdlC,qBAAqB,CACnB2D,WAAW,EACV,UAASzB,KAAK,CAACE,QAAQ,CAACC,IAAI,CAACkB,IAAK,MAAKrB,KAAK,CAACE,QAAQ,CAACC,IAAI,CAACC,OAAQ,EACtE,CAAC;IACDvC,YAAY,CACT,UAASmC,KAAK,CAACE,QAAQ,CAACC,IAAI,CAACkB,IAAK,MAAKrB,KAAK,CAACE,QAAQ,CAACC,IAAI,CAACC,OAAQ,EAAC,EACrE,OACF,CAAC;EACH;EACA,OAAOb,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAemC,gBAAgBA,CAACR,UAAU,EAAES,IAAI,GAAG,KAAK,EAAE;EAC/D,IAAIpC,OAAO,GAAG,KAAK;EACnB,MAAMC,SAAS,GAAG9B,uBAAuB,CACvC,eAAe,EACf,CAAC,EACA,uBAAsBwD,UAAW,KACpC,CAAC;EACD,IAAI;IACF,MAAM9B,QAAQ,GAAG,MAAMR,YAAY,CAACsC,UAAU,CAAC;IAC/CpD,qBAAqB,CACnB0B,SAAS,EACR,mCAAkC0B,UAAW,EAAC,EAC/C,SACF,CAAC;IACD,IAAIS,IAAI,EAAE;MACR9D,YAAY,CAACuB,QAAQ,EAAE,MAAM,CAAC;IAChC,CAAC,MAAM;MACL,MAAMiB,KAAK,GAAG5C,mBAAmB,CAAC,CAAC;MACnC4C,KAAK,CAACC,IAAI,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,EAAElB,QAAQ,CAACS,GAAG,CAAC,CAAC;MAChDQ,KAAK,CAACC,IAAI,CAAC,CACT,OAAO,CAAC,YAAY,CAAC,EACrBlC,QAAQ,CAACC,YAAY,CAACe,QAAQ,CAACmB,WAAW,CAAC,EAAE,EAAE,CAAC,CACjD,CAAC;MACFF,KAAK,CAACC,IAAI,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,EAAElB,QAAQ,CAACwC,cAAc,CAAC,CAAC;MAC3DvB,KAAK,CAACC,IAAI,CAAC,CACT,QAAQ,CAAC,YAAY,CAAC,EACtBlB,QAAQ,CAACoB,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC,CACpE,CAAC;MACFH,KAAK,CAACC,IAAI,CAAC,CACT,aAAa,CAAC,YAAY,CAAC,EAC3BlC,QAAQ,CAACgB,QAAQ,CAACqB,WAAW,EAAE,EAAE,CAAC,CACnC,CAAC;MACFJ,KAAK,CAACC,IAAI,CAAC,CACT,UAAU,CAAC,YAAY,CAAC,EACxB,IAAIM,IAAI,CAACxB,QAAQ,CAACyB,cAAc,CAAC,CAACgB,cAAc,CAAC,CAAC,CACnD,CAAC;MACF,IAAIC,YAAoB;MACxB,IAAI;QACFA,YAAY,GAAG,MAAMtD,sBAAsB,CAACY,QAAQ,CAACuB,aAAa,CAAC;MACrE,CAAC,CAAC,OAAOX,KAAK,EAAE;QACd;MAAA;MAEF,IAAI8B,YAAY,IAAIA,YAAY,KAAK1C,QAAQ,CAACuB,aAAa,EAAE;QAC3DN,KAAK,CAACC,IAAI,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,EAAEwB,YAAY,CAAC,CAAC;MACtD;MACAzB,KAAK,CAACC,IAAI,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,EAAElB,QAAQ,CAACuB,aAAa,CAAC,CAAC;MACnE9C,YAAY,CAACwC,KAAK,CAACU,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACxC;IACAxB,OAAO,GAAG,IAAI;EAChB,CAAC,CAAC,OAAOS,KAAK,EAAE;IACdlC,qBAAqB,CACnB0B,SAAS,EACR,6BAA4B0B,UAAW,EAAC,EACzC,MACF,CAAC;EACH;EACA,OAAO3B,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAewC,oBAAoBA,CACxCb,UAAkB,EAClBc,IAAmB,EACnBC,QAAiB,EACjB;EACArE,YAAY,CACT,4DAA2DsD,UAAW,UAASc,IAAK,GACvF,CAAC;EACD,IAAIzC,OAAO,GAAG,KAAK;EACnB,IAAI2C,QAAQ,GAAGF,IAAI;EACnB,IAAI,CAACE,QAAQ,EAAE;IACbA,QAAQ,GAAGlE,gBAAgB,CAACkD,UAAU,EAAE,UAAU,CAAC;EACrD;EACA,MAAMiB,QAAQ,GAAG7D,WAAW,CAAC4D,QAAQ,EAAE,IAAI,CAAC;EAC5C,IAAIT,WAAmB;EACvB,IAAI;IACFA,WAAW,GAAG/D,uBAAuB,CACnC,aAAa,EACb,CAAC,EACA,sBAAqBwD,UAAW,EACnC,CAAC;IACD,MAAMkB,QAAQ,GAAG,MAAMvD,cAAc,CAACqC,UAAU,EAAEe,QAAQ,CAAC;IAC3DhE,cAAc,CAACmE,QAAQ,EAAED,QAAQ,CAAC;IAClCpE,uBAAuB,CAAC0D,WAAW,EAAG,qBAAoBP,UAAW,EAAC,CAAC;IACvEpD,qBAAqB,CACnB2D,WAAW;IACX;IACC,YAAWP,UAAU,CAACmB,UAAW,OAAMF,QAAQ,CAACE,UAAW,GAC9D,CAAC;IACD9C,OAAO,GAAG,IAAI;EAChB,CAAC,CAAC,OAAO+C,GAAG,EAAE;IACZxE,qBAAqB,CAAC2D,WAAW,EAAG,GAAEa,GAAI,EAAC,CAAC;IAC5CzE,YAAY,CAACyE,GAAG,EAAE,OAAO,CAAC;EAC5B;EACA1E,YAAY,CACT,0DAAyDsD,UAAW,UAASc,IAAK,GACrF,CAAC;EACD,OAAOzC,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAegD,qBAAqBA,CACzCP,IAAmB,EACnBC,QAAiB,EACjB;EACArE,YAAY,CAAE,uDAAsDoE,IAAK,GAAE,CAAC;EAC5E,IAAIzC,OAAO,GAAG,KAAK;EACnB,MAAMC,SAAS,GAAG9B,uBAAuB,CACvC,eAAe,EACf,CAAC,EACA,wBACH,CAAC;EACD,IAAI,CAACsE,IAAI,EAAE;IACTA,IAAI,GAAGhE,gBAAgB,CACpB,MAAKG,SAAS,CAACX,KAAK,CAACgF,QAAQ,CAAC,CAAC,CAAE,WAAU,EAC5C,UACF,CAAC;EACH;EACA,IAAI;IACF,MAAMC,eAAe,GAAG,MAAM3D,eAAe,CAACmD,QAAQ,CAAC;IACvDhE,cAAc,CAACwE,eAAe,EAAEnE,WAAW,CAAC0D,IAAI,EAAE,IAAI,CAAC,CAAC;IACxDlE,qBAAqB,CACnB0B,SAAS,EACR,yBAAwBwC,IAAK,EAAC,EAC/B,SACF,CAAC;IACDzC,OAAO,GAAG,IAAI;EAChB,CAAC,CAAC,OAAOS,KAAK,EAAE;IAAA,IAAA0C,gBAAA;IACd5E,qBAAqB,CACnB0B,SAAS,EACR,8BAA6B,EAAAkD,gBAAA,GAAA1C,KAAK,CAACE,QAAQ,cAAAwC,gBAAA,uBAAdA,gBAAA,CAAgBC,MAAM,KAAI3C,KAAK,CAACI,OAAQ,EAAC,EACvE,MACF,CAAC;EACH;EACAxC,YAAY,CACT,wDAAuD2B,OAAQ,UAASyC,IAAK,GAChF,CAAC;EACD,OAAOzC,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeqD,sBAAsBA,CAACX,QAAiB,EAAE;EAC9D,IAAI1C,OAAO,GAAG,KAAK;EACnB,IAAIC,SAAiB;EACrB,IAAIiC,WAAmB;EACvB,IAAIoB,YAAgC,GAAG,EAAE;EACzC,IAAI;IACFrD,SAAS,GAAG9B,uBAAuB,CACjC,eAAe,EACf,CAAC,EACA,yBACH,CAAC;IACDmF,YAAY,GAAG,MAAMlE,aAAa,CAAC,CAAC;IACpCb,qBAAqB,CACnB0B,SAAS,EACR,0BAAyBqD,YAAY,CAAC9C,MAAO,YAAW,EACzD,SACF,CAAC;EACH,CAAC,CAAC,OAAOC,KAAK,EAAE;IACdlC,qBAAqB,CACnB0B,SAAS,EACR,+BAA8BQ,KAAK,CAACI,OAAQ,EAAC,EAC9C,MACF,CAAC;EACH;EACA,IAAI;IACF,MAAMqB,WAAW,GAAG/D,uBAAuB,CACzC,aAAa,EACbmF,YAAY,CAAC9C,MAAM,EACnB,qBACF,CAAC;IACD,KAAK,MAAMX,QAAQ,IAAIyD,YAAY,EAAE;MACnC,IAAI,CAACZ,QAAQ,EAAE;QACb7C,QAAQ,CAAC+B,KAAK,GAAG9C,YAAY,CAACe,QAAQ,CAACmB,WAAW,CAAC;MACrD;MACAxC,uBAAuB,CAAC0D,WAAW,EAAG,oBAAmBrC,QAAQ,CAACS,GAAI,EAAC,CAAC;MACxE,MAAMqC,QAAQ,GAAGlE,gBAAgB,CAACoB,QAAQ,CAACS,GAAG,EAAE,UAAU,CAAC;MAC3D3B,UAAU,CAAC,UAAU,EAAEkB,QAAQ,EAAE,KAAK,EAAEd,WAAW,CAAC4D,QAAQ,EAAE,IAAI,CAAC,CAAC;IACtE;IACApE,qBAAqB,CACnB2D,WAAW,EACV,GAAEoB,YAAY,CAAC9C,MAAO,qBACzB,CAAC;IACDR,OAAO,GAAG,IAAI;EAChB,CAAC,CAAC,OAAOS,KAAK,EAAE;IACdlC,qBAAqB,CACnB2D,WAAW,EACV,8BAA6BzB,KAAK,CAACI,OAAQ,EAC9C,CAAC;EACH;EACA,OAAOb,OAAO;AAChB"}
@@ -269,6 +269,7 @@ function stopProgressBar(id, message = null) {
269
269
  });
270
270
  }
271
271
  progressBars[id].stop();
272
+ // progressBars[id].render();
272
273
  debugMessage(`cli.Console.stopProgressBar: end [${Object.keys(progressBars).length} bars]`);
273
274
  }
274
275
 
@@ -379,7 +380,7 @@ export function updateProgressIndicator(id, message) {
379
380
  updateProgressBar(id, message);
380
381
  }
381
382
  }
382
- export function stopProgressIndicator(id, message, status = 'none') {
383
+ export function stopProgressIndicator(id, message = null, status = 'none') {
383
384
  if (!progressBars[id]) {
384
385
  switch (status) {
385
386
  case 'none':
@@ -1 +1 @@
1
- {"version":3,"file":"Console.js","names":["frodo","state","MultiBar","Presets","Table","Color","createSpinner","v4","uuidv4","enable","appendTextToFile","utils","progressBars","multiBarContainer","spinner","data","message","newline","getOutputFile","JSON","stringify","console","dir","depth","maxArrayLength","log","process","stdout","write","text","error","stderr","info","warn","debug","curlirize","verboseMessage","getVerbose","debugMessage","getDebug","curlirizeMessage","getCurlirize","printMessage","type","createProgressBar","total","options","clearOnComplete","hideCursor","format","noTTYOutput","opt","legacy","id","create","Object","keys","length","updateProgressBar","increment","stopProgressBar","update","stop","cleanupProgressBars","showSpinner","start","stopSpinner","succeedSpinner","success","warnSpinner","failSpinner","spinSpinner","spin","createProgressIndicator","updateProgressIndicator","stopProgressIndicator","status","cleanupProgressIndicators","createTable","head","table","chars","top","bottom","left","mid","right","style","createKeyValueTable","wordWrap","getObjectDepth","object","Math","max","values","map","hasValues","has","key","addRows","level","keyMap","space","push","brightCyan","hAlign","content","gray","indention","Array","fill","join","concat","createObjectTable"],"sources":["../../src/utils/Console.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { frodo, state } from '@rockcarver/frodo-lib';\nimport {\n ProgressIndicatorStatusType,\n ProgressIndicatorType,\n} from '@rockcarver/frodo-lib/types/utils/Console';\nimport { MultiBar, Presets } from 'cli-progress';\nimport Table from 'cli-table3';\nimport Color from 'colors';\nimport { createSpinner } from 'nanospinner';\nimport { v4 as uuidv4 } from 'uuid';\n\nColor.enable();\n\nconst { appendTextToFile } = frodo.utils;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst progressBars: { [k: string]: any } = {};\nlet multiBarContainer = null;\nlet spinner = null;\n\n/**\n * Output a message in default color to stdout or append to `state.getOutputFile()`\n * @param {string | object} message the message\n */\nfunction data(message: string | object, newline = true) {\n if (!message) return;\n if (state.getOutputFile()) {\n if (typeof message === 'object') {\n message = JSON.stringify(message, null, 2);\n }\n if (newline) {\n message += '\\n';\n }\n appendTextToFile(message, state.getOutputFile());\n } else if (typeof message === 'object') {\n console.dir(message, { depth: 10, maxArrayLength: null });\n } else if (newline) {\n console.log(message);\n } else {\n process.stdout.write(message);\n }\n}\n\n/**\n * Output a default color message to stderr\n * @param {Object} message the message\n */\nfunction text(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else if (newline) {\n console.error(message);\n } else {\n process.stderr.write(message);\n }\n}\n\n/**\n * Output a message in bright cyan to stderr\n * @param {Object} message the message\n */\nfunction info(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else if (newline) {\n console.error(message['brightCyan']);\n } else {\n process.stderr.write(message['brightCyan']);\n }\n}\n\n/**\n * Output a message in yellow to stderr\n * @param {Object} message the message\n */\nfunction warn(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else if (newline) {\n console.error(message['yellow']);\n } else {\n process.stderr.write(message['yellow']);\n }\n}\n\n/**\n * Output a message in bright red to stderr\n * @param {Object} message the message\n */\nfunction error(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else if (newline) {\n console.error(message['brightRed']);\n } else {\n process.stderr.write(message['brightRed']);\n }\n}\n\n/**\n * Output a debug message\n * @param {string | object} message the message\n */\nfunction debug(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 6 });\n } else if (newline) {\n console.error(message['brightMagenta']);\n } else {\n process.stderr.write(message['brightMagenta']);\n }\n}\n\n/**\n * Output a curlirize message\n * @param {string} message the message\n */\nfunction curlirize(message: string) {\n if (!message) return;\n console.error(message['brightBlue']);\n}\n\n/**\n * Output a message in default color to stderr\n * @param {Object} message the message\n */\nexport function verboseMessage(message) {\n if (!message) return;\n if (state.getVerbose()) {\n text(message);\n }\n}\n\n/**\n * Output a debug message\n * @param {Object} message the message\n */\nexport function debugMessage(message) {\n if (!message) return;\n if (state.getDebug()) {\n debug(message);\n }\n}\n\n/**\n * Output a curlirize message\n * @param {Object} message the message\n */\nexport function curlirizeMessage(message) {\n if (!message) return;\n if (state.getCurlirize()) {\n curlirize(message);\n }\n}\n\n/**\n * Prints a string message to console\n *\n * @param {string} message The string message to print\n * @param {string} [type=text] \"text\", \"info\", \"warn\", \"error\" or \"data\". All but\n * type=\"data\" will be written to stderr.\n * @param {boolean} [newline=true] Whether to add a newline at the end of message\n *\n */\nexport function printMessage(message, type = 'text', newline = true) {\n switch (type) {\n case 'data':\n data(message, newline);\n break;\n case 'text':\n text(message, newline);\n break;\n case 'info':\n info(message, newline);\n break;\n case 'warn':\n warn(message, newline);\n break;\n case 'error':\n error(message, newline);\n break;\n default:\n text(message, newline);\n }\n}\n\n/**\n * Creates a progress bar on stderr\n *\n * Example:\n * [========================================] 100% | 49/49 | Analyzing journey - transactional_auth\n *\n * @param {number} total The total number of entries to track progress for\n * @param {string} message optional progress bar message\n * @param {object} options progress bar configuration options\n * @returns {string} progress bar reference id. Save this id to manage (update, stop) the progress bar.\n */\nfunction createProgressBar(\n total: number,\n message: string = null,\n options: object = {\n clearOnComplete: false,\n hideCursor: true,\n format: '[{bar}] {percentage}% | {value}/{total} | {data}',\n noTTYOutput: true,\n }\n): string {\n debugMessage(`cli.Console.createProgressBar: start`);\n let opt = options;\n if (message == null) {\n opt = {\n clearOnComplete: false,\n hideCursor: true,\n format: '[{bar}] {percentage}% | {value}/{total}',\n noTTYOutput: true,\n };\n }\n if (!multiBarContainer) {\n multiBarContainer = new MultiBar(opt, Presets.legacy);\n debugMessage(\n `cli.Console.createProgressBar: initialized multiBarContainer`\n );\n }\n const id = uuidv4();\n progressBars[id] = multiBarContainer.create(total, 0, {\n data: message,\n });\n debugMessage(\n `cli.Console.createProgressBar: end [${id}, ${\n Object.keys(progressBars).length\n } bars]`\n );\n return id;\n}\n\n/**\n * Updates the progress bar by 1\n * @param {string} message optional message to update the progress bar\n *\n */\nfunction updateProgressBar(id: string, message: string = null) {\n if (!progressBars[id]) {\n warn(\n `progressBar is undefined. Make sure to call 'createProgressBar' before calling 'updateProgressBar'.`\n );\n } else if (message) {\n progressBars[id].increment({\n data: message,\n });\n } else {\n progressBars[id].increment();\n }\n}\n\n/**\n * Stop and hide the progress bar\n * @param {*} message optional message to update the progress bar\n */\nfunction stopProgressBar(id: string, message: string = null) {\n debugMessage(`cli.Console.stopProgressBar: start [${id}]`);\n if (!progressBars[id]) {\n warn(\n `progressBar is undefined. Make sure to call 'createProgressBar' before calling 'stopProgressBar'.`\n );\n } else if (message) {\n progressBars[id].update({\n data: message,\n });\n }\n progressBars[id].stop();\n debugMessage(\n `cli.Console.stopProgressBar: end [${\n Object.keys(progressBars).length\n } bars]`\n );\n}\n\n/**\n * Clean-up progress bars\n */\nfunction cleanupProgressBars() {\n debugMessage(`cli.Console.cleanupProgressBars: start`);\n try {\n debugMessage(\n `cli.Console.cleanupProgressBars: stopping ${\n Object.keys(progressBars).length\n } bars`\n );\n multiBarContainer.stop();\n multiBarContainer = null;\n } catch (error) {\n // ignore\n }\n debugMessage(`cli.Console.cleanupProgressBars: end`);\n}\n\n/**\n * Create the spinner\n * @param {String} message optional spinner message\n */\nexport function showSpinner(message) {\n spinner = createSpinner(message).start();\n}\n\n/**\n * Stop the spinner\n * @param {String} message optional message to update the spinner\n */\nexport function stopSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.stop(options);\n }\n}\n\n/**\n * Succeed the spinner. Stop and render success checkmark with optional message.\n * @param {String} message optional message to update the spinner\n */\nexport function succeedSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.success(options);\n }\n}\n\n/**\n * Warn the spinner\n * @param {String} message optional message to update the spinner\n */\nexport function warnSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.warn(options);\n }\n}\n\n/**\n * Fail the spinner\n * @param {String} message optional message to update the spinner\n */\nexport function failSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.error(options);\n }\n}\n\n/**\n * Spin the spinner\n * @param {String} message optional message to update the spinner\n */\nexport function spinSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.update(options);\n spinner.spin();\n }\n}\n\nexport function createProgressIndicator(\n type: ProgressIndicatorType = 'determinate',\n total = 0,\n message = null\n): string {\n if (type === 'determinate') {\n return createProgressBar(total, message);\n } else {\n showSpinner(message);\n }\n}\n\nexport function updateProgressIndicator(id: string, message: string) {\n if (!progressBars[id]) {\n spinSpinner(message);\n } else {\n updateProgressBar(id, message);\n }\n}\n\nexport function stopProgressIndicator(\n id: string,\n message: string,\n status: ProgressIndicatorStatusType = 'none'\n) {\n if (!progressBars[id]) {\n switch (status) {\n case 'none':\n stopSpinner(message);\n break;\n case 'success':\n succeedSpinner(message);\n break;\n case 'warn':\n warnSpinner(message);\n break;\n case 'fail':\n failSpinner(message);\n break;\n default:\n stopSpinner(message);\n break;\n }\n } else {\n stopProgressBar(id, message);\n }\n}\n\nexport function cleanupProgressIndicators() {\n cleanupProgressBars();\n}\n\n/**\n * Create an empty table\n * @param {string[]} head header row as an array of strings\n * @returns {any} an empty table\n */\nexport function createTable(head) {\n const table = new Table({\n head,\n chars: {\n top: '',\n 'top-mid': '',\n 'top-left': '',\n 'top-right': '',\n bottom: '',\n 'bottom-mid': '',\n 'bottom-left': '',\n 'bottom-right': '',\n left: '',\n 'left-mid': '',\n mid: '',\n 'mid-mid': '',\n right: '',\n 'right-mid': '',\n },\n style: { 'padding-left': 0, 'padding-right': 0, head: ['brightCyan'] },\n });\n return table;\n}\n\n/**\n * Create a new key/value table\n * @returns {any} an empty key/value table\n */\nexport function createKeyValueTable() {\n const table = new Table({\n chars: {\n top: '',\n 'top-mid': '',\n 'top-left': '',\n 'top-right': '',\n bottom: '',\n 'bottom-mid': '',\n 'bottom-left': '',\n 'bottom-right': '',\n left: '',\n 'left-mid': '',\n mid: '',\n 'mid-mid': '',\n right: '',\n 'right-mid': '',\n },\n style: { 'padding-left': 0, 'padding-right': 0 },\n wordWrap: true,\n });\n return table;\n}\n\n/**\n * Helper function to determine the total depth of an object\n * @param {Object} object input object\n * @returns {Number} total depth of the input object\n */\nfunction getObjectDepth(object) {\n return Object(object) === object\n ? 1 + Math.max(-1, ...Object.values(object).map(getObjectDepth))\n : 0;\n}\n\n/**\n * Helper function to determine if an object has values\n * @param {Object} object input object\n * @returns {boolean} true of the object or any of its sub-objects contain values, false otherwise\n */\nfunction hasValues(object) {\n let has = false;\n const keys = Object.keys(object);\n for (const key of keys) {\n if (Object(object[key]) !== object[key]) {\n return true;\n }\n has = has || hasValues(object[key]);\n }\n return has;\n}\n\n/**\n * Helper function (recursive) to add rows to an object table\n * @param {object} object object to render\n * @param {number} depth total depth of initial object\n * @param {number} level current level\n * @param {any} table the object table to add the rows to\n * @param {Object} keyMap optional JSON map to map raw config names to human readable names {'raw': 'readable'}\n * @returns the updated object table\n */\nfunction addRows(object, depth, level, table, keyMap) {\n const space = ' ';\n const keys = Object.keys(object);\n for (const key of keys) {\n if (Object(object[key]) !== object[key]) {\n if (level === 1) {\n table.push([\n keyMap[key] ? keyMap[key].brightCyan : key['brightCyan'],\n object[key],\n ]);\n } else {\n table.push([\n {\n hAlign: 'right',\n content: keyMap[key] ? keyMap[key].gray : key.gray,\n },\n object[key],\n ]);\n }\n }\n }\n for (const key of keys) {\n if (Object(object[key]) === object[key]) {\n // only print header if there are any values below\n if (hasValues(object[key])) {\n let indention = new Array(level).fill(space).join('');\n if (level < 3) indention = `\\n${indention}`;\n table.push([\n indention.concat(\n keyMap[key] ? keyMap[key].brightCyan : key['brightCyan']\n ),\n '',\n ]);\n }\n // eslint-disable-next-line no-param-reassign\n table = addRows(object[key], depth, level + 1, table, keyMap);\n }\n }\n return table;\n}\n\n/**\n * Create and populate an object table from any JSON object. Use for describe commands.\n * @param {Object} object JSON object to create\n * @param {Object} keyMap optional JSON map to map raw config names to human readable names {'raw': 'readable'}\n * @returns {any} a table that can be printed to the console\n */\nexport function createObjectTable(object, keyMap = {}) {\n // eslint-disable-next-line no-param-reassign\n const depth = getObjectDepth(object);\n // eslint-disable-next-line no-param-reassign\n const level = 0;\n // eslint-disable-next-line no-param-reassign\n const table = new Table({\n chars: {\n top: '',\n 'top-mid': '',\n 'top-left': '',\n 'top-right': '',\n bottom: '',\n 'bottom-mid': '',\n 'bottom-left': '',\n 'bottom-right': '',\n left: '',\n 'left-mid': '',\n mid: '',\n 'mid-mid': '',\n right: '',\n 'right-mid': '',\n },\n style: { 'padding-left': 0, 'padding-right': 0, head: ['brightCyan'] },\n });\n addRows(object, depth, level + 1, table, keyMap);\n return table;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Console.js","names":["frodo","state","MultiBar","Presets","Table","Color","createSpinner","v4","uuidv4","enable","appendTextToFile","utils","progressBars","multiBarContainer","spinner","data","message","newline","getOutputFile","JSON","stringify","console","dir","depth","maxArrayLength","log","process","stdout","write","text","error","stderr","info","warn","debug","curlirize","verboseMessage","getVerbose","debugMessage","getDebug","curlirizeMessage","getCurlirize","printMessage","type","createProgressBar","total","options","clearOnComplete","hideCursor","format","noTTYOutput","opt","legacy","id","create","Object","keys","length","updateProgressBar","increment","stopProgressBar","update","stop","cleanupProgressBars","showSpinner","start","stopSpinner","succeedSpinner","success","warnSpinner","failSpinner","spinSpinner","spin","createProgressIndicator","updateProgressIndicator","stopProgressIndicator","status","cleanupProgressIndicators","createTable","head","table","chars","top","bottom","left","mid","right","style","createKeyValueTable","wordWrap","getObjectDepth","object","Math","max","values","map","hasValues","has","key","addRows","level","keyMap","space","push","brightCyan","hAlign","content","gray","indention","Array","fill","join","concat","createObjectTable"],"sources":["../../src/utils/Console.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { frodo, state } from '@rockcarver/frodo-lib';\nimport {\n ProgressIndicatorStatusType,\n ProgressIndicatorType,\n} from '@rockcarver/frodo-lib/types/utils/Console';\nimport { MultiBar, Presets } from 'cli-progress';\nimport Table from 'cli-table3';\nimport Color from 'colors';\nimport { createSpinner } from 'nanospinner';\nimport { v4 as uuidv4 } from 'uuid';\n\nColor.enable();\n\nconst { appendTextToFile } = frodo.utils;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst progressBars: { [k: string]: any } = {};\nlet multiBarContainer = null;\nlet spinner = null;\n\n/**\n * Output a message in default color to stdout or append to `state.getOutputFile()`\n * @param {string | object} message the message\n */\nfunction data(message: string | object, newline = true) {\n if (!message) return;\n if (state.getOutputFile()) {\n if (typeof message === 'object') {\n message = JSON.stringify(message, null, 2);\n }\n if (newline) {\n message += '\\n';\n }\n appendTextToFile(message, state.getOutputFile());\n } else if (typeof message === 'object') {\n console.dir(message, { depth: 10, maxArrayLength: null });\n } else if (newline) {\n console.log(message);\n } else {\n process.stdout.write(message);\n }\n}\n\n/**\n * Output a default color message to stderr\n * @param {Object} message the message\n */\nfunction text(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else if (newline) {\n console.error(message);\n } else {\n process.stderr.write(message);\n }\n}\n\n/**\n * Output a message in bright cyan to stderr\n * @param {Object} message the message\n */\nfunction info(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else if (newline) {\n console.error(message['brightCyan']);\n } else {\n process.stderr.write(message['brightCyan']);\n }\n}\n\n/**\n * Output a message in yellow to stderr\n * @param {Object} message the message\n */\nfunction warn(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else if (newline) {\n console.error(message['yellow']);\n } else {\n process.stderr.write(message['yellow']);\n }\n}\n\n/**\n * Output a message in bright red to stderr\n * @param {Object} message the message\n */\nfunction error(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else if (newline) {\n console.error(message['brightRed']);\n } else {\n process.stderr.write(message['brightRed']);\n }\n}\n\n/**\n * Output a debug message\n * @param {string | object} message the message\n */\nfunction debug(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 6 });\n } else if (newline) {\n console.error(message['brightMagenta']);\n } else {\n process.stderr.write(message['brightMagenta']);\n }\n}\n\n/**\n * Output a curlirize message\n * @param {string} message the message\n */\nfunction curlirize(message: string) {\n if (!message) return;\n console.error(message['brightBlue']);\n}\n\n/**\n * Output a message in default color to stderr\n * @param {Object} message the message\n */\nexport function verboseMessage(message) {\n if (!message) return;\n if (state.getVerbose()) {\n text(message);\n }\n}\n\n/**\n * Output a debug message\n * @param {Object} message the message\n */\nexport function debugMessage(message) {\n if (!message) return;\n if (state.getDebug()) {\n debug(message);\n }\n}\n\n/**\n * Output a curlirize message\n * @param {Object} message the message\n */\nexport function curlirizeMessage(message) {\n if (!message) return;\n if (state.getCurlirize()) {\n curlirize(message);\n }\n}\n\n/**\n * Prints a string message to console\n *\n * @param {string} message The string message to print\n * @param {string} [type=text] \"text\", \"info\", \"warn\", \"error\" or \"data\". All but\n * type=\"data\" will be written to stderr.\n * @param {boolean} [newline=true] Whether to add a newline at the end of message\n *\n */\nexport function printMessage(message, type = 'text', newline = true) {\n switch (type) {\n case 'data':\n data(message, newline);\n break;\n case 'text':\n text(message, newline);\n break;\n case 'info':\n info(message, newline);\n break;\n case 'warn':\n warn(message, newline);\n break;\n case 'error':\n error(message, newline);\n break;\n default:\n text(message, newline);\n }\n}\n\n/**\n * Creates a progress bar on stderr\n *\n * Example:\n * [========================================] 100% | 49/49 | Analyzing journey - transactional_auth\n *\n * @param {number} total The total number of entries to track progress for\n * @param {string} message optional progress bar message\n * @param {object} options progress bar configuration options\n * @returns {string} progress bar reference id. Save this id to manage (update, stop) the progress bar.\n */\nfunction createProgressBar(\n total: number,\n message: string = null,\n options: object = {\n clearOnComplete: false,\n hideCursor: true,\n format: '[{bar}] {percentage}% | {value}/{total} | {data}',\n noTTYOutput: true,\n }\n): string {\n debugMessage(`cli.Console.createProgressBar: start`);\n let opt = options;\n if (message == null) {\n opt = {\n clearOnComplete: false,\n hideCursor: true,\n format: '[{bar}] {percentage}% | {value}/{total}',\n noTTYOutput: true,\n };\n }\n if (!multiBarContainer) {\n multiBarContainer = new MultiBar(opt, Presets.legacy);\n debugMessage(\n `cli.Console.createProgressBar: initialized multiBarContainer`\n );\n }\n const id = uuidv4();\n progressBars[id] = multiBarContainer.create(total, 0, {\n data: message,\n });\n debugMessage(\n `cli.Console.createProgressBar: end [${id}, ${\n Object.keys(progressBars).length\n } bars]`\n );\n return id;\n}\n\n/**\n * Updates the progress bar by 1\n * @param {string} message optional message to update the progress bar\n *\n */\nfunction updateProgressBar(id: string, message: string = null) {\n if (!progressBars[id]) {\n warn(\n `progressBar is undefined. Make sure to call 'createProgressBar' before calling 'updateProgressBar'.`\n );\n } else if (message) {\n progressBars[id].increment({\n data: message,\n });\n } else {\n progressBars[id].increment();\n }\n}\n\n/**\n * Stop and hide the progress bar\n * @param {*} message optional message to update the progress bar\n */\nfunction stopProgressBar(id: string, message: string = null) {\n debugMessage(`cli.Console.stopProgressBar: start [${id}]`);\n if (!progressBars[id]) {\n warn(\n `progressBar is undefined. Make sure to call 'createProgressBar' before calling 'stopProgressBar'.`\n );\n } else if (message) {\n progressBars[id].update({\n data: message,\n });\n }\n progressBars[id].stop();\n // progressBars[id].render();\n debugMessage(\n `cli.Console.stopProgressBar: end [${\n Object.keys(progressBars).length\n } bars]`\n );\n}\n\n/**\n * Clean-up progress bars\n */\nfunction cleanupProgressBars() {\n debugMessage(`cli.Console.cleanupProgressBars: start`);\n try {\n debugMessage(\n `cli.Console.cleanupProgressBars: stopping ${\n Object.keys(progressBars).length\n } bars`\n );\n multiBarContainer.stop();\n multiBarContainer = null;\n } catch (error) {\n // ignore\n }\n debugMessage(`cli.Console.cleanupProgressBars: end`);\n}\n\n/**\n * Create the spinner\n * @param {String} message optional spinner message\n */\nexport function showSpinner(message) {\n spinner = createSpinner(message).start();\n}\n\n/**\n * Stop the spinner\n * @param {String} message optional message to update the spinner\n */\nexport function stopSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.stop(options);\n }\n}\n\n/**\n * Succeed the spinner. Stop and render success checkmark with optional message.\n * @param {String} message optional message to update the spinner\n */\nexport function succeedSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.success(options);\n }\n}\n\n/**\n * Warn the spinner\n * @param {String} message optional message to update the spinner\n */\nexport function warnSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.warn(options);\n }\n}\n\n/**\n * Fail the spinner\n * @param {String} message optional message to update the spinner\n */\nexport function failSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.error(options);\n }\n}\n\n/**\n * Spin the spinner\n * @param {String} message optional message to update the spinner\n */\nexport function spinSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.update(options);\n spinner.spin();\n }\n}\n\nexport function createProgressIndicator(\n type: ProgressIndicatorType = 'determinate',\n total = 0,\n message = null\n): string {\n if (type === 'determinate') {\n return createProgressBar(total, message);\n } else {\n showSpinner(message);\n }\n}\n\nexport function updateProgressIndicator(id: string, message: string) {\n if (!progressBars[id]) {\n spinSpinner(message);\n } else {\n updateProgressBar(id, message);\n }\n}\n\nexport function stopProgressIndicator(\n id: string,\n message: string = null,\n status: ProgressIndicatorStatusType = 'none'\n) {\n if (!progressBars[id]) {\n switch (status) {\n case 'none':\n stopSpinner(message);\n break;\n case 'success':\n succeedSpinner(message);\n break;\n case 'warn':\n warnSpinner(message);\n break;\n case 'fail':\n failSpinner(message);\n break;\n default:\n stopSpinner(message);\n break;\n }\n } else {\n stopProgressBar(id, message);\n }\n}\n\nexport function cleanupProgressIndicators() {\n cleanupProgressBars();\n}\n\n/**\n * Create an empty table\n * @param {string[]} head header row as an array of strings\n * @returns {any} an empty table\n */\nexport function createTable(head) {\n const table = new Table({\n head,\n chars: {\n top: '',\n 'top-mid': '',\n 'top-left': '',\n 'top-right': '',\n bottom: '',\n 'bottom-mid': '',\n 'bottom-left': '',\n 'bottom-right': '',\n left: '',\n 'left-mid': '',\n mid: '',\n 'mid-mid': '',\n right: '',\n 'right-mid': '',\n },\n style: { 'padding-left': 0, 'padding-right': 0, head: ['brightCyan'] },\n });\n return table;\n}\n\n/**\n * Create a new key/value table\n * @returns {any} an empty key/value table\n */\nexport function createKeyValueTable() {\n const table = new Table({\n chars: {\n top: '',\n 'top-mid': '',\n 'top-left': '',\n 'top-right': '',\n bottom: '',\n 'bottom-mid': '',\n 'bottom-left': '',\n 'bottom-right': '',\n left: '',\n 'left-mid': '',\n mid: '',\n 'mid-mid': '',\n right: '',\n 'right-mid': '',\n },\n style: { 'padding-left': 0, 'padding-right': 0 },\n wordWrap: true,\n });\n return table;\n}\n\n/**\n * Helper function to determine the total depth of an object\n * @param {Object} object input object\n * @returns {Number} total depth of the input object\n */\nfunction getObjectDepth(object) {\n return Object(object) === object\n ? 1 + Math.max(-1, ...Object.values(object).map(getObjectDepth))\n : 0;\n}\n\n/**\n * Helper function to determine if an object has values\n * @param {Object} object input object\n * @returns {boolean} true of the object or any of its sub-objects contain values, false otherwise\n */\nfunction hasValues(object) {\n let has = false;\n const keys = Object.keys(object);\n for (const key of keys) {\n if (Object(object[key]) !== object[key]) {\n return true;\n }\n has = has || hasValues(object[key]);\n }\n return has;\n}\n\n/**\n * Helper function (recursive) to add rows to an object table\n * @param {object} object object to render\n * @param {number} depth total depth of initial object\n * @param {number} level current level\n * @param {any} table the object table to add the rows to\n * @param {Object} keyMap optional JSON map to map raw config names to human readable names {'raw': 'readable'}\n * @returns the updated object table\n */\nfunction addRows(object, depth, level, table, keyMap) {\n const space = ' ';\n const keys = Object.keys(object);\n for (const key of keys) {\n if (Object(object[key]) !== object[key]) {\n if (level === 1) {\n table.push([\n keyMap[key] ? keyMap[key].brightCyan : key['brightCyan'],\n object[key],\n ]);\n } else {\n table.push([\n {\n hAlign: 'right',\n content: keyMap[key] ? keyMap[key].gray : key.gray,\n },\n object[key],\n ]);\n }\n }\n }\n for (const key of keys) {\n if (Object(object[key]) === object[key]) {\n // only print header if there are any values below\n if (hasValues(object[key])) {\n let indention = new Array(level).fill(space).join('');\n if (level < 3) indention = `\\n${indention}`;\n table.push([\n indention.concat(\n keyMap[key] ? keyMap[key].brightCyan : key['brightCyan']\n ),\n '',\n ]);\n }\n // eslint-disable-next-line no-param-reassign\n table = addRows(object[key], depth, level + 1, table, keyMap);\n }\n }\n return table;\n}\n\n/**\n * Create and populate an object table from any JSON object. Use for describe commands.\n * @param {Object} object JSON object to create\n * @param {Object} keyMap optional JSON map to map raw config names to human readable names {'raw': 'readable'}\n * @returns {any} a table that can be printed to the console\n */\nexport function createObjectTable(object, keyMap = {}) {\n // eslint-disable-next-line no-param-reassign\n const depth = getObjectDepth(object);\n // eslint-disable-next-line no-param-reassign\n const level = 0;\n // eslint-disable-next-line no-param-reassign\n const table = new Table({\n chars: {\n top: '',\n 'top-mid': '',\n 'top-left': '',\n 'top-right': '',\n bottom: '',\n 'bottom-mid': '',\n 'bottom-left': '',\n 'bottom-right': '',\n left: '',\n 'left-mid': '',\n mid: '',\n 'mid-mid': '',\n right: '',\n 'right-mid': '',\n },\n style: { 'padding-left': 0, 'padding-right': 0, head: ['brightCyan'] },\n });\n addRows(object, depth, level + 1, table, keyMap);\n return table;\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rockcarver/frodo-cli",
3
- "version": "2.0.0-33",
3
+ "version": "2.0.0-35",
4
4
  "type": "module",
5
5
  "description": "A command line interface to manage ForgeRock Identity Cloud tenants, ForgeOps deployments, and classic deployments.",
6
6
  "keywords": [
@@ -72,6 +72,14 @@
72
72
  "name": "Ali Falahi",
73
73
  "email": "ali@falahi.com"
74
74
  },
75
+ {
76
+ "name": "Huston Franklin",
77
+ "email": "hfranklin@trivir.com"
78
+ },
79
+ {
80
+ "name": "Preston Hales",
81
+ "email": "phales@trivir.com"
82
+ },
75
83
  {
76
84
  "name": "Nick Hangartner",
77
85
  "email": "nhangartner@gmail.com"
@@ -108,7 +116,7 @@
108
116
  ]
109
117
  },
110
118
  "dependencies": {
111
- "@rockcarver/frodo-lib": "2.0.0-51",
119
+ "@rockcarver/frodo-lib": "2.0.0-52",
112
120
  "chokidar": "^3.5.3",
113
121
  "cli-progress": "^3.11.2",
114
122
  "cli-table3": "^0.6.3",