@camunda8/cli 3.2.0-alpha.2 → 3.2.0-alpha.4

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 (79) hide show
  1. package/CONTEXT.md +7 -15
  2. package/EXAMPLES.md +233 -1
  3. package/README.md +44 -177
  4. package/dist/command-dispatch.js +1 -1
  5. package/dist/command-dispatch.js.map +1 -1
  6. package/dist/command-registry.d.ts +19 -7
  7. package/dist/command-registry.d.ts.map +1 -1
  8. package/dist/command-registry.js +47 -7
  9. package/dist/command-registry.js.map +1 -1
  10. package/dist/commands/deploy.d.ts +13 -0
  11. package/dist/commands/deploy.d.ts.map +1 -0
  12. package/dist/commands/deploy.js +91 -0
  13. package/dist/commands/deploy.js.map +1 -0
  14. package/dist/{deployments.d.ts → commands/helpers/deploy-helpers.d.ts} +49 -12
  15. package/dist/commands/helpers/deploy-helpers.d.ts.map +1 -0
  16. package/dist/{deployments.js → commands/helpers/deploy-helpers.js} +16 -97
  17. package/dist/commands/helpers/deploy-helpers.js.map +1 -0
  18. package/dist/commands/identity-authorizations.d.ts +0 -13
  19. package/dist/commands/identity-authorizations.d.ts.map +1 -1
  20. package/dist/commands/identity-authorizations.js +1 -1
  21. package/dist/commands/identity-authorizations.js.map +1 -1
  22. package/dist/commands/identity.d.ts +1 -21
  23. package/dist/commands/identity.d.ts.map +1 -1
  24. package/dist/commands/identity.js +7 -8
  25. package/dist/commands/identity.js.map +1 -1
  26. package/dist/commands/profiles.d.ts +0 -32
  27. package/dist/commands/profiles.d.ts.map +1 -1
  28. package/dist/commands/profiles.js +5 -36
  29. package/dist/commands/profiles.js.map +1 -1
  30. package/dist/commands/watch.d.ts.map +1 -1
  31. package/dist/commands/watch.js +2 -2
  32. package/dist/commands/watch.js.map +1 -1
  33. package/dist/default-plugins/bpmn/c8ctl-plugin.js +7374 -137
  34. package/dist/default-plugins/bpmn/package.json +8 -1
  35. package/dist/default-plugins/element-template/c8ctl-plugin.js +10194 -248
  36. package/dist/default-plugins/element-template/package.json +11 -1
  37. package/dist/default-plugins/feel/c8ctl-plugin.js +14030 -584
  38. package/dist/default-plugins/feel/package.json +4 -1
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +16 -9
  41. package/dist/index.js.map +1 -1
  42. package/dist/resource-extensions.d.ts.map +1 -0
  43. package/dist/resource-extensions.js.map +1 -0
  44. package/dist/vendor/bpmnlint.cjs +25907 -0
  45. package/package.json +11 -13
  46. package/dist/commands/resource-extensions.d.ts.map +0 -1
  47. package/dist/commands/resource-extensions.js.map +0 -1
  48. package/dist/default-plugins/bpmn/c8ctl-plugin.js.map +0 -1
  49. package/dist/default-plugins/bpmn/format.js +0 -64
  50. package/dist/default-plugins/bpmn/format.js.map +0 -1
  51. package/dist/default-plugins/bpmn/lint.js +0 -323
  52. package/dist/default-plugins/bpmn/lint.js.map +0 -1
  53. package/dist/default-plugins/element-template/c8ctl-plugin.js.map +0 -1
  54. package/dist/default-plugins/element-template/commands/apply.js +0 -337
  55. package/dist/default-plugins/element-template/commands/apply.js.map +0 -1
  56. package/dist/default-plugins/element-template/commands/get-properties.js +0 -350
  57. package/dist/default-plugins/element-template/commands/get-properties.js.map +0 -1
  58. package/dist/default-plugins/element-template/commands/get.js +0 -107
  59. package/dist/default-plugins/element-template/commands/get.js.map +0 -1
  60. package/dist/default-plugins/element-template/commands/info.js +0 -196
  61. package/dist/default-plugins/element-template/commands/info.js.map +0 -1
  62. package/dist/default-plugins/element-template/commands/search.js +0 -106
  63. package/dist/default-plugins/element-template/commands/search.js.map +0 -1
  64. package/dist/default-plugins/element-template/commands/sync.js +0 -36
  65. package/dist/default-plugins/element-template/commands/sync.js.map +0 -1
  66. package/dist/default-plugins/element-template/helpers.js +0 -515
  67. package/dist/default-plugins/element-template/helpers.js.map +0 -1
  68. package/dist/default-plugins/element-template/marketplace.js +0 -597
  69. package/dist/default-plugins/element-template/marketplace.js.map +0 -1
  70. package/dist/default-plugins/element-template/template-ref.js +0 -243
  71. package/dist/default-plugins/element-template/template-ref.js.map +0 -1
  72. package/dist/default-plugins/feel/c8ctl-plugin.js.map +0 -1
  73. package/dist/default-plugins/hello-world/README.md +0 -161
  74. package/dist/default-plugins/hello-world/c8ctl-plugin.js +0 -69
  75. package/dist/default-plugins/hello-world/package.json +0 -8
  76. package/dist/deployments.d.ts.map +0 -1
  77. package/dist/deployments.js.map +0 -1
  78. /package/dist/{commands/resource-extensions.d.ts → resource-extensions.d.ts} +0 -0
  79. /package/dist/{commands/resource-extensions.js → resource-extensions.js} +0 -0
