@elaraai/e3-cloud-cli 1.0.94 → 1.1.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 (38) hide show
  1. package/README.md +34 -16
  2. package/dist/src/cli.js +15 -3
  3. package/dist/src/cli.js.map +1 -1
  4. package/dist/src/commands/app.d.ts.map +1 -1
  5. package/dist/src/commands/app.js +3 -7
  6. package/dist/src/commands/app.js.map +1 -1
  7. package/dist/src/commands/feedback.d.ts.map +1 -1
  8. package/dist/src/commands/feedback.js +4 -8
  9. package/dist/src/commands/feedback.js.map +1 -1
  10. package/dist/src/commands/files.d.ts +23 -6
  11. package/dist/src/commands/files.d.ts.map +1 -1
  12. package/dist/src/commands/files.js +170 -39
  13. package/dist/src/commands/files.js.map +1 -1
  14. package/dist/src/commands/records.d.ts.map +1 -1
  15. package/dist/src/commands/records.js +15 -6
  16. package/dist/src/commands/records.js.map +1 -1
  17. package/dist/src/commands/release.d.ts.map +1 -1
  18. package/dist/src/commands/release.js +26 -23
  19. package/dist/src/commands/release.js.map +1 -1
  20. package/dist/src/commands/schedule.js +2 -2
  21. package/dist/src/commands/schedule.js.map +1 -1
  22. package/dist/src/commands/secrets.js +2 -2
  23. package/dist/src/commands/secrets.js.map +1 -1
  24. package/dist/src/commands/user.js +7 -7
  25. package/dist/src/commands/user.js.map +1 -1
  26. package/dist/src/files-local.d.ts +336 -30
  27. package/dist/src/files-local.d.ts.map +1 -1
  28. package/dist/src/files-local.js +187 -52
  29. package/dist/src/files-local.js.map +1 -1
  30. package/dist/src/files-push.d.ts +100 -0
  31. package/dist/src/files-push.d.ts.map +1 -0
  32. package/dist/src/files-push.js +387 -0
  33. package/dist/src/files-push.js.map +1 -0
  34. package/dist/src/utils.d.ts +5 -0
  35. package/dist/src/utils.d.ts.map +1 -1
  36. package/dist/src/utils.js +6 -0
  37. package/dist/src/utils.js.map +1 -1
  38. package/package.json +9 -9
