@agentshouse/mdruntime 0.1.0-c99e5271060cd → 0.1.0-c9b1e59e5baeb

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 (202) hide show
  1. package/AGENTS.md +274 -244
  2. package/README.md +18 -8
  3. package/dist/adapter.d.ts +98 -20
  4. package/dist/adapter.d.ts.map +1 -1
  5. package/dist/attempt.d.ts +16 -0
  6. package/dist/attempt.d.ts.map +1 -0
  7. package/dist/attempt.js +70 -0
  8. package/dist/binary.d.ts +23 -0
  9. package/dist/binary.d.ts.map +1 -0
  10. package/dist/binary.js +8 -0
  11. package/dist/bootstrap.d.ts +3 -2
  12. package/dist/bootstrap.d.ts.map +1 -1
  13. package/dist/bootstrap.js +38 -15
  14. package/dist/change-set.d.ts +7 -2
  15. package/dist/change-set.d.ts.map +1 -1
  16. package/dist/change-set.js +45 -13
  17. package/dist/change.d.ts +11 -0
  18. package/dist/change.d.ts.map +1 -1
  19. package/dist/change.js +26 -1
  20. package/dist/chat/acts.d.ts +33 -0
  21. package/dist/chat/acts.d.ts.map +1 -0
  22. package/dist/chat/acts.js +36 -0
  23. package/dist/chat/context.d.ts +3 -0
  24. package/dist/chat/context.d.ts.map +1 -0
  25. package/dist/chat/context.js +10 -0
  26. package/dist/chat/earlier.d.ts +10 -0
  27. package/dist/chat/earlier.d.ts.map +1 -0
  28. package/dist/chat/earlier.js +54 -0
  29. package/dist/chat/input.d.ts +9 -0
  30. package/dist/chat/input.d.ts.map +1 -0
  31. package/dist/chat/input.js +99 -0
  32. package/dist/chat/kit.d.ts +61 -0
  33. package/dist/chat/kit.d.ts.map +1 -0
  34. package/dist/chat/kit.js +123 -0
  35. package/dist/chat/lasting.d.ts +6 -0
  36. package/dist/chat/lasting.d.ts.map +1 -0
  37. package/dist/chat/lasting.js +19 -0
  38. package/dist/chat/list.d.ts +28 -0
  39. package/dist/chat/list.d.ts.map +1 -0
  40. package/dist/chat/list.js +99 -0
  41. package/dist/chat/markdown.d.ts +21 -0
  42. package/dist/chat/markdown.d.ts.map +1 -0
  43. package/dist/chat/markdown.js +246 -0
  44. package/dist/chat/message.d.ts +6 -0
  45. package/dist/chat/message.d.ts.map +1 -0
  46. package/dist/chat/message.js +199 -0
  47. package/dist/chat/messages.d.ts +22 -0
  48. package/dist/chat/messages.d.ts.map +1 -0
  49. package/dist/chat/messages.js +175 -0
  50. package/dist/chat/name.d.ts +6 -0
  51. package/dist/chat/name.d.ts.map +1 -0
  52. package/dist/chat/name.js +37 -0
  53. package/dist/chat/opened.d.ts +11 -0
  54. package/dist/chat/opened.d.ts.map +1 -0
  55. package/dist/chat/opened.js +17 -0
  56. package/dist/chat/overlay.d.ts +32 -0
  57. package/dist/chat/overlay.d.ts.map +1 -0
  58. package/dist/chat/overlay.js +107 -0
  59. package/dist/chat/parts.d.ts +57 -0
  60. package/dist/chat/parts.d.ts.map +1 -0
  61. package/dist/chat/parts.js +119 -0
  62. package/dist/chat/pieces.d.ts +62 -0
  63. package/dist/chat/pieces.d.ts.map +1 -0
  64. package/dist/chat/pieces.js +1110 -0
  65. package/dist/chat/process.d.ts +20 -0
  66. package/dist/chat/process.d.ts.map +1 -0
  67. package/dist/chat/process.js +32 -0
  68. package/dist/chat/provider.d.ts +64 -0
  69. package/dist/chat/provider.d.ts.map +1 -0
  70. package/dist/chat/provider.js +637 -0
  71. package/dist/chat/question.d.ts +9 -0
  72. package/dist/chat/question.d.ts.map +1 -0
  73. package/dist/chat/question.js +69 -0
  74. package/dist/chat/questions.d.ts +31 -0
  75. package/dist/chat/questions.d.ts.map +1 -0
  76. package/dist/chat/questions.js +111 -0
  77. package/dist/chat/read.d.ts +5 -0
  78. package/dist/chat/read.d.ts.map +1 -0
  79. package/dist/chat/read.js +13 -0
  80. package/dist/chat/ready.d.ts +34 -0
  81. package/dist/chat/ready.d.ts.map +1 -0
  82. package/dist/chat/ready.js +91 -0
  83. package/dist/chat/steady.d.ts +3 -0
  84. package/dist/chat/steady.d.ts.map +1 -0
  85. package/dist/chat/steady.js +26 -0
  86. package/dist/chat/style.d.ts +4 -0
  87. package/dist/chat/style.d.ts.map +1 -0
  88. package/dist/chat/style.js +302 -0
  89. package/dist/chat.d.ts +14 -0
  90. package/dist/chat.d.ts.map +1 -0
  91. package/dist/chat.js +8 -0
  92. package/dist/client.d.ts +26 -11
  93. package/dist/client.d.ts.map +1 -1
  94. package/dist/client.js +27 -4
  95. package/dist/collection.d.ts +20 -5
  96. package/dist/collection.d.ts.map +1 -1
  97. package/dist/collection.js +309 -33
  98. package/dist/connection.d.ts +41 -13
  99. package/dist/connection.d.ts.map +1 -1
  100. package/dist/connection.js +1819 -407
  101. package/dist/conversation.d.ts +34 -9
  102. package/dist/conversation.d.ts.map +1 -1
  103. package/dist/conversation.js +552 -168
  104. package/dist/durability.d.ts +7 -1
  105. package/dist/durability.d.ts.map +1 -1
  106. package/dist/entry.d.ts +17 -0
  107. package/dist/entry.d.ts.map +1 -0
  108. package/dist/entry.js +157 -0
  109. package/dist/expectation.d.ts +21 -0
  110. package/dist/expectation.d.ts.map +1 -0
  111. package/dist/expectation.js +70 -0
  112. package/dist/fence.d.ts +6 -0
  113. package/dist/fence.d.ts.map +1 -0
  114. package/dist/fence.js +10 -0
  115. package/dist/host.d.ts +15 -3
  116. package/dist/host.d.ts.map +1 -1
  117. package/dist/host.js +99 -13
  118. package/dist/identity.d.ts +4 -0
  119. package/dist/identity.d.ts.map +1 -1
  120. package/dist/identity.js +12 -0
  121. package/dist/index.d.ts +15 -8
  122. package/dist/index.d.ts.map +1 -1
  123. package/dist/index.js +5 -0
  124. package/dist/memory.d.ts +10 -4
  125. package/dist/memory.d.ts.map +1 -1
  126. package/dist/memory.js +64 -17
  127. package/dist/model.d.ts +4 -2
  128. package/dist/model.d.ts.map +1 -1
  129. package/dist/model.js +10 -1
  130. package/dist/observation.d.ts +7 -2
  131. package/dist/observation.d.ts.map +1 -1
  132. package/dist/observation.js +29 -12
  133. package/dist/outcome.d.ts +17 -1
  134. package/dist/outcome.d.ts.map +1 -1
  135. package/dist/outcome.js +10 -0
  136. package/dist/overlay.d.ts +18 -5
  137. package/dist/overlay.d.ts.map +1 -1
  138. package/dist/overlay.js +238 -160
  139. package/dist/query.d.ts +58 -4
  140. package/dist/query.d.ts.map +1 -1
  141. package/dist/query.js +36 -7
  142. package/dist/reach.d.ts +8 -3
  143. package/dist/reach.d.ts.map +1 -1
  144. package/dist/reach.js +55 -8
  145. package/dist/react.d.ts +10 -7
  146. package/dist/react.d.ts.map +1 -1
  147. package/dist/react.js +7 -17
  148. package/dist/read-side.d.ts +16 -7
  149. package/dist/read-side.d.ts.map +1 -1
  150. package/dist/read-side.js +495 -102
  151. package/dist/readiness.d.ts +53 -0
  152. package/dist/readiness.d.ts.map +1 -0
  153. package/dist/readiness.js +33 -0
  154. package/dist/reads.d.ts +11 -0
  155. package/dist/reads.d.ts.map +1 -0
  156. package/dist/reads.js +98 -0
  157. package/dist/recovery.d.ts +25 -0
  158. package/dist/recovery.d.ts.map +1 -0
  159. package/dist/recovery.js +197 -0
  160. package/dist/refresh.d.ts +4 -4
  161. package/dist/refresh.d.ts.map +1 -1
  162. package/dist/refresh.js +51 -30
  163. package/dist/replica.d.ts +15 -6
  164. package/dist/replica.d.ts.map +1 -1
  165. package/dist/replica.js +137 -66
  166. package/dist/room-draft.d.ts +32 -3
  167. package/dist/room-draft.d.ts.map +1 -1
  168. package/dist/room-draft.js +129 -12
  169. package/dist/rows.d.ts +8 -13
  170. package/dist/rows.d.ts.map +1 -1
  171. package/dist/rows.js +12 -13
  172. package/dist/save.d.ts +32 -2
  173. package/dist/save.d.ts.map +1 -1
  174. package/dist/save.js +495 -97
  175. package/dist/search.d.ts +49 -6
  176. package/dist/search.d.ts.map +1 -1
  177. package/dist/search.js +192 -47
  178. package/dist/seed.d.ts +16 -0
  179. package/dist/seed.d.ts.map +1 -0
  180. package/dist/seed.js +75 -0
  181. package/dist/shared.d.ts +15 -0
  182. package/dist/shared.d.ts.map +1 -0
  183. package/dist/shared.js +398 -0
  184. package/dist/status.d.ts +4 -1
  185. package/dist/status.d.ts.map +1 -1
  186. package/dist/status.js +0 -8
  187. package/dist/store.d.ts +71 -21
  188. package/dist/store.d.ts.map +1 -1
  189. package/dist/store.js +625 -320
  190. package/dist/turn.d.ts +9 -0
  191. package/dist/turn.d.ts.map +1 -0
  192. package/dist/turn.js +64 -0
  193. package/dist/windows.d.ts +26 -0
  194. package/dist/windows.d.ts.map +1 -0
  195. package/dist/windows.js +93 -0
  196. package/dist/wire.d.ts +153 -30
  197. package/dist/wire.d.ts.map +1 -1
  198. package/dist/wire.js +53 -29
  199. package/package.json +26 -14
  200. package/dist/attachment.d.ts +0 -3
  201. package/dist/attachment.d.ts.map +0 -1
  202. package/dist/attachment.js +0 -8