@@ -1,337 +0,0 @@
1
- /**
2
- * `c8ctl element-template apply` — apply an element template to a BPMN
3
- * element via the prebuilt bpmn-js + bpmn-js-element-templates vendor bundle.
4
- */
5
- import { existsSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
6
- import { createRequire } from "node:module";
7
- import { dirname, resolve as resolvePath } from "node:path";
8
- import { fileURLToPath } from "node:url";
9
- import { applySetOverrides, findPropertiesByBindingName, installStdoutEpipeHandler, isRecord, maybePrependFeel, parseArgs, parseSetArg, warnUnmetConditions, } from "../helpers.js";
10
- import { elementExistsInBpmn, getExecutionPlatformVersion, parseTemplateRef, readBpmnInput, readTemplateFromPathOrUrl, resolveOotbTemplate, } from "../template-ref.js";
11
- if (!globalThis.c8ctl)
12
- throw new Error("c8ctl runtime not initialised");
13
- const c8ctl = globalThis.c8ctl;
14
- const require = createRequire(import.meta.url);
15
- const __dirname = dirname(fileURLToPath(import.meta.url));
16
- /**
17
- * Locate the prebuilt vendor bundle. Plugins live in two places:
18
- * - dev: default-plugins/element-template/commands/apply.ts
19
- * vendor: ../../../dist/vendor/bpmn-element-templates.cjs
20
- * - production: dist/default-plugins/element-template/commands/apply.js
21
- * vendor: ../../../vendor/bpmn-element-templates.cjs
22
- */
23
- function resolveVendorBundle() {
24
- const candidates = [
25
- resolvePath(__dirname, "..", "..", "..", "dist", "vendor", "bpmn-element-templates.cjs"),
26
- resolvePath(__dirname, "..", "..", "..", "vendor", "bpmn-element-templates.cjs"),
27
- ];
28
- for (const path of candidates) {
29
- if (existsSync(path)) {
30
- return path;
31
- }
32
- }
33
- throw new Error("Vendor bundle not found. Run `npm run build:vendor` to build it.\n" +
34
- `Searched: ${candidates.join(", ")}`);
35
- }
36
- /**
37
- * Find the first child of `extensionElements` whose moddle `$type` matches.
38
- * Avoids importing bpmn-js's `is()` helper just for one shape check.
39
- */
40
- function findExtensionByType(extensionElements, type) {
41
- if (!extensionElements) {
42
- return undefined;
43
- }
44
- // biome-ignore lint/plugin: moddle API contract boundary — get() returns untyped collections
45
- const values = extensionElements.get("values");
46
- return values?.find((v) => v.$type === type);
47
- }
48
- /**
49
- * Force the source/value of each `--set` into the corresponding moddle child.
50
- *
51
- * bpmn-js-element-templates' applyTemplate preserves existing input/output/
52
- * header/property values on a re-apply (and unconditionally on Dropdown
53
- * properties — see ChangeElementTemplateHandler#shouldKeepValue, ref
54
- * bpmn-io/bpmn-js-properties-panel#767). For a CLI the user expectation is
55
- * "--set wins". After the first applyTemplate we walk the --set args, locate
56
- * the moddle entry that backs each binding, and update its value via
57
- * `modeling.updateModdleProperties` so the change goes through the same
58
- * command stack the library uses internally.
59
- *
60
- * Bindings whose moddle entry doesn't exist yet (because their condition was
61
- * not met against the pre-apply element state) are skipped here and picked
62
- * up by the second applyTemplate, which re-evaluates conditions against the
63
- * now-updated element and creates the missing entries using our mutated
64
- * `prop.value` as the default.
65
- */
66
- function forceSetValues(modeler, element, template, setArgs) {
67
- const modeling = modeler.get("modeling");
68
- // biome-ignore lint/plugin: moddle API contract boundary — get() returns untyped ModdleElement
69
- const extensionElements = element.businessObject.get("extensionElements");
70
- if (!extensionElements) {
71
- return;
72
- }
73
- const ioMapping = findExtensionByType(extensionElements, "zeebe:IoMapping");
74
- const taskHeaders = findExtensionByType(extensionElements, "zeebe:TaskHeaders");
75
- const taskDefinition = findExtensionByType(extensionElements, "zeebe:TaskDefinition");
76
- const zeebeProperties = findExtensionByType(extensionElements, "zeebe:Properties");
77
- for (const arg of setArgs) {
78
- const { bindingTypeFilter, name, value } = parseSetArg(arg);
79
- const matches = findPropertiesByBindingName(template.properties, name, bindingTypeFilter);
80
- for (const prop of matches) {
81
- const effectiveValue = maybePrependFeel(prop, value);
82
- updateModdleForProperty(modeling, element, prop, effectiveValue, {
83
- ioMapping,
84
- taskHeaders,
85
- taskDefinition,
86
- zeebeProperties,
87
- });
88
- }
89
- }
90
- }
91
- function updateModdleForProperty(modeling, element, prop, value, containers) {
92
- const binding = prop.binding;
93
- if (!binding) {
94
- return;
95
- }
96
- switch (binding.type) {
97
- case "zeebe:input": {
98
- // biome-ignore lint/plugin: moddle API contract boundary — get() returns untyped collections
99
- const inputs = (containers.ioMapping?.get("inputParameters") ??
100
- []);
101
- const child = inputs.find((p) => p.target === binding.name);
102
- if (child) {
103
- modeling.updateModdleProperties(element, child, { source: value });
104
- }
105
- return;
106
- }
107
- case "zeebe:output": {
108
- // biome-ignore lint/plugin: moddle API contract boundary — get() returns untyped collections
109
- const outputs = (containers.ioMapping?.get("outputParameters") ??
110
- []);
111
- const child = outputs.find((p) => p.source === binding.source);
112
- if (child) {
113
- modeling.updateModdleProperties(element, child, { target: value });
114
- }
115
- return;
116
- }
117
- case "zeebe:taskHeader": {
118
- // biome-ignore lint/plugin: moddle API contract boundary — get() returns untyped collections
119
- const headers = (containers.taskHeaders?.get("values") ??
120
- []);
121
- const child = headers.find((h) => h.key === binding.key);
122
- if (child) {
123
- modeling.updateModdleProperties(element, child, { value });
124
- }
125
- return;
126
- }
127
- case "zeebe:property": {
128
- // biome-ignore lint/plugin: moddle API contract boundary — get() returns untyped collections
129
- const props = (containers.zeebeProperties?.get("properties") ??
130
- []);
131
- const child = props.find((p) => p.name === binding.name);
132
- if (child) {
133
- modeling.updateModdleProperties(element, child, { value });
134
- }
135
- return;
136
- }
137
- case "zeebe:taskDefinition": {
138
- if (containers.taskDefinition && binding.property) {
139
- modeling.updateModdleProperties(element, containers.taskDefinition, {
140
- [binding.property]: value,
141
- });
142
- }
143
- return;
144
- }
145
- }
146
- }
147
- /**
148
- * Apply an element template to a BPMN element using bpmn-js-headless and
149
- * bpmn-js-element-templates (same libraries as Web/Desktop Modeler).
150
- *
151
- * Loaded from a prebuilt CJS vendor bundle since the upstream libraries
152
- * use extensionless ESM imports that Node.js can't resolve without a bundler.
153
- *
154
- * Pass `setArgs` to honor `--set` overrides on re-apply. The first
155
- * applyTemplate uses the (already-mutated) template defaults for fresh
156
- * properties; `forceSetValues` then overrides preserved values; a second
157
- * applyTemplate picks up dependents whose conditions just became met.
158
- */
159
- async function applyElementTemplate(xml, template, elementId, setArgs) {
160
- const vendorPath = resolveVendorBundle();
161
- const vendor = require(vendorPath);
162
- const { Modeler, CloudElementTemplatesCoreModule, ZeebeModdleExtension, HeadlessTextRendererModule, } = vendor;
163
- // HeadlessTextRendererModule overrides bpmn-js's default textRenderer,
164
- // which would otherwise call document.createElementNS during importXML
165
- // (to measure external label bounds) and throw "document is not defined"
166
- // in Node. The errors are non-fatal but produce noisy stack traces.
167
- const modeler = new Modeler({
168
- additionalModules: [
169
- HeadlessTextRendererModule,
170
- CloudElementTemplatesCoreModule,
171
- ],
172
- moddleExtensions: { zeebe: ZeebeModdleExtension },
173
- });
174
- await modeler.importXML(xml);
175
- const elementRegistry = modeler.get("elementRegistry");
176
- const element = elementRegistry.get(elementId);
177
- if (!element) {
178
- throw new Error(`Element "${elementId}" not found in the BPMN diagram`);
179
- }
180
- const elementTemplates = modeler.get("elementTemplates");
181
- elementTemplates.set([template]);
182
- elementTemplates.applyTemplate(element, template);
183
- if (setArgs.length > 0) {
184
- forceSetValues(modeler, element, template, setArgs);
185
- // Second pass so dependents whose conditions are newly met get
186
- // created with our mutated defaults.
187
- elementTemplates.applyTemplate(element, template);
188
- }
189
- const result = await modeler.saveXML({ format: true });
190
- return result.xml;
191
- }
192
- export async function applySubcommand(args) {
193
- const logger = c8ctl.getLogger();
194
- // applySubcommand writes BPMN XML to stdout in the non-in-place path;
195
- // install the EPIPE handler before any downstream `head -c N` or
196
- // `| less` can sever the pipe.
197
- installStdoutEpipeHandler();
198
- const parsed = parseArgs(args);
199
- if (parsed.error) {
200
- throw new Error(parsed.error);
201
- }
202
- const [templateArg, elementId, bpmnFilePath] = parsed.positionals;
203
- if (parsed.positionals.length > 3) {
204
- throw new Error(`Unexpected argument: ${parsed.positionals[3]}. Usage: c8ctl element-template apply <template> <element-id> [<file.bpmn>]`);
205
- }
206
- if (!templateArg) {
207
- throw new Error("Missing template argument. Usage: c8ctl element-template apply <template> <element-id> [<file.bpmn>]");
208
- }
209
- if (!elementId) {
210
- throw new Error("Missing element-id argument. Usage: c8ctl element-template apply <template> <element-id> [<file.bpmn>]");
211
- }
212
- // Reject incompatible flag combinations before reading stdin —
213
- // otherwise a piped BPMN stream is consumed (and a long-running
214
- // producer can hang) just to surface a usage error.
215
- if (parsed.inPlace && !bpmnFilePath) {
216
- throw new Error("--in-place cannot be used with stdin input");
217
- }
218
- const input = await readBpmnInput(bpmnFilePath);
219
- if (!input) {
220
- throw new Error("No BPMN input provided. Pass a file path or pipe BPMN XML via stdin.");
221
- }
222
- const ref = parseTemplateRef(templateArg);
223
- if (!ref) {
224
- throw new Error("Missing template argument.");
225
- }
226
- let template;
227
- if (ref.kind === "id") {
228
- const executionPlatformVersion = await getExecutionPlatformVersion(input.xml);
229
- template = await resolveOotbTemplate(ref, { executionPlatformVersion });
230
- if (ref.version === undefined && !executionPlatformVersion) {
231
- logger.warn("BPMN has no modeler:executionPlatformVersion — applying latest version " +
232
- `(${template.version}) of ${ref.id}.`);
233
- }
234
- }
235
- else {
236
- template = await readTemplateFromPathOrUrl(ref.value);
237
- }
238
- // Validate --set overrides against the template before dry-run or real apply,
239
- // so `--dry-run --set notAProperty=x` fails just as the real apply would.
240
- let setProperties = [];
241
- if (parsed.setArgs.length > 0) {
242
- setProperties = applySetOverrides(template.properties, parsed.setArgs);
243
- }
244
- // Dry-run: describe what would happen without mutating anything
245
- if (c8ctl.dryRun) {
246
- // Validate the target element exists so dry-run only reports a successful
247
- // plan when the real apply would also succeed.
248
- if (!(await elementExistsInBpmn(input.xml, elementId))) {
249
- throw new Error(`Element "${elementId}" not found in the BPMN diagram`);
250
- }
251
- const fallbackId = ref.kind === "id" ? ref.id : ref.value;
252
- const info = {
253
- dryRun: true,
254
- command: "element-template apply",
255
- template: {
256
- id: template.id ?? fallbackId,
257
- name: template.name,
258
- version: template.version,
259
- },
260
- elementId,
261
- source: input.source,
262
- inPlace: parsed.inPlace && !!bpmnFilePath,
263
- setOverrides: parsed.setArgs,
264
- };
265
- if (c8ctl.outputMode === "json") {
266
- logger.json(info);
267
- }
268
- else {
269
- logger.output("Dry run — no changes applied.");
270
- logger.output(` Template: ${info.template.name ?? info.template.id}${info.template.version != null ? ` v${info.template.version}` : ""}`);
271
- logger.output(` Element: ${elementId}`);
272
- logger.output(` Source: ${input.source}`);
273
- if (info.inPlace) {
274
- logger.output(` Mode: in-place (would overwrite ${bpmnFilePath})`);
275
- }
276
- else {
277
- logger.output(" Mode: stdout (would print transformed XML)");
278
- }
279
- if (parsed.setArgs.length > 0) {
280
- logger.output(` --set: ${parsed.setArgs.join(", ")}`);
281
- }
282
- }
283
- return;
284
- }
285
- let resultXml;
286
- try {
287
- resultXml = await applyElementTemplate(input.xml, template, elementId, parsed.setArgs);
288
- }
289
- catch (error) {
290
- const message = error instanceof Error ? error.message : String(error);
291
- throw new Error(`Error applying template: ${message}`);
292
- }
293
- if (setProperties.length > 0) {
294
- warnUnmetConditions(logger, resultXml, setProperties);
295
- }
296
- if (parsed.inPlace && bpmnFilePath) {
297
- atomicOverwriteFile(bpmnFilePath, resultXml);
298
- logger.info(`Updated ${bpmnFilePath}`);
299
- return;
300
- }
301
- process.stdout.write(resultXml);
302
- }
303
- /**
304
- * Overwrite `targetPath` atomically: write to a sibling temp file in
305
- * the same directory, then `renameSync` over the target. POSIX
306
- * `rename` is atomic on the same filesystem, so a kill mid-write
307
- * never destroys the user's BPMN file.
308
- *
309
- * Falls back to a direct `writeFileSync` if the rename fails with
310
- * EXDEV (cross-device link) — vanishingly rare for a file's own
311
- * sibling, but covers exotic setups like FUSE mounts.
312
- */
313
- function atomicOverwriteFile(targetPath, contents) {
314
- const target = resolvePath(targetPath);
315
- const tmp = `${target}.${process.pid}.${Math.random().toString(36).slice(2)}.tmp`;
316
- try {
317
- writeFileSync(tmp, contents, "utf-8");
318
- renameSync(tmp, target);
319
- }
320
- catch (error) {
321
- try {
322
- unlinkSync(tmp);
323
- }
324
- catch {
325
- // Best-effort cleanup — the original error is what matters.
326
- }
327
- const code = isRecord(error) && typeof error.code === "string"
328
- ? error.code
329
- : undefined;
330
- if (code === "EXDEV") {
331
- writeFileSync(target, contents, "utf-8");
332
- return;
333
- }
334
- throw error;
335
- }
336
- }
337
- //# sourceMappingURL=apply.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"apply.js","sourceRoot":"","sources":["../../../../default-plugins/element-template/commands/apply.ts"],"names":[],"mappings":"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"}