@mittwald/cli 1.0.0-alpha.7 → 1.0.0-alpha.9

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 (263) hide show
  1. package/README.md +129 -117
  2. package/dist/esm/BaseCommand.d.ts +1 -1
  3. package/dist/esm/DeleteBaseCommand.d.ts +6 -9
  4. package/dist/esm/DeleteBaseCommand.js +27 -21
  5. package/dist/esm/ExtendedBaseCommand.d.ts +1 -1
  6. package/dist/esm/Formatter.d.ts +5 -2
  7. package/dist/esm/Formatter.js +7 -2
  8. package/dist/esm/GetBaseCommand.d.ts +1 -1
  9. package/dist/esm/Helpers.d.ts +1 -0
  10. package/dist/esm/Helpers.js +7 -1
  11. package/dist/esm/ListBaseCommand.d.ts +1 -1
  12. package/dist/esm/ListBaseCommand.js +2 -2
  13. package/dist/esm/Printer.d.ts +6 -7
  14. package/dist/esm/Printer.js +3 -3
  15. package/dist/esm/Translator.d.ts +1 -0
  16. package/dist/esm/Translator.js +12 -1
  17. package/dist/esm/commands/app/delete.d.ts +1 -1
  18. package/dist/esm/commands/app/delete.js +1 -1
  19. package/dist/esm/commands/app/dependency/listSystemsoftwareversions.d.ts +1 -1
  20. package/dist/esm/commands/app/install/wordpress.d.ts +1 -2
  21. package/dist/esm/commands/app/install/wordpress.js +5 -9
  22. package/dist/esm/commands/app/list.d.ts +1 -1
  23. package/dist/esm/commands/app/versions.d.ts +1 -1
  24. package/dist/esm/commands/context/get.d.ts +10 -0
  25. package/dist/esm/commands/context/get.js +39 -0
  26. package/dist/esm/commands/context/set.d.ts +11 -0
  27. package/dist/esm/commands/context/set.js +37 -0
  28. package/dist/esm/commands/conversation/close.d.ts +1 -1
  29. package/dist/esm/commands/conversation/create.d.ts +1 -1
  30. package/dist/esm/commands/conversation/list.js +2 -2
  31. package/dist/esm/commands/conversation/reply.d.ts +1 -1
  32. package/dist/esm/commands/conversation/show.d.ts +1 -1
  33. package/dist/esm/commands/conversation/show.js +7 -7
  34. package/dist/esm/commands/conversation/show2.js +6 -3
  35. package/dist/esm/commands/domain/list.d.ts +12 -4
  36. package/dist/esm/commands/domain/list.js +16 -2
  37. package/dist/esm/commands/domain/virtualhost/list.js +10 -7
  38. package/dist/esm/commands/login/reset.d.ts +12 -0
  39. package/dist/esm/commands/login/reset.js +39 -0
  40. package/dist/esm/commands/login/status.d.ts +1 -1
  41. package/dist/esm/commands/login/token.d.ts +2 -1
  42. package/dist/esm/commands/login/token.js +1 -0
  43. package/dist/esm/commands/mail/address/create.d.ts +12 -4
  44. package/dist/esm/commands/mail/address/create.js +35 -26
  45. package/dist/esm/commands/mail/address/delete.d.ts +1 -0
  46. package/dist/esm/commands/mail/address/list.d.ts +11 -3
  47. package/dist/esm/commands/mail/address/list.js +23 -7
  48. package/dist/esm/commands/mail/deliverybox/list.d.ts +1 -1
  49. package/dist/esm/commands/mail/deliverybox/list.js +2 -2
  50. package/dist/esm/commands/org/list.js +1 -1
  51. package/dist/esm/commands/project/backup/list.d.ts +12 -5
  52. package/dist/esm/commands/project/backup/list.js +17 -9
  53. package/dist/esm/commands/project/create.d.ts +12 -4
  54. package/dist/esm/commands/project/create.js +32 -26
  55. package/dist/esm/commands/project/cronjob/execution/get.d.ts +15 -2
  56. package/dist/esm/commands/project/cronjob/execution/get.js +26 -5
  57. package/dist/esm/commands/project/cronjob/execution/list.d.ts +11 -4
  58. package/dist/esm/commands/project/cronjob/execution/list.js +27 -7
  59. package/dist/esm/commands/project/cronjob/execution/logs.d.ts +15 -0
  60. package/dist/esm/commands/project/cronjob/execution/logs.js +74 -0
  61. package/dist/esm/commands/project/cronjob/list.d.ts +12 -4
  62. package/dist/esm/commands/project/cronjob/list.js +24 -5
  63. package/dist/esm/commands/project/delete.d.ts +2 -1
  64. package/dist/esm/commands/project/delete.js +5 -11
  65. package/dist/esm/commands/project/filesystem/usage.d.ts +13 -3
  66. package/dist/esm/commands/project/filesystem/usage.js +51 -9
  67. package/dist/esm/commands/project/get.d.ts +13 -3
  68. package/dist/esm/commands/project/get.js +76 -9
  69. package/dist/esm/commands/project/invite/list-own.js +2 -2
  70. package/dist/esm/commands/project/invite/list.d.ts +1 -1
  71. package/dist/esm/commands/project/invite/list.js +2 -2
  72. package/dist/esm/commands/project/{list2.d.ts → list-react.d.ts} +3 -1
  73. package/dist/esm/commands/project/list-react.js +42 -0
  74. package/dist/esm/commands/project/membership/list-own.js +2 -2
  75. package/dist/esm/commands/project/membership/list.d.ts +1 -1
  76. package/dist/esm/commands/project/membership/list.js +2 -2
  77. package/dist/esm/commands/project/ssh.d.ts +2 -2
  78. package/dist/esm/commands/project/ssh.js +3 -8
  79. package/dist/esm/commands/project/update.d.ts +2 -2
  80. package/dist/esm/commands/project/update.js +6 -9
  81. package/dist/esm/commands/user/api-token/create.d.ts +9 -3
  82. package/dist/esm/commands/user/api-token/create.js +33 -15
  83. package/dist/esm/commands/user/api-token/list.js +4 -2
  84. package/dist/esm/commands/user/api-token/revoke.d.ts +8 -3
  85. package/dist/esm/commands/user/api-token/revoke.js +6 -6
  86. package/dist/esm/commands/user/session/list.js +4 -2
  87. package/dist/esm/commands/user/ssh-key/create.d.ts +6 -3
  88. package/dist/esm/commands/user/ssh-key/create.js +35 -18
  89. package/dist/esm/commands/user/ssh-key/delete.d.ts +5 -4
  90. package/dist/esm/commands/user/ssh-key/delete.js +7 -26
  91. package/dist/esm/lib/bytes.d.ts +1 -0
  92. package/dist/esm/lib/bytes.js +16 -0
  93. package/dist/esm/lib/context.d.ts +16 -0
  94. package/dist/esm/lib/context.js +42 -0
  95. package/dist/esm/lib/context_flags.d.ts +18 -0
  96. package/dist/esm/lib/context_flags.js +42 -0
  97. package/dist/esm/lib/project/flags.d.ts +5 -0
  98. package/dist/esm/lib/project/flags.js +3 -0
  99. package/dist/esm/lib/server/flags.d.ts +5 -0
  100. package/dist/esm/lib/server/flags.js +3 -0
  101. package/dist/esm/lib/viewhelpers/date.d.ts +2 -1
  102. package/dist/esm/lib/viewhelpers/date.js +9 -2
  103. package/dist/esm/lib/viewhelpers/removeLineBreaks.d.ts +1 -0
  104. package/dist/esm/lib/viewhelpers/removeLineBreaks.js +1 -0
  105. package/dist/esm/rendering/lib/getTerminalWidth.d.ts +1 -0
  106. package/dist/esm/rendering/lib/getTerminalWidth.js +2 -0
  107. package/dist/esm/rendering/react/ComponentPrinter.d.ts +7 -0
  108. package/dist/esm/rendering/react/ComponentPrinter.js +13 -0
  109. package/dist/esm/rendering/react/ExecRenderBaseCommand.d.ts +8 -0
  110. package/dist/esm/rendering/react/ExecRenderBaseCommand.js +15 -0
  111. package/dist/esm/rendering/react/RenderBaseCommand.d.ts +12 -0
  112. package/dist/esm/rendering/react/RenderBaseCommand.js +36 -4
  113. package/dist/esm/rendering/react/components/ByteFormat.d.ts +4 -0
  114. package/dist/esm/rendering/react/components/ByteFormat.js +12 -0
  115. package/dist/esm/rendering/react/components/{ConversationMessage.js → Conversation/ConversationMessage.js} +1 -1
  116. package/dist/esm/rendering/react/components/Conversation/ConversationMessages.d.ts +8 -0
  117. package/dist/esm/rendering/react/components/Conversation/ConversationMessages.js +13 -0
  118. package/dist/esm/rendering/react/components/{ConversationMeta.js → Conversation/ConversationMeta.js} +7 -3
  119. package/dist/esm/rendering/react/components/CreatedAt.d.ts +8 -0
  120. package/dist/esm/rendering/react/components/CreatedAt.js +10 -0
  121. package/dist/esm/rendering/react/components/Filename.d.ts +4 -0
  122. package/dist/esm/rendering/react/components/Filename.js +5 -0
  123. package/dist/esm/rendering/react/components/FormattedDate.d.ts +7 -0
  124. package/dist/esm/rendering/react/components/FormattedDate.js +18 -0
  125. package/dist/esm/rendering/react/components/Header.d.ts +2 -2
  126. package/dist/esm/rendering/react/components/IDAndShortID.d.ts +7 -0
  127. package/dist/esm/rendering/react/components/IDAndShortID.js +6 -0
  128. package/dist/esm/rendering/react/components/JSONView.d.ts +7 -0
  129. package/dist/esm/rendering/react/components/JSONView.js +3 -0
  130. package/dist/esm/rendering/react/components/ListItem.d.ts +3 -0
  131. package/dist/esm/rendering/react/components/ListItem.js +5 -0
  132. package/dist/esm/rendering/react/components/Note.d.ts +10 -0
  133. package/dist/esm/rendering/react/components/Note.js +8 -0
  134. package/dist/esm/rendering/react/components/ProjectEnabled.d.ts +6 -0
  135. package/dist/esm/rendering/react/components/ProjectEnabled.js +9 -0
  136. package/dist/esm/rendering/react/components/ProjectReadiness.d.ts +7 -0
  137. package/dist/esm/rendering/react/components/ProjectReadiness.js +16 -0
  138. package/dist/esm/rendering/react/components/ProjectStatus.d.ts +7 -0
  139. package/dist/esm/rendering/react/components/ProjectStatus.js +8 -0
  140. package/dist/esm/rendering/react/components/Render.d.ts +6 -0
  141. package/dist/esm/rendering/react/components/Render.js +5 -0
  142. package/dist/esm/rendering/react/components/SingleResult.d.ts +10 -0
  143. package/dist/esm/rendering/react/components/SingleResult.js +15 -0
  144. package/dist/esm/rendering/react/components/Success.d.ts +9 -0
  145. package/dist/esm/rendering/react/components/Success.js +6 -0
  146. package/dist/esm/rendering/react/components/Table/BodyCell.d.ts +7 -0
  147. package/dist/esm/rendering/react/components/Table/BodyCell.js +7 -0
  148. package/dist/esm/rendering/react/components/Table/BodyRow.d.ts +7 -0
  149. package/dist/esm/rendering/react/components/Table/BodyRow.js +7 -0
  150. package/dist/esm/rendering/react/components/Table/BodyRows.d.ts +7 -0
  151. package/dist/esm/rendering/react/components/Table/BodyRows.js +6 -0
  152. package/dist/esm/rendering/react/components/Table/CellData.d.ts +6 -0
  153. package/dist/esm/rendering/react/components/Table/CellData.js +32 -0
  154. package/dist/esm/rendering/react/components/Table/CellLayout.d.ts +8 -0
  155. package/dist/esm/rendering/react/components/Table/CellLayout.js +17 -0
  156. package/dist/esm/rendering/react/components/Table/HeaderCell.d.ts +7 -0
  157. package/dist/esm/rendering/react/components/Table/HeaderCell.js +7 -0
  158. package/dist/esm/rendering/react/components/Table/HeaderRow.d.ts +8 -0
  159. package/dist/esm/rendering/react/components/Table/HeaderRow.js +7 -0
  160. package/dist/esm/rendering/react/components/Table/RowLayout.d.ts +5 -0
  161. package/dist/esm/rendering/react/components/Table/RowLayout.js +3 -0
  162. package/dist/esm/rendering/react/components/Table/Table.d.ts +10 -0
  163. package/dist/esm/rendering/react/components/Table/Table.js +21 -0
  164. package/dist/esm/rendering/react/components/Table/context.d.ts +9 -0
  165. package/dist/esm/rendering/react/components/Table/context.js +7 -0
  166. package/dist/esm/rendering/react/components/Table/index.d.ts +1 -0
  167. package/dist/esm/rendering/react/components/Table/index.js +1 -0
  168. package/dist/esm/rendering/react/components/Table/model/Cell.d.ts +19 -0
  169. package/dist/esm/rendering/react/components/Table/model/Cell.js +24 -0
  170. package/dist/esm/rendering/react/components/Table/model/Column.d.ts +16 -0
  171. package/dist/esm/rendering/react/components/Table/model/Column.js +35 -0
  172. package/dist/esm/rendering/react/components/Table/model/ColumnName.d.ts +7 -0
  173. package/dist/esm/rendering/react/components/Table/model/ColumnName.js +17 -0
  174. package/dist/esm/rendering/react/components/Table/model/ColumnOptions.d.ts +25 -0
  175. package/dist/esm/rendering/react/components/Table/model/ColumnOptions.js +41 -0
  176. package/dist/esm/rendering/react/components/Table/model/Row.d.ts +14 -0
  177. package/dist/esm/rendering/react/components/Table/model/Row.js +37 -0
  178. package/dist/esm/rendering/react/components/Table/model/Table.d.ts +19 -0
  179. package/dist/esm/rendering/react/components/Table/model/Table.js +48 -0
  180. package/dist/esm/rendering/react/components/Table/model/index.d.ts +5 -0
  181. package/dist/esm/rendering/react/components/Table/model/index.js +5 -0
  182. package/dist/esm/rendering/react/components/Value.d.ts +5 -0
  183. package/dist/esm/rendering/react/components/Value.js +8 -0
  184. package/dist/esm/rendering/react/components/WithoutLineBreaks.d.ts +2 -0
  185. package/dist/esm/rendering/react/components/WithoutLineBreaks.js +7 -0
  186. package/dist/esm/rendering/react/context.d.ts +3 -2
  187. package/dist/esm/rendering/react/context.js +4 -1
  188. package/dist/esm/rendering/react/json/JsonCollectionProvider.d.ts +2 -0
  189. package/dist/esm/rendering/react/json/JsonCollectionProvider.js +10 -0
  190. package/dist/esm/rendering/react/json/JsonRenderer.d.ts +2 -0
  191. package/dist/esm/rendering/react/json/JsonRenderer.js +14 -0
  192. package/dist/esm/rendering/react/json/RenderJson.d.ts +7 -0
  193. package/dist/esm/rendering/react/json/RenderJson.js +19 -0
  194. package/dist/esm/rendering/react/json/context.d.ts +5 -0
  195. package/dist/esm/rendering/react/json/context.js +4 -0
  196. package/dist/esm/rendering/react/json/lib/unpackJsonData.d.ts +1 -0
  197. package/dist/esm/rendering/react/json/lib/unpackJsonData.js +5 -0
  198. package/dist/esm/rendering/react/lib/observable-value/ObservableValue.d.ts +10 -0
  199. package/dist/esm/rendering/react/lib/observable-value/ObservableValue.js +25 -0
  200. package/dist/esm/rendering/react/lib/observable-value/types.d.ts +2 -0
  201. package/dist/esm/rendering/react/lib/observable-value/types.js +1 -0
  202. package/dist/esm/rendering/react/lib/observable-value/useWatchObservableValue.d.ts +2 -0
  203. package/dist/esm/rendering/react/lib/observable-value/useWatchObservableValue.js +9 -0
  204. package/dist/esm/rendering/react/measure/MeasureChildren.d.ts +8 -0
  205. package/dist/esm/rendering/react/measure/MeasureChildren.js +19 -0
  206. package/dist/esm/rendering/react/measure/MeasureContextProvider.d.ts +2 -0
  207. package/dist/esm/rendering/react/measure/MeasureContextProvider.js +10 -0
  208. package/dist/esm/rendering/react/measure/MeasureRenderer.d.ts +2 -0
  209. package/dist/esm/rendering/react/measure/MeasureRenderer.js +22 -0
  210. package/dist/esm/rendering/react/measure/context.d.ts +18 -0
  211. package/dist/esm/rendering/react/measure/context.js +48 -0
  212. package/dist/esm/rendering/react/process.d.ts +42 -0
  213. package/dist/esm/rendering/react/process.js +24 -0
  214. package/dist/esm/rendering/react/process_fancy.d.ts +28 -0
  215. package/dist/esm/rendering/react/process_fancy.js +213 -0
  216. package/dist/esm/rendering/react/process_flags.d.ts +9 -0
  217. package/dist/esm/rendering/react/process_flags.js +15 -0
  218. package/dist/esm/rendering/react/process_quiet.d.ts +12 -0
  219. package/dist/esm/rendering/react/process_quiet.js +29 -0
  220. package/dist/esm/rendering/setup/FlagSupportedSetup.d.ts +2 -0
  221. package/dist/esm/rendering/setup/TableRenderSetup.d.ts +10 -12
  222. package/dist/esm/rendering/setup/TableRenderSetup.js +19 -6
  223. package/dist/esm/rendering/setup/usePromiseSetup.d.ts +4 -3
  224. package/package.json +52 -21
  225. package/.deps/client.tgz +0 -0
  226. package/.deps/commons.tgz +0 -0
  227. package/dist/esm/commands/project/filesystem/directories.d.ts +0 -3
  228. package/dist/esm/commands/project/filesystem/directories.js +0 -6
  229. package/dist/esm/commands/project/filesystem/file-content.d.ts +0 -3
  230. package/dist/esm/commands/project/filesystem/file-content.js +0 -6
  231. package/dist/esm/commands/project/filesystem/files.d.ts +0 -16
  232. package/dist/esm/commands/project/filesystem/files.js +0 -25
  233. package/dist/esm/commands/project/list1.d.ts +0 -7
  234. package/dist/esm/commands/project/list1.js +0 -18
  235. package/dist/esm/commands/project/list2.js +0 -26
  236. package/dist/esm/generated/cronjob/listCronjobs.d.ts +0 -13
  237. package/dist/esm/generated/cronjob/listCronjobs.js +0 -24
  238. package/dist/esm/generated/cronjob/listExecutions.d.ts +0 -13
  239. package/dist/esm/generated/cronjob/listExecutions.js +0 -24
  240. package/dist/esm/generated/domain/ingressListAccessible.d.ts +0 -13
  241. package/dist/esm/generated/domain/ingressListAccessible.js +0 -17
  242. package/dist/esm/generated/domain/ingressListForProject.d.ts +0 -13
  243. package/dist/esm/generated/domain/ingressListForProject.js +0 -24
  244. package/dist/esm/generated/domain/listDomains.d.ts +0 -13
  245. package/dist/esm/generated/domain/listDomains.js +0 -24
  246. package/dist/esm/generated/projectFileSystem/getDirectories.d.ts +0 -14
  247. package/dist/esm/generated/projectFileSystem/getDirectories.js +0 -24
  248. package/dist/esm/generated/projectFileSystem/getDiskUsage.d.ts +0 -14
  249. package/dist/esm/generated/projectFileSystem/getDiskUsage.js +0 -24
  250. package/dist/esm/generated/projectFileSystem/getFileContent.d.ts +0 -14
  251. package/dist/esm/generated/projectFileSystem/getFileContent.js +0 -24
  252. package/dist/esm/generated/projectFileSystem/getJwt.d.ts +0 -14
  253. package/dist/esm/generated/projectFileSystem/getJwt.js +0 -24
  254. package/dist/esm/generated/projectFileSystem/listFiles.d.ts +0 -13
  255. package/dist/esm/generated/projectFileSystem/listFiles.js +0 -24
  256. package/dist/esm/rendering/oclif/components/table.d.ts +0 -11
  257. package/dist/esm/rendering/oclif/components/table.js +0 -49
  258. package/dist/esm/rendering/react/components/Table.d.ts +0 -7
  259. package/dist/esm/rendering/react/components/Table.js +0 -4
  260. /package/dist/esm/rendering/react/components/{ConversationMessage.d.ts → Conversation/ConversationMessage.d.ts} +0 -0
  261. /package/dist/esm/rendering/react/components/{ConversationMeta.d.ts → Conversation/ConversationMeta.d.ts} +0 -0
  262. /package/dist/esm/rendering/react/components/{ConversationStatusUpdate.d.ts → Conversation/ConversationStatusUpdate.d.ts} +0 -0
  263. /package/dist/esm/rendering/react/components/{ConversationStatusUpdate.js → Conversation/ConversationStatusUpdate.js} +0 -0