package/dist/replica.js CHANGED
@@ -1,9 +1,10 @@
1
1
  import { equalValue, parse } from '@agentshouse/mdmodel';
2
- import { immutable } from './change.js';
3
- import { collectionOf, unreadable, validateCollection, } from './collection.js';
4
- import { overlay, overlayChanged, sameLayerText } from './overlay.js';
2
+ import { immutable, landing } from './change.js';
3
+ import { changedCleanly, collecting, unreadable, validateCollection, } from './collection.js';
4
+ import { acceptedBinaries, overlayChanged, overlaying, sameText, } from './overlay.js';
5
5
  import { providerRewritten } from './save.js';
6
- import { declaredAttachments } from './attachment.js';
6
+ import { drafted, patched, settled, sharing } from './shared.js';
7
+ import { finished, stepped } from './turn.js';
7
8
  export function compositionOf(record) {
8
9
  return {
9
10
  model: record.model,
@@ -12,57 +13,112 @@ export function compositionOf(record) {
12
13
  : { roots: record.typedSelection.roots, model: record.selectionModel },
13
14
  };
14
15
  }
16
+ function* holding(record) {
17
+ const documents = yield* sharing(record.documents);
18
+ const binaries = yield* sharing(record.binaries);
19
+ const revisions = yield* sharing(record.revisions);
20
+ const fileIds = yield* sharing(record.fileIds);
21
+ const changes = yield* sharing(record.changes);
22
+ const written = yield* sharing(record.written);
23
+ return documents === record.documents &&
24
+ binaries === record.binaries &&
25
+ revisions === record.revisions &&
26
+ fileIds === record.fileIds &&
27
+ changes === record.changes &&
28
+ written === record.written
29
+ ? record
30
+ : { ...record, documents, binaries, revisions, fileIds, changes, written };
31
+ }
15
32
  export function confirmedOf(record, previous) {
33
+ return finished(confirming(record, previous));
34
+ }
35
+ function* confirming(record, previous) {
36
+ const kept = yield* holding(record);
16
37
  return {
17
- record,
18
- collection: collectionOf(record.documents, compositionOf(record), previous?.collection),
38
+ record: kept,
39
+ collection: yield* collecting(kept.documents, compositionOf(kept), previous?.collection),
19
40
  };
20
41
  }
21
42
  export function sameMembership(record, other) {
22
43
  return (JSON.stringify(record.typedSelection?.roots ?? null) ===
23
44
  JSON.stringify(other.typedSelection?.roots ?? null));
24
45
  }
25
- export function readStaged(record, previous) {
26
- const textChanged = previous === undefined || !sameLayerText(record, previous.record);
46
+ function* cleanly(record, previous) {
47
+ if (previous === undefined)
48
+ return false;
49
+ const before = previous.record;
50
+ return yield* changedCleanly({ text: record.documents, binaries: record.binaries }, { text: before.documents, binaries: before.binaries, composition: compositionOf(before) }, compositionOf(record));
51
+ }
52
+ function* staging(staged, previous) {
53
+ const record = yield* holding(staged);
54
+ const textChanged = previous === undefined || !(yield* sameText(record, previous.record));
27
55
  const modeled = record.model.status !== 'unavailable' || record.selectionModel.status !== 'unavailable';
28
56
  if (modeled &&
29
57
  (textChanged ||
30
58
  record.model !== previous?.record.model ||
31
- record.selectionModel !== previous?.record.selectionModel)) {
32
- const verdict = validateCollection(record.documents, record.binaryTargets, compositionOf(record));
59
+ record.selectionModel !== previous?.record.selectionModel) &&
60
+ !(yield* cleanly(record, previous))) {
61
+ const verdict = yield* validateCollection(record.documents, Object.keys(record.binaries), compositionOf(record));
33
62
  if (verdict.verdict === 'refuse' && verdict.rule !== 'model-unavailable') {
34
63
  return { kind: 'refused', refusal: verdict };
35
64
  }
36
65
  if (verdict.verdict === 'refuse') {
37
- const refused = unreadable(record.documents, previous?.record.documents);
66
+ const refused = yield* unreadable(record.documents, previous?.record.documents);
38
67
  if (refused !== null)
39
68
  return refused;
40
69
  }
41
70
  }
42
71
  else if (textChanged) {
43
- const refused = unreadable(record.documents, previous?.record.documents);
72
+ const refused = yield* unreadable(record.documents, previous?.record.documents);
44
73
  if (refused !== null)
45
74
  return refused;
46
75
  }
47
- return { kind: 'staged', confirmed: confirmedOf(record, previous) };
76
+ return { kind: 'staged', confirmed: yield* confirming(record, previous) };
48
77
  }
49
- export function readReclassified(record, previous) {
50
- const verdict = validateCollection(record.documents, record.binaryTargets, compositionOf(record));
78
+ export function readStaged(staged, previous) {
79
+ return stepped(staging(staged, previous));
80
+ }
81
+ function* reclassifying(record, previous) {
82
+ const verdict = yield* validateCollection(record.documents, Object.keys(record.binaries), compositionOf(record));
51
83
  if (verdict.verdict !== 'refuse')
52
- return { kind: 'staged', confirmed: confirmedOf(record, previous) };
84
+ return { kind: 'staged', confirmed: yield* confirming(record, previous) };
53
85
  return verdict.rule === 'model-unavailable'
54
86
  ? { kind: 'deferred' }
55
87
  : { kind: 'refused', refusal: verdict };
56
88
  }
57
- export function applyReturned(confirmed, documents, revisions, changes, removals, attachments, roomVersion, writtenAt) {
58
- const nextDocuments = { ...confirmed.record.documents, ...documents };
59
- const nextRevisions = { ...confirmed.record.revisions, ...revisions };
60
- const nextChanges = { ...confirmed.record.changes };
61
- const nextWritten = {
62
- ...confirmed.record.written,
63
- ...Object.fromEntries(Object.keys(documents).map((path) => [path, writtenAt])),
64
- };
65
- const binaryTargets = new Set(confirmed.record.binaryTargets);
89
+ export function readReclassified(record, previous) {
90
+ return stepped(reclassifying(record, previous));
91
+ }
92
+ function returnedBinaries(held, submitted, accepted) {
93
+ const binaries = drafted(held);
94
+ for (const change of submitted.changes) {
95
+ if (change.kind !== 'move')
96
+ continue;
97
+ const moved = binaries[change.path];
98
+ if (moved === undefined || accepted.revisions[change.to] === undefined)
99
+ continue;
100
+ binaries[change.to] = moved;
101
+ delete binaries[change.path];
102
+ }
103
+ Object.assign(binaries, acceptedBinaries(accepted.binaryFiles ?? {}));
104
+ for (const path of accepted.removals)
105
+ delete binaries[path];
106
+ return settled(binaries);
107
+ }
108
+ export function applyReturned(confirmed, submitted, accepted, roomVersion, writtenAt) {
109
+ const { documents, revisions, fileIds, changes, removals } = accepted;
110
+ const nextDocuments = drafted(confirmed.record.documents);
111
+ const nextRevisions = drafted(confirmed.record.revisions);
112
+ const nextFileIds = drafted(confirmed.record.fileIds);
113
+ const nextChanges = drafted(confirmed.record.changes);
114
+ const nextWritten = drafted(confirmed.record.written);
115
+ Object.assign(nextDocuments, documents);
116
+ Object.assign(nextRevisions, revisions);
117
+ for (const path of Object.keys({ ...documents, ...revisions }))
118
+ delete nextFileIds[path];
119
+ Object.assign(nextFileIds, fileIds);
120
+ for (const path of Object.keys(documents))
121
+ nextWritten[path] = writtenAt;
66
122
  for (const [path, revision] of Object.entries(revisions)) {
67
123
  if (confirmed.record.revisions[path] !== revision)
68
124
  delete nextChanges[path];
@@ -71,24 +127,22 @@ export function applyReturned(confirmed, documents, revisions, changes, removals
71
127
  for (const path of removals) {
72
128
  delete nextDocuments[path];
73
129
  delete nextRevisions[path];
130
+ delete nextFileIds[path];
74
131
  delete nextChanges[path];
75
132
  delete nextWritten[path];
76
- binaryTargets.delete(path);
77
133
  }
78
134
  return readStaged({
79
135
  ...confirmed.record,
80
136
  roomVersion,
81
- documents: nextDocuments,
82
- revisions: nextRevisions,
83
- changes: nextChanges,
84
- written: nextWritten,
85
- binaryTargets: [...binaryTargets].sort(),
86
- attachments: attachments === undefined
87
- ? confirmed.record.attachments
88
- : declaredAttachments([attachments]),
137
+ documents: settled(nextDocuments),
138
+ revisions: settled(nextRevisions),
139
+ fileIds: settled(nextFileIds),
140
+ changes: settled(nextChanges),
141
+ written: settled(nextWritten),
142
+ binaries: returnedBinaries(confirmed.record.binaries, submitted, accepted),
89
143
  }, confirmed);
90
144
  }
91
- function predicted(confirmed, batches, previous) {
145
+ function* predicting(confirmed, batches, previous) {
92
146
  const composition = compositionOf(confirmed.record);
93
147
  let layer = confirmed.record;
94
148
  const replay = [];
@@ -98,7 +152,7 @@ function predicted(confirmed, batches, previous) {
98
152
  const old = prior.get(batch.id);
99
153
  const hasMove = batch.changes.some((change) => change.kind === 'move');
100
154
  const reuseRewrite = old?.collection !== undefined &&
101
- sameLayerText(before, old.before) &&
155
+ (yield* sameText(before, old.before)) &&
102
156
  old.collection.composition.model === composition.model &&
103
157
  old.collection.composition.selection?.model === composition.selection?.model &&
104
158
  JSON.stringify(old.collection.composition.selection?.roots) ===
@@ -106,17 +160,17 @@ function predicted(confirmed, batches, previous) {
106
160
  const collection = hasMove
107
161
  ? reuseRewrite
108
162
  ? old.collection
109
- : collectionOf(before.documents, composition, old?.collection ?? confirmed.collection)
163
+ : yield* collecting(before.documents, composition, old?.collection ?? confirmed.collection)
110
164
  : undefined;
111
165
  const effective = collection === undefined
112
166
  ? batch
113
167
  : reuseRewrite
114
168
  ? old.effective
115
- : providerRewritten(batch, { ...before, collection });
169
+ : yield* providerRewritten(batch, { ...before, collection });
116
170
  layer =
117
171
  old === undefined
118
- ? overlay(before, [effective])
119
- : overlayChanged(before, [effective], old.before, [old.effective], old.after);
172
+ ? yield* overlaying(before, [effective])
173
+ : yield* overlayChanged(before, effective, old.before, old.effective, old.after);
120
174
  replay.push({
121
175
  id: batch.id,
122
176
  before,
@@ -127,7 +181,7 @@ function predicted(confirmed, batches, previous) {
127
181
  }
128
182
  return { layer, replay };
129
183
  }
130
- export function replicaOf(confirmed, queue, previous) {
184
+ export function* replicating(confirmed, queue, previous) {
131
185
  const batches = Object.freeze(queue.map(immutable));
132
186
  if (batches.length === 0) {
133
187
  return {
@@ -135,27 +189,31 @@ export function replicaOf(confirmed, queue, previous) {
135
189
  queue: batches,
136
190
  visible: {
137
191
  documents: confirmed.record.documents,
138
- binaryTargets: confirmed.record.binaryTargets,
192
+ binaries: confirmed.record.binaries,
139
193
  revisions: confirmed.record.revisions,
194
+ fileIds: confirmed.record.fileIds,
140
195
  changes: confirmed.record.changes,
141
196
  collection: confirmed.collection,
142
197
  },
143
198
  replay: [],
144
199
  };
145
200
  }
146
- const { layer, replay } = predicted(confirmed, batches, previous);
201
+ const { layer, replay } = yield* predicting(confirmed, batches, previous);
147
202
  return {
148
203
  confirmed,
149
204
  queue: batches,
150
205
  replay,
151
206
  visible: {
152
207
  ...layer,
153
- collection: collectionOf(layer.documents, compositionOf(confirmed.record), previous?.visible.collection ?? confirmed.collection),
208
+ collection: yield* collecting(layer.documents, compositionOf(confirmed.record), previous?.visible.collection ?? confirmed.collection),
154
209
  },
155
210
  };
156
211
  }
212
+ export function replicaOf(confirmed, queue, previous) {
213
+ return finished(replicating(confirmed, queue, previous));
214
+ }
157
215
  function present(layer, path) {
158
- return layer.documents[path] !== undefined || layer.binaryTargets.includes(path);
216
+ return layer.documents[path] !== undefined || layer.binaries[path] !== undefined;
159
217
  }
160
218
  function holds(layer, preconditions) {
161
219
  const parsed = new Map();
@@ -222,61 +280,74 @@ function effects(change) {
222
280
  { kind: 'present', path: change.to },
223
281
  ];
224
282
  }
283
+ if (change.kind === 'binary')
284
+ return [{ kind: 'present', path }];
225
285
  return [{ kind: 'absent', path }];
226
286
  }
227
- function after(changes, index, path) {
228
- let at = path;
229
- for (const change of changes.slice(index + 1)) {
230
- if (change.path !== at)
231
- continue;
232
- if (change.kind === 'remove')
233
- return null;
234
- if (change.kind === 'move')
235
- at = change.to;
236
- }
237
- return at;
238
- }
239
287
  export function landed(batch, confirmed, current = {}) {
240
- const layer = { ...confirmed.record, documents: { ...confirmed.record.documents, ...current } };
288
+ const layer = {
289
+ ...confirmed.record,
290
+ documents: patched(confirmed.record.documents, Object.entries(current)),
291
+ };
241
292
  return batch.changes.every((change, index) => {
242
293
  if (change.kind === 'replace' || (change.kind === 'create' && 'content' in change)) {
243
- const at = after(batch.changes, index, change.path);
294
+ const at = landing(batch.changes, index, change.path);
244
295
  return at === null || layer.documents[at] === change.content;
245
296
  }
297
+ if (change.kind === 'binary') {
298
+ const at = landing(batch.changes, index, change.path);
299
+ return at === null || layer.binaries[at]?.sha256 === change.sha256;
300
+ }
246
301
  return effects(change).every((effect) => {
247
302
  if (effect.kind === 'absent')
248
303
  return holds(layer, [effect]);
249
- const at = after(batch.changes, index, effect.path);
304
+ const at = landing(batch.changes, index, effect.path);
250
305
  return at === null || holds(layer, [{ ...effect, path: at }]);
251
306
  });
252
307
  });
253
308
  }
254
- export function withdrawals(confirmed, queue, withdrawable, local) {
309
+ function founded(batch, layer) {
310
+ let changed = false;
311
+ const preconditions = batch.preconditions.map((precondition) => {
312
+ if (precondition.kind !== 'content')
313
+ return precondition;
314
+ const revision = layer.revisions[precondition.path];
315
+ if (revision === undefined || layer.documents[precondition.path] !== precondition.content) {
316
+ return precondition;
317
+ }
318
+ changed = true;
319
+ return { kind: 'revision', path: precondition.path, revision };
320
+ });
321
+ return changed ? immutable({ ...batch, preconditions }) : batch;
322
+ }
323
+ export function* standing(confirmed, queue, withdrawable, local) {
255
324
  if (!queue.some(withdrawable))
256
- return [];
325
+ return { withdrawn: [], kept: queue };
257
326
  const composition = compositionOf(confirmed.record);
258
327
  let layer = confirmed.record;
259
328
  const withdrawn = [];
329
+ const kept = [];
260
330
  for (const batch of queue) {
261
331
  if (withdrawable(batch) && !holds(layer, batch.preconditions)) {
262
332
  withdrawn.push(batch);
263
333
  continue;
264
334
  }
265
335
  const effective = batch.changes.some((change) => change.kind === 'move')
266
- ? providerRewritten(batch, {
336
+ ? yield* providerRewritten(batch, {
267
337
  ...layer,
268
- collection: collectionOf(layer.documents, composition),
338
+ collection: yield* collecting(layer.documents, composition),
269
339
  })
270
340
  : batch;
271
341
  let unapplied = false;
272
- const next = overlay(layer, [effective], () => {
342
+ const next = yield* overlaying(layer, [effective], () => {
273
343
  unapplied = true;
274
344
  });
275
345
  if (local && unapplied) {
276
346
  withdrawn.push(batch);
277
347
  continue;
278
348
  }
349
+ kept.push(local || !withdrawable(batch) ? batch : founded(batch, layer));
279
350
  layer = next;
280
351
  }
281
- return withdrawn;
352
+ return { withdrawn, kept };
282
353
  }
@@ -37,6 +37,17 @@ export type RoomDraftParts = {
37
37
  readonly removal?: {
38
38
  readonly base?: string | null;
39
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;
40
51
  };
41
52
  type HeldParts = {
42
53
  readonly fields?: Readonly<Record<string, {
@@ -63,6 +74,7 @@ type HeldParts = {
63
74
  readonly removal?: {
64
75
  readonly base: string | null;
65
76
  };
77
+ readonly file?: HeldFile;
66
78
  };
67
79
  type ChangedUnderneath = {
68
80
  readonly fields?: Readonly<Record<string, FieldValue>>;
@@ -72,9 +84,10 @@ type ChangedUnderneath = {
72
84
  readonly creation?: string;
73
85
  readonly move?: string | null;
74
86
  readonly removal?: string | null;
87
+ readonly file?: string | null;
75
88
  };
76
89
  export type ReturnReason = ProviderRefusal & {
77
- readonly kind: 'conflicted' | 'rejected' | 'expired' | 'withdrawn';
90
+ readonly kind: Open<'conflicted' | 'rejected' | 'expired' | 'withdrawn'>;
78
91
  };
79
92
  export declare function returnedBy(kind: 'expired' | 'withdrawn'): ReturnReason;
80
93
  export type RoomDraft = {
@@ -97,7 +110,7 @@ export type RoomDraftWrite = {
97
110
  export declare function staleWrite(current: RoomDraft | null): RoomDraftWrite;
98
111
  export type ChangedPart = {
99
112
  readonly path: string;
100
- readonly part: Open<'field' | 'section' | 'preamble' | 'markdown' | 'creation' | 'move' | 'removal'>;
113
+ readonly part: Open<'field' | 'section' | 'preamble' | 'markdown' | 'creation' | 'move' | 'removal' | 'file'>;
101
114
  readonly name?: string;
102
115
  };
103
116
  export type RoomDraftRecord = {
@@ -112,9 +125,23 @@ export type SavedDraft = {
112
125
  readonly parts: HeldParts;
113
126
  };
114
127
  export declare function readParts(value: unknown): RoomDraftParts;
115
- export declare function held(current: HeldParts | undefined, parts: RoomDraftParts): HeldParts;
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[];
133
+ export type TextParts = {
134
+ readonly fields?: Readonly<Record<string, {
135
+ readonly value: unknown;
136
+ }>>;
137
+ readonly sections?: Readonly<Record<string, {
138
+ readonly value: string;
139
+ }>>;
140
+ readonly preamble?: {
141
+ readonly value: string;
142
+ };
143
+ };
144
+ export declare function partsAfter(markdown: string, parts: TextParts): string;
118
145
  export declare function returnedInto(existing: HeldParts | undefined, returned: HeldParts): HeldParts;
119
146
  export declare function moveTarget(move: {
120
147
  readonly to: string;
@@ -123,5 +150,7 @@ export declare function changesOf(path: string, parts: HeldParts): {
123
150
  changes: readonly Change[];
124
151
  bases: readonly Precondition[];
125
152
  };
153
+ export declare function joinedDraft(carried: SavedDraft, saved: readonly SavedDraft[]): SavedDraft;
154
+ export declare function withdrawnDrafts(drafts: readonly SavedDraft[], changes: readonly Change[]): readonly SavedDraft[];
126
155
  export {};
127
156
  //# 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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"}