@agentshouse/mdruntime 0.1.0-c3903a68dcbbf → 0.1.0-c4478f1a5ac2a

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 (192) hide show
  1. package/AGENTS.md +196 -97
  2. package/README.md +22 -12
  3. package/dist/adapter.d.ts +149 -64
  4. package/dist/adapter.d.ts.map +1 -1
  5. package/dist/adapter.js +1 -9
  6. package/dist/attached-model.d.ts +11 -0
  7. package/dist/attached-model.d.ts.map +1 -0
  8. package/dist/attached-model.js +47 -0
  9. package/dist/attempt.d.ts +16 -0
  10. package/dist/attempt.d.ts.map +1 -0
  11. package/dist/attempt.js +70 -0
  12. package/dist/binary.d.ts +23 -0
  13. package/dist/binary.d.ts.map +1 -0
  14. package/dist/binary.js +8 -0
  15. package/dist/bootstrap.d.ts +20 -6
  16. package/dist/bootstrap.d.ts.map +1 -1
  17. package/dist/bootstrap.js +110 -38
  18. package/dist/change-set.d.ts +2 -0
  19. package/dist/change-set.d.ts.map +1 -1
  20. package/dist/change-set.js +49 -21
  21. package/dist/change.d.ts +15 -0
  22. package/dist/change.d.ts.map +1 -1
  23. package/dist/change.js +26 -1
  24. package/dist/chat/acts.d.ts +33 -0
  25. package/dist/chat/acts.d.ts.map +1 -0
  26. package/dist/chat/acts.js +36 -0
  27. package/dist/chat/context.d.ts +3 -0
  28. package/dist/chat/context.d.ts.map +1 -0
  29. package/dist/chat/context.js +10 -0
  30. package/dist/chat/input.d.ts +9 -0
  31. package/dist/chat/input.d.ts.map +1 -0
  32. package/dist/chat/input.js +99 -0
  33. package/dist/chat/kit.d.ts +60 -0
  34. package/dist/chat/kit.d.ts.map +1 -0
  35. package/dist/chat/kit.js +123 -0
  36. package/dist/chat/lasting.d.ts +6 -0
  37. package/dist/chat/lasting.d.ts.map +1 -0
  38. package/dist/chat/lasting.js +19 -0
  39. package/dist/chat/list.d.ts +26 -0
  40. package/dist/chat/list.d.ts.map +1 -0
  41. package/dist/chat/list.js +62 -0
  42. package/dist/chat/markdown.d.ts +20 -0
  43. package/dist/chat/markdown.d.ts.map +1 -0
  44. package/dist/chat/markdown.js +188 -0
  45. package/dist/chat/message.d.ts +6 -0
  46. package/dist/chat/message.d.ts.map +1 -0
  47. package/dist/chat/message.js +192 -0
  48. package/dist/chat/messages.d.ts +21 -0
  49. package/dist/chat/messages.d.ts.map +1 -0
  50. package/dist/chat/messages.js +151 -0
  51. package/dist/chat/name.d.ts +6 -0
  52. package/dist/chat/name.d.ts.map +1 -0
  53. package/dist/chat/name.js +37 -0
  54. package/dist/chat/opened.d.ts +11 -0
  55. package/dist/chat/opened.d.ts.map +1 -0
  56. package/dist/chat/opened.js +17 -0
  57. package/dist/chat/overlay.d.ts +31 -0
  58. package/dist/chat/overlay.d.ts.map +1 -0
  59. package/dist/chat/overlay.js +97 -0
  60. package/dist/chat/parts.d.ts +57 -0
  61. package/dist/chat/parts.d.ts.map +1 -0
  62. package/dist/chat/parts.js +119 -0
  63. package/dist/chat/process.d.ts +20 -0
  64. package/dist/chat/process.d.ts.map +1 -0
  65. package/dist/chat/process.js +32 -0
  66. package/dist/chat/provider.d.ts +63 -0
  67. package/dist/chat/provider.d.ts.map +1 -0
  68. package/dist/chat/provider.js +620 -0
  69. package/dist/chat/question.d.ts +9 -0
  70. package/dist/chat/question.d.ts.map +1 -0
  71. package/dist/chat/question.js +80 -0
  72. package/dist/chat/questions.d.ts +31 -0
  73. package/dist/chat/questions.d.ts.map +1 -0
  74. package/dist/chat/questions.js +111 -0
  75. package/dist/chat/read.d.ts +5 -0
  76. package/dist/chat/read.d.ts.map +1 -0
  77. package/dist/chat/read.js +13 -0
  78. package/dist/chat/ready.d.ts +33 -0
  79. package/dist/chat/ready.d.ts.map +1 -0
  80. package/dist/chat/ready.js +91 -0
  81. package/dist/chat/style.d.ts +4 -0
  82. package/dist/chat/style.d.ts.map +1 -0
  83. package/dist/chat/style.js +302 -0
  84. package/dist/chat.d.ts +14 -0
  85. package/dist/chat.d.ts.map +1 -0
  86. package/dist/chat.js +8 -0
  87. package/dist/client.d.ts +23 -19
  88. package/dist/client.d.ts.map +1 -1
  89. package/dist/client.js +69 -32
  90. package/dist/collection.d.ts +21 -14
  91. package/dist/collection.d.ts.map +1 -1
  92. package/dist/collection.js +270 -32
  93. package/dist/connection.d.ts +36 -38
  94. package/dist/connection.d.ts.map +1 -1
  95. package/dist/connection.js +1605 -841
  96. package/dist/conversation.d.ts +43 -19
  97. package/dist/conversation.d.ts.map +1 -1
  98. package/dist/conversation.js +523 -210
  99. package/dist/entry.d.ts +17 -0
  100. package/dist/entry.d.ts.map +1 -0
  101. package/dist/entry.js +156 -0
  102. package/dist/expectation.d.ts +21 -0
  103. package/dist/expectation.d.ts.map +1 -0
  104. package/dist/expectation.js +70 -0
  105. package/dist/failure.d.ts +13 -0
  106. package/dist/failure.d.ts.map +1 -0
  107. package/dist/failure.js +19 -0
  108. package/dist/fence.d.ts +6 -0
  109. package/dist/fence.d.ts.map +1 -0
  110. package/dist/fence.js +10 -0
  111. package/dist/host.d.ts +11 -3
  112. package/dist/host.d.ts.map +1 -1
  113. package/dist/host.js +54 -69
  114. package/dist/identity.d.ts +5 -0
  115. package/dist/identity.d.ts.map +1 -1
  116. package/dist/identity.js +19 -1
  117. package/dist/index.d.ts +12 -7
  118. package/dist/index.d.ts.map +1 -1
  119. package/dist/index.js +4 -1
  120. package/dist/memory.d.ts +15 -7
  121. package/dist/memory.d.ts.map +1 -1
  122. package/dist/memory.js +147 -47
  123. package/dist/model.d.ts +14 -12
  124. package/dist/model.d.ts.map +1 -1
  125. package/dist/model.js +15 -3
  126. package/dist/observation.d.ts +6 -1
  127. package/dist/observation.d.ts.map +1 -1
  128. package/dist/observation.js +38 -17
  129. package/dist/open.d.ts +2 -0
  130. package/dist/open.d.ts.map +1 -0
  131. package/dist/open.js +1 -0
  132. package/dist/outcome.d.ts +35 -22
  133. package/dist/outcome.d.ts.map +1 -1
  134. package/dist/outcome.js +42 -1
  135. package/dist/overlay.d.ts +15 -3
  136. package/dist/overlay.d.ts.map +1 -1
  137. package/dist/overlay.js +94 -77
  138. package/dist/paths.d.ts +0 -1
  139. package/dist/paths.d.ts.map +1 -1
  140. package/dist/paths.js +0 -16
  141. package/dist/query.d.ts +40 -6
  142. package/dist/query.d.ts.map +1 -1
  143. package/dist/query.js +78 -36
  144. package/dist/reach.d.ts +42 -0
  145. package/dist/reach.d.ts.map +1 -0
  146. package/dist/reach.js +294 -0
  147. package/dist/react.d.ts +41 -0
  148. package/dist/react.d.ts.map +1 -0
  149. package/dist/react.js +64 -0
  150. package/dist/read-side.d.ts +16 -5
  151. package/dist/read-side.d.ts.map +1 -1
  152. package/dist/read-side.js +405 -137
  153. package/dist/recovery.d.ts +25 -0
  154. package/dist/recovery.d.ts.map +1 -0
  155. package/dist/recovery.js +197 -0
  156. package/dist/refresh.d.ts +12 -1
  157. package/dist/refresh.d.ts.map +1 -1
  158. package/dist/refresh.js +45 -36
  159. package/dist/replica.d.ts +10 -7
  160. package/dist/replica.d.ts.map +1 -1
  161. package/dist/replica.js +122 -79
  162. package/dist/room-draft.d.ts +29 -9
  163. package/dist/room-draft.d.ts.map +1 -1
  164. package/dist/room-draft.js +137 -26
  165. package/dist/rows.d.ts +10 -14
  166. package/dist/rows.d.ts.map +1 -1
  167. package/dist/rows.js +85 -50
  168. package/dist/save.d.ts +32 -3
  169. package/dist/save.d.ts.map +1 -1
  170. package/dist/save.js +465 -93
  171. package/dist/search.d.ts +31 -8
  172. package/dist/search.d.ts.map +1 -1
  173. package/dist/search.js +109 -44
  174. package/dist/shared.d.ts +11 -0
  175. package/dist/shared.d.ts.map +1 -0
  176. package/dist/shared.js +368 -0
  177. package/dist/status.d.ts +2 -2
  178. package/dist/status.d.ts.map +1 -1
  179. package/dist/status.js +0 -8
  180. package/dist/store.d.ts +71 -32
  181. package/dist/store.d.ts.map +1 -1
  182. package/dist/store.js +509 -221
  183. package/dist/turn.d.ts +7 -0
  184. package/dist/turn.d.ts.map +1 -0
  185. package/dist/turn.js +45 -0
  186. package/dist/wire.d.ts +58 -19
  187. package/dist/wire.d.ts.map +1 -1
  188. package/dist/wire.js +65 -67
  189. package/package.json +31 -7
  190. package/dist/attachment.d.ts +0 -3
  191. package/dist/attachment.d.ts.map +0 -1
  192. package/dist/attachment.js +0 -8
