@elaraai/e3-cloud-files 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 (53) hide show
  1. package/README.md +221 -28
  2. package/dist/src/authoring.d.ts +90 -22
  3. package/dist/src/authoring.d.ts.map +1 -1
  4. package/dist/src/authoring.js +122 -46
  5. package/dist/src/authoring.js.map +1 -1
  6. package/dist/src/check/index.d.ts +3 -4
  7. package/dist/src/check/index.d.ts.map +1 -1
  8. package/dist/src/check/index.js +3 -4
  9. package/dist/src/check/index.js.map +1 -1
  10. package/dist/src/check.d.ts +44 -9
  11. package/dist/src/check.d.ts.map +1 -1
  12. package/dist/src/check.js +130 -53
  13. package/dist/src/check.js.map +1 -1
  14. package/dist/src/compat.d.ts +384 -0
  15. package/dist/src/compat.d.ts.map +1 -0
  16. package/dist/src/compat.js +258 -0
  17. package/dist/src/compat.js.map +1 -0
  18. package/dist/src/index.d.ts +14 -9
  19. package/dist/src/index.d.ts.map +1 -1
  20. package/dist/src/index.js +14 -9
  21. package/dist/src/index.js.map +1 -1
  22. package/dist/src/s3/index.d.ts.map +1 -1
  23. package/dist/src/s3/index.js +34 -12
  24. package/dist/src/s3/index.js.map +1 -1
  25. package/dist/src/storage/index.d.ts +84 -3
  26. package/dist/src/storage/index.d.ts.map +1 -1
  27. package/dist/src/storage/index.js +387 -13
  28. package/dist/src/storage/index.js.map +1 -1
  29. package/dist/src/sync/engine.d.ts +288 -49
  30. package/dist/src/sync/engine.d.ts.map +1 -1
  31. package/dist/src/sync/engine.js +605 -110
  32. package/dist/src/sync/engine.js.map +1 -1
  33. package/dist/src/sync/index.d.ts +3 -2
  34. package/dist/src/sync/index.d.ts.map +1 -1
  35. package/dist/src/sync/index.js +3 -2
  36. package/dist/src/sync/index.js.map +1 -1
  37. package/dist/src/sync/memory.d.ts +67 -12
  38. package/dist/src/sync/memory.d.ts.map +1 -1
  39. package/dist/src/sync/memory.js +248 -18
  40. package/dist/src/sync/memory.js.map +1 -1
  41. package/dist/src/sync/push.d.ts +56 -0
  42. package/dist/src/sync/push.d.ts.map +1 -0
  43. package/dist/src/sync/push.js +205 -0
  44. package/dist/src/sync/push.js.map +1 -0
  45. package/dist/test/decode.examples.d.ts +9 -4
  46. package/dist/test/decode.examples.d.ts.map +1 -1
  47. package/dist/test/decode.examples.js +15 -3
  48. package/dist/test/decode.examples.js.map +1 -1
  49. package/dist/test/typed.examples.d.ts +142 -0
  50. package/dist/test/typed.examples.d.ts.map +1 -0
  51. package/dist/test/typed.examples.js +125 -0
  52. package/dist/test/typed.examples.js.map +1 -0
  53. package/package.json +10 -6
@@ -2,7 +2,63 @@
2
2
  * Copyright (c) 2025 Elara AI Pty Ltd
3
3
  * Licensed under BSL 1.1. See LICENSE for details.
4
4
  */