@@ -0,0 +1,37 @@
1
+ import { Cell } from "./Cell.js";
2
+ import { ColumnName } from "./ColumnName.js";
3
+ export class Row {
4
+ table;
5
+ cells;
6
+ data;
7
+ index;
8
+ constructor(table, index, dataItem) {
9
+ this.table = table;
10
+ this.index = index;
11
+ this.cells = this.buildCells(dataItem);
12
+ this.data = dataItem;
13
+ }
14
+ static fromObject(table, index, dataItem) {
15
+ return new Row(table, index, dataItem);
16
+ }
17
+ buildCells(object) {
18
+ if (typeof object === "object" && object !== null) {
19
+ const entries = Object.entries(object);
20
+ return entries.map(([name, data]) => Cell.fromObject(this, {
21
+ name,
22
+ data,
23
+ }));
24
+ }
25
+ return [];
26
+ }
27
+ getCell(name) {
28
+ const cell = this.cells.find((c) => c.name.matches(name));
29
+ if (!cell) {
30
+ return Cell.empty(this, ColumnName.getNameValue(name));
31
+ }
32
+ return cell;
33
+ }
34
+ collectColumnNamesFromCells() {
35
+ return this.cells.map((cell) => cell.name);
36
+ }
37
+ }
@@ -0,0 +1,19 @@
1
+ import { Row } from "./Row.js";
2
+ import { Column } from "./Column.js";
3
+ import { ObservableValue } from "../../../lib/observable-value/ObservableValue.js";
4
+ import { ColumnOptionsInput } from "./ColumnOptions.js";
5
+ import { TableRenderSetupOutput } from "../../../../setup/TableRenderSetup.js";
6
+ import { ColumnName } from "./ColumnName.js";
7
+ export type TableOptions = TableRenderSetupOutput;
8
+ export type TableColumnsInput<TData = unknown> = Record<string, ColumnOptionsInput<TData>>;
9
+ export declare class Table<T = unknown> {
10
+ readonly rows: Row<T>[];
11
+ readonly columns: Column[];
12
+ readonly overallWidth: ObservableValue<number>;
13
+ readonly tableOptions?: TableOptions;
14
+ constructor(data: T[], tableOptions?: TableOptions, columnOptionsInput?: TableColumnsInput<T>);
15
+ private buildRows;
16
+ private handleColumnWidthChanged;
17
+ private buildColumns;
18
+ getColumn(name: ColumnName | string): Column;
19
+ }
@@ -0,0 +1,48 @@
1
+ import { Row } from "./Row.js";
2
+ import { Column } from "./Column.js";
3
+ import { ObservableValue } from "../../../lib/observable-value/ObservableValue.js";
4
+ export class Table {
5
+ rows;
6
+ columns;
7
+ overallWidth = new ObservableValue(0);
8
+ tableOptions;
9
+ constructor(data, tableOptions, columnOptionsInput) {
10
+ this.tableOptions = Object.freeze(tableOptions);
11
+ this.rows = this.buildRows(data);
12
+ this.columns = this.buildColumns(this.rows, columnOptionsInput);
13
+ }
14
+ buildRows(data) {
15
+ return data.map((item, index) => Row.fromObject(this, index, item));
16
+ }
17
+ handleColumnWidthChanged() {
18
+ const overallWidth = this.columns.reduce((width, col) => width + col.maxCellWidth.value, 0);
19
+ this.overallWidth.updateValue(overallWidth);
20
+ }
21
+ buildColumns(rows, columnOptions) {
22
+ const columnsMap = new Map();
23
+ const addColumn = (columnName) => {
24
+ const options = columnOptions ? columnOptions[columnName] : {};
25
+ const column = new Column(this, columnName, options);
26
+ columnsMap.set(columnName, column);
27
+ column.maxCellWidth.observe(() => this.handleColumnWidthChanged());
28
+ };
29
+ for (const row of rows) {
30
+ const columns = columnOptions
31
+ ? Object.entries(columnOptions).map(([name]) => name)
32
+ : row.collectColumnNamesFromCells().map((n) => n.value);
33
+ for (const column of columns) {
34
+ if (!columnsMap.has(column)) {
35
+ addColumn(column);
36
+ }
37
+ }
38
+ }
39
+ return Array.from(columnsMap.values());
40
+ }
41
+ getColumn(name) {
42
+ const col = this.columns.find((col) => col.name.matches(name));
43
+ if (!col) {
44
+ throw new Error(`Could not get column with ID ${name}`);
45
+ }
46
+ return col;
47
+ }
48
+ }
@@ -0,0 +1,5 @@
1
+ export * from "./Cell.js";
2
+ export * from "./Column.js";
3
+ export * from "./Table.js";
4
+ export * from "./Row.js";
5
+ export { ColumnName } from "./ColumnName.js";
@@ -0,0 +1,5 @@
1
+ export * from "./Cell.js";
2
+ export * from "./Column.js";
3
+ export * from "./Table.js";
4
+ export * from "./Row.js";
5
+ export { ColumnName } from "./ColumnName.js";
@@ -0,0 +1,5 @@
1
+ import React, { PropsWithChildren } from "react";
2
+ export type ValueProps = PropsWithChildren<{
3
+ notSet?: boolean;
4
+ }>;
5
+ export declare const Value: React.FC<ValueProps>;
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Text } from "ink";
3
+ export const Value = ({ children, notSet }) => {
4
+ if (notSet) {
5
+ return _jsx(Text, { color: "gray", children: "not set" });
6
+ }
7
+ return _jsx(Text, { color: "blue", children: children });
8
+ };
@@ -0,0 +1,2 @@
1
+ import { FC, PropsWithChildren } from "react";
2
+ export declare const WithoutLineBreaks: FC<PropsWithChildren>;
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Text, Transform } from "ink";
3
+ import { removeLineBreaks } from "../../../lib/viewhelpers/removeLineBreaks.js";
4
+ export const WithoutLineBreaks = (props) => {
5
+ const { children } = props;
6
+ return (_jsx(Transform, { transform: removeLineBreaks, children: _jsx(Text, { children: children }) }));
7
+ };
@@ -2,7 +2,8 @@
2
2
  import { MittwaldAPIV2Client } from "@mittwald/api-client";
