@agentshouse/mdruntime 0.1.0-ce531b51ff088 → 0.1.0-ceb97106cc2fd
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 +273 -175
- package/README.md +21 -11
- package/dist/acquisition.d.ts +14 -0
- package/dist/acquisition.d.ts.map +1 -0
- package/dist/acquisition.js +24 -0
- package/dist/adapter.d.ts +129 -41
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +1 -9
- package/dist/attached-model.d.ts +11 -0
- package/dist/attached-model.d.ts.map +1 -0
- package/dist/attached-model.js +47 -0
- package/dist/attempt.d.ts +16 -0
- package/dist/attempt.d.ts.map +1 -0
- package/dist/attempt.js +70 -0
- package/dist/binary.d.ts +23 -0
- package/dist/binary.d.ts.map +1 -0
- package/dist/binary.js +8 -0
- package/dist/bootstrap.d.ts +20 -6
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +114 -37
- package/dist/change-set.d.ts +2 -0
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +49 -16
- package/dist/change.d.ts +15 -0
- package/dist/change.d.ts.map +1 -1
- package/dist/change.js +26 -1
- package/dist/chat/acts.d.ts +33 -0
- package/dist/chat/acts.d.ts.map +1 -0
- package/dist/chat/acts.js +36 -0
- package/dist/chat/context.d.ts +3 -0
- package/dist/chat/context.d.ts.map +1 -0
- package/dist/chat/context.js +10 -0
- package/dist/chat/input.d.ts +9 -0
- package/dist/chat/input.d.ts.map +1 -0
- package/dist/chat/input.js +99 -0
- package/dist/chat/kit.d.ts +61 -0
- package/dist/chat/kit.d.ts.map +1 -0
- package/dist/chat/kit.js +123 -0
- package/dist/chat/lasting.d.ts +6 -0
- package/dist/chat/lasting.d.ts.map +1 -0
- package/dist/chat/lasting.js +19 -0
- package/dist/chat/list.d.ts +27 -0
- package/dist/chat/list.d.ts.map +1 -0
- package/dist/chat/list.js +63 -0
- package/dist/chat/markdown.d.ts +20 -0
- package/dist/chat/markdown.d.ts.map +1 -0
- package/dist/chat/markdown.js +188 -0
- package/dist/chat/message.d.ts +6 -0
- package/dist/chat/message.d.ts.map +1 -0
- package/dist/chat/message.js +192 -0
- package/dist/chat/messages.d.ts +22 -0
- package/dist/chat/messages.d.ts.map +1 -0
- package/dist/chat/messages.js +155 -0
- package/dist/chat/name.d.ts +6 -0
- package/dist/chat/name.d.ts.map +1 -0
- package/dist/chat/name.js +37 -0
- package/dist/chat/opened.d.ts +11 -0
- package/dist/chat/opened.d.ts.map +1 -0
- package/dist/chat/opened.js +17 -0
- package/dist/chat/overlay.d.ts +31 -0
- package/dist/chat/overlay.d.ts.map +1 -0
- package/dist/chat/overlay.js +97 -0
- package/dist/chat/parts.d.ts +57 -0
- package/dist/chat/parts.d.ts.map +1 -0
- package/dist/chat/parts.js +119 -0
- package/dist/chat/process.d.ts +20 -0
- package/dist/chat/process.d.ts.map +1 -0
- package/dist/chat/process.js +32 -0
- package/dist/chat/provider.d.ts +63 -0
- package/dist/chat/provider.d.ts.map +1 -0
- package/dist/chat/provider.js +629 -0
- package/dist/chat/question.d.ts +9 -0
- package/dist/chat/question.d.ts.map +1 -0
- package/dist/chat/question.js +80 -0
- package/dist/chat/questions.d.ts +31 -0
- package/dist/chat/questions.d.ts.map +1 -0
- package/dist/chat/questions.js +111 -0
- package/dist/chat/read.d.ts +5 -0
- package/dist/chat/read.d.ts.map +1 -0
- package/dist/chat/read.js +13 -0
- package/dist/chat/ready.d.ts +34 -0
- package/dist/chat/ready.d.ts.map +1 -0
- package/dist/chat/ready.js +91 -0
- package/dist/chat/style.d.ts +4 -0
- package/dist/chat/style.d.ts.map +1 -0
- package/dist/chat/style.js +302 -0
- package/dist/chat.d.ts +14 -0
- package/dist/chat.d.ts.map +1 -0
- package/dist/chat.js +8 -0
- package/dist/client.d.ts +28 -14
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +71 -26
- package/dist/collection.d.ts +21 -12
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +271 -23
- package/dist/connection.d.ts +50 -23
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +2074 -735
- package/dist/conversation.d.ts +41 -14
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +546 -214
- package/dist/durability.d.ts +7 -1
- package/dist/durability.d.ts.map +1 -1
- package/dist/entry.d.ts +17 -0
- package/dist/entry.d.ts.map +1 -0
- package/dist/entry.js +156 -0
- package/dist/expectation.d.ts +21 -0
- package/dist/expectation.d.ts.map +1 -0
- package/dist/expectation.js +70 -0
- package/dist/failure.d.ts +13 -0
- package/dist/failure.d.ts.map +1 -0
- package/dist/failure.js +19 -0
- package/dist/fence.d.ts +6 -0
- package/dist/fence.d.ts.map +1 -0
- package/dist/fence.js +10 -0
- package/dist/host.d.ts +24 -2
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +126 -45
- package/dist/identity.d.ts +5 -0
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +19 -1
- package/dist/index.d.ts +16 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/memory.d.ts +17 -7
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +159 -46
- package/dist/model.d.ts +17 -14
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +16 -4
- package/dist/observation.d.ts +6 -1
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +38 -17
- package/dist/open.d.ts +2 -0
- package/dist/open.d.ts.map +1 -0
- package/dist/open.js +1 -0
- package/dist/outcome.d.ts +32 -3
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +42 -1
- package/dist/overlay.d.ts +16 -3
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +118 -77
- package/dist/paths.d.ts +0 -1
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +0 -16
- package/dist/query.d.ts +46 -6
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +85 -37
- package/dist/reach.d.ts +45 -0
- package/dist/reach.d.ts.map +1 -0
- package/dist/reach.js +306 -0
- package/dist/react.d.ts +44 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +66 -0
- package/dist/read-side.d.ts +16 -5
- package/dist/read-side.d.ts.map +1 -1
- package/dist/read-side.js +408 -137
- package/dist/readiness.d.ts +53 -0
- package/dist/readiness.d.ts.map +1 -0
- package/dist/readiness.js +33 -0
- package/dist/recovery.d.ts +25 -0
- package/dist/recovery.d.ts.map +1 -0
- package/dist/recovery.js +197 -0
- package/dist/refresh.d.ts +12 -1
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +51 -36
- package/dist/replica.d.ts +10 -7
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +129 -73
- package/dist/room-draft.d.ts +41 -9
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +139 -28
- package/dist/rows.d.ts +11 -14
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +87 -50
- package/dist/save.d.ts +32 -3
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +465 -92
- package/dist/search.d.ts +37 -8
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +116 -45
- package/dist/seed.d.ts +16 -0
- package/dist/seed.d.ts.map +1 -0
- package/dist/seed.js +61 -0
- package/dist/shared.d.ts +11 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +368 -0
- package/dist/status.d.ts +6 -2
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +0 -8
- package/dist/store.d.ts +76 -19
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +539 -200
- package/dist/turn.d.ts +7 -0
- package/dist/turn.d.ts.map +1 -0
- package/dist/turn.js +45 -0
- package/dist/wire.d.ts +162 -19
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +82 -61
- package/package.json +31 -7
- package/dist/attachment.d.ts +0 -3
- package/dist/attachment.d.ts.map +0 -1
- package/dist/attachment.js +0 -8
package/dist/replica.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { parse } from '@agentshouse/mdmodel';
|
|
2
|
-
import { immutable } from './change.js';
|
|
3
|
-
import {
|
|
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 {
|
|
6
|
+
import { drafted, patched, settled, shared } from './shared.js';
|
|
7
7
|
export function compositionOf(record) {
|
|
8
8
|
return {
|
|
9
9
|
model: record.model,
|
|
@@ -12,67 +12,124 @@ export function compositionOf(record) {
|
|
|
12
12
|
: { roots: record.typedSelection.roots, model: record.selectionModel },
|
|
13
13
|
};
|
|
14
14
|
}
|
|
15
|
-
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
function held(record) {
|
|
16
|
+
const documents = shared(record.documents);
|
|
17
|
+
const binaries = shared(record.binaries);
|
|
18
|
+
const revisions = shared(record.revisions);
|
|
19
|
+
const fileIds = shared(record.fileIds);
|
|
20
|
+
const changes = shared(record.changes);
|
|
21
|
+
const written = shared(record.written);
|
|
22
|
+
return documents === record.documents &&
|
|
23
|
+
binaries === record.binaries &&
|
|
24
|
+
revisions === record.revisions &&
|
|
25
|
+
fileIds === record.fileIds &&
|
|
26
|
+
changes === record.changes &&
|
|
27
|
+
written === record.written
|
|
28
|
+
? record
|
|
29
|
+
: { ...record, documents, binaries, revisions, fileIds, changes, written };
|
|
30
|
+
}
|
|
31
|
+
export function confirmedOf(record, previous) {
|
|
32
|
+
const kept = held(record);
|
|
33
|
+
return {
|
|
34
|
+
record: kept,
|
|
35
|
+
collection: collectionOf(kept.documents, compositionOf(kept), previous?.collection),
|
|
36
|
+
};
|
|
22
37
|
}
|
|
23
38
|
export function sameMembership(record, other) {
|
|
24
39
|
return (JSON.stringify(record.typedSelection?.roots ?? null) ===
|
|
25
40
|
JSON.stringify(other.typedSelection?.roots ?? null));
|
|
26
41
|
}
|
|
27
|
-
|
|
28
|
-
if (
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
42
|
+
function cleanly(record, previous) {
|
|
43
|
+
if (previous === undefined)
|
|
44
|
+
return false;
|
|
45
|
+
const before = previous.record;
|
|
46
|
+
return changedCleanly({ text: record.documents, binaries: record.binaries }, { text: before.documents, binaries: before.binaries, composition: compositionOf(before) }, compositionOf(record));
|
|
47
|
+
}
|
|
48
|
+
export function readStaged(staged, previous) {
|
|
49
|
+
const record = held(staged);
|
|
50
|
+
const textChanged = previous === undefined || !sameLayerText(record, previous.record);
|
|
51
|
+
const modeled = record.model.status !== 'unavailable' || record.selectionModel.status !== 'unavailable';
|
|
52
|
+
if (modeled &&
|
|
53
|
+
(textChanged ||
|
|
54
|
+
record.model !== previous?.record.model ||
|
|
55
|
+
record.selectionModel !== previous?.record.selectionModel) &&
|
|
56
|
+
!cleanly(record, previous)) {
|
|
57
|
+
const verdict = validateCollection(record.documents, Object.keys(record.binaries), compositionOf(record));
|
|
34
58
|
if (verdict.verdict === 'refuse' && verdict.rule !== 'model-unavailable') {
|
|
35
59
|
return { kind: 'refused', refusal: verdict };
|
|
36
60
|
}
|
|
61
|
+
if (verdict.verdict === 'refuse') {
|
|
62
|
+
const refused = unreadable(record.documents, previous?.record.documents);
|
|
63
|
+
if (refused !== null)
|
|
64
|
+
return refused;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
else if (textChanged) {
|
|
68
|
+
const refused = unreadable(record.documents, previous?.record.documents);
|
|
69
|
+
if (refused !== null)
|
|
70
|
+
return refused;
|
|
37
71
|
}
|
|
38
|
-
return
|
|
72
|
+
return { kind: 'staged', confirmed: confirmedOf(record, previous) };
|
|
39
73
|
}
|
|
40
74
|
export function readReclassified(record, previous) {
|
|
41
|
-
const verdict = validateCollection(record.documents, record.
|
|
75
|
+
const verdict = validateCollection(record.documents, Object.keys(record.binaries), compositionOf(record));
|
|
42
76
|
if (verdict.verdict !== 'refuse')
|
|
43
|
-
return
|
|
77
|
+
return { kind: 'staged', confirmed: confirmedOf(record, previous) };
|
|
44
78
|
return verdict.rule === 'model-unavailable'
|
|
45
79
|
? { kind: 'deferred' }
|
|
46
80
|
: { kind: 'refused', refusal: verdict };
|
|
47
81
|
}
|
|
48
|
-
|
|
49
|
-
const
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
82
|
+
function returnedBinaries(held, submitted, accepted) {
|
|
83
|
+
const binaries = drafted(held);
|
|
84
|
+
for (const change of submitted.changes) {
|
|
85
|
+
if (change.kind !== 'move')
|
|
86
|
+
continue;
|
|
87
|
+
const moved = binaries[change.path];
|
|
88
|
+
if (moved === undefined || accepted.revisions[change.to] === undefined)
|
|
89
|
+
continue;
|
|
90
|
+
binaries[change.to] = moved;
|
|
91
|
+
delete binaries[change.path];
|
|
92
|
+
}
|
|
93
|
+
Object.assign(binaries, acceptedBinaries(accepted.binaryFiles ?? {}));
|
|
94
|
+
for (const path of accepted.removals)
|
|
95
|
+
delete binaries[path];
|
|
96
|
+
return settled(binaries);
|
|
97
|
+
}
|
|
98
|
+
export function applyReturned(confirmed, submitted, accepted, roomVersion, writtenAt) {
|
|
99
|
+
const { documents, revisions, fileIds, changes, removals } = accepted;
|
|
100
|
+
const nextDocuments = drafted(confirmed.record.documents);
|
|
101
|
+
const nextRevisions = drafted(confirmed.record.revisions);
|
|
102
|
+
const nextFileIds = drafted(confirmed.record.fileIds);
|
|
103
|
+
const nextChanges = drafted(confirmed.record.changes);
|
|
104
|
+
const nextWritten = drafted(confirmed.record.written);
|
|
105
|
+
Object.assign(nextDocuments, documents);
|
|
106
|
+
Object.assign(nextRevisions, revisions);
|
|
107
|
+
for (const path of Object.keys({ ...documents, ...revisions }))
|
|
108
|
+
delete nextFileIds[path];
|
|
109
|
+
Object.assign(nextFileIds, fileIds);
|
|
110
|
+
for (const path of Object.keys(documents))
|
|
111
|
+
nextWritten[path] = writtenAt;
|
|
57
112
|
for (const [path, revision] of Object.entries(revisions)) {
|
|
58
113
|
if (confirmed.record.revisions[path] !== revision)
|
|
59
114
|
delete nextChanges[path];
|
|
60
115
|
}
|
|
116
|
+
Object.assign(nextChanges, changes);
|
|
61
117
|
for (const path of removals) {
|
|
62
118
|
delete nextDocuments[path];
|
|
63
119
|
delete nextRevisions[path];
|
|
120
|
+
delete nextFileIds[path];
|
|
64
121
|
delete nextChanges[path];
|
|
65
122
|
delete nextWritten[path];
|
|
66
|
-
binaryTargets.delete(path);
|
|
67
123
|
}
|
|
68
124
|
return readStaged({
|
|
69
125
|
...confirmed.record,
|
|
70
126
|
roomVersion,
|
|
71
|
-
documents: nextDocuments,
|
|
72
|
-
revisions: nextRevisions,
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
127
|
+
documents: settled(nextDocuments),
|
|
128
|
+
revisions: settled(nextRevisions),
|
|
129
|
+
fileIds: settled(nextFileIds),
|
|
130
|
+
changes: settled(nextChanges),
|
|
131
|
+
written: settled(nextWritten),
|
|
132
|
+
binaries: returnedBinaries(confirmed.record.binaries, submitted, accepted),
|
|
76
133
|
}, confirmed);
|
|
77
134
|
}
|
|
78
135
|
function predicted(confirmed, batches, previous) {
|
|
@@ -93,9 +150,7 @@ function predicted(confirmed, batches, previous) {
|
|
|
93
150
|
const collection = hasMove
|
|
94
151
|
? reuseRewrite
|
|
95
152
|
? old.collection
|
|
96
|
-
:
|
|
97
|
-
? { text: confirmed.record.documents, collection: confirmed.collection }
|
|
98
|
-
: { text: old.before.documents, collection: old.collection })
|
|
153
|
+
: collectionOf(before.documents, composition, old?.collection ?? confirmed.collection)
|
|
99
154
|
: undefined;
|
|
100
155
|
const effective = collection === undefined
|
|
101
156
|
? batch
|
|
@@ -116,7 +171,7 @@ function predicted(confirmed, batches, previous) {
|
|
|
116
171
|
}
|
|
117
172
|
return { layer, replay };
|
|
118
173
|
}
|
|
119
|
-
export function replicaOf(confirmed, queue,
|
|
174
|
+
export function replicaOf(confirmed, queue, previous) {
|
|
120
175
|
const batches = Object.freeze(queue.map(immutable));
|
|
121
176
|
if (batches.length === 0) {
|
|
122
177
|
return {
|
|
@@ -124,34 +179,28 @@ export function replicaOf(confirmed, queue, rewriting, previous) {
|
|
|
124
179
|
queue: batches,
|
|
125
180
|
visible: {
|
|
126
181
|
documents: confirmed.record.documents,
|
|
127
|
-
|
|
182
|
+
binaries: confirmed.record.binaries,
|
|
128
183
|
revisions: confirmed.record.revisions,
|
|
184
|
+
fileIds: confirmed.record.fileIds,
|
|
129
185
|
changes: confirmed.record.changes,
|
|
130
186
|
collection: confirmed.collection,
|
|
131
187
|
},
|
|
132
188
|
replay: [],
|
|
133
189
|
};
|
|
134
190
|
}
|
|
135
|
-
const
|
|
136
|
-
const layer = rewriting === 'provider'
|
|
137
|
-
? predictedState.layer
|
|
138
|
-
: previous === undefined
|
|
139
|
-
? overlay(confirmed.record, batches)
|
|
140
|
-
: overlayChanged(confirmed.record, batches, previous.confirmed.record, previous.queue, previous.visible);
|
|
191
|
+
const { layer, replay } = predicted(confirmed, batches, previous);
|
|
141
192
|
return {
|
|
142
193
|
confirmed,
|
|
143
194
|
queue: batches,
|
|
144
|
-
replay
|
|
195
|
+
replay,
|
|
145
196
|
visible: {
|
|
146
197
|
...layer,
|
|
147
|
-
collection:
|
|
148
|
-
? undefined
|
|
149
|
-
: { text: previous.visible.documents, collection: previous.visible.collection }),
|
|
198
|
+
collection: collectionOf(layer.documents, compositionOf(confirmed.record), previous?.visible.collection ?? confirmed.collection),
|
|
150
199
|
},
|
|
151
200
|
};
|
|
152
201
|
}
|
|
153
202
|
function present(layer, path) {
|
|
154
|
-
return layer.documents[path] !== undefined || layer.
|
|
203
|
+
return layer.documents[path] !== undefined || layer.binaries[path] !== undefined;
|
|
155
204
|
}
|
|
156
205
|
function holds(layer, preconditions) {
|
|
157
206
|
const parsed = new Map();
|
|
@@ -172,6 +221,8 @@ function holds(layer, preconditions) {
|
|
|
172
221
|
if (precondition.kind === 'revision') {
|
|
173
222
|
return present(layer, path) && layer.revisions[path] === precondition.revision;
|
|
174
223
|
}
|
|
224
|
+
if (precondition.kind === 'content')
|
|
225
|
+
return layer.documents[path] === precondition.content;
|
|
175
226
|
const document = documentAt(path);
|
|
176
227
|
if (document === null)
|
|
177
228
|
return false;
|
|
@@ -216,36 +267,33 @@ function effects(change) {
|
|
|
216
267
|
{ kind: 'present', path: change.to },
|
|
217
268
|
];
|
|
218
269
|
}
|
|
270
|
+
if (change.kind === 'binary')
|
|
271
|
+
return [{ kind: 'present', path }];
|
|
219
272
|
return [{ kind: 'absent', path }];
|
|
220
273
|
}
|
|
221
|
-
function
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
if (change.kind === 'remove')
|
|
227
|
-
return null;
|
|
228
|
-
if (change.kind === 'move')
|
|
229
|
-
at = change.to;
|
|
230
|
-
}
|
|
231
|
-
return at;
|
|
232
|
-
}
|
|
233
|
-
export function landed(batch, confirmed) {
|
|
234
|
-
const layer = confirmed.record;
|
|
274
|
+
export function landed(batch, confirmed, current = {}) {
|
|
275
|
+
const layer = {
|
|
276
|
+
...confirmed.record,
|
|
277
|
+
documents: patched(confirmed.record.documents, Object.entries(current)),
|
|
278
|
+
};
|
|
235
279
|
return batch.changes.every((change, index) => {
|
|
236
280
|
if (change.kind === 'replace' || (change.kind === 'create' && 'content' in change)) {
|
|
237
|
-
const at =
|
|
281
|
+
const at = landing(batch.changes, index, change.path);
|
|
238
282
|
return at === null || layer.documents[at] === change.content;
|
|
239
283
|
}
|
|
284
|
+
if (change.kind === 'binary') {
|
|
285
|
+
const at = landing(batch.changes, index, change.path);
|
|
286
|
+
return at === null || layer.binaries[at]?.sha256 === change.sha256;
|
|
287
|
+
}
|
|
240
288
|
return effects(change).every((effect) => {
|
|
241
289
|
if (effect.kind === 'absent')
|
|
242
290
|
return holds(layer, [effect]);
|
|
243
|
-
const at =
|
|
291
|
+
const at = landing(batch.changes, index, effect.path);
|
|
244
292
|
return at === null || holds(layer, [{ ...effect, path: at }]);
|
|
245
293
|
});
|
|
246
294
|
});
|
|
247
295
|
}
|
|
248
|
-
export function withdrawals(confirmed, queue, withdrawable,
|
|
296
|
+
export function withdrawals(confirmed, queue, withdrawable, local) {
|
|
249
297
|
if (!queue.some(withdrawable))
|
|
250
298
|
return [];
|
|
251
299
|
const composition = compositionOf(confirmed.record);
|
|
@@ -256,13 +304,21 @@ export function withdrawals(confirmed, queue, withdrawable, rewriting) {
|
|
|
256
304
|
withdrawn.push(batch);
|
|
257
305
|
continue;
|
|
258
306
|
}
|
|
259
|
-
const effective =
|
|
307
|
+
const effective = batch.changes.some((change) => change.kind === 'move')
|
|
260
308
|
? providerRewritten(batch, {
|
|
261
309
|
...layer,
|
|
262
|
-
collection:
|
|
310
|
+
collection: collectionOf(layer.documents, composition),
|
|
263
311
|
})
|
|
264
312
|
: batch;
|
|
265
|
-
|
|
313
|
+
let unapplied = false;
|
|
314
|
+
const next = overlay(layer, [effective], () => {
|
|
315
|
+
unapplied = true;
|
|
316
|
+
});
|
|
317
|
+
if (local && unapplied) {
|
|
318
|
+
withdrawn.push(batch);
|
|
319
|
+
continue;
|
|
320
|
+
}
|
|
321
|
+
layer = next;
|
|
266
322
|
}
|
|
267
323
|
return withdrawn;
|
|
268
324
|
}
|
package/dist/room-draft.d.ts
CHANGED
|
@@ -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 =
|
|
76
|
-
readonly kind: 'conflicted' | 'rejected'
|
|
77
|
-
}) | {
|
|
78
|
-
readonly kind: 'expired';
|
|
79
|
-
} | {
|
|
80
|
-
readonly kind: 'withdrawn';
|
|
89
|
+
export type ReturnReason = ProviderRefusal & {
|
|
90
|
+
readonly kind: Open<'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,32 @@ 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[];
|
|
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;
|
|
146
|
+
export declare function moveTarget(move: {
|
|
147
|
+
readonly to: string;
|
|
148
|
+
}): string;
|
|
119
149
|
export declare function changesOf(path: string, parts: HeldParts): {
|
|
120
150
|
changes: readonly Change[];
|
|
121
151
|
bases: readonly Precondition[];
|
|
122
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[];
|
|
123
155
|
export {};
|
|
124
156
|
//# sourceMappingURL=room-draft.d.ts.map
|
package/dist/room-draft.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"room-draft.d.ts","sourceRoot":"","sources":["../src/room-draft.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"room-draft.d.ts","sourceRoot":"","sources":["../src/room-draft.ts"],"names":[],"mappings":"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"}
|