@mittwald/cli 1.0.0-alpha.8 → 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,213 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { RunnableHandler, } from "./process.js";
4
+ import { Header } from "./components/Header.js";
5
+ import { Box, render, Text, useInput, useStdin } from "ink";
6
+ import TextInput from "ink-text-input";
7
+ export class FancyProcessRenderer {
8
+ title;
9
+ started = false;
10
+ currentHandler = null;
11
+ constructor(title) {
12
+ this.title = title;
13
+ }
14
+ start() {
15
+ if (this.started) {
16
+ return;
17
+ }
18
+ this.started = true;
19
+ render(this.renderStart(), {}).unmount();
20
+ }
21
+ addStep(title) {
22
+ this.start();
23
+ if (this.currentHandler !== null) {
24
+ this.currentHandler.abort();
25
+ }
26
+ title = _jsx(_Fragment, { children: title });
27
+ const state = { type: "step", title, phase: "running" };
28
+ const renderHandle = render(_jsx(ProcessState, { step: state }));
29
+ this.currentHandler = new RunnableHandler(state, () => {
30
+ renderHandle.rerender(_jsx(ProcessState, { step: state }));
31
+ if (this.currentHandler?.done) {
32
+ this.currentHandler = null;
33
+ renderHandle.unmount();
34
+ }
35
+ });
36
+ return this.currentHandler;
37
+ }
38
+ async runStep(title, fn) {
39
+ const step = this.addStep(title);
40
+ try {
41
+ const result = await fn();
42
+ step.complete();
43
+ return result;
44
+ }
45
+ catch (err) {
46
+ step.error(err);
47
+ throw err;
48
+ }
49
+ }
50
+ addInfo(title) {
51
+ this.start();
52
+ if (this.currentHandler !== null) {
53
+ this.currentHandler.complete();
54
+ }
55
+ const state = { type: "info", title };
56
+ render(_jsx(ProcessState, { step: state })).unmount();
57
+ }
58
+ addInput(question, mask) {
59
+ this.start();
60
+ if (this.currentHandler !== null) {
61
+ this.currentHandler.complete();
62
+ }
63
+ const state = {
64
+ type: "input",
65
+ title: question,
66
+ mask,
67
+ };
68
+ return new Promise((res) => {
69
+ const onInput = (value) => {
70
+ res(value);
71
+ state.value = value;
72
+ if (renderHandle) {
73
+ renderHandle.rerender(_jsx(ProcessInput, { step: state, onSubmit: onInput }));
74
+ renderHandle.unmount();
75
+ }
76
+ };
77
+ const renderHandle = render(_jsx(ProcessInput, { step: state, onSubmit: onInput }));
78
+ });
79
+ }
80
+ addConfirmation(question) {
81
+ this.start();
82
+ if (this.currentHandler !== null) {
83
+ this.currentHandler.complete();
84
+ }
85
+ const state = {
86
+ type: "confirm",
87
+ title: question,
88
+ confirmed: undefined,
89
+ };
90
+ return new Promise((res) => {
91
+ const onConfirm = (confirmed) => {
92
+ res(confirmed);
93
+ state.confirmed = confirmed;
94
+ if (renderHandle) {
95
+ renderHandle.rerender(_jsx(ProcessConfirmation, { step: state, onConfirm: onConfirm }));
96
+ renderHandle.unmount();
97
+ }
98
+ };
99
+ const renderHandle = render(_jsx(ProcessConfirmation, { step: state, onConfirm: onConfirm }));
100
+ });
101
+ }
102
+ complete(summary) {
103
+ if (this.currentHandler) {
104
+ this.currentHandler.complete();
105
+ }
106
+ render(_jsx(Box, { marginY: 1, marginX: 2, children: summary })).unmount();
107
+ }
108
+ error(err) {
109
+ if (this.currentHandler) {
110
+ this.currentHandler.error(err);
111
+ }
112
+ else {
113
+ render(_jsx(Box, { marginY: 1, marginX: 2, borderStyle: "round", borderColor: "red", children: _jsxs(Text, { color: "red", children: ["Error: ", err?.toString()] }) })).unmount();
114
+ }
115
+ }
116
+ renderStart() {
117
+ return (_jsx(Box, { marginY: 1, marginX: 2, children: _jsx(Header, { title: this.title }) }));
118
+ }
119
+ }
120
+ const ProcessStateIcon = ({ step }) => {
121
+ if (step.type === "info") {
122
+ return _jsxs(Text, { children: ["\u2139\uFE0F", " "] });
123
+ }
124
+ else if (step.type === "confirm" || step.type === "input") {
125
+ return _jsx(Text, { children: "\u2753" });
126
+ }
127
+ else if (step.phase === "completed") {
128
+ return _jsx(Text, { children: "\u2705" });
129
+ }
130
+ else if (step.phase === "aborted") {
131
+ return _jsx(Text, { children: "\u23E9\uFE0F " });
132
+ }
133
+ else if (step.phase === "failed") {
134
+ return _jsx(Text, { children: "\u274C" });
135
+ }
136
+ else {
137
+ return _jsx(Text, { children: "\uD83D\uDD01 " });
138
+ }
139
+ };
140
+ const ProcessInputStateSummary = ({ step }) => {
141
+ if (step.value && step.mask) {
142
+ return (_jsxs(_Fragment, { children: [_jsx(Text, { children: ": " }), _jsx(Text, { color: "blue", children: "[secret]" })] }));
143
+ }
144
+ if (step.value) {
145
+ return (_jsxs(_Fragment, { children: [_jsx(Text, { children: ": " }), _jsx(Text, { color: "green", children: step.value })] }));
146
+ }
147
+ else {
148
+ return _jsx(Text, { children: ": " });
149
+ }
150
+ };
151
+ const InteractiveConfirmationDisabled = () => (_jsxs(Text, { color: "red", children: [" ", "interactive input required; start this command with --force or --quiet to disable interactive prompts"] }));
152
+ const InteractiveInputDisabled = () => (_jsx(Text, { color: "red", children: "interactive input required; inspect this command's --help page to learn how to pass the required input non-interactively." }));
153
+ const ProcessConfirmationStateSummary = ({ step }) => {
154
+ const { isRawModeSupported } = useStdin();
155
+ if (!isRawModeSupported) {
156
+ return _jsx(InteractiveConfirmationDisabled, {});
157
+ }
158
+ if (step.confirmed) {
159
+ return _jsx(Text, { color: "green", children: " confirmed" });
160
+ }
161
+ else if (step.confirmed === false) {
162
+ return _jsx(Text, { color: "yellow", children: " not confirmed" });
163
+ }
164
+ else {
165
+ return (_jsxs(_Fragment, { children: [_jsx(Text, { children: ": press " }), _jsx(Text, { color: "blue", children: "y" }), _jsx(Text, { children: " or " }), _jsx(Text, { color: "blue", children: "n" }), _jsxs(Text, { color: "gray", children: [" ", "(use the --force or --quiet flags to disable this prompt)"] })] }));
166
+ }
167
+ };
168
+ const ProcessStateSummary = ({ step }) => {
169
+ if (step.type === "info") {
170
+ return _jsx(_Fragment, {});
171
+ }
172
+ else if (step.type === "confirm") {
173
+ return _jsx(ProcessConfirmationStateSummary, { step: step });
174
+ }
175
+ else if (step.type === "input") {
176
+ return _jsx(ProcessInputStateSummary, { step: step });
177
+ }
178
+ else if (step.phase === "completed") {
179
+ return (_jsxs(_Fragment, { children: [_jsx(Text, { children: ". " }), _jsx(Text, { color: "green", children: "done" })] }));
180
+ }
181
+ else if (step.phase === "aborted") {
182
+ return (_jsxs(_Fragment, { children: [_jsx(Text, { children: ". " }), _jsx(Text, { color: "yellow", children: "cancelled" })] }));
183
+ }
184
+ else if (step.phase === "failed") {
185
+ return (_jsxs(_Fragment, { children: [_jsx(Text, { children: ". " }), _jsx(Text, { color: "red", children: "error" })] }));
186
+ }
187
+ else {
188
+ return _jsx(Text, { children: "..." });
189
+ }
190
+ };
191
+ const ProcessError = ({ err }) => {
192
+ return (_jsxs(Box, { marginY: 1, marginX: 5, flexDirection: "column", children: [_jsx(Text, { color: "red", children: "An error occurred during this operation:" }), _jsx(Text, { color: "red", bold: true, children: err?.toString() })] }));
193
+ };
194
+ export const ProcessState = ({ step }) => {
195
+ return (_jsxs(_Fragment, { children: [_jsxs(Box, { marginX: 2, children: [_jsx(ProcessStateIcon, { step: step }), _jsx(Text, { children: step.title }), _jsx(ProcessStateSummary, { step: step })] }), step.type === "step" && step.error ? (_jsx(ProcessError, { err: step.error })) : null] }));
196
+ };
197
+ export const ProcessConfirmation = ({ step, onConfirm }) => {
198
+ const { isRawModeSupported } = useStdin();
199
+ if (isRawModeSupported) {
200
+ useInput((input) => {
201
+ onConfirm(input === "y");
202
+ });
203
+ }
204
+ return _jsx(ProcessState, { step: step });
205
+ };
206
+ export const ProcessInput = ({ step, onSubmit }) => {
207
+ const [value, setValue] = useState("");
208
+ if (!step.value) {
209
+ const { isRawModeSupported } = useStdin();
210
+ return (_jsx(_Fragment, { children: _jsxs(Box, { marginX: 2, children: [_jsx(ProcessStateIcon, { step: step }), _jsxs(Text, { children: [step.title, ": "] }), isRawModeSupported ? (_jsx(TextInput, { mask: step.mask ? "*" : undefined, value: value, onChange: setValue, onSubmit: onSubmit })) : (_jsx(InteractiveInputDisabled, {}))] }) }));
211
+ }
212
+ return _jsx(ProcessState, { step: step });
213
+ };
@@ -0,0 +1,9 @@
1
+ import { ProcessRenderer } from "./process.js";
2
+ import { InferredFlags } from "@oclif/core/lib/interfaces/index.js";
3
+ export declare const processFlags: {
4
+ quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
5
+ };
6
+ export type ProcessFlags = InferredFlags<typeof processFlags>;
7
+ export declare const makeProcessRenderer: (flags: {
8
+ quiet: boolean;
9
+ }, title: string) => ProcessRenderer;
@@ -0,0 +1,15 @@
1
+ import { FancyProcessRenderer } from "./process_fancy.js";
2
+ import { Flags } from "@oclif/core";
3
+ import { SilentProcessRenderer } from "./process_quiet.js";
4
+ export const processFlags = {
5
+ quiet: Flags.boolean({
6
+ char: "q",
7
+ description: "Suppress process output and only display a machine-readable summary.",
8
+ }),
9
+ };
10
+ export const makeProcessRenderer = (flags, title) => {
11
+ if (flags.quiet) {
12
+ return new SilentProcessRenderer();
13
+ }
14
+ return new FancyProcessRenderer(title);
15
+ };
@@ -0,0 +1,12 @@
1
+ import { ReactElement, ReactNode } from "react";
2
+ import { ProcessRenderer, RunnableHandler } from "./process.js";
3
+ export declare class SilentProcessRenderer implements ProcessRenderer {
4
+ start(): void;
5
+ addStep(title: ReactElement): RunnableHandler;
6
+ runStep<TRes>(unusedTitle: ReactNode, fn: () => Promise<TRes>): Promise<TRes>;
7
+ addInfo(): void;
8
+ complete(): void;
9
+ error(err: unknown): void;
10
+ addConfirmation(): Promise<boolean>;
11
+ addInput(): Promise<string>;
12
+ }
@@ -0,0 +1,29 @@
1
+ import { RunnableHandler } from "./process.js";
2
+ export class SilentProcessRenderer {
3
+ start() {
4
+ // 🤐
5
+ }
6
+ addStep(title) {
7
+ return new RunnableHandler({ type: "step", title, phase: "aborted" }, () => {
8
+ // empty
9
+ });
10
+ }
11
+ runStep(unusedTitle, fn) {
12
+ return fn();
13
+ }
14
+ addInfo() {
15
+ // 🤐
16
+ }
17
+ complete() {
18
+ // 🤐
19
+ }
20
+ error(err) {
21
+ console.error(err);
22
+ }
23
+ addConfirmation() {
24
+ return Promise.resolve(true);
25
+ }
26
+ addInput() {
27
+ throw new Error("no interactive input available in quiet mode");
28
+ }
29
+ }
@@ -1,6 +1,8 @@
1
1
  import { FlagInput } from "@oclif/core/lib/interfaces/parser.js";
