cdd-cli 3.1.7 → 3.2.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.
Files changed (136) hide show
  1. package/.eslintrc.json +1 -1
  2. package/.github/workflows/ci.yml +3 -0
  3. package/.github/workflows/docs.yml +8 -1
  4. package/CHANGELOG.md +40 -0
  5. package/CONTRIBUTING.md +28 -15
  6. package/README.md +56 -88
  7. package/babel.config.cjs +18 -1
  8. package/coverage/clover.xml +604 -0
  9. package/coverage/coverage-final.json +17 -0
  10. package/coverage/lcov-report/base.css +224 -0
  11. package/coverage/lcov-report/block-navigation.js +87 -0
  12. package/coverage/lcov-report/favicon.png +0 -0
  13. package/coverage/lcov-report/helpers/constants.js.html +235 -0
  14. package/coverage/lcov-report/helpers/containerOptionsBuilder.js.html +211 -0
  15. package/coverage/lcov-report/helpers/dockerService/serviceComponents/containerActions.js.html +853 -0
  16. package/coverage/lcov-report/helpers/dockerService/serviceComponents/containerList.js.html +289 -0
  17. package/coverage/lcov-report/helpers/dockerService/serviceComponents/index.html +131 -0
  18. package/coverage/lcov-report/helpers/index.html +176 -0
  19. package/coverage/lcov-report/helpers/logger.js.html +424 -0
  20. package/coverage/lcov-report/helpers/safeCall.js.html +139 -0
  21. package/coverage/lcov-report/helpers/validationHelpers.js.html +394 -0
  22. package/coverage/lcov-report/hooks/creation/index.html +146 -0
  23. package/coverage/lcov-report/hooks/creation/useContainerActions.js.html +292 -0
  24. package/coverage/lcov-report/hooks/creation/useContainerCreation.js.html +478 -0
  25. package/coverage/lcov-report/hooks/creation/useLogsViewer.js.html +238 -0
  26. package/coverage/lcov-report/hooks/debug/index.html +116 -0
  27. package/coverage/lcov-report/hooks/debug/useDebugLogs.js.html +172 -0
  28. package/coverage/lcov-report/hooks/index.html +161 -0
  29. package/coverage/lcov-report/hooks/navigation/index.html +116 -0
  30. package/coverage/lcov-report/hooks/navigation/useContainerSelection.js.html +160 -0
  31. package/coverage/lcov-report/hooks/useContainerCommandRouter.js.html +415 -0
  32. package/coverage/lcov-report/hooks/useControls.js.html +685 -0
  33. package/coverage/lcov-report/hooks/useEraseConfirmation.js.html +202 -0
  34. package/coverage/lcov-report/hooks/useExitHandler.js.html +283 -0
  35. package/coverage/lcov-report/index.html +191 -0
  36. package/coverage/lcov-report/prettify.css +1 -0
  37. package/coverage/lcov-report/prettify.js +2 -0
  38. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  39. package/coverage/lcov-report/sorter.js +210 -0
  40. package/coverage/lcov.info +1216 -0
  41. package/dist/components/ContainerRow.js +5 -78
  42. package/dist/components/LogViewer.js +4 -9
  43. package/dist/helpers/containerOptionsBuilder.js +58 -0
  44. package/dist/hooks/creation/useContainerCreation.js +16 -1
  45. package/dist/hooks/debug/useDebugLogs.js +46 -0
  46. package/dist/hooks/navigation/useContainerSelection.js +36 -0
  47. package/dist/hooks/useContainerCommandRouter.js +151 -0
  48. package/dist/{helpers/actionHelpers.js → hooks/useContainerStats.js} +76 -78
  49. package/dist/hooks/useControls.js +83 -342
  50. package/dist/hooks/useEraseConfirmation.js +47 -0
  51. package/dist/hooks/useExitHandler.js +68 -0
  52. package/jest.config.cjs +1 -1
  53. package/package.json +2 -3
  54. package/src/components/ContainerRow.jsx +3 -38
  55. package/src/components/LogViewer.jsx +4 -10
  56. package/src/helpers/constants.js +20 -0
  57. package/src/helpers/containerOptionsBuilder.js +42 -0
  58. package/src/helpers/dockerService/serviceComponents/containerActions.js +55 -8
  59. package/src/helpers/validationHelpers.js +75 -18
  60. package/src/hooks/creation/useContainerCreation.js +34 -4
  61. package/src/hooks/debug/useDebugLogs.js +29 -0
  62. package/src/hooks/navigation/useContainerSelection.js +25 -0
  63. package/src/hooks/useContainerCommandRouter.js +110 -0
  64. package/src/hooks/useContainerStats.js +44 -0
  65. package/src/hooks/useControls.js +75 -274
  66. package/src/hooks/useEraseConfirmation.js +39 -0
  67. package/src/hooks/useExitHandler.js +66 -0
  68. package/test/containerActions.test.js +104 -13
  69. package/test/containerOptionsBuilder.test.js +36 -0
  70. package/test/useContainerCreation.dom.test.js +46 -2
  71. package/test/useControls.dom.test.js +117 -0
  72. package/test/validationHelpers.test.js +51 -0
  73. package/.babelrc +0 -6
  74. package/FIXES_APPLIED.md +0 -419
  75. package/SECURITY.md +0 -5
  76. package/dist/hooks/useLogsStream.js +0 -41
  77. package/docs/_config.yml +0 -13
  78. package/docs/components_ContainerCreationPrompt.jsx.html +0 -114
  79. package/docs/components_ContainerRow.jsx.html +0 -151
  80. package/docs/components_ContainerSection.jsx.html +0 -75
  81. package/docs/components_Footer.jsx.html +0 -66
  82. package/docs/components_Header.jsx.html +0 -84
  83. package/docs/components_LogViewer.jsx.html +0 -91
  84. package/docs/components_MessageFeedback.jsx.html +0 -76
  85. package/docs/components_PromptField.jsx.html +0 -99
  86. package/docs/components_StatsBar.jsx.html +0 -105
  87. package/docs/components_UsageMenu.jsx.html +0 -73
  88. package/docs/fonts/OpenSans-Bold-webfont.eot +0 -0
  89. package/docs/fonts/OpenSans-Bold-webfont.svg +0 -1830
  90. package/docs/fonts/OpenSans-Bold-webfont.woff +0 -0
  91. package/docs/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
  92. package/docs/fonts/OpenSans-BoldItalic-webfont.svg +0 -1830
  93. package/docs/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
  94. package/docs/fonts/OpenSans-Italic-webfont.eot +0 -0
  95. package/docs/fonts/OpenSans-Italic-webfont.svg +0 -1830
  96. package/docs/fonts/OpenSans-Italic-webfont.woff +0 -0
  97. package/docs/fonts/OpenSans-Light-webfont.eot +0 -0
  98. package/docs/fonts/OpenSans-Light-webfont.svg +0 -1831
  99. package/docs/fonts/OpenSans-Light-webfont.woff +0 -0
  100. package/docs/fonts/OpenSans-LightItalic-webfont.eot +0 -0
  101. package/docs/fonts/OpenSans-LightItalic-webfont.svg +0 -1835
  102. package/docs/fonts/OpenSans-LightItalic-webfont.woff +0 -0
  103. package/docs/fonts/OpenSans-Regular-webfont.eot +0 -0
  104. package/docs/fonts/OpenSans-Regular-webfont.svg +0 -1831
  105. package/docs/fonts/OpenSans-Regular-webfont.woff +0 -0
  106. package/docs/global.html +0 -6145
  107. package/docs/helpers_actionHelpers.js.html +0 -94
  108. package/docs/helpers_constants.js.html +0 -81
  109. package/docs/helpers_dockerService_dockerService.js.html +0 -79
  110. package/docs/helpers_dockerService_serviceComponents_containerActions.js.html +0 -153
  111. package/docs/helpers_dockerService_serviceComponents_containerList.js.html +0 -81
  112. package/docs/helpers_dockerService_serviceComponents_containerLogs.js.html +0 -85
  113. package/docs/helpers_dockerService_serviceComponents_containerStats.js.html +0 -107
  114. package/docs/helpers_dockerService_serviceComponents_imageUtils.js.html +0 -82
  115. package/docs/helpers_exitWithMessage.js.html +0 -77
  116. package/docs/helpers_safeCall.js.html +0 -68
  117. package/docs/helpers_validationHelpers.js.html +0 -96
  118. package/docs/hooks_creation_useContainerActions.js.html +0 -120
  119. package/docs/hooks_creation_useContainerCreation.js.html +0 -152
  120. package/docs/hooks_creation_useLogsViewer.js.html +0 -102
  121. package/docs/hooks_useControls.js.html +0 -298
  122. package/docs/hooks_useLogsStream.js.html +0 -82
  123. package/docs/index.html +0 -65
  124. package/docs/index.js.html +0 -65
  125. package/docs/module-index.html +0 -171
  126. package/docs/scripts/linenumber.js +0 -25
  127. package/docs/scripts/prettify/Apache-License-2.0.txt +0 -202
  128. package/docs/scripts/prettify/lang-css.js +0 -2
  129. package/docs/scripts/prettify/prettify.js +0 -28
  130. package/docs/styles/jsdoc-default.css +0 -358
  131. package/docs/styles/prettify-jsdoc.css +0 -111
  132. package/docs/styles/prettify-tomorrow.css +0 -132
  133. package/esbuild.config.cjs +0 -11
  134. package/src/helpers/actionHelpers.js +0 -52
  135. package/src/hooks/useLogsStream.js +0 -31
  136. package/test/actionHelpers.test.js +0 -106
