@camunda8/cli 2.8.0-alpha.9 → 3.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.
Files changed (88) hide show
  1. package/EXAMPLES.md +22 -5
  2. package/PLUGIN-HELP.md +26 -0
  3. package/README.md +37 -4
  4. package/dist/command-dispatch.d.ts.map +1 -1
  5. package/dist/command-dispatch.js +2 -1
  6. package/dist/command-dispatch.js.map +1 -1
  7. package/dist/command-registry.d.ts +30 -0
  8. package/dist/command-registry.d.ts.map +1 -1
  9. package/dist/command-registry.js +34 -1
  10. package/dist/command-registry.js.map +1 -1
  11. package/dist/commands/plugins.d.ts +21 -0
  12. package/dist/commands/plugins.d.ts.map +1 -1
  13. package/dist/commands/plugins.js +74 -1
  14. package/dist/commands/plugins.js.map +1 -1
  15. package/dist/commands/resource-extensions.d.ts +12 -0
  16. package/dist/commands/resource-extensions.d.ts.map +1 -1
  17. package/dist/commands/resource-extensions.js +13 -1
  18. package/dist/commands/resource-extensions.js.map +1 -1
  19. package/dist/commands/run.d.ts.map +1 -1
  20. package/dist/commands/run.js +5 -3
  21. package/dist/commands/run.js.map +1 -1
  22. package/dist/commands/watch.d.ts.map +1 -1
  23. package/dist/commands/watch.js +21 -12
  24. package/dist/commands/watch.js.map +1 -1
  25. package/dist/completion.d.ts.map +1 -1
  26. package/dist/completion.js +140 -13
  27. package/dist/completion.js.map +1 -1
  28. package/dist/default-plugins/bpmn/README.md +69 -0
  29. package/dist/default-plugins/bpmn/c8ctl-plugin.js +125 -0
  30. package/dist/default-plugins/bpmn/c8ctl-plugin.js.map +1 -0
  31. package/dist/default-plugins/bpmn/lint.js +259 -0
  32. package/dist/default-plugins/bpmn/lint.js.map +1 -0
  33. package/dist/default-plugins/bpmn/package.json +8 -0
  34. package/dist/default-plugins/cluster/package.json +1 -1
  35. package/dist/default-plugins/element-template/AGENTS.md +65 -0
  36. package/dist/default-plugins/element-template/README.md +331 -0
  37. package/dist/default-plugins/element-template/c8ctl-plugin.js +247 -0
  38. package/dist/default-plugins/element-template/c8ctl-plugin.js.map +1 -0
  39. package/dist/default-plugins/element-template/commands/apply.js +298 -0
  40. package/dist/default-plugins/element-template/commands/apply.js.map +1 -0
  41. package/dist/default-plugins/element-template/commands/get-properties.js +344 -0
  42. package/dist/default-plugins/element-template/commands/get-properties.js.map +1 -0
  43. package/dist/default-plugins/element-template/commands/get.js +107 -0
  44. package/dist/default-plugins/element-template/commands/get.js.map +1 -0
  45. package/dist/default-plugins/element-template/commands/info.js +189 -0
  46. package/dist/default-plugins/element-template/commands/info.js.map +1 -0
  47. package/dist/default-plugins/element-template/commands/search.js +101 -0
  48. package/dist/default-plugins/element-template/commands/search.js.map +1 -0
  49. package/dist/default-plugins/element-template/commands/sync.js +36 -0
  50. package/dist/default-plugins/element-template/commands/sync.js.map +1 -0
  51. package/dist/default-plugins/element-template/docs/design.md +145 -0
  52. package/dist/default-plugins/element-template/helpers.js +404 -0
  53. package/dist/default-plugins/element-template/helpers.js.map +1 -0
  54. package/dist/default-plugins/element-template/marketplace.js +396 -0
  55. package/dist/default-plugins/element-template/marketplace.js.map +1 -0
  56. package/dist/default-plugins/element-template/package.json +8 -0
  57. package/dist/default-plugins/element-template/template-ref.js +232 -0
  58. package/dist/default-plugins/element-template/template-ref.js.map +1 -0
  59. package/dist/default-plugins/element-template/vendor-src/bundle-entry.js +44 -0
  60. package/dist/default-plugins/feel/README.md +163 -0
  61. package/dist/default-plugins/feel/c8ctl-plugin.js +616 -0
  62. package/dist/default-plugins/feel/c8ctl-plugin.js.map +1 -0
  63. package/dist/default-plugins/feel/package.json +8 -0
  64. package/dist/deployments.d.ts +1 -0
  65. package/dist/deployments.d.ts.map +1 -1
  66. package/dist/deployments.js +89 -20
  67. package/dist/deployments.js.map +1 -1
  68. package/dist/help.d.ts.map +1 -1
  69. package/dist/help.js +156 -5
  70. package/dist/help.js.map +1 -1
  71. package/dist/ignore.d.ts +16 -1
  72. package/dist/ignore.d.ts.map +1 -1
  73. package/dist/ignore.js +55 -3
  74. package/dist/ignore.js.map +1 -1
  75. package/dist/index.d.ts +23 -0
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +294 -25
  78. package/dist/index.js.map +1 -1
  79. package/dist/plugin-loader.d.ts +168 -7
  80. package/dist/plugin-loader.d.ts.map +1 -1
  81. package/dist/plugin-loader.js +284 -21
  82. package/dist/plugin-loader.js.map +1 -1
  83. package/dist/runtime.d.ts +10 -0
  84. package/dist/runtime.d.ts.map +1 -1
  85. package/dist/runtime.js +6 -0
  86. package/dist/runtime.js.map +1 -1
  87. package/dist/vendor/bpmn-element-templates.cjs +59639 -0
  88. package/package.json +20 -7