2
2
  import { InferredFlags } from "@oclif/core/lib/interfaces/index.js";
3
3
  import { Class } from "type-fest";
4
+ export type InferredOutput<T> = T extends Class<FlagSupportedSetup<FlagInput, any, infer TOut>, // eslint-disable-line
5
+ any> ? TOut : never;
4
6
  export declare abstract class FlagSupportedSetup<TFlags extends FlagInput, TSettings, TSetupObject> {
5
7
  flags: TFlags;
6
8
  settings: TSettings;
@@ -1,13 +1,11 @@
1
- import { ComponentProps } from "react";
2
- import { Table } from "../react/components/Table.js";
3
- import { FlagSupportedSetup } from "./FlagSupportedSetup.js";
4
- export type Output = Partial<ComponentProps<typeof Table>>;
1
+ import { FlagSupportedSetup, InferredOutput } from "./FlagSupportedSetup.js";
5
2
  export declare const TableRenderSetup: import("type-fest").Class<FlagSupportedSetup<{
6
- columns: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
7
- }, {
8
- columns: string[];
9
- }, {
10
- columns: string[] | undefined;
11
- }>, [] | [Partial<{
12
- columns: string[];
13
- }>]>;
3
+ columns: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
4
+ extended: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
5
+ noTruncate: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
6
+ }, {}, {
7
+ visibleColumns: string[] | undefined;
8
+ extended: boolean;
9
+ noTruncate: boolean;
10
+ }>, [] | [Partial<{}>]>;
11
+ export type TableRenderSetupOutput = InferredOutput<typeof TableRenderSetup>;
@@ -2,10 +2,23 @@ import { Flags } from "@oclif/core";
2
2
  import { FlagSupportedSetup } from "./FlagSupportedSetup.js";
