@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.
Files changed (97) hide show
  1. package/AGENTS.md +14 -10
  2. package/dist/adapter.d.ts +14 -5
  3. package/dist/adapter.d.ts.map +1 -1
  4. package/dist/bootstrap.d.ts +13 -6
  5. package/dist/bootstrap.d.ts.map +1 -1
  6. package/dist/bootstrap.js +86 -88
  7. package/dist/chain.d.ts +11 -0
  8. package/dist/chain.d.ts.map +1 -0
  9. package/dist/chain.js +64 -0
  10. package/dist/change-set.d.ts +5 -9
  11. package/dist/change-set.d.ts.map +1 -1
  12. package/dist/change-set.js +10 -86
  13. package/dist/chat/list.d.ts.map +1 -1
  14. package/dist/chat/list.js +1 -1
  15. package/dist/chat/message.d.ts.map +1 -1
  16. package/dist/chat/message.js +8 -1
  17. package/dist/chat/messages.d.ts +1 -0
  18. package/dist/chat/messages.d.ts.map +1 -1
  19. package/dist/chat/messages.js +9 -1
  20. package/dist/chat/provider.d.ts +2 -0
  21. package/dist/chat/provider.d.ts.map +1 -1
  22. package/dist/chat/provider.js +17 -1
  23. package/dist/client.d.ts +1 -0
  24. package/dist/client.d.ts.map +1 -1
  25. package/dist/client.js +1 -0
  26. package/dist/collection.d.ts +5 -19
  27. package/dist/collection.d.ts.map +1 -1
  28. package/dist/collection.js +22 -360
  29. package/dist/compile.d.ts +11 -0
  30. package/dist/compile.d.ts.map +1 -0
  31. package/dist/compile.js +712 -0
  32. package/dist/connection.d.ts +2 -2
  33. package/dist/connection.d.ts.map +1 -1
  34. package/dist/connection.js +1396 -624
  35. package/dist/conversation.d.ts +1 -1
  36. package/dist/conversation.d.ts.map +1 -1
  37. package/dist/conversation.js +26 -17
  38. package/dist/entry.d.ts +2 -1
  39. package/dist/entry.d.ts.map +1 -1
  40. package/dist/entry.js +17 -23
  41. package/dist/index.d.ts +1 -1
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/live.d.ts +22 -0
  44. package/dist/live.d.ts.map +1 -0
  45. package/dist/live.js +123 -0
  46. package/dist/memory.d.ts +1 -0
  47. package/dist/memory.d.ts.map +1 -1
  48. package/dist/memory.js +12 -0
  49. package/dist/observation.d.ts +12 -0
  50. package/dist/observation.d.ts.map +1 -1
  51. package/dist/observation.js +84 -0
  52. package/dist/overlay.d.ts +0 -3
  53. package/dist/overlay.d.ts.map +1 -1
  54. package/dist/overlay.js +1 -151
  55. package/dist/reach.d.ts.map +1 -1
  56. package/dist/reach.js +15 -35
  57. package/dist/reads.js +1 -1
  58. package/dist/refresh.d.ts +10 -13
  59. package/dist/refresh.d.ts.map +1 -1
  60. package/dist/refresh.js +74 -70
  61. package/dist/replica.d.ts +55 -38
  62. package/dist/replica.d.ts.map +1 -1
  63. package/dist/replica.js +273 -214
  64. package/dist/rows.d.ts +29 -31
  65. package/dist/rows.d.ts.map +1 -1
  66. package/dist/rows.js +113 -69
  67. package/dist/save.d.ts +9 -10
  68. package/dist/save.d.ts.map +1 -1
  69. package/dist/save.js +59 -57
  70. package/dist/search.d.ts +2 -2
  71. package/dist/search.d.ts.map +1 -1
  72. package/dist/search.js +60 -28
  73. package/dist/shared.d.ts +0 -3
  74. package/dist/shared.d.ts.map +1 -1
  75. package/dist/shared.js +1 -31
  76. package/dist/store.d.ts +79 -62
  77. package/dist/store.d.ts.map +1 -1
  78. package/dist/store.js +164 -330
  79. package/dist/stored.d.ts +143 -0
  80. package/dist/stored.d.ts.map +1 -0
  81. package/dist/stored.js +561 -0
  82. package/dist/tables.d.ts +246 -168
  83. package/dist/tables.d.ts.map +1 -1
  84. package/dist/tables.js +156 -25
  85. package/dist/turn.d.ts +1 -1
  86. package/dist/turn.d.ts.map +1 -1
  87. package/dist/turn.js +28 -20
  88. package/dist/validation.d.ts +30 -0
  89. package/dist/validation.d.ts.map +1 -0
  90. package/dist/validation.js +162 -0
  91. package/dist/windows.d.ts +2 -1
  92. package/dist/windows.d.ts.map +1 -1
  93. package/dist/windows.js +30 -25
  94. package/package.json +2 -3
  95. package/dist/read-side.d.ts +0 -27
  96. package/dist/read-side.d.ts.map +0 -1
  97. 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 { differences, drafted, entriesIn, patching, settling } from './shared.js';
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
- }
@@ -1 +1 @@
1
- {"version":3,"file":"reach.d.ts","sourceRoot":"","sources":["../src/reach.ts"],"names":[],"mappings":"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"}
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 { applied, observing } from './observation.js';
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
- const same = held !== null &&
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 = applied(held, message);
216
+ held = digestApplied(held, message);
223
217
  deliver(message);
