@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.
- package/EXAMPLES.md +22 -5
- package/PLUGIN-HELP.md +26 -0
- package/README.md +37 -4
- package/dist/command-dispatch.d.ts.map +1 -1
- package/dist/command-dispatch.js +2 -1
- package/dist/command-dispatch.js.map +1 -1
- package/dist/command-registry.d.ts +30 -0
- package/dist/command-registry.d.ts.map +1 -1
- package/dist/command-registry.js +34 -1
- package/dist/command-registry.js.map +1 -1
- package/dist/commands/plugins.d.ts +21 -0
- package/dist/commands/plugins.d.ts.map +1 -1
- package/dist/commands/plugins.js +74 -1
- package/dist/commands/plugins.js.map +1 -1
- package/dist/commands/resource-extensions.d.ts +12 -0
- package/dist/commands/resource-extensions.d.ts.map +1 -1
- package/dist/commands/resource-extensions.js +13 -1
- package/dist/commands/resource-extensions.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +5 -3
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +21 -12
- package/dist/commands/watch.js.map +1 -1
- package/dist/completion.d.ts.map +1 -1
- package/dist/completion.js +140 -13
- package/dist/completion.js.map +1 -1
- package/dist/default-plugins/bpmn/README.md +69 -0
- package/dist/default-plugins/bpmn/c8ctl-plugin.js +125 -0
- package/dist/default-plugins/bpmn/c8ctl-plugin.js.map +1 -0
- package/dist/default-plugins/bpmn/lint.js +259 -0
- package/dist/default-plugins/bpmn/lint.js.map +1 -0
- package/dist/default-plugins/bpmn/package.json +8 -0
- package/dist/default-plugins/cluster/package.json +1 -1
- package/dist/default-plugins/element-template/AGENTS.md +65 -0
- package/dist/default-plugins/element-template/README.md +331 -0
- package/dist/default-plugins/element-template/c8ctl-plugin.js +247 -0
- package/dist/default-plugins/element-template/c8ctl-plugin.js.map +1 -0
- package/dist/default-plugins/element-template/commands/apply.js +298 -0
- package/dist/default-plugins/element-template/commands/apply.js.map +1 -0
- package/dist/default-plugins/element-template/commands/get-properties.js +344 -0
- package/dist/default-plugins/element-template/commands/get-properties.js.map +1 -0
- package/dist/default-plugins/element-template/commands/get.js +107 -0
- package/dist/default-plugins/element-template/commands/get.js.map +1 -0
- package/dist/default-plugins/element-template/commands/info.js +189 -0
- package/dist/default-plugins/element-template/commands/info.js.map +1 -0
- package/dist/default-plugins/element-template/commands/search.js +101 -0
- package/dist/default-plugins/element-template/commands/search.js.map +1 -0
- package/dist/default-plugins/element-template/commands/sync.js +36 -0
- package/dist/default-plugins/element-template/commands/sync.js.map +1 -0
- package/dist/default-plugins/element-template/docs/design.md +145 -0
- package/dist/default-plugins/element-template/helpers.js +404 -0
- package/dist/default-plugins/element-template/helpers.js.map +1 -0
- package/dist/default-plugins/element-template/marketplace.js +396 -0
- package/dist/default-plugins/element-template/marketplace.js.map +1 -0
- package/dist/default-plugins/element-template/package.json +8 -0
- package/dist/default-plugins/element-template/template-ref.js +232 -0
- package/dist/default-plugins/element-template/template-ref.js.map +1 -0
- package/dist/default-plugins/element-template/vendor-src/bundle-entry.js +44 -0
- package/dist/default-plugins/feel/README.md +163 -0
- package/dist/default-plugins/feel/c8ctl-plugin.js +616 -0
- package/dist/default-plugins/feel/c8ctl-plugin.js.map +1 -0
- package/dist/default-plugins/feel/package.json +8 -0
- package/dist/deployments.d.ts +1 -0
- package/dist/deployments.d.ts.map +1 -1
- package/dist/deployments.js +89 -20
- package/dist/deployments.js.map +1 -1
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +156 -5
- package/dist/help.js.map +1 -1
- package/dist/ignore.d.ts +16 -1
- package/dist/ignore.d.ts.map +1 -1
- package/dist/ignore.js +55 -3
- package/dist/ignore.js.map +1 -1
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +294 -25
- package/dist/index.js.map +1 -1
- package/dist/plugin-loader.d.ts +168 -7
- package/dist/plugin-loader.d.ts.map +1 -1
- package/dist/plugin-loader.js +284 -21
- package/dist/plugin-loader.js.map +1 -1
- package/dist/runtime.d.ts +10 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +6 -0
- package/dist/runtime.js.map +1 -1
- package/dist/vendor/bpmn-element-templates.cjs +59639 -0
- package/package.json +20 -7
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for the element-template plugin: --set parsing, file/URL fetching,
|
|
3
|
+
* shared element-template schema types.
|
|
4
|
+
*/
|
|
5
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
6
|
+
import { resolve as resolvePath } from "node:path";
|
|
7
|
+
if (!globalThis.c8ctl)
|
|
8
|
+
throw new Error("c8ctl runtime not initialised");
|
|
9
|
+
const c8ctl = globalThis.c8ctl;
|
|
10
|
+
/**
|
|
11
|
+
* User-Agent header sent on every outbound HTTP call this plugin makes
|
|
12
|
+
* (marketplace index/template fetches and ad-hoc template URL loads),
|
|
13
|
+
* so traffic from c8ctl is attributable in upstream logs.
|
|
14
|
+
*/
|
|
15
|
+
export const USER_AGENT = `c8ctl-plugin-element-template/${c8ctl.version}`;
|
|
16
|
+
export function isRecord(value) {
|
|
17
|
+
return value != null && typeof value === "object" && !Array.isArray(value);
|
|
18
|
+
}
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// File / URL fetching
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
export function isUrl(input) {
|
|
23
|
+
return input.startsWith("https://") || input.startsWith("http://");
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Rewrite a GitHub blob URL to the raw content URL.
|
|
27
|
+
* https://github.com/<owner>/<repo>/blob/<ref>/<path>
|
|
28
|
+
* → https://raw.githubusercontent.com/<owner>/<repo>/<ref>/<path>
|
|
29
|
+
*/
|
|
30
|
+
export function toRawGitHubUrl(url) {
|
|
31
|
+
const match = url.match(/^https:\/\/github\.com\/([^/]+)\/([^/]+)\/blob\/(.+)$/);
|
|
32
|
+
if (match) {
|
|
33
|
+
const [, owner, repo, rest] = match;
|
|
34
|
+
return `https://raw.githubusercontent.com/${owner}/${repo}/${rest}`;
|
|
35
|
+
}
|
|
36
|
+
return url;
|
|
37
|
+
}
|
|
38
|
+
export async function readFileOrUrl(input) {
|
|
39
|
+
if (input.startsWith("http://")) {
|
|
40
|
+
throw new Error(`Insecure template URL rejected: ${input}\n` +
|
|
41
|
+
"Template URLs must use HTTPS to protect credentials and content integrity.");
|
|
42
|
+
}
|
|
43
|
+
if (isUrl(input)) {
|
|
44
|
+
const resolvedUrl = toRawGitHubUrl(input);
|
|
45
|
+
const response = await fetch(resolvedUrl, {
|
|
46
|
+
headers: { "User-Agent": USER_AGENT },
|
|
47
|
+
signal: AbortSignal.timeout(30_000),
|
|
48
|
+
});
|
|
49
|
+
if (!response.ok) {
|
|
50
|
+
throw new Error(`Failed to fetch ${resolvedUrl}: HTTP ${response.status}`);
|
|
51
|
+
}
|
|
52
|
+
return response.text();
|
|
53
|
+
}
|
|
54
|
+
const resolved = resolvePath(input);
|
|
55
|
+
if (!existsSync(resolved)) {
|
|
56
|
+
throw new Error(`File not found: ${input}`);
|
|
57
|
+
}
|
|
58
|
+
return readFileSync(resolved, "utf-8");
|
|
59
|
+
}
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
// --set flag: template property mutation
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
/** Binding type shorthand prefixes for disambiguation. */
|
|
64
|
+
export const BINDING_TYPE_SHORTHANDS = {
|
|
65
|
+
input: "zeebe:input",
|
|
66
|
+
output: "zeebe:output",
|
|
67
|
+
header: "zeebe:taskHeader",
|
|
68
|
+
property: "zeebe:property",
|
|
69
|
+
taskDefinition: "zeebe:taskDefinition",
|
|
70
|
+
};
|
|
71
|
+
/** Get the user-facing binding name for a template property. */
|
|
72
|
+
export function getBindingName(prop) {
|
|
73
|
+
const b = prop.binding;
|
|
74
|
+
if (!b)
|
|
75
|
+
return null;
|
|
76
|
+
if (b.name !== undefined)
|
|
77
|
+
return b.name;
|
|
78
|
+
if (b.key !== undefined)
|
|
79
|
+
return b.key;
|
|
80
|
+
if (b.property !== undefined)
|
|
81
|
+
return b.property;
|
|
82
|
+
// zeebe:output bindings use `source` as the user-facing identifier
|
|
83
|
+
// (the expression that produces the value). Without this fallback,
|
|
84
|
+
// output bindings are invisible to `--set` and `get-properties`.
|
|
85
|
+
if (b.source !== undefined)
|
|
86
|
+
return b.source;
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
/** Get the shorthand label for a binding type (e.g. "zeebe:taskHeader" → "header"). */
|
|
90
|
+
export function getBindingTypeShorthand(bindingType) {
|
|
91
|
+
const entry = Object.entries(BINDING_TYPE_SHORTHANDS).find(([, v]) => v === bindingType);
|
|
92
|
+
return entry ? entry[0] : bindingType;
|
|
93
|
+
}
|
|
94
|
+
/** Return only the properties that can be targeted by --set. */
|
|
95
|
+
export function getSettableProperties(properties) {
|
|
96
|
+
return properties.filter((p) => p.type !== "Hidden" && getBindingName(p) !== null);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* A property is "required" if either `optional: false` or
|
|
100
|
+
* `constraints.notEmpty: true`. The element-template schema accepts both
|
|
101
|
+
* forms; templates in the wild use them interchangeably.
|
|
102
|
+
*/
|
|
103
|
+
export function isPropertyRequired(prop) {
|
|
104
|
+
if (prop.optional === false)
|
|
105
|
+
return true;
|
|
106
|
+
if (prop.constraints?.notEmpty === true)
|
|
107
|
+
return true;
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Render an element-template `condition` object as a human-readable
|
|
112
|
+
* expression. Handles the common forms (`equals`, `oneOf`, `isActive`)
|
|
113
|
+
* and best-effort handles `allMatch`. Returns null for unrecognised
|
|
114
|
+
* shapes so the caller can fall back to a generic "(conditional)"
|
|
115
|
+
* marker.
|
|
116
|
+
*
|
|
117
|
+
* Examples:
|
|
118
|
+
* { property: "method", equals: "POST" } → 'method = "POST"'
|
|
119
|
+
* { property: "method", oneOf: ["POST","PUT"] } → 'method ∈ {"POST", "PUT"}'
|
|
120
|
+
* { property: "auth", isActive: true } → 'auth is active'
|
|
121
|
+
*/
|
|
122
|
+
export function formatCondition(condition) {
|
|
123
|
+
if (!condition)
|
|
124
|
+
return null;
|
|
125
|
+
if (Array.isArray(condition.allMatch)) {
|
|
126
|
+
const parts = condition.allMatch
|
|
127
|
+
.map((c) => formatCondition(c))
|
|
128
|
+
.filter((p) => Boolean(p));
|
|
129
|
+
return parts.length > 0 ? parts.join(" AND ") : null;
|
|
130
|
+
}
|
|
131
|
+
if (!condition.property)
|
|
132
|
+
return null;
|
|
133
|
+
if (Object.hasOwn(condition, "equals")) {
|
|
134
|
+
return `${condition.property} = ${formatConditionValue(condition.equals)}`;
|
|
135
|
+
}
|
|
136
|
+
if (Array.isArray(condition.oneOf)) {
|
|
137
|
+
return `${condition.property} ∈ {${condition.oneOf.map(formatConditionValue).join(", ")}}`;
|
|
138
|
+
}
|
|
139
|
+
if (condition.isActive === true)
|
|
140
|
+
return `${condition.property} is active`;
|
|
141
|
+
if (condition.isActive === false)
|
|
142
|
+
return `${condition.property} is inactive`;
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
function formatConditionValue(value) {
|
|
146
|
+
return JSON.stringify(value);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Build the structured property descriptor used by both text and JSON
|
|
150
|
+
* output of `get-properties`. Surfaces every field an agent or human
|
|
151
|
+
* needs to pick a value without re-reading the raw template.
|
|
152
|
+
*/
|
|
153
|
+
export function getPropertyDetail(prop, groupLabelMap) {
|
|
154
|
+
const bindingName = getBindingName(prop);
|
|
155
|
+
const bindingType = prop.binding?.type;
|
|
156
|
+
const detail = {
|
|
157
|
+
// `id` is the schema's stable identifier — optional in the spec
|
|
158
|
+
// (~37% of OOTB properties don't have one) but the only reliable
|
|
159
|
+
// discriminator for properties that share binding name + type
|
|
160
|
+
// (operation-conditional duplicates).
|
|
161
|
+
id: prop.id,
|
|
162
|
+
name: bindingName,
|
|
163
|
+
type: prop.type,
|
|
164
|
+
label: prop.label,
|
|
165
|
+
description: prop.description,
|
|
166
|
+
// Both `groupId` (raw template id, used by --group filtering) and
|
|
167
|
+
// `group` (user-facing label) are exposed so callers can filter
|
|
168
|
+
// by the stable id without giving up the readable display string.
|
|
169
|
+
groupId: prop.group,
|
|
170
|
+
group: prop.group
|
|
171
|
+
? (groupLabelMap?.get(prop.group) ?? prop.group)
|
|
172
|
+
: undefined,
|
|
173
|
+
bindingType,
|
|
174
|
+
bindingShorthand: bindingType
|
|
175
|
+
? getBindingTypeShorthand(bindingType)
|
|
176
|
+
: undefined,
|
|
177
|
+
required: isPropertyRequired(prop),
|
|
178
|
+
feel: prop.feel,
|
|
179
|
+
default: prop.value,
|
|
180
|
+
choices: prop.choices?.map((c) => ({ value: c.value, label: c.name })),
|
|
181
|
+
condition: prop.condition ?? undefined,
|
|
182
|
+
conditionText: formatCondition(prop.condition),
|
|
183
|
+
};
|
|
184
|
+
if (prop.constraints?.pattern) {
|
|
185
|
+
detail.pattern = {
|
|
186
|
+
value: prop.constraints.pattern.value,
|
|
187
|
+
message: prop.constraints.pattern.message,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
return detail;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Compile a shell-style glob to a regex. Only `*` is special — every
|
|
194
|
+
* other character matches literally. Used for `show-properties auth*`
|
|
195
|
+
* style positional matching.
|
|
196
|
+
*
|
|
197
|
+
* "auth*" → /^auth.*$/
|
|
198
|
+
* "url" → /^url$/
|
|
199
|
+
* "a.b.*c" → /^a\.b\..*c$/
|
|
200
|
+
*/
|
|
201
|
+
export function globToRegex(pattern) {
|
|
202
|
+
const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, "\\$&");
|
|
203
|
+
return new RegExp(`^${escaped.replace(/\*/g, ".*")}$`);
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Parse a --set key=value string. If key contains a `:` prefix,
|
|
207
|
+
* resolve the binding type shorthand.
|
|
208
|
+
*/
|
|
209
|
+
export function parseSetArg(arg) {
|
|
210
|
+
const eqIndex = arg.indexOf("=");
|
|
211
|
+
if (eqIndex === -1) {
|
|
212
|
+
throw new Error(`Invalid --set format: "${arg}". Expected key=value (e.g. --set method=POST)`);
|
|
213
|
+
}
|
|
214
|
+
const key = arg.slice(0, eqIndex);
|
|
215
|
+
const value = arg.slice(eqIndex + 1);
|
|
216
|
+
const colonIndex = key.indexOf(":");
|
|
217
|
+
if (colonIndex !== -1) {
|
|
218
|
+
const prefix = key.slice(0, colonIndex);
|
|
219
|
+
const name = key.slice(colonIndex + 1);
|
|
220
|
+
const bindingType = BINDING_TYPE_SHORTHANDS[prefix];
|
|
221
|
+
if (!bindingType) {
|
|
222
|
+
const valid = Object.keys(BINDING_TYPE_SHORTHANDS).join(", ");
|
|
223
|
+
throw new Error(`Unknown binding type prefix "${prefix}". Valid prefixes: ${valid}`);
|
|
224
|
+
}
|
|
225
|
+
return { bindingTypeFilter: bindingType, name, value };
|
|
226
|
+
}
|
|
227
|
+
return { bindingTypeFilter: null, name: key, value };
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Find every template property matching a binding name, optionally
|
|
231
|
+
* filtered by binding type. Returns a non-empty array — the caller
|
|
232
|
+
* applies the value to ALL matches.
|
|
233
|
+
*
|
|
234
|
+
* Multi-match handling:
|
|
235
|
+
* - Same name + SAME binding type → conditional duplicates (template
|
|
236
|
+
* authors use these to vary defaults/labels per operation while
|
|
237
|
+
* all targeting the same `<zeebe:input target="x">`). Apply the
|
|
238
|
+
* value to all; the engine's condition evaluation drops inactive
|
|
239
|
+
* ones at apply time.
|
|
240
|
+
* - Same name + DIFFERENT binding types → genuine ambiguity (e.g.
|
|
241
|
+
* `correlationKey` as both `zeebe:input` and `zeebe:taskHeader`
|
|
242
|
+
* writes to two different BPMN locations). Throw, ask the user
|
|
243
|
+
* to qualify with `<binding-type>:<name>`.
|
|
244
|
+
*/
|
|
245
|
+
export function findPropertiesByBindingName(properties, name, bindingTypeFilter) {
|
|
246
|
+
const settable = getSettableProperties(properties);
|
|
247
|
+
const matches = settable.filter((p) => {
|
|
248
|
+
if (getBindingName(p) !== name)
|
|
249
|
+
return false;
|
|
250
|
+
if (bindingTypeFilter && p.binding?.type !== bindingTypeFilter)
|
|
251
|
+
return false;
|
|
252
|
+
return true;
|
|
253
|
+
});
|
|
254
|
+
if (matches.length === 0) {
|
|
255
|
+
const available = [
|
|
256
|
+
...new Set(settable.map(getBindingName).filter((n) => Boolean(n))),
|
|
257
|
+
];
|
|
258
|
+
throw new Error(`Unknown property "${name}". Available properties for --set:\n ${available.join(", ")}`);
|
|
259
|
+
}
|
|
260
|
+
// Multi-match across binding types is genuinely ambiguous — different
|
|
261
|
+
// binding types write to different BPMN locations.
|
|
262
|
+
const types = new Set(matches.map((p) => p.binding?.type));
|
|
263
|
+
if (types.size > 1) {
|
|
264
|
+
const qualified = [...types].map((t) => `${getBindingTypeShorthand(t ?? "")}:${name}`);
|
|
265
|
+
throw new Error(`Ambiguous property "${name}" matches ${matches.length} bindings across ${types.size} binding types. ` +
|
|
266
|
+
`Use a qualified name: ${qualified.join(", ")}`);
|
|
267
|
+
}
|
|
268
|
+
return matches;
|
|
269
|
+
}
|
|
270
|
+
export function validateDropdownValue(prop, name, value) {
|
|
271
|
+
if (!prop.choices)
|
|
272
|
+
return;
|
|
273
|
+
const validValues = prop.choices.map((c) => c.value);
|
|
274
|
+
if (!validValues.includes(value)) {
|
|
275
|
+
throw new Error(`Invalid value "${value}" for "${name}". Valid choices: ${validValues.join(", ")}`);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Apply --set overrides to template properties. Mutates the template
|
|
280
|
+
* in place. When a name matches multiple conditional duplicates, the
|
|
281
|
+
* value is set on all of them — the engine's condition evaluation
|
|
282
|
+
* picks the active one at apply time. Returns the list of binding
|
|
283
|
+
* names that were set (deduped) for the post-apply unmet-condition
|
|
284
|
+
* warning check.
|
|
285
|
+
*/
|
|
286
|
+
export function applySetOverrides(properties, setArgs) {
|
|
287
|
+
// Track by object reference so qualified sets like `input:foo=...` and
|
|
288
|
+
// `header:foo=...` preserve their binding type through to warnUnmetConditions.
|
|
289
|
+
const setProperties = new Set();
|
|
290
|
+
for (const arg of setArgs) {
|
|
291
|
+
const { bindingTypeFilter, name, value } = parseSetArg(arg);
|
|
292
|
+
const matches = findPropertiesByBindingName(properties, name, bindingTypeFilter);
|
|
293
|
+
for (const prop of matches) {
|
|
294
|
+
if (prop.choices)
|
|
295
|
+
validateDropdownValue(prop, name, value);
|
|
296
|
+
prop.value = value;
|
|
297
|
+
setProperties.add(prop);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return [...setProperties];
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Check which --set bindings actually made it into the output XML.
|
|
304
|
+
* Warn for any that were dropped (unmet condition).
|
|
305
|
+
*/
|
|
306
|
+
export function warnUnmetConditions(logger, resultXml, setProperties) {
|
|
307
|
+
for (const prop of setProperties) {
|
|
308
|
+
if (!prop.binding)
|
|
309
|
+
continue;
|
|
310
|
+
const name = getBindingName(prop);
|
|
311
|
+
if (!name)
|
|
312
|
+
continue;
|
|
313
|
+
const bt = prop.binding.type;
|
|
314
|
+
let present = false;
|
|
315
|
+
if (bt === "zeebe:input")
|
|
316
|
+
present = resultXml.includes(`target="${name}"`);
|
|
317
|
+
else if (bt === "zeebe:taskHeader")
|
|
318
|
+
present = resultXml.includes(`key="${name}"`);
|
|
319
|
+
else if (bt === "zeebe:taskDefinition")
|
|
320
|
+
present = true;
|
|
321
|
+
else
|
|
322
|
+
present = resultXml.includes(name);
|
|
323
|
+
if (!present) {
|
|
324
|
+
logger.warn(`Property "${name}" was set but not applied (unmet condition). Check that controlling properties are also set.`);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
// ---------------------------------------------------------------------------
|
|
329
|
+
// Plugin arg parser — extracts --set, --in-place/-i, and positionals
|
|
330
|
+
// ---------------------------------------------------------------------------
|
|
331
|
+
/**
|
|
332
|
+
* Parse plugin args, separating flags from positionals.
|
|
333
|
+
* - `--set foo=bar` (or `--set=foo=bar`) is repeatable, collected into setArgs[]
|
|
334
|
+
* - `--in-place` / `-i` is a boolean
|
|
335
|
+
* - everything else is a positional
|
|
336
|
+
*
|
|
337
|
+
* `--help` / `-h` is handled by the host before args reach here.
|
|
338
|
+
* Unknown flags return { error: '...' } so the caller can warn and exit.
|
|
339
|
+
*/
|
|
340
|
+
export function parseArgs(args) {
|
|
341
|
+
const result = {
|
|
342
|
+
inPlace: false,
|
|
343
|
+
setArgs: [],
|
|
344
|
+
positionals: [],
|
|
345
|
+
error: null,
|
|
346
|
+
};
|
|
347
|
+
for (let i = 0; i < args.length; i++) {
|
|
348
|
+
const arg = args[i];
|
|
349
|
+
if (arg === "--") {
|
|
350
|
+
result.positionals.push(...args.slice(i + 1));
|
|
351
|
+
break;
|
|
352
|
+
}
|
|
353
|
+
if (arg === "--in-place" || arg === "-i") {
|
|
354
|
+
result.inPlace = true;
|
|
355
|
+
continue;
|
|
356
|
+
}
|
|
357
|
+
if (arg === "--set") {
|
|
358
|
+
const next = args[i + 1];
|
|
359
|
+
if (next === undefined) {
|
|
360
|
+
result.error = "--set requires a value (e.g. --set method=POST)";
|
|
361
|
+
return result;
|
|
362
|
+
}
|
|
363
|
+
result.setArgs.push(next);
|
|
364
|
+
i++;
|
|
365
|
+
continue;
|
|
366
|
+
}
|
|
367
|
+
if (arg.startsWith("--set=")) {
|
|
368
|
+
result.setArgs.push(arg.slice("--set=".length));
|
|
369
|
+
continue;
|
|
370
|
+
}
|
|
371
|
+
if (arg.startsWith("-")) {
|
|
372
|
+
result.error = `Unknown flag: ${arg}`;
|
|
373
|
+
return result;
|
|
374
|
+
}
|
|
375
|
+
result.positionals.push(arg);
|
|
376
|
+
}
|
|
377
|
+
return result;
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Parse JSON template content with explicit error wrapping. Surfaces
|
|
381
|
+
* "expected an object" instead of letting `unknown.properties` blow up
|
|
382
|
+
* downstream.
|
|
383
|
+
*/
|
|
384
|
+
function isTemplate(value) {
|
|
385
|
+
return isRecord(value) && Array.isArray(value.properties);
|
|
386
|
+
}
|
|
387
|
+
export function parseTemplateJson(content) {
|
|
388
|
+
const parsed = JSON.parse(content);
|
|
389
|
+
if (!isRecord(parsed)) {
|
|
390
|
+
throw new Error("Element template must be a JSON object");
|
|
391
|
+
}
|
|
392
|
+
if (!Array.isArray(parsed.properties)) {
|
|
393
|
+
throw new Error("Element template is missing a properties array");
|
|
394
|
+
}
|
|
395
|
+
if (!isTemplate(parsed)) {
|
|
396
|
+
throw new Error("Element template did not match the expected shape");
|
|
397
|
+
}
|
|
398
|
+
// We trust the rest of the shape because the source is either the
|
|
399
|
+
// marketplace (commit-pinned, schema-validated upstream) or a
|
|
400
|
+
// file/URL the user owns. Read-time strict validation would block
|
|
401
|
+
// 90% of the workflow without catching meaningful bugs.
|
|
402
|
+
return parsed;
|
|
403
|
+
}
|
|
404
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../default-plugins/element-template/helpers.ts"],"names":[],"mappings":"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"}
|