@@ -0,0 +1,387 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Licensed under BSL 1.1. See LICENSE for details.
4
+ */
5
+ /**
6
+ * `e3-cloud files push`: files from disk into a source, and taken in.
7
+ *
8
+ * Each file offered is read for its size, its SHA-256 (streamed) and the
9
+ * root type its beast2 header declares (through ranged reads of its head; a
10
+ * file that is no beast2 offers no type); a directory is walked, its
11
+ * `.`-prefixed entries skipped, each file offered at its path relative to
12
+ * the directory, with the directory's name. The plan comes from the
13
+ * platform (`POST …/files/push`) for a repository URL, or from the same
14
+ * engine over the local repository's declarations, bindings and ledgers for
15
+ * a path; it says, per file, its target and key and how to put it. A `put`
16
+ * is uploaded: `single` by one PUT with the plan's headers; `multipart` part
17
+ * by part (four in flight, each read from the file by range), then
18
+ * completed through the API; `external` through the bucket's own client
19
+ * with the developer's own credentials (`--profile`, the binding's, or the
20
+ * ambient chain), in parts past 64 MiB. Then one sync of the targets put, waited
21
+ * on, and each file's row completed from the sync's report. Nothing is put
22
+ * for a dry run.
23
+ */
24
+ import { createHash } from 'node:crypto';
25
+ import { createReadStream, openSync, closeSync, readSync, statSync, readdirSync, fstatSync } from 'node:fs';
26
+ import { basename, join, relative, resolve, sep } from 'node:path';
27
+ import { Readable } from 'node:stream';
28
+ import { AbortMultipartUploadCommand, CompleteMultipartUploadCommand, CreateMultipartUploadCommand, PutObjectCommand, S3Client, UploadPartCommand, } from '@aws-sdk/client-s3';
29
+ import { none, some } from '@elaraai/east';
30
+ import { FILES_PUSH_PART_BYTES, filesPushRefusalText, filesTargetText, filesTypeWords, sameFilesTarget, } from '@elaraai/e3-cloud-types';
31
+ import { parseBucketUrl } from '@elaraai/e3-cloud-files/check';
32
+ import { beast2HeaderTypeOf } from '@elaraai/e3-cloud-files/sync';
33
+ /** Parts of a multipart upload in flight at once. */
34
+ const PARTS_IN_FLIGHT = 4;
35
+ /**
36
+ * The root type a file's beast2 header declares, through reads of its head
37
+ * (the sync's own probe: 64 KiB, then wider only for a wide type section);
38
+ * null for a file that is no beast2.
39
+ *
40
+ * @param path - The file
41
+ * @param size - Its size
42
+ * @returns Its root type, or null
43
+ */
44
+ export async function fileBeast2Type(path, size) {
45
+ if (size === 0)
46
+ return null;
47
+ const fd = openSync(path, 'r');
48
+ try {
49
+ const probed = await beast2HeaderTypeOf(size, (want) => {
50
+ const buffer = new Uint8Array(want);
51
+ let done = 0;
52
+ while (done < want) {
53
+ const read = readSync(fd, buffer, done, want - done, done);
54
+ if (read === 0)
55
+ break;
56
+ done += read;
57
+ }
58
+ return Promise.resolve(buffer.subarray(0, done));
59
+ });
60
+ return 'type' in probed ? probed.type : null;
61
+ }
62
+ finally {
63
+ closeSync(fd);
64
+ }
65
+ }
66
+ /** A file's SHA-256, streamed. */
67
+ async function sha256Of(path) {
68
+ const hash = createHash('sha256');
69
+ for await (const chunk of createReadStream(path))
70
+ hash.update(chunk);
71
+ return hash.digest('hex');
72
+ }
73
+ /** The files under a directory, walked, `.`-prefixed entries skipped, each path relative to it. */
74
+ function walk(dir) {
75
+ const files = [];
76
+ const visit = (at) => {
77
+ for (const entry of readdirSync(at, { withFileTypes: true }).sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0))) {
78
+ if (entry.name.startsWith('.'))
79
+ continue;
80
+ const full = join(at, entry.name);
81
+ if (entry.isDirectory())
82
+ visit(full);
83
+ else if (entry.isFile())
84
+ files.push(relative(dir, full).split(sep).join('/'));
85
+ }
86
+ };
87
+ visit(dir);
88
+ return files;
89
+ }
90
+ /**
91
+ * The files a push offers, from the paths given: each file by its own name,
92
+ * each directory's files by their relative paths, with the directory's name.
93
+ *
94
+ * @param paths - Files and directories
95
+ * @returns Each file, with what the plan is told of it
96
+ * @throws {Error} When a path is neither a file nor a directory
97
+ */
98
+ export async function offeredFiles(paths) {
99
+ const offered = [];
100
+ for (const given of paths) {
101
+ const path = resolve(given);
102
+ const stat = statSync(path, { throwIfNoEntry: false });
103
+ if (stat === undefined)
104
+ throw new Error(`${given}: no such file or directory`);
105
+ const one = async (file, name, directory) => {
106
+ const size = statSync(file).size;
107
+ const type = await fileBeast2Type(file, size);
108
+ offered.push({ path: file, offered: { name, directory: directory === null ? none : some(directory), size: BigInt(size), sha256: await sha256Of(file), type: type === null ? none : some(type) } });
109
+ };
110
+ if (stat.isDirectory()) {
111
+ for (const name of walk(path))
112
+ await one(join(path, name), name, basename(path));
113
+ }
114
+ else if (stat.isFile()) {
115
+ await one(path, basename(path), null);
116
+ }
117
+ else {
118
+ throw new Error(`${given}: neither a file nor a directory`);
119
+ }
120
+ }
121
+ return offered;
122
+ }
123
+ /** A file's bytes as a web stream, for a PUT. */
124
+ function body(path, start, end) {
125
+ return Readable.toWeb(createReadStream(path, start === undefined ? {} : { start, end }));
126
+ }
127
+ /** One PUT of a file to a presigned URL, with the plan's headers. */
128
+ async function putSingle(path, size, url, headers) {
129
+ const response = await fetch(url, {
130
+ method: 'PUT',
131
+ headers: { ...Object.fromEntries(headers), 'content-length': String(size) },
132
+ body: body(path),
133
+ // A streamed request body
134
+ duplex: 'half',
135
+ });
136
+ if (!response.ok)
137
+ throw new Error(`the upload answered HTTP ${response.status}: ${(await response.text()).slice(0, 200)}`);
138
+ }
139
+ /** A multipart upload part by part, each read from the file by range; answers each part's ETag. */
140
+ async function putParts(path, size, partBytes, parts) {
141
+ const etags = [];
142
+ let next = 0;
143
+ const worker = async () => {
144
+ for (;;) {
145
+ const i = next++;
146
+ if (i >= parts.length)
147
+ return;
148
+ const part = parts[i];
149
+ const start = i * partBytes;
150
+ const end = Math.min(size, start + partBytes) - 1;
151
+ const response = await fetch(part.url, {
152
+ method: 'PUT',
153
+ headers: { 'content-length': String(end - start + 1) },
154
+ body: body(path, start, end),
155
+ duplex: 'half',
156
+ });
157
+ if (!response.ok)
158
+ throw new Error(`part ${part.number} answered HTTP ${response.status}: ${(await response.text()).slice(0, 200)}`);
159
+ const etag = response.headers.get('etag');
160
+ if (etag === null)
161
+ throw new Error(`part ${part.number} answered no ETag`);
162
+ etags.push({ number: part.number, etag: etag.replace(/^"|"$/g, '') });
163
+ }
164
+ };
165
+ await Promise.all(Array.from({ length: Math.min(PARTS_IN_FLIGHT, parts.length) }, worker));
166
+ return etags.sort((a, b) => (a.number < b.number ? -1 : a.number > b.number ? 1 : 0));
167
+ }
168
+ /**
169
+ * A client of the developer's own credentials for a bucket: the profile
170
+ * given, the binding's, or the ambient chain.
171
+ *
172
+ * @param binding - The binding
173
+ * @param profile - The profile given, over the binding's
174
+ * @returns The client
175
+ */
176
+ export function ownClient(binding, profile) {
177
+ const region = binding.region.type === 'some' ? binding.region.value : (process.env.AWS_REGION ?? process.env.AWS_DEFAULT_REGION);
178
+ const chosen = profile ?? (binding.profile.type === 'some' ? binding.profile.value : undefined);
179
+ return new S3Client({ ...(chosen !== undefined && { profile: chosen }), ...(region !== undefined && { region }), followRegionRedirects: true });
180
+ }
181
+ /**
182
+ * A put with the developer's own credentials: one PUT up to the part size,
183
+ * else a multipart upload in parts, the file read by range.
184
+ *
185
+ * @param client - The client
186
+ * @param bucket - The bucket
187
+ * @param key - The object's key
188
+ * @param path - The file
189
+ * @param size - Its size
190
+ */
191
+ export async function putExternal(client, bucket, key, path, size) {
192
+ if (size <= FILES_PUSH_PART_BYTES) {
193
+ const bytes = new Uint8Array(size);
194
+ const fd = openSync(path, 'r');
195
+ try {
196
+ let done = 0;
197
+ while (done < size) {
198
+ const read = readSync(fd, bytes, done, size - done, done);
199
+ if (read === 0)
200
+ break;
201
+ done += read;
202
+ }
203
+ if (fstatSync(fd).size !== size)
204
+ throw new Error(`${path} changed while it was read`);
205
+ }
206
+ finally {
207
+ closeSync(fd);
208
+ }
209
+ await client.send(new PutObjectCommand({ Bucket: bucket, Key: key, Body: bytes, ContentLength: size, ChecksumAlgorithm: 'SHA256' }));
210
+ return;
211
+ }
212
+ const created = await client.send(new CreateMultipartUploadCommand({ Bucket: bucket, Key: key, ChecksumAlgorithm: 'SHA256' }));
213
+ const uploadId = created.UploadId;
214
+ try {
215
+ const count = Math.ceil(size / FILES_PUSH_PART_BYTES);
216
+ const sent = new Map();
217
+ let next = 0;
218
+ const worker = async () => {
219
+ for (;;) {
220
+ const i = next++;
221
+ if (i >= count)
222
+ return;
223
+ const start = i * FILES_PUSH_PART_BYTES;
224
+ const end = Math.min(size, start + FILES_PUSH_PART_BYTES) - 1;
225
+ const chunks = [];
226
+ for await (const chunk of createReadStream(path, { start, end }))
227
+ chunks.push(chunk);
228
+ const part = Buffer.concat(chunks);
229
+ // An upload created with a checksum algorithm completes with each part's checksum
230
+ const checksum = createHash('sha256').update(part).digest('base64');
231
+ const uploaded = await client.send(new UploadPartCommand({ Bucket: bucket, Key: key, UploadId: uploadId, PartNumber: i + 1, Body: part, ContentLength: part.length, ChecksumSHA256: checksum }));
232
+ sent.set(i + 1, { ETag: uploaded.ETag, ChecksumSHA256: checksum });
233
+ }
234
+ };
235
+ await Promise.all(Array.from({ length: Math.min(PARTS_IN_FLIGHT, count) }, worker));
236
+ await client.send(new CompleteMultipartUploadCommand({
237
+ Bucket: bucket, Key: key, UploadId: uploadId,
238
+ MultipartUpload: { Parts: [...sent].sort(([a], [b]) => a - b).map(([PartNumber, part]) => ({ PartNumber, ...part })) },
239
+ }));
240
+ }
241
+ catch (err) {
242
+ await client.send(new AbortMultipartUploadCommand({ Bucket: bucket, Key: key, UploadId: uploadId })).catch(() => undefined);
243
+ throw err;
244
+ }
245
+ }
246
+ /** The kind a mapping fills, as a row says it: the type, `seed`, the mutation, or the shape. */
247
+ function kindOf(plan, outcome) {
248
+ const { target } = outcome.value;
249
+ if (target.type === 'record')
250
+ return 'seed';
251
+ if (target.type === 'mutation')
252
+ return target.value.mutation;
253
+ void plan;
254
+ return 'input';
255
+ }
256
+ /**
257
+ * Uploads each planned put, four parts in flight, and answers a row per
258
+ * file: put, unchanged, refused or failed.
259
+ *
260
+ * @param plan - The plan
261
+ * @param files - The files offered, in the plan's order
262
+ * @param uploads - The completion, and the profile for external puts
263
+ * @param dryRun - Put nothing
264
+ * @returns A row per file, and the targets put
265
+ */
266
+ export async function uploadPlanned(plan, files, uploads, dryRun) {
267
+ const rows = [];
268
+ const targets = [];
269
+ const bindingOf = (source) => plan.bindings.find((b) => b.source === source);
270
+ for (const [i, planned] of plan.files.entries()) {
271
+ const file = files[i];
272
+ const { outcome } = planned;
273
+ if (outcome.type === 'refused') {
274
+ rows.push({ file, target: null, kind: '', put: `refused: ${filesPushRefusalText(outcome.value)}`, sync: '' });
275
+ continue;
276
+ }
277
+ const { target } = outcome.value;
278
+ const kind = outcome.value.target.type === 'input' ? typeOfOffered(file) : kindOf(plan, outcome);
279
+ if (outcome.type === 'unchanged') {
280
+ rows.push({ file, target, kind, put: 'unchanged', sync: '' });
281
+ continue;
282
+ }
283
+ if (dryRun) {
284
+ rows.push({ file, target, kind, put: 'would put', sync: '' });
285
+ continue;
286
+ }
287
+ const size = Number(file.offered.size);
288
+ try {
289
+ await upload(outcome.value.upload, outcome.value.key, bindingOf(outcome.value.source), file.path, size, uploads);
290
+ rows.push({ file, target, kind, put: 'put', sync: '' });
291
+ if (!targets.some((t) => sameFilesTarget(t, target)))
292
+ targets.push(target);
293
+ }
294
+ catch (err) {
295
+ rows.push({ file, target, kind, put: `failed: ${err instanceof Error ? err.message : String(err)}`, sync: '' });
296
+ }
297
+ }
298
+ return { rows, targets };
299
+ }
300
+ /** The type a file offered declares, elided, or `Blob`. */
301
+ function typeOfOffered(file) {
302
+ if (file.offered.type.type === 'none')
303
+ return 'Blob';
304
+ const words = filesTypeWords(file.offered.type.value);
305
+ return words.length <= 40 ? words : `${words.slice(0, 39)}…`;
306
+ }
307
+ /** One put, as the plan says to upload it. */
308
+ async function upload(how, key, binding, path, size, uploads) {
309
+ switch (how.type) {
310
+ case 'single':
311
+ await putSingle(path, size, how.value.url, how.value.headers);
312
+ return;
313
+ case 'multipart': {
314
+ const etags = await putParts(path, size, Number(how.value.partBytes), how.value.parts);
315
+ await uploads.complete(key, how.value.uploadId, etags);
316
+ return;
317
+ }
318
+ case 'external': {
319
+ if (binding === undefined)
320
+ throw new Error('the plan names no binding to put to');
321
+ const location = parseBucketUrl(binding.url);
322
+ if ('problem' in location)
323
+ throw new Error(`${binding.url} ${location.problem}`);
324
+ await putExternal(ownClient(binding, uploads.profile), location.bucket, `${location.prefix}${key}`, path, size);
325
+ return;
326
+ }
327
+ }
328
+ }
329
+ /** What a sync did to a row's target, in words. */
330
+ export function syncWords(report, target) {
331
+ const m = report?.mappings.find((r) => sameFilesTarget(r.target, target));
332
+ if (m === undefined)
333
+ return '';
334
+ if (m.refused.length > 0)
335
+ return `refused: ${m.refused[0].key} ${m.refused[0].reason.type === 'other' ? m.refused[0].reason.value : m.refused[0].reason.type.replace(/_/g, ' ')}`;
336
+ if (m.waiting.type === 'some')
337
+ return `waiting: ${m.waiting.value}`;
338
+ if (m.kept.type === 'some')
339
+ return `kept: ${m.kept.value}`;
340
+ const rows = m.taken.type === 'some' && m.taken.value.rows.type === 'some' ? ` ${m.taken.value.rows.value.toLocaleString('en-US')} rows` : '';
341
+ if (m.commit.type === 'some')
342
+ return `committed ${m.commit.value.slice(0, 12)}${rows}`;
343
+ if (m.updated)
344
+ return `taken in${rows}`;
345
+ return 'unchanged';
346
+ }
347
+ /** A count of bytes, as the rows show it. */
348
+ function sizeWords(bytes) {
349
+ const n = Number(bytes);
350
+ const units = ['B', 'KiB', 'MiB', 'GiB', 'TiB'];
351
+ let value = n;
352
+ let unit = 0;
353
+ while (value >= 1024 && unit < units.length - 1) {
354
+ value /= 1024;
355
+ unit += 1;
356
+ }
357
+ return `${unit === 0 ? value : value < 10 ? value.toFixed(1) : Math.round(value)} ${units[unit]}`;
358
+ }
359
+ /**
360
+ * A push's rows, as the CLI prints them: the sources' bucket lines, a row
361
+ * per file, and the dataflow hint when anything was taken.
362
+ *
363
+ * @param plan - The plan
364
+ * @param rows - The rows
365
+ * @param next - The dataflow run hint's command, when anything changed; null for none
366
+ * @returns The lines
367
+ */
368
+ export function pushText(plan, rows, next) {
369
+ const lines = [];
370
+ for (const binding of plan.bindings)
371
+ lines.push(`${binding.source} ${binding.url}`);
372
+ const cells = rows.map((row) => [
373
+ row.file.offered.directory.type === 'some' ? `${row.file.offered.directory.value}/${row.file.offered.name}` : row.file.offered.name,
374
+ row.target === null ? '' : `→ ${filesTargetText(row.target)}`,
375
+ row.kind,
376
+ sizeWords(row.file.offered.size),
377
+ row.put,
378
+ row.sync,
379
+ ]);
380
+ const widths = cells.reduce((w, r) => r.map((c, i) => Math.max(w[i] ?? 0, c.length)), []);
381
+ for (const r of cells)
382
+ lines.push(` ${r.map((c, i) => (i === r.length - 1 ? c : c.padEnd(widths[i]))).join(' ').trimEnd()}`);
383
+ if (next !== null)
384
+ lines.push(`Next: ${next}`);
385
+ return lines.join('\n');
386
+ }
387
+ //# sourceMappingURL=files-push.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files-push.js","sourceRoot":"","sources":["../../src/files-push.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,11 @@
5
5
  /**
6
6
  * Utility functions for the e3-cloud CLI.
7
7
  */
