@camunda8/cli 2.6.1 → 2.7.0-alpha.10
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/README.md +80 -1
- package/dist/command-dispatch.d.ts +16 -0
- package/dist/command-dispatch.d.ts.map +1 -0
- package/dist/command-dispatch.js +129 -0
- package/dist/command-dispatch.js.map +1 -0
- package/dist/command-framework.d.ts +248 -0
- package/dist/command-framework.d.ts.map +1 -0
- package/dist/command-framework.js +229 -0
- package/dist/command-framework.js.map +1 -0
- package/dist/command-registry.d.ts +2089 -0
- package/dist/command-registry.d.ts.map +1 -0
- package/dist/command-registry.js +1482 -0
- package/dist/command-registry.js.map +1 -0
- package/dist/command-validation.d.ts +30 -4
- package/dist/command-validation.d.ts.map +1 -1
- package/dist/command-validation.js +90 -4
- package/dist/command-validation.js.map +1 -1
- package/dist/commands/completion.d.ts +25 -1
- package/dist/commands/completion.d.ts.map +1 -1
- package/dist/commands/completion.js +590 -1223
- package/dist/commands/completion.js.map +1 -1
- package/dist/commands/deployments.d.ts +2 -0
- package/dist/commands/deployments.d.ts.map +1 -1
- package/dist/commands/deployments.js +13 -2
- package/dist/commands/deployments.js.map +1 -1
- package/dist/commands/forms.d.ts +2 -20
- package/dist/commands/forms.d.ts.map +1 -1
- package/dist/commands/forms.js +76 -79
- package/dist/commands/forms.js.map +1 -1
- package/dist/commands/help.d.ts +4 -88
- package/dist/commands/help.d.ts.map +1 -1
- package/dist/commands/help.js +574 -1941
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/identity-authorizations.d.ts +5 -24
- package/dist/commands/identity-authorizations.d.ts.map +1 -1
- package/dist/commands/identity-authorizations.js +113 -137
- package/dist/commands/identity-authorizations.js.map +1 -1
- package/dist/commands/identity-groups.d.ts +5 -26
- package/dist/commands/identity-groups.d.ts.map +1 -1
- package/dist/commands/identity-groups.js +91 -124
- package/dist/commands/identity-groups.js.map +1 -1
- package/dist/commands/identity-mapping-rules.d.ts +5 -30
- package/dist/commands/identity-mapping-rules.d.ts.map +1 -1
- package/dist/commands/identity-mapping-rules.js +106 -136
- package/dist/commands/identity-mapping-rules.js.map +1 -1
- package/dist/commands/identity-roles.d.ts +5 -26
- package/dist/commands/identity-roles.d.ts.map +1 -1
- package/dist/commands/identity-roles.js +91 -124
- package/dist/commands/identity-roles.js.map +1 -1
- package/dist/commands/identity-tenants.d.ts +5 -26
- package/dist/commands/identity-tenants.d.ts.map +1 -1
- package/dist/commands/identity-tenants.js +92 -126
- package/dist/commands/identity-tenants.js.map +1 -1
- package/dist/commands/identity-users.d.ts +5 -29
- package/dist/commands/identity-users.d.ts.map +1 -1
- package/dist/commands/identity-users.js +95 -129
- package/dist/commands/identity-users.js.map +1 -1
- package/dist/commands/identity.d.ts +6 -6
- package/dist/commands/identity.d.ts.map +1 -1
- package/dist/commands/identity.js +6 -7
- package/dist/commands/identity.js.map +1 -1
- package/dist/commands/incidents.d.ts +3 -16
- package/dist/commands/incidents.d.ts.map +1 -1
- package/dist/commands/incidents.js +71 -98
- package/dist/commands/incidents.js.map +1 -1
- package/dist/commands/jobs.d.ts +4 -26
- package/dist/commands/jobs.d.ts.map +1 -1
- package/dist/commands/jobs.js +143 -159
- package/dist/commands/jobs.js.map +1 -1
- package/dist/commands/mcp-proxy.d.ts +1 -0
- package/dist/commands/mcp-proxy.d.ts.map +1 -1
- package/dist/commands/mcp-proxy.js +10 -2
- package/dist/commands/mcp-proxy.js.map +1 -1
- package/dist/commands/messages.d.ts +2 -12
- package/dist/commands/messages.d.ts.map +1 -1
- package/dist/commands/messages.js +87 -81
- package/dist/commands/messages.js.map +1 -1
- package/dist/commands/open.d.ts +4 -0
- package/dist/commands/open.d.ts.map +1 -1
- package/dist/commands/open.js +18 -0
- package/dist/commands/open.js.map +1 -1
- package/dist/commands/plugins.d.ts +7 -9
- package/dist/commands/plugins.d.ts.map +1 -1
- package/dist/commands/plugins.js +32 -25
- package/dist/commands/plugins.js.map +1 -1
- package/dist/commands/process-definitions.d.ts +2 -14
- package/dist/commands/process-definitions.d.ts.map +1 -1
- package/dist/commands/process-definitions.js +57 -80
- package/dist/commands/process-definitions.js.map +1 -1
- package/dist/commands/process-instances.d.ts +8 -37
- package/dist/commands/process-instances.d.ts.map +1 -1
- package/dist/commands/process-instances.js +242 -193
- package/dist/commands/process-instances.js.map +1 -1
- package/dist/commands/profiles.d.ts +4 -0
- package/dist/commands/profiles.d.ts.map +1 -1
- package/dist/commands/profiles.js +29 -0
- package/dist/commands/profiles.js.map +1 -1
- package/dist/commands/run.d.ts +2 -0
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +10 -0
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/search.d.ts +7 -100
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +530 -694
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/session.d.ts +3 -0
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +30 -0
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/topology.d.ts +1 -3
- package/dist/commands/topology.d.ts.map +1 -1
- package/dist/commands/topology.js +11 -18
- package/dist/commands/topology.js.map +1 -1
- package/dist/commands/user-tasks.d.ts +2 -16
- package/dist/commands/user-tasks.d.ts.map +1 -1
- package/dist/commands/user-tasks.js +73 -101
- package/dist/commands/user-tasks.js.map +1 -1
- package/dist/commands/watch.d.ts +1 -0
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +15 -0
- package/dist/commands/watch.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -0
- package/dist/config.js.map +1 -1
- package/dist/default-plugins/cluster/README.md +1 -1
- package/dist/default-plugins/cluster/c8ctl-plugin.js +281 -59
- package/dist/index.d.ts +0 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +111 -1023
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +5 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +7 -1
- package/dist/logger.js.map +1 -1
- package/dist/plugin-loader.d.ts +5 -0
- package/dist/plugin-loader.d.ts.map +1 -1
- package/dist/plugin-loader.js +1 -0
- package/dist/plugin-loader.js.map +1 -1
- package/dist/update-check.d.ts +67 -0
- package/dist/update-check.d.ts.map +1 -0
- package/dist/update-check.js +284 -0
- package/dist/update-check.js.map +1 -0
- package/package.json +3 -2
- /package/dist/templates/{tsconfig.json → tsconfig.json.template} +0 -0
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type-safe command definition framework.
|
|
3
|
+
*
|
|
4
|
+
* Provides `defineCommand(verb, resource, handler)` — flags and positionals
|
|
5
|
+
* are derived from the command registry, so handlers receive branded SDK types
|
|
6
|
+
* without any ceremony or `as` casts.
|
|
7
|
+
*
|
|
8
|
+
* Handlers return a `CommandResult` discriminated union. The framework renders
|
|
9
|
+
* results and catches errors in a single place, eliminating per-handler
|
|
10
|
+
* boilerplate for table/json output, empty-list messages, dry-run emission,
|
|
11
|
+
* sorting, and error handling.
|
|
12
|
+
*
|
|
13
|
+
* Phase 2 of #230.
|
|
14
|
+
*/
|
|
15
|
+
import { COMMAND_REGISTRY, } from "./command-registry.js";
|
|
16
|
+
import { resolveClusterConfig } from "./config.js";
|
|
17
|
+
import { handleCommandError } from "./errors.js";
|
|
18
|
+
import { getLogger, sortTableData, } from "./logger.js";
|
|
19
|
+
import { c8ctl } from "./runtime.js";
|
|
20
|
+
// ─── defineCommand ───────────────────────────────────────────────────────────
|
|
21
|
+
/**
|
|
22
|
+
* Define a command handler for a verb×resource pair.
|
|
23
|
+
*
|
|
24
|
+
* Flags and positionals are derived from the command registry —
|
|
25
|
+
* no ceremony, no duplication. The handler receives fully typed
|
|
26
|
+
* parameters.
|
|
27
|
+
*
|
|
28
|
+
* ```ts
|
|
29
|
+
* export const getProcessDefinition = defineCommand(
|
|
30
|
+
* "get",
|
|
31
|
+
* "process-definition",
|
|
32
|
+
* async (ctx, flags, args) => {
|
|
33
|
+
* // ctx.client is CamundaClient
|
|
34
|
+
* // flags.xml is boolean | undefined
|
|
35
|
+
* // args.key is ProcessDefinitionKey
|
|
36
|
+
* },
|
|
37
|
+
* );
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export function defineCommand(verb, resource, handler) {
|
|
41
|
+
// Widen to CommandDef so optional properties are accessible regardless of which verb V is
|
|
42
|
+
const entry = COMMAND_REGISTRY[verb];
|
|
43
|
+
const flagDefs = entry.resourceFlags?.[resource] ?? entry.flags;
|
|
44
|
+
const positionalDefs = entry.resourcePositionals?.[resource] ?? [];
|
|
45
|
+
return {
|
|
46
|
+
verb,
|
|
47
|
+
resource,
|
|
48
|
+
execute: async (ctx, rawValues, rawArgs) => {
|
|
49
|
+
const flags = deserializeFlags(rawValues, flagDefs);
|
|
50
|
+
const args = deserializePositionals(rawArgs, positionalDefs, verb, resource);
|
|
51
|
+
try {
|
|
52
|
+
const result = await handler(ctx,
|
|
53
|
+
// biome-ignore lint/plugin: framework-internal assertion — flagDefs resolved from COMMAND_REGISTRY[V][R]
|
|
54
|
+
flags,
|
|
55
|
+
// biome-ignore lint/plugin: framework-internal assertion — positionalDefs resolved from COMMAND_REGISTRY[V][R]
|
|
56
|
+
args);
|
|
57
|
+
if (result)
|
|
58
|
+
renderResult(result, ctx);
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
handleCommandError(ctx.logger, `Failed to ${verb} ${resource.replace(/-/g, " ")}`, error);
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
// ─── deserializeFlags ────────────────────────────────────────────────────────
|
|
67
|
+
/**
|
|
68
|
+
* Deserialize raw parseArgs values into typed flags.
|
|
69
|
+
*
|
|
70
|
+
* For each flag in the schema:
|
|
71
|
+
* - If the flag has a `validate` function and the raw value is a non-empty
|
|
72
|
+
* string, call the validator (which returns a branded type).
|
|
73
|
+
* - If the flag is boolean, extract the boolean value.
|
|
74
|
+
* - Otherwise, extract the string value.
|
|
75
|
+
*
|
|
76
|
+
* Validators that throw are intentionally NOT caught here — validation
|
|
77
|
+
* errors should propagate to the top-level error handler.
|
|
78
|
+
*/
|
|
79
|
+
export function deserializeFlags(values, flagDefs) {
|
|
80
|
+
const result = {};
|
|
81
|
+
for (const [key, def] of Object.entries(flagDefs)) {
|
|
82
|
+
const raw = values[key];
|
|
83
|
+
if (raw === undefined || raw === false) {
|
|
84
|
+
result[key] = undefined;
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
if (def.type === "boolean") {
|
|
88
|
+
result[key] = typeof raw === "boolean" ? raw : undefined;
|
|
89
|
+
}
|
|
90
|
+
else if (typeof raw === "string" && raw !== "") {
|
|
91
|
+
result[key] = def.validate ? def.validate(raw) : raw;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
result[key] = undefined;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// biome-ignore lint/plugin: internal assertion — result is built key-by-key from flagDefs, matching InferFlags<F> structurally
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
// ─── deserializePositionals ──────────────────────────────────────────────────
|
|
101
|
+
/**
|
|
102
|
+
* Deserialize raw positional strings into a typed named record.
|
|
103
|
+
*
|
|
104
|
+
* For each positional in the schema (in order):
|
|
105
|
+
* - If required and missing, exits with an error message.
|
|
106
|
+
* - If a `validate` function is present, calls it to produce a branded type.
|
|
107
|
+
* - Otherwise, passes the raw string through.
|
|
108
|
+
*
|
|
109
|
+
* Returns a named record keyed by each positional's `name`.
|
|
110
|
+
*/
|
|
111
|
+
export function deserializePositionals(raw, positionalDefs, verb, resource) {
|
|
112
|
+
const result = {};
|
|
113
|
+
for (let i = 0; i < positionalDefs.length; i++) {
|
|
114
|
+
const def = positionalDefs[i];
|
|
115
|
+
const value = raw[i];
|
|
116
|
+
if (!value) {
|
|
117
|
+
if (def.required) {
|
|
118
|
+
// Build a human-readable label from the positional name:
|
|
119
|
+
// "roleId" → "role ID", "mappingRuleId" → "mapping rule ID", "key" → "key"
|
|
120
|
+
const expandedName = def.name
|
|
121
|
+
.replace(/([a-z])([A-Z])/g, "$1 $2")
|
|
122
|
+
.toLowerCase()
|
|
123
|
+
.replace(/\bid\b/gi, "ID");
|
|
124
|
+
// If the expanded name already starts with the resource name,
|
|
125
|
+
// use it directly (e.g. "username" for resource "user" → "Username required").
|
|
126
|
+
// Otherwise, prepend the resource as context (e.g. "key" for "user-task" → "User task key required").
|
|
127
|
+
const resourceNorm = resource.replace(/-/g, " ");
|
|
128
|
+
const alreadyDescriptive = expandedName
|
|
129
|
+
.toLowerCase()
|
|
130
|
+
.startsWith(resourceNorm.toLowerCase());
|
|
131
|
+
let displayLabel;
|
|
132
|
+
if (alreadyDescriptive) {
|
|
133
|
+
displayLabel =
|
|
134
|
+
expandedName.charAt(0).toUpperCase() + expandedName.slice(1);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
// Singularize trailing "s" for the prefix (e.g. "jobs" → "Job")
|
|
138
|
+
const prefix = resourceNorm.replace(/s$/, "");
|
|
139
|
+
displayLabel =
|
|
140
|
+
prefix.charAt(0).toUpperCase() +
|
|
141
|
+
prefix.slice(1) +
|
|
142
|
+
" " +
|
|
143
|
+
expandedName;
|
|
144
|
+
}
|
|
145
|
+
getLogger().error(`${displayLabel} required. Usage: c8 ${verb} ${resource} <${def.name}>`);
|
|
146
|
+
process.exit(1);
|
|
147
|
+
}
|
|
148
|
+
result[def.name] = undefined;
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
result[def.name] = def.validate ? def.validate(value) : value;
|
|
152
|
+
}
|
|
153
|
+
// biome-ignore lint/plugin: internal assertion — result is built key-by-key from positionalDefs, matching InferPositionals<P> structurally
|
|
154
|
+
return result;
|
|
155
|
+
}
|
|
156
|
+
// ─── renderResult ────────────────────────────────────────────────────────────
|
|
157
|
+
/**
|
|
158
|
+
* Render a `CommandResult` to the user via the logger.
|
|
159
|
+
*
|
|
160
|
+
* This is the single rendering point for all command output —
|
|
161
|
+
* handlers never call logger.table/json/output/info directly.
|
|
162
|
+
*
|
|
163
|
+
* During migration, handlers that still do their own I/O return
|
|
164
|
+
* `undefined` (implicit void) — renderResult is a no-op in that case.
|
|
165
|
+
*/
|
|
166
|
+
function renderResult(result, ctx) {
|
|
167
|
+
if (!result)
|
|
168
|
+
return;
|
|
169
|
+
const { logger, sortBy, sortOrder } = ctx;
|
|
170
|
+
switch (result.kind) {
|
|
171
|
+
case "list":
|
|
172
|
+
if (result.items.length > 0) {
|
|
173
|
+
const sorted = sortTableData(result.items, sortBy, logger, sortOrder);
|
|
174
|
+
logger.table(sorted);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
logger.info(result.emptyMessage);
|
|
178
|
+
}
|
|
179
|
+
break;
|
|
180
|
+
case "get":
|
|
181
|
+
if (result.message)
|
|
182
|
+
logger.info(result.message);
|
|
183
|
+
logger.json(result.data);
|
|
184
|
+
break;
|
|
185
|
+
case "raw":
|
|
186
|
+
logger.output(result.content);
|
|
187
|
+
break;
|
|
188
|
+
case "dryRun":
|
|
189
|
+
logger.json(result.info);
|
|
190
|
+
break;
|
|
191
|
+
case "info":
|
|
192
|
+
logger.info(result.message);
|
|
193
|
+
break;
|
|
194
|
+
case "success":
|
|
195
|
+
logger.success(result.message, result.key);
|
|
196
|
+
break;
|
|
197
|
+
case "none":
|
|
198
|
+
case "never":
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
// ─── dryRun ──────────────────────────────────────────────────────────────────
|
|
203
|
+
/**
|
|
204
|
+
* Check if dry-run mode is active and return a `DryRunResult` if so.
|
|
205
|
+
*
|
|
206
|
+
* Usage in handlers:
|
|
207
|
+
* ```ts
|
|
208
|
+
* const dr = dryRun({ command: "list pi", method: "POST", endpoint: "/process-instances/search", profile, body: filter });
|
|
209
|
+
* if (dr) return dr;
|
|
210
|
+
* ```
|
|
211
|
+
*
|
|
212
|
+
* Replaces the old `emitDryRun()` side-effecting pattern.
|
|
213
|
+
*/
|
|
214
|
+
export function dryRun(opts) {
|
|
215
|
+
if (!c8ctl.dryRun)
|
|
216
|
+
return null;
|
|
217
|
+
const config = resolveClusterConfig(opts.profile);
|
|
218
|
+
return {
|
|
219
|
+
kind: "dryRun",
|
|
220
|
+
info: {
|
|
221
|
+
dryRun: true,
|
|
222
|
+
command: opts.command,
|
|
223
|
+
method: opts.method,
|
|
224
|
+
url: `${config.baseUrl}${opts.endpoint}`,
|
|
225
|
+
...(opts.body !== undefined && { body: opts.body }),
|
|
226
|
+
},
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=command-framework.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-framework.js","sourceRoot":"","sources":["../src/command-framework.ts"],"names":[],"mappings":"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"}
|