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
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import { MutableCoMap } from "../coValues/coMap.js";
|
|
1
|
+
import { CoMap, MutableCoMap } from "../coValues/coMap.js";
|
|
2
2
|
import { CoValueCore } from "../coValueCore.js";
|
|
3
|
-
import { Group } from "../group.js";
|
|
4
|
-
import {
|
|
5
|
-
import { AnyCoMap, CoID, CoValue } from "../coValue.js";
|
|
3
|
+
import { Group } from "../coValues/group.js";
|
|
4
|
+
import { CoID } from "../coValue.js";
|
|
6
5
|
import { TransactionID } from "../ids.js";
|
|
7
|
-
import { ValueOrSubQueried, QueryContext } from "../queries.js";
|
|
8
|
-
|
|
6
|
+
import { ValueOrSubQueried, QueryContext, QueryExtension } from "../queries.js";
|
|
7
|
+
import { QueriedAccount } from "./queriedAccount.js";
|
|
8
|
+
export type QueriedCoMap<M extends CoMap> = {
|
|
9
9
|
[K in keyof M["_shape"] & string]: ValueOrSubQueried<M["_shape"][K]>;
|
|
10
10
|
} & QueriedCoMapBase<M>;
|
|
11
|
-
export type QueriedCoMapEdit<M extends
|
|
12
|
-
by?:
|
|
11
|
+
export type QueriedCoMapEdit<M extends CoMap, K extends keyof M["_shape"]> = {
|
|
12
|
+
by?: QueriedAccount;
|
|
13
13
|
tx: TransactionID;
|
|
14
14
|
at: Date;
|
|
15
|
-
value: M["_shape"][K]
|
|
15
|
+
value: M["_shape"][K];
|
|
16
16
|
};
|
|
17
|
-
export declare class QueriedCoMapBase<M extends
|
|
17
|
+
export declare class QueriedCoMapBase<M extends CoMap> {
|
|
18
18
|
coMap: M;
|
|
19
19
|
id: CoID<M>;
|
|
20
20
|
type: "comap";
|
|
21
21
|
/** @internal */
|
|
22
|
-
static newWithKVPairs<M extends
|
|
22
|
+
static newWithKVPairs<M extends CoMap>(coMap: M, queryContext: QueryContext): QueriedCoMap<M>;
|
|
23
23
|
/** @internal */
|
|
24
24
|
constructor(coMap: M, queryContext: QueryContext);
|
|
25
25
|
edits: {
|
|
@@ -30,18 +30,11 @@ export declare class QueriedCoMapBase<M extends AnyCoMap> {
|
|
|
30
30
|
get meta(): M["meta"];
|
|
31
31
|
get group(): Group;
|
|
32
32
|
get core(): CoValueCore;
|
|
33
|
-
set<K extends keyof M["_shape"] & string>(key: K, value: M["_shape"][K]
|
|
33
|
+
set<K extends keyof M["_shape"] & string>(key: K, value: M["_shape"][K], privacy?: "private" | "trusting"): M;
|
|
34
34
|
set(kv: {
|
|
35
|
-
[K in keyof M["_shape"] & string]?: M["_shape"][K]
|
|
35
|
+
[K in keyof M["_shape"] & string]?: M["_shape"][K];
|
|
36
36
|
}, privacy?: "private" | "trusting"): M;
|
|
37
37
|
delete(key: keyof M["_shape"] & string, privacy?: "private" | "trusting"): M;
|
|
38
38
|
mutate(mutator: (mutable: MutableCoMap<M["_shape"], M["meta"]>) => void): M;
|
|
39
|
+
as: <O>(extension: QueryExtension<M, O>) => O | undefined;
|
|
39
40
|
}
|
|
40
|
-
export type QueriedAccountAndProfile = {
|
|
41
|
-
profile?: {
|
|
42
|
-
name?: string;
|
|
43
|
-
id: CoID<Profile>;
|
|
44
|
-
};
|
|
45
|
-
isMe?: boolean;
|
|
46
|
-
id: AccountID;
|
|
47
|
-
};
|
|
@@ -1,47 +1,40 @@
|
|
|
1
|
-
import { isAccountID } from "../account.js";
|
|
2
1
|
export class QueriedCoMapBase {
|
|
3
2
|
/** @internal */
|
|
4
3
|
static newWithKVPairs(coMap, queryContext) {
|
|
5
4
|
const kv = {};
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
coMap.id ===
|
|
14
|
-
queryContext.node.account.id;
|
|
15
|
-
}
|
|
16
|
-
else {
|
|
17
|
-
for (const key of coMap.keys()) {
|
|
18
|
-
const value = coMap.get(key);
|
|
19
|
-
if (value === undefined)
|
|
20
|
-
continue;
|
|
21
|
-
kv[key] = queryContext.resolveValue(value
|
|
22
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
23
|
-
);
|
|
24
|
-
}
|
|
5
|
+
for (const key of coMap.keys()) {
|
|
6
|
+
const value = coMap.get(key);
|
|
7
|
+
if (value === undefined)
|
|
8
|
+
continue;
|
|
9
|
+
queryContext.defineSubqueryPropertiesIn(kv, {
|
|
10
|
+
[key]: { value, enumerable: true },
|
|
11
|
+
}, [coMap.id]);
|
|
25
12
|
}
|
|
26
13
|
return Object.assign(new QueriedCoMapBase(coMap, queryContext), kv);
|
|
27
14
|
}
|
|
28
15
|
/** @internal */
|
|
29
16
|
constructor(coMap, queryContext) {
|
|
30
17
|
Object.defineProperties(this, {
|
|
31
|
-
coMap: {
|
|
18
|
+
coMap: {
|
|
19
|
+
get() {
|
|
20
|
+
return coMap;
|
|
21
|
+
},
|
|
22
|
+
enumerable: false,
|
|
23
|
+
},
|
|
32
24
|
id: { value: coMap.id, enumerable: false },
|
|
33
25
|
type: { value: "comap", enumerable: false },
|
|
34
26
|
edits: {
|
|
35
27
|
value: Object.fromEntries(coMap.keys().flatMap((key) => {
|
|
36
|
-
const edits = [...coMap.editsAt(key)].map((edit) => ({
|
|
37
|
-
by: edit.by && isAccountID(edit.by)
|
|
38
|
-
? queryContext.resolveAccount(edit.by)
|
|
39
|
-
: undefined,
|
|
28
|
+
const edits = [...coMap.editsAt(key)].map((edit) => queryContext.defineSubqueryPropertiesIn({
|
|
40
29
|
tx: edit.tx,
|
|
41
30
|
at: new Date(edit.at),
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
31
|
+
}, {
|
|
32
|
+
by: { value: edit.by, enumerable: true },
|
|
33
|
+
value: {
|
|
34
|
+
value: edit.value,
|
|
35
|
+
enumerable: true,
|
|
36
|
+
},
|
|
37
|
+
}, [coMap.id]));
|
|
45
38
|
const lastEdit = edits[edits.length - 1];
|
|
46
39
|
if (!lastEdit)
|
|
47
40
|
return [];
|
|
@@ -58,6 +51,12 @@ export class QueriedCoMapBase {
|
|
|
58
51
|
})),
|
|
59
52
|
enumerable: false,
|
|
60
53
|
},
|
|
54
|
+
as: {
|
|
55
|
+
value: (extension) => {
|
|
56
|
+
return queryContext.getOrCreateExtension(coMap.id, extension);
|
|
57
|
+
},
|
|
58
|
+
enumerable: false,
|
|
59
|
+
},
|
|
61
60
|
});
|
|
62
61
|
}
|
|
63
62
|
get meta() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queriedCoMap.js","sourceRoot":"","sources":["../../src/queriedCoValues/queriedCoMap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"queriedCoMap.js","sourceRoot":"","sources":["../../src/queriedCoValues/queriedCoMap.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
import { JsonValue } from "../jsonValue.js";
|
|
2
|
-
import { MutableCoStream } from "../coValues/coStream.js";
|
|
2
|
+
import { CoStream, MutableCoStream } from "../coValues/coStream.js";
|
|
3
3
|
import { CoValueCore } from "../coValueCore.js";
|
|
4
|
-
import { Group } from "../group.js";
|
|
5
|
-
import { AccountID } from "../account.js";
|
|
6
|
-
import {
|
|
4
|
+
import { Group } from "../coValues/group.js";
|
|
5
|
+
import { AccountID } from "../coValues/account.js";
|
|
6
|
+
import { CoID, CoValue } from "../coValue.js";
|
|
7
7
|
import { SessionID, TransactionID } from "../ids.js";
|
|
8
|
-
import { QueriedAccountAndProfile } from "./queriedCoMap.js";
|
|
9
8
|
import { ValueOrSubQueried, QueryContext } from "../queries.js";
|
|
9
|
+
import { QueriedAccount } from "./queriedAccount.js";
|
|
10
10
|
export type QueriedCoStreamItems<Item extends JsonValue | CoValue> = {
|
|
11
11
|
last?: ValueOrSubQueried<Item>;
|
|
12
|
-
by?:
|
|
12
|
+
by?: QueriedAccount;
|
|
13
13
|
tx?: TransactionID;
|
|
14
14
|
at?: Date;
|
|
15
15
|
all: {
|
|
16
16
|
value: ValueOrSubQueried<Item>;
|
|
17
|
-
by?:
|
|
17
|
+
by?: QueriedAccount;
|
|
18
18
|
tx: TransactionID;
|
|
19
19
|
at: Date;
|
|
20
20
|
}[];
|
|
21
21
|
};
|
|
22
|
-
export declare class QueriedCoStream<S extends
|
|
22
|
+
export declare class QueriedCoStream<S extends CoStream> {
|
|
23
23
|
coStream: S;
|
|
24
24
|
id: CoID<S>;
|
|
25
25
|
type: "costream";
|
|
@@ -35,6 +35,6 @@ export declare class QueriedCoStream<S extends AnyCoStream> {
|
|
|
35
35
|
perSession: {
|
|
36
36
|
[session: SessionID]: QueriedCoStreamItems<S["_item"]>;
|
|
37
37
|
};
|
|
38
|
-
push(item: S["_item"]
|
|
38
|
+
push(item: S["_item"], privacy?: "private" | "trusting"): S;
|
|
39
39
|
mutate(mutator: (mutable: MutableCoStream<S["_item"], S["meta"]>) => void): S;
|
|
40
40
|
}
|
|
@@ -1,26 +1,40 @@
|
|
|
1
|
-
import { isAccountID } from "../account.js";
|
|
1
|
+
import { isAccountID } from "../coValues/account.js";
|
|
2
2
|
export class QueriedCoStream {
|
|
3
3
|
/** @internal */
|
|
4
4
|
constructor(coStream, queryContext) {
|
|
5
5
|
this.type = "costream";
|
|
6
|
-
this
|
|
6
|
+
Object.defineProperty(this, "coStream", {
|
|
7
|
+
get() {
|
|
8
|
+
return coStream;
|
|
9
|
+
},
|
|
10
|
+
});
|
|
7
11
|
this.id = coStream.id;
|
|
8
12
|
this.perSession = Object.fromEntries(coStream.sessions().map((sessionID) => {
|
|
9
|
-
const items = [...coStream.itemsIn(sessionID)].map((item) => ({
|
|
10
|
-
by: item.by && isAccountID(item.by)
|
|
11
|
-
? queryContext.resolveAccount(item.by)
|
|
12
|
-
: undefined,
|
|
13
|
+
const items = [...coStream.itemsIn(sessionID)].map((item) => queryContext.defineSubqueryPropertiesIn({
|
|
13
14
|
tx: item.tx,
|
|
14
15
|
at: new Date(item.at),
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
}, {
|
|
17
|
+
by: {
|
|
18
|
+
value: isAccountID(item.by)
|
|
19
|
+
? item.by
|
|
20
|
+
: undefined,
|
|
21
|
+
enumerable: true,
|
|
22
|
+
},
|
|
23
|
+
value: {
|
|
24
|
+
value: item.value,
|
|
25
|
+
enumerable: true,
|
|
26
|
+
},
|
|
27
|
+
}, [coStream.id]));
|
|
18
28
|
const lastItem = items[items.length - 1];
|
|
19
29
|
return [
|
|
20
30
|
sessionID,
|
|
21
31
|
{
|
|
22
|
-
last
|
|
23
|
-
|
|
32
|
+
get last() {
|
|
33
|
+
return lastItem?.value;
|
|
34
|
+
},
|
|
35
|
+
get by() {
|
|
36
|
+
return lastItem?.by;
|
|
37
|
+
},
|
|
24
38
|
tx: lastItem?.tx,
|
|
25
39
|
at: lastItem?.at,
|
|
26
40
|
all: items,
|
|
@@ -28,21 +42,31 @@ export class QueriedCoStream {
|
|
|
28
42
|
];
|
|
29
43
|
}));
|
|
30
44
|
this.perAccount = Object.fromEntries([...coStream.accounts()].map((accountID) => {
|
|
31
|
-
const items = [...coStream.itemsBy(accountID)].map((item) => ({
|
|
32
|
-
by: item.by && isAccountID(item.by)
|
|
33
|
-
? queryContext.resolveAccount(item.by)
|
|
34
|
-
: undefined,
|
|
45
|
+
const items = [...coStream.itemsBy(accountID)].map((item) => queryContext.defineSubqueryPropertiesIn({
|
|
35
46
|
tx: item.tx,
|
|
36
47
|
at: new Date(item.at),
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
48
|
+
}, {
|
|
49
|
+
by: {
|
|
50
|
+
value: isAccountID(item.by)
|
|
51
|
+
? item.by
|
|
52
|
+
: undefined,
|
|
53
|
+
enumerable: true,
|
|
54
|
+
},
|
|
55
|
+
value: {
|
|
56
|
+
value: item.value,
|
|
57
|
+
enumerable: true,
|
|
58
|
+
},
|
|
59
|
+
}, [coStream.id]));
|
|
40
60
|
const lastItem = items[items.length - 1];
|
|
41
61
|
return [
|
|
42
62
|
accountID,
|
|
43
63
|
{
|
|
44
|
-
last
|
|
45
|
-
|
|
64
|
+
get last() {
|
|
65
|
+
return lastItem?.value;
|
|
66
|
+
},
|
|
67
|
+
get by() {
|
|
68
|
+
return lastItem?.by;
|
|
69
|
+
},
|
|
46
70
|
tx: lastItem?.tx,
|
|
47
71
|
at: lastItem?.at,
|
|
48
72
|
all: items,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queriedCoStream.js","sourceRoot":"","sources":["../../src/queriedCoValues/queriedCoStream.ts"],"names":[],"mappings":"AAIA,OAAO,EAAa,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"queriedCoStream.js","sourceRoot":"","sources":["../../src/queriedCoValues/queriedCoStream.ts"],"names":[],"mappings":"AAIA,OAAO,EAAa,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAmBhE,MAAM,OAAO,eAAe;IAKxB,gBAAgB;IAChB,YAAY,QAAW,EAAE,YAA0B;QAHnD,SAAI,GAAG,UAAmB,CAAC;QAIvB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE;YACpC,GAAG;gBACC,OAAO,QAAQ,CAAC;YACpB,CAAC;SACJ,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;QAEtB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,WAAW,CAChC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;YAClC,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACxD,YAAY,CAAC,0BAA0B,CACnC;gBACI,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,EAAE,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;aACxB,EACD;gBACI,EAAE,EAAE;oBACA,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;wBACvB,CAAC,CAAC,IAAI,CAAC,EAAE;wBACT,CAAC,CAAE,SAAmB;oBAC1B,UAAU,EAAE,IAAI;iBACnB;gBACD,KAAK,EAAE;oBACH,KAAK,EAAE,IAAI,CAAC,KAAmB;oBAC/B,UAAU,EAAE,IAAI;iBACnB;aACJ,EACD,CAAC,QAAQ,CAAC,EAAE,CAAC,CAChB,CACJ,CAAC;YAEF,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAEzC,OAAO;gBACH,SAAS;gBACT;oBACI,IAAI,IAAI;wBACJ,OAAO,QAAQ,EAAE,KAAK,CAAC;oBAC3B,CAAC;oBACD,IAAI,EAAE;wBACF,OAAO,QAAQ,EAAE,EAAE,CAAC;oBACxB,CAAC;oBACD,EAAE,EAAE,QAAQ,EAAE,EAAE;oBAChB,EAAE,EAAE,QAAQ,EAAE,EAAE;oBAChB,GAAG,EAAE,KAAK;iBAC8B;aAC/C,CAAC;QACN,CAAC,CAAC,CACL,CAAC;QAEF,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,WAAW,CAChC,CAAC,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;YACvC,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,0BAA0B,CAChG;gBACI,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,EAAE,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;aACxB,EACD;gBACI,EAAE,EAAE;oBACA,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;wBACvB,CAAC,CAAC,IAAI,CAAC,EAAE;wBACT,CAAC,CAAE,SAAmB;oBAC1B,UAAU,EAAE,IAAI;iBACnB;gBACD,KAAK,EAAE;oBACH,KAAK,EAAE,IAAI,CAAC,KAAmB;oBAC/B,UAAU,EAAE,IAAI;iBACnB;aACJ,EACD,CAAC,QAAQ,CAAC,EAAE,CAAC,CAChB,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAEzC,OAAO;gBACH,SAAS;gBACT;oBACI,IAAI,IAAI;wBACJ,OAAO,QAAQ,EAAE,KAAK,CAAC;oBAC3B,CAAC;oBACD,IAAI,EAAE;wBACF,OAAO,QAAQ,EAAE,EAAE,CAAC;oBACxB,CAAC;oBACD,EAAE,EAAE,QAAQ,EAAE,EAAE;oBAChB,EAAE,EAAE,QAAQ,EAAE,EAAE;oBAChB,GAAG,EAAE,KAAK;iBAC8B;aAC/C,CAAC;QACN,CAAC,CAAC,CACL,CAAC;QAEF,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/C,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/C,CAAC,CAAC,SAAS,CAAC;IACpB,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC9B,CAAC;IAED,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC/B,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC9B,CAAC;IAUD,IAAI,CAAC,IAAgB,EAAE,OAAgC;QACnD,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IACD,MAAM,CACF,OAAkE;QAElE,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;CACJ"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Everyone, Group, InviteSecret } from "../coValues/group.js";
|
|
2
|
+
import { CoID } from "../coValue.js";
|
|
3
|
+
import { QueryContext, ValueOrSubQueried } from "../queries.js";
|
|
4
|
+
import { CoValueCore } from "../coValueCore.js";
|
|
5
|
+
import { Role } from "../permissions.js";
|
|
6
|
+
import { AccountID } from "../coValues/account.js";
|
|
7
|
+
import { CoMap } from "../coValues/coMap.js";
|
|
8
|
+
import { CoList } from "../coValues/coList.js";
|
|
9
|
+
import { CoStream } from "../coValues/coStream.js";
|
|
10
|
+
import { BinaryCoStream } from "../coValues/coStream.js";
|
|
11
|
+
export declare class QueriedGroup<G extends Group = Group> {
|
|
12
|
+
group: G;
|
|
13
|
+
id: CoID<G>;
|
|
14
|
+
type: "group";
|
|
15
|
+
profile?: ValueOrSubQueried<G["_shape"]["profile"]>;
|
|
16
|
+
root?: ValueOrSubQueried<G["_shape"]["root"]>;
|
|
17
|
+
constructor(group: G, queryContext: QueryContext);
|
|
18
|
+
get meta(): G["meta"];
|
|
19
|
+
get core(): CoValueCore;
|
|
20
|
+
addMember(accountID: AccountID | Everyone, role: Role): G;
|
|
21
|
+
removeMember(accountID: AccountID): G;
|
|
22
|
+
createInvite(role: "reader" | "writer" | "admin"): InviteSecret;
|
|
23
|
+
createMap<M extends CoMap>(init?: {
|
|
24
|
+
[K in keyof M["_shape"]]: M["_shape"][K];
|
|
25
|
+
}, meta?: M["meta"], initPrivacy?: "trusting" | "private"): M;
|
|
26
|
+
createList<L extends CoList>(init?: L["_item"][], meta?: L["meta"], initPrivacy?: "trusting" | "private"): L;
|
|
27
|
+
createStream<C extends CoStream>(meta?: C["meta"]): C;
|
|
28
|
+
createBinaryStream<C extends BinaryCoStream>(meta?: C["meta"]): C;
|
|
29
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export class QueriedGroup {
|
|
2
|
+
constructor(group, queryContext) {
|
|
3
|
+
this.type = "group";
|
|
4
|
+
const profileID = group.get("profile");
|
|
5
|
+
const rootID = group.get("root");
|
|
6
|
+
queryContext.defineSubqueryPropertiesIn(Object.defineProperties(this, {
|
|
7
|
+
group: {
|
|
8
|
+
get() {
|
|
9
|
+
return group;
|
|
10
|
+
},
|
|
11
|
+
enumerable: false,
|
|
12
|
+
},
|
|
13
|
+
id: { value: group.id, enumerable: false },
|
|
14
|
+
type: { value: "group", enumerable: false },
|
|
15
|
+
}), {
|
|
16
|
+
profile: {
|
|
17
|
+
value: profileID,
|
|
18
|
+
enumerable: false,
|
|
19
|
+
},
|
|
20
|
+
root: {
|
|
21
|
+
value: rootID,
|
|
22
|
+
enumerable: false,
|
|
23
|
+
},
|
|
24
|
+
}, [group.id]);
|
|
25
|
+
}
|
|
26
|
+
get meta() {
|
|
27
|
+
return this.group.meta;
|
|
28
|
+
}
|
|
29
|
+
get core() {
|
|
30
|
+
return this.group.core;
|
|
31
|
+
}
|
|
32
|
+
addMember(accountID, role) {
|
|
33
|
+
return this.group.addMember(accountID, role);
|
|
34
|
+
}
|
|
35
|
+
removeMember(accountID) {
|
|
36
|
+
return this.group.removeMember(accountID);
|
|
37
|
+
}
|
|
38
|
+
createInvite(role) {
|
|
39
|
+
return this.group.createInvite(role);
|
|
40
|
+
}
|
|
41
|
+
createMap(init, meta, initPrivacy = "private") {
|
|
42
|
+
return this.group.createMap(init, meta, initPrivacy);
|
|
43
|
+
}
|
|
44
|
+
createList(init, meta, initPrivacy = "private") {
|
|
45
|
+
return this.group.createList(init, meta, initPrivacy);
|
|
46
|
+
}
|
|
47
|
+
createStream(meta) {
|
|
48
|
+
return this.group.createStream(meta);
|
|
49
|
+
}
|
|
50
|
+
createBinaryStream(meta = { type: "binary" }) {
|
|
51
|
+
return this.group.createBinaryStream(meta);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=queriedGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queriedGroup.js","sourceRoot":"","sources":["../../src/queriedCoValues/queriedGroup.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,YAAY;IAOrB,YAAY,KAAQ,EAAE,YAA0B;QAJhD,SAAI,GAAG,OAAgB,CAAC;QAKpB,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjC,YAAY,CAAC,0BAA0B,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE;YAClE,KAAK,EAAE;gBACH,GAAG;oBACC,OAAO,KAAK,CAAC;gBACjB,CAAC;gBACD,UAAU,EAAE,KAAK;aACpB;YACD,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE;YAC1C,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE;SAC9C,CAAC,EAAE;YACA,OAAO,EAAE;gBACL,KAAK,EAAE,SAAS;gBAChB,UAAU,EAAE,KAAK;aACpB;YACD,IAAI,EAAE;gBACF,KAAK,EAAE,MAAM;gBACb,UAAU,EAAE,KAAK;aACpB;SACJ,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,SAAS,CAAC,SAA+B,EAAE,IAAU;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,YAAY,CAAC,SAAoB;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC;IAED,YAAY,CAAC,IAAmC;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,SAAS,CACL,IAEC,EACD,IAAgB,EAChB,cAAsC,SAAS;QAE/C,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IACzD,CAAC;IAED,UAAU,CACN,IAAmB,EACnB,IAAgB,EAChB,cAAsC,SAAS;QAE/C,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAC1D,CAAC;IAED,YAAY,CAAqB,IAAgB;QAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,kBAAkB,CACd,OAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE;QAEpC,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;CACJ"}
|
package/dist/queries.d.ts
CHANGED
|
@@ -1,31 +1,62 @@
|
|
|
1
1
|
import { JsonValue } from "./jsonValue.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { CoMap } from "./coValues/coMap.js";
|
|
3
|
+
import { CoStream } from "./coValues/coStream.js";
|
|
4
|
+
import { CoList } from "./coValues/coList.js";
|
|
5
|
+
import { Account } from "./coValues/account.js";
|
|
6
|
+
import { CoID, CoValue } from "./coValue.js";
|
|
4
7
|
import { LocalNode } from "./localNode.js";
|
|
5
|
-
import {
|
|
8
|
+
import { QueriedCoMap } from "./queriedCoValues/queriedCoMap.js";
|
|
6
9
|
import { QueriedCoList } from "./queriedCoValues/queriedCoList.js";
|
|
7
10
|
import { QueriedCoStream } from "./queriedCoValues/queriedCoStream.js";
|
|
8
|
-
|
|
11
|
+
import { Group } from "./coValues/group.js";
|
|
12
|
+
import { QueriedAccount } from "./queriedCoValues/queriedAccount.js";
|
|
13
|
+
import { QueriedGroup } from "./queriedCoValues/queriedGroup.js";
|
|
14
|
+
export type Queried<T extends CoValue> = T extends CoMap ? T extends Account ? QueriedAccount<T> : T extends Group ? QueriedGroup<T> : QueriedCoMap<T> : T extends CoList ? QueriedCoList<T> : T extends CoStream ? T["meta"] extends {
|
|
9
15
|
type: "binary";
|
|
10
|
-
} ? never : QueriedCoStream<T> :
|
|
16
|
+
} ? never : QueriedCoStream<T> : QueriedAccount | QueriedGroup | QueriedCoMap<CoMap> | QueriedCoList<CoList> | QueriedCoStream<CoStream>;
|
|
11
17
|
export type ValueOrSubQueried<V extends JsonValue | CoValue | CoID<CoValue> | undefined> = V extends CoID<infer C> ? Queried<C> | undefined : V extends CoValue ? Queried<V> | undefined : V;
|
|
12
18
|
export interface CleanupCallbackAndUsable {
|
|
13
19
|
(): void;
|
|
14
20
|
[Symbol.dispose]: () => void;
|
|
15
21
|
}
|
|
22
|
+
export interface QueryExtension<T extends CoValue, O> {
|
|
23
|
+
id: string;
|
|
24
|
+
query(base: T, queryContext: QueryContext, onUpdate: (value: O) => void): () => void;
|
|
25
|
+
}
|
|
16
26
|
export declare class QueryContext {
|
|
17
27
|
values: {
|
|
18
28
|
[id: CoID<CoValue>]: {
|
|
29
|
+
lastUpdate: CoValue | undefined;
|
|
19
30
|
lastQueried: Queried<CoValue> | undefined;
|
|
31
|
+
render: () => void;
|
|
32
|
+
unsubscribe: () => void;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
extensions: {
|
|
36
|
+
[id: `${CoID<CoValue>}_${string}`]: {
|
|
37
|
+
lastOutput: unknown;
|
|
20
38
|
unsubscribe: () => void;
|
|
21
39
|
};
|
|
22
40
|
};
|
|
23
41
|
node: LocalNode;
|
|
24
42
|
onUpdate: () => void;
|
|
25
43
|
constructor(node: LocalNode, onUpdate: () => void);
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
44
|
+
query<T extends CoValue>(valueID: CoID<T>, alsoRender: CoID<CoValue>[]): Queried<T> | undefined;
|
|
45
|
+
queryIfCoID<T extends JsonValue | undefined>(value: T, alsoRender: CoID<CoValue>[]): T extends CoID<infer C> ? Queried<C> | undefined : T;
|
|
46
|
+
valueOrSubQueryPropertyDescriptor<T extends JsonValue | undefined>(value: T, alsoRender: CoID<CoValue>[]): T extends CoID<infer C> ? {
|
|
47
|
+
get(): Queried<C> | undefined;
|
|
48
|
+
} : {
|
|
49
|
+
value: T;
|
|
50
|
+
};
|
|
51
|
+
defineSubqueryPropertiesIn<O extends object, P extends {
|
|
52
|
+
[key: string]: {
|
|
53
|
+
value: JsonValue | undefined;
|
|
54
|
+
enumerable: boolean;
|
|
55
|
+
};
|
|
56
|
+
}>(obj: O, subqueryProps: P, alsoRender: CoID<CoValue>[]): O & {
|
|
57
|
+
[Key in keyof P]: ValueOrSubQueried<P[Key]["value"]>;
|
|
58
|
+
};
|
|
59
|
+
getOrCreateExtension<T extends CoValue, O>(valueID: CoID<T>, extension: QueryExtension<T, O>): O | undefined;
|
|
29
60
|
cleanup(): void;
|
|
30
61
|
}
|
|
31
|
-
export declare function query<T extends CoValue>(id: CoID<T>, node: LocalNode, callback: (queried: Queried<T> | undefined) => void
|
|
62
|
+
export declare function query<T extends CoValue>(id: CoID<T>, node: LocalNode, callback: (queried: Queried<T> | undefined) => void): CleanupCallbackAndUsable;
|