@forge/cli-shared 3.8.0 → 3.9.0-next.0

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.
@@ -32,7 +32,10 @@ export declare class CommandLineUI implements UI {
32
32
  promptForList(message: string, choices: string[]): Promise<string>;
33
33
  promptForTable(message: string, infoMessage: string, columns: string[], choices: object[]): Promise<number[]>;
34
34
  promptForSingleChoiceTable(message: string, infoMessage: string, columns: string[], choices: object[]): Promise<number>;
35
- table<Key extends string>(head: [Key, string][], data: Record<Key, TableCell>[] | undefined | null, { json, emptyMessage, preMessage, postMessage, format }?: TableOptions<Key>): void;
35
+ table<Key extends string>(head: [Key, string][], data: Record<Key, TableCell>[] | undefined | null, { json, emptyMessage, preMessage, postMessage, format, groupRows }?: TableOptions<Key>): void;
36
+ private formatTableValue;
37
+ private shouldLogTableCell;
38
+ private logTable;
36
39
  private log;
37
40
  private logSuccess;
38
41
  private logError;
@@ -1 +1 @@
1
- {"version":3,"file":"command-line-ui.d.ts","sourceRoot":"","sources":["../../src/ui/command-line-ui.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command-line-ui.d.ts","sourceRoot":"","sources":["../../src/ui/command-line-ui.ts"],"names":[],"mappings":"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"}
@@ -185,7 +185,7 @@ class CommandLineUI {
185
185
  ]);
186
186
  return choice;
187
187
  }
188
- table(head, data, { json, emptyMessage, preMessage, postMessage, format = {} } = {}) {
188
+ table(head, data, { json, emptyMessage, preMessage, postMessage, format, groupRows } = {}) {
189
189
  if (json) {
190
190
  this.log(JSON.stringify(data, null, 2));
191
191
  return;
@@ -197,18 +197,52 @@ class CommandLineUI {
197
197
  if (preMessage) {
198
198
  this.info(preMessage);
199
199
  }
200
+ this.logTable(head, data, { format, groupRows });
201
+ if (postMessage) {
202
+ this.info(postMessage);
203
+ }
204
+ }
205
+ formatTableValue(key, value, format = {}) {
206
+ const formatter = format[key];
207
+ return formatter ? formatter(value) : value;
208
+ }
209
+ shouldLogTableCell(key, formattedValue, prevRow, format, groupRows = {}) {
210
+ if (!groupRows[key]) {
211
+ return true;
212
+ }
213
+ if (!prevRow) {
214
+ return true;
215
+ }
216
+ const prevValue = prevRow[key];
217
+ const prevFormattedValue = this.formatTableValue(key, prevValue, format);
218
+ return formattedValue !== prevFormattedValue;
219
+ }
220
+ logTable(head, data, { format, groupRows }) {
200
221
  const table = new cli_table3_1.default(Object.assign(Object.assign({}, log_color_1.TableStyle.default), { head: head.map(([, heading]) => heading) }));
201
222
  if (data) {
202
- table.push(...data.map((row) => head.map(([key]) => {
203
- const value = row[key];
204
- const formatter = format[key];
205
- return formatter ? formatter(value) : value;
206
- })));
223
+ const rowSpanByKey = {};
224
+ for (let i = data.length - 1; i >= 0; i--) {
225
+ const tableRow = [];
226
+ head.forEach(([key]) => {
227
+ rowSpanByKey[key] || (rowSpanByKey[key] = 1);
228
+ const row = data[i];
229
+ const value = row[key];
230
+ const formattedValue = this.formatTableValue(key, value, format);
231
+ if (this.shouldLogTableCell(key, formattedValue, data[i - 1], format, groupRows)) {
232
+ tableRow.push({
233
+ rowSpan: rowSpanByKey[key],
234
+ content: formattedValue
235
+ });
236
+ rowSpanByKey[key] = 1;
237
+ }
238
+ else {
239
+ rowSpanByKey[key]++;
240
+ }
241
+ });
242
+ table.unshift(tableRow);
243
+ }
207
244
  }
208
245
  this.info(table.toString());
209
- if (postMessage) {
210
- this.info(postMessage);
211
- }
212
246
  }
213
247
  log(message, progressLogType = ProgressLogType.other) {
214
248
  let msg = message;
package/out/ui/ui.d.ts CHANGED
@@ -17,6 +17,9 @@ export declare type TableOptions<Key extends string> = {
17
17
  format?: {
18
18
  [K in Key]?: (value: TableCell) => string;
19
19
  };
20
+ groupRows?: {
21
+ [K in Key]?: boolean;
22
+ };
20
23
  };
21
24
  export interface UI extends Logger, Prompt {
22
25
  emptyLine(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/ui/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,WAAW,MAAM;IACrB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvE,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClD,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9G,0BAA0B,CACxB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,MAAM,CAAC,CAAC;CACpB;AAED,oBAAY,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAE5D,oBAAY,YAAY,CAAC,GAAG,SAAS,MAAM,IAAI;IAC7C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE;SAAG,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,MAAM;KAAE,CAAC;CACxD,CAAC;AAEF,MAAM,WAAW,EAAG,SAAQ,MAAM,EAAE,MAAM;IACxC,SAAS,IAAI,IAAI,CAAC;IAElB,eAAe,CAAC,MAAM,EACpB,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,EAC/B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,cAAc,CAAC,GAClE,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB,uBAAuB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEpG,KAAK,CAAC,GAAG,SAAS,MAAM,EACtB,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EACrB,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,GAAG,SAAS,GAAG,IAAI,EACjD,OAAO,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,GAC1B,IAAI,CAAC;CACT"}
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/ui/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,WAAW,MAAM;IACrB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvE,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClD,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9G,0BAA0B,CACxB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,MAAM,CAAC,CAAC;CACpB;AAED,oBAAY,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAE5D,oBAAY,YAAY,CAAC,GAAG,SAAS,MAAM,IAAI;IAC7C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE;SAAG,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,MAAM;KAAE,CAAC;IACvD,SAAS,CAAC,EAAE;SAAG,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,OAAO;KAAE,CAAC;CACtC,CAAC;AAEF,MAAM,WAAW,EAAG,SAAQ,MAAM,EAAE,MAAM;IACxC,SAAS,IAAI,IAAI,CAAC;IAElB,eAAe,CAAC,MAAM,EACpB,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,EAC/B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,cAAc,CAAC,GAClE,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB,uBAAuB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEpG,KAAK,CAAC,GAAG,SAAS,MAAM,EACtB,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EACrB,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,GAAG,SAAS,GAAG,IAAI,EACjD,OAAO,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,GAC1B,IAAI,CAAC;CACT"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/cli-shared",
3
- "version": "3.8.0",
3
+ "version": "3.9.0-next.0",
4
4
  "description": "Common functionality for Forge CLI",
5
5
  "author": "Atlassian",
6
6
  "license": "UNLICENSED",