@@ -0,0 +1,616 @@
1
+ /**
2
+ * c8ctl-plugin-feel
3
+ *
4
+ * Evaluate FEEL expressions against a Camunda cluster (default) or
5
+ * locally via feelin (--engine local).
6
+ *
7
+ * Usage:
8
+ * c8ctl feel evaluate '<expression>' [--vars '{...}'] [--tenant <id>] [--engine cluster|local]
9
+ */
10
+ import { styleText } from "node:util";
11
+ import { evaluate as feelinEvaluate, } from "feelin";
12
+ if (!globalThis.c8ctl)
13
+ throw new Error("c8ctl runtime not initialised");
14
+ const c8ctl = globalThis.c8ctl;
15
+ function isRecord(value) {
16
+ return value != null && typeof value === "object" && !Array.isArray(value);
17
+ }
18
+ // ---------------------------------------------------------------------------
19
+ // Arg parsing
20
+ // ---------------------------------------------------------------------------
21
+ function parseArgs(args) {
22
+ const result = {
23
+ engine: "cluster",
24
+ vars: undefined,
25
+ varArgs: [],
26
+ tenant: undefined,
27
+ positionals: [],
28
+ error: null,
29
+ };
30
+ for (let i = 0; i < args.length; i++) {
31
+ const arg = args[i];
32
+ if (arg === "--") {
33
+ result.positionals.push(...args.slice(i + 1));
34
+ break;
35
+ }
36
+ if (arg === "--engine" || arg.startsWith("--engine=")) {
37
+ const value = arg.includes("=")
38
+ ? arg.slice("--engine=".length)
39
+ : args[++i];
40
+ if (value !== "cluster" && value !== "local") {
41
+ result.error = `Invalid --engine value '${value}'. Expected 'cluster' or 'local'.`;
42
+ return result;
43
+ }
44
+ result.engine = value;
45
+ continue;
46
+ }
47
+ if (arg === "--vars" || arg.startsWith("--vars=")) {
48
+ if (arg === "--vars") {
49
+ const next = args[i + 1];
50
+ if (next === undefined || next.startsWith("-")) {
51
+ result.error =
52
+ "--vars requires a JSON object value (e.g. --vars '{\"a\":1}')";
53
+ return result;
54
+ }
55
+ result.vars = args[++i];
56
+ }
57
+ else {
58
+ result.vars = arg.slice("--vars=".length);
59
+ }
60
+ continue;
61
+ }
62
+ if (arg === "--var") {
63
+ const next = args[i + 1];
64
+ if (next === undefined || next.startsWith("-")) {
65
+ result.error = "--var requires a value (e.g. --var x=42)";
66
+ return result;
67
+ }
68
+ result.varArgs.push(next);
69
+ i++;
70
+ continue;
71
+ }
72
+ if (arg.startsWith("--var=")) {
73
+ result.varArgs.push(arg.slice("--var=".length));
74
+ continue;
75
+ }
76
+ if (arg === "--tenant" || arg.startsWith("--tenant=")) {
77
+ if (arg === "--tenant") {
78
+ const next = args[i + 1];
79
+ if (next === undefined || next.startsWith("-")) {
80
+ result.error = "--tenant requires a value";
81
+ return result;
82
+ }
83
+ result.tenant = args[++i];
84
+ }
85
+ else {
86
+ const value = arg.slice("--tenant=".length);
87
+ if (!value) {
88
+ result.error = "--tenant requires a value";
89
+ return result;
90
+ }
91
+ result.tenant = value;
92
+ }
93
+ continue;
94
+ }
95
+ if (arg.startsWith("-")) {
96
+ // Double-dash unknown flags are always errors.
97
+ // Single-dash tokens before the expression are accepted as the
98
+ // expression itself: FEEL expressions can start with `-` (e.g. `-1`,
99
+ // `-a`). Once the expression is captured, a lone `-x` is an error.
100
+ if (arg.startsWith("--") || result.positionals.length > 0) {
101
+ result.error = `Unknown flag: ${arg}`;
102
+ return result;
103
+ }
104
+ result.positionals.push(arg);
105
+ continue;
106
+ }
107
+ result.positionals.push(arg);
108
+ }
109
+ return result;
110
+ }
111
+ /**
112
+ * Camunda treats expressions without a leading `=` as static strings
113
+ * (see https://docs.camunda.io/docs/components/concepts/expressions/#expressions-vs-static-values).
114
+ * This CLI is specifically for evaluating FEEL, so we auto-prefix when
115
+ * the user omits it. Whitespace before `=` would still be treated as a
116
+ * static, so we trim first.
117
+ */
118
+ function normalizeExpression(expression) {
119
+ const trimmed = expression.trimStart();
120
+ return trimmed.startsWith("=") ? trimmed : `= ${trimmed}`;
121
+ }
122
+ function parseVarsJson(vars) {
123
+ if (vars === undefined) {
124
+ return undefined;
125
+ }
126
+ let parsed;
127
+ try {
128
+ parsed = JSON.parse(vars);
129
+ }
130
+ catch (error) {
131
+ const message = error instanceof Error ? error.message : String(error);
132
+ throw new Error(`Invalid --vars JSON: ${message}`);
133
+ }
134
+ if (!isRecord(parsed)) {
135
+ throw new Error("--vars must be a JSON object");
136
+ }
137
+ return parsed;
138
+ }
139
+ /**
140
+ * Parse a `--var key=value` arg.
141
+ * The value is parsed as JSON; if that fails (e.g. unquoted strings,
142
+ * shell-friendly inputs), the raw text is used as a string literal.
143
+ *
144
+ * --var x=42 → { path: 'x', value: 42 }
145
+ * --var x=hello → { path: 'x', value: 'hello' }
146
+ * --var x=true → { path: 'x', value: true }
147
+ * --var x=null → { path: 'x', value: null }
148
+ * --var x=[1,2,3] → { path: 'x', value: [1,2,3] }
149
+ * --var person.name=Alice → { path: 'person.name', value: 'Alice' }
150
+ */
151
+ function parseVarArg(arg) {
152
+ const eqIdx = arg.indexOf("=");
153
+ if (eqIdx === -1) {
154
+ throw new Error(`Invalid --var format: "${arg}". Expected key=value (e.g. --var x=42)`);
155
+ }
156
+ const path = arg.slice(0, eqIdx);
157
+ const rawValue = arg.slice(eqIdx + 1);
158
+ if (path.length === 0) {
159
+ throw new Error(`Invalid --var format: "${arg}". Path is empty.`);
160
+ }
161
+ if (path.split(".").some((segment) => segment.length === 0)) {
162
+ throw new Error(`Invalid --var path "${path}": empty path segment (consecutive dots or leading/trailing dot).`);
163
+ }
164
+ let value;
165
+ try {
166
+ value = JSON.parse(rawValue);
167
+ }
168
+ catch {
169
+ value = rawValue;
170
+ }
171
+ return { path, value };
172
+ }
173
+ function describeType(value) {
174
+ if (value === null) {
175
+ return "null";
176
+ }
177
+ if (Array.isArray(value)) {
178
+ return "array";
179
+ }
180
+ return typeof value;
181
+ }
182
+ /**
183
+ * Walk a dot path on `target` and assign `value` at the leaf.
184
+ * Throws when an intermediate path segment is already a non-object
185
+ * (you can't nest a property under a scalar/array/null).
186
+ *
187
+ * Replacing an object with a scalar at the leaf is allowed (last
188
+ * write wins) — only nesting into a non-object fails.
189
+ */
190
+ const FORBIDDEN_KEYS = new Set(["__proto__", "constructor", "prototype"]);
191
+ function assertSafeKey(key, path) {
192
+ if (FORBIDDEN_KEYS.has(key)) {
193
+ throw new Error(`Cannot set --var ${path}: '${key}' is a reserved property name.`);
194
+ }
195
+ }
196
+ function setNestedValue(target, path, value) {
197
+ const keys = path.split(".");
198
+ let cursor = target;
199
+ for (let i = 0; i < keys.length - 1; i++) {
200
+ const key = keys[i];
201
+ assertSafeKey(key, path);
202
+ const hasOwn = Object.hasOwn(cursor, key);
203
+ const existing = cursor[key];
204
+ if (!hasOwn || existing === undefined) {
205
+ const next = Object.create(null);
206
+ Object.defineProperty(cursor, key, {
207
+ value: next,
208
+ writable: true,
209
+ enumerable: true,
210
+ configurable: true,
211
+ });
212
+ cursor = next;
213
+ }
214
+ else if (isRecord(existing)) {
215
+ cursor = existing;
216
+ }
217
+ else {
218
+ const sofar = keys.slice(0, i + 1).join(".");
219
+ throw new Error(`Cannot set --var ${path}: '${sofar}' is of type ${describeType(existing)}; cannot nest a property under it.`);
220
+ }
221
+ }
222
+ const leafKey = keys[keys.length - 1];
223
+ assertSafeKey(leafKey, path);
224
+ Object.defineProperty(cursor, leafKey, {
225
+ value,
226
+ writable: true,
227
+ enumerable: true,
228
+ configurable: true,
229
+ });
230
+ }
231
+ /**
232
+ * Build the final variables context: start from `--vars` (JSON), then
233
+ * apply each `--var` in order. Conflicts (nesting into a scalar)
234
+ * throw immediately with the offending path.
235
+ */
236
+ function buildVariables(varsJson, varArgs) {
237
+ const fromJson = parseVarsJson(varsJson);
238
+ if (varArgs.length === 0) {
239
+ return fromJson;
240
+ }
241
+ const merged = fromJson
242
+ ? structuredClone(fromJson)
243
+ : {};
244
+ for (const arg of varArgs) {
245
+ const { path, value } = parseVarArg(arg);
246
+ setNestedValue(merged, path, value);
247
+ }
248
+ return merged;
249
+ }
250
+ // ---------------------------------------------------------------------------
251
+ // Cluster engine
252
+ // ---------------------------------------------------------------------------
253
+ const LOCAL_HINT = "use `--engine local` to evaluate via feelin (note: feelin doesn't support all Camunda FEEL extensions; result may differ from cluster)";
254
+ const PARSE_ERROR_PREFIX_RE = /^Command 'EVALUATE' rejected with code '[A-Z_]+': /;
255
+ /**
256
+ * Strip the verbose Zeebe prefix from parse-error details.
257
+ * "Command 'EVALUATE' rejected with code 'INVALID_ARGUMENT': Failed to parse ..."
258
+ * → "Failed to parse ..."
259
+ */
260
+ function cleanParseDetail(detail) {
261
+ return detail.replace(PARSE_ERROR_PREFIX_RE, "");
262
+ }
263
+ /**
264
+ * Translate an SDK / fetch error into a `{ title, hint }` pair we can render.
265
+ *
266
+ * We special-case the cluster responses where the user's action differs:
267
+ *
268
+ * - 400: surface the cleaned parse-error detail so the user can fix the
269
+ * expression they typed.
270
+ * - 401 / 403: auth failed — the cluster is reachable, the user needs to
271
+ * re-authenticate or check permissions.
272
+ * - 404: tell the user the cluster doesn't support FEEL evaluation yet
273
+ * (requires Camunda 8.9+) and point at the local engine.
274
+ *
275
+ * Everything else — 5xx and any kind of network / transport failure —
276
+ * collapses to a single generic "cannot connect" message plus the
277
+ * local-engine hint. Trying to map specific Node/undici error codes is
278
+ * fragile across platforms (Linux fetch failures don't always preserve the
279
+ * underlying code on the cause chain) and the precise variant doesn't change
280
+ * what the user can do about it.
281
+ */
282
+ function classifyClusterError(error) {
283
+ // SDK errors expose the HTTP status as either `status` or `statusCode`
284
+ // depending on which layer raised them (see src/commands/forms.ts).
285
+ const status = isRecord(error)
286
+ ? typeof error.status === "number"
287
+ ? error.status
288
+ : typeof error.statusCode === "number"
289
+ ? error.statusCode
290
+ : undefined
291
+ : undefined;
292
+ if (isRecord(error) && status !== undefined) {
293
+ const title = typeof error.title === "string" ? error.title : undefined;
294
+ const detail = typeof error.detail === "string" ? error.detail : undefined;
295
+ if (status === 400) {
296
+ const cleaned = detail
297
+ ? cleanParseDetail(detail)
298
+ : title || "Invalid expression";
299
+ return { title: cleaned, hint: null };
300
+ }
301
+ if (status === 401 || title === "UNAUTHENTICATED") {
302
+ return {
303
+ title: `Authentication failed (${status}). Run \`c8ctl auth login\` to refresh.`,
304
+ hint: LOCAL_HINT,
305
+ };
306
+ }
307
+ if (status === 403 || title === "PERMISSION_DENIED") {
308
+ return {
309
+ title: `Authorization failed (${status}): not permitted to evaluate expressions.`,
310
+ hint: LOCAL_HINT,
311
+ };
312
+ }
313
+ if (status === 404 || title === "NOT_FOUND") {
314
+ return {
315
+ title: "Cluster does not support FEEL evaluation (404). Requires Camunda 8.9+.",
316
+ hint: LOCAL_HINT,
317
+ };
318
+ }
319
+ }
320
+ return {
321
+ title: "Cannot connect to Camunda cluster. Verify the endpoint URL, credentials, and that the cluster is reachable.",
322
+ hint: LOCAL_HINT,
323
+ };
324
+ }
325
+ async function evaluateCluster({ expression, variables, tenantId, profile, }) {
326
+ let client;
327
+ try {
328
+ client = c8ctl.createClient(profile);
329
+ }
330
+ catch (error) {
331
+ const message = error instanceof Error ? error.message : String(error);
332
+ throw new Error(`No cluster configured: ${message}\n${LOCAL_HINT}.`);
333
+ }
334
+ try {
335
+ const response = await client.evaluateExpression({
336
+ expression: normalizeExpression(expression),
337
+ ...(variables !== undefined ? { variables } : {}),
338
+ ...(tenantId ? { tenantId } : {}),
339
+ });
340
+ return {
341
+ expression,
342
+ result: response.result ?? null,
343
+ warnings: response.warnings.map((w) => ({ message: w.message })),
344
+ };
345
+ }
346
+ catch (error) {
347
+ const classified = classifyClusterError(error);
348
+ const lines = [classified.title];
349
+ if (classified.hint)
350
+ lines.push(` Hint: ${classified.hint}`);
351
+ const wrapped = new Error(lines.join("\n"));
352
+ wrapped.cause = error;
353
+ throw wrapped;
354
+ }
355
+ }
356
+ // ---------------------------------------------------------------------------
357
+ // Local engine (feelin)
358
+ // ---------------------------------------------------------------------------
359
+ function evaluateLocal({ expression, variables, }) {
360
+ // feelin's `evaluate` expects the expression without the leading `=`.
361
+ // Normalize first so we accept both forms identically across engines.
362
+ const normalized = normalizeExpression(expression);
363
+ const stripped = normalized.slice(1).trimStart();
364
+ const context = variables ?? {};
365
+ let raw;
366
+ try {
367
+ raw = feelinEvaluate(stripped, context);
368
+ }
369
+ catch (error) {
370
+ // Parse errors throw in feelin; surface as our standard shape.
371
+ const message = error instanceof Error ? error.message : String(error);
372
+ const wrapped = new Error(`Failed to parse expression: ${message}`);
373
+ wrapped.cause = error;
374
+ throw wrapped;
375
+ }
376
+ return {
377
+ expression,
378
+ result: raw.value === undefined ? null : raw.value,
379
+ warnings: raw.warnings.map((w) => ({
380
+ message: w.message,
381
+ type: w.type,
382
+ position: { from: w.position.from, to: w.position.to },
383
+ })),
384
+ };
385
+ }
386
+ // ---------------------------------------------------------------------------
387
+ // Output rendering
388
+ // ---------------------------------------------------------------------------
389
+ function formatResultForText(result) {
390
+ if (typeof result === "string") {
391
+ return result;
392
+ }
393
+ if (result === null || result === undefined) {
394
+ return "null";
395
+ }
396
+ return JSON.stringify(result, null, 2);
397
+ }
398
+ function renderText(logger, normalized) {
399
+ logger.output(formatResultForText(normalized.result));
400
+ if (normalized.warnings.length === 0) {
401
+ return;
402
+ }
403
+ const count = normalized.warnings.length;
404
+ const noun = count === 1 ? "warning" : "warnings";
405
+ logger.output("");
406
+ logger.output(styleText(["bold", "yellow"], `⚠ ${count} ${noun}:`));
407
+ for (const w of normalized.warnings) {
408
+ // Engine-conditional: feelin's local engine carries a WarningType
409
+ // (NO_VARIABLE_FOUND, INVALID_TYPE, …) we surface as a trailing
410
+ // dim parenthetical — same visual rhythm as bpmn lint's rule
411
+ // column. Cluster has no type, so the row stays a plain message.
412
+ const typeSuffix = w.type ? ` ${styleText("dim", `(${w.type})`)}` : "";
413
+ logger.output(` ${w.message}${typeSuffix}`);
414
+ }
415
+ }
416
+ function renderJson(logger, normalized) {
417
+ logger.json(normalized);
418
+ }
419
+ // ---------------------------------------------------------------------------
420
+ // Subcommand: evaluate
421
+ // ---------------------------------------------------------------------------
422
+ async function evaluateSubcommand(args, profile) {
423
+ const logger = c8ctl.getLogger();
424
+ const parsed = parseArgs(args);
425
+ if (parsed.error) {
426
+ throw new Error(parsed.error);
427
+ }
428
+ const expression = parsed.positionals[0];
429
+ if (!expression) {
430
+ throw new Error("Missing expression. Usage: c8ctl feel evaluate '<expression>' [...]");
431
+ }
432
+ if (parsed.positionals.length > 1) {
433
+ throw new Error(`Unexpected positional argument: ${parsed.positionals[1]}. Wrap multi-word expressions in quotes.`);
434
+ }
435
+ const variables = buildVariables(parsed.vars, parsed.varArgs);
436
+ // Resolve the effective tenant: explicit --tenant wins; otherwise fall back
437
+ // to the profile/session default via resolveTenantId (same path all other
438
+ // cluster commands use, so CAMUNDA_DEFAULT_TENANT_ID / profile settings
439
+ // are honoured without a redundant --tenant flag).
440
+ const effectiveTenantId = parsed.engine === "cluster"
441
+ ? (parsed.tenant ?? c8ctl.resolveTenantId(profile))
442
+ : parsed.tenant;
443
+ if (parsed.engine === "local" && parsed.tenant) {
444
+ logger.warn("--tenant has no effect with --engine local; ignored");
445
+ }
446
+ // Honour --dry-run for the cluster engine: emit the would-be request
447
+ // payload and return without hitting the API.
448
+ if (parsed.engine === "cluster" && c8ctl.dryRun) {
449
+ const payload = {
450
+ expression: normalizeExpression(expression),
451
+ ...(variables !== undefined ? { variables } : {}),
452
+ ...(effectiveTenantId ? { tenantId: effectiveTenantId } : {}),
453
+ };
454
+ if (c8ctl.outputMode === "json") {
455
+ logger.json({
456
+ dryRun: true,
457
+ command: "feel evaluate",
458
+ endpoint: "POST /v2/expression/evaluation",
459
+ payload,
460
+ });
461
+ }
462
+ else {
463
+ logger.output("Dry run — no cluster request sent.");
464
+ logger.output(" POST /v2/expression/evaluation");
465
+ logger.output(` ${JSON.stringify(payload, null, 2).split("\n").join("\n ")}`);
466
+ }
467
+ return;
468
+ }
469
+ const normalized = parsed.engine === "cluster"
470
+ ? await evaluateCluster({
471
+ expression,
472
+ variables,
473
+ tenantId: effectiveTenantId,
474
+ profile,
475
+ })
476
+ : evaluateLocal({ expression, variables });
477
+ if (c8ctl.outputMode === "json") {
478
+ renderJson(logger, normalized);
479
+ }
480
+ else {
481
+ renderText(logger, normalized);
482
+ }
483
+ }
484
+ /**
485
+ * Reinject flags pre-parsed by the host (#366/#367) back into the args
486
+ * array as `--name value` / `--name` tokens, so the plugin's hand-rolled
487
+ * `parseArgs` still sees them. Repeated string flags arrive as arrays
488
+ * (e.g. multiple `--var x=1 --var y=2`).
489
+ */
490
+ function injectFlagsIntoArgs(args, flags) {
491
+ const out = [...args];
492
+ if (!flags) {
493
+ return out;
494
+ }
495
+ for (const [name, value] of Object.entries(flags)) {
496
+ if (value === undefined || value === null) {
497
+ continue;
498
+ }
499
+ if (typeof value === "boolean") {
500
+ if (value) {
501
+ out.push(`--${name}`);
502
+ }
503
+ }
504
+ else if (Array.isArray(value)) {
505
+ for (const item of value) {
506
+ if (item !== undefined && item !== null) {
507
+ out.push(`--${name}`, String(item));
508
+ }
509
+ }
510
+ }
511
+ else {
512
+ out.push(`--${name}`, String(value));
513
+ }
514
+ }
515
+ return out;
516
+ }
517
+ async function feelHandler(args, flags, ctx) {
518
+ const reinjected = injectFlagsIntoArgs(args ?? [], flags);
519
+ const subcommand = reinjected[0];
520
+ const subArgs = reinjected.slice(1);
521
+ const validSubcommands = metadata.commands.feel.subcommands.map((s) => s.name);
522
+ if (!subcommand || !validSubcommands.includes(subcommand)) {
523
+ const logger = c8ctl.getLogger();
524
+ const lead = subcommand
525
+ ? `Unknown subcommand '${subcommand}'.`
526
+ : "c8ctl feel requires a subcommand.";
527
+ logger.info(`${lead} Available: ${validSubcommands.join(", ")}`);
528
+ logger.info("Run 'c8ctl feel --help' for full usage.");
529
+ process.exitCode = 1;
530
+ return;
531
+ }
532
+ try {
533
+ if (subcommand === "evaluate")
534
+ await evaluateSubcommand(subArgs, ctx?.profile);
535
+ }
536
+ catch (error) {
537
+ const message = error instanceof Error ? error.message : String(error);
538
+ const logger = c8ctl.getLogger();
539
+ logger.error(`Failed to feel ${subcommand}: ${message}`);
540
+ process.exitCode = 1;
541
+ }
542
+ }
543
+ // ---------------------------------------------------------------------------
544
+ // Plugin API
545
+ // ---------------------------------------------------------------------------
546
+ export const metadata = {
547
+ name: "feel",
548
+ description: "Evaluate FEEL expressions",
549
+ commands: {
550
+ feel: {
551
+ description: "Evaluate FEEL expressions against a cluster or locally",
552
+ helpDescription: "Evaluate FEEL expressions and return the result. By default uses the connected " +
553
+ "Camunda cluster's engine (POST /v2/expression/evaluation, requires 8.9+). Use " +
554
+ "--engine local to evaluate offline via feelin (note: feelin does not support " +
555
+ "all Camunda FEEL extensions; result may differ from cluster).",
556
+ subcommands: [
557
+ { name: "evaluate", description: "Evaluate a FEEL expression" },
558
+ ],
559
+ examples: [
560
+ {
561
+ command: "c8ctl feel evaluate '1 + 2'",
562
+ description: "Evaluate a simple expression",
563
+ },
564
+ {
565
+ command: "c8ctl feel evaluate '=1 + 2'",
566
+ description: "Same — leading '=' is optional",
567
+ },
568
+ {
569
+ command: "c8ctl feel evaluate 'a + b' --var a=1 --var b=2",
570
+ description: "Set individual variables",
571
+ },
572
+ {
573
+ command: "c8ctl feel evaluate 'person.name' --var person.name=Alice",
574
+ description: "Dot-path nesting",
575
+ },
576
+ {
577
+ command: "c8ctl feel evaluate 'sum(items)' --var 'items=[1,2,3]'",
578
+ description: "JSON values (arrays, numbers, booleans, null)",
579
+ },
580
+ {
581
+ command: "c8ctl feel evaluate 'a + b' --vars '{\"a\": 1, \"b\": 2}'",
582
+ description: "Bulk variables as JSON",
583
+ },
584
+ {
585
+ command: "c8ctl feel evaluate '1 + 2' --engine local",
586
+ description: "Evaluate offline via feelin",
587
+ },
588
+ ],
589
+ },
590
+ },
591
+ };
592
+ export const commands = {
593
+ feel: {
594
+ flags: {
595
+ engine: {
596
+ type: "string",
597
+ description: "Engine: 'cluster' (default) or 'local' (feelin)",
598
+ },
599
+ vars: {
600
+ type: "string",
601
+ description: "JSON object of variables (use --var for individual values)",
602
+ },
603
+ var: {
604
+ type: "string",
605
+ multiple: true,
606
+ description: "Set a single variable (repeatable). Dot paths nest; values parsed as JSON, falling back to string. e.g. --var x=42 --var person.name=Alice --var items=[1,2,3]",
607
+ },
608
+ tenant: {
609
+ type: "string",
610
+ description: "Tenant ID (cluster engine only, for tenant-scoped cluster variables)",
611
+ },
612
+ },
613
+ handler: feelHandler,
614
+ },
615
+ };
616
+ //# sourceMappingURL=c8ctl-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"c8ctl-plugin.js","sourceRoot":"","sources":["../../../default-plugins/feel/c8ctl-plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "c8ctl-plugin-feel",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "description": "c8ctl plugin to evaluate FEEL expressions against a Camunda cluster or locally via feelin",
6
+ "keywords": ["c8ctl", "c8ctl-plugin", "feel", "expression"],
7
+ "main": "c8ctl-plugin.ts"
8
+ }
@@ -17,6 +17,7 @@ export declare function deployResources(paths: string[], options: {
17
17
  continueOnError?: boolean;
18
18
  continueOnUserError?: boolean;
19
19
  force?: boolean;
20
+ extensionList?: readonly string[];
20
21
  /**
21
22
  * Optional cancellation signal. When aborted, an in-flight
22
23
  * `createDeployment` HTTP request is cancelled via the SDK's
@@ -1 +1 @@
1
- {"version":3,"file":"deployments.d.ts","sourceRoot":"","sources":["../src/deployments.ts"],"names":[],"mappings":"AAAA;;GAEG;AA8SH;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACpC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE;IACR,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB,GACC,OAAO,CAAC,IAAI,CAAC,CA+Pf;AAoND;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,+DAqCxB,CAAC"}
1
+ {"version":3,"file":"deployments.d.ts","sourceRoot":"","sources":["../src/deployments.ts"],"names":[],"mappings":"AAAA;;GAEG;AA4WH;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACpC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE;IACR,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB,GACC,OAAO,CAAC,IAAI,CAAC,CAqQf;AAyPD;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,+DAiDxB,CAAC"}