3
3
  export const TableRenderSetup = FlagSupportedSetup.build({
4
4
  columns: Flags.string({
5
- multiple: true,
5
+ exclusive: ["additional"],
6
+ description: "only show provided columns (comma-seperated)",
6
7
  }),
7
- }, {
8
- columns: ["id", "description"],
9
- }, (flags) => ({
10
- columns: flags.columns,
11
- }));
8
+ extended: Flags.boolean({
9
+ description: "show extra columns",
10
+ }),
11
+ noTruncate: Flags.boolean({
12
+ default: false,
13
+ description: "do not truncate output to fit screen",
14
+ }),
15
+ }, {}, (flags) => {
16
+ const visibleColumns = flags.columns
17
+ ?.split(",")
18
+ .map((colName) => colName.trim());
19
+ return {
20
+ visibleColumns,
21
+ extended: flags.extended,
22
+ noTruncate: flags.noTruncate,
23
+ };
24
+ });
@@ -1,7 +1,7 @@
1
1
  import { FlagSupportedSetup } from "./FlagSupportedSetup.js";
2
- export interface UsePromiseOptions {
3
- autoRefresh: any;
4
- }
2
+ import { usePromise } from "@mittwald/react-use-promise";
3
+ import { Simplify } from "@mittwald/api-client-commons";
4
+ type UsePromiseOptions = Simplify<Parameters<typeof usePromise>[2]>;
5
5
  export declare const UsePromiseRenderSetup: import("type-fest").Class<FlagSupportedSetup<{
6
6
  wait: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<any>;
7
7
  }, {
@@ -9,3 +9,4 @@ export declare const UsePromiseRenderSetup: import("type-fest").Class<FlagSuppor
9
9
  }, UsePromiseOptions>, [] | [Partial<{
10
10
  refreshIntervalSeconds: number;
11
11
  }>]>;
