@agentshouse/mdruntime 0.1.0-c2c52158b7381 → 0.1.0-c2e8a6f99866d
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/AGENTS.md +14 -10
- package/dist/adapter.d.ts +14 -5
- package/dist/adapter.d.ts.map +1 -1
- package/dist/bootstrap.d.ts +13 -6
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +86 -88
- package/dist/chain.d.ts +11 -0
- package/dist/chain.d.ts.map +1 -0
- package/dist/chain.js +64 -0
- package/dist/change-set.d.ts +5 -9
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +10 -86
- package/dist/chat/list.d.ts.map +1 -1
- package/dist/chat/list.js +1 -1
- package/dist/chat/message.d.ts.map +1 -1
- package/dist/chat/message.js +8 -1
- package/dist/chat/messages.d.ts +1 -0
- package/dist/chat/messages.d.ts.map +1 -1
- package/dist/chat/messages.js +9 -1
- package/dist/chat/provider.d.ts +2 -0
- package/dist/chat/provider.d.ts.map +1 -1
- package/dist/chat/provider.js +17 -1
- package/dist/client.d.ts +1 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +1 -0
- package/dist/collection.d.ts +5 -19
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +22 -360
- package/dist/compile.d.ts +11 -0
- package/dist/compile.d.ts.map +1 -0
- package/dist/compile.js +712 -0
- package/dist/connection.d.ts +2 -2
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +1396 -624
- package/dist/conversation.d.ts +1 -1
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +26 -17
- package/dist/entry.d.ts +2 -1
- package/dist/entry.d.ts.map +1 -1
- package/dist/entry.js +17 -23
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/live.d.ts +22 -0
- package/dist/live.d.ts.map +1 -0
- package/dist/live.js +123 -0
- package/dist/memory.d.ts +1 -0
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +12 -0
- package/dist/observation.d.ts +12 -0
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +84 -0
- package/dist/overlay.d.ts +0 -3
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +1 -151
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +15 -35
- package/dist/reads.js +1 -1
- package/dist/refresh.d.ts +10 -13
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +74 -70
- package/dist/replica.d.ts +55 -38
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +273 -214
- package/dist/rows.d.ts +29 -31
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +113 -69
- package/dist/save.d.ts +9 -10
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +59 -57
- package/dist/search.d.ts +2 -2
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +60 -28
- package/dist/shared.d.ts +0 -3
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +1 -31
- package/dist/store.d.ts +79 -62
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +164 -330
- package/dist/stored.d.ts +143 -0
- package/dist/stored.d.ts.map +1 -0
- package/dist/stored.js +561 -0
- package/dist/tables.d.ts +246 -168
- package/dist/tables.d.ts.map +1 -1
- package/dist/tables.js +156 -25
- package/dist/turn.d.ts +1 -1
- package/dist/turn.d.ts.map +1 -1
- package/dist/turn.js +28 -20
- package/dist/validation.d.ts +30 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +162 -0
- package/dist/windows.d.ts +2 -1
- package/dist/windows.d.ts.map +1 -1
- package/dist/windows.js +30 -25
- package/package.json +2 -3
- package/dist/read-side.d.ts +0 -27
- package/dist/read-side.d.ts.map +0 -1
- package/dist/read-side.js +0 -1179
package/dist/overlay.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { apply, frontmatterValue, parse, serialize, } from '@agentshouse/mdmodel';
|
|
2
|
-
import {
|
|
2
|
+
import { drafted, entriesIn, settling } from './shared.js';
|
|
3
3
|
import { ROW_WEIGHT } from './turn.js';
|
|
4
4
|
export function* acceptedBinaries(files) {
|
|
5
5
|
for (const [path, file] of entriesIn(files))
|
|
@@ -237,153 +237,3 @@ export function* overlaying(base, queue, unapplied) {
|
|
|
237
237
|
changes: yield* settling(staged.changes),
|
|
238
238
|
};
|
|
239
239
|
}
|
|
240
|
-
function* pathsOf(batch) {
|
|
241
|
-
const paths = new Set();
|
|
242
|
-
for (const change of batch.changes) {
|
|
243
|
-
paths.add(change.path);
|
|
244
|
-
if (change.kind === 'move')
|
|
245
|
-
paths.add(change.to);
|
|
246
|
-
yield ROW_WEIGHT;
|
|
247
|
-
}
|
|
248
|
-
return paths;
|
|
249
|
-
}
|
|
250
|
-
export function* sameText(left, right) {
|
|
251
|
-
return ((yield* differences(left.documents, right.documents)).size === 0 &&
|
|
252
|
-
(yield* differences(left.binaries, right.binaries, sameBinary)).size === 0);
|
|
253
|
-
}
|
|
254
|
-
export function* changedPaths(left, right) {
|
|
255
|
-
return new Set([
|
|
256
|
-
...(yield* differences(left.documents, right.documents)),
|
|
257
|
-
...(yield* differences(left.revisions, right.revisions)),
|
|
258
|
-
...(yield* differences(left.fileIds, right.fileIds)),
|
|
259
|
-
...(yield* differences(left.changes, right.changes, sameChange)),
|
|
260
|
-
...(yield* differences(left.binaries, right.binaries, sameBinary)),
|
|
261
|
-
]);
|
|
262
|
-
}
|
|
263
|
-
function* sameItems(left, right) {
|
|
264
|
-
if (left.length !== right.length)
|
|
265
|
-
return false;
|
|
266
|
-
for (let index = 0; index < left.length; index += 1) {
|
|
267
|
-
const item = JSON.stringify(left[index]);
|
|
268
|
-
if (item !== JSON.stringify(right[index]))
|
|
269
|
-
return false;
|
|
270
|
-
yield ROW_WEIGHT + item.length;
|
|
271
|
-
}
|
|
272
|
-
return true;
|
|
273
|
-
}
|
|
274
|
-
function* sameBatch(left, right) {
|
|
275
|
-
if (left === right)
|
|
276
|
-
return true;
|
|
277
|
-
const { changes, preconditions, ...rest } = left;
|
|
278
|
-
const { changes: others, preconditions: priors, ...held } = right;
|
|
279
|
-
return (JSON.stringify(rest) === JSON.stringify(held) &&
|
|
280
|
-
(yield* sameItems(changes, others)) &&
|
|
281
|
-
(yield* sameItems(preconditions, priors)));
|
|
282
|
-
}
|
|
283
|
-
function* replayHeads(base, batch) {
|
|
284
|
-
const heads = {
|
|
285
|
-
revisions: drafted(base.revisions),
|
|
286
|
-
fileIds: drafted(base.fileIds),
|
|
287
|
-
changes: drafted(base.changes),
|
|
288
|
-
};
|
|
289
|
-
for (const change of batch.changes) {
|
|
290
|
-
if (change.kind === 'remove') {
|
|
291
|
-
delete heads.revisions[change.path];
|
|
292
|
-
delete heads.fileIds[change.path];
|
|
293
|
-
delete heads.changes[change.path];
|
|
294
|
-
}
|
|
295
|
-
else if (change.kind === 'create') {
|
|
296
|
-
delete heads.fileIds[change.path];
|
|
297
|
-
delete heads.changes[change.path];
|
|
298
|
-
}
|
|
299
|
-
else if (change.kind === 'replace' ||
|
|
300
|
-
change.kind === 'field' ||
|
|
301
|
-
change.kind === 'section' ||
|
|
302
|
-
change.kind === 'preamble') {
|
|
303
|
-
delete heads.revisions[change.path];
|
|
304
|
-
}
|
|
305
|
-
else if (change.kind === 'binary') {
|
|
306
|
-
delete heads.revisions[change.path];
|
|
307
|
-
delete heads.changes[change.path];
|
|
308
|
-
}
|
|
309
|
-
else if (change.kind === 'move') {
|
|
310
|
-
moveHead(heads, change.path, change.to);
|
|
311
|
-
}
|
|
312
|
-
else if (change.kind === 'arrival') {
|
|
313
|
-
delete heads.revisions[change.path];
|
|
314
|
-
delete heads.fileIds[change.path];
|
|
315
|
-
delete heads.changes[change.path];
|
|
316
|
-
arrive(heads, change);
|
|
317
|
-
}
|
|
318
|
-
yield ROW_WEIGHT;
|
|
319
|
-
}
|
|
320
|
-
return {
|
|
321
|
-
revisions: yield* settling(heads.revisions),
|
|
322
|
-
fileIds: yield* settling(heads.fileIds),
|
|
323
|
-
changes: yield* settling(heads.changes),
|
|
324
|
-
};
|
|
325
|
-
}
|
|
326
|
-
function* repatched(held, paths, value) {
|
|
327
|
-
const set = [];
|
|
328
|
-
const removed = [];
|
|
329
|
-
for (const path of paths) {
|
|
330
|
-
const found = value(path);
|
|
331
|
-
if (found === undefined)
|
|
332
|
-
removed.push(path);
|
|
333
|
-
else
|
|
334
|
-
set.push([path, found]);
|
|
335
|
-
yield ROW_WEIGHT;
|
|
336
|
-
}
|
|
337
|
-
return yield* patching(held, set, removed);
|
|
338
|
-
}
|
|
339
|
-
export function* overlayChanged(base, batch, previousBase, previousBatch, previousVisible) {
|
|
340
|
-
const same = yield* sameBatch(batch, previousBatch);
|
|
341
|
-
if (same && (yield* sameText(base, previousBase))) {
|
|
342
|
-
return {
|
|
343
|
-
documents: previousVisible.documents,
|
|
344
|
-
binaries: previousVisible.binaries,
|
|
345
|
-
...(yield* replayHeads(base, batch)),
|
|
346
|
-
};
|
|
347
|
-
}
|
|
348
|
-
const affected = new Set(yield* changedPaths(base, previousBase));
|
|
349
|
-
const touched = yield* pathsOf(batch);
|
|
350
|
-
let replayed = !same;
|
|
351
|
-
if (replayed)
|
|
352
|
-
for (const path of yield* pathsOf(previousBatch))
|
|
353
|
-
affected.add(path);
|
|
354
|
-
for (const path of touched) {
|
|
355
|
-
if (affected.has(path))
|
|
356
|
-
replayed = true;
|
|
357
|
-
yield ROW_WEIGHT;
|
|
358
|
-
}
|
|
359
|
-
const restricted = {
|
|
360
|
-
documents: {},
|
|
361
|
-
revisions: {},
|
|
362
|
-
fileIds: {},
|
|
363
|
-
changes: {},
|
|
364
|
-
binaries: {},
|
|
365
|
-
};
|
|
366
|
-
for (const path of replayed ? touched : []) {
|
|
367
|
-
affected.add(path);
|
|
368
|
-
if (base.documents[path] !== undefined)
|
|
369
|
-
restricted.documents[path] = base.documents[path];
|
|
370
|
-
if (base.revisions[path] !== undefined)
|
|
371
|
-
restricted.revisions[path] = base.revisions[path];
|
|
372
|
-
if (base.fileIds[path] !== undefined)
|
|
373
|
-
restricted.fileIds[path] = base.fileIds[path];
|
|
374
|
-
if (base.changes[path] !== undefined)
|
|
375
|
-
restricted.changes[path] = base.changes[path];
|
|
376
|
-
if (base.binaries[path] !== undefined)
|
|
377
|
-
restricted.binaries[path] = base.binaries[path];
|
|
378
|
-
yield ROW_WEIGHT;
|
|
379
|
-
}
|
|
380
|
-
const staged = replayed ? yield* overlaying(restricted, [batch]) : base;
|
|
381
|
-
const from = (path) => (touched.has(path) ? staged : base);
|
|
382
|
-
return {
|
|
383
|
-
documents: yield* repatched(previousVisible.documents, affected, (path) => from(path).documents[path]),
|
|
384
|
-
revisions: yield* repatched(previousVisible.revisions, affected, (path) => from(path).revisions[path]),
|
|
385
|
-
fileIds: yield* repatched(previousVisible.fileIds, affected, (path) => from(path).fileIds[path]),
|
|
386
|
-
changes: yield* repatched(previousVisible.changes, affected, (path) => from(path).changes[path]),
|
|
387
|
-
binaries: yield* repatched(previousVisible.binaries, affected, (path) => from(path).binaries[path]),
|
|
388
|
-
};
|
|
389
|
-
}
|
package/dist/reach.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reach.d.ts","sourceRoot":"","sources":["../src/reach.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAEV,SAAS,EACT,aAAa,EAEb,YAAY,EAEb,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"reach.d.ts","sourceRoot":"","sources":["../src/reach.ts"],"names":[],"mappings":"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"}
|
package/dist/reach.js
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import { unheldView } from './conversation.js';
|
|
2
2
|
import { modelTypes, NO_MODEL } from './model.js';
|
|
3
|
-
import {
|
|
3
|
+
import { changeOf, digestApplied, digestOf, observing, } from './observation.js';
|
|
4
4
|
import { runtimeError } from './failure.js';
|
|
5
5
|
import { absentReference, failure, lockedRoom, ROOM_LOCKED, undeclared, UNREADABLE, } from './outcome.js';
|
|
6
6
|
import { beneath } from './paths.js';
|
|
7
|
-
import { reconciled } from './read-side.js';
|
|
8
7
|
import { moveTarget, readParts, staleWrite, } from './room-draft.js';
|
|
9
8
|
import { documentKey } from './rows.js';
|
|
10
9
|
import { undeclaredSearch } from './search.js';
|
|
11
|
-
import { after, stepped } from './turn.js';
|
|
12
10
|
const UNHELD_TYPES = { collection: modelTypes(NO_MODEL), typedSelection: null };
|
|
13
11
|
function unconversed(name) {
|
|
14
12
|
return () => Promise.resolve(undeclared(name));
|
|
@@ -206,47 +204,29 @@ export function narrowed(runtime, given, told) {
|
|
|
206
204
|
const locked = unlocking(plan.rooms);
|
|
207
205
|
if (locked !== null) {
|
|
208
206
|
const answer = { result: locked, keys: [] };
|
|
209
|
-
|
|
210
|
-
'pending' in held.result &&
|
|
211
|
-
JSON.stringify(held.result) === JSON.stringify(locked);
|
|
212
|
-
if (!same)
|
|
207
|
+
if (held === null || changeOf(held, answer) !== null)
|
|
213
208
|
deliver(answer);
|
|
214
|
-
held = answer;
|
|
209
|
+
held = digestOf(answer);
|
|
215
210
|
return () => { };
|
|
216
211
|
}
|
|
217
212
|
let first = true;
|
|
218
213
|
let open = true;
|
|
219
|
-
let order = undefined;
|
|
220
214
|
const heard = (message) => {
|
|
221
215
|
if (!first) {
|
|
222
|
-
held =
|
|
216
|
+
held = digestApplied(held, message);
|
|
223
217
|
deliver(message);
|
|
224
218
|
return;
|
|
225
219
|
}
|
|
226
220
|
first = false;
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
}
|
|
232
|
-
return after(stepped(reconciled(held, message)), (next) => {
|
|
233
|
-
if (!open || next === null)
|
|
234
|
-
return;
|
|
235
|
-
held = next.keyed;
|
|
236
|
-
deliver(next.message);
|
|
237
|
-
});
|
|
221
|
+
const change = held === null ? message : changeOf(held, message);
|
|
222
|
+
held = digestOf(message);
|
|
223
|
+
if (change !== null)
|
|
224
|
+
deliver(change);
|
|
238
225
|
};
|
|
239
226
|
const current = { ...plan, reach: planReach(reach), locked: runtime.lockedRooms() };
|
|
240
227
|
const stop = runtime.watchPlan(current, (message) => {
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
const ended = queued.catch(() => { });
|
|
244
|
-
order = ended;
|
|
245
|
-
void ended.then(() => {
|
|
246
|
-
if (order === ended)
|
|
247
|
-
order = undefined;
|
|
248
|
-
});
|
|
249
|
-
}
|
|
228
|
+
if (open)
|
|
229
|
+
heard(message);
|
|
250
230
|
});
|
|
251
231
|
return () => {
|
|
252
232
|
open = false;
|
|
@@ -310,7 +290,7 @@ export function narrowed(runtime, given, told) {
|
|
|
310
290
|
throw unreached(room);
|
|
311
291
|
if (runtime.locked(room))
|
|
312
292
|
return { outcome: 'refused', code: ROOM_LOCKED, retryable: true };
|
|
313
|
-
const held = roomDrafts.map(({ path }) => md.roomDraft.read(room, path)?.parts.move);
|
|
293
|
+
const held = (await Promise.all(roomDrafts.map(({ path }) => md.roomDraft.read(room, path)))).map((draft) => draft?.parts.move);
|
|
314
294
|
const outside = roomDrafts.find(({ path }, at) => !covers(reach, room, path) || !moves(reach, room, held[at]));
|
|
315
295
|
if (outside !== undefined) {
|
|
316
296
|
return { outcome: 'refused', code: 'stale', retryable: false, file: outside.path };
|
|
@@ -373,19 +353,19 @@ export function narrowed(runtime, given, told) {
|
|
|
373
353
|
return bytes;
|
|
374
354
|
},
|
|
375
355
|
},
|
|
376
|
-
reached: (room, roomVersion, path) => (path === undefined ? wholly(reach, room) : covers(reach, room, path)) &&
|
|
356
|
+
reached: async (room, roomVersion, path) => (path === undefined ? wholly(reach, room) : covers(reach, room, path)) &&
|
|
377
357
|
!runtime.locked(room) &&
|
|
378
|
-
md.reached(room, roomVersion, path),
|
|
358
|
+
(await md.reached(room, roomVersion, path)),
|
|
379
359
|
log: () => (reach === null ? md.log() : ''),
|
|
380
360
|
cleanUp: () => (reach === null ? md.cleanUp() : Promise.reject(deviceUnreached())),
|
|
381
361
|
roomDraft: {
|
|
382
362
|
list: () => md.roomDraft.list().then((drafts) => unlocked(draftsWithin(reach, drafts))),
|
|
383
|
-
read(room, path) {
|
|
363
|
+
async read(room, path) {
|
|
384
364
|
if (!covers(reach, room, path))
|
|
385
365
|
return null;
|
|
386
366
|
if (runtime.locked(room))
|
|
387
367
|
throw lockedError(room);
|
|
388
|
-
return shownDraft(reach, md.roomDraft.read(room, path));
|
|
368
|
+
return shownDraft(reach, await md.roomDraft.read(room, path));
|
|
389
369
|
},
|
|
390
370
|
async write(room, path, revision, parts) {
|
|
391
371
|
const move = readParts(parts).move;
|
package/dist/reads.js
CHANGED
|
@@ -5,7 +5,7 @@ function declaredAs(declaration) {
|
|
|
5
5
|
return declared;
|
|
6
6
|
}
|
|
7
7
|
function sameHeld(one, other) {
|
|
8
|
-
return one
|
|
8
|
+
return one === other;
|
|
9
9
|
}
|
|
10
10
|
function failed(answer) {
|
|
11
11
|
return answer?.kind === 'transport-uncertainty';
|
package/dist/refresh.d.ts
CHANGED
|
@@ -1,24 +1,21 @@
|
|
|
1
1
|
import type { AdapterFailure, Authorization, RetryableRefusal } from './adapter.js';
|
|
2
2
|
import type { Reads, Remodel } from './bootstrap.js';
|
|
3
|
-
import {
|
|
4
|
-
import type {
|
|
5
|
-
import
|
|
3
|
+
import type { ReplicaRecord } from './replica.js';
|
|
4
|
+
import type { RefreshedPage } from './store.js';
|
|
5
|
+
import type { HeldEntry } from './tables.js';
|
|
6
|
+
import { type Unconfirmed } from './transfer.js';
|
|
6
7
|
export type Advancement = {
|
|
7
8
|
kind: 'still-current';
|
|
8
9
|
} | {
|
|
9
10
|
kind: 'advanced';
|
|
10
11
|
record: ReplicaRecord;
|
|
12
|
+
changed: ReadonlySet<string>;
|
|
11
13
|
} | {
|
|
12
14
|
kind: 'beyond-horizon';
|
|
13
15
|
} | RetryableRefusal | Unconfirmed | AdapterFailure;
|
|
14
|
-
export type
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
} | {
|
|
20
|
-
kind: 'beyond-horizon';
|
|
21
|
-
} | RetryableRefusal | Unconfirmed | Refused | AdapterFailure;
|
|
22
|
-
export declare function advancement(adapter: Reads, authorization: Authorization, held: ReplicaRecord, remodel: Remodel, continuing: () => boolean): Promise<Advancement>;
|
|
23
|
-
export declare function refreshRoom(adapter: Reads, authorization: Authorization, confirmed: ConfirmedLayer, remodel: Remodel, continuing: () => boolean): Promise<RefreshOutcome>;
|
|
16
|
+
export type Refreshing = {
|
|
17
|
+
prior(paths: readonly string[]): Promise<ReadonlyMap<string, HeldEntry>>;
|
|
18
|
+
stage(page: RefreshedPage): Promise<boolean>;
|
|
19
|
+
};
|
|
20
|
+
export declare function advancement(adapter: Reads, authorization: Authorization, held: ReplicaRecord, remodel: Remodel, continuing: () => boolean, staging: Refreshing): Promise<Advancement>;
|
|
24
21
|
//# sourceMappingURL=refresh.d.ts.map
|
package/dist/refresh.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../src/refresh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAe,gBAAgB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../src/refresh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAe,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACjG,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAE9D,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,GACzE;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B,gBAAgB,GAChB,WAAW,GACX,cAAc,CAAC;AAEnB,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IACzE,KAAK,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9C,CAAC;AAkEF,wBAAsB,WAAW,CAC/B,OAAO,EAAE,KAAK,EACd,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,OAAO,EACzB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,WAAW,CAAC,CA+CtB"}
|
package/dist/refresh.js
CHANGED
|
@@ -1,9 +1,65 @@
|
|
|
1
|
-
import { acceptedBinaries } from './overlay.js';
|
|
2
|
-
import { readStaged } from './replica.js';
|
|
3
|
-
import { drafted, entriesIn, settling } from './shared.js';
|
|
4
|
-
import { ROW_WEIGHT, stepped } from './turn.js';
|
|
5
1
|
import { unconfirmed } from './transfer.js';
|
|
6
|
-
|
|
2
|
+
async function pageOf(page, roomVersion, staging) {
|
|
3
|
+
const removed = new Set(page.removals);
|
|
4
|
+
const documents = Object.keys(page.documents).filter((path) => !removed.has(path));
|
|
5
|
+
const binaries = Object.keys(page.binaryFiles).filter((path) => !removed.has(path));
|
|
6
|
+
const written = new Set([...documents, ...binaries]);
|
|
7
|
+
const others = [
|
|
8
|
+
...new Set([
|
|
9
|
+
...Object.keys(page.revisions),
|
|
10
|
+
...Object.keys(page.fileIds ?? {}),
|
|
11
|
+
...Object.keys(page.changes),
|
|
12
|
+
]),
|
|
13
|
+
].filter((path) => !written.has(path) && !removed.has(path));
|
|
14
|
+
const asked = [
|
|
15
|
+
...documents.filter((path) => page.revisions[path] === undefined),
|
|
16
|
+
...binaries.filter((path) => page.revisions[path] === undefined),
|
|
17
|
+
...others,
|
|
18
|
+
];
|
|
19
|
+
const prior = asked.length === 0 ? new Map() : await staging.prior(asked);
|
|
20
|
+
const entries = [];
|
|
21
|
+
for (const path of documents) {
|
|
22
|
+
entries.push({
|
|
23
|
+
path,
|
|
24
|
+
content: page.documents[path],
|
|
25
|
+
binary: null,
|
|
26
|
+
revision: page.revisions[path] ?? prior.get(path)?.revision ?? null,
|
|
27
|
+
fileId: page.fileIds?.[path] ?? null,
|
|
28
|
+
change: page.changes[path] ?? null,
|
|
29
|
+
written: roomVersion,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
for (const path of binaries) {
|
|
33
|
+
entries.push({
|
|
34
|
+
path,
|
|
35
|
+
content: null,
|
|
36
|
+
binary: { state: 'accepted', ...page.binaryFiles[path] },
|
|
37
|
+
revision: page.revisions[path] ?? prior.get(path)?.revision ?? null,
|
|
38
|
+
fileId: page.fileIds?.[path] ?? null,
|
|
39
|
+
change: page.changes[path] ?? null,
|
|
40
|
+
written: null,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
for (const path of others) {
|
|
44
|
+
const held = prior.get(path);
|
|
45
|
+
if (held === undefined)
|
|
46
|
+
continue;
|
|
47
|
+
const { type: _type, ...kept } = held;
|
|
48
|
+
entries.push({
|
|
49
|
+
...kept,
|
|
50
|
+
revision: page.revisions[path] ?? held.revision,
|
|
51
|
+
fileId: page.fileIds?.[path] ?? held.fileId,
|
|
52
|
+
change: page.changes[path] ?? held.change,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
entries,
|
|
57
|
+
removals: page.removals,
|
|
58
|
+
folders: page.folders ?? [],
|
|
59
|
+
folderRemovals: page.folderRemovals ?? [],
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export async function advancement(adapter, authorization, held, remodel, continuing, staging) {
|
|
7
63
|
const locator = held.locator;
|
|
8
64
|
const fromRoomVersion = held.roomVersion;
|
|
9
65
|
const first = await adapter.refresh(authorization, {
|
|
@@ -18,58 +74,17 @@ export async function advancement(adapter, authorization, held, remodel, continu
|
|
|
18
74
|
collection: held.model,
|
|
19
75
|
selection: held.selectionModel,
|
|
20
76
|
});
|
|
21
|
-
const
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
delete binaries[path];
|
|
30
|
-
delete fileIds[path];
|
|
31
|
-
delete changes[path];
|
|
32
|
-
written[path] = roomVersion;
|
|
33
|
-
yield ROW_WEIGHT;
|
|
34
|
-
}
|
|
35
|
-
for (const [path] of entriesIn(page.binaryFiles)) {
|
|
36
|
-
delete documents[path];
|
|
37
|
-
delete fileIds[path];
|
|
38
|
-
delete changes[path];
|
|
39
|
-
delete written[path];
|
|
40
|
-
yield ROW_WEIGHT;
|
|
41
|
-
}
|
|
42
|
-
for (const [path, content] of entriesIn(page.documents)) {
|
|
43
|
-
documents[path] = content;
|
|
44
|
-
yield ROW_WEIGHT + content.length;
|
|
45
|
-
}
|
|
46
|
-
for (const [path, binary] of acceptedBinaries(page.binaryFiles)) {
|
|
47
|
-
binaries[path] = binary;
|
|
48
|
-
yield ROW_WEIGHT;
|
|
49
|
-
}
|
|
50
|
-
for (const [path, revision] of entriesIn(page.revisions)) {
|
|
51
|
-
revisions[path] = revision;
|
|
52
|
-
yield ROW_WEIGHT;
|
|
53
|
-
}
|
|
54
|
-
for (const [path, fileId] of entriesIn(page.fileIds ?? {})) {
|
|
55
|
-
fileIds[path] = fileId;
|
|
56
|
-
yield ROW_WEIGHT;
|
|
57
|
-
}
|
|
58
|
-
for (const [path, change] of entriesIn(page.changes)) {
|
|
59
|
-
changes[path] = change;
|
|
60
|
-
yield ROW_WEIGHT;
|
|
61
|
-
}
|
|
62
|
-
for (const path of page.removals) {
|
|
63
|
-
delete documents[path];
|
|
64
|
-
delete revisions[path];
|
|
65
|
-
delete fileIds[path];
|
|
66
|
-
delete changes[path];
|
|
67
|
-
delete written[path];
|
|
68
|
-
delete binaries[path];
|
|
69
|
-
yield ROW_WEIGHT;
|
|
70
|
-
}
|
|
77
|
+
const changed = new Set();
|
|
78
|
+
const staged = async (page) => {
|
|
79
|
+
const read = await pageOf(page, roomVersion, staging);
|
|
80
|
+
for (const { path } of read.entries)
|
|
81
|
+
changed.add(path);
|
|
82
|
+
for (const path of read.removals)
|
|
83
|
+
changed.add(path);
|
|
84
|
+
return staging.stage(read);
|
|
71
85
|
};
|
|
72
|
-
await
|
|
86
|
+
if (!(await staged(first)))
|
|
87
|
+
return unconfirmed;
|
|
73
88
|
let pageToken = first.pageToken;
|
|
74
89
|
while (pageToken !== undefined) {
|
|
75
90
|
if (!continuing())
|
|
@@ -86,7 +101,8 @@ export async function advancement(adapter, authorization, held, remodel, continu
|
|
|
86
101
|
return page;
|
|
87
102
|
if (page.roomVersion !== roomVersion)
|
|
88
103
|
return unconfirmed;
|
|
89
|
-
await
|
|
104
|
+
if (!(await staged(page)))
|
|
105
|
+
return unconfirmed;
|
|
90
106
|
pageToken = page.pageToken;
|
|
91
107
|
}
|
|
92
108
|
return {
|
|
@@ -96,19 +112,7 @@ export async function advancement(adapter, authorization, held, remodel, continu
|
|
|
96
112
|
model: models.collection,
|
|
97
113
|
selectionModel: models.selection,
|
|
98
114
|
roomVersion,
|
|
99
|
-
documents: await stepped(settling(documents)),
|
|
100
|
-
binaries: await stepped(settling(binaries)),
|
|
101
|
-
revisions: await stepped(settling(revisions)),
|
|
102
|
-
fileIds: await stepped(settling(fileIds)),
|
|
103
|
-
changes: await stepped(settling(changes)),
|
|
104
|
-
written: await stepped(settling(written)),
|
|
105
115
|
},
|
|
116
|
+
changed,
|
|
106
117
|
};
|
|
107
118
|
}
|
|
108
|
-
export async function refreshRoom(adapter, authorization, confirmed, remodel, continuing) {
|
|
109
|
-
const advanced = await advancement(adapter, authorization, confirmed.record, remodel, continuing);
|
|
110
|
-
if (advanced.kind !== 'advanced')
|
|
111
|
-
return advanced;
|
|
112
|
-
const staged = await readStaged(advanced.record, confirmed);
|
|
113
|
-
return staged.kind === 'staged' ? { kind: 'advanced', confirmed: staged.confirmed } : staged;
|
|
114
|
-
}
|
package/dist/replica.d.ts
CHANGED
|
@@ -1,51 +1,68 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { MutationResult, OperationScopes, ReplicaAdmission, TypedSelection } from './adapter.js';
|
|
2
|
+
import { type ChangeBatch, type Precondition } from './change.js';
|
|
2
3
|
import { type Collection, type Composition } from './collection.js';
|
|
4
|
+
import type { ModelState } from './model.js';
|
|
3
5
|
import { type Layer } from './overlay.js';
|
|
4
|
-
import type {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
import type { HeldEntry, OverlayEntry, StoredEntry } from './tables.js';
|
|
7
|
+
export type ReplicaRecord = {
|
|
8
|
+
readonly locator: string;
|
|
9
|
+
readonly name: string;
|
|
10
|
+
readonly handle: string;
|
|
11
|
+
readonly operations: OperationScopes;
|
|
12
|
+
readonly replica: ReplicaAdmission;
|
|
13
|
+
readonly model: ModelState;
|
|
14
|
+
readonly typedSelection: TypedSelection | null;
|
|
15
|
+
readonly selectionModel: ModelState;
|
|
16
|
+
readonly providerOwnedPaths: readonly string[];
|
|
17
|
+
readonly roomVersion: string;
|
|
18
|
+
readonly transfer: string;
|
|
19
|
+
readonly key: number;
|
|
20
|
+
};
|
|
21
|
+
export type HeldReplica = {
|
|
22
|
+
readonly record: ReplicaRecord;
|
|
23
|
+
readonly queue: readonly ChangeBatch[];
|
|
24
|
+
readonly overlaid: ReadonlySet<string>;
|
|
25
|
+
readonly count: number;
|
|
26
|
+
readonly confirmed: number;
|
|
11
27
|
};
|
|
12
28
|
export type VisibleLayer = Layer & {
|
|
13
|
-
collection: Collection;
|
|
29
|
+
readonly collection: Collection;
|
|
14
30
|
};
|
|
15
|
-
export type
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
} | Refused;
|
|
19
|
-
export type Replica = {
|
|
20
|
-
confirmed: ConfirmedLayer;
|
|
21
|
-
queue: readonly ChangeBatch[];
|
|
22
|
-
visible: VisibleLayer;
|
|
23
|
-
replay: readonly ReplayStep[];
|
|
31
|
+
export type Slice = Layer & {
|
|
32
|
+
readonly written: Readonly<Record<string, string>>;
|
|
33
|
+
readonly held: ReadonlySet<string>;
|
|
24
34
|
};
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
35
|
+
export declare function compositionOf(record: Pick<ReplicaRecord, 'model' | 'typedSelection' | 'selectionModel'>): Composition;
|
|
36
|
+
export declare function sameMembership(record: Pick<ReplicaRecord, 'typedSelection'>, other: Pick<ReplicaRecord, 'typedSelection'>): boolean;
|
|
37
|
+
export declare function storedRecord(record: ReplicaRecord): string;
|
|
38
|
+
export declare function slicing(entries: readonly HeldEntry[], paths: Iterable<string>): Generator<number, Slice, void>;
|
|
39
|
+
export declare function entryAt(layer: Layer & {
|
|
40
|
+
readonly written?: Readonly<Record<string, string>>;
|
|
41
|
+
}, path: string): StoredEntry | null;
|
|
42
|
+
export declare function slicingWith(slice: Slice, set: readonly StoredEntry[], removed: readonly string[]): Generator<number, Slice, void>;
|
|
43
|
+
export declare function touchedBy(queue: readonly ChangeBatch[]): Set<string>;
|
|
44
|
+
export declare function movedBy(queue: readonly ChangeBatch[], locator: string): Set<string>;
|
|
45
|
+
export type Replayed = {
|
|
46
|
+
readonly visible: VisibleLayer;
|
|
47
|
+
readonly touched: ReadonlySet<string>;
|
|
31
48
|
};
|
|
32
|
-
export declare function
|
|
33
|
-
export declare function
|
|
34
|
-
export declare function
|
|
35
|
-
export declare function
|
|
36
|
-
export declare function readReclassified(record: ReplicaRecord, previous: ConfirmedLayer): Later<Staged | {
|
|
37
|
-
kind: 'deferred';
|
|
38
|
-
}>;
|
|
39
|
-
type Accepted = Extract<MutationResult, {
|
|
40
|
-
kind: 'accepted';
|
|
41
|
-
}>;
|
|
42
|
-
export declare function applyReturned(confirmed: ConfirmedLayer, submitted: ChangeBatch, accepted: Accepted, roomVersion: string, writtenAt: string): Later<Staged>;
|
|
43
|
-
export declare function replicating(confirmed: ConfirmedLayer, queue: readonly ChangeBatch[], previous?: Replica): Generator<number, Replica, void>;
|
|
44
|
-
export declare function landed(batch: ChangeBatch, confirmed: ConfirmedLayer, current?: Readonly<Record<string, string>>): boolean;
|
|
49
|
+
export declare function replaying(confirmed: Slice, queue: readonly ChangeBatch[], locator: string, composition: Composition): Generator<number, Replayed, void>;
|
|
50
|
+
export declare function overlayOf(visible: Layer, touched: Iterable<string>): Generator<number, OverlayEntry[], void>;
|
|
51
|
+
export declare function holds(layer: Layer, preconditions: readonly Precondition[]): boolean;
|
|
52
|
+
export declare function landed(batch: ChangeBatch, confirmed: Layer, current?: Readonly<Record<string, string>>): boolean;
|
|
45
53
|
export type Standing = {
|
|
46
54
|
readonly withdrawn: readonly ChangeBatch[];
|
|
47
55
|
readonly kept: readonly ChangeBatch[];
|
|
48
56
|
};
|
|
49
|
-
export declare function standing(confirmed:
|
|
57
|
+
export declare function standing(confirmed: Slice, queue: readonly ChangeBatch[], withdrawable: (batch: ChangeBatch) => boolean, local: boolean, locator: string, composition: Composition): Generator<number, Standing, void>;
|
|
58
|
+
type Accepted = Extract<MutationResult, {
|
|
59
|
+
kind: 'accepted';
|
|
60
|
+
}>;
|
|
61
|
+
export type Returned = {
|
|
62
|
+
readonly set: readonly StoredEntry[];
|
|
63
|
+
readonly removed: readonly string[];
|
|
64
|
+
};
|
|
65
|
+
export declare function returnedPaths(submitted: ChangeBatch, accepted: Accepted): Set<string>;
|
|
66
|
+
export declare function returning(confirmed: Slice, submitted: ChangeBatch, accepted: Accepted, writtenAt: string): Generator<number, Returned, void>;
|
|
50
67
|
export {};
|
|
51
68
|
//# sourceMappingURL=replica.d.ts.map
|
package/dist/replica.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replica.d.ts","sourceRoot":"","sources":["../src/replica.ts"],"names":[],"mappings":"AACA,OAAO,EAAmC,KAAK,WAAW,
|
|
1
|
+
{"version":3,"file":"replica.d.ts","sourceRoot":"","sources":["../src/replica.ts"],"names":[],"mappings":"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"}
|