package/dist/replica.js CHANGED
@@ -1,80 +1,127 @@
1
- import { parse } from '@agentshouse/mdmodel';
2
- import { immutable } from './change.js';
3
- import { parseCollection, readCollection, validateCollection, } from './collection.js';
4
- import { overlay, overlayChanged, sameLayerText } from './overlay.js';
1
+ import { equalValue, parse } from '@agentshouse/mdmodel';
2
+ import { immutable, landing } from './change.js';
3
+ import { changedCleanly, collectionOf, unreadable, validateCollection, } from './collection.js';
4
+ import { acceptedBinaries, overlay, overlayChanged, sameLayerText, } from './overlay.js';
5
5
  import { providerRewritten } from './save.js';
6
- import { equalValue } from './room-draft.js';
6
+ import { drafted, patched, settled, shared } from './shared.js';
7
7
  export function compositionOf(record) {
8
8
  return {
9
9
  model: record.model,
10
10
  selection: record.typedSelection === null
11
11
  ? null
12
12
  : { roots: record.typedSelection.roots, model: record.selectionModel },
13
- untypedFolders: record.untypedFolders,
14
13
  };
15
14
  }
16
- export function readConfirmed(record, previous) {
17
- const read = readCollection(record.documents, compositionOf(record), previous === undefined
18
- ? undefined
19
- : { text: previous.record.documents, collection: previous.collection });
20
- return read.kind === 'read'
21
- ? { kind: 'staged', confirmed: { record, collection: read.collection } }
22
- : read;
15
+ function held(record) {
16
+ const documents = shared(record.documents);
17
+ const binaries = shared(record.binaries);
18
+ const revisions = shared(record.revisions);
19
+ const changes = shared(record.changes);
20
+ const written = shared(record.written);
21
+ return documents === record.documents &&
22
+ binaries === record.binaries &&
23
+ revisions === record.revisions &&
24
+ changes === record.changes &&
25
+ written === record.written
26
+ ? record
27
+ : { ...record, documents, binaries, revisions, changes, written };
28
+ }
29
+ export function confirmedOf(record, previous) {
30
+ const kept = held(record);
31
+ return {
32
+ record: kept,
33
+ collection: collectionOf(kept.documents, compositionOf(kept), previous?.collection),
34
+ };
23
35
  }
24
36
  export function sameMembership(record, other) {
25
- return (JSON.stringify(record.untypedFolders) === JSON.stringify(other.untypedFolders) &&
26
- JSON.stringify(record.typedSelection?.roots ?? null) ===
27
- JSON.stringify(other.typedSelection?.roots ?? null));
37
+ return (JSON.stringify(record.typedSelection?.roots ?? null) ===
38
+ JSON.stringify(other.typedSelection?.roots ?? null));
28
39
  }
29
- export function readStaged(record, previous) {
30
- if ((record.model.status === 'current' || record.selectionModel.status === 'current') &&
31
- (previous === undefined ||
32
- !sameLayerText(record, previous.record) ||
33
- record.model !== previous.record.model ||
34
- record.selectionModel !== previous.record.selectionModel)) {
35
- const verdict = validateCollection(record.documents, record.binaryTargets, compositionOf(record));
40
+ function cleanly(record, previous) {
41
+ if (previous === undefined)
42
+ return false;
43
+ const before = previous.record;
44
+ return changedCleanly({ text: record.documents, binaries: record.binaries }, { text: before.documents, binaries: before.binaries, composition: compositionOf(before) }, compositionOf(record));
45
+ }
46
+ export function readStaged(staged, previous) {
47
+ const record = held(staged);
48
+ const textChanged = previous === undefined || !sameLayerText(record, previous.record);
49
+ const modeled = record.model.status !== 'unavailable' || record.selectionModel.status !== 'unavailable';
50
+ if (modeled &&
51
+ (textChanged ||
52
+ record.model !== previous?.record.model ||
53
+ record.selectionModel !== previous?.record.selectionModel) &&
54
+ !cleanly(record, previous)) {
55
+ const verdict = validateCollection(record.documents, Object.keys(record.binaries), compositionOf(record));
36
56
  if (verdict.verdict === 'refuse' && verdict.rule !== 'model-unavailable') {
37
57
  return { kind: 'refused', refusal: verdict };
38
58
  }
59
+ if (verdict.verdict === 'refuse') {
60
+ const refused = unreadable(record.documents, previous?.record.documents);
61
+ if (refused !== null)
62
+ return refused;
63
+ }
64
+ }
65
+ else if (textChanged) {
66
+ const refused = unreadable(record.documents, previous?.record.documents);
67
+ if (refused !== null)
68
+ return refused;
39
69
  }
40
- return readConfirmed(record, previous);
70
+ return { kind: 'staged', confirmed: confirmedOf(record, previous) };
41
71
  }
42
72
  export function readReclassified(record, previous) {
43
- const verdict = validateCollection(record.documents, record.binaryTargets, compositionOf(record));
73
+ const verdict = validateCollection(record.documents, Object.keys(record.binaries), compositionOf(record));
44
74
  if (verdict.verdict !== 'refuse')
45
- return readConfirmed(record, previous);
75
+ return { kind: 'staged', confirmed: confirmedOf(record, previous) };
46
76
  return verdict.rule === 'model-unavailable'
47
77
  ? { kind: 'deferred' }
48
78
  : { kind: 'refused', refusal: verdict };
49
79
  }
50
- export function applyReturned(confirmed, documents, revisions, removals, roomVersion) {
51
- const nextDocuments = { ...confirmed.record.documents, ...documents };
52
- const nextRevisions = { ...confirmed.record.revisions, ...revisions };
53
- const nextChanges = { ...confirmed.record.changes };
54
- const nextWritten = {
55
- ...confirmed.record.written,
56
- ...Object.fromEntries(Object.keys(documents).map((path) => [path, roomVersion])),
57
- };
58
- const binaryTargets = new Set(confirmed.record.binaryTargets);
80
+ function returnedBinaries(held, submitted, accepted) {
81
+ const binaries = drafted(held);
82
+ for (const change of submitted.changes) {
83
+ if (change.kind !== 'move')
84
+ continue;
85
+ const moved = binaries[change.path];
86
+ if (moved === undefined || accepted.revisions[change.to] === undefined)
87
+ continue;
88
+ binaries[change.to] = moved;
89
+ delete binaries[change.path];
90
+ }
91
+ Object.assign(binaries, acceptedBinaries(accepted.binaryFiles ?? {}));
92
+ for (const path of accepted.removals)
93
+ delete binaries[path];
94
+ return settled(binaries);
95
+ }
96
+ export function applyReturned(confirmed, submitted, accepted, roomVersion, writtenAt) {
97
+ const { documents, revisions, changes, removals } = accepted;
98
+ const nextDocuments = drafted(confirmed.record.documents);
99
+ const nextRevisions = drafted(confirmed.record.revisions);
100
+ const nextChanges = drafted(confirmed.record.changes);
101
+ const nextWritten = drafted(confirmed.record.written);
102
+ Object.assign(nextDocuments, documents);
103
+ Object.assign(nextRevisions, revisions);
104
+ for (const path of Object.keys(documents))
105
+ nextWritten[path] = writtenAt;
59
106
  for (const [path, revision] of Object.entries(revisions)) {
60
107
  if (confirmed.record.revisions[path] !== revision)
61
108
  delete nextChanges[path];
62
109
  }
110
+ Object.assign(nextChanges, changes);
63
111
  for (const path of removals) {
64
112
  delete nextDocuments[path];
65
113
  delete nextRevisions[path];
66
114
  delete nextChanges[path];
67
115
  delete nextWritten[path];
68
- binaryTargets.delete(path);
69
116
  }
70
117
  return readStaged({
71
118
  ...confirmed.record,
72
119
  roomVersion,
73
- documents: nextDocuments,
74
- revisions: nextRevisions,
75
- changes: nextChanges,
76
- written: nextWritten,
77
- binaryTargets: [...binaryTargets].sort(),
120
+ documents: settled(nextDocuments),
121
+ revisions: settled(nextRevisions),
122
+ changes: settled(nextChanges),
123
+ written: settled(nextWritten),
124
+ binaries: returnedBinaries(confirmed.record.binaries, submitted, accepted),
78
125
  }, confirmed);
79
126
  }
80
127
  function predicted(confirmed, batches, previous) {
@@ -88,8 +135,6 @@ function predicted(confirmed, batches, previous) {
88
135
  const hasMove = batch.changes.some((change) => change.kind === 'move');
89
136
  const reuseRewrite = old?.collection !== undefined &&
90
137
  sameLayerText(before, old.before) &&
91
- JSON.stringify(old.collection.composition.untypedFolders) ===
92
- JSON.stringify(composition.untypedFolders) &&
93
138
  old.collection.composition.model === composition.model &&
94
139
  old.collection.composition.selection?.model === composition.selection?.model &&
95
140
  JSON.stringify(old.collection.composition.selection?.roots) ===
@@ -97,9 +142,7 @@ function predicted(confirmed, batches, previous) {
97
142
  const collection = hasMove
98
143
  ? reuseRewrite
99
144
  ? old.collection
100
- : parseCollection(before.documents, composition, old?.collection === undefined
101
- ? { text: confirmed.record.documents, collection: confirmed.collection }
102
- : { text: old.before.documents, collection: old.collection })
145
+ : collectionOf(before.documents, composition, old?.collection ?? confirmed.collection)
103
146
  : undefined;
104
147
  const effective = collection === undefined
105
148
  ? batch
@@ -120,7 +163,7 @@ function predicted(confirmed, batches, previous) {
120
163
  }
121
164
  return { layer, replay };
122
165
  }
123
- export function replicaOf(confirmed, queue, rewriting, previous) {
166
+ export function replicaOf(confirmed, queue, previous) {
124
167
  const batches = Object.freeze(queue.map(immutable));
125
168
  if (batches.length === 0) {
126
169
  return {
@@ -128,7 +171,7 @@ export function replicaOf(confirmed, queue, rewriting, previous) {
128
171
  queue: batches,
129
172
  visible: {
130
173
  documents: confirmed.record.documents,
131
- binaryTargets: confirmed.record.binaryTargets,
174
+ binaries: confirmed.record.binaries,
132
175
  revisions: confirmed.record.revisions,
133
176
  changes: confirmed.record.changes,
134
177
  collection: confirmed.collection,
@@ -136,26 +179,19 @@ export function replicaOf(confirmed, queue, rewriting, previous) {
136
179
  replay: [],
137
180
  };
138
181
  }
139
- const predictedState = rewriting === 'provider' ? predicted(confirmed, batches, previous) : null;
140
- const layer = rewriting === 'provider'
141
- ? predictedState.layer
142
- : previous === undefined
143
- ? overlay(confirmed.record, batches)
144
- : overlayChanged(confirmed.record, batches, previous.confirmed.record, previous.queue, previous.visible);
182
+ const { layer, replay } = predicted(confirmed, batches, previous);
145
183
  return {
146
184
  confirmed,
147
185
  queue: batches,
148
- replay: predictedState?.replay ?? [],
186
+ replay,
149
187
  visible: {
150
188
  ...layer,
151
- collection: parseCollection(layer.documents, compositionOf(confirmed.record), previous === undefined
152
- ? undefined
153
- : { text: previous.visible.documents, collection: previous.visible.collection }),
189
+ collection: collectionOf(layer.documents, compositionOf(confirmed.record), previous?.visible.collection ?? confirmed.collection),
154
190
  },
155
191
  };
156
192
  }
157
193
  function present(layer, path) {
158
- return layer.documents[path] !== undefined || layer.binaryTargets.includes(path);
194
+ return layer.documents[path] !== undefined || layer.binaries[path] !== undefined;
159
195
  }
160
196
  function holds(layer, preconditions) {
161
197
  const parsed = new Map();
@@ -176,6 +212,8 @@ function holds(layer, preconditions) {
176
212
  if (precondition.kind === 'revision') {
177
213
  return present(layer, path) && layer.revisions[path] === precondition.revision;
178
214
  }
215
+ if (precondition.kind === 'content')
216
+ return layer.documents[path] === precondition.content;
179
217
  const document = documentAt(path);
180
218
  if (document === null)
181
219
  return false;
@@ -220,36 +258,33 @@ function effects(change) {
220
258
  { kind: 'present', path: change.to },
221
259
  ];
222
260
  }
261
+ if (change.kind === 'binary')
262
+ return [{ kind: 'present', path }];
223
263
  return [{ kind: 'absent', path }];
224
264
  }
225
- function after(changes, index, path) {
226
- let at = path;
227
- for (const change of changes.slice(index + 1)) {
228
- if (change.path !== at)
229
- continue;
230
- if (change.kind === 'remove')
231
- return null;
232
- if (change.kind === 'move')
233
- at = change.to;
234
- }
235
- return at;
236
- }
237
- export function landed(batch, confirmed) {
238
- const layer = confirmed.record;
265
+ export function landed(batch, confirmed, current = {}) {
266
+ const layer = {
267
+ ...confirmed.record,
268
+ documents: patched(confirmed.record.documents, Object.entries(current)),
269
+ };
239
270
  return batch.changes.every((change, index) => {
240
271
  if (change.kind === 'replace' || (change.kind === 'create' && 'content' in change)) {
241
- const at = after(batch.changes, index, change.path);
272
+ const at = landing(batch.changes, index, change.path);
242
273
  return at === null || layer.documents[at] === change.content;
243
274
  }
275
+ if (change.kind === 'binary') {
276
+ const at = landing(batch.changes, index, change.path);
277
+ return at === null || layer.binaries[at]?.sha256 === change.sha256;
278
+ }
244
279
  return effects(change).every((effect) => {
245
280
  if (effect.kind === 'absent')
246
281
  return holds(layer, [effect]);
247
- const at = after(batch.changes, index, effect.path);
282
+ const at = landing(batch.changes, index, effect.path);
248
283
  return at === null || holds(layer, [{ ...effect, path: at }]);
249
284
  });
250
285
  });
251
286
  }
252
- export function withdrawals(confirmed, queue, withdrawable, rewriting) {
287
+ export function withdrawals(confirmed, queue, withdrawable, local) {
253
288
  if (!queue.some(withdrawable))
254
289
  return [];
255
290
  const composition = compositionOf(confirmed.record);
@@ -260,13 +295,21 @@ export function withdrawals(confirmed, queue, withdrawable, rewriting) {
260
295
  withdrawn.push(batch);
261
296
  continue;
262
297
  }
263
- const effective = rewriting === 'provider' && batch.changes.some((change) => change.kind === 'move')
298
+ const effective = batch.changes.some((change) => change.kind === 'move')
264
299
  ? providerRewritten(batch, {
265
300
  ...layer,
266
- collection: parseCollection(layer.documents, composition),
301
+ collection: collectionOf(layer.documents, composition),
267
302
  })
268
303
  : batch;
269
- layer = overlay(layer, [effective]);
304
+ let unapplied = false;
305
+ const next = overlay(layer, [effective], () => {
306
+ unapplied = true;
307
+ });
308
+ if (local && unapplied) {
309
+ withdrawn.push(batch);
310
+ continue;
311
+ }
312
+ layer = next;
270
313
  }
271
314
  return withdrawn;
272
315
  }
@@ -1,4 +1,5 @@
1
1
  import type { ProviderRefusal } from './adapter.js';
2
+ import type { Open } from './open.js';
2
3
  import type { Change, Precondition } from './change.js';
3
4
  import type { VisibleLayer } from './replica.js';
4
5
  export type FieldValue = {
@@ -36,6 +37,17 @@ export type RoomDraftParts = {
36
37
  readonly removal?: {
37
38
  readonly base?: string | null;
38
39
  };
40
+ readonly file?: {
41
+ readonly blob: Blob;
42
+ };
43
+ };
44
+ export type HeldFile = {
45
+ readonly blob: Blob;
46
+ readonly localId: string;
47
+ readonly byteLength: number;
48
+ readonly mediaType: string;
49
+ readonly sha256: string;
50
+ readonly base: string | null;
39
51
  };
40
52
  type HeldParts = {
41
53
  readonly fields?: Readonly<Record<string, {
@@ -62,6 +74,7 @@ type HeldParts = {
62
74
  readonly removal?: {
63
75
  readonly base: string | null;
64
76
  };
77
+ readonly file?: HeldFile;
65
78
  };
66
79
  type ChangedUnderneath = {
67
80
  readonly fields?: Readonly<Record<string, FieldValue>>;
@@ -71,14 +84,12 @@ type ChangedUnderneath = {
71
84
  readonly creation?: string;
72
85
  readonly move?: string | null;
73
86
  readonly removal?: string | null;
87
+ readonly file?: string | null;
74
88
  };
75
- export type ReturnReason = (ProviderRefusal & {
76
- readonly kind: 'conflicted' | 'rejected';
77
- }) | {
78
- readonly kind: 'expired';
79
- } | {
80
- readonly kind: 'withdrawn';
89
+ export type ReturnReason = ProviderRefusal & {
90
+ readonly kind: 'conflicted' | 'rejected' | 'expired' | 'withdrawn';
81
91
  };
92
+ export declare function returnedBy(kind: 'expired' | 'withdrawn'): ReturnReason;
82
93
  export type RoomDraft = {
83
94
  readonly room: string;
84
95
  readonly path: string;
@@ -92,11 +103,14 @@ export type RoomDraftWrite = {
92
103
  readonly roomDraft: RoomDraft | null;
93
104
  } | {
94
105
  readonly outcome: 'stale';
106
+ readonly code: string;
107
+ readonly retryable: boolean;
95
108
  readonly current: RoomDraft | null;
96
109
  };
110
+ export declare function staleWrite(current: RoomDraft | null): RoomDraftWrite;
97
111
  export type ChangedPart = {
98
112
  readonly path: string;
99
- readonly part: 'field' | 'section' | 'preamble' | 'markdown' | 'creation' | 'move' | 'removal';
113
+ readonly part: Open<'field' | 'section' | 'preamble' | 'markdown' | 'creation' | 'move' | 'removal' | 'file'>;
100
114
  readonly name?: string;
101
115
  };
102
116
  export type RoomDraftRecord = {
@@ -111,14 +125,20 @@ export type SavedDraft = {
111
125
  readonly parts: HeldParts;
112
126
  };
113
127
  export declare function readParts(value: unknown): RoomDraftParts;
114
- export declare function held(current: HeldParts | undefined, parts: RoomDraftParts): HeldParts;
115
- export declare function equalValue(left: unknown, right: unknown): boolean;
128
+ export declare function held(current: HeldParts | undefined, parts: RoomDraftParts, file?: HeldFile): HeldParts;
116
129
  export declare function underneath(parts: HeldParts, path: string, visible: VisibleLayer | undefined): ChangedUnderneath;
130
+ export declare function heldFile(blob: Blob, base: string | null): Promise<HeldFile>;
131
+ export declare function binaryBase(visible: VisibleLayer | undefined, path: string): string | null;
117
132
  export declare function changedParts(path: string, report: ChangedUnderneath): readonly ChangedPart[];
118
133
  export declare function returnedInto(existing: HeldParts | undefined, returned: HeldParts): HeldParts;
134
+ export declare function moveTarget(move: {
135
+ readonly to: string;
136
+ }): string;
119
137
  export declare function changesOf(path: string, parts: HeldParts): {
120
138
  changes: readonly Change[];
121
139
  bases: readonly Precondition[];
122
140
  };
141
+ export declare function joinedDraft(carried: SavedDraft, saved: readonly SavedDraft[]): SavedDraft;
142
+ export declare function withdrawnDrafts(drafts: readonly SavedDraft[], changes: readonly Change[]): readonly SavedDraft[];
123
143
  export {};
124
144
  //# sourceMappingURL=room-draft.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"room-draft.d.ts","sourceRoot":"","sources":["../src/room-draft.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"room-draft.d.ts","sourceRoot":"","sources":["../src/room-draft.ts"],"names":[],"mappings":"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"}