12
+ export {};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mittwald/cli",
3
- "version": "1.0.0-alpha.8",
4
- "description": "Auto-generated CLI for the mittwald API",
3
+ "version": "1.0.0-alpha.9",
4
+ "description": "Hand-crafted CLI for the mittwald API",
5
5
  "license": "MIT",
6
6
  "author": {
7
7
  "name": "Mittwald CM Service GmbH & Co. KG",
@@ -13,41 +13,43 @@
13
13
  },
14
14
  "type": "module",
15
15
  "scripts": {
16
- "generate:commands": "yarn generate:commands:v2",
17
- "generate:commands-dev": "yarn generate:commands-dev:v2",
18
- "generate:commands-dev:v2": "curl --silent https://api-public.dev.mittwald.systems/openapi | ./transform-openapi.sh | yarn acg generate --name MittwaldAPIV2 --outputFormat=oclifCommands - src --optionalHeader x-access-token",
19
- "generate:commands:v2": "curl --silent https://api.mittwald.de/openapi | ./transform-openapi.sh | yarn acg generate --name MittwaldAPIV2 --outputFormat=oclifCommands - src --optionalHeader x-access-token",
20
- "post:generate": "yarn run -T compile && yarn run -T compile:cjs",
21
16
  "clean": "(rimraf --glob dist tsconfig.*.tsbuildinfo) | true",
22
17
  "compile": "tsc --build tsconfig.esm.json",
23
18
  "compile:all": "yarn clean && yarn compile:cjs && yarn compile:esm",
24
19
  "compile:cjs": "tsc --build tsconfig.cjs.json",
25
20
  "compile:esm": "tsc --build tsconfig.esm.json",
26
21
  "format": "prettier --write $@ '**/*.{ts,tsx,yaml,yml,json,md,mdx}'",
22
+ "generate:commands": "yarn generate:commands:v2",
23
+ "generate:commands-dev": "yarn generate:commands-dev:v2",
24
+ "generate:commands-dev:v2": "curl --silent https://api-public.dev.mittwald.systems/openapi | ./transform-openapi.sh | yarn acg generate --name MittwaldAPIV2 --outputFormat=oclifCommands - src --optionalHeader x-access-token",
25
+ "generate:commands:v2": "curl --silent https://api.mittwald.de/openapi | ./transform-openapi.sh | yarn acg generate --name MittwaldAPIV2 --outputFormat=oclifCommands - src --optionalHeader x-access-token",
27
26
  "license-check": "yarn pnpify license-checker-rseidelsohn ",
28
27
  "lint": "eslint . --cache",
29
- "test": "yarn lint && yarn format --check && yarn test:packages && yarn test:licenses",
30
- "test:licenses": "yarn license-check --summary --unknown && yarn license-check --unknown --failOn 'UNLICENSED;UNKNOWN'",
31
- "test:packages": "yarn all run test",
28
+ "package": "yarn package:tarballs && yarn package:windows && yarn package:macos",
29
+ "package:macos": "oclif pack macos",
32
30
  "package:tarballs": "oclif pack tarballs --targets=linux-x64,linux-arm64,darwin-x64,darwin-arm64 --no-xz",
33
31
  "package:windows": "oclif pack win",
34
- "package:macos": "oclif pack macos",
35
- "package": "yarn package:tarballs && yarn package:windows && yarn package:macos"
32
+ "post:generate": "yarn run -T compile && yarn run -T compile:cjs",
33
+ "test": "yarn lint && yarn format --check && yarn test:licenses",
34
+ "test:licenses": "yarn license-check --summary --unknown && yarn license-check --unknown --failOn 'UNLICENSED;UNKNOWN'"
36
35
  },