3
3
  export interface RenderContext {
4
4
  apiClient: MittwaldAPIV2Client;
5
+ renderAsJson: boolean;
5
6
  }
6
- export declare const renderContext: import("react").Context<any>;
7
- export declare const RenderContextProvider: import("react").Provider<any>;
7
+ export declare const renderContext: import("react").Context<RenderContext>;
8
+ export declare const RenderContextProvider: import("react").Provider<RenderContext>;
8
9
  export declare const useRenderContext: () => RenderContext;
@@ -1,4 +1,7 @@
1
1
  import { createContext, useContext } from "react";
2
- export const renderContext = createContext({});
2
+ export const renderContext = createContext({
3
+ renderAsJson: true,
4
+ apiClient: null,
5
+ });
3
6
  export const RenderContextProvider = renderContext.Provider;
4
7
  export const useRenderContext = () => useContext(renderContext);
@@ -0,0 +1,2 @@
1
+ import { FC, PropsWithChildren } from "react";
2
+ export declare const JsonCollectionProvider: FC<PropsWithChildren>;
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useRef } from "react";
3
+ import { collectedJsonDataContext } from "./context.js";
4
+ import { ObservableValue } from "../lib/observable-value/ObservableValue.js";
5
+ import { JsonRenderer } from "./JsonRenderer.js";
6
+ const ContextProvider = collectedJsonDataContext.Provider;
7
+ export const JsonCollectionProvider = (props) => {
8
+ const contextValue = useRef(new ObservableValue(undefined)).current;
9
+ return (_jsx(ContextProvider, { value: contextValue, children: _jsx(JsonRenderer, { children: props.children }) }));
10
+ };
@@ -0,0 +1,2 @@
1
+ import { FC, PropsWithChildren } from "react";
2
+ export declare const JsonRenderer: FC<PropsWithChildren>;
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box } from "ink";
3
+ import { useCollectedJsonData } from "./context.js";
4
+ import { useWatchObservableValue } from "../lib/observable-value/useWatchObservableValue.js";
5
+ import { JSONView } from "../components/JSONView.js";
6
+ import { unpackJsonData } from "./lib/unpackJsonData.js";
7
+ export const JsonRenderer = (props) => {
8
+ const { children } = props;
9
+ const jsonValue = useCollectedJsonData();
10
+ const json = useWatchObservableValue(jsonValue);
11
+ const display = json ? "none" : "flex";
12
+ const unpackedData = unpackJsonData(json);
13
+ return (_jsxs(Box, { children: [_jsx(Box, { display: display, children: children }), _jsx(JSONView, { json: unpackedData })] }));
14
+ };
@@ -0,0 +1,7 @@
1
+ import { FC } from "react";
2
+ interface Props {
3
+ name: string;
4
+ data: unknown;
5
+ }
6
+ export declare const RenderJson: FC<Props>;
7
+ export {};
@@ -0,0 +1,19 @@
1
+ import { useEffect } from "react";
2
+ import { useCollectedJsonData } from "./context.js";
3
+ export const RenderJson = (props) => {
4
+ const { name, data } = props;
5
+ const jsonData = useCollectedJsonData();
6
+ useEffect(() => {
7
+ jsonData.updateValue({
8
+ ...jsonData.value,
9
+ [name]: data,
10
+ });
11
+ return () => {
12
+ jsonData.updateValue({
13
+ ...jsonData.value,
14
+ [name]: undefined,
15
+ });
16
+ };
17
+ }, [name, data, jsonData]);
18
+ return null;
19
+ };
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ import { ObservableValue } from "../lib/observable-value/ObservableValue.js";
3
+ export type CollectedJsonData = Record<string, unknown>;
4
+ export declare const collectedJsonDataContext: import("react").Context<ObservableValue<CollectedJsonData | undefined>>;
5
+ export declare const useCollectedJsonData: () => ObservableValue<CollectedJsonData | undefined>;
@@ -0,0 +1,4 @@
1
+ import { createContext, useContext } from "react";
2
+ import { ObservableValue } from "../lib/observable-value/ObservableValue.js";
3
+ export const collectedJsonDataContext = createContext(new ObservableValue(undefined));
4
+ export const useCollectedJsonData = () => useContext(collectedJsonDataContext);
@@ -0,0 +1 @@
1
+ export declare const unpackJsonData: (json: unknown) => unknown;
@@ -0,0 +1,5 @@
1
+ export const unpackJsonData = (json) => {
2
+ const entries = json && typeof json === "object" ? Object.entries(json) : undefined;
3
+ const firstEntry = entries?.[0];
4
+ return entries?.length === 1 && firstEntry ? firstEntry[1] : json;
5
+ };
@@ -0,0 +1,10 @@
1
+ import { Observer, UnbindObserver } from "./types.js";
2
+ export declare class ObservableValue<T> {
3
+ value: T;
4
+ private observers;
5
+ constructor(value: T);
6
+ private notifyObservers;
7
+ get observerCount(): number;
8
+ observe(observer: Observer<T>): UnbindObserver;
9
+ updateValue(newValue: T): void;
10
+ }
@@ -0,0 +1,25 @@
1
+ export class ObservableValue {
2
+ value;
3
+ // using unknown since otherwise the ObservableValue seems to be invariant on type T
4
+ observers = new Set();
5
+ constructor(value) {
6
+ this.value = value;
7
+ }
8
+ notifyObservers(newValue) {
9
+ this.observers.forEach((o) => o(newValue));
10
+ }
11
+ get observerCount() {
12
+ return this.observers.size;
13
+ }
14
+ observe(observer) {
15
+ this.observers.add(observer);
16
+ return () => this.observers.delete(observer);
17
+ }
18
+ updateValue(newValue) {
19
+ if (this.value === newValue) {
20
+ return;
21
+ }
22
+ this.value = newValue;
23
+ this.notifyObservers(newValue);
24
+ }
25
+ }
@@ -0,0 +1,2 @@
1
+ export type Observer<T> = (newValue: T) => void;
2
+ export type UnbindObserver = () => void;
@@ -0,0 +1,2 @@
1
+ import { ObservableValue } from "./ObservableValue.js";
2
+ export declare const useWatchObservableValue: <T>(observable: ObservableValue<T>) => T;
@@ -0,0 +1,9 @@
1
+ import { useEffect, useState } from "react";
2
+ export const useWatchObservableValue = (observable) => {
3
+ const [watchedValue, setWatchedValue] = useState(observable.value);
4
+ useEffect(() => {
5
+ setWatchedValue(observable.value);
6
+ return observable.observe(setWatchedValue);
7
+ }, [observable]);
8
+ return watchedValue;
9
+ };
@@ -0,0 +1,8 @@
1
+ import { FC, PropsWithChildren } from "react";
2
+ import { Dimension } from "./context.js";
3
+ export type OnDimensionChangedHandler = (dimension: Dimension) => void;
4
+ interface Props {
5
+ onDimensionChange?: OnDimensionChangedHandler;
6
+ }
7
+ export declare const MeasureChildren: FC<PropsWithChildren<Props>>;
8
+ export {};
@@ -0,0 +1,19 @@
1
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useId } from "react";
3
+ import { useMeasureContext } from "./context.js";
4
+ export const MeasureChildren = (props) => {
5
+ const { children, onDimensionChange } = props;
6
+ const id = useId();
7
+ const context = useMeasureContext();
8
+ useEffect(() => {
9
+ context.addNode(id, children);
10
+ return () => {
11
+ context.removeNode(id);
12
+ };
13
+ }, [context, children]);
14
+ useEffect(() => context.getDimension(id).observe(onDimensionChange ??
15
+ (() => {
16
+ // not handling
17
+ })), [id, context, onDimensionChange]);
18
+ return _jsx(_Fragment, { children: children });
19
+ };
@@ -0,0 +1,2 @@
1
+ import { FC, PropsWithChildren } from "react";
2
+ export declare const MeasureContextProvider: FC<PropsWithChildren>;
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box } from "ink";
3
+ import { useRef } from "react";
4
+ import { createMeasureContext, measureContext } from "./context.js";
5
+ import { MeasureRenderer } from "./MeasureRenderer.js";
6
+ export const MeasureContextProvider = (props) => {
7
+ const { children } = props;
8
+ const context = useRef(createMeasureContext()).current;
9
+ return (_jsx(measureContext.Provider, { value: context, children: _jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsx(Box, { children: _jsx(MeasureRenderer, {}) }), _jsx(Box, { children: children })] }) }));
10
+ };
@@ -0,0 +1,2 @@
1
+ import { FC } from "react";
2
+ export declare const MeasureRenderer: FC;
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box, measureElement } from "ink";
3
+ import { useEffect, useRef } from "react";
4
+ import { useWatchObservableValue } from "../lib/observable-value/useWatchObservableValue.js";
5
+ import { useMeasureContext } from "./context.js";
6
+ const M = (props) => {
7
+ const { children, id } = props;
8
+ const measureContext = useMeasureContext();
9
+ const ref = useRef(null);
10
+ useEffect(() => {
11
+ if (ref.current) {
12
+ const dimension = measureElement(ref.current);
13
+ measureContext.updateDimension(id, dimension);
14
+ }
15
+ }, [id, measureContext, ref.current]);
16
+ return (_jsx(Box, { height: 0, overflow: "hidden", flexShrink: 1, ref: ref, children: children }));
17
+ };
18
+ export const MeasureRenderer = () => {
19
+ const context = useMeasureContext();
20
+ const watchedNodes = useWatchObservableValue(context.nodes);
21
+ return (_jsx(Box, { flexDirection: "row", flexWrap: "wrap", children: Object.entries(watchedNodes).map(([id, node]) => (_jsx(M, { id: id, children: node }, id))) }));
22
+ };
@@ -0,0 +1,18 @@
1
+ import { measureElement } from "ink";
2
+ import { ReactNode } from "react";
3
+ import { ObservableValue } from "../lib/observable-value/ObservableValue.js";
4
+ export type MeasureContextNodes = Record<string, ReactNode>;
5
+ export type Dimension = ReturnType<typeof measureElement>;
6
+ export type Dimensions = Record<string, ObservableValue<Dimension>>;
7
+ interface Context {
8
+ nodes: ObservableValue<MeasureContextNodes>;
9
+ dimensions: Dimensions;
10
+ addNode: (id: string, node: ReactNode) => void;
11
+ removeNode: (id: string) => void;
12
+ getDimension: (id: string) => ObservableValue<Dimension>;
13
+ updateDimension: (id: string, dimension: Dimension) => void;
14
+ }
15
+ export declare const createMeasureContext: () => Context;
16
+ export declare const measureContext: import("react").Context<Context>;
17
+ export declare const useMeasureContext: () => Context;
18
+ export {};
@@ -0,0 +1,48 @@
1
+ import { createContext, useContext } from "react";
2
+ import { ObservableValue } from "../lib/observable-value/ObservableValue.js";
3
+ export const createMeasureContext = () => {
4
+ const context = {
5
+ nodes: new ObservableValue({}),
6
+ dimensions: {},
7
+ addNode: (id, node) => {
8
+ const existing = context.nodes.value[id];
9
+ if (existing === node) {
10
+ return;
11
+ }
12
+ context.dimensions[id] = new ObservableValue({
13
+ height: 0,
14
+ width: 0,
15
+ });
16
+ context.nodes.updateValue({
17
+ ...context.nodes.value,
18
+ [id]: node,
19
+ });
20
+ },
21
+ removeNode: (id) => {
22
+ if (id in context.nodes) {
23
+ const updatedNodes = {
24
+ ...context.nodes.value,
25
+ };
26
+ delete updatedNodes[id];
27
+ context.nodes.updateValue(updatedNodes);
28
+ }
29
+ },
30
+ getDimension: (id) => {
31
+ const dimension = context.dimensions[id];
32
+ if (!dimension) {
33
+ throw new Error(`Could not get dimension for ${id}`);
34
+ }
35
+ return dimension;
36
+ },
37
+ updateDimension: (id, updatedDimension) => {
38
+ const dimension = context.getDimension(id);
39
+ if (dimension.value.width !== updatedDimension.width ||
40
+ dimension.value.height !== updatedDimension.height) {
41
+ dimension.updateValue(updatedDimension);
42
+ }
43
+ },
44
+ };
45
+ return context;
46
+ };
47
+ export const measureContext = createContext(createMeasureContext());
48
+ export const useMeasureContext = () => useContext(measureContext);
@@ -0,0 +1,42 @@
1
+ import { ReactElement, ReactNode } from "react";
2
+ export type ProcessStepInfo = {
3
+ type: "info";
4
+ title: ReactElement;
5
+ };
6
+ export type ProcessStepRunnable = {
7
+ type: "step";
8
+ title: ReactElement;
9
+ phase: "running" | "completed" | "failed" | "aborted";
10
+ error?: unknown;
11
+ };
12
+ export type ProcessStepConfirm = {
13
+ type: "confirm";
14
+ title: ReactElement;
15
+ confirmed: boolean | undefined;
16
+ };
17
+ export type ProcessStepInput = {
18
+ type: "input";
19
+ title: ReactElement;
20
+ mask?: boolean;
21
+ value?: string;
22
+ };
23
+ export type ProcessStep = ProcessStepInfo | ProcessStepRunnable | ProcessStepConfirm | ProcessStepInput;
24
+ export declare class RunnableHandler {
25
+ private readonly listener;
26
+ private readonly processStep;
27
+ constructor(state: ProcessStepRunnable, l: () => void);
28
+ get done(): boolean;
29
+ abort(): void;
30
+ complete(): void;
31
+ error(err: unknown): void;
32
+ }
33
+ export interface ProcessRenderer {
34
+ start(): void;
35
+ addStep(title: ReactNode): RunnableHandler;
36
+ runStep<TRes>(title: ReactNode, fn: () => Promise<TRes>): Promise<TRes>;
37
+ addInfo(title: ReactElement): void;
38
+ addConfirmation(question: ReactElement): Promise<boolean>;
39
+ addInput(question: ReactElement, mask?: boolean): Promise<string>;
40
+ complete(summary: ReactElement): void;
41
+ error(err: unknown): void;
42
+ }
@@ -0,0 +1,24 @@
1
+ export class RunnableHandler {
2
+ listener;
3
+ processStep;
4
+ constructor(state, l) {
5
+ this.processStep = state;
6
+ this.listener = l;
7
+ }
8
+ get done() {
9
+ return this.processStep.phase !== "running";
10
+ }
11
+ abort() {
12
+ this.processStep.phase = "aborted";
13
+ this.listener();
14
+ }
15
+ complete() {
16
+ this.processStep.phase = "completed";
17
+ this.listener();
18
+ }
19
+ error(err) {
20
+ this.processStep.phase = "failed";
21
+ this.processStep.error = err;
22
+ this.listener();
23
+ }
24
+ }
@@ -0,0 +1,28 @@
1
+ import React, { ReactElement, ReactNode } from "react";
2
+ import { ProcessRenderer, ProcessStep, ProcessStepInput, RunnableHandler } from "./process.js";
3
+ export declare class FancyProcessRenderer implements ProcessRenderer {
4
+ private readonly title;
5
+ private started;
6
+ private currentHandler;
7
+ constructor(title: string);
8
+ start(): void;
9
+ addStep(title: ReactNode): RunnableHandler;
10
+ runStep<TRes>(title: ReactNode, fn: () => Promise<TRes>): Promise<TRes>;
11
+ addInfo(title: ReactElement): void;
12
+ addInput(question: React.ReactElement, mask?: boolean): Promise<string>;
13
+ addConfirmation(question: ReactElement): Promise<boolean>;
14
+ complete(summary: ReactElement): void;
15
+ error(err: unknown): void;
16
+ private renderStart;
17
+ }
18
+ export declare const ProcessState: React.FC<{
19
+ step: ProcessStep;
20
+ }>;
21
+ export declare const ProcessConfirmation: React.FC<{
22
+ step: ProcessStep;
23
+ onConfirm: (confirmed: boolean) => void;
24
+ }>;
25
+ export declare const ProcessInput: React.FC<{
26
+ step: ProcessStepInput;
27
+ onSubmit: (value: string) => void;
28
+ }>;