@agentshouse/mdruntime 0.1.0-alpha.9 → 0.1.0-c009335e08279
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 +208 -0
- package/README.md +44 -0
- package/dist/adapter.d.ts +147 -12
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +2 -3
- package/dist/attachment.d.ts +3 -0
- package/dist/attachment.d.ts.map +1 -0
- package/dist/attachment.js +8 -0
- package/dist/bootstrap.d.ts +3 -7
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +28 -27
- package/dist/change-set.d.ts +33 -0
- package/dist/change-set.d.ts.map +1 -0
- package/dist/change-set.js +83 -0
- package/dist/change.d.ts +9 -0
- package/dist/change.d.ts.map +1 -1
- package/dist/change.js +6 -5
- package/dist/client.d.ts +38 -32
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +115 -177
- package/dist/collection.d.ts +13 -16
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +45 -88
- package/dist/connection.d.ts +46 -39
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +1376 -975
- package/dist/conversation.d.ts +41 -19
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +483 -327
- package/dist/durability.js +6 -6
- package/dist/file.d.ts +2 -2
- package/dist/file.d.ts.map +1 -1
- package/dist/file.js +48 -71
- package/dist/host.d.ts +6 -2
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +83 -108
- package/dist/identity.d.ts +1 -0
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +10 -9
- package/dist/index.d.ts +12 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -3
- package/dist/log.js +5 -6
- package/dist/memory.d.ts +6 -3
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +205 -210
- package/dist/model.d.ts +10 -25
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +18 -21
- package/dist/observation.d.ts +25 -0
- package/dist/observation.d.ts.map +1 -0
- package/dist/observation.js +85 -0
- package/dist/outcome.d.ts +10 -29
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +1 -23
- package/dist/overlay.d.ts +9 -2
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +187 -43
- package/dist/paths.d.ts +0 -1
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +12 -19
- package/dist/query.d.ts +210 -10
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +420 -15
- package/dist/read-side.d.ts +14 -0
- package/dist/read-side.d.ts.map +1 -0
- package/dist/read-side.js +371 -0
- package/dist/refresh.d.ts +4 -5
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +45 -30
- package/dist/replica.d.ts +25 -5
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +228 -38
- package/dist/room-draft.d.ts +124 -0
- package/dist/room-draft.d.ts.map +1 -0
- package/dist/room-draft.js +327 -0
- package/dist/rows.d.ts +41 -0
- package/dist/rows.d.ts.map +1 -0
- package/dist/rows.js +100 -0
- package/dist/save.d.ts +8 -4
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +264 -350
- package/dist/search.d.ts +61 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +125 -0
- package/dist/status.d.ts +4 -6
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +9 -13
- package/dist/store.d.ts +59 -31
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +338 -134
- package/dist/transfer.d.ts +5 -0
- package/dist/transfer.d.ts.map +1 -1
- package/dist/transfer.js +1 -5
- package/dist/wire.d.ts +4 -3
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +47 -68
- package/package.json +6 -12
- package/dist/adapter.js.map +0 -1
- package/dist/bootstrap.js.map +0 -1
- package/dist/change.js.map +0 -1
- package/dist/client.js.map +0 -1
- package/dist/collection.js.map +0 -1
- package/dist/connection.js.map +0 -1
- package/dist/conversation.js.map +0 -1
- package/dist/durability.js.map +0 -1
- package/dist/file.js.map +0 -1
- package/dist/host.js.map +0 -1
- package/dist/identity.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/log.js.map +0 -1
- package/dist/memory.js.map +0 -1
- package/dist/model.js.map +0 -1
- package/dist/outcome.js.map +0 -1
- package/dist/overlay.js.map +0 -1
- package/dist/paths.js.map +0 -1
- package/dist/query.js.map +0 -1
- package/dist/refresh.js.map +0 -1
- package/dist/replica.js.map +0 -1
- package/dist/save.js.map +0 -1
- package/dist/status.js.map +0 -1
- package/dist/store.js.map +0 -1
- package/dist/transfer.js.map +0 -1
- package/dist/wire.js.map +0 -1
package/dist/model.d.ts
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { MdType } from './collection.js';
|
|
1
|
+
import type { Definition, FieldSpec, SectionSpec, VerifiedModel } from '@agentshouse/mdmodel';
|
|
3
2
|
export type ModelIdentity = {
|
|
4
3
|
identity: string;
|
|
5
4
|
version: string;
|
|
6
5
|
};
|
|
7
6
|
export type ModelSnapshot = ModelIdentity & {
|
|
8
|
-
|
|
7
|
+
schema: string | null;
|
|
9
8
|
};
|
|
10
|
-
export type ModelUnavailableReason = 'not-readable' | 'revoked' | 'not-acquired' | 'version-changed' | 'invalid'
|
|
9
|
+
export type ModelUnavailableReason = 'not-readable' | 'revoked' | 'not-acquired' | 'version-changed' | 'invalid';
|
|
11
10
|
export type ModelResult = {
|
|
12
11
|
kind: 'model';
|
|
13
12
|
snapshot: ModelSnapshot;
|
|
@@ -19,6 +18,11 @@ export type ModelResult = {
|
|
|
19
18
|
} | {
|
|
20
19
|
kind: 'revoked-authorization';
|
|
21
20
|
};
|
|
21
|
+
export type MdType = {
|
|
22
|
+
name: string;
|
|
23
|
+
fields: Readonly<Record<string, FieldSpec>>;
|
|
24
|
+
sections: Readonly<Record<string, SectionSpec>>;
|
|
25
|
+
};
|
|
22
26
|
export type ModelState = {
|
|
23
27
|
status: 'unavailable';
|
|
24
28
|
reason: ModelUnavailableReason;
|
|
@@ -26,7 +30,7 @@ export type ModelState = {
|
|
|
26
30
|
status: 'current' | 'cached';
|
|
27
31
|
snapshot: ModelSnapshot;
|
|
28
32
|
verifiedWith: ModelIdentity;
|
|
29
|
-
types:
|
|
33
|
+
types: VerifiedModel['types'];
|
|
30
34
|
};
|
|
31
35
|
export type TypesResult = {
|
|
32
36
|
status: 'unavailable';
|
|
@@ -38,32 +42,13 @@ export type TypesResult = {
|
|
|
38
42
|
verifiedWith: ModelIdentity;
|
|
39
43
|
types: readonly MdType[];
|
|
40
44
|
};
|
|
41
|
-
export type ModelValidation = {
|
|
42
|
-
verdict: 'accept';
|
|
43
|
-
} | (Extract<Validation, {
|
|
44
|
-
verdict: 'refuse';
|
|
45
|
-
}> & {
|
|
46
|
-
source: 'content' | 'model';
|
|
47
|
-
});
|
|
48
|
-
export type AttachedModelBinding = {
|
|
49
|
-
verify(snapshot: ModelSnapshot): {
|
|
50
|
-
kind: 'verified';
|
|
51
|
-
types: readonly MdType[];
|
|
52
|
-
} | {
|
|
53
|
-
kind: 'invalid';
|
|
54
|
-
};
|
|
55
|
-
validate(input: {
|
|
56
|
-
model: ModelSnapshot;
|
|
57
|
-
documents: Readonly<Record<string, string>>;
|
|
58
|
-
binaryTargets: readonly string[];
|
|
59
|
-
}): ModelValidation;
|
|
60
|
-
};
|
|
61
45
|
export type ValidationReceipt = {
|
|
62
46
|
identity: string;
|
|
63
47
|
version: string;
|
|
64
48
|
source: 'current' | 'cached';
|
|
65
49
|
};
|
|
66
50
|
export declare const NO_MODEL: ModelState;
|
|
51
|
+
export declare function definitionOf(state: ModelState, type: string | undefined): Definition | undefined;
|
|
67
52
|
export declare function modelTypes(state: ModelState): TypesResult;
|
|
68
53
|
export declare function cached(state: ModelState): ModelState;
|
|
69
54
|
export declare function sameModel(left: ModelIdentity, right: ModelIdentity): boolean;
|
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,
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE9F,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,CAAA;CAAE,CAAC;AACtE,MAAM,MAAM,sBAAsB,GAC9B,cAAc,GACd,SAAS,GACT,cAAc,GACd,iBAAiB,GACjB,SAAS,CAAC;AACd,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,GAC7D;IAAE,IAAI,EAAE,uBAAuB,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,uBAAuB,CAAA;CAAE,CAAC;AACtC,MAAM,MAAM,MAAM,GAAG;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IAC5C,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;CACjD,CAAC;AACF,MAAM,MAAM,UAAU,GAClB;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAA;CAAE,GACzD;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;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAA;CAAE,GACzD;IACE,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,aAAa,CAAC;IAC5B,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1B,CAAC;AACN,MAAM,MAAM,iBAAiB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAA;CAAE,CAAC;AACpG,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,CAczD;AACD,wBAAgB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAEpD;AACD,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAE5E"}
|
package/dist/model.js
CHANGED
|
@@ -1,28 +1,25 @@
|
|
|
1
|
-
export const NO_MODEL = {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
export const NO_MODEL = { status: 'unavailable', reason: 'not-acquired' };
|
|
2
|
+
export function definitionOf(state, type) {
|
|
3
|
+
if (state.status === 'unavailable' || type === undefined)
|
|
4
|
+
return undefined;
|
|
5
|
+
return Object.hasOwn(state.types, type) ? state.types[type] : undefined;
|
|
6
|
+
}
|
|
5
7
|
export function modelTypes(state) {
|
|
6
|
-
return state.status === 'unavailable'
|
|
7
|
-
...state
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
8
|
+
return state.status === 'unavailable'
|
|
9
|
+
? { ...state }
|
|
10
|
+
: {
|
|
11
|
+
status: state.status,
|
|
12
|
+
identity: state.snapshot.identity,
|
|
13
|
+
version: state.snapshot.version,
|
|
14
|
+
verifiedWith: { ...state.verifiedWith },
|
|
15
|
+
types: structuredClone(Object.values(state.types)
|
|
16
|
+
.sort((left, right) => (left.name < right.name ? -1 : left.name > right.name ? 1 : 0))
|
|
17
|
+
.map(({ name, fields, sections }) => ({ name, fields, sections }))),
|
|
18
|
+
};
|
|
17
19
|
}
|
|
18
20
|
export function cached(state) {
|
|
19
|
-
return state.status === 'unavailable' ? state : {
|
|
20
|
-
...state,
|
|
21
|
-
status: 'cached'
|
|
22
|
-
};
|
|
21
|
+
return state.status === 'unavailable' ? state : { ...state, status: 'cached' };
|
|
23
22
|
}
|
|
24
23
|
export function sameModel(left, right) {
|
|
25
24
|
return left.identity === right.identity && left.version === right.version;
|
|
26
25
|
}
|
|
27
|
-
|
|
28
|
-
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { QueryDocument, QueryGroup, QueryResult } from './query.js';
|
|
2
|
+
export type Observation<T> = {
|
|
3
|
+
current(): T;
|
|
4
|
+
subscribe(listener: (value: T) => void): () => void;
|
|
5
|
+
close(): void;
|
|
6
|
+
};
|
|
7
|
+
export type RowKey = string | number;
|
|
8
|
+
export type KeyedResult = {
|
|
9
|
+
result: QueryResult;
|
|
10
|
+
keys: readonly RowKey[];
|
|
11
|
+
};
|
|
12
|
+
export type QueryChange = {
|
|
13
|
+
changed: readonly (readonly [RowKey, QueryDocument | QueryGroup])[];
|
|
14
|
+
removed: readonly RowKey[];
|
|
15
|
+
order: readonly RowKey[] | null;
|
|
16
|
+
};
|
|
17
|
+
export type Observed = {
|
|
18
|
+
observation: Observation<unknown>;
|
|
19
|
+
receive(message: unknown): void;
|
|
20
|
+
end(): void;
|
|
21
|
+
};
|
|
22
|
+
export declare function rowsOf(result: QueryResult): readonly (QueryDocument | QueryGroup)[];
|
|
23
|
+
export declare function observed(first: unknown, stop: () => void, keyed: boolean): Observed;
|
|
24
|
+
export declare function opened(watch: (deliver: (message: unknown) => void) => () => void, keyed: boolean): Promise<Observation<unknown>>;
|
|
25
|
+
//# sourceMappingURL=observation.d.ts.map
|
|
@@ -0,0 +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;AAEzE,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;CACjC,CAAC;AAEF,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,CAEnF;AA0BD,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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
export function rowsOf(result) {
|
|
2
|
+
return 'groups' in result ? result.groups : result.documents;
|
|
3
|
+
}
|
|
4
|
+
function keyedResult(first) {
|
|
5
|
+
const grouped = 'groups' in first.result;
|
|
6
|
+
const rows = rowsOf(first.result);
|
|
7
|
+
const byKey = new Map(first.keys.map((key, index) => [key, rows[index]]));
|
|
8
|
+
let keys = first.keys;
|
|
9
|
+
return {
|
|
10
|
+
value: first.result,
|
|
11
|
+
next(message) {
|
|
12
|
+
const change = message;
|
|
13
|
+
for (const key of change.removed)
|
|
14
|
+
byKey.delete(key);
|
|
15
|
+
for (const [key, row] of change.changed)
|
|
16
|
+
byKey.set(key, row);
|
|
17
|
+
keys = change.order ?? keys.filter((key) => byKey.has(key));
|
|
18
|
+
const next = keys.map((key) => byKey.get(key));
|
|
19
|
+
return grouped
|
|
20
|
+
? { groups: next }
|
|
21
|
+
: { documents: next };
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function whole(first) {
|
|
26
|
+
return { value: first, next: (message) => message };
|
|
27
|
+
}
|
|
28
|
+
export function observed(first, stop, keyed) {
|
|
29
|
+
const reducer = keyed ? keyedResult(first) : whole(first);
|
|
30
|
+
let value = reducer.value;
|
|
31
|
+
let open = true;
|
|
32
|
+
const listeners = new Set();
|
|
33
|
+
const end = () => {
|
|
34
|
+
open = false;
|
|
35
|
+
listeners.clear();
|
|
36
|
+
};
|
|
37
|
+
return {
|
|
38
|
+
observation: {
|
|
39
|
+
current: () => value,
|
|
40
|
+
subscribe(listener) {
|
|
41
|
+
const entry = { hear: listener };
|
|
42
|
+
if (open)
|
|
43
|
+
listeners.add(entry);
|
|
44
|
+
return () => {
|
|
45
|
+
listeners.delete(entry);
|
|
46
|
+
};
|
|
47
|
+
},
|
|
48
|
+
close() {
|
|
49
|
+
if (!open)
|
|
50
|
+
return;
|
|
51
|
+
end();
|
|
52
|
+
stop();
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
receive(message) {
|
|
56
|
+
if (!open)
|
|
57
|
+
return;
|
|
58
|
+
value = reducer.next(message);
|
|
59
|
+
for (const entry of [...listeners]) {
|
|
60
|
+
if (listeners.has(entry))
|
|
61
|
+
entry.hear(value);
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
end,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export function opened(watch, keyed) {
|
|
68
|
+
return new Promise((resolve, reject) => {
|
|
69
|
+
let handle;
|
|
70
|
+
let stop = () => { };
|
|
71
|
+
try {
|
|
72
|
+
stop = watch((message) => {
|
|
73
|
+
if (handle !== undefined) {
|
|
74
|
+
handle.receive(message);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
handle = observed(message, () => stop(), keyed);
|
|
78
|
+
resolve(handle.observation);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
reject(error);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
package/dist/outcome.d.ts
CHANGED
|
@@ -1,37 +1,18 @@
|
|
|
1
|
-
import type { ActionResult
|
|
1
|
+
import type { ActionResult } from './adapter.js';
|
|
2
2
|
import type { ChangeBatch } from './change.js';
|
|
3
|
-
export type AffectedState = Readonly<Record<string, string>>;
|
|
4
3
|
export type CallResult = ActionResult | {
|
|
5
4
|
kind: 'undeclared';
|
|
6
5
|
};
|
|
7
|
-
export type
|
|
8
|
-
|
|
9
|
-
} |
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
affected: AffectedState;
|
|
13
|
-
}) | (ProviderRefusal & {
|
|
14
|
-
kind: 'rejected';
|
|
15
|
-
affected: AffectedState;
|
|
16
|
-
}) | RetryableRefusal | {
|
|
17
|
-
kind: 'expired';
|
|
6
|
+
export type Submission = {
|
|
7
|
+
readonly state: 'waiting' | 'submitted';
|
|
8
|
+
} | {
|
|
9
|
+
readonly state: 'reset';
|
|
10
|
+
readonly reset: string;
|
|
18
11
|
};
|
|
19
|
-
export type AcceptedOutcome = {
|
|
20
|
-
kind: 'accepted';
|
|
21
|
-
roomVersion: string;
|
|
22
|
-
author?: string;
|
|
23
|
-
time?: string;
|
|
24
|
-
};
|
|
25
|
-
export type SubmissionOutcome = QueueOutcome | AcceptedOutcome;
|
|
26
12
|
export type QueueEntry = {
|
|
27
13
|
readonly batch: ChangeBatch;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}>;
|
|
33
|
-
export declare function refused(outcome: SubmissionOutcome | undefined): outcome is RefusedOutcome;
|
|
34
|
-
export declare function withheldUntilReset(outcome: SubmissionOutcome | undefined, at: number): boolean;
|
|
35
|
-
export declare function refusalOf(outcome: RefusedOutcome): ProviderRefusal | null;
|
|
36
|
-
export declare function queuedOutcome(outcome: SubmissionOutcome | undefined): QueueOutcome;
|
|
14
|
+
} & (Submission | {
|
|
15
|
+
readonly state: 'accepted';
|
|
16
|
+
readonly roomVersion: string;
|
|
17
|
+
});
|
|
37
18
|
//# sourceMappingURL=outcome.d.ts.map
|
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,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"outcome.d.ts","sourceRoot":"","sources":["../src/outcome.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,CAAC;AAE/D,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,UAAU,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAC/D,CAAC"}
|
package/dist/outcome.js
CHANGED
|
@@ -1,23 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
return outcome?.kind === 'conflicted' || outcome?.kind === 'rejected' || outcome?.kind === 'expired';
|
|
3
|
-
}
|
|
4
|
-
export function withheldUntilReset(outcome, at) {
|
|
5
|
-
return outcome?.kind === 'retryable-refusal' && outcome.reset !== undefined && at < Date.parse(outcome.reset);
|
|
6
|
-
}
|
|
7
|
-
export function refusalOf(outcome) {
|
|
8
|
-
if (outcome.kind === 'expired') return null;
|
|
9
|
-
return {
|
|
10
|
-
code: outcome.code,
|
|
11
|
-
fields: outcome.fields
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
export function queuedOutcome(outcome) {
|
|
15
|
-
if (outcome === undefined || outcome.kind === 'accepted' || outcome.kind === 'pending') {
|
|
16
|
-
return {
|
|
17
|
-
kind: 'pending'
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
return outcome;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
//# sourceMappingURL=outcome.js.map
|
|
1
|
+
export {};
|
package/dist/overlay.d.ts
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
|
+
import type { HeadChange } from './adapter.js';
|
|
1
2
|
import type { ChangeBatch } from './change.js';
|
|
2
|
-
export type
|
|
3
|
+
export type Heads = {
|
|
4
|
+
revisions: Readonly<Record<string, string>>;
|
|
5
|
+
changes: Readonly<Record<string, HeadChange>>;
|
|
6
|
+
};
|
|
7
|
+
export type Layer = Heads & {
|
|
3
8
|
documents: Readonly<Record<string, string>>;
|
|
4
9
|
binaryTargets: readonly string[];
|
|
5
|
-
revisions: Readonly<Record<string, string>>;
|
|
6
10
|
};
|
|
11
|
+
export declare function sameChange(left: HeadChange | undefined, right: HeadChange | undefined): boolean;
|
|
7
12
|
export declare function overlay(base: Layer, queue: readonly ChangeBatch[]): Layer;
|
|
13
|
+
export declare function sameLayerText(left: Layer, right: Layer): boolean;
|
|
14
|
+
export declare function overlayChanged(base: Layer, queue: readonly ChangeBatch[], previousBase: Layer, previousQueue: readonly ChangeBatch[], previousVisible: Layer): Layer;
|
|
8
15
|
//# 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,EAAU,WAAW,EAAgB,MAAM,aAAa,CAAC;AAErE,MAAM,MAAM,KAAK,GAAG;IAClB,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5C,
|
|
1
|
+
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../src/overlay.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAU,WAAW,EAAgB,MAAM,aAAa,CAAC;AAErE,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,KAAK,GAAG,KAAK,GAAG;IAC1B,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5C,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC,CAAC;AAEF,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAQ/F;AAoJD,wBAAgB,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,KAAK,CAiBzE;AAQD,wBAAgB,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAQhE;AAmBD,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,CA4FP"}
|
package/dist/overlay.js
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import { apply, parse, serialize } from '@agentshouse/mdmodel';
|
|
2
|
+
export function sameChange(left, right) {
|
|
3
|
+
if (left === undefined || right === undefined)
|
|
4
|
+
return left === right;
|
|
5
|
+
return (left.time === right.time &&
|
|
6
|
+
left.author?.kind === right.author?.kind &&
|
|
7
|
+
left.author?.id === right.author?.id &&
|
|
8
|
+
left.author?.name === right.author?.name);
|
|
9
|
+
}
|
|
2
10
|
const EMPTY_FRONTMATTER = '---\n---\n';
|
|
3
11
|
function at(path, name) {
|
|
4
12
|
return `${path} ${name}`;
|
|
@@ -7,7 +15,7 @@ function priorsOf(preconditions) {
|
|
|
7
15
|
const fields = new Map();
|
|
8
16
|
const sections = new Map();
|
|
9
17
|
const preambles = new Map();
|
|
10
|
-
for (const precondition of preconditions){
|
|
18
|
+
for (const precondition of preconditions) {
|
|
11
19
|
if (precondition.kind === 'field') {
|
|
12
20
|
fields.set(at(precondition.path, precondition.name), precondition.value);
|
|
13
21
|
}
|
|
@@ -19,25 +27,24 @@ function priorsOf(preconditions) {
|
|
|
19
27
|
}
|
|
20
28
|
}
|
|
21
29
|
return {
|
|
22
|
-
field: (path, name)=>fields.get(at(path, name)),
|
|
23
|
-
section: (path, name)=>sections.get(at(path, name)) ?? '',
|
|
24
|
-
preamble: (path)=>preambles.get(path) ?? ''
|
|
30
|
+
field: (path, name) => fields.get(at(path, name)),
|
|
31
|
+
section: (path, name) => sections.get(at(path, name)) ?? '',
|
|
32
|
+
preamble: (path) => preambles.get(path) ?? '',
|
|
25
33
|
};
|
|
26
34
|
}
|
|
27
35
|
function compose(fields, sections) {
|
|
28
|
-
const body = Object.entries(sections)
|
|
36
|
+
const body = Object.entries(sections)
|
|
37
|
+
.map(([name, value]) => `\n## ${name}\n${value}`)
|
|
38
|
+
.join('');
|
|
29
39
|
const skeleton = `${EMPTY_FRONTMATTER}${body}`;
|
|
30
40
|
const opened = parse(skeleton);
|
|
31
|
-
if (!opened.ok)
|
|
41
|
+
if (!opened.ok)
|
|
42
|
+
return skeleton;
|
|
32
43
|
let document = opened.document;
|
|
33
|
-
for (const [name, value] of Object.entries(fields)){
|
|
34
|
-
const next = apply(document, {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
value,
|
|
38
|
-
prior: undefined
|
|
39
|
-
});
|
|
40
|
-
if (next.outcome === 'applied') document = next.document;
|
|
44
|
+
for (const [name, value] of Object.entries(fields)) {
|
|
45
|
+
const next = apply(document, { kind: 'field', name, value, prior: undefined });
|
|
46
|
+
if (next.outcome === 'applied')
|
|
47
|
+
document = next.document;
|
|
41
48
|
}
|
|
42
49
|
return serialize(document);
|
|
43
50
|
}
|
|
@@ -47,50 +54,65 @@ function edited(document, change, priors) {
|
|
|
47
54
|
kind: 'field',
|
|
48
55
|
name: change.name,
|
|
49
56
|
value: change.value,
|
|
50
|
-
prior: priors.field(change.path, change.name)
|
|
57
|
+
prior: priors.field(change.path, change.name),
|
|
51
58
|
});
|
|
52
59
|
}
|
|
53
60
|
if (change.kind === 'preamble') {
|
|
54
61
|
return apply(document, {
|
|
55
62
|
kind: 'preamble',
|
|
56
63
|
value: change.value,
|
|
57
|
-
prior: priors.preamble(change.path)
|
|
64
|
+
prior: priors.preamble(change.path),
|
|
58
65
|
});
|
|
59
66
|
}
|
|
60
|
-
if (change.kind !== 'section')
|
|
67
|
+
if (change.kind !== 'section')
|
|
68
|
+
return null;
|
|
61
69
|
return apply(document, {
|
|
62
70
|
kind: 'section',
|
|
63
71
|
name: change.name,
|
|
64
72
|
value: change.value,
|
|
65
|
-
prior: priors.section(change.path, change.name)
|
|
73
|
+
prior: priors.section(change.path, change.name),
|
|
66
74
|
});
|
|
67
75
|
}
|
|
68
76
|
function edit(staged, change, priors) {
|
|
69
77
|
const text = staged.documents[change.path];
|
|
70
|
-
if (text === undefined)
|
|
78
|
+
if (text === undefined)
|
|
79
|
+
return;
|
|
71
80
|
const parsed = parse(text, change.path);
|
|
72
|
-
if (!parsed.ok)
|
|
81
|
+
if (!parsed.ok)
|
|
82
|
+
return;
|
|
73
83
|
const next = edited(parsed.document, change, priors);
|
|
74
|
-
if (next?.outcome === 'applied')
|
|
84
|
+
if (next?.outcome === 'applied')
|
|
85
|
+
staged.documents[change.path] = serialize(next.document);
|
|
75
86
|
}
|
|
76
87
|
function relocate(staged, from, to) {
|
|
77
88
|
const text = staged.documents[from];
|
|
78
89
|
if (text !== undefined) {
|
|
79
90
|
delete staged.documents[from];
|
|
80
91
|
staged.documents[to] = text;
|
|
81
|
-
}
|
|
92
|
+
}
|
|
93
|
+
else if (staged.binaryTargets.delete(from)) {
|
|
82
94
|
staged.binaryTargets.add(to);
|
|
83
|
-
}
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
84
97
|
return;
|
|
85
98
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
99
|
+
moveHead(staged, from, to);
|
|
100
|
+
}
|
|
101
|
+
function moveHead(heads, from, to) {
|
|
102
|
+
const revision = heads.revisions[from];
|
|
103
|
+
const change = heads.changes[from];
|
|
104
|
+
delete heads.revisions[from];
|
|
105
|
+
delete heads.changes[from];
|
|
106
|
+
delete heads.changes[to];
|
|
107
|
+
if (revision !== undefined)
|
|
108
|
+
heads.revisions[to] = revision;
|
|
109
|
+
if (change !== undefined)
|
|
110
|
+
heads.changes[to] = change;
|
|
90
111
|
}
|
|
91
112
|
function erase(staged, path) {
|
|
92
113
|
delete staged.documents[path];
|
|
93
114
|
delete staged.revisions[path];
|
|
115
|
+
delete staged.changes[path];
|
|
94
116
|
staged.binaryTargets.delete(path);
|
|
95
117
|
}
|
|
96
118
|
function stage(staged, change, priors) {
|
|
@@ -99,11 +121,14 @@ function stage(staged, change, priors) {
|
|
|
99
121
|
return;
|
|
100
122
|
}
|
|
101
123
|
if (change.kind === 'create') {
|
|
102
|
-
staged.documents[change.path] =
|
|
124
|
+
staged.documents[change.path] =
|
|
125
|
+
'content' in change ? change.content : compose(change.fields, change.sections);
|
|
126
|
+
delete staged.changes[change.path];
|
|
103
127
|
return;
|
|
104
128
|
}
|
|
105
129
|
if (change.kind === 'replace') {
|
|
106
|
-
if (staged.documents[change.path] === undefined)
|
|
130
|
+
if (staged.documents[change.path] === undefined)
|
|
131
|
+
return;
|
|
107
132
|
staged.documents[change.path] = change.content;
|
|
108
133
|
return;
|
|
109
134
|
}
|
|
@@ -115,25 +140,144 @@ function stage(staged, change, priors) {
|
|
|
115
140
|
}
|
|
116
141
|
export function overlay(base, queue) {
|
|
117
142
|
const staged = {
|
|
118
|
-
documents: {
|
|
119
|
-
...base.documents
|
|
120
|
-
},
|
|
143
|
+
documents: { ...base.documents },
|
|
121
144
|
binaryTargets: new Set(base.binaryTargets),
|
|
122
|
-
revisions: {
|
|
123
|
-
|
|
124
|
-
}
|
|
145
|
+
revisions: { ...base.revisions },
|
|
146
|
+
changes: { ...base.changes },
|
|
125
147
|
};
|
|
126
|
-
for (const batch of queue){
|
|
148
|
+
for (const batch of queue) {
|
|
127
149
|
const priors = priorsOf(batch.preconditions);
|
|
128
|
-
for (const change of batch.changes)
|
|
150
|
+
for (const change of batch.changes)
|
|
151
|
+
stage(staged, change, priors);
|
|
129
152
|
}
|
|
130
153
|
return {
|
|
131
154
|
documents: staged.documents,
|
|
132
|
-
binaryTargets: [
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
155
|
+
binaryTargets: [...staged.binaryTargets].sort(),
|
|
156
|
+
revisions: staged.revisions,
|
|
157
|
+
changes: staged.changes,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
function pathsOf(batch) {
|
|
161
|
+
return batch.changes.flatMap((change) => change.kind === 'move' ? [change.path, change.to] : [change.path]);
|
|
162
|
+
}
|
|
163
|
+
export function sameLayerText(left, right) {
|
|
164
|
+
const paths = Object.keys(left.documents);
|
|
165
|
+
return (paths.length === Object.keys(right.documents).length &&
|
|
166
|
+
paths.every((path) => left.documents[path] === right.documents[path]) &&
|
|
167
|
+
left.binaryTargets.length === right.binaryTargets.length &&
|
|
168
|
+
left.binaryTargets.every((path) => right.binaryTargets.includes(path)));
|
|
169
|
+
}
|
|
170
|
+
function replayHeads(base, queue) {
|
|
171
|
+
const heads = { revisions: { ...base.revisions }, changes: { ...base.changes } };
|
|
172
|
+
for (const batch of queue) {
|
|
173
|
+
for (const change of batch.changes) {
|
|
174
|
+
if (change.kind === 'remove') {
|
|
175
|
+
delete heads.revisions[change.path];
|
|
176
|
+
delete heads.changes[change.path];
|
|
177
|
+
}
|
|
178
|
+
else if (change.kind === 'create') {
|
|
179
|
+
delete heads.changes[change.path];
|
|
180
|
+
}
|
|
181
|
+
else if (change.kind === 'move') {
|
|
182
|
+
moveHead(heads, change.path, change.to);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return heads;
|
|
187
|
+
}
|
|
188
|
+
export function overlayChanged(base, queue, previousBase, previousQueue, previousVisible) {
|
|
189
|
+
const before = previousQueue.map((batch) => JSON.stringify(batch));
|
|
190
|
+
const after = queue.map((batch) => JSON.stringify(batch));
|
|
191
|
+
if (before.length === after.length &&
|
|
192
|
+
before.every((id, index) => id === after[index]) &&
|
|
193
|
+
sameLayerText(base, previousBase)) {
|
|
194
|
+
return {
|
|
195
|
+
documents: previousVisible.documents,
|
|
196
|
+
binaryTargets: previousVisible.binaryTargets,
|
|
197
|
+
...replayHeads(base, queue),
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
const affected = new Set();
|
|
201
|
+
const paths = new Set([
|
|
202
|
+
...Object.keys(base.documents),
|
|
203
|
+
...Object.keys(previousBase.documents),
|
|
204
|
+
...Object.keys(base.revisions),
|
|
205
|
+
...Object.keys(previousBase.revisions),
|
|
206
|
+
...Object.keys(base.changes),
|
|
207
|
+
...Object.keys(previousBase.changes),
|
|
208
|
+
...base.binaryTargets,
|
|
209
|
+
...previousBase.binaryTargets,
|
|
210
|
+
]);
|
|
211
|
+
for (const path of paths) {
|
|
212
|
+
if (base.documents[path] !== previousBase.documents[path] ||
|
|
213
|
+
base.revisions[path] !== previousBase.revisions[path] ||
|
|
214
|
+
!sameChange(base.changes[path], previousBase.changes[path]) ||
|
|
215
|
+
base.binaryTargets.includes(path) !== previousBase.binaryTargets.includes(path))
|
|
216
|
+
affected.add(path);
|
|
217
|
+
}
|
|
218
|
+
const oldIds = new Set(before);
|
|
219
|
+
const newIds = new Set(after);
|
|
220
|
+
for (const batch of previousQueue) {
|
|
221
|
+
if (!newIds.has(JSON.stringify(batch)))
|
|
222
|
+
for (const path of pathsOf(batch))
|
|
223
|
+
affected.add(path);
|
|
224
|
+
}
|
|
225
|
+
for (const batch of queue) {
|
|
226
|
+
if (!oldIds.has(JSON.stringify(batch)))
|
|
227
|
+
for (const path of pathsOf(batch))
|
|
228
|
+
affected.add(path);
|
|
229
|
+
}
|
|
230
|
+
let expanded = true;
|
|
231
|
+
while (expanded) {
|
|
232
|
+
expanded = false;
|
|
233
|
+
for (const batch of queue) {
|
|
234
|
+
const touched = pathsOf(batch);
|
|
235
|
+
if (!touched.some((path) => affected.has(path)))
|
|
236
|
+
continue;
|
|
237
|
+
for (const path of touched) {
|
|
238
|
+
if (affected.has(path))
|
|
239
|
+
continue;
|
|
240
|
+
affected.add(path);
|
|
241
|
+
expanded = true;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
const documents = {};
|
|
246
|
+
const revisions = {};
|
|
247
|
+
const changes = {};
|
|
248
|
+
for (const path of affected) {
|
|
249
|
+
if (base.documents[path] !== undefined)
|
|
250
|
+
documents[path] = base.documents[path];
|
|
251
|
+
if (base.revisions[path] !== undefined)
|
|
252
|
+
revisions[path] = base.revisions[path];
|
|
253
|
+
if (base.changes[path] !== undefined)
|
|
254
|
+
changes[path] = base.changes[path];
|
|
255
|
+
}
|
|
256
|
+
const staged = overlay({
|
|
257
|
+
documents,
|
|
258
|
+
revisions,
|
|
259
|
+
changes,
|
|
260
|
+
binaryTargets: base.binaryTargets.filter((path) => affected.has(path)),
|
|
261
|
+
}, queue.filter((batch) => pathsOf(batch).some((path) => affected.has(path))));
|
|
262
|
+
const mergedDocuments = { ...previousVisible.documents };
|
|
263
|
+
const mergedRevisions = { ...previousVisible.revisions };
|
|
264
|
+
const mergedChanges = { ...previousVisible.changes };
|
|
265
|
+
const mergedTargets = new Set(previousVisible.binaryTargets);
|
|
266
|
+
for (const path of affected) {
|
|
267
|
+
delete mergedDocuments[path];
|
|
268
|
+
delete mergedRevisions[path];
|
|
269
|
+
delete mergedChanges[path];
|
|
270
|
+
mergedTargets.delete(path);
|
|
271
|
+
}
|
|
272
|
+
Object.assign(mergedDocuments, staged.documents);
|
|
273
|
+
Object.assign(mergedRevisions, staged.revisions);
|
|
274
|
+
Object.assign(mergedChanges, staged.changes);
|
|
275
|
+
for (const path of staged.binaryTargets)
|
|
276
|
+
mergedTargets.add(path);
|
|
277
|
+
return {
|
|
278
|
+
documents: mergedDocuments,
|
|
279
|
+
revisions: mergedRevisions,
|
|
280
|
+
changes: mergedChanges,
|
|
281
|
+
binaryTargets: [...mergedTargets].sort(),
|
|
136
282
|
};
|
|
137
283
|
}
|
|
138
|
-
|
|
139
|
-
//# sourceMappingURL=overlay.js.map
|