@agentshouse/mdruntime-adapter 0.1.0-cca5d676bc88e → 0.1.0-ccd2ccb1f7214
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 +278 -210
- package/dist/actions.d.ts +63 -2
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +157 -138
- package/dist/adapter.d.ts +1 -0
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +322 -100
- package/dist/discovery.d.ts +4 -4
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +26 -12
- package/dist/gather.d.ts +1 -0
- package/dist/gather.d.ts.map +1 -1
- package/dist/gather.js +11 -6
- package/dist/handed.d.ts +15 -0
- package/dist/handed.d.ts.map +1 -0
- package/dist/handed.js +38 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/model.d.ts +1 -1
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +21 -7
- package/dist/read.d.ts +35 -7
- package/dist/read.d.ts.map +1 -1
- package/dist/read.js +160 -79
- package/dist/referrer.d.ts +7 -0
- package/dist/referrer.d.ts.map +1 -0
- package/dist/referrer.js +35 -0
- package/dist/refusal.d.ts +5 -9
- package/dist/refusal.d.ts.map +1 -1
- package/dist/refusal.js +31 -17
- package/dist/site.d.ts +1 -1
- package/dist/site.d.ts.map +1 -1
- package/dist/site.js +189 -54
- package/dist/stream.d.ts +4 -2
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +330 -16
- package/dist/transport.d.ts +64 -11
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +3 -1
- package/dist/version.d.ts +1 -0
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/write.d.ts +3 -9
- package/dist/write.d.ts.map +1 -1
- package/dist/write.js +97 -20
- package/package.json +3 -4
- package/dist/links.d.ts +0 -20
- package/dist/links.d.ts.map +0 -1
- package/dist/links.js +0 -104
package/dist/version.js
CHANGED
|
@@ -18,7 +18,7 @@ export function readPosition(held) {
|
|
|
18
18
|
export function presented(authority, at) {
|
|
19
19
|
return { authority, position: at.position, log_epoch: at.logEpoch };
|
|
20
20
|
}
|
|
21
|
-
const DECIMAL = /^(?:0|[1-9][0-9]*)$/;
|
|
21
|
+
export const DECIMAL = /^(?:0|[1-9][0-9]*)$/;
|
|
22
22
|
export function reachedVersion(roomVersion, target, currentEpoch) {
|
|
23
23
|
if (roomVersion === target)
|
|
24
24
|
return true;
|
package/dist/write.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ChangeBatch, type HistoryResult, type MutationResult } from '@agentshouse/mdruntime';
|
|
2
2
|
import type { HouseBounds } from './discovery.js';
|
|
3
3
|
export type HouseOperation = Readonly<Record<string, unknown>>;
|
|
4
4
|
export type ChangeMapping = {
|
|
@@ -21,14 +21,7 @@ export declare function deltaBody(changes: readonly HouseOperation[]): string;
|
|
|
21
21
|
export declare function deltaBytes(delta: string): number;
|
|
22
22
|
export declare function uploadable(inline: Readonly<Record<string, unknown>>, bytes: number, bounds: Pick<HouseBounds, 'max_inline_body_bytes' | 'max_upload_bytes'>): boolean;
|
|
23
23
|
export declare function deltaDigest(delta: string): Promise<string>;
|
|
24
|
-
export
|
|
25
|
-
kind: 'accepted';
|
|
26
|
-
}> | (Extract<MutationResult, {
|
|
27
|
-
kind: 'accepted';
|
|
28
|
-
}> & {
|
|
29
|
-
originals: readonly RoomAttachment[];
|
|
30
|
-
});
|
|
31
|
-
export declare function mutationOutcome(status: number, body: unknown, locator: string, handle: string): SubmittedOutcome;
|
|
24
|
+
export declare function mutationOutcome(status: number, body: unknown, locator: string, handle: string): MutationResult;
|
|
32
25
|
export declare function rejectedMapping(mapping: Extract<ChangeMapping, {
|
|
33
26
|
kind: 'unmapped';
|
|
34
27
|
}>): {
|
|
@@ -38,6 +31,7 @@ export declare function rejectedMapping(mapping: Extract<ChangeMapping, {
|
|
|
38
31
|
fields: {
|
|
39
32
|
path: string;
|
|
40
33
|
};
|
|
34
|
+
retryable: boolean;
|
|
41
35
|
};
|
|
42
36
|
export declare function revisionBody(input: {
|
|
43
37
|
path: string;
|
package/dist/write.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../src/write.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../src/write.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,WAAW,EAEhB,KAAK,aAAa,EAElB,KAAK,cAAc,EAEpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAOlD,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAE/D,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAwHrD,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAQ9E;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,aAAa,CAK/D;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,GAAG,SAAS,MAAM,EAAE,CAQhF;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,GAAG,MAAM,CAEpE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,UAAU,CACxB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACzC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,uBAAuB,GAAG,kBAAkB,CAAC,GACtE,OAAO,CAKT;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE1D;AAiDD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,cAAc,CAmFhB;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;IAEjF,IAAI,EAAE,UAAU;IAChB,QAAQ;IACR,IAAI;IACJ,MAAM;QAAI,IAAI;;IACd,SAAS;EAEZ;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAM1B;AA4BD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,aAAa,CAyDf"}
|
package/dist/write.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { departure, } from '@agentshouse/mdruntime';
|
|
2
|
+
import { binaryFileOf, headChange, identities } from './read.js';
|
|
2
3
|
import { sha256Hex, textBytes } from './digest.js';
|
|
3
4
|
import { nativePath, roomLocalPath } from './map.js';
|
|
4
5
|
import { classifyDoor, doorRefusal, scopedRefusal } from './refusal.js';
|
|
@@ -73,6 +74,25 @@ function operationOf(batch, change, handle) {
|
|
|
73
74
|
const operation = created(change, path);
|
|
74
75
|
return operation === null ? { rule: 'type-missing' } : { operation };
|
|
75
76
|
}
|
|
77
|
+
if (change.kind === 'binary') {
|
|
78
|
+
const written = {
|
|
79
|
+
op: 'upload',
|
|
80
|
+
path,
|
|
81
|
+
local_id: change.localId,
|
|
82
|
+
bytes: change.byteLength,
|
|
83
|
+
sha256: change.sha256,
|
|
84
|
+
media_type: change.mediaType,
|
|
85
|
+
};
|
|
86
|
+
const from = departure(batch.changes, batch.changes.indexOf(change));
|
|
87
|
+
if (from === change.path && priorAbsence(batch, change.path) !== undefined)
|
|
88
|
+
return { operation: written };
|
|
89
|
+
const replaced = priorExistence(batch, from);
|
|
90
|
+
if (replaced === undefined)
|
|
91
|
+
return { rule: 'precondition-missing' };
|
|
92
|
+
if (!('base' in replaced))
|
|
93
|
+
return { rule: 'presence-base-unrepresentable' };
|
|
94
|
+
return { operation: { ...written, base: replaced.base } };
|
|
95
|
+
}
|
|
76
96
|
const existence = priorExistence(batch, change.path);
|
|
77
97
|
if (existence === undefined)
|
|
78
98
|
return { rule: 'precondition-missing' };
|
|
@@ -138,6 +158,12 @@ function material(value, handle) {
|
|
|
138
158
|
return null;
|
|
139
159
|
if (file.revision !== null && file.revision !== undefined && typeof file.revision !== 'string')
|
|
140
160
|
return null;
|
|
161
|
+
const binary = binaryFileOf(file);
|
|
162
|
+
if (binary === null)
|
|
163
|
+
return null;
|
|
164
|
+
const head = headChange(file);
|
|
165
|
+
if (head === null)
|
|
166
|
+
return null;
|
|
141
167
|
let path;
|
|
142
168
|
try {
|
|
143
169
|
path = roomLocalPath(file.path, handle);
|
|
@@ -149,6 +175,8 @@ function material(value, handle) {
|
|
|
149
175
|
path,
|
|
150
176
|
content: file.content,
|
|
151
177
|
revision: typeof file.revision === 'string' ? file.revision : null,
|
|
178
|
+
...(binary === undefined ? {} : { binary }),
|
|
179
|
+
...(head === undefined ? {} : { head }),
|
|
152
180
|
});
|
|
153
181
|
}
|
|
154
182
|
return held;
|
|
@@ -166,12 +194,21 @@ export function mutationOutcome(status, body, locator, handle) {
|
|
|
166
194
|
if (refusal !== null && refusal.code === 'service_mode_write_halted') {
|
|
167
195
|
return { kind: 'write-halted' };
|
|
168
196
|
}
|
|
169
|
-
if (refusal !== null && refusal.code === '
|
|
170
|
-
return
|
|
197
|
+
if (refusal !== null && refusal.code === 'expired') {
|
|
198
|
+
return refusal.fields.restored === true
|
|
199
|
+
? { kind: 'expired', restored: true }
|
|
200
|
+
: { kind: 'expired' };
|
|
201
|
+
}
|
|
171
202
|
if (refusal !== null && refusal.code === 'edit_conflict') {
|
|
172
203
|
const { current, ...fields } = refusal.fields;
|
|
173
204
|
const held = material(current, handle) ?? [];
|
|
174
|
-
return {
|
|
205
|
+
return {
|
|
206
|
+
kind: 'conflicted',
|
|
207
|
+
affected: affectedOf(held),
|
|
208
|
+
code: refusal.code,
|
|
209
|
+
fields,
|
|
210
|
+
retryable: refusal.retryable,
|
|
211
|
+
};
|
|
175
212
|
}
|
|
176
213
|
if (refusal !== null && status === 404) {
|
|
177
214
|
return scopedRefusal(locator, 'undisclosed', refusal);
|
|
@@ -181,15 +218,26 @@ export function mutationOutcome(status, body, locator, handle) {
|
|
|
181
218
|
if (refusal?.retryable === true &&
|
|
182
219
|
typeof reset === 'string' &&
|
|
183
220
|
classified?.kind === 'transport-uncertainty') {
|
|
184
|
-
return {
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
221
|
+
return {
|
|
222
|
+
kind: 'retryable-refusal',
|
|
223
|
+
code: refusal.code,
|
|
224
|
+
fields: refusal.fields,
|
|
225
|
+
retryable: true,
|
|
226
|
+
reset,
|
|
227
|
+
};
|
|
188
228
|
}
|
|
229
|
+
if (classified !== null && classified.kind !== 'scoped-refusal')
|
|
230
|
+
return classified;
|
|
189
231
|
if (classified !== null && status === 403)
|
|
190
232
|
return classified;
|
|
191
233
|
if (refusal !== null && status >= 400) {
|
|
192
|
-
return {
|
|
234
|
+
return {
|
|
235
|
+
kind: 'rejected',
|
|
236
|
+
affected: {},
|
|
237
|
+
code: refusal.code,
|
|
238
|
+
fields: refusal.fields,
|
|
239
|
+
retryable: refusal.retryable,
|
|
240
|
+
};
|
|
193
241
|
}
|
|
194
242
|
if (status !== 200 || typeof body !== 'object' || body === null) {
|
|
195
243
|
return { kind: 'transport-uncertainty' };
|
|
@@ -201,27 +249,33 @@ export function mutationOutcome(status, body, locator, handle) {
|
|
|
201
249
|
const contents = material(held.contents, handle);
|
|
202
250
|
if (contents === null)
|
|
203
251
|
return { kind: 'transport-uncertainty' };
|
|
204
|
-
const originals = parseOriginals(held.originals);
|
|
205
|
-
if (originals === null)
|
|
206
|
-
return { kind: 'transport-uncertainty' };
|
|
207
252
|
const documents = {};
|
|
208
253
|
const revisions = {};
|
|
254
|
+
const changes = {};
|
|
255
|
+
const binaryFiles = {};
|
|
209
256
|
const removals = [];
|
|
210
257
|
for (const entry of contents) {
|
|
211
|
-
if (entry.
|
|
258
|
+
if (entry.revision === null) {
|
|
212
259
|
removals.push(entry.path);
|
|
213
260
|
continue;
|
|
214
261
|
}
|
|
215
|
-
|
|
262
|
+
if (entry.content !== null)
|
|
263
|
+
documents[entry.path] = entry.content;
|
|
264
|
+
if (entry.binary !== undefined)
|
|
265
|
+
binaryFiles[entry.path] = entry.binary;
|
|
216
266
|
revisions[entry.path] = entry.revision;
|
|
267
|
+
if (entry.head !== undefined)
|
|
268
|
+
changes[entry.path] = entry.head;
|
|
217
269
|
}
|
|
218
270
|
return {
|
|
219
271
|
kind: 'accepted',
|
|
220
272
|
roomVersion: roomVersion(at),
|
|
221
273
|
documents,
|
|
222
274
|
revisions,
|
|
275
|
+
...identities(revisions),
|
|
276
|
+
changes,
|
|
223
277
|
removals: removals.sort(),
|
|
224
|
-
|
|
278
|
+
...(Object.keys(binaryFiles).length === 0 ? {} : { binaryFiles }),
|
|
225
279
|
};
|
|
226
280
|
}
|
|
227
281
|
export function rejectedMapping(mapping) {
|
|
@@ -230,6 +284,7 @@ export function rejectedMapping(mapping) {
|
|
|
230
284
|
affected: {},
|
|
231
285
|
code: mapping.rule,
|
|
232
286
|
fields: { path: mapping.path },
|
|
287
|
+
retryable: false,
|
|
233
288
|
};
|
|
234
289
|
}
|
|
235
290
|
export function revisionBody(input) {
|
|
@@ -251,11 +306,21 @@ function revisionAuthor(entry) {
|
|
|
251
306
|
}
|
|
252
307
|
return null;
|
|
253
308
|
}
|
|
309
|
+
function historyBinary(entry) {
|
|
310
|
+
if (entry.file === undefined)
|
|
311
|
+
return undefined;
|
|
312
|
+
const { file, bytes, media_type: mediaType, sha256 } = entry;
|
|
313
|
+
if (typeof file !== 'string' ||
|
|
314
|
+
typeof bytes !== 'number' ||
|
|
315
|
+
typeof mediaType !== 'string' ||
|
|
316
|
+
typeof sha256 !== 'string')
|
|
317
|
+
return null;
|
|
318
|
+
return { fileRef: file, byteLength: bytes, mediaType, sha256 };
|
|
319
|
+
}
|
|
254
320
|
export function historyOutcome(status, body, locator, request) {
|
|
255
321
|
const classified = classifyDoor(status, body, locator);
|
|
256
|
-
if (classified !== null)
|
|
257
|
-
return classified
|
|
258
|
-
}
|
|
322
|
+
if (classified !== null)
|
|
323
|
+
return classified;
|
|
259
324
|
if (status !== 200 || typeof body !== 'object' || body === null) {
|
|
260
325
|
return { kind: 'transport-uncertainty' };
|
|
261
326
|
}
|
|
@@ -276,11 +341,14 @@ export function historyOutcome(status, body, locator, request) {
|
|
|
276
341
|
return {
|
|
277
342
|
kind: 'scoped-refusal',
|
|
278
343
|
locator,
|
|
279
|
-
scope: '
|
|
344
|
+
scope: 'operation',
|
|
280
345
|
code: 'retained_history_unavailable',
|
|
281
346
|
fields: { path: request.path, revision: request.revision },
|
|
347
|
+
retryable: false,
|
|
282
348
|
};
|
|
283
349
|
}
|
|
350
|
+
if (typeof named.file === 'string')
|
|
351
|
+
return { kind: 'no-history' };
|
|
284
352
|
if (typeof named.content !== 'string')
|
|
285
353
|
return { kind: 'transport-uncertainty' };
|
|
286
354
|
return { kind: 'revision', content: named.content };
|
|
@@ -295,12 +363,21 @@ export function historyOutcome(status, body, locator, request) {
|
|
|
295
363
|
typeof entry.created_at !== 'string') {
|
|
296
364
|
return { kind: 'transport-uncertainty' };
|
|
297
365
|
}
|
|
298
|
-
|
|
366
|
+
const binaryFile = historyBinary(entry);
|
|
367
|
+
if (binaryFile === null)
|
|
368
|
+
return { kind: 'transport-uncertainty' };
|
|
369
|
+
revisions.push({
|
|
370
|
+
revision: entry.revision,
|
|
371
|
+
author,
|
|
372
|
+
time: entry.created_at,
|
|
373
|
+
...(binaryFile === undefined ? {} : { binaryFile }),
|
|
374
|
+
});
|
|
299
375
|
}
|
|
300
376
|
const next = held.next_before;
|
|
301
377
|
return {
|
|
302
378
|
kind: 'history',
|
|
303
379
|
revisions,
|
|
304
380
|
...(typeof next === 'number' ? { pageToken: String(next) } : {}),
|
|
381
|
+
...(held.deleted === true ? { deleted: true } : {}),
|
|
305
382
|
};
|
|
306
383
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentshouse/mdruntime-adapter",
|
|
3
|
-
"version": "0.1.0-
|
|
3
|
+
"version": "0.1.0-ccd2ccb1f7214",
|
|
4
4
|
"description": "Agents House Adapter for the MD Runtime",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"exports": {
|
|
15
15
|
".": {
|
|
16
16
|
"types": "./dist/index.d.ts",
|
|
17
|
-
"
|
|
17
|
+
"default": "./dist/index.js"
|
|
18
18
|
},
|
|
19
19
|
"./package.json": "./package.json"
|
|
20
20
|
},
|
|
@@ -25,7 +25,6 @@
|
|
|
25
25
|
"LICENSE"
|
|
26
26
|
],
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@agentshouse/
|
|
29
|
-
"@agentshouse/mdruntime": "0.1.0-cf6041a06849c"
|
|
28
|
+
"@agentshouse/mdruntime": "0.1.0-c3722d1eec14c"
|
|
30
29
|
}
|
|
31
30
|
}
|
package/dist/links.d.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { HeldRoom, MutationResult, RoomAttachment } from '@agentshouse/mdruntime';
|
|
2
|
-
import type { HouseScope, HouseView } from './read.js';
|
|
3
|
-
import type { StreamedAdvancement } from './stream.js';
|
|
4
|
-
export type RoomLinks = {
|
|
5
|
-
roomVersion: string;
|
|
6
|
-
handed: ReadonlyMap<string, RoomAttachment>;
|
|
7
|
-
paths: ReadonlyMap<string, ReadonlySet<string>>;
|
|
8
|
-
revisions: ReadonlyMap<string, string>;
|
|
9
|
-
};
|
|
10
|
-
export declare function scopeLinks(scope: HouseScope): RoomLinks;
|
|
11
|
-
export declare function heldLinks(held: HeldRoom): RoomLinks;
|
|
12
|
-
export declare function acceptedLinks(held: RoomLinks, accepted: Extract<MutationResult, {
|
|
13
|
-
kind: 'accepted';
|
|
14
|
-
}>, roomVersion: string, originals: readonly RoomAttachment[]): {
|
|
15
|
-
links: RoomLinks;
|
|
16
|
-
attachments?: readonly RoomAttachment[];
|
|
17
|
-
};
|
|
18
|
-
export declare function enumeratedLinks(view: HouseView, earlier: RoomLinks | undefined): RoomLinks;
|
|
19
|
-
export declare function streamedLinks(held: RoomLinks, advanced: StreamedAdvancement): RoomLinks | null;
|
|
20
|
-
//# sourceMappingURL=links.d.ts.map
|
package/dist/links.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../src/links.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACvF,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAOvD,MAAM,MAAM,SAAS,GAAG;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC5C,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAChD,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC,CAAC;AAcF,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,CAWvD;AAOD,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,CAOnD;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,OAAO,CAAC,cAAc,EAAE;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC,EACvD,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,SAAS,cAAc,EAAE,GACnC;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,WAAW,CAAC,EAAE,SAAS,cAAc,EAAE,CAAA;CAAE,CA2B/D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAgB1F;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,mBAAmB,GAAG,SAAS,GAAG,IAAI,CAoB9F"}
|
package/dist/links.js
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { roomVersion } from './version.js';
|
|
2
|
-
const ATTACHMENT_REFERENCE = /at_[1-9a-hjkmnp-tv-z][0-9a-hjkmnp-tv-z]*\.[0-9a-hjkmnp-tv-z]/g;
|
|
3
|
-
const NONE = new Set();
|
|
4
|
-
function linkedBy(text) {
|
|
5
|
-
if (text === null)
|
|
6
|
-
return NONE;
|
|
7
|
-
const references = new Set(Array.from(text.matchAll(ATTACHMENT_REFERENCE), ([found]) => found));
|
|
8
|
-
return references.size === 0 ? NONE : references;
|
|
9
|
-
}
|
|
10
|
-
function handedOf(attachments) {
|
|
11
|
-
return new Map((attachments ?? []).map((attachment) => [attachment.reference, attachment]));
|
|
12
|
-
}
|
|
13
|
-
export function scopeLinks(scope) {
|
|
14
|
-
return {
|
|
15
|
-
roomVersion: roomVersion(scope),
|
|
16
|
-
handed: handedOf(scope.attachments),
|
|
17
|
-
paths: new Map(scope.contents.map(({ path, content }) => [path, linkedBy(content)])),
|
|
18
|
-
revisions: new Map(scope.files.flatMap(({ path, revision }) => revision === undefined ? [] : [[path, revision]])),
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
function revised(revisions, path, revision) {
|
|
22
|
-
if (revision === undefined)
|
|
23
|
-
revisions.delete(path);
|
|
24
|
-
else
|
|
25
|
-
revisions.set(path, revision);
|
|
26
|
-
}
|
|
27
|
-
export function heldLinks(held) {
|
|
28
|
-
return {
|
|
29
|
-
roomVersion: held.roomVersion,
|
|
30
|
-
handed: handedOf(held.attachments),
|
|
31
|
-
paths: new Map(Object.entries(held.documents).map(([path, text]) => [path, linkedBy(text)])),
|
|
32
|
-
revisions: new Map(Object.entries(held.revisions)),
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
export function acceptedLinks(held, accepted, roomVersion, originals) {
|
|
36
|
-
const paths = new Map(held.paths);
|
|
37
|
-
const revisions = new Map(held.revisions);
|
|
38
|
-
const handed = new Map(held.handed);
|
|
39
|
-
const answered = handedOf(originals);
|
|
40
|
-
for (const [path, text] of Object.entries(accepted.documents)) {
|
|
41
|
-
const linked = linkedBy(text);
|
|
42
|
-
for (const reference of linked) {
|
|
43
|
-
const original = answered.get(reference);
|
|
44
|
-
if (!handed.has(reference) && original !== undefined)
|
|
45
|
-
handed.set(reference, original);
|
|
46
|
-
}
|
|
47
|
-
paths.set(path, linked);
|
|
48
|
-
}
|
|
49
|
-
for (const [path, revision] of Object.entries(accepted.revisions))
|
|
50
|
-
revisions.set(path, revision);
|
|
51
|
-
for (const path of accepted.removals) {
|
|
52
|
-
paths.delete(path);
|
|
53
|
-
revisions.delete(path);
|
|
54
|
-
}
|
|
55
|
-
const linked = new Set([...paths.values()].flatMap((references) => [...references]));
|
|
56
|
-
for (const reference of held.handed.keys()) {
|
|
57
|
-
const before = [...held.paths.values()].some((references) => references.has(reference));
|
|
58
|
-
if (before && !linked.has(reference))
|
|
59
|
-
handed.delete(reference);
|
|
60
|
-
}
|
|
61
|
-
const links = { roomVersion, handed, paths, revisions };
|
|
62
|
-
const changed = handed.size !== held.handed.size || [...handed.keys()].some((key) => !held.handed.has(key));
|
|
63
|
-
return changed ? { links, attachments: [...handed.values()] } : { links };
|
|
64
|
-
}
|
|
65
|
-
export function enumeratedLinks(view, earlier) {
|
|
66
|
-
const paths = new Map(earlier?.paths);
|
|
67
|
-
const revisions = new Map(earlier?.revisions);
|
|
68
|
-
for (const change of view.changes) {
|
|
69
|
-
paths.set(change.path, linkedBy('content' in change ? change.content : null));
|
|
70
|
-
revised(revisions, change.path, 'removed' in change
|
|
71
|
-
? undefined
|
|
72
|
-
: 'reference' in change
|
|
73
|
-
? change.reference.revision
|
|
74
|
-
: change.revision);
|
|
75
|
-
}
|
|
76
|
-
return { roomVersion: roomVersion(view), handed: handedOf(view.attachments), paths, revisions };
|
|
77
|
-
}
|
|
78
|
-
export function streamedLinks(held, advanced) {
|
|
79
|
-
const paths = new Map(held.paths);
|
|
80
|
-
const revisions = new Map(held.revisions);
|
|
81
|
-
const dropped = new Set();
|
|
82
|
-
for (const entry of advanced.entries) {
|
|
83
|
-
revised(revisions, entry.path, entry.kind === 'removed' ? undefined : entry.revision);
|
|
84
|
-
const text = entry.kind === 'removed' ? null : entry.text;
|
|
85
|
-
if (text === undefined)
|
|
86
|
-
return null;
|
|
87
|
-
const linked = linkedBy(text);
|
|
88
|
-
for (const reference of linked)
|
|
89
|
-
if (!held.handed.has(reference))
|
|
90
|
-
return null;
|
|
91
|
-
for (const reference of paths.get(entry.path) ?? held.handed.keys()) {
|
|
92
|
-
if (held.handed.has(reference) && !linked.has(reference))
|
|
93
|
-
dropped.add(reference);
|
|
94
|
-
}
|
|
95
|
-
paths.set(entry.path, linked);
|
|
96
|
-
}
|
|
97
|
-
for (const references of paths.values()) {
|
|
98
|
-
for (const reference of references)
|
|
99
|
-
dropped.delete(reference);
|
|
100
|
-
}
|
|
101
|
-
if (dropped.size > 0)
|
|
102
|
-
return null;
|
|
103
|
-
return { roomVersion: advanced.page.roomVersion, handed: held.handed, paths, revisions };
|
|
104
|
-
}
|