cdd-cli 3.2.2 → 4.0.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.
- package/.~lock.ROADMAP.md# +1 -0
- package/CHANGELOG.md +51 -0
- package/README.es.md +198 -0
- package/README.md +81 -23
- package/ROADMAP.md +647 -0
- package/coverage/clover.xml +400 -519
- package/coverage/coverage-final.json +16 -20
- package/coverage/lcov-report/ContainerCreationPrompt.jsx.html +400 -0
- package/coverage/lcov-report/ControlsHUD.jsx.html +256 -0
- package/coverage/lcov-report/components/ContainerCreationPrompt.jsx.html +31 -13
- package/coverage/lcov-report/components/PromptField.jsx.html +4 -4
- package/coverage/lcov-report/components/SuggestionPanel.jsx.html +37 -13
- package/coverage/lcov-report/components/index.html +14 -14
- package/coverage/lcov-report/helpers/constants.js.html +87 -33
- package/coverage/lcov-report/helpers/containerOptionsBuilder.js.html +40 -40
- package/coverage/lcov-report/helpers/dockerHubService.js.html +310 -0
- package/coverage/lcov-report/helpers/dockerService/serviceComponents/containerActions.js.html +1 -1
- package/coverage/lcov-report/helpers/dockerService/serviceComponents/containerList.js.html +1 -1
- package/coverage/lcov-report/helpers/dockerService/serviceComponents/index.html +1 -1
- package/coverage/lcov-report/helpers/imageNameUtils.js.html +18 -18
- package/coverage/lcov-report/helpers/index.html +77 -62
- package/coverage/lcov-report/helpers/logger.js.html +60 -60
- package/coverage/lcov-report/helpers/safeCall.js.html +14 -14
- package/coverage/lcov-report/helpers/validationHelpers.js.html +52 -52
- package/coverage/lcov-report/hooks/creation/index.html +19 -19
- package/coverage/lcov-report/hooks/creation/useContainerActions.js.html +4 -4
- package/coverage/lcov-report/hooks/creation/useContainerCreation.js.html +225 -48
- package/coverage/lcov-report/hooks/creation/useLogsViewer.js.html +5 -5
- package/coverage/lcov-report/hooks/debug/index.html +1 -1
- package/coverage/lcov-report/hooks/debug/useDebugLogs.js.html +7 -7
- package/coverage/lcov-report/hooks/index.html +15 -15
- package/coverage/lcov-report/hooks/navigation/index.html +1 -1
- package/coverage/lcov-report/hooks/navigation/useContainerSelection.js.html +6 -6
- package/coverage/lcov-report/hooks/useContainerCommandRouter.js.html +13 -13
- package/coverage/lcov-report/hooks/useControls.js.html +82 -40
- package/coverage/lcov-report/hooks/useEraseConfirmation.js.html +5 -5
- package/coverage/lcov-report/hooks/useExitHandler.js.html +6 -6
- package/coverage/lcov-report/index.html +38 -68
- package/coverage/lcov.info +742 -981
- package/dist/App.js +7 -1
- package/dist/components/ContainerCreationPrompt.js +26 -10
- package/dist/components/ControlsHUD.js +106 -0
- package/dist/components/SuggestionPanel.js +16 -7
- package/dist/helpers/constants.js +60 -21
- package/dist/helpers/dockerHubService.js +111 -0
- package/dist/helpers/logger.js +1 -1
- package/dist/hooks/creation/useContainerActions.js +22 -5
- package/dist/hooks/creation/useContainerCreation.js +395 -107
- package/dist/hooks/useContainerCommandRouter.js +1 -1
- package/dist/hooks/useControls.js +23 -7
- package/dist/index.js +7 -0
- package/package.json +1 -1
- package/src/App.jsx +6 -0
- package/src/components/ContainerCreationPrompt.jsx +15 -5
- package/src/components/ControlsHUD.jsx +66 -0
- package/src/components/SuggestionPanel.jsx +10 -2
- package/src/helpers/constants.js +38 -20
- package/src/helpers/dockerHubService.js +75 -0
- package/src/helpers/logger.js +1 -2
- package/src/hooks/creation/useContainerActions.js +19 -6
- package/src/hooks/creation/useContainerCreation.js +224 -87
- package/src/hooks/useContainerCommandRouter.js +1 -1
- package/src/hooks/useControls.js +24 -8
- package/src/index.js +4 -0
- package/test/ContainerCreationPrompt.dom.test.js +245 -0
- package/test/ControlsHUD.dom.test.js +125 -0
- package/test/SuggestionPanel.dom.test.js +30 -0
- package/test/constants.test.js +7 -0
- package/test/dockerHubService.test.js +213 -0
- package/test/logger.test.js +58 -0
- package/test/resolveImageTag.test.js +26 -0
- package/test/useContainerCreation.dom.test.js +306 -3
- package/test/useContainerCreationHub.dom.test.js +184 -0
- package/test/useControls.dom.test.js +212 -6
|
@@ -23,16 +23,16 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">81.08% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>30/37</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">77.41% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>24/31</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
@@ -44,9 +44,9 @@
|
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">85.71% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>30/35</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -162,18 +162,17 @@
|
|
|
162
162
|
<span class="cline-any cline-neutral"> </span>
|
|
163
163
|
<span class="cline-any cline-neutral"> </span>
|
|
164
164
|
<span class="cline-any cline-neutral"> </span>
|
|
165
|
-
<span class="cline-any cline-yes">
|
|
166
|
-
<span class="cline-any cline-yes">
|
|
167
|
-
<span class="cline-any cline-neutral"> </span>
|
|
168
|
-
<span class="cline-any cline-yes">6x</span>
|
|
165
|
+
<span class="cline-any cline-yes">1x</span>
|
|
166
|
+
<span class="cline-any cline-yes">1x</span>
|
|
169
167
|
<span class="cline-any cline-neutral"> </span>
|
|
170
|
-
<span class="cline-any cline-yes">
|
|
171
|
-
<span class="cline-any cline-yes">5x</span>
|
|
172
|
-
<span class="cline-any cline-yes">6x</span>
|
|
173
|
-
<span class="cline-any cline-yes">6x</span>
|
|
168
|
+
<span class="cline-any cline-yes">1x</span>
|
|
174
169
|
<span class="cline-any cline-neutral"> </span>
|
|
175
|
-
<span class="cline-any cline-yes">
|
|
170
|
+
<span class="cline-any cline-yes">1x</span>
|
|
171
|
+
<span class="cline-any cline-yes">1x</span>
|
|
172
|
+
<span class="cline-any cline-yes">1x</span>
|
|
173
|
+
<span class="cline-any cline-yes">1x</span>
|
|
176
174
|
<span class="cline-any cline-neutral"> </span>
|
|
175
|
+
<span class="cline-any cline-yes">1x</span>
|
|
177
176
|
<span class="cline-any cline-neutral"> </span>
|
|
178
177
|
<span class="cline-any cline-neutral"> </span>
|
|
179
178
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -190,52 +189,53 @@
|
|
|
190
189
|
<span class="cline-any cline-neutral"> </span>
|
|
191
190
|
<span class="cline-any cline-neutral"> </span>
|
|
192
191
|
<span class="cline-any cline-neutral"> </span>
|
|
193
|
-
<span class="cline-any cline-yes">22x</span>
|
|
194
192
|
<span class="cline-any cline-neutral"> </span>
|
|
193
|
+
<span class="cline-any cline-yes">7x</span>
|
|
195
194
|
<span class="cline-any cline-neutral"> </span>
|
|
196
|
-
<span class="cline-any cline-yes">22x</span>
|
|
197
|
-
<span class="cline-any cline-yes">22x</span>
|
|
198
195
|
<span class="cline-any cline-neutral"> </span>
|
|
199
|
-
<span class="cline-any cline-yes">
|
|
200
|
-
<span class="cline-any cline-yes">
|
|
196
|
+
<span class="cline-any cline-yes">7x</span>
|
|
197
|
+
<span class="cline-any cline-yes">7x</span>
|
|
201
198
|
<span class="cline-any cline-neutral"> </span>
|
|
202
|
-
<span class="cline-any cline-yes">
|
|
199
|
+
<span class="cline-any cline-yes">7x</span>
|
|
200
|
+
<span class="cline-any cline-yes">2x</span>
|
|
203
201
|
<span class="cline-any cline-neutral"> </span>
|
|
204
|
-
<span class="cline-any cline-yes">
|
|
205
|
-
<span class="cline-any cline-yes">15x</span>
|
|
206
|
-
<span class="cline-any cline-yes">15x</span>
|
|
207
|
-
<span class="cline-any cline-yes">1x</span>
|
|
208
|
-
<span class="cline-any cline-yes">1x</span>
|
|
202
|
+
<span class="cline-any cline-yes">2x</span>
|
|
209
203
|
<span class="cline-any cline-neutral"> </span>
|
|
210
|
-
<span class="cline-any cline-yes">
|
|
211
|
-
<span class="cline-any cline-yes">
|
|
212
|
-
<span class="cline-any cline-yes">
|
|
213
|
-
<span class="cline-any cline-
|
|
214
|
-
<span class="cline-any cline-
|
|
204
|
+
<span class="cline-any cline-yes">2x</span>
|
|
205
|
+
<span class="cline-any cline-yes">2x</span>
|
|
206
|
+
<span class="cline-any cline-yes">2x</span>
|
|
207
|
+
<span class="cline-any cline-no"> </span>
|
|
208
|
+
<span class="cline-any cline-no"> </span>
|
|
215
209
|
<span class="cline-any cline-neutral"> </span>
|
|
216
|
-
<span class="cline-any cline-yes">
|
|
210
|
+
<span class="cline-any cline-yes">2x</span>
|
|
211
|
+
<span class="cline-any cline-yes">2x</span>
|
|
212
|
+
<span class="cline-any cline-yes">2x</span>
|
|
213
|
+
<span class="cline-any cline-no"> </span>
|
|
214
|
+
<span class="cline-any cline-no"> </span>
|
|
217
215
|
<span class="cline-any cline-neutral"> </span>
|
|
216
|
+
<span class="cline-any cline-yes">2x</span>
|
|
218
217
|
<span class="cline-any cline-neutral"> </span>
|
|
219
218
|
<span class="cline-any cline-neutral"> </span>
|
|
220
|
-
<span class="cline-any cline-yes">22x</span>
|
|
221
219
|
<span class="cline-any cline-neutral"> </span>
|
|
222
220
|
<span class="cline-any cline-yes">7x</span>
|
|
223
221
|
<span class="cline-any cline-neutral"> </span>
|
|
222
|
+
<span class="cline-any cline-no"> </span>
|
|
224
223
|
<span class="cline-any cline-neutral"> </span>
|
|
225
224
|
<span class="cline-any cline-neutral"> </span>
|
|
226
|
-
<span class="cline-any cline-yes">15x</span>
|
|
227
|
-
<span class="cline-any cline-yes">15x</span>
|
|
228
|
-
<span class="cline-any cline-yes">15x</span>
|
|
229
225
|
<span class="cline-any cline-neutral"> </span>
|
|
230
|
-
<span class="cline-any cline-yes">
|
|
231
|
-
<span class="cline-any cline-yes">
|
|
232
|
-
<span class="cline-any cline-yes">
|
|
233
|
-
<span class="cline-any cline-yes">3x</span>
|
|
226
|
+
<span class="cline-any cline-yes">7x</span>
|
|
227
|
+
<span class="cline-any cline-yes">7x</span>
|
|
228
|
+
<span class="cline-any cline-yes">7x</span>
|
|
234
229
|
<span class="cline-any cline-neutral"> </span>
|
|
230
|
+
<span class="cline-any cline-yes">7x</span>
|
|
231
|
+
<span class="cline-any cline-yes">2x</span>
|
|
232
|
+
<span class="cline-any cline-yes">2x</span>
|
|
233
|
+
<span class="cline-any cline-yes">1x</span>
|
|
235
234
|
<span class="cline-any cline-neutral"> </span>
|
|
236
235
|
<span class="cline-any cline-neutral"> </span>
|
|
237
236
|
<span class="cline-any cline-neutral"> </span>
|
|
238
|
-
<span class="cline-any cline-
|
|
237
|
+
<span class="cline-any cline-neutral"> </span>
|
|
238
|
+
<span class="cline-any cline-yes">7x</span>
|
|
239
239
|
<span class="cline-any cline-neutral"> </span>
|
|
240
240
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">// Reusable validations for ports and environment variables
|
|
241
241
|
import { normalizeImageName } from './imageNameUtils.js';
|
|
@@ -249,7 +249,7 @@ import { normalizeImageName } from './imageNameUtils.js';
|
|
|
249
249
|
*/
|
|
250
250
|
export function validatePorts(portInput) {
|
|
251
251
|
// Empty or whitespace-only input is considered valid (ports are optional)
|
|
252
|
-
if (!portInput || !portInput.trim()) return true
|
|
252
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!portInput || !portInput.trim()) <span class="cstat-no" title="statement not covered" >return true;</span>
|
|
253
253
|
const ports = portInput
|
|
254
254
|
.split(',')
|
|
255
255
|
.map((p) => p.trim())
|
|
@@ -257,7 +257,7 @@ export function validatePorts(portInput) {
|
|
|
257
257
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (ports.length === 0) <span class="cstat-no" title="statement not covered" >return true;</span>
|
|
258
258
|
const invalid = ports.find((pair) => {
|
|
259
259
|
const [host, cont] = pair.split(':');
|
|
260
|
-
return !host || !cont || isNaN(Number(host))
|
|
260
|
+
return !host || !cont || <span class="branch-2 cbranch-no" title="branch not covered" >isNaN(Number(host)) </span>|| <span class="branch-3 cbranch-no" title="branch not covered" >isNaN(Number(cont));</span>
|
|
261
261
|
});
|
|
262
262
|
return !invalid;
|
|
263
263
|
}
|
|
@@ -290,23 +290,23 @@ export function validateEnvVars(envInput, imageName, imageProfiles) {
|
|
|
290
290
|
.filter(Boolean);
|
|
291
291
|
for (const v of vars) {
|
|
292
292
|
const eqIdx = v.indexOf('=');
|
|
293
|
-
if (eqIdx === -1) {
|
|
294
|
-
syntaxErrors.push(`"${v}" is missing an '=' sign`)
|
|
295
|
-
continue
|
|
293
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (eqIdx === -1) {
|
|
294
|
+
<span class="cstat-no" title="statement not covered" > syntaxErrors.push(`"${v}" is missing an '=' sign`);</span>
|
|
295
|
+
<span class="cstat-no" title="statement not covered" > continue;</span>
|
|
296
296
|
}
|
|
297
297
|
const varName = v.slice(0, eqIdx).trim();
|
|
298
298
|
const varValue = v.slice(eqIdx + 1);
|
|
299
|
-
if (!/^[A-Z_][A-Z0-9_]*$/i.test(varName)) {
|
|
300
|
-
syntaxErrors.push(`"${varName}" is not a valid variable name`)
|
|
301
|
-
continue
|
|
299
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!/^[A-Z_][A-Z0-9_]*$/i.test(varName)) {
|
|
300
|
+
<span class="cstat-no" title="statement not covered" > syntaxErrors.push(`"${varName}" is not a valid variable name`);</span>
|
|
301
|
+
<span class="cstat-no" title="statement not covered" > continue;</span>
|
|
302
302
|
}
|
|
303
303
|
parsedEnv[varName] = varValue;
|
|
304
304
|
}
|
|
305
305
|
}
|
|
306
306
|
|
|
307
|
-
if (!contextual) {
|
|
307
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!contextual) {
|
|
308
308
|
// Legacy: return boolean
|
|
309
|
-
return syntaxErrors.length === 0
|
|
309
|
+
<span class="cstat-no" title="statement not covered" > return syntaxErrors.length === 0;</span>
|
|
310
310
|
}
|
|
311
311
|
|
|
312
312
|
// Contextual: also check required env vars from the profile
|
|
@@ -331,7 +331,7 @@ export function validateEnvVars(envInput, imageName, imageProfiles) {
|
|
|
331
331
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
332
332
|
Code coverage generated by
|
|
333
333
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
334
|
-
at 2026-04-
|
|
334
|
+
at 2026-04-27T22:13:21.150Z
|
|
335
335
|
</div>
|
|
336
336
|
<script src="../prettify.js"></script>
|
|
337
337
|
<script>
|
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">73.09% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>125/171</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">75% </span>
|
|
33
|
+
<span class="strong">75.8% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>47/62</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">61.9% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>13/21</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">73.61% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>120/163</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -95,17 +95,17 @@
|
|
|
95
95
|
|
|
96
96
|
<tr>
|
|
97
97
|
<td class="file high" data-value="useContainerCreation.js"><a href="useContainerCreation.js.html">useContainerCreation.js</a></td>
|
|
98
|
-
<td data-value="
|
|
99
|
-
<div class="chart"><div class="cover-fill" style="width:
|
|
98
|
+
<td data-value="87.4" class="pic high">
|
|
99
|
+
<div class="chart"><div class="cover-fill" style="width: 87%"></div><div class="cover-empty" style="width: 13%"></div></div>
|
|
100
100
|
</td>
|
|
101
|
-
<td data-value="
|
|
102
|
-
<td data-value="
|
|
103
|
-
<td data-value="
|
|
104
|
-
<td data-value="
|
|
105
|
-
<td data-value="
|
|
106
|
-
<td data-value="
|
|
107
|
-
<td data-value="
|
|
108
|
-
<td data-value="
|
|
101
|
+
<td data-value="87.4" class="pct high">87.4%</td>
|
|
102
|
+
<td data-value="135" class="abs high">118/135</td>
|
|
103
|
+
<td data-value="87.03" class="pct high">87.03%</td>
|
|
104
|
+
<td data-value="54" class="abs high">47/54</td>
|
|
105
|
+
<td data-value="91.66" class="pct high">91.66%</td>
|
|
106
|
+
<td data-value="12" class="abs high">11/12</td>
|
|
107
|
+
<td data-value="88.28" class="pct high">88.28%</td>
|
|
108
|
+
<td data-value="128" class="abs high">113/128</td>
|
|
109
109
|
</tr>
|
|
110
110
|
|
|
111
111
|
<tr>
|
|
@@ -131,7 +131,7 @@
|
|
|
131
131
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
132
132
|
Code coverage generated by
|
|
133
133
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
134
|
-
at 2026-04-
|
|
134
|
+
at 2026-04-27T22:13:21.150Z
|
|
135
135
|
</div>
|
|
136
136
|
<script src="../../prettify.js"></script>
|
|
137
137
|
<script>
|
|
@@ -158,8 +158,8 @@
|
|
|
158
158
|
<span class="cline-any cline-neutral"> </span>
|
|
159
159
|
<span class="cline-any cline-neutral"> </span>
|
|
160
160
|
<span class="cline-any cline-neutral"> </span>
|
|
161
|
-
<span class="cline-any cline-yes">
|
|
162
|
-
<span class="cline-any cline-yes">
|
|
161
|
+
<span class="cline-any cline-yes">96x</span>
|
|
162
|
+
<span class="cline-any cline-yes">96x</span>
|
|
163
163
|
<span class="cline-any cline-neutral"> </span>
|
|
164
164
|
<span class="cline-any cline-neutral"> </span>
|
|
165
165
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -194,7 +194,7 @@
|
|
|
194
194
|
<span class="cline-any cline-neutral"> </span>
|
|
195
195
|
<span class="cline-any cline-neutral"> </span>
|
|
196
196
|
<span class="cline-any cline-neutral"> </span>
|
|
197
|
-
<span class="cline-any cline-yes">
|
|
197
|
+
<span class="cline-any cline-yes">96x</span>
|
|
198
198
|
<span class="cline-any cline-neutral"> </span>
|
|
199
199
|
<span class="cline-any cline-neutral"> </span>
|
|
200
200
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -298,7 +298,7 @@ export function useContainerActions({ containers, onAction }) {
|
|
|
298
298
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
299
299
|
Code coverage generated by
|
|
300
300
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
301
|
-
at 2026-04-
|
|
301
|
+
at 2026-04-27T22:13:21.150Z
|
|
302
302
|
</div>
|
|
303
303
|
<script src="../../prettify.js"></script>
|
|
304
304
|
<script>
|