37
36
  "files": [
37
+ ".deps",
38
38
  "{dist,dist-cjs}/**/*.{js,d.ts}",
39
- "bin",
40
- ".deps"
39
+ "bin"
41
40
  ],
42
41
  "dependencies": {
43
- "@mittwald/api-client": "./.deps/client.tgz",
44
- "@mittwald/api-client-commons": "./.deps/commons.tgz",
42
+ "@mittwald/api-client": "^2.0.1",
43
+ "@mittwald/api-client-commons": "^3.0.0-alpha.1",
45
44
  "@mittwald/react-use-promise": "^1.2.2",
46
45
  "@oclif/core": "^2.8.5",
47
46
  "@oclif/plugin-help": "^5.2.9",
48
47
  "chalk": "^5.3.0",
49
48
  "date-fns": "^2.30.0",
49
+ "humanize-string": "^3.0.0",
50
50
  "ink": "^4.2.0",
51
+ "ink-link": "^3.0.0",
52
+ "ink-text-input": "^5.0.1",
51
53
  "js-yaml": "^4.1.0",
52
54
  "marked": "^5.1.0",
53
55
  "marked-terminal": "^5.2.0",
@@ -58,10 +60,6 @@
58
60
  "semver": "^7.5.4",
59
61
  "tempfile": "^5.0.0"
60
62
  },
