@camunda8/cli 2.7.0-alpha.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.
Files changed (144) hide show
  1. package/README.md +80 -1
  2. package/dist/command-dispatch.d.ts +16 -0
  3. package/dist/command-dispatch.d.ts.map +1 -0
  4. package/dist/command-dispatch.js +129 -0
  5. package/dist/command-dispatch.js.map +1 -0
  6. package/dist/command-framework.d.ts +248 -0
  7. package/dist/command-framework.d.ts.map +1 -0
  8. package/dist/command-framework.js +229 -0
  9. package/dist/command-framework.js.map +1 -0
  10. package/dist/command-registry.d.ts +2014 -14
  11. package/dist/command-registry.d.ts.map +1 -1
  12. package/dist/command-registry.js +653 -66
  13. package/dist/command-registry.js.map +1 -1
  14. package/dist/command-validation.d.ts +30 -4
  15. package/dist/command-validation.d.ts.map +1 -1
  16. package/dist/command-validation.js +90 -4
  17. package/dist/command-validation.js.map +1 -1
  18. package/dist/commands/completion.d.ts +25 -1
  19. package/dist/commands/completion.d.ts.map +1 -1
  20. package/dist/commands/completion.js +590 -1223
  21. package/dist/commands/completion.js.map +1 -1
  22. package/dist/commands/deployments.d.ts +2 -0
  23. package/dist/commands/deployments.d.ts.map +1 -1
  24. package/dist/commands/deployments.js +13 -2
  25. package/dist/commands/deployments.js.map +1 -1
  26. package/dist/commands/forms.d.ts +2 -20
  27. package/dist/commands/forms.d.ts.map +1 -1
  28. package/dist/commands/forms.js +76 -79
  29. package/dist/commands/forms.js.map +1 -1
  30. package/dist/commands/help.d.ts +4 -88
  31. package/dist/commands/help.d.ts.map +1 -1
  32. package/dist/commands/help.js +574 -1948
  33. package/dist/commands/help.js.map +1 -1
  34. package/dist/commands/identity-authorizations.d.ts +5 -24
  35. package/dist/commands/identity-authorizations.d.ts.map +1 -1
  36. package/dist/commands/identity-authorizations.js +113 -137
  37. package/dist/commands/identity-authorizations.js.map +1 -1
  38. package/dist/commands/identity-groups.d.ts +5 -26
  39. package/dist/commands/identity-groups.d.ts.map +1 -1
  40. package/dist/commands/identity-groups.js +91 -124
  41. package/dist/commands/identity-groups.js.map +1 -1
  42. package/dist/commands/identity-mapping-rules.d.ts +5 -30
  43. package/dist/commands/identity-mapping-rules.d.ts.map +1 -1
  44. package/dist/commands/identity-mapping-rules.js +106 -136
  45. package/dist/commands/identity-mapping-rules.js.map +1 -1
  46. package/dist/commands/identity-roles.d.ts +5 -26
  47. package/dist/commands/identity-roles.d.ts.map +1 -1
  48. package/dist/commands/identity-roles.js +91 -124
  49. package/dist/commands/identity-roles.js.map +1 -1
  50. package/dist/commands/identity-tenants.d.ts +5 -26
  51. package/dist/commands/identity-tenants.d.ts.map +1 -1
  52. package/dist/commands/identity-tenants.js +92 -126
  53. package/dist/commands/identity-tenants.js.map +1 -1
  54. package/dist/commands/identity-users.d.ts +5 -29
  55. package/dist/commands/identity-users.d.ts.map +1 -1
  56. package/dist/commands/identity-users.js +95 -129
  57. package/dist/commands/identity-users.js.map +1 -1
  58. package/dist/commands/identity.d.ts +6 -6
  59. package/dist/commands/identity.d.ts.map +1 -1
  60. package/dist/commands/identity.js +6 -7
  61. package/dist/commands/identity.js.map +1 -1
  62. package/dist/commands/incidents.d.ts +3 -16
  63. package/dist/commands/incidents.d.ts.map +1 -1
  64. package/dist/commands/incidents.js +71 -98
  65. package/dist/commands/incidents.js.map +1 -1
  66. package/dist/commands/jobs.d.ts +4 -26
  67. package/dist/commands/jobs.d.ts.map +1 -1
  68. package/dist/commands/jobs.js +143 -159
  69. package/dist/commands/jobs.js.map +1 -1
  70. package/dist/commands/mcp-proxy.d.ts +1 -0
  71. package/dist/commands/mcp-proxy.d.ts.map +1 -1
  72. package/dist/commands/mcp-proxy.js +10 -2
  73. package/dist/commands/mcp-proxy.js.map +1 -1
  74. package/dist/commands/messages.d.ts +2 -12
  75. package/dist/commands/messages.d.ts.map +1 -1
  76. package/dist/commands/messages.js +87 -81
  77. package/dist/commands/messages.js.map +1 -1
  78. package/dist/commands/open.d.ts +4 -0
  79. package/dist/commands/open.d.ts.map +1 -1
  80. package/dist/commands/open.js +18 -0
  81. package/dist/commands/open.js.map +1 -1
  82. package/dist/commands/plugins.d.ts +7 -9
  83. package/dist/commands/plugins.d.ts.map +1 -1
  84. package/dist/commands/plugins.js +32 -25
  85. package/dist/commands/plugins.js.map +1 -1
  86. package/dist/commands/process-definitions.d.ts +2 -14
  87. package/dist/commands/process-definitions.d.ts.map +1 -1
  88. package/dist/commands/process-definitions.js +57 -80
  89. package/dist/commands/process-definitions.js.map +1 -1
  90. package/dist/commands/process-instances.d.ts +8 -37
  91. package/dist/commands/process-instances.d.ts.map +1 -1
  92. package/dist/commands/process-instances.js +242 -193
  93. package/dist/commands/process-instances.js.map +1 -1
  94. package/dist/commands/profiles.d.ts +4 -0
  95. package/dist/commands/profiles.d.ts.map +1 -1
  96. package/dist/commands/profiles.js +29 -0
  97. package/dist/commands/profiles.js.map +1 -1
  98. package/dist/commands/run.d.ts +2 -0
  99. package/dist/commands/run.d.ts.map +1 -1
  100. package/dist/commands/run.js +10 -0
  101. package/dist/commands/run.js.map +1 -1
  102. package/dist/commands/search.d.ts +7 -100
  103. package/dist/commands/search.d.ts.map +1 -1
  104. package/dist/commands/search.js +530 -694
  105. package/dist/commands/search.js.map +1 -1
  106. package/dist/commands/session.d.ts +3 -0
  107. package/dist/commands/session.d.ts.map +1 -1
  108. package/dist/commands/session.js +30 -0
  109. package/dist/commands/session.js.map +1 -1
  110. package/dist/commands/topology.d.ts +1 -3
  111. package/dist/commands/topology.d.ts.map +1 -1
  112. package/dist/commands/topology.js +11 -18
  113. package/dist/commands/topology.js.map +1 -1
  114. package/dist/commands/user-tasks.d.ts +2 -16
  115. package/dist/commands/user-tasks.d.ts.map +1 -1
  116. package/dist/commands/user-tasks.js +73 -101
  117. package/dist/commands/user-tasks.js.map +1 -1
  118. package/dist/commands/watch.d.ts +1 -0
  119. package/dist/commands/watch.d.ts.map +1 -1
  120. package/dist/commands/watch.js +15 -0
  121. package/dist/commands/watch.js.map +1 -1
  122. package/dist/config.d.ts.map +1 -1
  123. package/dist/config.js +5 -0
  124. package/dist/config.js.map +1 -1
  125. package/dist/default-plugins/cluster/README.md +1 -1
  126. package/dist/default-plugins/cluster/c8ctl-plugin.js +281 -59
  127. package/dist/index.d.ts +0 -4
  128. package/dist/index.d.ts.map +1 -1
  129. package/dist/index.js +102 -979
  130. package/dist/index.js.map +1 -1
  131. package/dist/logger.d.ts +5 -0
  132. package/dist/logger.d.ts.map +1 -1
  133. package/dist/logger.js +7 -1
  134. package/dist/logger.js.map +1 -1
  135. package/dist/plugin-loader.d.ts +5 -0
  136. package/dist/plugin-loader.d.ts.map +1 -1
  137. package/dist/plugin-loader.js +1 -0
  138. package/dist/plugin-loader.js.map +1 -1
  139. package/dist/update-check.d.ts +67 -0
  140. package/dist/update-check.d.ts.map +1 -0
  141. package/dist/update-check.js +284 -0
  142. package/dist/update-check.js.map +1 -0
  143. package/package.json +3 -2
  144. /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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"}