cojson 0.3.7 → 0.4.0
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/dist/coValue.d.ts +7 -12
- package/dist/coValue.js.map +1 -1
- package/dist/coValueCore.d.ts +9 -4
- package/dist/coValueCore.js +69 -33
- package/dist/coValueCore.js.map +1 -1
- package/dist/coValues/account.d.ts +62 -0
- package/dist/{account.js → coValues/account.js} +19 -11
- package/dist/coValues/account.js.map +1 -0
- package/dist/coValues/coList.d.ts +19 -19
- package/dist/coValues/coList.js.map +1 -1
- package/dist/coValues/coMap.d.ts +31 -23
- package/dist/coValues/coMap.js +4 -6
- package/dist/coValues/coMap.js.map +1 -1
- package/dist/coValues/coStream.d.ts +19 -19
- package/dist/coValues/coStream.js.map +1 -1
- package/dist/{group.d.ts → coValues/group.d.ts} +27 -38
- package/dist/{group.js → coValues/group.js} +69 -73
- package/dist/coValues/group.js.map +1 -0
- package/dist/ids.d.ts +1 -1
- package/dist/index.d.ts +15 -11
- package/dist/index.js +10 -5
- package/dist/index.js.map +1 -1
- package/dist/localNode.d.ts +20 -7
- package/dist/localNode.js +74 -39
- package/dist/localNode.js.map +1 -1
- package/dist/media.d.ts +1 -1
- package/dist/permissions.d.ts +1 -1
- package/dist/permissions.js +43 -22
- package/dist/permissions.js.map +1 -1
- package/dist/queriedCoValues/queriedAccount.d.ts +13 -0
- package/dist/queriedCoValues/queriedAccount.js +24 -0
- package/dist/queriedCoValues/queriedAccount.js.map +1 -0
- package/dist/queriedCoValues/queriedCoList.d.ts +10 -10
- package/dist/queriedCoValues/queriedCoList.js +11 -15
- package/dist/queriedCoValues/queriedCoList.js.map +1 -1
- package/dist/queriedCoValues/queriedCoMap.d.ts +14 -21
- package/dist/queriedCoValues/queriedCoMap.js +27 -28
- package/dist/queriedCoValues/queriedCoMap.js.map +1 -1
- package/dist/queriedCoValues/queriedCoStream.d.ts +9 -9
- package/dist/queriedCoValues/queriedCoStream.js +44 -20
- package/dist/queriedCoValues/queriedCoStream.js.map +1 -1
- package/dist/queriedCoValues/queriedGroup.d.ts +29 -0
- package/dist/queriedCoValues/queriedGroup.js +54 -0
- package/dist/queriedCoValues/queriedGroup.js.map +1 -0
- package/dist/queries.d.ts +40 -9
- package/dist/queries.js +104 -39
- package/dist/queries.js.map +1 -1
- package/dist/tests/testUtils.d.ts +15 -7
- package/dist/tests/testUtils.js +16 -17
- package/dist/tests/testUtils.js.map +1 -1
- package/package.json +2 -2
- package/src/coValue.ts +12 -31
- package/src/coValueCore.ts +100 -40
- package/src/{account.ts → coValues/account.ts} +46 -27
- package/src/coValues/coList.ts +24 -28
- package/src/coValues/coMap.ts +42 -68
- package/src/coValues/coStream.ts +20 -26
- package/src/{group.ts → coValues/group.ts} +121 -141
- package/src/ids.ts +1 -1
- package/src/index.ts +25 -10
- package/src/localNode.ts +180 -77
- package/src/media.ts +1 -1
- package/src/permissions.ts +67 -36
- package/src/queriedCoValues/queriedAccount.ts +40 -0
- package/src/queriedCoValues/queriedCoList.ts +22 -30
- package/src/queriedCoValues/queriedCoMap.ts +60 -72
- package/src/queriedCoValues/queriedCoStream.ts +67 -37
- package/src/queriedCoValues/queriedGroup.ts +90 -0
- package/src/queries.ts +181 -60
- package/src/tests/account.test.ts +14 -9
- package/src/tests/coValueCore.test.ts +2 -2
- package/src/tests/permissions.test.ts +351 -242
- package/src/tests/queries.test.ts +98 -79
- package/src/tests/sync.test.ts +11 -11
- package/src/tests/testUtils.ts +16 -18
- package/dist/account.d.ts +0 -58
- package/dist/account.js.map +0 -1
- package/dist/group.js.map +0 -1
package/dist/queries.js
CHANGED
|
@@ -1,22 +1,67 @@
|
|
|
1
1
|
import { CoMap } from "./coValues/coMap.js";
|
|
2
2
|
import { CoStream } from "./coValues/coStream.js";
|
|
3
3
|
import { CoList } from "./coValues/coList.js";
|
|
4
|
+
import { Account } from "./coValues/account.js";
|
|
4
5
|
import { QueriedCoMapBase, } from "./queriedCoValues/queriedCoMap.js";
|
|
5
6
|
import { QueriedCoList } from "./queriedCoValues/queriedCoList.js";
|
|
6
7
|
import { QueriedCoStream } from "./queriedCoValues/queriedCoStream.js";
|
|
8
|
+
import { Group } from "./coValues/group.js";
|
|
9
|
+
import { QueriedAccount } from "./queriedCoValues/queriedAccount.js";
|
|
10
|
+
import { QueriedGroup } from "./queriedCoValues/queriedGroup.js";
|
|
7
11
|
export class QueryContext {
|
|
8
12
|
constructor(node, onUpdate) {
|
|
9
13
|
this.values = {};
|
|
14
|
+
this.extensions = {};
|
|
10
15
|
this.node = node;
|
|
11
16
|
this.onUpdate = onUpdate;
|
|
12
17
|
}
|
|
13
|
-
|
|
18
|
+
query(valueID, alsoRender) {
|
|
14
19
|
let value = this.values[valueID];
|
|
15
20
|
if (!value) {
|
|
21
|
+
const render = () => {
|
|
22
|
+
let newQueried;
|
|
23
|
+
const lastUpdate = value.lastUpdate;
|
|
24
|
+
if (lastUpdate instanceof CoMap) {
|
|
25
|
+
if (lastUpdate instanceof Account) {
|
|
26
|
+
newQueried = new QueriedAccount(lastUpdate, this);
|
|
27
|
+
}
|
|
28
|
+
else if (lastUpdate instanceof Group) {
|
|
29
|
+
newQueried = new QueriedGroup(lastUpdate, this);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
newQueried = QueriedCoMapBase.newWithKVPairs(lastUpdate, this);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
else if (lastUpdate instanceof CoList) {
|
|
36
|
+
newQueried = new QueriedCoList(lastUpdate, this);
|
|
37
|
+
}
|
|
38
|
+
else if (lastUpdate instanceof CoStream) {
|
|
39
|
+
if (lastUpdate.meta?.type === "binary") {
|
|
40
|
+
// Querying binary string not yet implemented
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
newQueried = new QueriedCoStream(lastUpdate, this);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// console.log(
|
|
47
|
+
// "Rendered ",
|
|
48
|
+
// valueID,
|
|
49
|
+
// lastUpdate?.constructor.name,
|
|
50
|
+
// newQueried
|
|
51
|
+
// );
|
|
52
|
+
value.lastQueried = newQueried;
|
|
53
|
+
for (const alsoRenderID of alsoRender) {
|
|
54
|
+
// console.log("Also rendering", alsoRenderID);
|
|
55
|
+
this.values[alsoRenderID]?.render();
|
|
56
|
+
}
|
|
57
|
+
};
|
|
16
58
|
value = {
|
|
17
59
|
lastQueried: undefined,
|
|
18
|
-
|
|
19
|
-
|
|
60
|
+
lastUpdate: undefined,
|
|
61
|
+
render,
|
|
62
|
+
unsubscribe: this.node.subscribe(valueID, (valueUpdate) => {
|
|
63
|
+
value.lastUpdate = valueUpdate;
|
|
64
|
+
value.render();
|
|
20
65
|
this.onUpdate();
|
|
21
66
|
}),
|
|
22
67
|
};
|
|
@@ -24,52 +69,72 @@ export class QueryContext {
|
|
|
24
69
|
}
|
|
25
70
|
return value.lastQueried;
|
|
26
71
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
72
|
+
queryIfCoID(value, alsoRender) {
|
|
73
|
+
if (typeof value === "string" && value.startsWith("co_")) {
|
|
74
|
+
return this.query(value, alsoRender);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
return value;
|
|
78
|
+
}
|
|
34
79
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
80
|
+
valueOrSubQueryPropertyDescriptor(value, alsoRender) {
|
|
81
|
+
if (typeof value === "string" && value.startsWith("co_")) {
|
|
82
|
+
// TODO: when we track render dirty status, we can actually return the queried value without a getter if it's up to date
|
|
83
|
+
return {
|
|
84
|
+
get: () => this.query(value, alsoRender),
|
|
85
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
90
|
+
return { value: value };
|
|
38
91
|
}
|
|
39
92
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
onUpdate();
|
|
47
|
-
});
|
|
48
|
-
let lastRootValue;
|
|
49
|
-
function onUpdate() {
|
|
50
|
-
const rootValue = lastRootValue;
|
|
51
|
-
if (rootValue === undefined) {
|
|
52
|
-
return undefined;
|
|
93
|
+
defineSubqueryPropertiesIn(obj, subqueryProps, alsoRender) {
|
|
94
|
+
for (const [key, descriptor] of Object.entries(subqueryProps)) {
|
|
95
|
+
Object.defineProperty(obj, key, {
|
|
96
|
+
...this.valueOrSubQueryPropertyDescriptor(descriptor.value, alsoRender),
|
|
97
|
+
enumerable: descriptor.enumerable,
|
|
98
|
+
});
|
|
53
99
|
}
|
|
54
|
-
|
|
55
|
-
|
|
100
|
+
return obj;
|
|
101
|
+
}
|
|
102
|
+
getOrCreateExtension(valueID, extension) {
|
|
103
|
+
const id = `${valueID}_${extension.id}`;
|
|
104
|
+
let ext = this.extensions[id];
|
|
105
|
+
if (!ext) {
|
|
106
|
+
ext = {
|
|
107
|
+
lastOutput: undefined,
|
|
108
|
+
unsubscribe: extension.query(this.node
|
|
109
|
+
.expectCoValueLoaded(valueID)
|
|
110
|
+
.getCurrentContent(), this, (output) => {
|
|
111
|
+
ext.lastOutput = output;
|
|
112
|
+
this.values[valueID]?.render();
|
|
113
|
+
this.onUpdate();
|
|
114
|
+
}),
|
|
115
|
+
};
|
|
116
|
+
this.extensions[id] = ext;
|
|
56
117
|
}
|
|
57
|
-
|
|
58
|
-
|
|
118
|
+
return ext.lastOutput;
|
|
119
|
+
}
|
|
120
|
+
cleanup() {
|
|
121
|
+
for (const child of Object.values(this.values)) {
|
|
122
|
+
child.unsubscribe?.();
|
|
59
123
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
// Querying binary string not yet implemented
|
|
63
|
-
return {};
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
callback(new QueriedCoStream(rootValue, context));
|
|
67
|
-
}
|
|
124
|
+
for (const extension of Object.values(this.extensions)) {
|
|
125
|
+
extension.unsubscribe();
|
|
68
126
|
}
|
|
69
127
|
}
|
|
128
|
+
}
|
|
129
|
+
export function query(id, node, callback) {
|
|
130
|
+
// console.log("querying", id);
|
|
131
|
+
const context = new QueryContext(node, () => {
|
|
132
|
+
const rootQueried = context.values[id]?.lastQueried;
|
|
133
|
+
callback(rootQueried);
|
|
134
|
+
});
|
|
135
|
+
context.query(id, []);
|
|
70
136
|
const cleanup = function cleanup() {
|
|
71
137
|
context.cleanup();
|
|
72
|
-
unsubscribe();
|
|
73
138
|
};
|
|
74
139
|
cleanup[Symbol.dispose] = cleanup;
|
|
75
140
|
return cleanup;
|
package/dist/queries.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,28 +1,36 @@
|
|
|
1
1
|
import { LocalNode } from "../localNode.js";
|
|
2
|
-
import { AnonymousControlledAccount } from "../account.js";
|
|
2
|
+
import { AnonymousControlledAccount } from "../coValues/account.js";
|
|
3
3
|
import { SessionID } from "../ids.js";
|
|
4
4
|
export declare function randomAnonymousAccountAndSessionID(): [AnonymousControlledAccount, SessionID];
|
|
5
5
|
export declare function newGroup(): {
|
|
6
6
|
node: LocalNode;
|
|
7
|
-
|
|
7
|
+
groupCore: import("../coValueCore.js").CoValueCore;
|
|
8
8
|
admin: AnonymousControlledAccount;
|
|
9
9
|
};
|
|
10
10
|
export declare function groupWithTwoAdmins(): {
|
|
11
|
-
|
|
11
|
+
groupCore: import("../coValueCore.js").CoValueCore;
|
|
12
12
|
admin: AnonymousControlledAccount;
|
|
13
|
-
otherAdmin: import("../account.js").ControlledAccount
|
|
13
|
+
otherAdmin: import("../coValues/account.js").ControlledAccount<import("../coValues/account.js").Profile<import("../coValues/account.js").ProfileShape, import("../coValues/account.js").ProfileMeta>, import("../index.js").CoMap<{
|
|
14
|
+
[key: string]: import("../jsonValue.js").JsonValue | undefined;
|
|
15
|
+
}, import("../jsonValue.js").JsonObject | null>, import("../coValues/account.js").AccountMeta>;
|
|
14
16
|
node: LocalNode;
|
|
15
17
|
};
|
|
16
18
|
export declare function newGroupHighLevel(): {
|
|
17
19
|
admin: AnonymousControlledAccount;
|
|
18
20
|
node: LocalNode;
|
|
19
|
-
group: import("../group.js").Group
|
|
21
|
+
group: import("../coValues/group.js").Group<import("../coValues/account.js").Profile<import("../coValues/account.js").ProfileShape, import("../coValues/account.js").ProfileMeta>, import("../index.js").CoMap<{
|
|
22
|
+
[key: string]: import("../jsonValue.js").JsonValue | undefined;
|
|
23
|
+
}, import("../jsonValue.js").JsonObject | null>, import("../jsonValue.js").JsonObject | null>;
|
|
20
24
|
};
|
|
21
25
|
export declare function groupWithTwoAdminsHighLevel(): {
|
|
22
26
|
admin: AnonymousControlledAccount;
|
|
23
27
|
node: LocalNode;
|
|
24
|
-
group: import("../group.js").Group
|
|
25
|
-
|
|
28
|
+
group: import("../coValues/group.js").Group<import("../coValues/account.js").Profile<import("../coValues/account.js").ProfileShape, import("../coValues/account.js").ProfileMeta>, import("../index.js").CoMap<{
|
|
29
|
+
[key: string]: import("../jsonValue.js").JsonValue | undefined;
|
|
30
|
+
}, import("../jsonValue.js").JsonObject | null>, import("../jsonValue.js").JsonObject | null>;
|
|
31
|
+
otherAdmin: import("../coValues/account.js").ControlledAccount<import("../coValues/account.js").Profile<import("../coValues/account.js").ProfileShape, import("../coValues/account.js").ProfileMeta>, import("../index.js").CoMap<{
|
|
32
|
+
[key: string]: import("../jsonValue.js").JsonValue | undefined;
|
|
33
|
+
}, import("../jsonValue.js").JsonObject | null>, import("../coValues/account.js").AccountMeta>;
|
|
26
34
|
};
|
|
27
35
|
export declare function shouldNotResolve<T>(promise: Promise<T>, ops: {
|
|
28
36
|
timeout: number;
|
package/dist/tests/testUtils.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createdNowUnique, getAgentID, newRandomAgentSecret } from "../crypto.js";
|
|
2
2
|
import { newRandomSessionID } from "../coValueCore.js";
|
|
3
3
|
import { LocalNode } from "../localNode.js";
|
|
4
|
-
import {
|
|
5
|
-
import { AnonymousControlledAccount } from "../account.js";
|
|
4
|
+
import { expectGroup } from "../coValues/group.js";
|
|
5
|
+
import { AnonymousControlledAccount } from "../coValues/account.js";
|
|
6
6
|
// @ts-ignore
|
|
7
7
|
import { expect } from "bun:test";
|
|
8
8
|
export function randomAnonymousAccountAndSessionID() {
|
|
@@ -13,33 +13,32 @@ export function randomAnonymousAccountAndSessionID() {
|
|
|
13
13
|
export function newGroup() {
|
|
14
14
|
const [admin, sessionID] = randomAnonymousAccountAndSessionID();
|
|
15
15
|
const node = new LocalNode(admin, sessionID);
|
|
16
|
-
const
|
|
16
|
+
const groupCore = node.createCoValue({
|
|
17
17
|
type: "comap",
|
|
18
18
|
ruleset: { type: "group", initialAdmin: admin.id },
|
|
19
19
|
meta: null,
|
|
20
20
|
...createdNowUnique(),
|
|
21
21
|
});
|
|
22
|
-
const
|
|
23
|
-
|
|
22
|
+
const group = expectGroup(groupCore.getCurrentContent());
|
|
23
|
+
group.mutate((editable) => {
|
|
24
24
|
editable.set(admin.id, "admin", "trusting");
|
|
25
25
|
expect(editable.get(admin.id)).toEqual("admin");
|
|
26
26
|
});
|
|
27
|
-
return { node,
|
|
27
|
+
return { node, groupCore, admin };
|
|
28
28
|
}
|
|
29
29
|
export function groupWithTwoAdmins() {
|
|
30
|
-
const {
|
|
30
|
+
const { groupCore, admin, node } = newGroup();
|
|
31
31
|
const otherAdmin = node.createAccount("otherAdmin");
|
|
32
|
-
let
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
expect(
|
|
32
|
+
let group = expectGroup(groupCore.getCurrentContent());
|
|
33
|
+
group = group.mutate((mutable) => {
|
|
34
|
+
mutable.set(otherAdmin.id, "admin", "trusting");
|
|
35
|
+
expect(mutable.get(otherAdmin.id)).toEqual("admin");
|
|
36
36
|
});
|
|
37
|
-
|
|
38
|
-
if (content.type !== "comap") {
|
|
37
|
+
if (group.type !== "comap") {
|
|
39
38
|
throw new Error("Expected map");
|
|
40
39
|
}
|
|
41
|
-
expect(
|
|
42
|
-
return {
|
|
40
|
+
expect(group.get(otherAdmin.id)).toEqual("admin");
|
|
41
|
+
return { groupCore, admin, otherAdmin, node };
|
|
43
42
|
}
|
|
44
43
|
export function newGroupHighLevel() {
|
|
45
44
|
const [admin, sessionID] = randomAnonymousAccountAndSessionID();
|
|
@@ -48,9 +47,9 @@ export function newGroupHighLevel() {
|
|
|
48
47
|
return { admin, node, group };
|
|
49
48
|
}
|
|
50
49
|
export function groupWithTwoAdminsHighLevel() {
|
|
51
|
-
|
|
50
|
+
let { admin, node, group } = newGroupHighLevel();
|
|
52
51
|
const otherAdmin = node.createAccount("otherAdmin");
|
|
53
|
-
group.addMember(otherAdmin.id, "admin");
|
|
52
|
+
group = group.addMember(otherAdmin.id, "admin");
|
|
54
53
|
return { admin, node, group, otherAdmin };
|
|
55
54
|
}
|
|
56
55
|
export function shouldNotResolve(promise, ops) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testUtils.js","sourceRoot":"","sources":["../../src/tests/testUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,gBAAgB,EAAE,UAAU,EAAE,oBAAoB,EAAG,MAAM,cAAc,CAAC;AAChG,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"testUtils.js","sourceRoot":"","sources":["../../src/tests/testUtils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"license": "MIT",
|
|
8
|
-
"version": "0.
|
|
8
|
+
"version": "0.4.0",
|
|
9
9
|
"devDependencies": {
|
|
10
10
|
"@types/jest": "^29.5.3",
|
|
11
11
|
"@typescript-eslint/eslint-plugin": "^6.2.1",
|
|
@@ -51,5 +51,5 @@
|
|
|
51
51
|
"/dist/"
|
|
52
52
|
]
|
|
53
53
|
},
|
|
54
|
-
"gitHead": "
|
|
54
|
+
"gitHead": "b2c8d8c8557c0324ee1c10d0f47441b624647f85"
|
|
55
55
|
}
|
package/src/coValue.ts
CHANGED
|
@@ -8,7 +8,8 @@ import {
|
|
|
8
8
|
} from "./coValues/coStream.js";
|
|
9
9
|
import { CoList } from "./coValues/coList.js";
|
|
10
10
|
import { CoValueCore } from "./coValueCore.js";
|
|
11
|
-
import { Group } from "./group.js";
|
|
11
|
+
import { Group } from "./coValues/group.js";
|
|
12
|
+
import { Account, Profile } from "./index.js";
|
|
12
13
|
|
|
13
14
|
export type CoID<T extends CoValue> = RawCoID & {
|
|
14
15
|
readonly __type: T;
|
|
@@ -37,55 +38,35 @@ export interface CoValue {
|
|
|
37
38
|
subscribe(listener: (coValue: this) => void): () => void;
|
|
38
39
|
}
|
|
39
40
|
|
|
40
|
-
export type
|
|
41
|
-
{ [key: string]: JsonValue | CoValue | undefined },
|
|
42
|
-
JsonObject | null
|
|
43
|
-
>;
|
|
41
|
+
export type AnyCoValue = CoMap | Group | Account | Profile | CoList | CoStream | BinaryCoStream;
|
|
44
42
|
|
|
45
|
-
export
|
|
46
|
-
|
|
47
|
-
export type AnyCoStream = CoStream<JsonValue | CoValue, JsonObject | null>;
|
|
48
|
-
|
|
49
|
-
export type AnyBinaryCoStream = BinaryCoStream<BinaryCoStreamMeta>;
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
export type AnyCoValue =
|
|
53
|
-
| AnyCoMap
|
|
54
|
-
| AnyCoList
|
|
55
|
-
| AnyCoStream
|
|
56
|
-
| AnyBinaryCoStream
|
|
57
|
-
|
|
58
|
-
export function expectMap(
|
|
59
|
-
content: CoValue
|
|
60
|
-
): AnyCoMap {
|
|
43
|
+
export function expectMap(content: CoValue): CoMap {
|
|
61
44
|
if (content.type !== "comap") {
|
|
62
45
|
throw new Error("Expected map");
|
|
63
46
|
}
|
|
64
47
|
|
|
65
|
-
return content as
|
|
48
|
+
return content as CoMap;
|
|
66
49
|
}
|
|
67
50
|
|
|
68
|
-
export function expectList(
|
|
69
|
-
content: CoValue
|
|
70
|
-
): AnyCoList {
|
|
51
|
+
export function expectList(content: CoValue): CoList {
|
|
71
52
|
if (content.type !== "colist") {
|
|
72
53
|
throw new Error("Expected list");
|
|
73
54
|
}
|
|
74
55
|
|
|
75
|
-
return content as
|
|
56
|
+
return content as CoList;
|
|
76
57
|
}
|
|
77
58
|
|
|
78
|
-
export function expectStream(
|
|
79
|
-
content: CoValue
|
|
80
|
-
): AnyCoStream {
|
|
59
|
+
export function expectStream(content: CoValue): CoStream {
|
|
81
60
|
if (content.type !== "costream") {
|
|
82
61
|
throw new Error("Expected stream");
|
|
83
62
|
}
|
|
84
63
|
|
|
85
|
-
return content as
|
|
64
|
+
return content as CoStream;
|
|
86
65
|
}
|
|
87
66
|
|
|
88
|
-
export function isCoValue(
|
|
67
|
+
export function isCoValue(
|
|
68
|
+
value: JsonValue | CoValue | undefined
|
|
69
|
+
): value is CoValue {
|
|
89
70
|
return (
|
|
90
71
|
value instanceof CoMap ||
|
|
91
72
|
value instanceof CoList ||
|