61
- "resolutions": {
62
- "@mittwald/api-client": "./.deps/client.tgz",
63
- "@mittwald/api-client-commons": "./.deps/commons.tgz"
64
- },
65
63
  "devDependencies": {
66
64
  "@types/chalk": "^2.2.0",
67
65
  "@types/copyfiles": "^2.4.1",
@@ -93,6 +91,9 @@
93
91
  "type-fest": "^3.12.0",
94
92
  "typescript": "^5.1.6"
95
93
  },
94
+ "resolutions": {
95
+ "@mittwald/api-client-commons": "^3.0.0-alpha.1"
96
+ },
96
97
  "oclif": {
97
98
  "bin": "mw",
98
99
  "dirname": "mw",
@@ -105,11 +106,41 @@
105
106
  ],
106
107
  "topicSeparator": " ",
107
108
  "topics": {
109
+ "app": {
110
+ "description": "Manage apps, and app installations in your projects"
111
+ },
112
+ "article": {
113
+ "description": "Query available hosting articles"
114
+ },
115
+ "context": {
116
+ "description": "Save certain environment parameters for later use"
117
+ },
118
+ "contract": {
119
+ "description": "Manage your hosting contracts, and order new ones"
120
+ },
121
+ "conversation": {
122
+ "description": "Manage your support cases"
123
+ },
124
+ "database": {
125
+ "description": "Manage databases (like MySQL and Redis) in your projects"
126
+ },
127
+ "domain": {
128
+ "description": "Manage domains, virtual hosts and DNS settings in your projects"
129
+ },
108
130
  "login": {
109
131
  "description": "Manage your client authentication"
110
132
  },
133
+ "mail": {
134
+ "description": "Manage mailboxes and mail addresses in your projects"
135
+ },
136
+ "org": {
137
+ "description": "Manage your organizations, and also any kinds of user memberships concerning these organizations."
138
+ },
111
139
  "project": {
112
- "description": "The project API allows you to manage your projects, and also any kinds of user memberships concerning these projects."
140
+ "description": "Manage your projects, and also any kinds of user memberships concerning these projects."
141
+ },
142
+ "server": {
143
+ "description": "Manage your servers"
113
144
  },
114
145
  "user": {
115
146
  "description": "Manage your own user account",
package/.deps/client.tgz DELETED
Binary file
package/.deps/commons.tgz DELETED
Binary file
@@ -1,3 +0,0 @@
1
- import { GeneratedProjectFileSystemGetDirectories } from "../../../generated/projectFileSystem/getDirectories.js";
2
- export default class Get extends GeneratedProjectFileSystemGetDirectories {
3
- }
@@ -1,6 +0,0 @@
1
- /* eslint-disable */
2
- /* prettier-ignore */
3
- /* This file is auto-generated with acg (@mittwald/api-code-generator) */
4
- import { GeneratedProjectFileSystemGetDirectories } from "../../../generated/projectFileSystem/getDirectories.js";
5
- export default class Get extends GeneratedProjectFileSystemGetDirectories {
6
- }
@@ -1,3 +0,0 @@
1
- import { GeneratedProjectFileSystemGetFileContent } from "../../../generated/projectFileSystem/getFileContent.js";
2
- export default class Get extends GeneratedProjectFileSystemGetFileContent {
3
- }
@@ -1,6 +0,0 @@
1
- /* eslint-disable */
2
- /* prettier-ignore */
3
- /* This file is auto-generated with acg (@mittwald/api-code-generator) */
4
- import { GeneratedProjectFileSystemGetFileContent } from "../../../generated/projectFileSystem/getFileContent.js";
5
- export default class Get extends GeneratedProjectFileSystemGetFileContent {
6
- }
@@ -1,16 +0,0 @@
1
- import { MittwaldAPIV2Client, MittwaldAPIV2 } from "@mittwald/api-client";
2
- import { GetBaseCommand } from "../../../GetBaseCommand.js";
3
- export type PathParams = MittwaldAPIV2.Paths.V2ProjectsProjectIdFilesystemFiles.Get.Parameters.Path;
4
- type APIResponse = Awaited<ReturnType<MittwaldAPIV2Client["projectFileSystem"]["listFiles"]>>;
5
- export declare abstract class List extends GetBaseCommand<typeof List, APIResponse> {
6
- static description: string;
7
- static flags: {
8
- [x: string]: import("@oclif/core/lib/interfaces/parser.js").CompletableFlag<any>;
9
- };
10
- static args: {
11
- projectId: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
12
- };
13
- protected getData(): Promise<APIResponse>;
14
- protected mapParams(input: PathParams): Promise<PathParams> | PathParams;
15
- }
16
- export {};
@@ -1,25 +0,0 @@
1
- /* eslint-disable */
2
- /* prettier-ignore */
3
- import { Args } from "@oclif/core";
4
- import { GetBaseCommand } from "../../../GetBaseCommand.js";
5
- export class List extends GetBaseCommand {
6
- // todo: useful description
7
- static description = "Get a foooooooo.";
8
- static flags = {
9
- ...GetBaseCommand.baseFlags,
10
- };
11
- static args = {
12
- projectId: Args.string({
13
- description: "ID of the Project.",
14
- required: true,
15
- }),
16
- };
17
- async getData() {
18
- return await this.apiClient.projectFileSystem.listFiles({
19
- pathParameters: await this.mapParams(this.args),
20
- });
21
- }
22
- mapParams(input) {
23
- return input;
24
- }
25
- }
@@ -1,7 +0,0 @@
1
- import { ExtendedBaseCommand } from "../../ExtendedBaseCommand.js";
2
- export default class List extends ExtendedBaseCommand<typeof List> {
3
- static flags: {
4
- columns: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
5
- };
6
- run(): Promise<void>;
7
- }
@@ -1,18 +0,0 @@
1
- import { ExtendedBaseCommand } from "../../ExtendedBaseCommand.js";
2
- import { assertStatus } from "@mittwald/api-client-commons";
3
- import { TableRenderSetup } from "../../rendering/setup/TableRenderSetup.js";
4
- import { Table } from "../../rendering/oclif/components/table.js";
5
- const tableSetup = new TableRenderSetup({
6
- columns: ["id", "name"],
7
- });
8
- export default class List extends ExtendedBaseCommand {
9
- static flags = {
10
- ...tableSetup.flags,
11
- };
12
- async run() {
13
- const projects = await this.apiClient.project.listProjects({});
14
- assertStatus(projects, 200);
15
- const setup = tableSetup.getSetup(this.flags);
16
- Table.build(projects.data, setup).render();
17
- }
18
- }
@@ -1,26 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { assertStatus } from "@mittwald/api-client-commons";
3
- import { usePromise } from "@mittwald/react-use-promise";
4
- import { RenderBaseCommand } from "../../rendering/react/RenderBaseCommand.js";
5
- import { useRenderContext } from "../../rendering/react/context.js";
6
- import { Table } from "../../rendering/react/components/Table.js";
7
- import { UsePromiseRenderSetup } from "../../rendering/setup/usePromiseSetup.js";
8
- import { TableRenderSetup } from "../../rendering/setup/TableRenderSetup.js";
9
- const usePromiseSetup = new UsePromiseRenderSetup();
10
- const tableSetup = new TableRenderSetup({
11
- columns: ["id", "name"],
12
- });
13
- export default class List extends RenderBaseCommand {
14
- static flags = {
15
- ...usePromiseSetup.flags,
16
- ...tableSetup.flags,
17
- };
18
- render() {
19
- const { apiClient } = useRenderContext();
20
- const tableProps = tableSetup.getSetup(this.flags);
21
- const usePromiseOptions = usePromiseSetup.getSetup(this.flags);
22
- const projects = usePromise(apiClient.project.listProjects, [], usePromiseOptions);
23
- assertStatus(projects, 200);
24
- return _jsx(Table, { rows: projects.data, ...tableProps });
25
- }
26
- }
@@ -1,13 +0,0 @@
1
- import { MittwaldAPIV2, MittwaldAPIV2Client } from "@mittwald/api-client";
2
- import { ListBaseCommand } from "../../ListBaseCommand.js";
3
- export type PathParams = MittwaldAPIV2.Paths.V2ProjectsProjectIdCronjobs.Get.Parameters.Path;
4
- export type Response = Awaited<ReturnType<MittwaldAPIV2Client["cronjob"]["listCronjobs"]>>;
5
- export declare abstract class GeneratedCronjobListCronjobs<TItem extends Record<string, unknown>> extends ListBaseCommand<typeof GeneratedCronjobListCronjobs, TItem, Response> {
6
- static description: string;
7
- static args: {};
8
- static flags: {
9
- "project-id": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
10
- };
11
- getData(): Promise<Response>;
12
- protected mapParams(input: PathParams): Promise<PathParams> | PathParams;
13
- }