@git.zone/cli 2.13.15 → 2.14.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/dist_ts/00_commitinfo_data.js +2 -2
- package/dist_ts/gitzone.cli.js +46 -35
- package/dist_ts/helpers.climode.d.ts +22 -0
- package/dist_ts/helpers.climode.js +158 -0
- package/dist_ts/helpers.smartconfig.d.ts +11 -0
- package/dist_ts/helpers.smartconfig.js +139 -0
- package/dist_ts/mod_commit/index.d.ts +2 -0
- package/dist_ts/mod_commit/index.js +204 -92
- package/dist_ts/mod_config/index.d.ts +7 -2
- package/dist_ts/mod_config/index.js +390 -176
- package/dist_ts/mod_format/classes.formatcontext.d.ts +11 -2
- package/dist_ts/mod_format/classes.formatcontext.js +14 -4
- package/dist_ts/mod_format/formatters/packagejson.formatter.js +1 -67
- package/dist_ts/mod_format/formatters/smartconfig.formatter.d.ts +2 -2
- package/dist_ts/mod_format/formatters/smartconfig.formatter.js +46 -39
- package/dist_ts/mod_format/index.d.ts +4 -1
- package/dist_ts/mod_format/index.js +221 -75
- package/dist_ts/mod_format/mod.plugins.d.ts +1 -2
- package/dist_ts/mod_format/mod.plugins.js +2 -3
- package/dist_ts/mod_services/index.d.ts +2 -0
- package/dist_ts/mod_services/index.js +366 -168
- package/dist_ts/mod_standard/index.d.ts +3 -1
- package/dist_ts/mod_standard/index.js +159 -59
- package/package.json +1 -1
- package/readme.hints.md +25 -32
- package/readme.md +87 -65
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/gitzone.cli.ts +50 -38
- package/ts/helpers.climode.ts +212 -0
- package/ts/helpers.smartconfig.ts +192 -0
- package/ts/mod_commit/index.ts +325 -98
- package/ts/mod_config/index.ts +490 -182
- package/ts/mod_format/classes.formatcontext.ts +20 -3
- package/ts/mod_format/formatters/packagejson.formatter.ts +0 -91
- package/ts/mod_format/formatters/smartconfig.formatter.ts +55 -39
- package/ts/mod_format/index.ts +279 -90
- package/ts/mod_format/mod.plugins.ts +0 -2
- package/ts/mod_services/index.ts +550 -183
- package/ts/mod_standard/index.ts +191 -58
|
@@ -1,115 +1,147 @@
|
|
|
1
1
|
// gitzone config - manage release registry configuration
|
|
2
|
-
import * as plugins from
|
|
3
|
-
import { ReleaseConfig } from
|
|
4
|
-
import { CommitConfig } from
|
|
5
|
-
import { runFormatter } from
|
|
2
|
+
import * as plugins from "./mod.plugins.js";
|
|
3
|
+
import { ReleaseConfig } from "./classes.releaseconfig.js";
|
|
4
|
+
import { CommitConfig } from "./classes.commitconfig.js";
|
|
5
|
+
import { runFormatter } from "../mod_format/index.js";
|
|
6
|
+
import { getCliMode, printJson } from "../helpers.climode.js";
|
|
7
|
+
import { getCliConfigValueFromData, readSmartconfigFile, setCliConfigValueInData, unsetCliConfigValueInData, writeSmartconfigFile, } from "../helpers.smartconfig.js";
|
|
6
8
|
export { ReleaseConfig, CommitConfig };
|
|
9
|
+
const defaultCliMode = {
|
|
10
|
+
output: "human",
|
|
11
|
+
interactive: true,
|
|
12
|
+
json: false,
|
|
13
|
+
plain: false,
|
|
14
|
+
quiet: false,
|
|
15
|
+
yes: false,
|
|
16
|
+
help: false,
|
|
17
|
+
agent: false,
|
|
18
|
+
checkUpdates: true,
|
|
19
|
+
isTty: true,
|
|
20
|
+
};
|
|
7
21
|
/**
|
|
8
22
|
* Format .smartconfig.json with diff preview
|
|
9
23
|
* Shows diff first, asks for confirmation, then applies
|
|
10
24
|
*/
|
|
11
|
-
async function formatSmartconfigWithDiff() {
|
|
25
|
+
async function formatSmartconfigWithDiff(mode) {
|
|
26
|
+
if (!mode.interactive) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
12
29
|
// Check for diffs first
|
|
13
|
-
const checkResult = await runFormatter(
|
|
30
|
+
const checkResult = (await runFormatter("smartconfig", {
|
|
14
31
|
checkOnly: true,
|
|
15
32
|
showDiff: true,
|
|
16
|
-
});
|
|
33
|
+
}));
|
|
17
34
|
if (checkResult && checkResult.hasDiff) {
|
|
18
|
-
const shouldApply = await plugins.smartinteract.SmartInteract.getCliConfirmation(
|
|
35
|
+
const shouldApply = await plugins.smartinteract.SmartInteract.getCliConfirmation("Apply formatting changes to .smartconfig.json?", true);
|
|
19
36
|
if (shouldApply) {
|
|
20
|
-
await runFormatter(
|
|
37
|
+
await runFormatter("smartconfig", { silent: true });
|
|
21
38
|
}
|
|
22
39
|
}
|
|
23
40
|
}
|
|
24
41
|
export const run = async (argvArg) => {
|
|
42
|
+
const mode = await getCliMode(argvArg);
|
|
25
43
|
const command = argvArg._?.[1];
|
|
26
44
|
const value = argvArg._?.[2];
|
|
45
|
+
if (mode.help || command === "help") {
|
|
46
|
+
showHelp(mode);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
27
49
|
// If no command provided, show interactive menu
|
|
28
50
|
if (!command) {
|
|
51
|
+
if (!mode.interactive) {
|
|
52
|
+
showHelp(mode);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
29
55
|
await handleInteractiveMenu();
|
|
30
56
|
return;
|
|
31
57
|
}
|
|
32
58
|
switch (command) {
|
|
33
|
-
case
|
|
34
|
-
await handleShow();
|
|
59
|
+
case "show":
|
|
60
|
+
await handleShow(mode);
|
|
35
61
|
break;
|
|
36
|
-
case
|
|
37
|
-
await handleAdd(value);
|
|
62
|
+
case "add":
|
|
63
|
+
await handleAdd(value, mode);
|
|
38
64
|
break;
|
|
39
|
-
case
|
|
40
|
-
await handleRemove(value);
|
|
65
|
+
case "remove":
|
|
66
|
+
await handleRemove(value, mode);
|
|
41
67
|
break;
|
|
42
|
-
case
|
|
43
|
-
await handleClear();
|
|
68
|
+
case "clear":
|
|
69
|
+
await handleClear(mode);
|
|
44
70
|
break;
|
|
45
|
-
case
|
|
46
|
-
case
|
|
47
|
-
await handleAccessLevel(value);
|
|
71
|
+
case "access":
|
|
72
|
+
case "accessLevel":
|
|
73
|
+
await handleAccessLevel(value, mode);
|
|
48
74
|
break;
|
|
49
|
-
case
|
|
50
|
-
await handleCommit(argvArg._?.[2], argvArg._?.[3]);
|
|
75
|
+
case "commit":
|
|
76
|
+
await handleCommit(argvArg._?.[2], argvArg._?.[3], mode);
|
|
51
77
|
break;
|
|
52
|
-
case
|
|
53
|
-
await handleServices();
|
|
78
|
+
case "services":
|
|
79
|
+
await handleServices(mode);
|
|
54
80
|
break;
|
|
55
|
-
case
|
|
56
|
-
|
|
81
|
+
case "get":
|
|
82
|
+
await handleGet(value, mode);
|
|
83
|
+
break;
|
|
84
|
+
case "set":
|
|
85
|
+
await handleSet(value, argvArg._?.[3], mode);
|
|
86
|
+
break;
|
|
87
|
+
case "unset":
|
|
88
|
+
await handleUnset(value, mode);
|
|
57
89
|
break;
|
|
58
90
|
default:
|
|
59
|
-
plugins.logger.log(
|
|
60
|
-
showHelp();
|
|
91
|
+
plugins.logger.log("error", `Unknown command: ${command}`);
|
|
92
|
+
showHelp(mode);
|
|
61
93
|
}
|
|
62
94
|
};
|
|
63
95
|
/**
|
|
64
96
|
* Interactive menu for config command
|
|
65
97
|
*/
|
|
66
98
|
async function handleInteractiveMenu() {
|
|
67
|
-
console.log(
|
|
68
|
-
console.log(
|
|
69
|
-
console.log(
|
|
70
|
-
console.log(
|
|
71
|
-
console.log(
|
|
99
|
+
console.log("");
|
|
100
|
+
console.log("╭─────────────────────────────────────────────────────────────╮");
|
|
101
|
+
console.log("│ gitzone config - Project Configuration │");
|
|
102
|
+
console.log("╰─────────────────────────────────────────────────────────────╯");
|
|
103
|
+
console.log("");
|
|
72
104
|
const interactInstance = new plugins.smartinteract.SmartInteract();
|
|
73
105
|
const response = await interactInstance.askQuestion({
|
|
74
|
-
type:
|
|
75
|
-
name:
|
|
76
|
-
message:
|
|
77
|
-
default:
|
|
106
|
+
type: "list",
|
|
107
|
+
name: "action",
|
|
108
|
+
message: "What would you like to do?",
|
|
109
|
+
default: "show",
|
|
78
110
|
choices: [
|
|
79
|
-
{ name:
|
|
80
|
-
{ name:
|
|
81
|
-
{ name:
|
|
82
|
-
{ name:
|
|
83
|
-
{ name:
|
|
84
|
-
{ name:
|
|
85
|
-
{ name:
|
|
86
|
-
{ name:
|
|
111
|
+
{ name: "Show current configuration", value: "show" },
|
|
112
|
+
{ name: "Add a registry", value: "add" },
|
|
113
|
+
{ name: "Remove a registry", value: "remove" },
|
|
114
|
+
{ name: "Clear all registries", value: "clear" },
|
|
115
|
+
{ name: "Set access level (public/private)", value: "access" },
|
|
116
|
+
{ name: "Configure commit options", value: "commit" },
|
|
117
|
+
{ name: "Configure services", value: "services" },
|
|
118
|
+
{ name: "Show help", value: "help" },
|
|
87
119
|
],
|
|
88
120
|
});
|
|
89
121
|
const action = response.value;
|
|
90
122
|
switch (action) {
|
|
91
|
-
case
|
|
92
|
-
await handleShow();
|
|
123
|
+
case "show":
|
|
124
|
+
await handleShow(defaultCliMode);
|
|
93
125
|
break;
|
|
94
|
-
case
|
|
95
|
-
await handleAdd();
|
|
126
|
+
case "add":
|
|
127
|
+
await handleAdd(undefined, defaultCliMode);
|
|
96
128
|
break;
|
|
97
|
-
case
|
|
98
|
-
await handleRemove();
|
|
129
|
+
case "remove":
|
|
130
|
+
await handleRemove(undefined, defaultCliMode);
|
|
99
131
|
break;
|
|
100
|
-
case
|
|
101
|
-
await handleClear();
|
|
132
|
+
case "clear":
|
|
133
|
+
await handleClear(defaultCliMode);
|
|
102
134
|
break;
|
|
103
|
-
case
|
|
104
|
-
await handleAccessLevel();
|
|
135
|
+
case "access":
|
|
136
|
+
await handleAccessLevel(undefined, defaultCliMode);
|
|
105
137
|
break;
|
|
106
|
-
case
|
|
107
|
-
await handleCommit();
|
|
138
|
+
case "commit":
|
|
139
|
+
await handleCommit(undefined, undefined, defaultCliMode);
|
|
108
140
|
break;
|
|
109
|
-
case
|
|
110
|
-
await handleServices();
|
|
141
|
+
case "services":
|
|
142
|
+
await handleServices(defaultCliMode);
|
|
111
143
|
break;
|
|
112
|
-
case
|
|
144
|
+
case "help":
|
|
113
145
|
showHelp();
|
|
114
146
|
break;
|
|
115
147
|
}
|
|
@@ -117,47 +149,55 @@ async function handleInteractiveMenu() {
|
|
|
117
149
|
/**
|
|
118
150
|
* Show current registry configuration
|
|
119
151
|
*/
|
|
120
|
-
async function handleShow() {
|
|
152
|
+
async function handleShow(mode) {
|
|
153
|
+
if (mode.json) {
|
|
154
|
+
const smartconfigData = await readSmartconfigFile();
|
|
155
|
+
printJson(getCliConfigValueFromData(smartconfigData, ""));
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
121
158
|
const config = await ReleaseConfig.fromCwd();
|
|
122
159
|
const registries = config.getRegistries();
|
|
123
160
|
const accessLevel = config.getAccessLevel();
|
|
124
|
-
console.log(
|
|
125
|
-
console.log(
|
|
126
|
-
console.log(
|
|
127
|
-
console.log(
|
|
128
|
-
console.log(
|
|
161
|
+
console.log("");
|
|
162
|
+
console.log("╭─────────────────────────────────────────────────────────────╮");
|
|
163
|
+
console.log("│ Release Configuration │");
|
|
164
|
+
console.log("╰─────────────────────────────────────────────────────────────╯");
|
|
165
|
+
console.log("");
|
|
129
166
|
// Show access level
|
|
130
|
-
plugins.logger.log(
|
|
131
|
-
console.log(
|
|
167
|
+
plugins.logger.log("info", `Access Level: ${accessLevel}`);
|
|
168
|
+
console.log("");
|
|
132
169
|
if (registries.length === 0) {
|
|
133
|
-
plugins.logger.log(
|
|
134
|
-
console.log(
|
|
135
|
-
console.log(
|
|
136
|
-
console.log(
|
|
170
|
+
plugins.logger.log("info", "No release registries configured.");
|
|
171
|
+
console.log("");
|
|
172
|
+
console.log(" Run `gitzone config add <registry-url>` to add one.");
|
|
173
|
+
console.log("");
|
|
137
174
|
}
|
|
138
175
|
else {
|
|
139
|
-
plugins.logger.log(
|
|
140
|
-
console.log(
|
|
176
|
+
plugins.logger.log("info", `Configured registries (${registries.length}):`);
|
|
177
|
+
console.log("");
|
|
141
178
|
registries.forEach((url, index) => {
|
|
142
179
|
console.log(` ${index + 1}. ${url}`);
|
|
143
180
|
});
|
|
144
|
-
console.log(
|
|
181
|
+
console.log("");
|
|
145
182
|
}
|
|
146
183
|
}
|
|
147
184
|
/**
|
|
148
185
|
* Add a registry URL
|
|
149
186
|
*/
|
|
150
|
-
async function handleAdd(url) {
|
|
187
|
+
async function handleAdd(url, mode) {
|
|
151
188
|
if (!url) {
|
|
189
|
+
if (!mode.interactive) {
|
|
190
|
+
throw new Error("Registry URL is required in non-interactive mode");
|
|
191
|
+
}
|
|
152
192
|
// Interactive mode
|
|
153
193
|
const interactInstance = new plugins.smartinteract.SmartInteract();
|
|
154
194
|
const response = await interactInstance.askQuestion({
|
|
155
|
-
type:
|
|
156
|
-
name:
|
|
157
|
-
message:
|
|
158
|
-
default:
|
|
195
|
+
type: "input",
|
|
196
|
+
name: "registryUrl",
|
|
197
|
+
message: "Enter registry URL:",
|
|
198
|
+
default: "https://registry.npmjs.org",
|
|
159
199
|
validate: (input) => {
|
|
160
|
-
return !!(input && input.trim() !==
|
|
200
|
+
return !!(input && input.trim() !== "");
|
|
161
201
|
},
|
|
162
202
|
});
|
|
163
203
|
url = response.value;
|
|
@@ -166,30 +206,42 @@ async function handleAdd(url) {
|
|
|
166
206
|
const added = config.addRegistry(url);
|
|
167
207
|
if (added) {
|
|
168
208
|
await config.save();
|
|
169
|
-
|
|
170
|
-
|
|
209
|
+
if (mode.json) {
|
|
210
|
+
printJson({
|
|
211
|
+
ok: true,
|
|
212
|
+
action: "add",
|
|
213
|
+
registry: url,
|
|
214
|
+
registries: config.getRegistries(),
|
|
215
|
+
});
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
plugins.logger.log("success", `Added registry: ${url}`);
|
|
219
|
+
await formatSmartconfigWithDiff(mode);
|
|
171
220
|
}
|
|
172
221
|
else {
|
|
173
|
-
plugins.logger.log(
|
|
222
|
+
plugins.logger.log("warn", `Registry already exists: ${url}`);
|
|
174
223
|
}
|
|
175
224
|
}
|
|
176
225
|
/**
|
|
177
226
|
* Remove a registry URL
|
|
178
227
|
*/
|
|
179
|
-
async function handleRemove(url) {
|
|
228
|
+
async function handleRemove(url, mode) {
|
|
180
229
|
const config = await ReleaseConfig.fromCwd();
|
|
181
230
|
const registries = config.getRegistries();
|
|
182
231
|
if (registries.length === 0) {
|
|
183
|
-
plugins.logger.log(
|
|
232
|
+
plugins.logger.log("warn", "No registries configured to remove.");
|
|
184
233
|
return;
|
|
185
234
|
}
|
|
186
235
|
if (!url) {
|
|
236
|
+
if (!mode.interactive) {
|
|
237
|
+
throw new Error("Registry URL is required in non-interactive mode");
|
|
238
|
+
}
|
|
187
239
|
// Interactive mode - show list to select from
|
|
188
240
|
const interactInstance = new plugins.smartinteract.SmartInteract();
|
|
189
241
|
const response = await interactInstance.askQuestion({
|
|
190
|
-
type:
|
|
191
|
-
name:
|
|
192
|
-
message:
|
|
242
|
+
type: "list",
|
|
243
|
+
name: "registryUrl",
|
|
244
|
+
message: "Select registry to remove:",
|
|
193
245
|
choices: registries,
|
|
194
246
|
default: registries[0],
|
|
195
247
|
});
|
|
@@ -198,86 +250,111 @@ async function handleRemove(url) {
|
|
|
198
250
|
const removed = config.removeRegistry(url);
|
|
199
251
|
if (removed) {
|
|
200
252
|
await config.save();
|
|
201
|
-
|
|
202
|
-
|
|
253
|
+
if (mode.json) {
|
|
254
|
+
printJson({
|
|
255
|
+
ok: true,
|
|
256
|
+
action: "remove",
|
|
257
|
+
registry: url,
|
|
258
|
+
registries: config.getRegistries(),
|
|
259
|
+
});
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
plugins.logger.log("success", `Removed registry: ${url}`);
|
|
263
|
+
await formatSmartconfigWithDiff(mode);
|
|
203
264
|
}
|
|
204
265
|
else {
|
|
205
|
-
plugins.logger.log(
|
|
266
|
+
plugins.logger.log("warn", `Registry not found: ${url}`);
|
|
206
267
|
}
|
|
207
268
|
}
|
|
208
269
|
/**
|
|
209
270
|
* Clear all registries
|
|
210
271
|
*/
|
|
211
|
-
async function handleClear() {
|
|
272
|
+
async function handleClear(mode) {
|
|
212
273
|
const config = await ReleaseConfig.fromCwd();
|
|
213
274
|
if (!config.hasRegistries()) {
|
|
214
|
-
plugins.logger.log(
|
|
275
|
+
plugins.logger.log("info", "No registries to clear.");
|
|
215
276
|
return;
|
|
216
277
|
}
|
|
217
278
|
// Confirm before clearing
|
|
218
|
-
const confirmed =
|
|
279
|
+
const confirmed = mode.interactive
|
|
280
|
+
? await plugins.smartinteract.SmartInteract.getCliConfirmation("Clear all configured registries?", false)
|
|
281
|
+
: true;
|
|
219
282
|
if (confirmed) {
|
|
220
283
|
config.clearRegistries();
|
|
221
284
|
await config.save();
|
|
222
|
-
|
|
223
|
-
|
|
285
|
+
if (mode.json) {
|
|
286
|
+
printJson({ ok: true, action: "clear", registries: [] });
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
plugins.logger.log("success", "All registries cleared.");
|
|
290
|
+
await formatSmartconfigWithDiff(mode);
|
|
224
291
|
}
|
|
225
292
|
else {
|
|
226
|
-
plugins.logger.log(
|
|
293
|
+
plugins.logger.log("info", "Operation cancelled.");
|
|
227
294
|
}
|
|
228
295
|
}
|
|
229
296
|
/**
|
|
230
297
|
* Set or toggle access level
|
|
231
298
|
*/
|
|
232
|
-
async function handleAccessLevel(level) {
|
|
299
|
+
async function handleAccessLevel(level, mode) {
|
|
233
300
|
const config = await ReleaseConfig.fromCwd();
|
|
234
301
|
const currentLevel = config.getAccessLevel();
|
|
235
302
|
if (!level) {
|
|
303
|
+
if (!mode.interactive) {
|
|
304
|
+
throw new Error("Access level is required in non-interactive mode");
|
|
305
|
+
}
|
|
236
306
|
// Interactive mode - toggle or ask
|
|
237
307
|
const interactInstance = new plugins.smartinteract.SmartInteract();
|
|
238
308
|
const response = await interactInstance.askQuestion({
|
|
239
|
-
type:
|
|
240
|
-
name:
|
|
241
|
-
message:
|
|
242
|
-
choices: [
|
|
309
|
+
type: "list",
|
|
310
|
+
name: "accessLevel",
|
|
311
|
+
message: "Select npm access level for publishing:",
|
|
312
|
+
choices: ["public", "private"],
|
|
243
313
|
default: currentLevel,
|
|
244
314
|
});
|
|
245
315
|
level = response.value;
|
|
246
316
|
}
|
|
247
317
|
// Validate the level
|
|
248
|
-
if (level !==
|
|
249
|
-
plugins.logger.log(
|
|
318
|
+
if (level !== "public" && level !== "private") {
|
|
319
|
+
plugins.logger.log("error", `Invalid access level: ${level}. Must be 'public' or 'private'.`);
|
|
250
320
|
return;
|
|
251
321
|
}
|
|
252
322
|
if (level === currentLevel) {
|
|
253
|
-
plugins.logger.log(
|
|
323
|
+
plugins.logger.log("info", `Access level is already set to: ${level}`);
|
|
254
324
|
return;
|
|
255
325
|
}
|
|
256
326
|
config.setAccessLevel(level);
|
|
257
327
|
await config.save();
|
|
258
|
-
|
|
259
|
-
|
|
328
|
+
if (mode.json) {
|
|
329
|
+
printJson({ ok: true, action: "access", accessLevel: level });
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
plugins.logger.log("success", `Access level set to: ${level}`);
|
|
333
|
+
await formatSmartconfigWithDiff(mode);
|
|
260
334
|
}
|
|
261
335
|
/**
|
|
262
336
|
* Handle commit configuration
|
|
263
337
|
*/
|
|
264
|
-
async function handleCommit(setting, value) {
|
|
338
|
+
async function handleCommit(setting, value, mode) {
|
|
265
339
|
const config = await CommitConfig.fromCwd();
|
|
266
340
|
// No setting = interactive mode
|
|
267
341
|
if (!setting) {
|
|
342
|
+
if (!mode.interactive) {
|
|
343
|
+
throw new Error("Commit setting is required in non-interactive mode");
|
|
344
|
+
}
|
|
268
345
|
await handleCommitInteractive(config);
|
|
269
346
|
return;
|
|
270
347
|
}
|
|
271
348
|
// Direct setting
|
|
272
349
|
switch (setting) {
|
|
273
|
-
case
|
|
274
|
-
await handleCommitSetting(config,
|
|
350
|
+
case "alwaysTest":
|
|
351
|
+
await handleCommitSetting(config, "alwaysTest", value, mode);
|
|
275
352
|
break;
|
|
276
|
-
case
|
|
277
|
-
await handleCommitSetting(config,
|
|
353
|
+
case "alwaysBuild":
|
|
354
|
+
await handleCommitSetting(config, "alwaysBuild", value, mode);
|
|
278
355
|
break;
|
|
279
356
|
default:
|
|
280
|
-
plugins.logger.log(
|
|
357
|
+
plugins.logger.log("error", `Unknown commit setting: ${setting}`);
|
|
281
358
|
showCommitHelp();
|
|
282
359
|
}
|
|
283
360
|
}
|
|
@@ -285,102 +362,239 @@ async function handleCommit(setting, value) {
|
|
|
285
362
|
* Interactive commit configuration
|
|
286
363
|
*/
|
|
287
364
|
async function handleCommitInteractive(config) {
|
|
288
|
-
console.log(
|
|
289
|
-
console.log(
|
|
290
|
-
console.log(
|
|
291
|
-
console.log(
|
|
292
|
-
console.log(
|
|
365
|
+
console.log("");
|
|
366
|
+
console.log("╭─────────────────────────────────────────────────────────────╮");
|
|
367
|
+
console.log("│ Commit Configuration │");
|
|
368
|
+
console.log("╰─────────────────────────────────────────────────────────────╯");
|
|
369
|
+
console.log("");
|
|
293
370
|
const interactInstance = new plugins.smartinteract.SmartInteract();
|
|
294
371
|
const response = await interactInstance.askQuestion({
|
|
295
|
-
type:
|
|
296
|
-
name:
|
|
297
|
-
message:
|
|
372
|
+
type: "checkbox",
|
|
373
|
+
name: "commitOptions",
|
|
374
|
+
message: "Select commit options to enable:",
|
|
298
375
|
choices: [
|
|
299
|
-
{ name:
|
|
300
|
-
{ name:
|
|
376
|
+
{ name: "Always run tests before commit (-t)", value: "alwaysTest" },
|
|
377
|
+
{ name: "Always build after commit (-b)", value: "alwaysBuild" },
|
|
301
378
|
],
|
|
302
379
|
default: [
|
|
303
|
-
...(config.getAlwaysTest() ? [
|
|
304
|
-
...(config.getAlwaysBuild() ? [
|
|
380
|
+
...(config.getAlwaysTest() ? ["alwaysTest"] : []),
|
|
381
|
+
...(config.getAlwaysBuild() ? ["alwaysBuild"] : []),
|
|
305
382
|
],
|
|
306
383
|
});
|
|
307
384
|
const selected = response.value || [];
|
|
308
|
-
config.setAlwaysTest(selected.includes(
|
|
309
|
-
config.setAlwaysBuild(selected.includes(
|
|
385
|
+
config.setAlwaysTest(selected.includes("alwaysTest"));
|
|
386
|
+
config.setAlwaysBuild(selected.includes("alwaysBuild"));
|
|
310
387
|
await config.save();
|
|
311
|
-
plugins.logger.log(
|
|
312
|
-
await formatSmartconfigWithDiff();
|
|
388
|
+
plugins.logger.log("success", "Commit configuration updated");
|
|
389
|
+
await formatSmartconfigWithDiff(defaultCliMode);
|
|
313
390
|
}
|
|
314
391
|
/**
|
|
315
392
|
* Set a specific commit setting
|
|
316
393
|
*/
|
|
317
|
-
async function handleCommitSetting(config, setting, value) {
|
|
394
|
+
async function handleCommitSetting(config, setting, value, mode) {
|
|
318
395
|
// Parse boolean value
|
|
319
|
-
const boolValue = value ===
|
|
320
|
-
if (setting ===
|
|
396
|
+
const boolValue = value === "true" || value === "1" || value === "on";
|
|
397
|
+
if (setting === "alwaysTest") {
|
|
321
398
|
config.setAlwaysTest(boolValue);
|
|
322
399
|
}
|
|
323
|
-
else if (setting ===
|
|
400
|
+
else if (setting === "alwaysBuild") {
|
|
324
401
|
config.setAlwaysBuild(boolValue);
|
|
325
402
|
}
|
|
326
403
|
await config.save();
|
|
327
|
-
|
|
328
|
-
|
|
404
|
+
if (mode.json) {
|
|
405
|
+
printJson({ ok: true, action: "commit", setting, value: boolValue });
|
|
406
|
+
return;
|
|
407
|
+
}
|
|
408
|
+
plugins.logger.log("success", `Set ${setting} to ${boolValue}`);
|
|
409
|
+
await formatSmartconfigWithDiff(mode);
|
|
329
410
|
}
|
|
330
411
|
/**
|
|
331
412
|
* Show help for commit subcommand
|
|
332
413
|
*/
|
|
333
414
|
function showCommitHelp() {
|
|
334
|
-
console.log(
|
|
335
|
-
console.log(
|
|
336
|
-
console.log(
|
|
337
|
-
console.log(
|
|
338
|
-
console.log(
|
|
339
|
-
console.log(
|
|
340
|
-
console.log(
|
|
341
|
-
console.log(
|
|
342
|
-
console.log(
|
|
343
|
-
console.log(
|
|
344
|
-
console.log(
|
|
345
|
-
console.log(
|
|
415
|
+
console.log("");
|
|
416
|
+
console.log("Usage: gitzone config commit [setting] [value]");
|
|
417
|
+
console.log("");
|
|
418
|
+
console.log("Settings:");
|
|
419
|
+
console.log(" alwaysTest [true|false] Always run tests before commit");
|
|
420
|
+
console.log(" alwaysBuild [true|false] Always build after commit");
|
|
421
|
+
console.log("");
|
|
422
|
+
console.log("Examples:");
|
|
423
|
+
console.log(" gitzone config commit # Interactive mode");
|
|
424
|
+
console.log(" gitzone config commit alwaysTest true");
|
|
425
|
+
console.log(" gitzone config commit alwaysBuild false");
|
|
426
|
+
console.log("");
|
|
346
427
|
}
|
|
347
428
|
/**
|
|
348
429
|
* Handle services configuration
|
|
349
430
|
*/
|
|
350
|
-
async function handleServices() {
|
|
431
|
+
async function handleServices(mode) {
|
|
432
|
+
if (!mode.interactive) {
|
|
433
|
+
throw new Error("Use `gitzone services config --json` or `gitzone services set ...` in non-interactive mode");
|
|
434
|
+
}
|
|
351
435
|
// Import and use ServiceManager's configureServices
|
|
352
|
-
const { ServiceManager } = await import(
|
|
436
|
+
const { ServiceManager } = await import("../mod_services/classes.servicemanager.js");
|
|
353
437
|
const serviceManager = new ServiceManager();
|
|
354
438
|
await serviceManager.init();
|
|
355
439
|
await serviceManager.configureServices();
|
|
356
440
|
}
|
|
441
|
+
async function handleGet(configPath, mode) {
|
|
442
|
+
if (!configPath) {
|
|
443
|
+
throw new Error("Configuration path is required");
|
|
444
|
+
}
|
|
445
|
+
const smartconfigData = await readSmartconfigFile();
|
|
446
|
+
const value = getCliConfigValueFromData(smartconfigData, configPath);
|
|
447
|
+
if (mode.json) {
|
|
448
|
+
printJson({ path: configPath, value, exists: value !== undefined });
|
|
449
|
+
return;
|
|
450
|
+
}
|
|
451
|
+
if (value === undefined) {
|
|
452
|
+
plugins.logger.log("warn", `No value set for ${configPath}`);
|
|
453
|
+
return;
|
|
454
|
+
}
|
|
455
|
+
if (typeof value === "string") {
|
|
456
|
+
console.log(value);
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
printJson(value);
|
|
460
|
+
}
|
|
461
|
+
async function handleSet(configPath, rawValue, mode) {
|
|
462
|
+
if (!configPath) {
|
|
463
|
+
throw new Error("Configuration path is required");
|
|
464
|
+
}
|
|
465
|
+
if (rawValue === undefined) {
|
|
466
|
+
throw new Error("Configuration value is required");
|
|
467
|
+
}
|
|
468
|
+
const smartconfigData = await readSmartconfigFile();
|
|
469
|
+
const parsedValue = parseConfigValue(rawValue);
|
|
470
|
+
setCliConfigValueInData(smartconfigData, configPath, parsedValue);
|
|
471
|
+
await writeSmartconfigFile(smartconfigData);
|
|
472
|
+
if (mode.json) {
|
|
473
|
+
printJson({
|
|
474
|
+
ok: true,
|
|
475
|
+
action: "set",
|
|
476
|
+
path: configPath,
|
|
477
|
+
value: parsedValue,
|
|
478
|
+
});
|
|
479
|
+
return;
|
|
480
|
+
}
|
|
481
|
+
plugins.logger.log("success", `Set ${configPath}`);
|
|
482
|
+
}
|
|
483
|
+
async function handleUnset(configPath, mode) {
|
|
484
|
+
if (!configPath) {
|
|
485
|
+
throw new Error("Configuration path is required");
|
|
486
|
+
}
|
|
487
|
+
const smartconfigData = await readSmartconfigFile();
|
|
488
|
+
const removed = unsetCliConfigValueInData(smartconfigData, configPath);
|
|
489
|
+
if (!removed) {
|
|
490
|
+
if (mode.json) {
|
|
491
|
+
printJson({
|
|
492
|
+
ok: false,
|
|
493
|
+
action: "unset",
|
|
494
|
+
path: configPath,
|
|
495
|
+
removed: false,
|
|
496
|
+
});
|
|
497
|
+
return;
|
|
498
|
+
}
|
|
499
|
+
plugins.logger.log("warn", `No value set for ${configPath}`);
|
|
500
|
+
return;
|
|
501
|
+
}
|
|
502
|
+
await writeSmartconfigFile(smartconfigData);
|
|
503
|
+
if (mode.json) {
|
|
504
|
+
printJson({ ok: true, action: "unset", path: configPath, removed: true });
|
|
505
|
+
return;
|
|
506
|
+
}
|
|
507
|
+
plugins.logger.log("success", `Unset ${configPath}`);
|
|
508
|
+
}
|
|
509
|
+
function parseConfigValue(rawValue) {
|
|
510
|
+
const trimmedValue = rawValue.trim();
|
|
511
|
+
if (trimmedValue === "true") {
|
|
512
|
+
return true;
|
|
513
|
+
}
|
|
514
|
+
if (trimmedValue === "false") {
|
|
515
|
+
return false;
|
|
516
|
+
}
|
|
517
|
+
if (trimmedValue === "null") {
|
|
518
|
+
return null;
|
|
519
|
+
}
|
|
520
|
+
if (/^-?\d+(\.\d+)?$/.test(trimmedValue)) {
|
|
521
|
+
return Number(trimmedValue);
|
|
522
|
+
}
|
|
523
|
+
if ((trimmedValue.startsWith("{") && trimmedValue.endsWith("}")) ||
|
|
524
|
+
(trimmedValue.startsWith("[") && trimmedValue.endsWith("]")) ||
|
|
525
|
+
(trimmedValue.startsWith('"') && trimmedValue.endsWith('"'))) {
|
|
526
|
+
return JSON.parse(trimmedValue);
|
|
527
|
+
}
|
|
528
|
+
return rawValue;
|
|
529
|
+
}
|
|
357
530
|
/**
|
|
358
531
|
* Show help for config command
|
|
359
532
|
*/
|
|
360
|
-
function showHelp() {
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
533
|
+
export function showHelp(mode) {
|
|
534
|
+
if (mode?.json) {
|
|
535
|
+
printJson({
|
|
536
|
+
command: "config",
|
|
537
|
+
usage: "gitzone config <command> [options]",
|
|
538
|
+
commands: [
|
|
539
|
+
{
|
|
540
|
+
name: "show",
|
|
541
|
+
description: "Display current @git.zone/cli configuration",
|
|
542
|
+
},
|
|
543
|
+
{ name: "get <path>", description: "Read a single config value" },
|
|
544
|
+
{ name: "set <path> <value>", description: "Write a config value" },
|
|
545
|
+
{ name: "unset <path>", description: "Delete a config value" },
|
|
546
|
+
{ name: "add [url]", description: "Add a release registry" },
|
|
547
|
+
{ name: "remove [url]", description: "Remove a release registry" },
|
|
548
|
+
{ name: "clear", description: "Clear all release registries" },
|
|
549
|
+
{
|
|
550
|
+
name: "access [public|private]",
|
|
551
|
+
description: "Set npm publish access level",
|
|
552
|
+
},
|
|
553
|
+
{
|
|
554
|
+
name: "commit <setting> <value>",
|
|
555
|
+
description: "Set commit defaults",
|
|
556
|
+
},
|
|
557
|
+
],
|
|
558
|
+
examples: [
|
|
559
|
+
"gitzone config show --json",
|
|
560
|
+
"gitzone config get release.accessLevel",
|
|
561
|
+
"gitzone config set cli.interactive false",
|
|
562
|
+
"gitzone config set cli.output json",
|
|
563
|
+
],
|
|
564
|
+
});
|
|
565
|
+
return;
|
|
566
|
+
}
|
|
567
|
+
console.log("");
|
|
568
|
+
console.log("Usage: gitzone config <command> [options]");
|
|
569
|
+
console.log("");
|
|
570
|
+
console.log("Commands:");
|
|
571
|
+
console.log(" show Display current @git.zone/cli configuration");
|
|
572
|
+
console.log(" get <path> Read a single config value");
|
|
573
|
+
console.log(" set <path> <value> Write a config value");
|
|
574
|
+
console.log(" unset <path> Delete a config value");
|
|
575
|
+
console.log(" add [url] Add a registry URL");
|
|
576
|
+
console.log(" remove [url] Remove a registry URL");
|
|
577
|
+
console.log(" clear Clear all registries");
|
|
578
|
+
console.log(" access [public|private] Set npm access level for publishing");
|
|
579
|
+
console.log(" commit [setting] [value] Configure commit options");
|
|
580
|
+
console.log(" services Configure which services are enabled");
|
|
581
|
+
console.log("");
|
|
582
|
+
console.log("Examples:");
|
|
583
|
+
console.log(" gitzone config show");
|
|
584
|
+
console.log(" gitzone config show --json");
|
|
585
|
+
console.log(" gitzone config get release.accessLevel");
|
|
586
|
+
console.log(" gitzone config set cli.interactive false");
|
|
587
|
+
console.log(" gitzone config set cli.output json");
|
|
588
|
+
console.log(" gitzone config unset cli.output");
|
|
589
|
+
console.log(" gitzone config add https://registry.npmjs.org");
|
|
590
|
+
console.log(" gitzone config add https://verdaccio.example.com");
|
|
591
|
+
console.log(" gitzone config remove https://registry.npmjs.org");
|
|
592
|
+
console.log(" gitzone config clear");
|
|
593
|
+
console.log(" gitzone config access public");
|
|
594
|
+
console.log(" gitzone config access private");
|
|
595
|
+
console.log(" gitzone config commit # Interactive");
|
|
596
|
+
console.log(" gitzone config commit alwaysTest true");
|
|
597
|
+
console.log(" gitzone config services # Interactive");
|
|
598
|
+
console.log("");
|
|
385
599
|
}
|
|
386
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfY29uZmlnL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlEQUF5RDtBQUV6RCxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBcUIsTUFBTSx3QkFBd0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxDQUFDO0FBRXZDOzs7R0FHRztBQUNILEtBQUssVUFBVSx5QkFBeUI7SUFDdEMsd0JBQXdCO0lBQ3hCLE1BQU0sV0FBVyxHQUFHLE1BQU0sWUFBWSxDQUFDLGFBQWEsRUFBRTtRQUNwRCxTQUFTLEVBQUUsSUFBSTtRQUNmLFFBQVEsRUFBRSxJQUFJO0tBQ2YsQ0FBd0IsQ0FBQztJQUUxQixJQUFJLFdBQVcsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdkMsTUFBTSxXQUFXLEdBQUcsTUFBTSxPQUFPLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FDOUUsZ0RBQWdELEVBQ2hELElBQUksQ0FDTCxDQUFDO1FBQ0YsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixNQUFNLFlBQVksQ0FBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0RCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLE9BQVksRUFBRSxFQUFFO0lBQ3hDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FB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
|
|
600
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfY29uZmlnL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlEQUF5RDtBQUV6RCxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBcUIsTUFBTSx3QkFBd0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsbUJBQW1CLEVBQ25CLHVCQUF1QixFQUN2Qix5QkFBeUIsRUFDekIsb0JBQW9CLEdBQ3JCLE1BQU0sMkJBQTJCLENBQUM7QUFFbkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsQ0FBQztBQUV2QyxNQUFNLGNBQWMsR0FBYTtJQUMvQixNQUFNLEVBQUUsT0FBTztJQUNmLFdBQVcsRUFBRSxJQUFJO0lBQ2pCLElBQUksRUFBRSxLQUFLO0lBQ1gsS0FBSyxFQUFFLEtBQUs7SUFDWixLQUFLLEVBQUUsS0FBSztJQUNaLEdBQUcsRUFBRSxLQUFLO0lBQ1YsSUFBSSxFQUFFLEtBQUs7SUFDWCxLQUFLLEVBQUUsS0FBSztJQUNaLFlBQVksRUFBRSxJQUFJO0lBQ2xCLEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQUVGOzs7R0FHRztBQUNILEtBQUssVUFBVSx5QkFBeUIsQ0FBQyxJQUFjO0lBQ3JELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdEIsT0FBTztJQUNULENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFNLFlBQVksQ0FBQyxhQUFhLEVBQUU7UUFDckQsU0FBUyxF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
|