@agentshouse/mdruntime 0.1.0-c967d1ca66fee → 0.1.0-c97456d63baba
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 +257 -227
- package/README.md +11 -1
- 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 +69 -20
- package/dist/adapter.d.ts.map +1 -1
- 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 +2 -2
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +33 -14
- package/dist/change-set.d.ts +2 -0
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +39 -13
- package/dist/change.d.ts +11 -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 +21 -10
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +14 -2
- package/dist/collection.d.ts +17 -3
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +230 -19
- package/dist/connection.d.ts +32 -12
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +1482 -351
- package/dist/conversation.d.ts +23 -9
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +372 -142
- 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/fence.d.ts +6 -0
- package/dist/fence.d.ts.map +1 -0
- package/dist/fence.js +10 -0
- package/dist/host.d.ts +13 -3
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +48 -11
- package/dist/identity.d.ts +4 -0
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +12 -0
- package/dist/index.d.ts +13 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/memory.d.ts +5 -3
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +47 -13
- package/dist/model.d.ts +4 -2
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +10 -1
- package/dist/observation.d.ts +5 -2
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +22 -11
- package/dist/outcome.d.ts +11 -1
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +7 -0
- package/dist/overlay.d.ts +14 -2
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +75 -62
- package/dist/query.d.ts +31 -3
- package/dist/query.d.ts.map +1 -1
- package/dist/reach.d.ts +8 -2
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +42 -8
- package/dist/react.d.ts +7 -4
- package/dist/react.d.ts.map +1 -1
- package/dist/read-side.d.ts +13 -6
- package/dist/read-side.d.ts.map +1 -1
- package/dist/read-side.js +291 -85
- 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.map +1 -1
- package/dist/refresh.js +21 -25
- package/dist/replica.d.ts +6 -3
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +78 -45
- package/dist/room-draft.d.ts +20 -3
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +119 -1
- package/dist/rows.d.ts +6 -13
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +5 -13
- package/dist/save.d.ts +28 -0
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +343 -29
- package/dist/search.d.ts +28 -6
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +108 -45
- 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 +4 -0
- package/dist/status.d.ts.map +1 -1
- package/dist/store.d.ts +55 -21
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +424 -206
- 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 +137 -30
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +49 -29
- package/package.json +26 -14
- package/dist/attachment.d.ts +0 -3
- package/dist/attachment.d.ts.map +0 -1
- package/dist/attachment.js +0 -8
package/dist/memory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EACL,KAAK,eAAe,EAEpB,KAAK,YAAY,EACjB,KAAK,OAAO,
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"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"}
|
package/dist/memory.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { sameChange } from './overlay.js';
|
|
2
2
|
const FIXTURE_RETENTION = {
|
|
3
3
|
history: { kind: 'duration', seconds: 1 },
|
|
4
|
-
outcome:
|
|
4
|
+
outcome: 604_800,
|
|
5
5
|
refreshHorizon: 1,
|
|
6
6
|
};
|
|
7
7
|
function declaredRetention(value) {
|
|
@@ -55,8 +55,10 @@ export function createMemoryAdapter(options = {}) {
|
|
|
55
55
|
const scripted = new Map();
|
|
56
56
|
const unsealed = new Map();
|
|
57
57
|
const sealed = new Set();
|
|
58
|
+
const sentTurns = new Map();
|
|
58
59
|
const historyPageSize = options.historyPageSize;
|
|
59
60
|
let held = [];
|
|
61
|
+
let heldDemand = null;
|
|
60
62
|
let expiring = [];
|
|
61
63
|
let replicated = [];
|
|
62
64
|
let issued = 0;
|
|
@@ -114,24 +116,23 @@ export function createMemoryAdapter(options = {}) {
|
|
|
114
116
|
const size = pageSize ?? paths.length;
|
|
115
117
|
const taken = paths.slice(from, from + size);
|
|
116
118
|
const next = from + taken.length;
|
|
117
|
-
const targets = opening ? (room.
|
|
119
|
+
const targets = opening ? Object.keys(room.binaryFiles ?? {}) : [];
|
|
118
120
|
return {
|
|
119
121
|
kind: 'bootstrap',
|
|
120
122
|
roomVersion: room.roomVersion,
|
|
121
123
|
...(opening ? { models: modelsOf(room) } : {}),
|
|
122
124
|
documents: named(room.documents ?? {}, taken),
|
|
123
|
-
revisions: named(room.revisions ?? {}, taken),
|
|
125
|
+
revisions: named(room.revisions ?? {}, [...taken, ...targets]),
|
|
124
126
|
changes: named(room.changes ?? {}, [...taken, ...targets]),
|
|
125
|
-
|
|
126
|
-
...(opening && room.attachments !== undefined ? { attachments: room.attachments } : {}),
|
|
127
|
+
binaryFiles: named(room.binaryFiles ?? {}, targets),
|
|
127
128
|
...(next < paths.length ? { pageToken: taken.at(-1) } : {}),
|
|
128
129
|
};
|
|
129
130
|
}
|
|
130
131
|
function advancement(room, from, at) {
|
|
131
132
|
const current = room.documents ?? {};
|
|
132
133
|
const previous = from.documents ?? {};
|
|
133
|
-
const currentTargets = new Set(room.
|
|
134
|
-
const previousTargets = new Set(from.
|
|
134
|
+
const currentTargets = new Set(Object.keys(room.binaryFiles ?? {}));
|
|
135
|
+
const previousTargets = new Set(Object.keys(from.binaryFiles ?? {}));
|
|
135
136
|
const headMoved = (path) => room.revisions?.[path] !== from.revisions?.[path] ||
|
|
136
137
|
!sameChange(room.changes?.[path], from.changes?.[path]);
|
|
137
138
|
const changed = Object.keys(current)
|
|
@@ -147,24 +148,21 @@ export function createMemoryAdapter(options = {}) {
|
|
|
147
148
|
const targets = opening
|
|
148
149
|
? [...currentTargets].filter((target) => !previousTargets.has(target) || headMoved(target))
|
|
149
150
|
: [];
|
|
150
|
-
const attachments = room.attachments ?? [];
|
|
151
|
-
const declared = opening && JSON.stringify(attachments) !== JSON.stringify(from.attachments ?? []);
|
|
152
151
|
const models = opening ? changedModels(room, from) : undefined;
|
|
153
152
|
return {
|
|
154
153
|
kind: 'net-advancement',
|
|
155
154
|
roomVersion: room.roomVersion,
|
|
156
155
|
...(models === undefined ? {} : { models }),
|
|
157
156
|
documents: named(current, taken),
|
|
158
|
-
revisions: named(room.revisions ?? {}, taken),
|
|
157
|
+
revisions: named(room.revisions ?? {}, [...taken, ...targets]),
|
|
159
158
|
changes: named(room.changes ?? {}, [...taken, ...targets]),
|
|
160
|
-
|
|
159
|
+
binaryFiles: named(room.binaryFiles ?? {}, targets),
|
|
161
160
|
removals: opening
|
|
162
161
|
? [
|
|
163
162
|
...Object.keys(previous).filter((path) => !(path in current) && !currentTargets.has(path)),
|
|
164
163
|
...[...previousTargets].filter((target) => !currentTargets.has(target) && !(target in current)),
|
|
165
164
|
].sort()
|
|
166
165
|
: [],
|
|
167
|
-
...(declared ? { attachments } : {}),
|
|
168
166
|
...(pageToken === undefined ? {} : { pageToken }),
|
|
169
167
|
};
|
|
170
168
|
}
|
|
@@ -224,9 +222,15 @@ export function createMemoryAdapter(options = {}) {
|
|
|
224
222
|
if (outcome !== undefined)
|
|
225
223
|
return outcome;
|
|
226
224
|
if (name === 'conversation.send') {
|
|
225
|
+
const operation = typeof input.operation_id === 'string' ? input.operation_id : null;
|
|
226
|
+
const answered = operation === null ? undefined : sentTurns.get(operation);
|
|
227
|
+
if (answered !== undefined)
|
|
228
|
+
return { kind: 'action', result: { turn: answered } };
|
|
227
229
|
issued += 1;
|
|
228
230
|
const turn = `turn-${issued}`;
|
|
229
231
|
unsealed.set(turn, named);
|
|
232
|
+
if (operation !== null)
|
|
233
|
+
sentTurns.set(operation, turn);
|
|
230
234
|
return { kind: 'action', result: { turn } };
|
|
231
235
|
}
|
|
232
236
|
if (name === 'conversation.cancel') {
|
|
@@ -257,6 +261,7 @@ export function createMemoryAdapter(options = {}) {
|
|
|
257
261
|
};
|
|
258
262
|
}
|
|
259
263
|
return {
|
|
264
|
+
...(options.exhaustiveDiscovery === undefined ? {} : { exhaustiveDiscovery: true }),
|
|
260
265
|
setRooms(next) {
|
|
261
266
|
rooms = [...next];
|
|
262
267
|
retain(rooms);
|
|
@@ -295,6 +300,9 @@ export function createMemoryAdapter(options = {}) {
|
|
|
295
300
|
heldRooms() {
|
|
296
301
|
return held;
|
|
297
302
|
},
|
|
303
|
+
heldDemand() {
|
|
304
|
+
return heldDemand;
|
|
305
|
+
},
|
|
298
306
|
replicatedConversations() {
|
|
299
307
|
return replicated;
|
|
300
308
|
},
|
|
@@ -318,8 +326,9 @@ export function createMemoryAdapter(options = {}) {
|
|
|
318
326
|
},
|
|
319
327
|
},
|
|
320
328
|
roomStream: {
|
|
321
|
-
hold(asked) {
|
|
329
|
+
hold(asked, demand) {
|
|
322
330
|
held = asked.map((room) => room.locator);
|
|
331
|
+
heldDemand = demand;
|
|
323
332
|
const expired = expiring.filter((locator) => held.includes(locator));
|
|
324
333
|
expiring = [];
|
|
325
334
|
const moved = asked.flatMap((room) => {
|
|
@@ -344,6 +353,7 @@ export function createMemoryAdapter(options = {}) {
|
|
|
344
353
|
observer({ kind: 'closed', revoked: false });
|
|
345
354
|
});
|
|
346
355
|
},
|
|
356
|
+
published() { },
|
|
347
357
|
observe(notify) {
|
|
348
358
|
observers.add(notify);
|
|
349
359
|
queueMicrotask(() => {
|
|
@@ -447,6 +457,30 @@ export function createMemoryAdapter(options = {}) {
|
|
|
447
457
|
};
|
|
448
458
|
}, request);
|
|
449
459
|
},
|
|
460
|
+
async binary(_authorization, request) {
|
|
461
|
+
return resolveScript(scripts.binary, () => {
|
|
462
|
+
if (request.kind === 'reference') {
|
|
463
|
+
return { kind: 'rejected', code: 'unscripted-binary', fields: {}, retryable: false };
|
|
464
|
+
}
|
|
465
|
+
const room = rooms.find((entry) => entry.locator === request.locator);
|
|
466
|
+
if (room === undefined)
|
|
467
|
+
return { kind: 'room-not-readable', locator: request.locator };
|
|
468
|
+
const blob = room.blobs?.[request.path];
|
|
469
|
+
return blob === undefined
|
|
470
|
+
? { kind: 'rejected', code: 'file_not_found', fields: {}, retryable: false }
|
|
471
|
+
: { kind: 'binary', blob };
|
|
472
|
+
}, request);
|
|
473
|
+
},
|
|
474
|
+
referrerScope(referrer) {
|
|
475
|
+
if (typeof referrer !== 'object' || referrer === null)
|
|
476
|
+
return null;
|
|
477
|
+
const { room, path, message } = referrer;
|
|
478
|
+
if (typeof message === 'string')
|
|
479
|
+
return { kind: 'conversations' };
|
|
480
|
+
if (typeof room !== 'string')
|
|
481
|
+
return null;
|
|
482
|
+
return { kind: 'room', locator: room, ...(typeof path === 'string' ? { path } : {}) };
|
|
483
|
+
},
|
|
450
484
|
async action(_authorization, request) {
|
|
451
485
|
return resolveScript(scripts.action, () => {
|
|
452
486
|
if (request.name.startsWith('conversation.'))
|
package/dist/model.d.ts
CHANGED
|
@@ -29,12 +29,13 @@ export type ModelState = {
|
|
|
29
29
|
types: VerifiedModel['types'];
|
|
30
30
|
};
|
|
31
31
|
export type TypesResult = {
|
|
32
|
-
status: 'unavailable'
|
|
32
|
+
status: Open<'unavailable'>;
|
|
33
33
|
reason: ModelUnavailableReason;
|
|
34
|
+
types: null;
|
|
34
35
|
schema?: string | null;
|
|
35
36
|
revision?: string | null;
|
|
36
37
|
} | {
|
|
37
|
-
status: 'current' | 'cached'
|
|
38
|
+
status: Open<'current' | 'cached'>;
|
|
38
39
|
identity: string;
|
|
39
40
|
version: string;
|
|
40
41
|
verifiedWith: ModelIdentity;
|
|
@@ -52,5 +53,6 @@ export declare function definitionOf(state: ModelState, type: string | undefined
|
|
|
52
53
|
export declare function modelTypes(state: ModelState): TypesResult;
|
|
53
54
|
export declare function cached(state: ModelState): ModelState;
|
|
54
55
|
export declare function sameModel(left: ModelIdentity, right: ModelIdentity): boolean;
|
|
56
|
+
export declare function sameTyping(left: ModelState, right: ModelState): boolean;
|
|
55
57
|
export declare function referenceField(facts: ValueFacts | undefined): boolean;
|
|
56
58
|
//# sourceMappingURL=model.d.ts.map
|
package/dist/model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,MAAM,aAAa,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAClE,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAC/F,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,cAAc,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,CAAC,CAAC;AACnG,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,aAAa,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAA;CAAE,CAAC;AAClE,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC;AAChC,MAAM,MAAM,UAAU,GAClB;IACE,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,GACD;IACE,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC7B,QAAQ,EAAE,aAAa,CAAC;IACxB,YAAY,EAAE,aAAa,CAAC;IAC5B,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CAC/B,CAAC;AACN,MAAM,MAAM,WAAW,GACnB;IACE,MAAM,EAAE,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,MAAM,aAAa,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAClE,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAC/F,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,cAAc,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,CAAC,CAAC;AACnG,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,aAAa,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAA;CAAE,CAAC;AAClE,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC;AAChC,MAAM,MAAM,UAAU,GAClB;IACE,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,GACD;IACE,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC7B,QAAQ,EAAE,aAAa,CAAC;IACxB,YAAY,EAAE,aAAa,CAAC;IAC5B,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CAC/B,CAAC;AACN,MAAM,MAAM,WAAW,GACnB;IACE,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5B,MAAM,EAAE,sBAAsB,CAAC;IAC/B,KAAK,EAAE,IAAI,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,GACD;IACE,MAAM,EAAE,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,aAAa,CAAC;IAC5B,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC;AACN,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAC;CACpC,CAAC;AACF,eAAO,MAAM,QAAQ,EAAE,UAA8D,CAAC;AACtF,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAGhG;AACD,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CAgBzD;AACD,wBAAgB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAEpD;AACD,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAE5E;AACD,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CASvE;AACD,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAErE"}
|
package/dist/model.js
CHANGED
|
@@ -6,7 +6,7 @@ export function definitionOf(state, type) {
|
|
|
6
6
|
}
|
|
7
7
|
export function modelTypes(state) {
|
|
8
8
|
return state.status === 'unavailable'
|
|
9
|
-
? { ...state }
|
|
9
|
+
? { ...state, types: null }
|
|
10
10
|
: {
|
|
11
11
|
status: state.status,
|
|
12
12
|
identity: state.snapshot.identity,
|
|
@@ -23,6 +23,15 @@ export function cached(state) {
|
|
|
23
23
|
export function sameModel(left, right) {
|
|
24
24
|
return left.identity === right.identity && left.version === right.version;
|
|
25
25
|
}
|
|
26
|
+
export function sameTyping(left, right) {
|
|
27
|
+
if (left === right)
|
|
28
|
+
return true;
|
|
29
|
+
if (left.status === 'unavailable' || right.status === 'unavailable') {
|
|
30
|
+
return left.status === right.status;
|
|
31
|
+
}
|
|
32
|
+
return (left.snapshot.schema === right.snapshot.schema &&
|
|
33
|
+
sameModel(left.verifiedWith, right.verifiedWith));
|
|
34
|
+
}
|
|
26
35
|
export function referenceField(facts) {
|
|
27
36
|
return facts?.reference !== undefined || facts?.items?.reference !== undefined;
|
|
28
37
|
}
|
package/dist/observation.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { QueryDocument, QueryGroup, QueryResult } from './query.js';
|
|
1
|
+
import type { QueryCoverage, QueryDocument, QueryGroup, QueryResult } from './query.js';
|
|
2
2
|
export type Observation<T> = {
|
|
3
3
|
current(): T;
|
|
4
4
|
subscribe(listener: (value: T) => void): () => void;
|
|
@@ -13,14 +13,17 @@ export type QueryChange = {
|
|
|
13
13
|
changed: readonly (readonly [RowKey, QueryDocument | QueryGroup])[];
|
|
14
14
|
removed: readonly RowKey[];
|
|
15
15
|
order: readonly RowKey[] | null;
|
|
16
|
+
coverage?: QueryCoverage;
|
|
16
17
|
};
|
|
18
|
+
export type QueryMessage = KeyedResult | QueryChange;
|
|
17
19
|
export type Observed = {
|
|
18
20
|
observation: Observation<unknown>;
|
|
19
21
|
receive(message: unknown): void;
|
|
20
22
|
end(): void;
|
|
21
23
|
};
|
|
22
24
|
export declare function rowsOf(result: QueryResult): readonly (QueryDocument | QueryGroup)[];
|
|
23
|
-
export declare function
|
|
25
|
+
export declare function whole(message: QueryMessage): message is KeyedResult;
|
|
26
|
+
export declare function applied(keyed: KeyedResult, message: QueryMessage): KeyedResult;
|
|
24
27
|
export declare function observed(first: unknown, stop: () => void, keyed: boolean): Observed;
|
|
25
28
|
export declare function opened(watch: (deliver: (message: unknown) => void) => () => void, keyed: boolean): Promise<Observation<unknown>>;
|
|
26
29
|
export declare function observing<Topic extends string>(watch: (topic: Topic, input: readonly unknown[], deliver: (message: unknown) => void) => () => void): (topic: Topic, ...input: unknown[]) => Promise<Observation<unknown>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observation.d.ts","sourceRoot":"","sources":["../src/observation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"observation.d.ts","sourceRoot":"","sources":["../src/observation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAExF,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,OAAO,IAAI,CAAC,CAAC;IACb,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACpD,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAErC,MAAM,MAAM,WAAW,GAAG;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;AAE3E,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC;IACpE,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,WAAW,CAAC;AAErD,MAAM,MAAM,QAAQ,GAAG;IACrB,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAChC,GAAG,IAAI,IAAI,CAAC;CACb,CAAC;AAEF,wBAAgB,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC,aAAa,GAAG,UAAU,CAAC,EAAE,CAGnF;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,IAAI,WAAW,CAEnE;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,GAAG,WAAW,CAkB9E;AAiBD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,QAAQ,CAkCnF;AAED,wBAAgB,MAAM,CACpB,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,KAAK,MAAM,IAAI,EAC1D,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAiB/B;AAED,wBAAgB,SAAS,CAAC,KAAK,SAAS,MAAM,EAC5C,KAAK,EAAE,CACL,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,KAChC,MAAM,IAAI,WAEA,KAAK,YAAY,OAAO,EAAE,KAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAQ1E"}
|
package/dist/observation.js
CHANGED
|
@@ -1,19 +1,30 @@
|
|
|
1
1
|
export function rowsOf(result) {
|
|
2
|
-
|
|
2
|
+
if ('groups' in result)
|
|
3
|
+
return result.groups;
|
|
4
|
+
return 'documents' in result ? result.documents : [];
|
|
3
5
|
}
|
|
4
|
-
export function
|
|
5
|
-
|
|
6
|
+
export function whole(message) {
|
|
7
|
+
return 'result' in message;
|
|
8
|
+
}
|
|
9
|
+
export function applied(keyed, message) {
|
|
10
|
+
if (whole(message))
|
|
11
|
+
return message;
|
|
12
|
+
const result = keyed.result;
|
|
13
|
+
if ('pending' in result)
|
|
14
|
+
return keyed;
|
|
15
|
+
const rows = rowsOf(result);
|
|
6
16
|
const byKey = new Map(keyed.keys.map((key, index) => [key, rows[index]]));
|
|
7
|
-
for (const key of
|
|
17
|
+
for (const key of message.removed)
|
|
8
18
|
byKey.delete(key);
|
|
9
|
-
for (const [key, row] of
|
|
19
|
+
for (const [key, row] of message.changed)
|
|
10
20
|
byKey.set(key, row);
|
|
11
|
-
const keys =
|
|
21
|
+
const keys = message.order ?? keyed.keys.filter((key) => byKey.has(key));
|
|
12
22
|
const next = keys.map((key) => byKey.get(key));
|
|
23
|
+
const coverage = message.coverage ?? result.coverage;
|
|
13
24
|
return {
|
|
14
|
-
result: 'groups' in
|
|
15
|
-
? { groups: next }
|
|
16
|
-
: { documents: next },
|
|
25
|
+
result: 'groups' in result
|
|
26
|
+
? { groups: next, coverage }
|
|
27
|
+
: { documents: next, coverage },
|
|
17
28
|
keys,
|
|
18
29
|
};
|
|
19
30
|
}
|
|
@@ -27,11 +38,11 @@ function keyedResult(first) {
|
|
|
27
38
|
},
|
|
28
39
|
};
|
|
29
40
|
}
|
|
30
|
-
function
|
|
41
|
+
function replaced(first) {
|
|
31
42
|
return { value: first, next: (message) => message };
|
|
32
43
|
}
|
|
33
44
|
export function observed(first, stop, keyed) {
|
|
34
|
-
const reducer = keyed ? keyedResult(first) :
|
|
45
|
+
const reducer = keyed ? keyedResult(first) : replaced(first);
|
|
35
46
|
let value = reducer.value;
|
|
36
47
|
let open = true;
|
|
37
48
|
const listeners = new Set();
|
package/dist/outcome.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ActionResult, AdapterFailure, HistoryResult, ProviderRefusal, RoomVersionAt, ScopedRefusal } from './adapter.js';
|
|
1
|
+
import type { ActionResult, AdapterFailure, BinaryResult, HistoryResult, ProviderRefusal, RoomVersionAt, ScopedRefusal } from './adapter.js';
|
|
2
2
|
import type { ChangeBatch } from './change.js';
|
|
3
3
|
type Refused<Kind extends string> = ProviderRefusal & {
|
|
4
4
|
kind: Kind;
|
|
@@ -14,6 +14,16 @@ export type CallResult = {
|
|
|
14
14
|
export type HistoryAnswer = Exclude<HistoryResult, {
|
|
15
15
|
kind: Failure['kind'];
|
|
16
16
|
}> | Failure;
|
|
17
|
+
export type BinaryAnswer = {
|
|
18
|
+
kind: 'binary';
|
|
19
|
+
blob: Blob;
|
|
20
|
+
} | Refused<'rejected'> | Refused<'absent'> | Failure;
|
|
21
|
+
export declare function absentBinary(path: string): BinaryAnswer;
|
|
22
|
+
export declare function binaryAnswer(result: BinaryResult): BinaryAnswer;
|
|
23
|
+
export type Offline = {
|
|
24
|
+
readonly kind: 'offline';
|
|
25
|
+
};
|
|
26
|
+
export declare const OFFLINE: Offline;
|
|
17
27
|
export declare const UNCERTAIN: Failure;
|
|
18
28
|
export declare function undeclared(name: string): CallResult;
|
|
19
29
|
export declare function failure(result: AdapterFailure): Failure;
|
package/dist/outcome.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outcome.d.ts","sourceRoot":"","sources":["../src/outcome.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,aAAa,EACb,eAAe,EACf,aAAa,EACb,aAAa,EACd,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,KAAK,OAAO,CAAC,IAAI,SAAS,MAAM,IAAI,eAAe,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC;AAErE,MAAM,MAAM,OAAO,GACf,OAAO,CAAC,uBAAuB,CAAC,GAChC,OAAO,CAAC,uBAAuB,CAAC,GAChC,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACpD,aAAa,CAAC;AAElB,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,EAAE,CAAC,EAAE,aAAa,CAAA;CAAE,GACvD,OAAO,CAAC,UAAU,CAAC,GACnB,OAAO,CAAC,YAAY,CAAC,GACrB,OAAO,CAAC;AAEZ,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC,GAAG,OAAO,CAAC;AAExF,eAAO,MAAM,SAAS,EAAE,OAKvB,CAAC;AAEF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAEnD;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAiBvD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU,CAE7D;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAIlE;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,CAAA;CAAE,GAC3C;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GAAG,CACvD,UAAU,GACV;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAC/D,CAAC"}
|
|
1
|
+
{"version":3,"file":"outcome.d.ts","sourceRoot":"","sources":["../src/outcome.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,aAAa,EACb,eAAe,EACf,aAAa,EACb,aAAa,EACd,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,KAAK,OAAO,CAAC,IAAI,SAAS,MAAM,IAAI,eAAe,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC;AAErE,MAAM,MAAM,OAAO,GACf,OAAO,CAAC,uBAAuB,CAAC,GAChC,OAAO,CAAC,uBAAuB,CAAC,GAChC,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACpD,aAAa,CAAC;AAElB,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,EAAE,CAAC,EAAE,aAAa,CAAA;CAAE,GACvD,OAAO,CAAC,UAAU,CAAC,GACnB,OAAO,CAAC,YAAY,CAAC,GACrB,OAAO,CAAC;AAEZ,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC,GAAG,OAAO,CAAC;AAExF,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,GAC9B,OAAO,CAAC,UAAU,CAAC,GACnB,OAAO,CAAC,QAAQ,CAAC,GACjB,OAAO,CAAC;AAEZ,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAEvD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAE/D;AAED,MAAM,MAAM,OAAO,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAEnD,eAAO,MAAM,OAAO,EAAE,OAA6B,CAAC;AAEpD,eAAO,MAAM,SAAS,EAAE,OAKvB,CAAC;AAEF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAEnD;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAiBvD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU,CAE7D;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAIlE;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,CAAA;CAAE,GAC3C;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GAAG,CACvD,UAAU,GACV;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAC/D,CAAC"}
|
package/dist/outcome.js
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
export function absentBinary(path) {
|
|
2
|
+
return { kind: 'absent', code: 'binary-file-absent', fields: { path }, retryable: false };
|
|
3
|
+
}
|
|
4
|
+
export function binaryAnswer(result) {
|
|
5
|
+
return result.kind === 'binary' || result.kind === 'rejected' ? result : failure(result);
|
|
6
|
+
}
|
|
7
|
+
export const OFFLINE = { kind: 'offline' };
|
|
1
8
|
export const UNCERTAIN = {
|
|
2
9
|
kind: 'transport-uncertainty',
|
|
3
10
|
code: 'transport-uncertainty',
|
package/dist/overlay.d.ts
CHANGED
|
@@ -1,15 +1,27 @@
|
|
|
1
|
-
import type { HeadChange } from './adapter.js';
|
|
1
|
+
import type { BinaryFile, HeadChange } from './adapter.js';
|
|
2
2
|
import type { ChangeBatch } from './change.js';
|
|
3
3
|
export type Heads = {
|
|
4
4
|
revisions: Readonly<Record<string, string>>;
|
|
5
5
|
changes: Readonly<Record<string, HeadChange>>;
|
|
6
6
|
};
|
|
7
|
+
export type HeldBinary = ({
|
|
8
|
+
readonly state: 'accepted';
|
|
9
|
+
} & BinaryFile) | {
|
|
10
|
+
readonly state: 'pending';
|
|
11
|
+
readonly localId: string;
|
|
12
|
+
readonly byteLength: number;
|
|
13
|
+
readonly mediaType: string;
|
|
14
|
+
readonly sha256: string;
|
|
15
|
+
};
|
|
7
16
|
export type Layer = Heads & {
|
|
8
17
|
documents: Readonly<Record<string, string>>;
|
|
9
|
-
|
|
18
|
+
binaries: Readonly<Record<string, HeldBinary>>;
|
|
10
19
|
};
|
|
20
|
+
export declare function acceptedBinaries(files: Readonly<Record<string, BinaryFile>>): Record<string, HeldBinary>;
|
|
21
|
+
export declare function sameBinary(left: HeldBinary | undefined, right: HeldBinary | undefined): boolean;
|
|
11
22
|
export declare function sameChange(left: HeadChange | undefined, right: HeadChange | undefined): boolean;
|
|
12
23
|
export declare function overlay(base: Layer, queue: readonly ChangeBatch[], unapplied?: () => void): Layer;
|
|
13
24
|
export declare function sameLayerText(left: Layer, right: Layer): boolean;
|
|
25
|
+
export declare function changedPaths(left: Layer, right: Layer): ReadonlySet<string>;
|
|
14
26
|
export declare function overlayChanged(base: Layer, queue: readonly ChangeBatch[], previousBase: Layer, previousQueue: readonly ChangeBatch[], previousVisible: Layer): Layer;
|
|
15
27
|
//# sourceMappingURL=overlay.d.ts.map
|
package/dist/overlay.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../src/overlay.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../src/overlay.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAU,WAAW,EAAgB,MAAM,aAAa,CAAC;AAGrE,MAAM,MAAM,KAAK,GAAG;IAClB,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5C,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,UAAU,GAClB,CAAC;IAAE,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GAAG,UAAU,CAAC,GAC7C;IACE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEN,MAAM,MAAM,KAAK,GAAG,KAAK,GAAG;IAC1B,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5C,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;CAChD,CAAC;AAEF,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,GAC1C,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAI5B;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAW/F;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAQ/F;AAsKD,wBAAgB,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,WAAW,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,KAAK,CAmBjG;AAQD,wBAAgB,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAKhE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAO3E;AA6BD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,KAAK,EACX,KAAK,EAAE,SAAS,WAAW,EAAE,EAC7B,YAAY,EAAE,KAAK,EACnB,aAAa,EAAE,SAAS,WAAW,EAAE,EACrC,eAAe,EAAE,KAAK,GACrB,KAAK,CAwDP"}
|
package/dist/overlay.js
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
import { apply, parse, serialize } from '@agentshouse/mdmodel';
|
|
2
|
+
import { differing, drafted, patched, settled } from './shared.js';
|
|
3
|
+
export function acceptedBinaries(files) {
|
|
4
|
+
return Object.fromEntries(Object.entries(files).map(([path, file]) => [path, { state: 'accepted', ...file }]));
|
|
5
|
+
}
|
|
6
|
+
export function sameBinary(left, right) {
|
|
7
|
+
if (left === undefined || right === undefined)
|
|
8
|
+
return left === right;
|
|
9
|
+
return (left.state === right.state &&
|
|
10
|
+
left.byteLength === right.byteLength &&
|
|
11
|
+
left.mediaType === right.mediaType &&
|
|
12
|
+
left.sha256 === right.sha256 &&
|
|
13
|
+
(left.state === 'accepted'
|
|
14
|
+
? right.state === 'accepted' && left.fileRef === right.fileRef
|
|
15
|
+
: right.state === 'pending' && left.localId === right.localId));
|
|
16
|
+
}
|
|
2
17
|
export function sameChange(left, right) {
|
|
3
18
|
if (left === undefined || right === undefined)
|
|
4
19
|
return left === right;
|
|
@@ -92,8 +107,9 @@ function relocate(staged, from, to) {
|
|
|
92
107
|
delete staged.documents[from];
|
|
93
108
|
staged.documents[to] = text;
|
|
94
109
|
}
|
|
95
|
-
else if (staged.
|
|
96
|
-
staged.
|
|
110
|
+
else if (staged.binaries[from] !== undefined) {
|
|
111
|
+
staged.binaries[to] = staged.binaries[from];
|
|
112
|
+
delete staged.binaries[from];
|
|
97
113
|
}
|
|
98
114
|
else {
|
|
99
115
|
return false;
|
|
@@ -116,10 +132,11 @@ function erase(staged, path) {
|
|
|
116
132
|
delete staged.documents[path];
|
|
117
133
|
delete staged.revisions[path];
|
|
118
134
|
delete staged.changes[path];
|
|
119
|
-
staged.
|
|
135
|
+
delete staged.binaries[path];
|
|
120
136
|
}
|
|
121
137
|
function stage(staged, change, priors) {
|
|
122
138
|
if (change.kind === 'field' || change.kind === 'section' || change.kind === 'preamble') {
|
|
139
|
+
delete staged.revisions[change.path];
|
|
123
140
|
return edit(staged, change, priors);
|
|
124
141
|
}
|
|
125
142
|
if (change.kind === 'create') {
|
|
@@ -129,11 +146,26 @@ function stage(staged, change, priors) {
|
|
|
129
146
|
return true;
|
|
130
147
|
}
|
|
131
148
|
if (change.kind === 'replace') {
|
|
149
|
+
delete staged.revisions[change.path];
|
|
132
150
|
if (staged.documents[change.path] === undefined)
|
|
133
151
|
return false;
|
|
134
152
|
staged.documents[change.path] = change.content;
|
|
135
153
|
return true;
|
|
136
154
|
}
|
|
155
|
+
if (change.kind === 'binary') {
|
|
156
|
+
if (staged.documents[change.path] !== undefined)
|
|
157
|
+
return false;
|
|
158
|
+
staged.binaries[change.path] = {
|
|
159
|
+
state: 'pending',
|
|
160
|
+
localId: change.localId,
|
|
161
|
+
byteLength: change.byteLength,
|
|
162
|
+
mediaType: change.mediaType,
|
|
163
|
+
sha256: change.sha256,
|
|
164
|
+
};
|
|
165
|
+
delete staged.revisions[change.path];
|
|
166
|
+
delete staged.changes[change.path];
|
|
167
|
+
return true;
|
|
168
|
+
}
|
|
137
169
|
if (change.kind === 'move') {
|
|
138
170
|
return relocate(staged, change.path, change.to);
|
|
139
171
|
}
|
|
@@ -142,10 +174,10 @@ function stage(staged, change, priors) {
|
|
|
142
174
|
}
|
|
143
175
|
export function overlay(base, queue, unapplied) {
|
|
144
176
|
const staged = {
|
|
145
|
-
documents:
|
|
146
|
-
|
|
147
|
-
revisions:
|
|
148
|
-
changes:
|
|
177
|
+
documents: drafted(base.documents),
|
|
178
|
+
binaries: drafted(base.binaries),
|
|
179
|
+
revisions: drafted(base.revisions),
|
|
180
|
+
changes: drafted(base.changes),
|
|
149
181
|
};
|
|
150
182
|
for (const batch of queue) {
|
|
151
183
|
const priors = priorsOf(batch.preconditions);
|
|
@@ -155,24 +187,29 @@ export function overlay(base, queue, unapplied) {
|
|
|
155
187
|
}
|
|
156
188
|
}
|
|
157
189
|
return {
|
|
158
|
-
documents: staged.documents,
|
|
159
|
-
|
|
160
|
-
revisions: staged.revisions,
|
|
161
|
-
changes: staged.changes,
|
|
190
|
+
documents: settled(staged.documents),
|
|
191
|
+
binaries: settled(staged.binaries),
|
|
192
|
+
revisions: settled(staged.revisions),
|
|
193
|
+
changes: settled(staged.changes),
|
|
162
194
|
};
|
|
163
195
|
}
|
|
164
196
|
function pathsOf(batch) {
|
|
165
197
|
return batch.changes.flatMap((change) => change.kind === 'move' ? [change.path, change.to] : [change.path]);
|
|
166
198
|
}
|
|
167
199
|
export function sameLayerText(left, right) {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
200
|
+
return (differing(left.documents, right.documents).size === 0 &&
|
|
201
|
+
differing(left.binaries, right.binaries, sameBinary).size === 0);
|
|
202
|
+
}
|
|
203
|
+
export function changedPaths(left, right) {
|
|
204
|
+
return new Set([
|
|
205
|
+
...differing(left.documents, right.documents),
|
|
206
|
+
...differing(left.revisions, right.revisions),
|
|
207
|
+
...differing(left.changes, right.changes, sameChange),
|
|
208
|
+
...differing(left.binaries, right.binaries, sameBinary),
|
|
209
|
+
]);
|
|
173
210
|
}
|
|
174
211
|
function replayHeads(base, queue) {
|
|
175
|
-
const heads = { revisions:
|
|
212
|
+
const heads = { revisions: drafted(base.revisions), changes: drafted(base.changes) };
|
|
176
213
|
for (const batch of queue) {
|
|
177
214
|
for (const change of batch.changes) {
|
|
178
215
|
if (change.kind === 'remove') {
|
|
@@ -182,12 +219,22 @@ function replayHeads(base, queue) {
|
|
|
182
219
|
else if (change.kind === 'create') {
|
|
183
220
|
delete heads.changes[change.path];
|
|
184
221
|
}
|
|
222
|
+
else if (change.kind === 'replace' ||
|
|
223
|
+
change.kind === 'field' ||
|
|
224
|
+
change.kind === 'section' ||
|
|
225
|
+
change.kind === 'preamble') {
|
|
226
|
+
delete heads.revisions[change.path];
|
|
227
|
+
}
|
|
228
|
+
else if (change.kind === 'binary') {
|
|
229
|
+
delete heads.revisions[change.path];
|
|
230
|
+
delete heads.changes[change.path];
|
|
231
|
+
}
|
|
185
232
|
else if (change.kind === 'move') {
|
|
186
233
|
moveHead(heads, change.path, change.to);
|
|
187
234
|
}
|
|
188
235
|
}
|
|
189
236
|
}
|
|
190
|
-
return heads;
|
|
237
|
+
return { revisions: settled(heads.revisions), changes: settled(heads.changes) };
|
|
191
238
|
}
|
|
192
239
|
export function overlayChanged(base, queue, previousBase, previousQueue, previousVisible) {
|
|
193
240
|
const before = previousQueue.map((batch) => JSON.stringify(batch));
|
|
@@ -197,28 +244,11 @@ export function overlayChanged(base, queue, previousBase, previousQueue, previou
|
|
|
197
244
|
sameLayerText(base, previousBase)) {
|
|
198
245
|
return {
|
|
199
246
|
documents: previousVisible.documents,
|
|
200
|
-
|
|
247
|
+
binaries: previousVisible.binaries,
|
|
201
248
|
...replayHeads(base, queue),
|
|
202
249
|
};
|
|
203
250
|
}
|
|
204
|
-
const affected = new Set();
|
|
205
|
-
const paths = new Set([
|
|
206
|
-
...Object.keys(base.documents),
|
|
207
|
-
...Object.keys(previousBase.documents),
|
|
208
|
-
...Object.keys(base.revisions),
|
|
209
|
-
...Object.keys(previousBase.revisions),
|
|
210
|
-
...Object.keys(base.changes),
|
|
211
|
-
...Object.keys(previousBase.changes),
|
|
212
|
-
...base.binaryTargets,
|
|
213
|
-
...previousBase.binaryTargets,
|
|
214
|
-
]);
|
|
215
|
-
for (const path of paths) {
|
|
216
|
-
if (base.documents[path] !== previousBase.documents[path] ||
|
|
217
|
-
base.revisions[path] !== previousBase.revisions[path] ||
|
|
218
|
-
!sameChange(base.changes[path], previousBase.changes[path]) ||
|
|
219
|
-
base.binaryTargets.includes(path) !== previousBase.binaryTargets.includes(path))
|
|
220
|
-
affected.add(path);
|
|
221
|
-
}
|
|
251
|
+
const affected = new Set(changedPaths(base, previousBase));
|
|
222
252
|
const oldIds = new Set(before);
|
|
223
253
|
const newIds = new Set(after);
|
|
224
254
|
for (const batch of previousQueue) {
|
|
@@ -249,6 +279,7 @@ export function overlayChanged(base, queue, previousBase, previousQueue, previou
|
|
|
249
279
|
const documents = {};
|
|
250
280
|
const revisions = {};
|
|
251
281
|
const changes = {};
|
|
282
|
+
const binaries = {};
|
|
252
283
|
for (const path of affected) {
|
|
253
284
|
if (base.documents[path] !== undefined)
|
|
254
285
|
documents[path] = base.documents[path];
|
|
@@ -256,32 +287,14 @@ export function overlayChanged(base, queue, previousBase, previousQueue, previou
|
|
|
256
287
|
revisions[path] = base.revisions[path];
|
|
257
288
|
if (base.changes[path] !== undefined)
|
|
258
289
|
changes[path] = base.changes[path];
|
|
290
|
+
if (base.binaries[path] !== undefined)
|
|
291
|
+
binaries[path] = base.binaries[path];
|
|
259
292
|
}
|
|
260
|
-
const staged = overlay({
|
|
261
|
-
documents,
|
|
262
|
-
revisions,
|
|
263
|
-
changes,
|
|
264
|
-
binaryTargets: base.binaryTargets.filter((path) => affected.has(path)),
|
|
265
|
-
}, queue.filter((batch) => pathsOf(batch).some((path) => affected.has(path))));
|
|
266
|
-
const mergedDocuments = { ...previousVisible.documents };
|
|
267
|
-
const mergedRevisions = { ...previousVisible.revisions };
|
|
268
|
-
const mergedChanges = { ...previousVisible.changes };
|
|
269
|
-
const mergedTargets = new Set(previousVisible.binaryTargets);
|
|
270
|
-
for (const path of affected) {
|
|
271
|
-
delete mergedDocuments[path];
|
|
272
|
-
delete mergedRevisions[path];
|
|
273
|
-
delete mergedChanges[path];
|
|
274
|
-
mergedTargets.delete(path);
|
|
275
|
-
}
|
|
276
|
-
Object.assign(mergedDocuments, staged.documents);
|
|
277
|
-
Object.assign(mergedRevisions, staged.revisions);
|
|
278
|
-
Object.assign(mergedChanges, staged.changes);
|
|
279
|
-
for (const path of staged.binaryTargets)
|
|
280
|
-
mergedTargets.add(path);
|
|
293
|
+
const staged = overlay({ documents, revisions, changes, binaries }, queue.filter((batch) => pathsOf(batch).some((path) => affected.has(path))));
|
|
281
294
|
return {
|
|
282
|
-
documents:
|
|
283
|
-
revisions:
|
|
284
|
-
changes:
|
|
285
|
-
|
|
295
|
+
documents: patched(previousVisible.documents, Object.entries(staged.documents), affected),
|
|
296
|
+
revisions: patched(previousVisible.revisions, Object.entries(staged.revisions), affected),
|
|
297
|
+
changes: patched(previousVisible.changes, Object.entries(staged.changes), affected),
|
|
298
|
+
binaries: patched(previousVisible.binaries, Object.entries(staged.binaries), affected),
|
|
286
299
|
};
|
|
287
300
|
}
|