@elaraai/e3-cloud-cli 1.0.94 → 1.0.97
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/README.md +23 -10
- package/dist/src/cli.js +15 -3
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/files.d.ts +23 -6
- package/dist/src/commands/files.d.ts.map +1 -1
- package/dist/src/commands/files.js +173 -38
- package/dist/src/commands/files.js.map +1 -1
- package/dist/src/commands/release.d.ts.map +1 -1
- package/dist/src/commands/release.js +33 -15
- package/dist/src/commands/release.js.map +1 -1
- package/dist/src/files-local.d.ts +336 -30
- package/dist/src/files-local.d.ts.map +1 -1
- package/dist/src/files-local.js +187 -52
- package/dist/src/files-local.js.map +1 -1
- package/dist/src/files-push.d.ts +100 -0
- package/dist/src/files-push.d.ts.map +1 -0
- package/dist/src/files-push.js +387 -0
- package/dist/src/files-push.js.map +1 -0
- 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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elaraai/e3-cloud-cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.97",
|
|
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.
|
|
14
|
-
"@elaraai/e3-core": "1.0.
|
|
15
|
-
"@elaraai/e3-types": "1.0.
|
|
13
|
+
"@elaraai/e3-api-client": "1.0.97",
|
|
14
|
+
"@elaraai/e3-core": "1.0.97",
|
|
15
|
+
"@elaraai/e3-types": "1.0.97",
|
|
16
16
|
"commander": "^12.0.0",
|
|
17
17
|
"esbuild": "^0.27.2",
|
|
18
|
-
"@elaraai/e3-cloud-client": "1.0.
|
|
19
|
-
"@elaraai/e3-cloud-files": "1.0.
|
|
20
|
-
"@elaraai/e3-cloud-types": "1.0.
|
|
21
|
-
"@elaraai/e3-cloud-ui": "1.0.
|
|
18
|
+
"@elaraai/e3-cloud-client": "1.0.97",
|
|
19
|
+
"@elaraai/e3-cloud-files": "1.0.97",
|
|
20
|
+
"@elaraai/e3-cloud-types": "1.0.97",
|
|
21
|
+
"@elaraai/e3-cloud-ui": "1.0.97"
|
|
22
22
|
},
|
|
23
23
|
"peerDependencies": {
|
|
24
|
-
"@elaraai/east": "1.0.
|
|
24
|
+
"@elaraai/east": "1.0.97"
|
|
25
25
|
},
|
|
26
26
|
"files": [
|
|
27
27
|
"dist/src/**/*",
|