5
- import { type FilesBinding, type FilesLedgerValue, type FilesListingRow, type FilesManifest, type FilesMapping, type FilesProblem, type FilesSyncReport } from '@elaraai/e3-cloud-types';
5
+ /**
6
+ * The sync: what a source's files fill, brought up to date.
7
+ *
8
+ * One algorithm for a local repository and a deployed workspace alike: what
9
+ * reads a bucket, what writes a workspace's inputs and records, and what
10
+ * remembers the files each target took are given to it ({@link FilesReader},
11
+ * {@link FilesWriter}, {@link FilesLedger}), so both behave the same.
12
+ *
13
+ * For each mapping: list the source, compare each file with what the target
14
+ * took last (its ETag and size), read what is new or changed, write the
15
+ * target, and remember what it took and the value it wrote or the commit it
16
+ * made. A file the same as before is never read again, so a sync with
17
+ * nothing new reads nothing; a target whose files are as they were is not
18
+ * written. A file over its limit is refused, named in the report, and never
19
+ * truncated; so is a file its reader cannot read (archived, changed since it
20
+ * was listed, or closed to the reader's access: {@link FilesUnreadableError}),
21
+ * the sync going on with the rest, and the next sync trying it again. A
22
+ * target is remembered only once it is written, so a sync that stops part
23
+ * way takes the rest next time.
24
+ *
25
+ * A `file` or `latest` mapping with a type takes its file in as the beast2
26
+ * value it holds: the file's header is read first, through a ranged read,
27
+ * and a file of another type, or no beast2, is refused before any other
28
+ * byte of it is read; then the writer takes the file in from a stream of its
29
+ * bytes ({@link FilesWriter.takeTyped}: never held whole, a collection by
30
+ * pieces), which may outlast a round and resume in the next, the file it was
31
+ * taking remembered by its key and ETag so no other file is resumed as it.
32
+ * A record's mapping seeds the record ({@link FilesWriter.seed}: its file is
33
+ * the record's first state, or its state again while nothing has mutated it
34
+ * since, or when the sync is asked to reset it); a mutation's feeds it
35
+ * ({@link FilesWriter.feed}): every new file under its prefix, in key order,
36
+ * each applied once, by the file's hash, and never again under another name.
37
+ *
38
+ * A folder's new and changed files are taken in batches of at most 256 MiB
39
+ * ({@link FOLDER_BATCH_BYTES}): each batch is read, written and remembered
40
+ * before the next is read, so a sync holds one batch of files, however large
41
+ * the folder. A sync can stop between targets, between a folder's batches,
42
+ * between a feed's files and within a typed intake when asked
43
+ * ({@link syncFilesRound}, a cloud round handing over), and the next takes
44
+ * the rest.
45
+ *
46
+ * What a target took is trusted only while its mapping and its source's
47
+ * binding are those it was taken under ({@link LedgerState}'s `under`) and,
48
+ * for an input, while the input still holds the value the sync wrote: a
49
+ * deploy that resets the workspace's inputs, anyone setting one by hand, a
50
+ * changed declaration or a source bound elsewhere, and the next sync takes
51
+ * all of its files again, even when a sync under the old declarations wrote
52
+ * its ledger after the change. A record's or mutation's ledger stays
53
+ * trusted as the record moves on: the record itself says what a seed may do.
54
+ *
55
+ * Mappings that share a source and a prefix list it once a round; a glob that
56
+ * matches only the prefix's own folder lists that folder alone.
57
+ *
58
+ * @packageDocumentation
59
+ */
60
+ import { type EastTypeValue } from '@elaraai/east';
61
+ import { type FilesBinding, type FilesLedgerValue, type FilesListingRow, type FilesManifest, type FilesMapping, type FilesProblem, type FilesRefusalReason, type FilesSyncReport, type FilesTaken, type FilesTarget } from '@elaraai/e3-cloud-types';
6
62
  /** A file of a source, as a listing gives it. */
