@martini-film/cli 0.1.0 → 0.3.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.
@@ -1,60 +1,136 @@
1
- import { mkdirSync, readFileSync, statSync, writeFileSync } from 'node:fs';
1
+ import { existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from 'node:fs';
2
2
  import { basename, extname, join } from 'node:path';
3
3
  import { CliApiError } from '../api.js';
4
- import { flagString } from '../args.js';
4
+ import { flagBoolean, flagString } from '../args.js';
5
+ import { findTool } from '../manifest.js';
5
6
  import { ArgumentError } from '../schema.js';
6
- import { waitForAssets, waitForDelivery, waitForJob, waitForRun } from '../wait.js';
7
- import { requireCanvas, requireProject, timeoutMs, wantsWait, } from './context.js';
7
+ import { assetsOutcome, handleOutcome, waitForAssets, waitForDelivery, waitForJob, waitForRun, WaitTimeoutError, } from '../wait.js';
8
+ import { contextFlag, requireCanvas, requireProject, timeoutMs, wantsWait, } from './context.js';
8
9
  const CONTENT_TYPES = {
9
10
  '.png': 'image/png',
10
11
  '.jpg': 'image/jpeg',
11
12
  '.jpeg': 'image/jpeg',
12
13
  '.webp': 'image/webp',
13
14
  '.mp4': 'video/mp4',
15
+ '.m4v': 'video/mp4',
14
16
  '.mov': 'video/quicktime',
15
17
  '.webm': 'video/webm',
16
18
  '.mp3': 'audio/mpeg',
17
19
  '.wav': 'audio/wav',
20
+ '.aac': 'audio/aac',
18
21
  '.m4a': 'audio/mp4',
22
+ '.flac': 'audio/flac',
23
+ '.ogg': 'audio/ogg',
19
24
  };
20
- export function contentTypeFor(path, override) {
21
- if (override)
22
- return override;
23
- const type = CONTENT_TYPES[extname(path).toLowerCase()];
24
- if (!type)
25
- throw new ArgumentError(`Cannot infer a content type for ${path}; pass --content-type.`);
26
- return type;
25
+ export function acceptedUploadContentTypes(manifest) {
26
+ const values = findTool('upload_assets_prepare', manifest)?.inputSchema.properties?.files?.items?.properties
27
+ ?.contentType?.enum;
28
+ return Array.isArray(values) ? values.filter((value) => typeof value === 'string') : undefined;
29
+ }
30
+ export function contentTypeFor(path, accepted, override) {
31
+ const isAccepted = (type) => !accepted || accepted.includes(type);
32
+ const refuse = (reason, next) => new ArgumentError(`Cannot upload ${path}: ${reason}.${accepted ? ` Accepted content types: ${accepted.join(', ')}.` : ''} ${next}`);
33
+ if (override) {
34
+ if (isAccepted(override))
35
+ return override;
36
+ throw refuse(`--content-type ${override} is not one upload accepts`, 'Pass one of them.');
37
+ }
38
+ const extension = extname(path).toLowerCase();
39
+ const type = CONTENT_TYPES[extension];
40
+ if (type && isAccepted(type))
41
+ return type;
42
+ if (type)
43
+ throw refuse(`${extension} files are ${type}, which upload does not accept`, 'Convert it to one of them.');
44
+ throw refuse(extension ? `the extension ${extension} does not name a content type` : 'it has no extension to infer a type from', 'Pass --content-type when the bytes are one of them.');
45
+ }
46
+ async function prepareUploads(context, args) {
47
+ for (let attempt = 0;; attempt += 1) {
48
+ try {
49
+ return await context.client.callTool('upload_assets_prepare', args);
50
+ }
51
+ catch (error) {
52
+ if (!(error instanceof CliApiError) || error.code !== 'PLACEMENT_CONFLICT' || attempt >= 3)
53
+ throw error;
54
+ await context.sleep(Math.round(250 * 2 ** attempt * (0.8 + Math.random() * 0.4)));
55
+ }
56
+ }
27
57
  }
28
- /**
29
- * `martini upload <paths…>`: prepare → PUT → complete, in one command, from
30
- * local files. Replaces the three-step dance (and the base64 fallback) that
31
- * agents got wrong most often.
32
- */
33
58
  export const upload = {
34
59
  name: 'upload',
35
- summary: 'Upload local files as canvas assets (prepare → PUT → complete in one step)',
36
- usage: 'martini upload <path…> [--canvas <id>] [--bin <id>] [--content-type <mime>] [--wait]',
60
+ summary: 'Upload local files as canvas assets, named after their basenames',
61
+ usage: 'martini upload <path…> [--canvas <id>] [--bin <id>] [--content-type <mime>] [--display-name <name> | --no-display-name] [--no-wait]',
62
+ details: 'Names files after their basenames without extensions (trimmed). Override one file with --display-name, or skip naming with --no-display-name. Runs upload_assets_prepare, the PUT to storage, and upload_assets_complete from files on disk, then waits (on by default) until the assets are processed. Result: { projectId, canvasId, uploaded: [assetId…], failed: [{ filename, code, message }], completed, named: [{ assetId, displayName }], namingError?, assets? }. When the wait times out the receipt is still printed, with the pending ids.',
63
+ positionals: [
64
+ {
65
+ name: 'path',
66
+ description: 'Local files to upload (at most 50); the content type is inferred from the extension',
67
+ variadic: true,
68
+ required: true,
69
+ },
70
+ ],
71
+ flags: [
72
+ { flag: 'no-display-name', kind: 'boolean', description: 'Skip naming uploaded assets' },
73
+ {
74
+ flag: 'display-name',
75
+ kind: 'string',
76
+ value: '<name>',
77
+ description: 'Override the basename for one file with a non-empty name',
78
+ },
79
+ {
80
+ flag: 'canvas',
81
+ kind: 'string',
82
+ value: '<id>',
83
+ description: 'Destination canvas (else MARTINI_CANVAS_ID or the .martini/config.json of a run)',
84
+ },
85
+ { flag: 'bin', kind: 'string', value: '<id>', description: 'Root-level bin on that canvas to place the assets in' },
86
+ {
87
+ flag: 'content-type',
88
+ kind: 'string',
89
+ value: '<mime>',
90
+ description: 'Content type for every file given, when the extension does not say (image/png, video/mp4, …)',
91
+ },
92
+ ],
93
+ examples: [
94
+ 'martini upload ./ref.png ./take.mp4 --canvas <canvas-id>',
95
+ 'martini upload ./ref.png --display-name "Ref · Bugi turnaround"',
96
+ 'martini upload out/*.mp4 --bin <bin-id> --no-wait',
97
+ ],
37
98
  async run(context) {
38
99
  const paths = context.positionals;
39
100
  if (paths.length === 0)
40
101
  throw new ArgumentError('Give at least one file path to upload.');
41
102
  if (paths.length > 50)
42
103
  throw new ArgumentError('At most 50 files per upload.');
104
+ const displayNameOverride = flagString(context.flags, 'display-name');
105
+ const skipNaming = flagBoolean(context.flags, 'no-display-name') ?? false;
106
+ if (skipNaming && context.flags.has('display-name'))
107
+ throw new ArgumentError('--display-name and --no-display-name are alternatives; pass one of them.');
108
+ if (context.flags.has('display-name') && displayNameOverride === undefined)
109
+ throw new ArgumentError('--display-name requires a value.');
110
+ if (displayNameOverride !== undefined && !displayNameOverride.trim())
111
+ throw new ArgumentError('--display-name must not be empty.');
112
+ if (context.flags.has('display-name') && paths.length !== 1)
113
+ throw new ArgumentError('--display-name requires exactly one file.');
43
114
  const projectId = requireProject(context);
44
115
  const canvasId = requireCanvas(context);
45
116
  const binId = flagString(context.flags, 'bin');
46
117
  const contentTypeOverride = flagString(context.flags, 'content-type');
47
- const files = paths.map(path => {
48
- const size = statSync(path).size;
49
- return { path, filename: basename(path), contentType: contentTypeFor(path, contentTypeOverride), sizeBytes: size };
50
- });
51
- const prepared = await context.client.callTool('upload_assets_prepare', {
118
+ const accepted = acceptedUploadContentTypes(context.manifest);
119
+ const contentTypes = paths.map(path => contentTypeFor(path, accepted, contentTypeOverride));
120
+ const files = paths.map((path, index) => ({
121
+ path,
122
+ filename: basename(path),
123
+ contentType: contentTypes[index],
124
+ sizeBytes: statSync(path).size,
125
+ }));
126
+ const prepared = await prepareUploads(context, {
52
127
  projectId,
53
128
  canvasId,
54
129
  ...(binId ? { binId } : {}),
55
130
  files: files.map(({ filename, contentType, sizeBytes }) => ({ filename, contentType, sizeBytes })),
56
131
  });
57
132
  const uploaded = [];
133
+ const displayNames = [];
58
134
  const failed = [];
59
135
  for (const result of prepared.results) {
60
136
  const file = files[result.index];
@@ -62,7 +138,7 @@ export const upload = {
62
138
  failed.push({
63
139
  filename: result.filename ?? file?.filename ?? String(result.index),
64
140
  code: result.code,
65
- error: result.error,
141
+ message: result.message,
66
142
  });
67
143
  continue;
68
144
  }
@@ -72,33 +148,103 @@ export const upload = {
72
148
  failed.push({
73
149
  filename: file.filename,
74
150
  code: 'NO_DIRECT_UPLOAD',
75
- error: 'Storage did not offer a direct upload URL.',
151
+ message: 'Storage did not offer a direct upload URL.',
76
152
  });
77
153
  continue;
78
154
  }
79
155
  await context.client.putBytes(result.uploadUrl, readFileSync(file.path), result.uploadHeaders);
80
156
  uploaded.push(result.assetId);
157
+ if (!skipNaming) {
158
+ const displayName = (displayNameOverride ?? basename(file.path, extname(file.path))).trim();
159
+ if (displayName)
160
+ displayNames.push({ assetId: result.assetId, displayName });
161
+ }
81
162
  }
82
163
  let completed = null;
83
164
  if (uploaded.length > 0) {
84
165
  completed = await context.client.callTool('upload_assets_complete', { projectId, assetIds: uploaded });
85
166
  }
167
+ let named = [];
168
+ let namingError;
169
+ if (displayNames.length > 0) {
170
+ try {
171
+ await context.client.callTool('set_asset_labels', { projectId, displayNames });
172
+ named = displayNames;
173
+ }
174
+ catch (error) {
175
+ namingError = error instanceof Error ? error.message : String(error);
176
+ }
177
+ }
178
+ const receipt = {
179
+ projectId,
180
+ canvasId,
181
+ uploaded,
182
+ failed,
183
+ completed,
184
+ named,
185
+ ...(namingError !== undefined ? { namingError } : {}),
186
+ };
86
187
  let assets = null;
87
188
  if (uploaded.length > 0 && wantsWait(context, true)) {
88
- assets = await waitForAssets(context.client, projectId, uploaded, {
89
- timeoutMs: timeoutMs(context),
90
- now: context.now,
91
- sleep: context.sleep,
92
- });
189
+ try {
190
+ assets = await waitForAssets(context.client, projectId, uploaded, {
191
+ timeoutMs: timeoutMs(context),
192
+ now: context.now,
193
+ sleep: context.sleep,
194
+ });
195
+ }
196
+ catch (error) {
197
+ if (error instanceof WaitTimeoutError)
198
+ error.result = { ...receipt, pending: error.pending, settled: error.settled };
199
+ throw error;
200
+ }
93
201
  }
94
- return { projectId, canvasId, uploaded, failed, completed, ...(assets ? { assets } : {}) };
202
+ return { ...receipt, ...(assets ? { assets } : {}) };
95
203
  },
96
204
  };
97
- /** `martini download <asset-id…>`: presigned URL → bytes → file. */
205
+ function safeFilename(value) {
206
+ return Array.from(value, char => '/\\<>:"|?*'.includes(char) || char.charCodeAt(0) < 32 || char.charCodeAt(0) === 127 ? '-' : char)
207
+ .join('')
208
+ .replace(/\s+/g, ' ')
209
+ .trim()
210
+ .replace(/^\.{1,2}$/, '');
211
+ }
212
+ const FILENAME_MAX_BYTES = 200;
213
+ export function uniqueFilename(stem, ext, isTaken) {
214
+ const fit = (suffix) => {
215
+ const budget = FILENAME_MAX_BYTES - Buffer.byteLength(suffix + ext);
216
+ let used = 0;
217
+ let kept = '';
218
+ for (const point of stem) {
219
+ const bytes = Buffer.byteLength(point);
220
+ if (used + bytes > budget)
221
+ break;
222
+ used += bytes;
223
+ kept += point;
224
+ }
225
+ return kept + suffix + ext;
226
+ };
227
+ let candidate = fit('');
228
+ for (let n = 2; isTaken(candidate); n += 1)
229
+ candidate = fit(` (${n})`);
230
+ return candidate;
231
+ }
98
232
  export const download = {
99
233
  name: 'download',
100
- summary: 'Download completed assets to files (one --out for a single asset, else into --dir)',
101
- usage: 'martini download <asset-id…> [--out <path> | --dir <directory>] [--wait]',
234
+ summary: 'Download completed assets by display name (or use --out for one file)',
235
+ usage: 'martini download <asset-id…> [--out <path> | --dir <directory>] [--no-wait]',
236
+ details: 'Directory downloads use sanitised display names plus the suggested extension, falling back to the suggested filename or asset id; existing files and case-insensitive name collisions get numbered suffixes. Unsafe filename characters are replaced, Windows device names are prefixed with _, and stems are limited by UTF-8 bytes to leave room for extensions and numbered suffixes. Waits for the assets to complete (on by default), fetches a presigned URL per asset (get_asset_download_url), and writes the bytes to disk. Result: { written: [{ assetId, path, bytes, contentType }] }; the JSON receipt goes to stdout even with --out, which here names the file for the bytes.',
237
+ positionals: [{ name: 'asset-id', description: 'Assets to download', variadic: true, required: true }],
238
+ flags: [
239
+ { flag: 'out', kind: 'string', value: '<path>', description: 'File to write when downloading a single asset' },
240
+ {
241
+ flag: 'dir',
242
+ kind: 'string',
243
+ value: '<directory>',
244
+ description: 'Directory for the files, named by their display names (default: the working directory)',
245
+ },
246
+ ],
247
+ examples: ['martini download <asset-id> --out ./take.mp4', 'martini download <id> <id> --dir ./out'],
102
248
  async run(context) {
103
249
  const ids = context.positionals;
104
250
  if (ids.length === 0)
@@ -108,51 +254,114 @@ export const download = {
108
254
  const dir = flagString(context.flags, 'dir') ?? '.';
109
255
  if (out && ids.length > 1)
110
256
  throw new ArgumentError('--out names one file; use --dir for several assets.');
257
+ let assets = [];
111
258
  if (wantsWait(context, true)) {
112
- await waitForAssets(context.client, projectId, ids, {
259
+ assets = await waitForAssets(context.client, projectId, ids, {
113
260
  timeoutMs: timeoutMs(context),
114
261
  now: context.now,
115
262
  sleep: context.sleep,
116
263
  });
117
264
  }
118
265
  const written = [];
266
+ const used = new Set();
119
267
  for (const assetId of ids) {
268
+ const asset = out
269
+ ? undefined
270
+ : (assets.find(asset => asset.id === assetId) ??
271
+ (await context.client.callTool('get_asset', { projectId, assetId }))
272
+ .asset);
120
273
  const link = await context.client.callTool('get_asset_download_url', {
121
274
  projectId,
122
275
  assetId,
123
276
  });
124
277
  const { bytes, contentType } = await context.client.fetchBytes(link.downloadUrl);
125
- const path = out ?? join(dir, link.suggestedFilename ?? assetId);
126
- if (!out)
278
+ let filename = '';
279
+ let stem = '';
280
+ let ext = '';
281
+ if (!out) {
282
+ const extension = extname(link.suggestedFilename ?? '') ||
283
+ extname(typeof asset?.originalFilename === 'string' ? asset.originalFilename : '');
284
+ const name = safeFilename(typeof asset?.displayName === 'string' ? asset.displayName : '');
285
+ filename = name
286
+ ? name + safeFilename(extension)
287
+ : safeFilename(link.suggestedFilename ?? '') || safeFilename(assetId);
288
+ const rawExt = extname(filename);
289
+ ext = Buffer.byteLength(rawExt) > 32 || /^[. ]*$/.test(rawExt) ? '' : rawExt.replace(/[. ]+$/, '');
290
+ stem = basename(filename, rawExt);
291
+ stem = stem.replace(/[. ]+$/, '');
292
+ if (!stem)
293
+ stem = safeFilename(assetId);
294
+ if (/^(?:CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])$/i.test(stem.split('.')[0] ?? ''))
295
+ stem = '_' + stem;
296
+ filename = uniqueFilename(stem, ext, candidate => used.has(candidate.toLowerCase()) || existsSync(join(dir, candidate)));
297
+ used.add(filename.toLowerCase());
298
+ }
299
+ let path = out ?? join(dir, filename);
300
+ if (out) {
301
+ writeFileSync(path, bytes);
302
+ }
303
+ else {
127
304
  mkdirSync(dir, { recursive: true });
128
- writeFileSync(path, bytes);
305
+ for (;;) {
306
+ try {
307
+ writeFileSync(path, bytes, { flag: 'wx' });
308
+ break;
309
+ }
310
+ catch (error) {
311
+ if (error.code !== 'EEXIST')
312
+ throw error;
313
+ used.add(filename.toLowerCase());
314
+ filename = uniqueFilename(stem, ext, candidate => used.has(candidate.toLowerCase()) || existsSync(join(dir, candidate)));
315
+ path = join(dir, filename);
316
+ }
317
+ }
318
+ }
129
319
  written.push({ assetId, path, bytes: bytes.byteLength, contentType });
130
320
  }
131
- // The bytes went to disk already; the JSON result is the receipt.
132
321
  delete context.output.out;
133
322
  return { written };
134
323
  },
135
324
  };
136
- /** `martini wait <id…>`: block until assets (default), a job, a run, or a render settles. */
137
325
  export const wait = {
138
326
  name: 'wait',
139
327
  summary: 'Block until assets, a job, a run, or a render settle (exit 4 with the pending ids on timeout)',
140
328
  usage: 'martini wait <asset-id…> | --job <id> | --run <id> | --render <id> [--timeout <seconds>]',
329
+ details: "Polls until every target reaches a terminal status (completed, failed, cancelled; a run also needs_revision). Result: { kind, status, assets? | job? | run? | delivery? } — the same object a tool's --wait adds as waited; status is the terminal status (for assets, failed when any failed). Stops at --timeout (default 50 s) with exit 4 and an error listing pending and settled ids, so the same command resumes it. Size --timeout to what your shell step allows: a video generation takes minutes.",
330
+ positionals: [{ name: 'asset-id', description: 'Assets to wait for (needs a project)', variadic: true }],
331
+ flags: [
332
+ { flag: 'job', kind: 'string', value: '<id>', description: 'A generation job (get_jobs)' },
333
+ {
334
+ flag: 'run',
335
+ kind: 'string',
336
+ value: '<id>',
337
+ description: 'A workflow run (get_run long-polls on the server); defaults to MARTINI_RUN_ID when nothing else is named',
338
+ },
339
+ {
340
+ flag: 'render',
341
+ kind: 'string',
342
+ value: '<id>',
343
+ description: 'A timeline render or export (get_timeline_delivery_status)',
344
+ },
345
+ ],
346
+ examples: [
347
+ 'martini wait <asset-id> <asset-id> --timeout 300',
348
+ 'martini wait --run <run-id> --timeout 600',
349
+ 'martini wait --render <render-id>',
350
+ ],
141
351
  async run(context) {
142
352
  const options = { timeoutMs: timeoutMs(context), now: context.now, sleep: context.sleep };
143
353
  const job = flagString(context.flags, 'job');
144
- const run = flagString(context.flags, 'run') ?? (context.positionals.length === 0 ? context.config.runId : undefined);
354
+ const run = contextFlag(context.flags, 'run') ?? (context.positionals.length === 0 ? context.config.runId : undefined);
145
355
  const render = flagString(context.flags, 'render');
146
356
  if (job)
147
- return waitForJob(context.client, job, options);
357
+ return handleOutcome('job', await waitForJob(context.client, job, options));
148
358
  if (render)
149
- return waitForDelivery(context.client, requireProject(context), { renderId: render }, options);
359
+ return handleOutcome('render', await waitForDelivery(context.client, { renderId: render }, options));
150
360
  if (context.positionals.length > 0) {
151
- const assets = await waitForAssets(context.client, requireProject(context), context.positionals, options);
152
- return { assets };
361
+ return assetsOutcome(await waitForAssets(context.client, requireProject(context), context.positionals, options));
153
362
  }
154
363
  if (run)
155
- return waitForRun(context.client, run, options);
364
+ return handleOutcome('run', await waitForRun(context.client, run, options));
156
365
  throw new ArgumentError('Say what to wait for: asset ids, --job <id>, --run <id>, or --render <id>.');
157
366
  },
158
367
  };
@@ -1 +1 @@
1
- {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/commands/assets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/commands/assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACtF,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAiB,MAAM,gBAAgB,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EACL,aAAa,EACb,aAAa,EACb,aAAa,EACb,eAAe,EACf,UAAU,EACV,UAAU,EACV,gBAAgB,GAEjB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,WAAW,EACX,aAAa,EACb,cAAc,EACd,SAAS,EACT,SAAS,GAGV,MAAM,cAAc,CAAA;AAMrB,MAAM,aAAa,GAA2B;IAC5C,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,iBAAiB;IACzB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;CACpB,CAAA;AAMD,MAAM,UAAU,0BAA0B,CAAC,QAAkB;IAC3D,MAAM,MAAM,GAAG,QAAQ,CAAC,uBAAuB,EAAE,QAAQ,CAAC,EAAE,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU;QAC1G,EAAE,WAAW,EAAE,IAAI,CAAA;IACrB,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AACjH,CAAC;AAGD,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,QAAuC,EAAE,QAAiB;IACrG,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IACzE,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,IAAY,EAAE,EAAE,CAC9C,IAAI,aAAa,CACf,iBAAiB,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,4BAA4B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CACjH,CAAA;IACH,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,QAAQ,CAAA;QACzC,MAAM,MAAM,CAAC,kBAAkB,QAAQ,4BAA4B,EAAE,mBAAmB,CAAC,CAAA;IAC3F,CAAC;IACD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;IAC7C,MAAM,IAAI,GAAG,aAAa,CAAC,SAAS,CAAC,CAAA;IACrC,IAAI,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IACzC,IAAI,IAAI;QAAE,MAAM,MAAM,CAAC,GAAG,SAAS,cAAc,IAAI,gCAAgC,EAAE,4BAA4B,CAAC,CAAA;IACpH,MAAM,MAAM,CACV,SAAS,CAAC,CAAC,CAAC,iBAAiB,SAAS,+BAA+B,CAAC,CAAC,CAAC,0CAA0C,EAClH,qDAAqD,CACtD,CAAA;AACH,CAAC;AAiBD,KAAK,UAAU,cAAc,CAAC,OAAuB,EAAE,IAA6B;IAClF,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB,uBAAuB,EAAE,IAAI,CAAC,CAAA;QACpF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAGf,IAAI,CAAC,CAAC,KAAK,YAAY,WAAW,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,oBAAoB,IAAI,OAAO,IAAI,CAAC;gBAAE,MAAM,KAAK,CAAA;YACvG,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;QACnF,CAAC;IACH,CAAC;AACH,CAAC;AAMD,MAAM,CAAC,MAAM,MAAM,GAAoB;IACrC,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,kEAAkE;IAC3E,KAAK,EACH,qIAAqI;IACvI,OAAO,EACL,whBAAwhB;IAC1hB,WAAW,EAAE;QACX;YACE,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,qFAAqF;YAClG,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,IAAI;SACf;KACF;IACD,KAAK,EAAE;QACL,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,6BAA6B,EAAE;QACxF;YACE,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,QAAQ;YACf,WAAW,EAAE,0DAA0D;SACxE;QACD;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,MAAM;YACb,WAAW,EAAE,kFAAkF;SAChG;QACD,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,sDAAsD,EAAE;QACnH;YACE,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,QAAQ;YACf,WAAW,EAAE,8FAA8F;SAC5G;KACF;IACD,QAAQ,EAAE;QACR,0DAA0D;QAC1D,iEAAiE;QACjE,mDAAmD;KACpD;IACD,KAAK,CAAC,GAAG,CAAC,OAAuB;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAA;QACjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,aAAa,CAAC,wCAAwC,CAAC,CAAA;QACzF,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;YAAE,MAAM,IAAI,aAAa,CAAC,8BAA8B,CAAC,CAAA;QAC9E,MAAM,mBAAmB,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;QACrE,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,iBAAiB,CAAC,IAAI,KAAK,CAAA;QACzE,IAAI,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC;YACjD,MAAM,IAAI,aAAa,CAAC,0EAA0E,CAAC,CAAA;QACrG,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,mBAAmB,KAAK,SAAS;YACxE,MAAM,IAAI,aAAa,CAAC,kCAAkC,CAAC,CAAA;QAC7D,IAAI,mBAAmB,KAAK,SAAS,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE;YAClE,MAAM,IAAI,aAAa,CAAC,mCAAmC,CAAC,CAAA;QAC9D,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YACzD,MAAM,IAAI,aAAa,CAAC,2CAA2C,CAAC,CAAA;QACtE,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;QACzC,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;QACvC,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAC9C,MAAM,mBAAmB,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;QAGrE,MAAM,QAAQ,GAAG,0BAA0B,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC7D,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAA;QAC3F,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACxC,IAAI;YACJ,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC;YACxB,WAAW,EAAE,YAAY,CAAC,KAAK,CAAE;YACjC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI;SAC/B,CAAC,CAAC,CAAA;QACH,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE;YAC7C,SAAS;YACT,QAAQ;YACR,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;SACnG,CAAC,CAAA;QAEF,MAAM,QAAQ,GAAa,EAAE,CAAA;QAC7B,MAAM,YAAY,GAAoD,EAAE,CAAA;QACxE,MAAM,MAAM,GAAyF,EAAE,CAAA;QACvG,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAChC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBAEf,MAAM,CAAC,IAAI,CAAC;oBACV,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI,EAAE,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;oBACnE,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;iBACxB,CAAC,CAAA;gBACF,SAAQ;YACV,CAAC;YACD,IAAI,CAAC,IAAI;gBAAE,SAAQ;YACnB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC;oBACV,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,IAAI,EAAE,kBAAkB;oBACxB,OAAO,EAAE,4CAA4C;iBACtD,CAAC,CAAA;gBACF,SAAQ;YACV,CAAC;YACD,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,aAAa,CAAC,CAAA;YAC9F,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YAC7B,IAAI,CAAC,UAAU,EAAE,CAAC;gBAEhB,MAAM,WAAW,GAAG,CAAC,mBAAmB,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;gBAC3F,IAAI,WAAW;oBAAE,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,CAAA;YAC9E,CAAC;QACH,CAAC;QAED,IAAI,SAAS,GAAY,IAAI,CAAA;QAC7B,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,SAAS,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAA;QACxG,CAAC;QACD,IAAI,KAAK,GAAwB,EAAE,CAAA;QACnC,IAAI,WAA+B,CAAA;QACnC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAA;gBAC9E,KAAK,GAAG,YAAY,CAAA;YACtB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,WAAW,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACtE,CAAC;QACH,CAAC;QACD,MAAM,OAAO,GAAG;YACd,SAAS;YACT,QAAQ;YACR,QAAQ;YACR,MAAM;YACN,SAAS;YACT,KAAK;YACL,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtD,CAAA;QACD,IAAI,MAAM,GAAY,IAAI,CAAA;QAC1B,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE;oBAChE,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC;oBAC7B,GAAG,EAAE,OAAO,CAAC,GAAG;oBAChB,KAAK,EAAE,OAAO,CAAC,KAAK;iBACrB,CAAC,CAAA;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAEf,IAAI,KAAK,YAAY,gBAAgB;oBACnC,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAA;gBAC/E,MAAM,KAAK,CAAA;YACb,CAAC;QACH,CAAC;QACD,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;IACtD,CAAC;CACF,CAAA;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAC9B,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAClG;SACE,IAAI,CAAC,EAAE,CAAC;SACR,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE;SACN,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;AAC7B,CAAC;AAGD,MAAM,kBAAkB,GAAG,GAAG,CAAA;AAM9B,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,GAAW,EAAE,OAAuC;IAC/F,MAAM,GAAG,GAAG,CAAC,MAAc,EAAE,EAAE;QAE7B,MAAM,MAAM,GAAG,kBAAkB,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,CAAA;QACnE,IAAI,IAAI,GAAG,CAAC,CAAA;QACZ,IAAI,IAAI,GAAG,EAAE,CAAA;QACb,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;YACtC,IAAI,IAAI,GAAG,KAAK,GAAG,MAAM;gBAAE,MAAK;YAChC,IAAI,IAAI,KAAK,CAAA;YACb,IAAI,IAAI,KAAK,CAAA;QACf,CAAC;QACD,OAAO,IAAI,GAAG,MAAM,GAAG,GAAG,CAAA;IAC5B,CAAC,CAAA;IACD,IAAI,SAAS,GAAG,GAAG,CAAC,EAAE,CAAC,CAAA;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC;QAAE,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACtE,OAAO,SAAS,CAAA;AAClB,CAAC;AAGD,MAAM,CAAC,MAAM,QAAQ,GAAoB;IACvC,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,uEAAuE;IAChF,KAAK,EAAE,6EAA6E;IACpF,OAAO,EACL,8pBAA8pB;IAChqB,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,oBAAoB,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACtG,KAAK,EAAE;QACL,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,+CAA+C,EAAE;QAC9G;YACE,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,aAAa;YACpB,WAAW,EAAE,wFAAwF;SACtG;KACF;IACD,QAAQ,EAAE,CAAC,8CAA8C,EAAE,wCAAwC,CAAC;IACpG,KAAK,CAAC,GAAG,CAAC,OAAuB;QAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,CAAA;QAC/B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,aAAa,CAAC,yCAAyC,CAAC,CAAA;QACxF,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;QACzC,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAC5C,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,GAAG,CAAA;QACnD,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,aAAa,CAAC,qDAAqD,CAAC,CAAA;QACzG,IAAI,MAAM,GAAoB,EAAE,CAAA;QAChC,IAAI,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE;gBAC3D,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC;gBAC7B,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC,CAAA;QACJ,CAAC;QACD,MAAM,OAAO,GAAiF,EAAE,CAAA;QAChG,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;QAC9B,KAAK,MAAM,OAAO,IAAI,GAAG,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,GAAG;gBACf,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC;oBAC3C,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAsC,WAAW,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;yBACtG,KAAK,CAAC,CAAA;YACb,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CACxC,wBAAwB,EACxB;gBACE,SAAS;gBACT,OAAO;aACR,CACF,CAAA;YACD,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YAChF,IAAI,QAAQ,GAAG,EAAE,CAAA;YACjB,IAAI,IAAI,GAAG,EAAE,CAAA;YACb,IAAI,GAAG,GAAG,EAAE,CAAA;YACZ,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,SAAS,GACb,OAAO,CAAC,IAAI,CAAC,iBAAiB,IAAI,EAAE,CAAC;oBACrC,OAAO,CAAC,OAAO,KAAK,EAAE,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;gBACpF,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,KAAK,EAAE,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;gBAC1F,QAAQ,GAAG,IAAI;oBACb,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC,SAAS,CAAC;oBAChC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,IAAI,EAAE,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,CAAA;gBAEvE,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;gBAChC,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;gBAClG,IAAI,GAAG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;gBAEjC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;gBACjC,IAAI,CAAC,IAAI;oBAAE,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;gBAEvC,IAAI,0CAA0C,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAAE,IAAI,GAAG,GAAG,GAAG,IAAI,CAAA;gBAChG,QAAQ,GAAG,cAAc,CACvB,IAAI,EACJ,GAAG,EACH,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CACnF,CAAA;gBACD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAA;YAClC,CAAC;YACD,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;YACrC,IAAI,GAAG,EAAE,CAAC;gBACR,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YAC5B,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;gBAGnC,SAAS,CAAC;oBACR,IAAI,CAAC;wBACH,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;wBAC1C,MAAK;oBACP,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;4BAAE,MAAM,KAAK,CAAA;wBACnE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAA;wBAEhC,QAAQ,GAAG,cAAc,CACvB,IAAI,EACJ,GAAG,EACH,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CACnF,CAAA;wBACD,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;oBAC5B,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,CAAA;QACvE,CAAC;QAED,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAA;QACzB,OAAO,EAAE,OAAO,EAAE,CAAA;IACpB,CAAC;CACF,CAAA;AAGD,MAAM,CAAC,MAAM,IAAI,GAAoB;IACnC,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,+FAA+F;IACxG,KAAK,EAAE,0FAA0F;IACjG,OAAO,EACL,8eAA8e;IAChf,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,sCAAsC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACxG,KAAK,EAAE;QACL,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,6BAA6B,EAAE;QAC1F;YACE,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,MAAM;YACb,WAAW,EACT,0GAA0G;SAC7G;QACD;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,MAAM;YACb,WAAW,EAAE,4DAA4D;SAC1E;KACF;IACD,QAAQ,EAAE;QACR,kDAAkD;QAClD,2CAA2C;QAC3C,mCAAmC;KACpC;IACD,KAAK,CAAC,GAAG,CAAC,OAAuB;QAC/B,MAAM,OAAO,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAA;QACzF,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAC5C,MAAM,GAAG,GACP,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QAC5G,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QAClD,IAAI,GAAG;YAAE,OAAO,aAAa,CAAC,KAAK,EAAE,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAA;QACpF,IAAI,MAAM;YAAE,OAAO,aAAa,CAAC,QAAQ,EAAE,MAAM,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC,CAAA;QAChH,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,OAAO,aAAa,CAAC,MAAM,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAA;QAClH,CAAC;QACD,IAAI,GAAG;YAAE,OAAO,aAAa,CAAC,KAAK,EAAE,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAA;QACpF,MAAM,IAAI,aAAa,CAAC,4EAA4E,CAAC,CAAA;IACvG,CAAC;CACF,CAAA;AAED,MAAM,UAAU,cAAc,CAAC,KAAc,EAAE,IAAY;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK;QACrC,MAAM,IAAI,WAAW,CAAC,MAAM,IAAI,6BAA6B,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;AAC9G,CAAC"}
@@ -1,23 +1,50 @@
1
1
  import { flagBoolean, flagList, flagString } from '../args.js';
2
2
  import { ArgumentError } from '../schema.js';
3
3
  import { DEFAULT_WAIT_TIMEOUT_MS } from '../wait.js';
4
+ export function compoundBooleanFlags(command) {
5
+ return (command.flags ?? []).filter(flag => flag.kind === 'boolean').map(flag => flag.flag);
6
+ }
7
+ export function assertKnownFlags(command, flags, global) {
8
+ const known = new Set((command.flags ?? []).map(flag => flag.flag));
9
+ for (const flag of flags.keys()) {
10
+ if (known.has(flag) || global.has(flag))
11
+ continue;
12
+ const own = [...known].map(name => `--${name}`).join(', ');
13
+ throw new ArgumentError(`Unknown flag --${flag} for martini ${command.name}. Flags: ${own || '(none)'}; global flags (--project, --canvas, --fields, --out, --timeout, …) also apply. Run martini ${command.name} --help.`);
14
+ }
15
+ }
16
+ export const CONTEXT_FLAGS = ['project', 'canvas', 'run'];
17
+ export const CONTEXT_FLAG_ALIASES = new Set(CONTEXT_FLAGS.map(name => `${name}-id`));
18
+ export function contextFlag(flags, name) {
19
+ return flagString(flags, name) ?? flagString(flags, `${name}-id`);
20
+ }
4
21
  export function requireProject(context) {
5
- const projectId = flagString(context.flags, 'project') ?? context.config.projectId;
22
+ const projectId = contextFlag(context.flags, 'project') ?? context.config.projectId;
6
23
  if (!projectId) {
7
- throw new ArgumentError('A project is needed: pass --project <id>, or set MARTINI_PROJECT_ID (a run sandbox has it in .martini/config.json).');
24
+ throw new ArgumentError('A project is needed: pass --project <id>, or set it once with MARTINI_PROJECT_ID (inside a Martini workflow run it is already set in .martini/config.json).');
8
25
  }
9
26
  return projectId;
10
27
  }
11
28
  export function requireCanvas(context) {
12
- const canvasId = flagString(context.flags, 'canvas') ?? context.config.canvasId;
13
- if (!canvasId)
14
- throw new ArgumentError('A canvas is needed: pass --canvas <id>, or set MARTINI_CANVAS_ID.');
29
+ const canvasId = contextFlag(context.flags, 'canvas') ?? context.config.canvasId;
30
+ if (!canvasId) {
31
+ throw new ArgumentError('A canvas is needed: pass --canvas <id>, or set it once with MARTINI_CANVAS_ID.');
32
+ }
15
33
  return canvasId;
16
34
  }
35
+ export const WAIT_TIMEOUT_ENV = 'MARTINI_WAIT_TIMEOUT_SECONDS';
17
36
  export function timeoutMs(context) {
18
37
  const raw = flagString(context.flags, 'timeout');
19
- if (raw === undefined)
20
- return DEFAULT_WAIT_TIMEOUT_MS;
38
+ if (raw === undefined) {
39
+ const configured = context.env[WAIT_TIMEOUT_ENV];
40
+ if (configured === undefined || configured === '')
41
+ return DEFAULT_WAIT_TIMEOUT_MS;
42
+ const fromEnv = Number(configured);
43
+ if (!Number.isFinite(fromEnv) || fromEnv <= 0) {
44
+ throw new ArgumentError(`${WAIT_TIMEOUT_ENV} must be a positive number of seconds (it is "${configured}"); a Martini workflow run sets it per step — pass --timeout to override.`);
45
+ }
46
+ return Math.round(fromEnv * 1000);
47
+ }
21
48
  const seconds = Number(raw);
22
49
  if (!Number.isFinite(seconds) || seconds <= 0)
23
50
  throw new ArgumentError('--timeout must be a positive number of seconds.');
@@ -27,9 +54,16 @@ export function wantsWait(context, defaultOn) {
27
54
  return flagBoolean(context.flags, 'wait') ?? defaultOn;
28
55
  }
29
56
  export function selectedFields(context) {
30
- return flagList(context.flags, 'fields')
57
+ const fields = flagList(context.flags, 'fields')
31
58
  .flatMap(value => value.split(','))
32
59
  .map(value => value.trim())
33
60
  .filter(Boolean);
61
+ if (fields.length > 64 || fields.some(path => !/^([A-Za-z0-9_-]+|\*)(\.([A-Za-z0-9_-]+|\*))*$/.test(path))) {
62
+ throw new ArgumentError('--fields accepts at most 64 comma-separated dotted paths; a segment may be * to step into every value.');
63
+ }
64
+ return fields;
65
+ }
66
+ export function needsLocalProjection(fields) {
67
+ return fields.some(path => path.split('.').includes('*'));
34
68
  }
35
69
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAI9D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAwBpD,MAAM,UAAU,cAAc,CAAC,OAAuB;IACpD,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,SAAS,CAAA;IAClF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,aAAa,CACrB,qHAAqH,CACtH,CAAA;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAuB;IACnD,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAA;IAC/E,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,aAAa,CAAC,mEAAmE,CAAC,CAAA;IAC3G,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAuB;IAC/C,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;IAChD,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,uBAAuB,CAAA;IACrD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;IAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC;QAC3C,MAAM,IAAI,aAAa,CAAC,iDAAiD,CAAC,CAAA;IAC5E,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;AACnC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAuB,EAAE,SAAkB;IACnE,OAAO,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,SAAS,CAAA;AACxD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAuB;IACpD,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC;SACrC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SAClC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC,CAAA;AACpB,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"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"}