@@ -1,358 +0,0 @@
1
- @font-face {
2
- font-family: 'Open Sans';
3
- font-weight: normal;
4
- font-style: normal;
5
- src: url('../fonts/OpenSans-Regular-webfont.eot');
6
- src:
7
- local('Open Sans'),
8
- local('OpenSans'),
9
- url('../fonts/OpenSans-Regular-webfont.eot?#iefix') format('embedded-opentype'),
10
- url('../fonts/OpenSans-Regular-webfont.woff') format('woff'),
11
- url('../fonts/OpenSans-Regular-webfont.svg#open_sansregular') format('svg');
12
- }
13
-
14
- @font-face {
15
- font-family: 'Open Sans Light';
16
- font-weight: normal;
17
- font-style: normal;
18
- src: url('../fonts/OpenSans-Light-webfont.eot');
19
- src:
20
- local('Open Sans Light'),
21
- local('OpenSans Light'),
22
- url('../fonts/OpenSans-Light-webfont.eot?#iefix') format('embedded-opentype'),
23
- url('../fonts/OpenSans-Light-webfont.woff') format('woff'),
24
- url('../fonts/OpenSans-Light-webfont.svg#open_sanslight') format('svg');
25
- }
26
-
27
- html
28
- {
29
- overflow: auto;
30
- background-color: #fff;
31
- font-size: 14px;
32
- }
33
-
34
- body
35
- {
36
- font-family: 'Open Sans', sans-serif;
37
- line-height: 1.5;
38
- color: #4d4e53;
39
- background-color: white;
40
- }
41
-
42
- a, a:visited, a:active {
43
- color: #0095dd;
44
- text-decoration: none;
45
- }
46
-
47
- a:hover {
48
- text-decoration: underline;
49
- }
50
-
51
- header
52
- {
53
- display: block;
54
- padding: 0px 4px;
55
- }
56
-
57
- tt, code, kbd, samp {
58
- font-family: Consolas, Monaco, 'Andale Mono', monospace;
59
- }
60
-
61
- .class-description {
62
- font-size: 130%;
63
- line-height: 140%;
64
- margin-bottom: 1em;
65
- margin-top: 1em;
66
- }
67
-
68
- .class-description:empty {
69
- margin: 0;
70
- }
71
-
72
- #main {
73
- float: left;
74
- width: 70%;
75
- }
76
-
77
- article dl {
78
- margin-bottom: 40px;
79
- }
80
-
81
- article img {
82
- max-width: 100%;
83
- }
84
-
85
- section
86
- {
87
- display: block;
88
- background-color: #fff;
89
- padding: 12px 24px;
90
- border-bottom: 1px solid #ccc;
91
- margin-right: 30px;
92
- }
93
-
94
- .variation {
95
- display: none;
96
- }
97
-
98
- .signature-attributes {
99
- font-size: 60%;
100
- color: #aaa;
101
- font-style: italic;
102
- font-weight: lighter;
103
- }
104
-
105
- nav
106
- {
107
- display: block;
108
- float: right;
109
- margin-top: 28px;
110
- width: 30%;
111
- box-sizing: border-box;
112
- border-left: 1px solid #ccc;
113
- padding-left: 16px;
114
- }
115
-
116
- nav ul {
117
- font-family: 'Lucida Grande', 'Lucida Sans Unicode', arial, sans-serif;
118
- font-size: 100%;
119
- line-height: 17px;
120
- padding: 0;
121
- margin: 0;
122
- list-style-type: none;
123
- }
124
-
125
- nav ul a, nav ul a:visited, nav ul a:active {
126
- font-family: Consolas, Monaco, 'Andale Mono', monospace;
127
- line-height: 18px;
128
- color: #4D4E53;
129
- }
130
-
131
- nav h3 {
132
- margin-top: 12px;
133
- }
134
-
135
- nav li {
136
- margin-top: 6px;
137
- }
138
-
139
- footer {
140
- display: block;
141
- padding: 6px;
142
- margin-top: 12px;
143
- font-style: italic;
144
- font-size: 90%;
145
- }
146
-
147
- h1, h2, h3, h4 {
148
- font-weight: 200;
149
- margin: 0;
150
- }
151
-
152
- h1
153
- {
154
- font-family: 'Open Sans Light', sans-serif;
155
- font-size: 48px;
156
- letter-spacing: -2px;
157
- margin: 12px 24px 20px;
158
- }
159
-
160
- h2, h3.subsection-title
161
- {
162
- font-size: 30px;
163
- font-weight: 700;
164
- letter-spacing: -1px;
165
- margin-bottom: 12px;
166
- }
167
-
168
- h3
169
- {
170
- font-size: 24px;
171
- letter-spacing: -0.5px;
172
- margin-bottom: 12px;
173
- }
174
-
175
- h4
176
- {
177
- font-size: 18px;
178
- letter-spacing: -0.33px;
179
- margin-bottom: 12px;
180
- color: #4d4e53;
181
- }
182
-
183
- h5, .container-overview .subsection-title
184
- {
185
- font-size: 120%;
186
- font-weight: bold;
187
- letter-spacing: -0.01em;
188
- margin: 8px 0 3px 0;
189
- }
190
-
191
- h6
192
- {
193
- font-size: 100%;
194
- letter-spacing: -0.01em;
195
- margin: 6px 0 3px 0;
196
- font-style: italic;
197
- }
198
-
199
- table
200
- {
201
- border-spacing: 0;
202
- border: 0;
203
- border-collapse: collapse;
204
- }
205
-
206
- td, th
207
- {
208
- border: 1px solid #ddd;
209
- margin: 0px;
210
- text-align: left;
211
- vertical-align: top;
212
- padding: 4px 6px;
213
- display: table-cell;
214
- }
215
-
216
- thead tr
217
- {
218
- background-color: #ddd;
219
- font-weight: bold;
220
- }
221
-
222
- th { border-right: 1px solid #aaa; }
223
- tr > th:last-child { border-right: 1px solid #ddd; }
224
-
225
- .ancestors, .attribs { color: #999; }
226
- .ancestors a, .attribs a
227
- {
228
- color: #999 !important;
229
- text-decoration: none;
230
- }
231
-
232
- .clear
233
- {
234
- clear: both;
235
- }
236
-
237
- .important
238
- {
239
- font-weight: bold;
240
- color: #950B02;
241
- }
242
-
243
- .yes-def {
244
- text-indent: -1000px;
245
- }
246
-
247
- .type-signature {
248
- color: #aaa;
249
- }
250
-
251
- .name, .signature {
252
- font-family: Consolas, Monaco, 'Andale Mono', monospace;
253
- }
254
-
255
- .details { margin-top: 14px; border-left: 2px solid #DDD; }
256
- .details dt { width: 120px; float: left; padding-left: 10px; padding-top: 6px; }
257
- .details dd { margin-left: 70px; }
258
- .details ul { margin: 0; }
259
- .details ul { list-style-type: none; }
260
- .details li { margin-left: 30px; padding-top: 6px; }
261
- .details pre.prettyprint { margin: 0 }
262
- .details .object-value { padding-top: 0; }
263
-
264
- .description {
265
- margin-bottom: 1em;
266
- margin-top: 1em;
267
- }
268
-
269
- .code-caption
270
- {
271
- font-style: italic;
272
- font-size: 107%;
273
- margin: 0;
274
- }
275
-
276
- .source
277
- {
278
- border: 1px solid #ddd;
279
- width: 80%;
280
- overflow: auto;
281
- }
282
-
283
- .prettyprint.source {
284
- width: inherit;
285
- }
286
-
287
- .source code
288
- {
289
- font-size: 100%;
290
- line-height: 18px;
291
- display: block;
292
- padding: 4px 12px;
293
- margin: 0;
294
- background-color: #fff;
295
- color: #4D4E53;
296
- }
297
-
298
- .prettyprint code span.line
299
- {
300
- display: inline-block;
301
- }
302
-
303
- .prettyprint.linenums
304
- {
305
- padding-left: 70px;
306
- -webkit-user-select: none;
307
- -moz-user-select: none;
308
- -ms-user-select: none;
309
- user-select: none;
310
- }
311
-
312
- .prettyprint.linenums ol
313
- {
314
- padding-left: 0;
315
- }
316
-
317
- .prettyprint.linenums li
318
- {
319
- border-left: 3px #ddd solid;
320
- }
321
-
322
- .prettyprint.linenums li.selected,
323
- .prettyprint.linenums li.selected *
324
- {
325
- background-color: lightyellow;
326
- }
327
-
328
- .prettyprint.linenums li *
329
- {
330
- -webkit-user-select: text;
331
- -moz-user-select: text;
332
- -ms-user-select: text;
333
- user-select: text;
334
- }
335
-
336
- .params .name, .props .name, .name code {
337
- color: #4D4E53;
338
- font-family: Consolas, Monaco, 'Andale Mono', monospace;
339
- font-size: 100%;
340
- }
341
-
342
- .params td.description > p:first-child,
343
- .props td.description > p:first-child
344
- {
345
- margin-top: 0;
346
- padding-top: 0;
347
- }
348
-
349
- .params td.description > p:last-child,
350
- .props td.description > p:last-child
351
- {
352
- margin-bottom: 0;
353
- padding-bottom: 0;
354
- }
355
-
356
- .disabled {
357
- color: #454545;
358
- }
@@ -1,111 +0,0 @@
1
- /* JSDoc prettify.js theme */
2
-
3
- /* plain text */
4
- .pln {
5
- color: #000000;
6
- font-weight: normal;
7
- font-style: normal;
8
- }
9
-
10
- /* string content */
11
- .str {
12
- color: #006400;
13
- font-weight: normal;
14
- font-style: normal;
15
- }
16
-
17
- /* a keyword */
18
- .kwd {
19
- color: #000000;
20
- font-weight: bold;
21
- font-style: normal;
22
- }
23
-
24
- /* a comment */
25
- .com {
26
- font-weight: normal;
27
- font-style: italic;
28
- }
29
-
30
- /* a type name */
31
- .typ {
32
- color: #000000;
33
- font-weight: normal;
34
- font-style: normal;
35
- }
36
-
37
- /* a literal value */
38
- .lit {
39
- color: #006400;
40
- font-weight: normal;
41
- font-style: normal;
42
- }
43
-
44
- /* punctuation */
45
- .pun {
46
- color: #000000;
47
- font-weight: bold;
48
- font-style: normal;
49
- }
50
-
51
- /* lisp open bracket */
52
- .opn {
53
- color: #000000;
54
- font-weight: bold;
55
- font-style: normal;
56
- }
57
-
58
- /* lisp close bracket */
59
- .clo {
60
- color: #000000;
61
- font-weight: bold;
62
- font-style: normal;
63
- }
64
-
65
- /* a markup tag name */
66
- .tag {
67
- color: #006400;
68
- font-weight: normal;
69
- font-style: normal;
70
- }
71
-
72
- /* a markup attribute name */
73
- .atn {
74
- color: #006400;
75
- font-weight: normal;
76
- font-style: normal;
77
- }
78
-
79
- /* a markup attribute value */
80
- .atv {
81
- color: #006400;
82
- font-weight: normal;
83
- font-style: normal;
84
- }
85
-
86
- /* a declaration */
87
- .dec {
88
- color: #000000;
89
- font-weight: bold;
90
- font-style: normal;
91
- }
92
-
93
- /* a variable name */
94
- .var {
95
- color: #000000;
96
- font-weight: normal;
97
- font-style: normal;
98
- }
99
-
100
- /* a function name */
101
- .fun {
102
- color: #000000;
103
- font-weight: bold;
104
- font-style: normal;
105
- }
106
-
107
- /* Specify class=linenums on a pre to get line numbering */
108
- ol.linenums {
109
- margin-top: 0;
110
- margin-bottom: 0;
111
- }
@@ -1,132 +0,0 @@
1
- /* Tomorrow Theme */
2
- /* Original theme - https://github.com/chriskempson/tomorrow-theme */
3
- /* Pretty printing styles. Used with prettify.js. */
4
- /* SPAN elements with the classes below are added by prettyprint. */
5
- /* plain text */
6
- .pln {
7
- color: #4d4d4c; }
8
-
9
- @media screen {
10
- /* string content */
11
- .str {
12
- color: #718c00; }
13
-
14
- /* a keyword */
15
- .kwd {
16
- color: #8959a8; }
17
-
18
- /* a comment */
19
- .com {
20
- color: #8e908c; }
21
-
22
- /* a type name */
23
- .typ {
24
- color: #4271ae; }
25
-
26
- /* a literal value */
27
- .lit {
28
- color: #f5871f; }
29
-
30
- /* punctuation */
31
- .pun {
32
- color: #4d4d4c; }
33
-
34
- /* lisp open bracket */
35
- .opn {
36
- color: #4d4d4c; }
37
-
38
- /* lisp close bracket */
39
- .clo {
40
- color: #4d4d4c; }
41
-
42
- /* a markup tag name */
43
- .tag {
44
- color: #c82829; }
45
-
46
- /* a markup attribute name */
47
- .atn {
48
- color: #f5871f; }
49
-
50
- /* a markup attribute value */
51
- .atv {
52
- color: #3e999f; }
53
-
54
- /* a declaration */
55
- .dec {
56
- color: #f5871f; }
57
-
58
- /* a variable name */
59
- .var {
60
- color: #c82829; }
61
-
62
- /* a function name */
63
- .fun {
64
- color: #4271ae; } }
65
- /* Use higher contrast and text-weight for printable form. */
66
- @media print, projection {
67
- .str {
68
- color: #060; }
69
-
70
- .kwd {
71
- color: #006;
72
- font-weight: bold; }
73
-
74
- .com {
75
- color: #600;
76
- font-style: italic; }
77
-
78
- .typ {
79
- color: #404;
80
- font-weight: bold; }
81
-
82
- .lit {
83
- color: #044; }
84
-
85
- .pun, .opn, .clo {
86
- color: #440; }
87
-
88
- .tag {
89
- color: #006;
90
- font-weight: bold; }
91
-
92
- .atn {
93
- color: #404; }
94
-
95
- .atv {
96
- color: #060; } }
97
- /* Style */
98
- /*
99
- pre.prettyprint {
100
- background: white;
101
- font-family: Consolas, Monaco, 'Andale Mono', monospace;
102
- font-size: 12px;
103
- line-height: 1.5;
104
- border: 1px solid #ccc;
105
- padding: 10px; }
106
- */
107
-
108
- /* Specify class=linenums on a pre to get line numbering */
109
- ol.linenums {
110
- margin-top: 0;
111
- margin-bottom: 0; }
112
-
113
- /* IE indents via margin-left */
114
- li.L0,
115
- li.L1,
116
- li.L2,
117
- li.L3,
118
- li.L4,
119
- li.L5,
120
- li.L6,
121
- li.L7,
122
- li.L8,
123
- li.L9 {
124
- /* */ }
125
-
126
- /* Alternate shading for lines */
127
- li.L1,
128
- li.L3,
129
- li.L5,
130
- li.L7,
131
- li.L9 {
132
- /* */ }
@@ -1,11 +0,0 @@
1
- const { build } = require('esbuild');
2
-
3
- build({
4
- entryPoints: ['src/index.js'],
5
- bundle: true,
6
- minify: true,
7
- platform: 'node',
8
- outfile: 'dist/cdd.bundle.js',
9
- sourcemap: true,
10
- external: ['dockerode', 'ink'],
11
- }).catch(() => process.exit(1));
@@ -1,52 +0,0 @@
1
- import { MESSAGE_TIMEOUTS } from "../helpers/constants.js";
2
- import { logger } from "./logger.js";
3
- /**
4
- * Generic helper to perform a container action with user feedback.
5
- *
6
- * @param {Object} params
7
- * @param {Array} params.containers - Array of container objects
8
- * @param {number} params.selected - Index of the selected container
9
- * @param {Function} params.actionFn - Async function that performs the action (receives container id)
10
- * @param {string} params.actionLabel - Label used in feedback messages (e.g. 'Starting')
11
- * @param {Function} params.setMessage - Setter for feedback message
12
- * @param {Function} params.setMessageColor - Setter for feedback color
13
- * @param {Function} [params.stateCheck] - Optional function that validates container state before action
14
- * @returns {Promise<void>}
15
- */
16
- export async function handleAction({
17
- containers,
18
- selected,
19
- actionFn,
20
- actionLabel,
21
- setMessage,
22
- setMessageColor,
23
- stateCheck
24
- }) {
25
- const c = containers[selected];
26
- if (!c) return;
27
- if (stateCheck) {
28
- const failureReason = stateCheck(c);
29
- if (failureReason) {
30
- logger.warn("Action %s blocked for container %s: %s", actionLabel, c.id, failureReason);
31
- setMessage(failureReason);
32
- setMessageColor("red");
33
- setTimeout(() => setMessage(""), MESSAGE_TIMEOUTS.SHORT);
34
- return;
35
- }
36
- }
37
- setMessage(`${actionLabel} container...`);
38
- setMessageColor("green");
39
- logger.info("Action %s requested for container %s", actionLabel, c.id);
40
- try {
41
- await actionFn(c.id);
42
- setMessage(`${actionLabel} container completed successfully`);
43
- setMessageColor("green");
44
- setTimeout(() => setMessage(""), MESSAGE_TIMEOUTS.DEFAULT);
45
- logger.info("Action %s completed for container %s", actionLabel, c.id);
46
- } catch (err) {
47
- setMessage(`Failed to ${actionLabel.toLowerCase()} container.`);
48
- setMessageColor("red");
49
- setTimeout(() => setMessage(""), MESSAGE_TIMEOUTS.DEFAULT);
50
- logger.error("Action %s failed for container %s", actionLabel, c.id, err);
51
- }
52
- }
@@ -1,31 +0,0 @@
1
- import React, { useRef, useCallback } from "react";
2
- import { getLogsStream } from "../helpers/dockerService/serviceComponents/containerLogs";
3
- import { safeCall } from "../helpers/safeCall";
4
-
5
- /**
6
- * Hook that manages opening and closing a logs stream for a container.
7
- *
8
- * @returns {Object} { openLogs, closeLogs }
9
- */
10
- export function useLogsStream() {
11
- const logsStreamRef = useRef(null);
12
-
13
- const openLogs = useCallback((containerId, setLogs) => {
14
- setLogs([]);
15
- logsStreamRef.current = getLogsStream(
16
- containerId,
17
- (data) => setLogs((prev) => ([...prev, ...data.split("\n").filter(Boolean)])),
18
- () => {},
19
- (err) => setLogs((prev) => ([...prev, `Error: ${err.message}`]))
20
- );
21
- }, []);
22
-
23
- const closeLogs = useCallback(() => {
24
- if (logsStreamRef.current) {
25
- safeCall(logsStreamRef.current.destroy?.bind(logsStreamRef.current));
26
- logsStreamRef.current = null;
27
- }
28
- }, []);
29
-
30
- return { openLogs, closeLogs };
31
- }