8
+ /**
9
+ * A moment as the CLI prints it: an East DateTime in East's own text, in UTC
10
+ * to the millisecond (`2026-11-02T08:01:52.123`), as e3's CLI prints one.
11
+ */
12
+ export declare const printDateTime: (at: Date) => string;
8
13
  /**
9
14
  * Parse a repository URL into base URL and repo name.
10
15
  * Format: https://server/repos/{repo}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAU3E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAWnG;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAKhD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAGhD;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAS/D"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AAEH;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,CAAC,EAAE,EAAE,IAAI,KAAK,MAA+B,CAAC;AAE1E;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAU3E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAWnG;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAKhD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAGhD;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAS/D"}
package/dist/src/utils.js CHANGED
@@ -2,10 +2,16 @@
2
2
  * Copyright (c) 2025 Elara AI Pty Ltd
3
3
  * Licensed under BSL 1.1. See LICENSE for details.
4
4
  */
5
+ import { DateTimeType, printFor } from '@elaraai/east';
5
6
  import { ApiError } from '@elaraai/e3-api-client';
6
7
  /**
7
8
  * Utility functions for the e3-cloud CLI.
8
9
  */
10
+ /**
11
+ * A moment as the CLI prints it: an East DateTime in East's own text, in UTC
12
+ * to the millisecond (`2026-11-02T08:01:52.123`), as e3's CLI prints one.
13
+ */
14
+ export const printDateTime = printFor(DateTimeType);
9
15
  /**
10
16
  * Parse a repository URL into base URL and repo name.
11
17
  * Format: https://server/repos/{repo}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,MAAM;QACtB,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACnC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC9E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;IACxF,CAAC;IACD,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,MAAM;QACtB,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClC,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACxC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,sFAAsF;IACtF,IAAI,GAAG,YAAY,QAAQ,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,KAAK,EAAE;QAAE,OAAO,GAAG,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;IAC3H,IAAI,GAAG,YAAY,KAAK;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC7C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAe;IAC3C,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;IACnE,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,OAAO,SAAS,CAAC,CAAC;QACtD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;IACtF,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD;;GAEG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAyB,QAAQ,CAAC,YAAY,CAAC,CAAC;AAE1E;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,MAAM;QACtB,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACnC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC9E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;IACxF,CAAC;IACD,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,MAAM;QACtB,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClC,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACxC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,sFAAsF;IACtF,IAAI,GAAG,YAAY,QAAQ,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,KAAK,EAAE;QAAE,OAAO,GAAG,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;IAC3H,IAAI,GAAG,YAAY,KAAK;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC7C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAe;IAC3C,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;IACnE,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,OAAO,SAAS,CAAC,CAAC;QACtD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;IACtF,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elaraai/e3-cloud-cli",
3
- "version": "1.0.94",
3
+ "version": "1.1.0",
4
4
  "type": "module",
5
5
  "description": "CLI for e3 cloud management",
6
6
  "license": "BUSL-1.1",
@@ -10,18 +10,18 @@
10
10
  "main": "dist/src/cli.js",
11
11
  "dependencies": {
12
12
  "@aws-sdk/client-s3": "^3.966.0",
13
- "@elaraai/e3-api-client": "1.0.94",
14
- "@elaraai/e3-core": "1.0.94",
15
- "@elaraai/e3-types": "1.0.94",
13
+ "@elaraai/e3-api-client": "1.0.100",
14
+ "@elaraai/e3-core": "1.0.100",
15
+ "@elaraai/e3-types": "1.0.100",
16
16
  "commander": "^12.0.0",
17
17
  "esbuild": "^0.27.2",
18
- "@elaraai/e3-cloud-client": "1.0.94",
19
- "@elaraai/e3-cloud-files": "1.0.94",
20
- "@elaraai/e3-cloud-types": "1.0.94",
21
- "@elaraai/e3-cloud-ui": "1.0.94"
18
+ "@elaraai/e3-cloud-files": "1.1.0",
19
+ "@elaraai/e3-cloud-types": "1.1.0",
20
+ "@elaraai/e3-cloud-ui": "1.1.0",
21
+ "@elaraai/e3-cloud-client": "1.1.0"
22
22
  },
23
23
  "peerDependencies": {
24
- "@elaraai/east": "1.0.94"
24
+ "@elaraai/east": "1.0.100"
25
25
  },
26
26
  "files": [
27
27
  "dist/src/**/*",