7
63
  export interface FilesObject {
8
64
  /** Its key, relative to where the workspace binds the source */
@@ -19,39 +75,159 @@ export interface FilesListOptions {
19
75
  /** Only the files in the prefix's own folder, none in a folder under it */
20
76
  readonly topFolderOnly?: boolean;
21
77
  }
78
+ /** How a reader opens a file's bytes. */
79
+ export interface FilesOpenOptions {
80
+ /** The byte to start at: a typed intake resumed where its staging stood */
81
+ readonly start?: number;
82
+ }
22
83
  /** Reads one bound source: a bucket, under the prefix the binding names. */
23
84
  export interface FilesReader {
24
- /** Every file under a prefix (relative to the binding), in key order */
25
- list(prefix: string, options?: FilesListOptions): AsyncIterable<FilesObject>;
26
- /** One file's listing, or `null` when there is none */
85
+ /** The files under a prefix, in key order; a prefix's own folder alone when asked */
86
+ list(prefix: string, options?: FilesListOptions): AsyncIterable<FilesObject> | Iterable<FilesObject>;
87
+ /** One file, or null when there is none at the key */
27
88
  stat(key: string): Promise<FilesObject | null>;
28
89
  /**
29
- * One file's bytes, as its listing gave it: a file that changed since, or
30
- * that the reader cannot read, is refused with a {@link FilesUnreadableError}
90
+ * A file's bytes, whole, at the version its listing gave.
91
+ *
92
+ * @throws {FilesUnreadableError} When the file cannot be read: archived, changed since it was listed, gone, or closed to the reader
93
+ */
94
+ read(object: FilesObject): Promise<Uint8Array>;
95
+ /**
96
+ * A range of a file's bytes, `[start, end)`: a typed file's header, read
97
+ * before any other byte of it.
98
+ *
99
+ * @throws {FilesUnreadableError} As `read`
100
+ */
101
+ readRange(object: FilesObject, start: number, end: number): Promise<Uint8Array>;
102
+ /**
103
+ * A file's bytes as a stream, from a byte on, for a typed file taken in
104
+ * without being held whole.
105
+ *
106
+ * @throws {FilesUnreadableError} As `read`
31
107
  */
32
- read(file: FilesObject): Promise<Uint8Array>;
108
+ open(object: FilesObject, options?: FilesOpenOptions): Promise<AsyncIterable<Uint8Array>>;
33
109
  }
34
110
  /**
35
- * A file a reader cannot read, which a sync refuses and names in its report,
36
- * going on with the rest; the next sync tries it again. A reader throws it
37
- * for what is the file's own, never for its source as a whole: a file
38
- * archived, changed or gone since it was listed, or closed to the reader's
39
- * access. Any other error ends the round, which is tried again.
111
+ * Thrown by a reader for a file it cannot read, which the sync refuses and
112
+ * goes on past: archived, changed since it was listed, gone, or closed to
113
+ * the reader's access. Anything else a reader throws stops the sync.
40
114
  */
41
115
  export declare class FilesUnreadableError extends Error {
116
+ /** The file's key */
42
117
  readonly key: string;
118
+ /** Why, as the refusal says it */
43
119
  readonly reason: string;
44
- /**
45
- * @param key - The file's key, relative to the binding
46
- * @param reason - Why, completing "'<key>' …"
47
- */
48
120
  constructor(key: string, reason: string);
49
121
  }
50
- /** Writes one workspace's inputs. Each write answers the value it set: its hash. */
122
+ /**
123
+ * A typed intake under way across rounds: the file it takes (its key and
124
+ * ETag, so no other file is resumed as it), its SHA-256 once its bytes are
125
+ * placed in the store, else where its staging stood (the writer's own
126
+ * progress, as text).
127
+ */
128
+ export interface TypedIntakeProgress {
129
+ readonly key: string;
130
+ readonly etag: string;
131
+ readonly sha256: string | null;
132
+ readonly staging: string | null;
133
+ }
134
+ /** What a typed intake is given. */
135
+ export interface TypedIntakeOptions {
136
+ /** The file's SHA-256, where the caller knows it (a push) */
137
+ readonly sha256?: string;
138
+ /** The intake of this same file an earlier round left under way, to resume */
139
+ readonly resume?: TypedIntakeProgress;
140
+ /** Stops the intake where it can resume: a round's deadline */
141
+ readonly signal?: AbortSignal;
142
+ }
143
+ /**
144
+ * What a typed intake did: took the file; stopped at the round's deadline,
145
+ * where the next round resumes it (`taking`), or before anything was kept,
146
+ * so the next round starts the file again (`taking` null); or refused it.
147
+ */
148
+ export type TypedIntakeResult = {
149
+ readonly status: 'taken';
150
+ readonly hash: string;
151
+ readonly sha256: string;
152
+ readonly taken: FilesTaken;
153
+ } | {
154
+ readonly status: 'yielded';
155
+ readonly taking: TypedIntakeProgress | null;
156
+ } | {
157
+ readonly status: 'refused';
158
+ readonly reason: FilesRefusalReason;
159
+ };
160
+ /**
161
+ * A record, as a seed reads it: pending (no state yet, its file its genesis),
162
+ * or its head commit, with how many commits have been made since its last
163
+ * seed (`$init` or `$seed`); null when its history was not walked to a seed.
164
+ */
165
+ export type RecordSeedState = {
166
+ readonly pending: true;
167
+ } | {
168
+ readonly pending: false;
169
+ readonly head: string;
170
+ readonly sinceSeed: number | null;
171
+ };
172
+ /** What a seed is given. */
173
+ export interface SeedOptions {
174
+ /** Whether the record is pending, so the file is its genesis (`$init`); else its state again (`$seed`) */
175
+ readonly genesis: boolean;
176
+ /** The file's SHA-256, where the caller knows it */
177
+ readonly sha256?: string;
178
+ readonly signal?: AbortSignal;
179
+ }
180
+ /**
181
+ * What a seed did: committed the file as the record's state; stopped at the
182
+ * round's deadline, the pieces it took in remembered for the next sync; or
183
+ * refused the file.
184
+ */
185
+ export type SeedResult = {
186
+ readonly status: 'committed';
187
+ readonly commit: string;
188
+ readonly rows: bigint | null;
189
+ readonly sha256: string;
190
+ } | {
191
+ readonly status: 'yielded';
192
+ } | {
193
+ readonly status: 'refused';
194
+ readonly reason: FilesRefusalReason;
195
+ };
196
+ /** What a feed is given. */
197
+ export interface FeedOptions {
198
+ /** The file's SHA-256, where the caller knows it: the feed's idempotency key */
199
+ readonly sha256?: string;
200
+ /** The SHA-256 of every file the mutation has applied already: one of them is applied again under no name */
201
+ readonly applied?: ReadonlySet<string>;
202
+ readonly signal?: AbortSignal;
203
+ }
204
+ /**
205
+ * What a feed did: committed through the mutation; applied before, so
206
+ * nothing more; waits (for the record's first state, or for a round the
207
+ * deadline or a busy record cut short: tried again by the next sync); or
208
+ * was refused by the mutation, which the file's bytes must change to be
209
+ * tried again.
210
+ */
211
+ export type FeedResult = {
212
+ readonly status: 'committed';
213
+ readonly commit: string;
214
+ readonly sha256: string;
215
+ } | {
216
+ readonly status: 'applied';
217
+ readonly sha256: string;
218
+ } | {
219
+ readonly status: 'waiting';
220
+ readonly reason: string;
221
+ } | {
222
+ readonly status: 'refused';
223
+ readonly reason: FilesRefusalReason;
224
+ readonly sha256: string;
225
+ };
226
+ /** Writes one workspace's inputs and records, as a sync fills them. */
51
227
  export interface FilesWriter {
52
228
  /** The value an input holds now, its hash; `null` while it is unassigned */
53
229
  current(input: string): Promise<string | null>;
54
- /** Sets a `file` or `latest` input to a file's bytes */
230
+ /** Sets a `file` or `latest` input with no type to a file's bytes */
55
231
  setFile(input: string, bytes: Uint8Array): Promise<string>;
56
232
  /**
57
233
  * Updates a `folder` input: each file in `set` added or replaced, each path
@@ -61,6 +237,18 @@ export interface FilesWriter {
61
237
  updateFolder(input: string, changes: FolderChanges): Promise<string>;
62
238
  /** Sets a `listing` input */
63
239
  setListing(input: string, rows: ReadonlyMap<string, FilesListingRow>): Promise<string>;
240
+ /**
241
+ * Takes a typed file in as an input's value, from a stream of its bytes:
242
+ * never held whole, a collection by pieces. The file's header has been
243
+ * checked against `type` already.
244
+ */
245
+ takeTyped(input: string, file: FilesObject, type: EastTypeValue, source: FilesReader, options: TypedIntakeOptions): Promise<TypedIntakeResult>;
246
+ /** A record, as a seed reads it; absent where records cannot be seeded */
247
+ recordState?(record: string): Promise<RecordSeedState>;
248
+ /** Seeds a record from a typed file: its first state, or its state again */
249
+ seed?(record: string, file: FilesObject, type: EastTypeValue, source: FilesReader, options: SeedOptions): Promise<SeedResult>;
250
+ /** Feeds a record's mutation a typed file's value, once */
251
+ feed?(record: string, mutation: string, file: FilesObject, type: EastTypeValue, source: FilesReader, options: FeedOptions): Promise<FeedResult>;
64
252
  }
65
253
  /** What a sync changes in a `folder` input. */
66
254
  export interface FolderChanges {
@@ -71,55 +259,76 @@ export interface FolderChanges {
71
259
  /** Whether the folder is `set` alone, whatever the input holds now */
72
260
  readonly fresh: boolean;
73
261
  }
74
- /** What an input took of one file. */
262
+ /** What a target took of one file. */
75
263
  export interface LedgerEntry {
76
264
  readonly etag: string;
77
265
  readonly size: number;
266
+ /** The file's SHA-256, where the sync hashed it */
267
+ readonly sha256?: string;
268
+ /** When the file was last written, as its listing said */
269
+ readonly modified?: Date;
78
270
  }
79
- /** What an input took last: each file, the value the sync wrote, and what it was taken under. */
271
+ /** What a target took last: each file, the value the sync wrote or the commit it made, and what it was taken under. */
80
272
  export interface LedgerState {
81
- /** Each file it took, by key */
273
+ /** Each file it took, by key; a feed's, every file applied */
82
274
  readonly entries: ReadonlyMap<string, LedgerEntry>;
83
- /** The value the sync wrote, its hash; `null` before its first sync */
275
+ /** The value the sync wrote, its hash: an input's; `null` before its first sync */
84
276
  readonly value: string | null;
85
277
  /**
86
278
  * The mapping's shape and its source's binding it was taken under, as one
87
279
  * text ({@link takenUnder}); `null` before its first sync
88
280
  */
89
281
  readonly under: string | null;
282
+ /** The commit the sync made: a record's seed, a mutation's last feed; `null` for an input, or before any */
283
+ readonly commit: string | null;
284
+ /** The SHA-256 of a feed the mutation refused, not tried again until the file changes */
285
+ readonly tried: string | null;
286
+ /** A typed intake under way across rounds */
287
+ readonly taking: TypedIntakeProgress | null;
90
288
  }
91
- /** What an input took before its first sync: nothing. */
289
+ /** What a target took before its first sync: nothing. */
92
290
  export declare const NO_LEDGER: LedgerState;
93
291
  /**
94
- * What an input took, as a store keeps it (e3-cloud-types' `FilesLedgerType`).
292
+ * What a target took, as a store keeps it (e3-cloud-types' `FilesLedgerType`).
95
293
  *
96
294
  * @param state - What it took
97
295
  * @returns Its East value
98
296
  */
99
297
  export declare function ledgerValueOf(state: LedgerState): FilesLedgerValue;
100
298
  /**
101
- * What an input took, from what a store keeps.
299
+ * What a target took, from what a store keeps.
102
300
  *
103
301
  * @param value - Its East value
104
302
  * @returns What it took
105
303
  */
106
304
  export declare function ledgerStateOf(value: FilesLedgerValue): LedgerState;
107
305
  /**
108
- * What an input's files are taken under: its mapping's shape and where its
306
+ * The key a target's ledger is kept under: an input's name, as the first
307
+ * version kept it; a record's under `records/`; a mutation's under
308
+ * `mutations/{record}/{mutation}` (two segments: a name may hold a dot).
309
+ *
310
+ * @param target - The target
311
+ * @returns Its ledger's key
312
+ */
313
+ export declare function ledgerKeyOf(target: FilesTarget): string;
314
+ /**
315
+ * What a target's files are taken under: its mapping's shape and where its
109
316
  * source is bound, as one text. A ledger taken under another is not trusted:
110
- * its keys may name other files, and its paths another folder's.
317
+ * its keys may name other files, and its paths another folder's. A shape
318
+ * that names no type prints as the first version printed it, so a ledger it
319
+ * wrote stays trusted.
111
320
  *
112
321
  * @param mapping - The mapping
113
322
  * @param binding - Its source's binding
114
323
  * @returns The text
115
324
  */
116
325
  export declare function takenUnder(mapping: FilesMapping, binding: FilesBinding): string;
117
- /** Remembers, for each input, what it took last. */
326
+ /** Remembers, for each target, what it took last. */
118
327
  export interface FilesLedger {
119
- /** What an input took last; nothing before its first sync */
120
- read(input: string): Promise<LedgerState>;
121
- /** Remembers what an input took */
122
- write(input: string, state: LedgerState): Promise<void>;
328
+ /** What a target took last, by its ledger's key ({@link ledgerKeyOf}); nothing before its first sync */
329
+ read(key: string): Promise<LedgerState>;
330
+ /** Remembers what a target took */
331
+ write(key: string, state: LedgerState): Promise<void>;
123
332
  }
124
333
  /** What a sync is given. */
125
334
  export interface SyncOptions {
@@ -129,33 +338,37 @@ export interface SyncOptions {
129
338
  readonly bindings: readonly FilesBinding[];
130
339
  /** Reads a bound source */
131
340
  readonly reader: (binding: FilesBinding) => FilesReader;
132
- /** Writes the workspace's inputs */
341
+ /** Writes the workspace's inputs and records */
133
342
  readonly writer: FilesWriter;
134
- /** Remembers what each input took */
343
+ /** Remembers what each target took */
135
344
  readonly ledger: FilesLedger;
136
345
  /** List what a sync would take, and take nothing */
137
346
  readonly dryRun?: boolean;
138
- /** Only these inputs; every mapping when absent */
139
- readonly inputs?: readonly string[];
347
+ /** Only these targets; every mapping when absent */
348
+ readonly targets?: readonly FilesTarget[];
349
+ /** Records whose file is taken as their state again, whatever has mutated them since their seed */
350
+ readonly reset?: readonly string[];
140
351
  /** The time, for the report */
141
352
  readonly now?: () => Date;
142
353
  /** The most bytes of a folder's files held before they are written: {@link FOLDER_BATCH_BYTES} when absent */
143
354
  readonly batchBytes?: number;
355
+ /** Stops a typed intake, a seed or a feed where it can resume: a round's deadline */
356
+ readonly signal?: AbortSignal;
144
357
  }
145
358
  /** What one round of a sync is given: a sync's options, and when to stop. */
146
359
  export interface SyncRoundOptions extends SyncOptions {
147
360
  /**
148
- * Asked between inputs and between a folder's batches, once the round has
149
- * written something: `true` stops the round there, every input as it was
150
- * last written and remembered
361
+ * Asked between targets, between a folder's batches and between a feed's
362
+ * files, once the round has written something: `true` stops the round
363
+ * there, every target as it was last written and remembered
151
364
  */
152
365
  readonly shouldYield?: () => boolean;
153
366
  }
154
367
  /** What a round did, and whether it stopped before the end. */
155
368
  export interface FilesSyncRound {
156
- /** What it did: each input it reached, with what it took */
369
+ /** What it did: each target it reached, with what it took */
157
370
  readonly report: FilesSyncReport;
158
- /** Whether it stopped when asked, with inputs or a folder's files left for the next */
371
+ /** Whether it stopped when asked, with targets, a folder's files, a feed's files or an intake left for the next */
159
372
  readonly yielded: boolean;
160
373
  }
161
374
  /** The most bytes of a folder's files a sync holds before it writes them, when not told: 256 MiB. */
@@ -166,26 +379,52 @@ export declare class FilesSyncError extends Error {
166
379
  constructor(problems: readonly FilesProblem[]);
167
380
  }
168
381
  /**
169
- * Brings each mapping's input up to date with its source's files, stopping
170
- * when asked between inputs or between a folder's batches: one round of a
171
- * sync that hands over, as the platform's do. What it stopped before, the
172
- * next round takes.
382
+ * The root type a beast2 file's header declares, read through its head:
383
+ * 64 KiB, then wider only for a wide type section, never the file. Refused
384
+ * as no beast2 when the header is malformed, or wider than any type section
385
+ * is. What the sync and a push's reading of a file on disk share.
386
+ *
387
+ * @param size - The file's size
388
+ * @param readHead - Reads the file's first bytes, as many as asked
389
+ * @returns The declared root type, or why the file is no beast2
390
+ */
391
+ export declare function beast2HeaderTypeOf(size: number, readHead: (bytes: number) => Promise<Uint8Array>): Promise<{
392
+ type: EastTypeValue;
393
+ } | {
394
+ reason: FilesRefusalReason;
395
+ }>;
396
+ /**
397
+ * Whether a type is a collection's: an Array, Set or Dict root, which beast2
398
+ * stores in segments and e3 takes in by pieces, of any size.
399
+ *
400
+ * @param type - The type
401
+ * @returns Whether it is a collection
402
+ */
403
+ export declare function isCollectionType(type: EastTypeValue): boolean;
404
+ /**
405
+ * Brings each mapping's target up to date with its source's files, stopping
406
+ * when asked between targets, between a folder's batches, between a feed's
407
+ * files or within a typed intake: one round of a sync that hands over, as
408
+ * the platform's do. What it stopped before, the next round takes. Records
409
+ * are seeded before mutations are fed, so a record seeded and fed in one
410
+ * sync takes both, in that order.
173
411
  *
174
412
  * @param options - The declarations, the bindings, what reads, writes and remembers, and when to stop
175
- * @returns What it did, per input it reached, and whether it stopped before the end
413
+ * @returns What it did, per target it reached, and whether it stopped before the end
176
414
  * @throws {FilesSyncError} When a mapping's source is not bound, before
177
415
  * anything is read
178
- * @throws {Error} When an input named is not one a declaration fills
416
+ * @throws {Error} When a target named is not one a declaration fills
179
417
  */
180
418
  export declare function syncFilesRound(options: SyncRoundOptions): Promise<FilesSyncRound>;
181
419
  /**
182
- * Brings each mapping's input up to date with its source's files, to the end.
420
+ * Brings each mapping's target up to date with its source's files, to the
421
+ * end.
183
422
  *
184
423
  * @param options - The declarations, the bindings, and what reads, writes and remembers
185
424
  * @returns What it did, per mapping
186
425
  * @throws {FilesSyncError} When a mapping's source is not bound, before
187
426
  * anything is read
188
- * @throws {Error} When an input named is not one a declaration fills
427
+ * @throws {Error} When a target named is not one a declaration fills
189
428
  */
190
429
  export declare function syncFiles(options: SyncOptions): Promise<FilesSyncReport>;
191
430
  //# sourceMappingURL=engine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/sync/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/sync/engine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAEH,OAAO,EAAiG,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAClJ,OAAO,EAEL,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EACrG,KAAK,YAAY,EAAqB,KAAK,kBAAkB,EAAmB,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EACxI,MAAM,yBAAyB,CAAC;AAIjC,iDAAiD;AACjD,MAAM,WAAW,WAAW;IAC1B,gEAAgE;IAChE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,wBAAwB;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,oDAAoD;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,mCAAmC;AACnC,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,yCAAyC;AACzC,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,4EAA4E;AAC5E,MAAM,WAAW,WAAW;IAC1B,qFAAqF;IACrF,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,aAAa,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IACrG,sDAAsD;IACtD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC/C;;;;OAIG;IACH,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/C;;;;;OAKG;IACH,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAChF;;;;;OAKG;IACH,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;CAC3F;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,qBAAqB;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAMxC;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,oCAAoC;AACpC,MAAM,WAAW,kBAAkB;IACjC,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,8EAA8E;IAC9E,QAAQ,CAAC,MAAM,CAAC,EAAE,mBAAmB,CAAC;IACtC,+DAA+D;IAC/D,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GACzB;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GACxG;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAA;CAAE,GAC3E;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAExE;;;;GAIG;AACH,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAA;CAAE,GAC1B;IAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAE1F,4BAA4B;AAC5B,MAAM,WAAW,WAAW;IAC1B,0GAA0G;IAC1G,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,oDAAoD;IACpD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAChH;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GAC9B;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAExE,4BAA4B;AAC5B,MAAM,WAAW,WAAW;IAC1B,gFAAgF;IAChF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,6GAA6G;IAC7G,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClF;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvD;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvD;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjG,uEAAuE;AACvE,MAAM,WAAW,WAAW;IAC1B,4EAA4E;IAC5E,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/C,qEAAqE;IACrE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3D;;;;OAIG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACrE,6BAA6B;IAC7B,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvF;;;;OAIG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC/I,0EAA0E;IAC1E,WAAW,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACvD,4EAA4E;IAC5E,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9H,2DAA2D;IAC3D,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CACjJ;AAED,+CAA+C;AAC/C,MAAM,WAAW,aAAa;IAC5B,sEAAsE;IACtE,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC9C,0BAA0B;IAC1B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,sEAAsE;IACtE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,sCAAsC;AACtC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;CAC1B;AAED,uHAAuH;AACvH,MAAM,WAAW,WAAW;IAC1B,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACnD,mFAAmF;IACnF,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,4GAA4G;IAC5G,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,yFAAyF;IACzF,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,6CAA6C;IAC7C,QAAQ,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;CAC7C;AAED,yDAAyD;AACzD,eAAO,MAAM,SAAS,EAAE,WAAuG,CAAC;AAEhI;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,gBAAgB,CAmBlE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,gBAAgB,GAAG,WAAW,CAmBlE;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAMvD;AAeD;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,CAG/E;AAED,qDAAqD;AACrD,MAAM,WAAW,WAAW;IAC1B,wGAAwG;IACxG,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACxC,mCAAmC;IACnC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAED,4BAA4B;AAC5B,MAAM,WAAW,WAAW;IAC1B,uBAAuB;IACvB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,oCAAoC;IACpC,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,2BAA2B;IAC3B,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,WAAW,CAAC;IACxD,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,sCAAsC;IACtC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,oDAAoD;IACpD,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,oDAAoD;IACpD,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IAC1C,mGAAmG;IACnG,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,+BAA+B;IAC/B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,8GAA8G;IAC9G,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,qFAAqF;IACrF,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED,6EAA6E;AAC7E,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC;CACtC;AAED,+DAA+D;AAC/D,MAAM,WAAW,cAAc;IAC7B,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,mHAAmH;IACnH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,qGAAqG;AACrG,eAAO,MAAM,kBAAkB,QAAoB,CAAC;AASpD,6DAA6D;AAC7D,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;gBAE/B,QAAQ,EAAE,SAAS,YAAY,EAAE;CAK9C;AAwMD;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,kBAAkB,CAAA;CAAE,CAAC,CAsB1K;AAYD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAE7D;AA8eD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,CA8BvF;AAED;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAE9E"}