@agentshouse/mdruntime 0.1.0-cf08ada271a7f → 0.1.0-cf0c43fc48aad
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/README.md +12 -12
- package/dist/acceptance.d.ts.map +1 -1
- package/dist/acceptance.js +25 -35
- package/dist/act-lanes.d.ts +30 -0
- package/dist/act-lanes.d.ts.map +1 -0
- package/dist/act-lanes.js +225 -0
- package/dist/actions.d.ts +8 -2
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +116 -65
- package/dist/adapter.d.ts +11 -4
- package/dist/adapter.d.ts.map +1 -1
- package/dist/client.d.ts +6 -17
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +26 -11
- package/dist/compile.d.ts +2 -0
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +17 -4
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +15 -10
- package/dist/conversation-live.d.ts +7 -2
- package/dist/conversation-live.d.ts.map +1 -1
- package/dist/conversation-live.js +6 -3
- package/dist/conversation.d.ts +25 -5
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +157 -76
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +18 -45
- package/dist/durability.d.ts +3 -0
- package/dist/durability.d.ts.map +1 -1
- package/dist/entry.js +1 -1
- package/dist/expectation.d.ts +25 -14
- package/dist/expectation.d.ts.map +1 -1
- package/dist/expectation.js +51 -20
- package/dist/failure.d.ts +2 -0
- package/dist/failure.d.ts.map +1 -1
- package/dist/failure.js +3 -0
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +29 -7
- package/dist/index.d.ts +9 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -5
- package/dist/install.d.ts +2 -3
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +9 -22
- package/dist/lifecycle.d.ts +1 -1
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/lifecycle.js +32 -26
- package/dist/listing.d.ts +4 -9
- package/dist/listing.d.ts.map +1 -1
- package/dist/listing.js +21 -51
- package/dist/locks.d.ts +2 -4
- package/dist/locks.d.ts.map +1 -1
- package/dist/locks.js +8 -38
- package/dist/lost.d.ts.map +1 -1
- package/dist/lost.js +7 -19
- package/dist/media.js +1 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +36 -17
- package/dist/messages.d.ts +9 -2
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +20 -10
- package/dist/models.d.ts.map +1 -1
- package/dist/models.js +15 -32
- package/dist/opened.d.ts +1 -1
- package/dist/opened.d.ts.map +1 -1
- package/dist/opened.js +2 -2
- package/dist/opening.d.ts.map +1 -1
- package/dist/opening.js +3 -9
- package/dist/outcome.d.ts +3 -0
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +15 -0
- package/dist/overlay.d.ts +3 -0
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +8 -4
- package/dist/page-metadata.d.ts +8 -0
- package/dist/page-metadata.d.ts.map +1 -0
- package/dist/page-metadata.js +19 -0
- package/dist/parts.d.ts +2 -9
- package/dist/parts.d.ts.map +1 -1
- package/dist/parts.js +6 -14
- package/dist/preparation.d.ts.map +1 -1
- package/dist/preparation.js +15 -21
- package/dist/presence.d.ts +52 -0
- package/dist/presence.d.ts.map +1 -0
- package/dist/presence.js +220 -0
- package/dist/queries.d.ts +1 -1
- package/dist/queries.d.ts.map +1 -1
- package/dist/queries.js +23 -13
- package/dist/questions.d.ts +0 -5
- package/dist/questions.d.ts.map +1 -1
- package/dist/questions.js +0 -7
- package/dist/queue.d.ts +2 -1
- package/dist/queue.d.ts.map +1 -1
- package/dist/queue.js +26 -31
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +62 -18
- package/dist/react.d.ts +5 -4
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +28 -5
- package/dist/reads.d.ts +3 -1
- package/dist/reads.d.ts.map +1 -1
- package/dist/reads.js +5 -1
- package/dist/recovery.d.ts +3 -1
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +29 -7
- package/dist/refusal.d.ts.map +1 -1
- package/dist/refusal.js +2 -4
- package/dist/retried.d.ts +30 -0
- package/dist/retried.d.ts.map +1 -0
- package/dist/retried.js +72 -0
- package/dist/room-draft.d.ts +2 -2
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +24 -19
- package/dist/runtime.d.ts +4 -2
- package/dist/runtime.d.ts.map +1 -1
- package/dist/save.d.ts +1 -0
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +105 -55
- package/dist/saves.d.ts.map +1 -1
- package/dist/saves.js +8 -11
- package/dist/seed.js +2 -2
- package/dist/shown.d.ts +2 -2
- package/dist/shown.d.ts.map +1 -1
- package/dist/shown.js +14 -23
- package/dist/socket/lanes.d.ts +12 -4
- package/dist/socket/lanes.d.ts.map +1 -1
- package/dist/socket/lanes.js +34 -8
- package/dist/socket.d.ts +3 -5
- package/dist/socket.d.ts.map +1 -1
- package/dist/socket.js +3 -14
- package/dist/source.d.ts +0 -7
- package/dist/source.d.ts.map +1 -1
- package/dist/store/records.d.ts +7 -3
- package/dist/store/records.d.ts.map +1 -1
- package/dist/store/records.js +12 -2
- package/dist/store.d.ts +10 -5
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +37 -12
- package/dist/stored.d.ts +1 -0
- package/dist/stored.d.ts.map +1 -1
- package/dist/stored.js +5 -5
- package/dist/surface.d.ts +1 -1
- package/dist/surface.d.ts.map +1 -1
- package/dist/surface.js +9 -13
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +63 -58
- package/dist/tables.d.ts +6 -3
- package/dist/tables.d.ts.map +1 -1
- package/dist/tables.js +34 -10
- package/dist/wire.d.ts +47 -3
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +12 -1
- package/package.json +3 -3
- package/dist/attempt.d.ts +0 -16
- package/dist/attempt.d.ts.map +0 -1
- package/dist/attempt.js +0 -70
- package/dist/job.d.ts +0 -5
- package/dist/job.d.ts.map +0 -1
- package/dist/job.js +0 -7
- package/dist/log.d.ts +0 -6
- package/dist/log.d.ts.map +0 -1
- package/dist/log.js +0 -14
- package/dist/socket/rooms.d.ts +0 -41
- package/dist/socket/rooms.d.ts.map +0 -1
- package/dist/socket/rooms.js +0 -90
- package/dist/store/fences.d.ts +0 -16
- package/dist/store/fences.d.ts.map +0 -1
- package/dist/store/fences.js +0 -26
package/dist/room-draft.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { apply, create, equalValue, frontmatterValue, parse, serialize, } from '@agentshouse/mdmodel';
|
|
2
|
+
import { governing } from './collection.js';
|
|
2
3
|
import { runtimeError } from './failure.js';
|
|
3
4
|
import { sha256 } from './digest.js';
|
|
4
5
|
import { binaryLocalId } from './identity.js';
|
|
@@ -72,7 +73,7 @@ const PART_NAMES = [
|
|
|
72
73
|
'removal',
|
|
73
74
|
'file',
|
|
74
75
|
];
|
|
75
|
-
const NAMED_PARTS = `a part named ${PART_NAMES.slice(0, -1).join(', ')} or ${PART_NAMES.
|
|
76
|
+
const NAMED_PARTS = `a part named ${PART_NAMES.slice(0, -1).join(', ')} or ${PART_NAMES.slice(-1).join('')}`;
|
|
76
77
|
export function readParts(value, path) {
|
|
77
78
|
if (!plain(value))
|
|
78
79
|
malformed(path, 'an object of parts');
|
|
@@ -255,8 +256,10 @@ export function underneath(parts, path, visible) {
|
|
|
255
256
|
const markdown = visible?.documents[path] ?? null;
|
|
256
257
|
const document = visible?.collection.document(path);
|
|
257
258
|
const report = {};
|
|
259
|
+
const unread = document?.type !== undefined &&
|
|
260
|
+
governing(visible.collection.composition, path).status === 'unavailable';
|
|
258
261
|
const fields = {};
|
|
259
|
-
for (const [name, part] of named(parts.fields)) {
|
|
262
|
+
for (const [name, part] of unread ? [] : named(parts.fields)) {
|
|
260
263
|
const current = document !== undefined && Object.hasOwn(document.fields, name)
|
|
261
264
|
? { value: document.fields[name] }
|
|
262
265
|
: null;
|
|
@@ -266,7 +269,7 @@ export function underneath(parts, path, visible) {
|
|
|
266
269
|
if (Object.keys(fields).length > 0)
|
|
267
270
|
report.fields = fields;
|
|
268
271
|
const sections = {};
|
|
269
|
-
for (const [name, part] of named(parts.sections)) {
|
|
272
|
+
for (const [name, part] of unread ? [] : named(parts.sections)) {
|
|
270
273
|
const current = document !== undefined && Object.hasOwn(document.sections, name)
|
|
271
274
|
? document.sections[name]
|
|
272
275
|
: null;
|
|
@@ -276,8 +279,9 @@ export function underneath(parts, path, visible) {
|
|
|
276
279
|
if (Object.keys(sections).length > 0)
|
|
277
280
|
report.sections = sections;
|
|
278
281
|
const preamble = document?.preamble ?? null;
|
|
279
|
-
if (parts.preamble !== undefined && preamble !== parts.preamble.base)
|
|
282
|
+
if (!unread && parts.preamble !== undefined && preamble !== parts.preamble.base) {
|
|
280
283
|
report.preamble = preamble;
|
|
284
|
+
}
|
|
281
285
|
if (parts.markdown !== undefined && markdown !== parts.markdown.base)
|
|
282
286
|
report.markdown = markdown;
|
|
283
287
|
if (parts.creation !== undefined && markdown !== null)
|
|
@@ -335,7 +339,7 @@ export function lineEnded(text) {
|
|
|
335
339
|
}
|
|
336
340
|
function written(start, changes, definition) {
|
|
337
341
|
const next = apply(start, changes, definition);
|
|
338
|
-
return next.outcome === 'applied' ?
|
|
342
|
+
return next.outcome === 'applied' ? next.document : malformed();
|
|
339
343
|
}
|
|
340
344
|
function empty(definition) {
|
|
341
345
|
const parsed = parse('', '', definition);
|
|
@@ -347,25 +351,24 @@ export function partsAfter(markdown, parts, definitions) {
|
|
|
347
351
|
if (fields.length === 0 && sections.length === 0 && parts.preamble === undefined)
|
|
348
352
|
return markdown;
|
|
349
353
|
const whole = parse(markdown, '', definitions);
|
|
350
|
-
const
|
|
351
|
-
const
|
|
352
|
-
|
|
354
|
+
const type = whole.ok ? whole.document.type : undefined;
|
|
355
|
+
const definition = definitions?.(type);
|
|
356
|
+
if (type !== undefined && definition === undefined)
|
|
357
|
+
return null;
|
|
358
|
+
const valued = fields.length === 0
|
|
359
|
+
? empty(definition)
|
|
360
|
+
: written(create(type, definition), fields.map(([name, part]) => ({
|
|
353
361
|
kind: 'field',
|
|
354
362
|
name,
|
|
355
363
|
value: part.value,
|
|
356
364
|
prior: undefined,
|
|
357
|
-
})),
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
];
|
|
365
|
+
})), definition);
|
|
366
|
+
const head = parts.preamble === undefined
|
|
367
|
+
? valued
|
|
368
|
+
: written(valued, [{ kind: 'preamble', value: lineEnded(parts.preamble.value), prior: valued.preamble }], definition);
|
|
362
369
|
const pieces = [
|
|
363
|
-
...(
|
|
364
|
-
|
|
365
|
-
: [
|
|
366
|
-
written(fields.length === 0 ? empty(definition) : create(undefined, definition), head, definition),
|
|
367
|
-
]),
|
|
368
|
-
...sections.map(([name, part]) => written(empty(definition), [{ kind: 'section', name, value: lineEnded(part.value), prior: undefined }], definition)),
|
|
370
|
+
...(fields.length === 0 && parts.preamble === undefined ? [] : [serialize(head)]),
|
|
371
|
+
...sections.map(([name, part]) => serialize(written(empty(definition), [{ kind: 'section', name, value: lineEnded(part.value), prior: undefined }], definition))),
|
|
369
372
|
];
|
|
370
373
|
return `${lineEnded(markdown)}\n${pieces.join('')}`;
|
|
371
374
|
}
|
|
@@ -390,6 +393,8 @@ export function returnedInto(existing, returned, definitions) {
|
|
|
390
393
|
delete next.sections;
|
|
391
394
|
delete next.preamble;
|
|
392
395
|
const value = partsAfter(whole.value, existing.markdown === undefined ? existing : returned, definitions);
|
|
396
|
+
if (value === null)
|
|
397
|
+
return null;
|
|
393
398
|
next.markdown = { value, base: whole.base };
|
|
394
399
|
}
|
|
395
400
|
const creation = existing.creation ?? returned.creation;
|
package/dist/runtime.d.ts
CHANGED
|
@@ -4,18 +4,20 @@ import type { LiveConversations } from './conversation-live.js';
|
|
|
4
4
|
import type { WriteRule } from './declaration.js';
|
|
5
5
|
import type { FiguresRead } from './figures.js';
|
|
6
6
|
import type { LiveQueries } from './live.js';
|
|
7
|
-
import type { Log } from './log.js';
|
|
8
7
|
import type { ModelState } from './model.js';
|
|
8
|
+
import type { Presence } from './presence.js';
|
|
9
9
|
import type { ReadAnswers } from './reads.js';
|
|
10
10
|
import type { Recovery } from './recovery.js';
|
|
11
|
+
import type { Retries } from './retried.js';
|
|
11
12
|
import type { RuntimeSocket } from './socket.js';
|
|
12
13
|
import type { HeldCover, Store } from './store.js';
|
|
13
14
|
import type { schemaTypes } from './attached-model.js';
|
|
14
15
|
export type Runtime = {
|
|
15
16
|
readonly store: Store;
|
|
16
17
|
readonly socket: RuntimeSocket;
|
|
17
|
-
readonly
|
|
18
|
+
readonly presence: Presence;
|
|
18
19
|
readonly recovery: Recovery;
|
|
20
|
+
readonly retries: Retries;
|
|
19
21
|
readonly shell: RuntimeShell;
|
|
20
22
|
readonly localSaves: boolean;
|
|
21
23
|
readonly roomTypes: Parameters<typeof schemaTypes>[1];
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,eAAe,KAAK,SAAS,CAAC;IAChE,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;CACnC,CAAC"}
|
package/dist/save.d.ts
CHANGED
package/dist/save.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../src/save.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../src/save.ts"],"names":[],"mappings":"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"}
|
package/dist/save.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { apply, ARRAY_INDEX, ATTACHMENT, create, links, parse, pointerSegments, references, relative, relativize, retarget, roomReferences, serialize, target, } from '@agentshouse/mdmodel';
|
|
1
|
+
import { apply, ARRAY_INDEX, ATTACHMENT, create, equalValue, links, parse, pointerSegments, references, relative, relativize, retarget, roomReferences, serialize, target, } from '@agentshouse/mdmodel';
|
|
2
2
|
import { immutable, leaving, queuedFile, departure, } from './change.js';
|
|
3
3
|
import { collectionOf, definitionsAt, documentsOf, governing, } from './collection.js';
|
|
4
4
|
import { changeBatchIdentity, roomDraftRevision } from './identity.js';
|
|
5
|
-
import { overlaying } from './overlay.js';
|
|
5
|
+
import { composed, overlaying } from './overlay.js';
|
|
6
6
|
import { ancestors } from './paths.js';
|
|
7
7
|
import { entriesIn, sorting } from './shared.js';
|
|
8
8
|
import { changedParts, changesOf, moveTarget, withdrawnDrafts, } from './room-draft.js';
|
|
9
9
|
import { paced, ROW_WEIGHT, stepped } from './turn.js';
|
|
10
10
|
import { validatedCollection } from './validation.js';
|
|
11
|
-
function refuse(code, file, location) {
|
|
11
|
+
function refuse(code, file, location, line) {
|
|
12
12
|
return {
|
|
13
13
|
kind: 'refused',
|
|
14
14
|
refusal: {
|
|
@@ -16,9 +16,13 @@ function refuse(code, file, location) {
|
|
|
16
16
|
retryable: false,
|
|
17
17
|
...(file === undefined ? {} : { file }),
|
|
18
18
|
...(location === undefined ? {} : { location }),
|
|
19
|
+
...(line === undefined ? {} : { line }),
|
|
19
20
|
},
|
|
20
21
|
};
|
|
21
22
|
}
|
|
23
|
+
function refusedBy(refusal, file) {
|
|
24
|
+
return refuse(refusal.rule, file, refusal.location, refusal.line);
|
|
25
|
+
}
|
|
22
26
|
function repointed(document, definition, from, to, moves, settled) {
|
|
23
27
|
const changes = [];
|
|
24
28
|
const names = new Set();
|
|
@@ -51,6 +55,13 @@ function repointed(document, definition, from, to, moves, settled) {
|
|
|
51
55
|
function edited(document, changes, definition) {
|
|
52
56
|
const parts = new Map();
|
|
53
57
|
for (const change of changes) {
|
|
58
|
+
if (change.kind === 'field')
|
|
59
|
+
parts.set(`field ${change.name}`, {
|
|
60
|
+
kind: 'field',
|
|
61
|
+
name: change.name,
|
|
62
|
+
value: change.value,
|
|
63
|
+
prior: document.fields[change.name],
|
|
64
|
+
});
|
|
54
65
|
if (change.kind === 'preamble')
|
|
55
66
|
parts.set('preamble', { kind: 'preamble', value: change.value, prior: document.preamble });
|
|
56
67
|
if (change.kind === 'section')
|
|
@@ -68,6 +79,11 @@ function edited(document, changes, definition) {
|
|
|
68
79
|
}
|
|
69
80
|
function bodies(path, before, after) {
|
|
70
81
|
const changes = [];
|
|
82
|
+
for (const [name, value] of Object.entries(after.fields)) {
|
|
83
|
+
if (equalValue(before.fields[name], value))
|
|
84
|
+
continue;
|
|
85
|
+
changes.push({ kind: 'field', path, name, value });
|
|
86
|
+
}
|
|
71
87
|
if (after.preamble !== before.preamble) {
|
|
72
88
|
changes.push({ kind: 'preamble', path, value: after.preamble });
|
|
73
89
|
}
|
|
@@ -92,17 +108,8 @@ function relinks(path, moved, before, moves, definition) {
|
|
|
92
108
|
if (changes.length === 0)
|
|
93
109
|
return { kind: 'changes', changes: [] };
|
|
94
110
|
const applied = apply(before, changes, definition);
|
|
95
|
-
if (applied.outcome === 'refuse')
|
|
96
|
-
return
|
|
97
|
-
kind: 'refused',
|
|
98
|
-
refusal: {
|
|
99
|
-
code: applied.refusal.rule,
|
|
100
|
-
retryable: false,
|
|
101
|
-
file: path,
|
|
102
|
-
...(applied.refusal.location === undefined ? {} : { location: applied.refusal.location }),
|
|
103
|
-
},
|
|
104
|
-
};
|
|
105
|
-
}
|
|
111
|
+
if (applied.outcome === 'refuse')
|
|
112
|
+
return refusedBy(applied.refusal, path);
|
|
106
113
|
const after = applied.document;
|
|
107
114
|
if (after === before)
|
|
108
115
|
return { kind: 'changes', changes: [] };
|
|
@@ -112,7 +119,9 @@ function relinks(path, moved, before, moves, definition) {
|
|
|
112
119
|
return { kind: 'changes', changes: bodies(path, before, after) };
|
|
113
120
|
}
|
|
114
121
|
function partKey(change) {
|
|
115
|
-
return change.kind === 'section'
|
|
122
|
+
return change.kind === 'section' || change.kind === 'field'
|
|
123
|
+
? `${change.kind} ${change.name}`
|
|
124
|
+
: change.kind;
|
|
116
125
|
}
|
|
117
126
|
const NAMES_A_SKIP_TESTS = 64;
|
|
118
127
|
const ENCODED = /[%&\\]/u;
|
|
@@ -174,7 +183,7 @@ function* rewrites(changes, visible) {
|
|
|
174
183
|
if (change.kind === 'replace') {
|
|
175
184
|
for (const index of own) {
|
|
176
185
|
const kind = merged[index]?.kind;
|
|
177
|
-
if (kind === 'section' || kind === 'preamble')
|
|
186
|
+
if (kind === 'field' || kind === 'section' || kind === 'preamble')
|
|
178
187
|
merged[index] = null;
|
|
179
188
|
}
|
|
180
189
|
added.push(change);
|
|
@@ -239,11 +248,7 @@ function rewritten(path, document, changes, definition) {
|
|
|
239
248
|
const after = applied.document;
|
|
240
249
|
if (document.type === undefined)
|
|
241
250
|
return [{ kind: 'replace', path, content: serialize(after) }];
|
|
242
|
-
|
|
243
|
-
return [
|
|
244
|
-
...[...names].map((name) => ({ kind: 'field', path, name, value: after.fields[name] })),
|
|
245
|
-
...bodies(path, document, after),
|
|
246
|
-
];
|
|
251
|
+
return bodies(path, document, after);
|
|
247
252
|
}
|
|
248
253
|
function roomPathOf(handle, path) {
|
|
249
254
|
return `/rooms/${handle}/${path}`;
|
|
@@ -560,34 +565,50 @@ function relativeField(path, name, value, handle, definition) {
|
|
|
560
565
|
return result.outcome === 'applied' ? result.document.fields[name] : value;
|
|
561
566
|
}
|
|
562
567
|
function relativeChanges(input) {
|
|
568
|
+
const changes = [];
|
|
569
|
+
for (const change of input.changes) {
|
|
570
|
+
const next = relativeChange(change, input);
|
|
571
|
+
if ('refusal' in next)
|
|
572
|
+
return next;
|
|
573
|
+
changes.push(next.change);
|
|
574
|
+
}
|
|
575
|
+
return { kind: 'changes', changes };
|
|
576
|
+
}
|
|
577
|
+
function relativeChange(change, input) {
|
|
563
578
|
const { handle, composition, visible } = input;
|
|
564
|
-
const typed = (path) => definitionsAt(composition, path);
|
|
565
579
|
const body = (path, text) => shellRelative(text, path, handle, () => undefined)?.content ?? text;
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
580
|
+
const definition = definitionsAt(composition, change.path);
|
|
581
|
+
if (change.kind === 'field') {
|
|
582
|
+
const type = visible.collection.document(change.path)?.type;
|
|
583
|
+
const value = relativeField(change.path, change.name, change.value, handle, definition(type));
|
|
584
|
+
return { change: value === change.value ? change : { ...change, value } };
|
|
585
|
+
}
|
|
586
|
+
if (change.kind === 'section' || change.kind === 'preamble') {
|
|
587
|
+
const value = body(change.path, change.value);
|
|
588
|
+
return { change: value === change.value ? change : { ...change, value } };
|
|
589
|
+
}
|
|
590
|
+
if (change.kind === 'replace' || (change.kind === 'create' && 'content' in change)) {
|
|
591
|
+
const content = shellRelative(change.content, change.path, handle, definition)?.content ?? change.content;
|
|
592
|
+
return { change: content === change.content ? change : { ...change, content } };
|
|
593
|
+
}
|
|
594
|
+
if (change.kind !== 'create')
|
|
595
|
+
return { change };
|
|
596
|
+
const type = typeof change.fields.type === 'string' ? change.fields.type : undefined;
|
|
597
|
+
const fields = Object.fromEntries(Object.entries(change.fields).map(([name, value]) => [
|
|
598
|
+
name,
|
|
599
|
+
relativeField(change.path, name, value, handle, definition(type)),
|
|
600
|
+
]));
|
|
601
|
+
const sections = Object.fromEntries(Object.entries(change.sections).map(([name, value]) => [name, body(change.path, value)]));
|
|
602
|
+
const written = composed(change.path, fields, sections, composition);
|
|
603
|
+
if (written.outcome === 'refuse')
|
|
604
|
+
return refusedBy(written.refusal, change.path);
|
|
605
|
+
if (written.outcome === 'stale')
|
|
606
|
+
throw new Error(`the creation of ${change.path} is stale`);
|
|
607
|
+
if (Object.keys(sections).length === 0)
|
|
608
|
+
return { change: { ...change, fields, sections } };
|
|
609
|
+
return {
|
|
610
|
+
change: { kind: 'create', path: change.path, content: serialize(written.document) },
|
|
611
|
+
};
|
|
591
612
|
}
|
|
592
613
|
function unqueueable(file) {
|
|
593
614
|
return refuse('unknown-revision', file);
|
|
@@ -599,6 +620,26 @@ function touched(change) {
|
|
|
599
620
|
return change.kind === 'move' ? [change.path, change.to] : [change.path];
|
|
600
621
|
}
|
|
601
622
|
function partsApplied(content, path, changes, composition) {
|
|
623
|
+
const applied = partsResult(content, path, changes, composition);
|
|
624
|
+
return applied?.outcome === 'applied' ? serialize(applied.document) : null;
|
|
625
|
+
}
|
|
626
|
+
function unapplied(changes, visible, composition) {
|
|
627
|
+
const parted = new Map();
|
|
628
|
+
for (const change of changes) {
|
|
629
|
+
if (isPart(change))
|
|
630
|
+
parted.set(change.path, [...(parted.get(change.path) ?? []), change]);
|
|
631
|
+
}
|
|
632
|
+
for (const [path, parts] of parted) {
|
|
633
|
+
const content = visible.documents[path];
|
|
634
|
+
if (content === undefined)
|
|
635
|
+
continue;
|
|
636
|
+
const applied = partsResult(content, path, parts, composition);
|
|
637
|
+
if (applied?.outcome === 'refuse')
|
|
638
|
+
return refusedBy(applied.refusal, path);
|
|
639
|
+
}
|
|
640
|
+
return null;
|
|
641
|
+
}
|
|
642
|
+
function partsResult(content, path, changes, composition) {
|
|
602
643
|
const definitions = definitionsAt(composition, path);
|
|
603
644
|
const parsed = parse(content, path, definitions);
|
|
604
645
|
if (!parsed.ok)
|
|
@@ -623,8 +664,7 @@ function partsApplied(content, path, changes, composition) {
|
|
|
623
664
|
else
|
|
624
665
|
parts.set('preamble', { kind: 'preamble', value: change.value, prior: document.preamble });
|
|
625
666
|
}
|
|
626
|
-
|
|
627
|
-
return applied.outcome === 'applied' ? serialize(applied.document) : null;
|
|
667
|
+
return apply(document, [...parts.values()], definitions(document.type));
|
|
628
668
|
}
|
|
629
669
|
function settledParts(changes, deferred, composition) {
|
|
630
670
|
for (const [held, parts] of deferred) {
|
|
@@ -905,6 +945,7 @@ async function judging(visible, resulting, composition, validate, removed, touch
|
|
|
905
945
|
retryable: false,
|
|
906
946
|
file: verdict.file,
|
|
907
947
|
...(verdict.location === undefined ? {} : { location: verdict.location }),
|
|
948
|
+
...(verdict.line === undefined ? {} : { line: verdict.line }),
|
|
908
949
|
...(verdict.referrers === undefined ? {} : { referrers: verdict.referrers }),
|
|
909
950
|
},
|
|
910
951
|
};
|
|
@@ -920,8 +961,6 @@ function placed(reference) {
|
|
|
920
961
|
const key = roomPathOf(reference.handle, reference.path);
|
|
921
962
|
if (reference.kind === 'link')
|
|
922
963
|
return `link ${key}`;
|
|
923
|
-
if (reference.kind === 'item')
|
|
924
|
-
return `section ${reference.section} ${key}`;
|
|
925
964
|
const pointer = reference.pointer
|
|
926
965
|
.split('/')
|
|
927
966
|
.map((segment) => (ARRAY_INDEX.test(segment) ? '-' : segment))
|
|
@@ -953,7 +992,7 @@ function* admittedRooms(changes, visible, resulting, composition) {
|
|
|
953
992
|
continue;
|
|
954
993
|
if (held.has(placed(reference)))
|
|
955
994
|
continue;
|
|
956
|
-
return refuse('unresolved-reference', path, reference.
|
|
995
|
+
return refuse('unresolved-reference', path, reference.pointer);
|
|
957
996
|
}
|
|
958
997
|
yield ROW_WEIGHT + now.length;
|
|
959
998
|
}
|
|
@@ -971,7 +1010,10 @@ function validationOf(validated) {
|
|
|
971
1010
|
};
|
|
972
1011
|
}
|
|
973
1012
|
async function batching(input) {
|
|
974
|
-
const
|
|
1013
|
+
const relative = relativeChanges(input);
|
|
1014
|
+
if (relative.kind === 'refused')
|
|
1015
|
+
return relative;
|
|
1016
|
+
const { changes } = relative;
|
|
975
1017
|
const structural = changes.find((change) => change.kind === 'move' || change.kind === 'remove');
|
|
976
1018
|
if (structural !== undefined && input.unmodeled) {
|
|
977
1019
|
return refuse('model-unavailable', structural.path);
|
|
@@ -981,7 +1023,7 @@ async function batching(input) {
|
|
|
981
1023
|
const rewritten = await stepped(rewrites(changes, input.visible));
|
|
982
1024
|
if (rewritten.kind === 'refused')
|
|
983
1025
|
return rewritten;
|
|
984
|
-
const refusal = guard(changes, input, WRITE);
|
|
1026
|
+
const refusal = guard(changes, input, WRITE) ?? unapplied(changes, input.visible, input.composition);
|
|
985
1027
|
if (refusal !== null)
|
|
986
1028
|
return refusal;
|
|
987
1029
|
const preconditions = await stepped(preconditionsOf(changes, input.visible, input.bases));
|
|
@@ -1120,6 +1162,14 @@ async function moving(input) {
|
|
|
1120
1162
|
return limited;
|
|
1121
1163
|
return { kind: 'moved', leaving: immutable(leavingBatch), arriving: immutable(arrivingBatch) };
|
|
1122
1164
|
}
|
|
1165
|
+
function unreadable(saved, visible, composition) {
|
|
1166
|
+
const path = saved.find(({ path: at, parts }) => (parts.fields !== undefined ||
|
|
1167
|
+
parts.sections !== undefined ||
|
|
1168
|
+
parts.preamble !== undefined) &&
|
|
1169
|
+
typedText(visible.documents[at]) &&
|
|
1170
|
+
governing(composition, at).status === 'unavailable')?.path;
|
|
1171
|
+
return path === undefined ? null : refuse('model-unavailable', path);
|
|
1172
|
+
}
|
|
1123
1173
|
function changedUnderneath(saved, visible) {
|
|
1124
1174
|
const parts = saved.flatMap(({ path, parts: held }) => changedParts(path, held, visible));
|
|
1125
1175
|
return parts.length === 0
|
|
@@ -1201,7 +1251,7 @@ async function plannedMove(ask, source, into) {
|
|
|
1201
1251
|
async function plannedWithin(ask, room) {
|
|
1202
1252
|
const { record } = room;
|
|
1203
1253
|
const visible = await stepped(room.replay(room.queue));
|
|
1204
|
-
const changed = changedUnderneath(ask.saved, visible);
|
|
1254
|
+
const changed = unreadable(ask.saved, visible, room.composition) ?? changedUnderneath(ask.saved, visible);
|
|
1205
1255
|
if (changed !== null)
|
|
1206
1256
|
return changed;
|
|
1207
1257
|
const parts = ask.saved.map(({ path, parts: held }) => changesOf(path, held));
|
package/dist/saves.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saves.d.ts","sourceRoot":"","sources":["../src/saves.ts"],"names":[],"mappings":"AAGA,OAAO,EAA2B,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAOxF,OAAO,EAQL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EAErB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACrB,MAAM,cAAc,CAAC;AAatB,OAAO,EAOL,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAGL,KAAK,WAAW,EAGjB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAsB,KAAK,EAAoB,MAAM,YAAY,CAAC;AAK9E,MAAM,MAAM,UAAU,GAClB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACxC,CAAC;IAAE,OAAO,EAAE,SAAS,CAAA;CAAE,GAAG,WAAW,CAAC,CAAC;AAE3C,MAAM,MAAM,cAAc,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAElF,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAA;CAAE,CAAC;AAEnF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC/E,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC/E,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9E,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACxD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;CAC9D,CAAC;AAYF,wBAAgB,cAAc,CAC5B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,SAAS,cAAc,EAAE,EAChC,SAAS,EAAE,SAAS,GAAG,SAAS,GAC/B,OAAO,CAAC,UAAU,CAAC,CA+BrB;AAED,wBAAgB,SAAS,CACvB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,SAAS,EAAE,SAAS,GAAG,SAAS,GAC/B,OAAO,CAAC,UAAU,CAAC,CAyBrB;AAiOD,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAK9F;
|
|
1
|
+
{"version":3,"file":"saves.d.ts","sourceRoot":"","sources":["../src/saves.ts"],"names":[],"mappings":"AAGA,OAAO,EAA2B,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAOxF,OAAO,EAQL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EAErB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACrB,MAAM,cAAc,CAAC;AAatB,OAAO,EAOL,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAGL,KAAK,WAAW,EAGjB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAsB,KAAK,EAAoB,MAAM,YAAY,CAAC;AAK9E,MAAM,MAAM,UAAU,GAClB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACxC,CAAC;IAAE,OAAO,EAAE,SAAS,CAAA;CAAE,GAAG,WAAW,CAAC,CAAC;AAE3C,MAAM,MAAM,cAAc,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAElF,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAA;CAAE,CAAC;AAEnF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC/E,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC/E,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9E,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACxD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;CAC9D,CAAC;AAYF,wBAAgB,cAAc,CAC5B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,SAAS,cAAc,EAAE,EAChC,SAAS,EAAE,SAAS,GAAG,SAAS,GAC/B,OAAO,CAAC,UAAU,CAAC,CA+BrB;AAED,wBAAgB,SAAS,CACvB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,SAAS,EAAE,SAAS,GAAG,SAAS,GAC/B,OAAO,CAAC,UAAU,CAAC,CAyBrB;AAiOD,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAK9F;AA+OD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,iBAAiB,CAQrE"}
|
package/dist/saves.js
CHANGED
|
@@ -20,9 +20,9 @@ import { pendingShown } from './shown.js';
|
|
|
20
20
|
import { paced, ROW_WEIGHT, stepped } from './turn.js';
|
|
21
21
|
import { validatedNeighbourhood } from './validation.js';
|
|
22
22
|
const FULL = { outcome: 'refused', code: 'durable-write', retryable: true };
|
|
23
|
-
async function savedRoom(store, locator) {
|
|
23
|
+
async function savedRoom({ store, presence }, locator) {
|
|
24
24
|
const replica = await store.replica(locator);
|
|
25
|
-
if (replica === undefined ||
|
|
25
|
+
if (replica === undefined || presence.lost(locator)) {
|
|
26
26
|
throw runtimeError('unknown-room', `Unknown Room ${locator}`);
|
|
27
27
|
}
|
|
28
28
|
return replica;
|
|
@@ -32,7 +32,7 @@ export function saveRoomDrafts(runtime, locator, named, writtenBy) {
|
|
|
32
32
|
return store.exclusive(async () => {
|
|
33
33
|
if (store.space.full())
|
|
34
34
|
return FULL;
|
|
35
|
-
const replica = await savedRoom(
|
|
35
|
+
const replica = await savedRoom(runtime, locator);
|
|
36
36
|
const drafts = new Map((await store.drafts(locator, named.map(({ path }) => path))).map((record) => [record.path, record]));
|
|
37
37
|
const saved = [];
|
|
38
38
|
for (const { path, revision } of named) {
|
|
@@ -52,7 +52,7 @@ export function saveParts(runtime, locator, named, writtenBy) {
|
|
|
52
52
|
const read = readSavedParts(named);
|
|
53
53
|
if (store.space.full())
|
|
54
54
|
return FULL;
|
|
55
|
-
const replica = await savedRoom(
|
|
55
|
+
const replica = await savedRoom(runtime, locator);
|
|
56
56
|
const saved = [];
|
|
57
57
|
const files = [];
|
|
58
58
|
const filed = read.filter(({ parts }) => parts.file !== undefined).map(({ path }) => path);
|
|
@@ -120,7 +120,7 @@ function targetsOf(saved) {
|
|
|
120
120
|
async function loaded(runtime, locator, replica, saved, consumed, files, writtenBy) {
|
|
121
121
|
const { store, localSaves } = runtime;
|
|
122
122
|
const into = destination(locator, saved);
|
|
123
|
-
const target = into === null ? undefined : await savedRoom(
|
|
123
|
+
const target = into === null ? undefined : await savedRoom(runtime, into);
|
|
124
124
|
const paths = saved.map(({ path }) => path);
|
|
125
125
|
const targets = targetsOf(saved);
|
|
126
126
|
const parts = saved.map(({ path, parts: held }) => changesOf(path, held));
|
|
@@ -230,7 +230,7 @@ export function batchFile(store, batch) {
|
|
|
230
230
|
};
|
|
231
231
|
}
|
|
232
232
|
async function transferBinary(runtime, request, transfer, answer) {
|
|
233
|
-
const { store, socket,
|
|
233
|
+
const { store, socket, presence } = runtime;
|
|
234
234
|
const { session } = socket;
|
|
235
235
|
if (socket.closed() || session.now().refusal !== null)
|
|
236
236
|
return UNCERTAIN;
|
|
@@ -246,13 +246,11 @@ async function transferBinary(runtime, request, transfer, answer) {
|
|
|
246
246
|
const { closed, authorization, refusal } = session.now();
|
|
247
247
|
if (closed || authorization === undefined || refusal !== null)
|
|
248
248
|
return UNCERTAIN;
|
|
249
|
-
const since =
|
|
250
|
-
journal.record(`transfer binary ${request.locator} ${request.path}`);
|
|
249
|
+
const since = presence.losses();
|
|
251
250
|
try {
|
|
252
251
|
const result = await transfer(authorization);
|
|
253
252
|
const settled = result;
|
|
254
|
-
|
|
255
|
-
if (store.fences.since(request.locator, since))
|
|
253
|
+
if (presence.lostSince(request.locator, since))
|
|
256
254
|
return failure({ kind: 'room-not-readable', locator: request.locator });
|
|
257
255
|
if (settled.kind === 'scoped-refusal') {
|
|
258
256
|
const room = await store.record(settled.locator);
|
|
@@ -264,7 +262,6 @@ async function transferBinary(runtime, request, transfer, answer) {
|
|
|
264
262
|
return answer(result);
|
|
265
263
|
}
|
|
266
264
|
catch {
|
|
267
|
-
journal.record('outcome binary transport-uncertainty');
|
|
268
265
|
return UNCERTAIN;
|
|
269
266
|
}
|
|
270
267
|
}
|
package/dist/seed.js
CHANGED
|
@@ -82,9 +82,9 @@ function seedRoomHeld({ socket }, room, version, held) {
|
|
|
82
82
|
socket.reads.reached(room, stored.roomVersion, version));
|
|
83
83
|
}
|
|
84
84
|
function seedHeld(runtime, at, held) {
|
|
85
|
-
const { socket } = runtime;
|
|
85
|
+
const { socket, presence } = runtime;
|
|
86
86
|
return Object.entries(at).every(([room, version]) => (socket.session.now().roomsListed &&
|
|
87
|
-
|
|
87
|
+
presence.room(room) === undefined &&
|
|
88
88
|
!held.rooms.has(room)) ||
|
|
89
89
|
seedRoomHeld(runtime, room, version, held));
|
|
90
90
|
}
|
package/dist/shown.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Member } from './adapter.js';
|
|
2
2
|
import { type ChangeSet } from './change-set.js';
|
|
3
3
|
import type { QueueEntry } from './outcome.js';
|
|
4
4
|
import type { Runtime } from './runtime.js';
|
|
@@ -27,6 +27,6 @@ export declare function pendingShown(runtime: Runtime): Promise<void>;
|
|
|
27
27
|
export declare function entriesOf(runtime: Runtime, locator: string): Promise<readonly QueueEntry[]>;
|
|
28
28
|
export declare function publishChangeSet(runtime: Runtime, set: ChangeSet): Promise<void>;
|
|
29
29
|
export declare function submissionDue(runtime: Runtime, locators?: readonly string[]): Promise<void>;
|
|
30
|
-
export declare function roomUnreadable(runtime: Runtime,
|
|
30
|
+
export declare function roomUnreadable(runtime: Runtime, locator: string): void;
|
|
31
31
|
export declare function rest(runtime: Runtime, progress: CycleProgress | null, live?: Live): Promise<void>;
|
|
32
32
|
//# sourceMappingURL=shown.d.ts.map
|
package/dist/shown.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shown.d.ts","sourceRoot":"","sources":["../src/shown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"shown.d.ts","sourceRoot":"","sources":["../src/shown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAA8B,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG7E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAA6B,KAAK,aAAa,EAAmB,MAAM,aAAa,CAAC;AAiB7F,eAAO,MAAM,WAAW,UAAU,CAAC;AAEnC,eAAO,MAAM,YAAY,gBAAgB,CAAC;AAE1C,eAAO,MAAM,aAAa,uBAAuB,CAAC;AAElD,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AAEjD,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AAEjD,eAAO,MAAM,YAAY,WAAW,CAAC;AAErC,eAAO,MAAM,eAAe,sBAAsB,CAAC;AAEnD,eAAO,MAAM,WAAW,UAAU,CAAC;AAEnC,eAAO,MAAM,UAAU,YAAa,MAAM,WAA4B,CAAC;AAqCvE,wBAAgB,YAAY,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,OAAO,QAG7D;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAMtF;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,QAI9C;AA6ED,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,QAK3C;AAED,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,QAGjD;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,QAEnE;AAsBD,wBAAgB,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAepD;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIpE;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3D;AAED,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,GAAG,MAAM,CAExD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAK5D;AAYD,wBAAsB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC,CAGjG;AAcD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBhF;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAOjG;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,QAG/D;AAED,wBAAsB,IAAI,CACxB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,aAAa,GAAG,IAAI,EAC9B,IAAI,GAAE,IAAqC,iBA6B5C"}
|