224
218
  return;
225
219
  }
226
220
  first = false;
227
- if (held === null) {
228
- held = message;
229
- deliver(message);
230
- return;
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
- const queued = after(order, () => (open ? heard(message) : undefined));
242
- if (queued instanceof Promise) {
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?.documents === other?.documents && one?.revisions === other?.revisions;
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 { type ConfirmedLayer } from './replica.js';
4
- import type { ReplicaRecord } from './store.js';
5
- import { type Refused, type Unconfirmed } from './transfer.js';
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 RefreshOutcome = {
15
- kind: 'still-current';
16
- } | {
17
- kind: 'advanced';
18
- confirmed: ConfirmedLayer;
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
@@ -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;AAEjG,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAAe,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5E,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B,gBAAgB,GAChB,WAAW,GACX,cAAc,CAAC;AAEnB,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,cAAc,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B,gBAAgB,GAChB,WAAW,GACX,OAAO,GACP,cAAc,CAAC;AAEnB,wBAAsB,WAAW,CAC/B,OAAO,EAAE,KAAK,EACd,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,OAAO,GACxB,OAAO,CAAC,WAAW,CAAC,CAgGtB;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,KAAK,EACd,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,OAAO,GACxB,OAAO,CAAC,cAAc,CAAC,CAKzB"}
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
- export async function advancement(adapter, authorization, held, remodel, continuing) {
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 documents = drafted(held.documents);
22
- const revisions = drafted(held.revisions);
23
- const fileIds = drafted(held.fileIds);
24
- const changes = drafted(held.changes);
25
- const written = drafted(held.written);
26
- const binaries = drafted(held.binaries);
27
- const stage = function* (page) {
28
- for (const [path] of entriesIn(page.documents)) {
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 stepped(stage(first));
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 stepped(stage(page));
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 { type ChangeBatch } from './change.js';
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 { MutationResult } from './adapter.js';
5
- import type { ReplicaRecord } from './store.js';
6
- import type { Refused } from './transfer.js';
7
- import { type Later } from './turn.js';
8
- export type ConfirmedLayer = {
9
- record: ReplicaRecord;
10
- collection: Collection;
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 Staged = {
16
- kind: 'staged';
17
- confirmed: ConfirmedLayer;
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
- type ReplayStep = {
26
- id: string;
27
- before: Layer;
28
- after: Layer;
29
- effective: ChangeBatch;
30
- collection?: Collection;
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 compositionOf(record: ReplicaRecord): Composition;
33
- export declare function confirmedOf(record: ReplicaRecord, previous?: ConfirmedLayer): Later<ConfirmedLayer>;
34
- export declare function sameMembership(record: ReplicaRecord, other: ReplicaRecord): boolean;
35
- export declare function readStaged(staged: ReplicaRecord, previous?: ConfirmedLayer): Later<Staged>;
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: ConfirmedLayer, queue: readonly ChangeBatch[], withdrawable: (batch: ChangeBatch) => boolean, local: boolean): Generator<number, Standing, void>;
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
@@ -1 +1 @@
1
- {"version":3,"file":"replica.d.ts","sourceRoot":"","sources":["../src/replica.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"replica.d.ts","sourceRoot":"","sources":["../src/replica.ts"],"names":[],"mappings":"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"}