cojson 0.2.3 → 0.3.0-alpha.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.
Files changed (78) hide show
  1. package/dist/account.d.ts +1 -1
  2. package/dist/coValue.d.ts +5 -13
  3. package/dist/coValue.js +14 -7
  4. package/dist/coValue.js.map +1 -1
  5. package/dist/coValueCore.d.ts +6 -6
  6. package/dist/coValueCore.js +11 -14
  7. package/dist/coValueCore.js.map +1 -1
  8. package/dist/coValues/coList.d.ts +99 -34
  9. package/dist/coValues/coList.js +162 -72
  10. package/dist/coValues/coList.js.map +1 -1
  11. package/dist/coValues/coMap.d.ts +96 -31
  12. package/dist/coValues/coMap.js +157 -114
  13. package/dist/coValues/coMap.js.map +1 -1
  14. package/dist/coValues/coStream.d.ts +67 -23
  15. package/dist/coValues/coStream.js +131 -59
  16. package/dist/coValues/coStream.js.map +1 -1
  17. package/dist/crypto.d.ts +8 -3
  18. package/dist/crypto.js +6 -6
  19. package/dist/crypto.js.map +1 -1
  20. package/dist/group.d.ts +57 -23
  21. package/dist/group.js +75 -33
  22. package/dist/group.js.map +1 -1
  23. package/dist/index.d.ts +8 -6
  24. package/dist/index.js +8 -8
  25. package/dist/index.js.map +1 -1
  26. package/dist/{node.d.ts → localNode.d.ts} +16 -8
  27. package/dist/{node.js → localNode.js} +48 -40
  28. package/dist/localNode.js.map +1 -0
  29. package/dist/permissions.js +6 -3
  30. package/dist/permissions.js.map +1 -1
  31. package/dist/queriedCoValues/queriedCoList.d.ts +66 -0
  32. package/dist/queriedCoValues/queriedCoList.js +120 -0
  33. package/dist/queriedCoValues/queriedCoList.js.map +1 -0
  34. package/dist/queriedCoValues/queriedCoMap.d.ts +47 -0
  35. package/dist/queriedCoValues/queriedCoMap.js +83 -0
  36. package/dist/queriedCoValues/queriedCoMap.js.map +1 -0
  37. package/dist/queriedCoValues/queriedCoStream.d.ts +40 -0
  38. package/dist/queriedCoValues/queriedCoStream.js +72 -0
  39. package/dist/queriedCoValues/queriedCoStream.js.map +1 -0
  40. package/dist/queries.d.ts +29 -112
  41. package/dist/queries.js +44 -227
  42. package/dist/queries.js.map +1 -1
  43. package/dist/sync.d.ts +1 -1
  44. package/dist/sync.js +1 -1
  45. package/dist/sync.js.map +1 -1
  46. package/dist/tests/testUtils.d.ts +1 -1
  47. package/dist/tests/testUtils.js +3 -3
  48. package/dist/tests/testUtils.js.map +1 -1
  49. package/package.json +2 -2
  50. package/src/account.ts +1 -1
  51. package/src/coValue.ts +25 -20
  52. package/src/coValueCore.ts +17 -21
  53. package/src/coValues/coList.ts +242 -128
  54. package/src/coValues/coMap.ts +293 -162
  55. package/src/coValues/coStream.ts +227 -94
  56. package/src/crypto.ts +37 -24
  57. package/src/group.ts +90 -63
  58. package/src/index.ts +35 -25
  59. package/src/{node.ts → localNode.ts} +64 -64
  60. package/src/permissions.ts +15 -18
  61. package/src/queriedCoValues/queriedCoList.ts +248 -0
  62. package/src/queriedCoValues/queriedCoMap.ts +180 -0
  63. package/src/queriedCoValues/queriedCoStream.ts +125 -0
  64. package/src/queries.ts +83 -460
  65. package/src/sync.ts +2 -2
  66. package/src/tests/account.test.ts +3 -6
  67. package/src/tests/coValue.test.ts +116 -110
  68. package/src/tests/coValueCore.test.ts +1 -1
  69. package/src/tests/crypto.test.ts +19 -21
  70. package/src/tests/permissions.test.ts +255 -242
  71. package/src/tests/queries.test.ts +57 -40
  72. package/src/tests/sync.test.ts +30 -30
  73. package/src/tests/testUtils.ts +3 -3
  74. package/dist/coValues/static.d.ts +0 -14
  75. package/dist/coValues/static.js +0 -20
  76. package/dist/coValues/static.js.map +0 -1
  77. package/dist/node.js.map +0 -1
  78. package/src/coValues/static.ts +0 -31
@@ -0,0 +1,66 @@
1
+ import { MutableCoList } from "../coValues/coList.js";
2
+ import { CoValueCore } from "../coValueCore.js";
3
+ import { Group } from "../group.js";
4
+ import { AnyCoList, CoID, CoValue } from "../coValue.js";
5
+ import { TransactionID } from "../ids.js";
6
+ import { QueriedAccountAndProfile } from "./queriedCoMap.js";
7
+ import { ValueOrSubQueried, QueryContext } from "../queries.js";
8
+ export declare class QueriedCoList<L extends AnyCoList> extends Array<ValueOrSubQueried<L["_item"]>> {
9
+ coList: L;
10
+ id: CoID<L>;
11
+ type: "colist";
12
+ /** @internal */
13
+ constructor(coList: L, queryContext: QueryContext);
14
+ get meta(): L["meta"];
15
+ get group(): Group;
16
+ get core(): CoValueCore;
17
+ append(item: L["_item"] extends CoValue ? L["_item"] | CoID<L["_item"]> : L["_item"], after?: number, privacy?: "private" | "trusting"): L;
18
+ prepend(item: L["_item"] extends CoValue ? L["_item"] | CoID<L["_item"]> : L["_item"], before?: number, privacy?: "private" | "trusting"): L;
19
+ delete(at: number, privacy: "private" | "trusting"): L;
20
+ mutate(mutator: (mutable: MutableCoList<L["_item"], L["meta"]>) => void): L;
21
+ edits: {
22
+ by?: QueriedAccountAndProfile;
23
+ tx: TransactionID;
24
+ at: Date;
25
+ value: L["_item"] extends CoValue ? CoID<L["_item"]> : Exclude<L["_item"], CoValue>;
26
+ }[];
27
+ deletions: {
28
+ by?: QueriedAccountAndProfile;
29
+ tx: TransactionID;
30
+ at: Date;
31
+ }[];
32
+ /** @internal */
33
+ static isArray(arg: any): arg is any[];
34
+ /** @internal */
35
+ static from<T>(arrayLike: ArrayLike<T>): T[];
36
+ /** @internal */
37
+ static from<T, U>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[];
38
+ /** @internal */
39
+ static from<T>(iterable: Iterable<T> | ArrayLike<T>): T[];
40
+ /** @internal */
41
+ static from<T, U>(iterable: Iterable<T> | ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[];
42
+ /** @internal */
43
+ static of<T>(..._items: T[]): T[];
44
+ /** @internal */
45
+ pop(): ValueOrSubQueried<L["_item"]> | undefined;
46
+ /** @internal */
47
+ push(..._items: ValueOrSubQueried<L["_item"]>[]): number;
48
+ /** @internal */
49
+ concat(..._items: ConcatArray<ValueOrSubQueried<L["_item"]>>[]): ValueOrSubQueried<L["_item"]>[];
50
+ /** @internal */
51
+ concat(..._items: (ValueOrSubQueried<L["_item"]> | ConcatArray<ValueOrSubQueried<L["_item"]>>)[]): ValueOrSubQueried<L["_item"]>[];
52
+ /** @internal */
53
+ reverse(): ValueOrSubQueried<L["_item"]>[];
54
+ /** @internal */
55
+ shift(): ValueOrSubQueried<L["_item"]> | undefined;
56
+ /** @internal */
57
+ sort(_compareFn?: ((a: ValueOrSubQueried<L["_item"]>, b: ValueOrSubQueried<L["_item"]>) => number) | undefined): this;
58
+ /** @internal */
59
+ splice(_start: number, _deleteCount?: number | undefined): ValueOrSubQueried<L["_item"]>[];
60
+ /** @internal */
61
+ unshift(..._items: ValueOrSubQueried<L["_item"]>[]): number;
62
+ /** @internal */
63
+ fill(_value: ValueOrSubQueried<L["_item"]>, _start?: number | undefined, _end?: number | undefined): this;
64
+ /** @internal */
65
+ copyWithin(_target: number, _start: number, _end?: number | undefined): this;
66
+ }
@@ -0,0 +1,120 @@
1
+ import { CoList } from "../coValues/coList.js";
2
+ import { isAccountID } from "../account.js";
3
+ export class QueriedCoList extends Array {
4
+ /** @internal */
5
+ constructor(coList, queryContext) {
6
+ if (!(coList instanceof CoList)) {
7
+ // this might be called from an intrinsic, like map, trying to create an empty array
8
+ // passing `0` as the only parameter
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ return new Array(coList);
11
+ }
12
+ super(...coList
13
+ .asArray()
14
+ .map((item) => queryContext.resolveValue(item)));
15
+ Object.defineProperties(this, {
16
+ coList: { value: coList },
17
+ id: { value: coList.id },
18
+ type: { value: "colist" },
19
+ edits: {
20
+ value: [...this.keys()].map((i) => {
21
+ const edit = coList.editAt(i);
22
+ return {
23
+ by: edit.by && isAccountID(edit.by)
24
+ ? queryContext.resolveAccount(edit.by)
25
+ : undefined,
26
+ tx: edit.tx,
27
+ at: new Date(edit.at),
28
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
+ value: queryContext.resolveValue(edit.value),
30
+ };
31
+ }),
32
+ },
33
+ deletions: {
34
+ value: coList.deletionEdits().map((deletion) => ({
35
+ by: deletion.by && isAccountID(deletion.by)
36
+ ? queryContext.resolveAccount(deletion.by)
37
+ : undefined,
38
+ tx: deletion.tx,
39
+ at: new Date(deletion.at),
40
+ })),
41
+ },
42
+ });
43
+ }
44
+ get meta() {
45
+ return this.coList.meta;
46
+ }
47
+ get group() {
48
+ return this.coList.group;
49
+ }
50
+ get core() {
51
+ return this.coList.core;
52
+ }
53
+ append(item, after, privacy) {
54
+ return this.coList.append(item, after, privacy);
55
+ }
56
+ prepend(item, before, privacy) {
57
+ return this.coList.prepend(item, before, privacy);
58
+ }
59
+ delete(at, privacy) {
60
+ return this.coList.delete(at, privacy);
61
+ }
62
+ mutate(mutator) {
63
+ return this.coList.mutate(mutator);
64
+ }
65
+ /** @internal */
66
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
67
+ static isArray(arg) {
68
+ return Array.isArray(arg);
69
+ }
70
+ /** @internal */
71
+ static from(_iterable, _mapfn, _thisArg) {
72
+ throw new Error("Array method 'from' not supported on QueriedCoList");
73
+ }
74
+ /** @internal */
75
+ static of(..._items) {
76
+ throw new Error("Array method 'of' not supported on QueriedCoList");
77
+ }
78
+ /** @internal */
79
+ pop() {
80
+ throw new Error("Array method 'pop' not supported on QueriedCoList");
81
+ }
82
+ /** @internal */
83
+ push(..._items) {
84
+ throw new Error("Array method 'push' not supported on QueriedCoList");
85
+ }
86
+ /** @internal */
87
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
88
+ concat(..._items) {
89
+ throw new Error("Array method 'concat' not supported on QueriedCoList");
90
+ }
91
+ /** @internal */
92
+ reverse() {
93
+ throw new Error("Array method 'reverse' not supported on QueriedCoList");
94
+ }
95
+ /** @internal */
96
+ shift() {
97
+ throw new Error("Array method 'shift' not supported on QueriedCoList");
98
+ }
99
+ /** @internal */
100
+ sort(_compareFn) {
101
+ throw new Error("Array method 'sort' not supported on QueriedCoList");
102
+ }
103
+ /** @internal */
104
+ splice(_start, _deleteCount) {
105
+ throw new Error("Array method 'splice' not supported on QueriedCoList");
106
+ }
107
+ /** @internal */
108
+ unshift(..._items) {
109
+ throw new Error("Array method 'unshift' not supported on QueriedCoList");
110
+ }
111
+ /** @internal */
112
+ fill(_value, _start, _end) {
113
+ throw new Error("Array method 'fill' not supported on QueriedCoList");
114
+ }
115
+ /** @internal */
116
+ copyWithin(_target, _start, _end) {
117
+ throw new Error("Array method 'copyWithin' not supported on QueriedCoList");
118
+ }
119
+ }
120
+ //# sourceMappingURL=queriedCoList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queriedCoList.js","sourceRoot":"","sources":["../../src/queriedCoValues/queriedCoList.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import { MutableCoMap } from "../coValues/coMap.js";
2
+ import { CoValueCore } from "../coValueCore.js";
3
+ import { Group } from "../group.js";
4
+ import { AccountID, Profile } from "../account.js";
5
+ import { AnyCoMap, CoID, CoValue } from "../coValue.js";
6
+ import { TransactionID } from "../ids.js";
7
+ import { ValueOrSubQueried, QueryContext } from "../queries.js";
8
+ export type QueriedCoMap<M extends AnyCoMap> = {
9
+ [K in keyof M["_shape"] & string]: ValueOrSubQueried<M["_shape"][K]>;
10
+ } & QueriedCoMapBase<M>;
11
+ export type QueriedCoMapEdit<M extends AnyCoMap, K extends keyof M["_shape"]> = {
12
+ by?: QueriedAccountAndProfile;
13
+ tx: TransactionID;
14
+ at: Date;
15
+ value: M["_shape"][K] extends CoValue ? CoID<M["_shape"][K]> : Exclude<M["_shape"][K], CoValue>;
16
+ };
17
+ export declare class QueriedCoMapBase<M extends AnyCoMap> {
18
+ coMap: M;
19
+ id: CoID<M>;
20
+ type: "comap";
21
+ /** @internal */
22
+ static newWithKVPairs<M extends AnyCoMap>(coMap: M, queryContext: QueryContext): QueriedCoMap<M>;
23
+ /** @internal */
24
+ constructor(coMap: M, queryContext: QueryContext);
25
+ edits: {
26
+ [K in keyof M["_shape"] & string]: (QueriedCoMapEdit<M, K> & {
27
+ all: QueriedCoMapEdit<M, K>[];
28
+ }) | undefined;
29
+ };
30
+ get meta(): M["meta"];
31
+ get group(): Group;
32
+ get core(): CoValueCore;
33
+ set<K extends keyof M["_shape"] & string>(key: K, value: M["_shape"][K] extends CoValue ? M["_shape"][K] | CoID<M["_shape"][K]> : M["_shape"][K], privacy?: "private" | "trusting"): M;
34
+ set(kv: {
35
+ [K in keyof M["_shape"] & string]?: M["_shape"][K] extends CoValue ? M["_shape"][K] | CoID<M["_shape"][K]> : M["_shape"][K];
36
+ }, privacy?: "private" | "trusting"): M;
37
+ delete(key: keyof M["_shape"] & string, privacy?: "private" | "trusting"): M;
38
+ mutate(mutator: (mutable: MutableCoMap<M["_shape"], M["meta"]>) => void): M;
39
+ }
40
+ export type QueriedAccountAndProfile = {
41
+ profile?: {
42
+ name?: string;
43
+ id: CoID<Profile>;
44
+ };
45
+ isMe?: boolean;
46
+ id: AccountID;
47
+ };
@@ -0,0 +1,83 @@
1
+ import { isAccountID } from "../account.js";
2
+ export class QueriedCoMapBase {
3
+ /** @internal */
4
+ static newWithKVPairs(coMap, queryContext) {
5
+ const kv = {};
6
+ if (coMap.meta?.type === "account") {
7
+ const profileID = coMap.get("profile");
8
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
9
+ kv.profile =
10
+ profileID && queryContext.resolveValue(profileID);
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ kv.isMe =
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
+ }
25
+ }
26
+ return Object.assign(new QueriedCoMapBase(coMap, queryContext), kv);
27
+ }
28
+ /** @internal */
29
+ constructor(coMap, queryContext) {
30
+ Object.defineProperties(this, {
31
+ coMap: { value: coMap, enumerable: false },
32
+ id: { value: coMap.id, enumerable: false },
33
+ type: { value: "comap", enumerable: false },
34
+ edits: {
35
+ 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,
40
+ tx: edit.tx,
41
+ at: new Date(edit.at),
42
+ value: edit.value &&
43
+ queryContext.resolveValue(edit.value),
44
+ }));
45
+ const lastEdit = edits[edits.length - 1];
46
+ if (!lastEdit)
47
+ return [];
48
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
49
+ const editsAtKey = {
50
+ by: lastEdit.by,
51
+ tx: lastEdit.tx,
52
+ at: lastEdit.at,
53
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
54
+ value: lastEdit.value,
55
+ all: edits,
56
+ };
57
+ return [[key, editsAtKey]];
58
+ })),
59
+ enumerable: false,
60
+ },
61
+ });
62
+ }
63
+ get meta() {
64
+ return this.coMap.meta;
65
+ }
66
+ get group() {
67
+ return this.coMap.group;
68
+ }
69
+ get core() {
70
+ return this.coMap.core;
71
+ }
72
+ set(...args) {
73
+ // eslint-disable-next-line @typescript-eslint/ban-types
74
+ return this.coMap.set(...args);
75
+ }
76
+ delete(key, privacy) {
77
+ return this.coMap.delete(key, privacy);
78
+ }
79
+ mutate(mutator) {
80
+ return this.coMap.mutate(mutator);
81
+ }
82
+ }
83
+ //# sourceMappingURL=queriedCoMap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queriedCoMap.js","sourceRoot":"","sources":["../../src/queriedCoValues/queriedCoMap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { JsonValue } from "../jsonValue.js";
2
+ import { MutableCoStream } from "../coValues/coStream.js";
3
+ import { CoValueCore } from "../coValueCore.js";
4
+ import { Group } from "../group.js";
5
+ import { AccountID } from "../account.js";
6
+ import { AnyCoStream, CoID, CoValue } from "../coValue.js";
7
+ import { SessionID, TransactionID } from "../ids.js";
8
+ import { QueriedAccountAndProfile } from "./queriedCoMap.js";
9
+ import { ValueOrSubQueried, QueryContext } from "../queries.js";
10
+ export type QueriedCoStreamItems<Item extends JsonValue | CoValue> = {
11
+ last?: ValueOrSubQueried<Item>;
12
+ by?: QueriedAccountAndProfile;
13
+ tx?: TransactionID;
14
+ at?: Date;
15
+ all: {
16
+ value: ValueOrSubQueried<Item>;
17
+ by?: QueriedAccountAndProfile;
18
+ tx: TransactionID;
19
+ at: Date;
20
+ }[];
21
+ };
22
+ export declare class QueriedCoStream<S extends AnyCoStream> {
23
+ coStream: S;
24
+ id: CoID<S>;
25
+ type: "costream";
26
+ /** @internal */
27
+ constructor(coStream: S, queryContext: QueryContext);
28
+ get meta(): S["meta"];
29
+ get group(): Group;
30
+ get core(): CoValueCore;
31
+ me?: QueriedCoStreamItems<S["_item"]>;
32
+ perAccount: {
33
+ [account: AccountID]: QueriedCoStreamItems<S["_item"]>;
34
+ };
35
+ perSession: {
36
+ [session: SessionID]: QueriedCoStreamItems<S["_item"]>;
37
+ };
38
+ push(item: S["_item"] extends CoValue ? S["_item"] | CoID<S["_item"]> : S["_item"], privacy?: "private" | "trusting"): S;
39
+ mutate(mutator: (mutable: MutableCoStream<S["_item"], S["meta"]>) => void): S;
40
+ }
@@ -0,0 +1,72 @@
1
+ import { isAccountID } from "../account.js";
2
+ export class QueriedCoStream {
3
+ /** @internal */
4
+ constructor(coStream, queryContext) {
5
+ this.type = "costream";
6
+ this.coStream = coStream;
7
+ this.id = coStream.id;
8
+ 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
+ tx: item.tx,
14
+ at: new Date(item.at),
15
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
+ value: queryContext.resolveValue(item.value),
17
+ }));
18
+ const lastItem = items[items.length - 1];
19
+ return [
20
+ sessionID,
21
+ {
22
+ last: lastItem?.value,
23
+ by: lastItem?.by,
24
+ tx: lastItem?.tx,
25
+ at: lastItem?.at,
26
+ all: items,
27
+ },
28
+ ];
29
+ }));
30
+ 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,
35
+ tx: item.tx,
36
+ at: new Date(item.at),
37
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
38
+ value: queryContext.resolveValue(item.value),
39
+ }));
40
+ const lastItem = items[items.length - 1];
41
+ return [
42
+ accountID,
43
+ {
44
+ last: lastItem?.value,
45
+ by: lastItem?.by,
46
+ tx: lastItem?.tx,
47
+ at: lastItem?.at,
48
+ all: items,
49
+ },
50
+ ];
51
+ }));
52
+ this.me = isAccountID(queryContext.node.account.id)
53
+ ? this.perAccount[queryContext.node.account.id]
54
+ : undefined;
55
+ }
56
+ get meta() {
57
+ return this.coStream.meta;
58
+ }
59
+ get group() {
60
+ return this.coStream.group;
61
+ }
62
+ get core() {
63
+ return this.coStream.core;
64
+ }
65
+ push(item, privacy) {
66
+ return this.coStream.push(item, privacy);
67
+ }
68
+ mutate(mutator) {
69
+ return this.coStream.mutate(mutator);
70
+ }
71
+ }
72
+ //# sourceMappingURL=queriedCoStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queriedCoStream.js","sourceRoot":"","sources":["../../src/queriedCoValues/queriedCoStream.ts"],"names":[],"mappings":"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"}
package/dist/queries.d.ts CHANGED
@@ -1,114 +1,31 @@
1
1
  import { JsonValue } from "./jsonValue.js";
2
- import { CoMap, WriteableCoMap } from "./coValues/coMap.js";
3
- import { BinaryCoStream, BinaryStreamInfo, CoStream, WriteableBinaryCoStream, WriteableCoStream } from "./coValues/coStream.js";
4
- import { Static } from "./coValues/static.js";
5
- import { CoList, WriteableCoList } from "./coValues/coList.js";
6
- import { CoValueCore } from "./coValueCore.js";
7
- import { Group } from "./group.js";
8
- import { AccountID, Profile } from "./account.js";
9
- import { AnyBinaryCoStream, AnyCoList, AnyCoMap, AnyCoStream, AnyCoValue, AnyStatic, CoID, CoValue } from "./coValue.js";
10
- import { SessionID } from "./ids.js";
11
- import { LocalNode } from "./node.js";
12
- export declare const AllReservedQueryProps: readonly ["id", "type", "meta", "core", "group", "shadowed", "edit", "edits"];
13
- export type ReservedQueryProps = (typeof AllReservedQueryProps)[number];
14
- export type QueriedCoMap<T extends AnyCoMap> = T extends CoMap<infer M, infer Meta> ? Readonly<{
15
- [K in keyof M as Exclude<K, ReservedQueryProps>]: ValueOrSubQueried<M[K]>;
16
- }> & (keyof M & ReservedQueryProps extends never ? {} : Readonly<{
17
- shadowed: Readonly<{
18
- [K in keyof M as Extract<K, ReservedQueryProps>]: ValueOrSubQueried<M[K]>;
19
- }>;
20
- }>) & Readonly<{
21
- id: CoID<T>;
22
- type: "comap";
23
- edits: Readonly<{
24
- [K in keyof M & string]: Readonly<{
25
- by?: QueriedAccountAndProfile;
26
- at: Date;
27
- }>;
28
- }>;
29
- meta: Meta;
30
- group: Group;
31
- core: CoValueCore;
32
- edit: (changer: (editable: WriteableCoMap<M, Meta>) => void) => T;
33
- }> : never;
34
- export type QueriedAccountAndProfile = Readonly<{
35
- id: AccountID;
36
- profile?: Readonly<{
37
- name?: string;
38
- id: CoID<Profile>;
39
- }>;
40
- isMe?: boolean;
41
- }>;
42
- export type QueriedCoList<T extends AnyCoList> = T extends CoList<infer I, infer Meta> ? readonly ValueOrSubQueried<I>[] & Readonly<{
43
- id: CoID<T>;
44
- type: "colist";
45
- meta: Meta;
46
- group: Group;
47
- core: CoValueCore;
48
- edit: (changer: (editable: WriteableCoList<I, Meta>) => void) => T;
49
- edits: readonly Readonly<{
50
- by?: QueriedAccountAndProfile;
51
- at: Date;
52
- }>[] & {};
53
- }> : never;
54
- export type QueriedCoStreamItems<I extends JsonValue | CoValue> = Readonly<{
55
- last: ValueOrSubQueried<I> | undefined;
56
- by?: QueriedAccountAndProfile;
57
- at?: Date;
58
- all: {
59
- value: ValueOrSubQueried<I>;
60
- at: Date;
61
- }[];
62
- }>;
63
- export type QueriedCoStream<T extends AnyCoStream> = T extends CoStream<infer I, infer Meta> ? Readonly<{
64
- id: CoID<T>;
65
- type: "costream";
66
- me?: QueriedCoStreamItems<I>;
67
- perAccount: Readonly<{
68
- [account: AccountID]: QueriedCoStreamItems<I>;
69
- }>;
70
- perSession: Readonly<{
71
- [session: SessionID]: QueriedCoStreamItems<I>;
72
- }>;
73
- meta: Meta;
74
- group: Group;
75
- core: CoValueCore;
76
- edit: (changer: (editable: WriteableCoStream<I, Meta>) => void) => T;
77
- }> : never;
78
- export type QueriedBinaryCoStreamItems = Readonly<{
79
- last: Uint8Array | undefined;
80
- by: QueriedAccountAndProfile;
81
- at: Date;
82
- all: {
83
- value: Uint8Array;
84
- at: Date;
85
- }[];
86
- }>;
87
- export type QueriedBinaryCoStream<T extends AnyBinaryCoStream> = T extends BinaryCoStream<infer Meta> ? Readonly<{
88
- id: CoID<T>;
89
- type: "costream";
90
- me?: QueriedBinaryCoStreamItems;
91
- perAccount: Readonly<{
92
- [account: AccountID]: QueriedBinaryCoStreamItems;
93
- }>;
94
- perSession: Readonly<{
95
- [session: SessionID]: QueriedBinaryCoStreamItems;
96
- }>;
97
- meta: Meta;
98
- group: Group;
99
- core: CoValueCore;
100
- edit: (changer: (editable: WriteableBinaryCoStream<Meta>) => void) => T;
101
- }> & Readonly<BinaryStreamInfo> : never;
102
- export type QueriedStatic<T extends AnyStatic> = T extends Static<infer Meta> ? Readonly<{
103
- id: CoID<T>;
104
- type: "colist";
105
- meta: Meta;
106
- group: Group;
107
- core: CoValueCore;
108
- }> : never;
109
- export type Queried<T extends CoValue> = T extends AnyCoMap ? QueriedCoMap<T> : T extends AnyCoList ? QueriedCoList<T> : T extends AnyCoStream ? QueriedCoStream<T> : T extends AnyStatic ? QueriedStatic<T> : never;
2
+ import { AccountID } from "./account.js";
3
+ import { AnyCoList, AnyCoMap, AnyCoStream, CoID, CoValue } from "./coValue.js";
4
+ import { LocalNode } from "./localNode.js";
5
+ import { QueriedAccountAndProfile, QueriedCoMap } from "./queriedCoValues/queriedCoMap.js";
6
+ import { QueriedCoList } from "./queriedCoValues/queriedCoList.js";
7
+ import { QueriedCoStream } from "./queriedCoValues/queriedCoStream.js";
8
+ export type Queried<T extends CoValue> = T extends AnyCoMap ? QueriedCoMap<T> : T extends AnyCoList ? QueriedCoList<T> : T extends AnyCoStream ? T["meta"] extends {
9
+ type: "binary";
10
+ } ? never : QueriedCoStream<T> : never;
110
11
  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;
111
- export type QueryInclude<T extends CoValue> = T extends CoMap<infer M, infer _Meta> ? {
112
- [K in keyof M as M[K] extends AnyCoValue | CoID<AnyCoValue> ? K : never]?: M[K] extends AnyCoValue ? true | QueryInclude<M[K]> : M[K] extends CoID<infer S> ? true | QueryInclude<S> : never;
113
- } : T extends CoList<infer I, infer _> ? I extends AnyCoValue ? [true] | [QueryInclude<I>] : I extends CoID<infer S> ? [true] | [QueryInclude<S>] : never : never;
114
- export declare function query<T extends CoValue>(id: CoID<T>, node: LocalNode, callback: (queried: Queried<T> | undefined) => void): () => void;
12
+ export interface CleanupCallbackAndUsable {
13
+ (): void;
14
+ [Symbol.dispose]: () => void;
15
+ }
16
+ export declare class QueryContext {
17
+ values: {
18
+ [id: CoID<CoValue>]: {
19
+ lastQueried: Queried<CoValue> | undefined;
20
+ unsubscribe: () => void;
21
+ };
22
+ };
23
+ node: LocalNode;
24
+ onUpdate: () => void;
25
+ constructor(node: LocalNode, onUpdate: () => void);
26
+ getChildLastQueriedOrSubscribe<T extends CoValue>(valueID: CoID<T>): Queried<T> | undefined;
27
+ resolveAccount(accountID: AccountID): QueriedAccountAndProfile;
28
+ resolveValue<T extends JsonValue>(value: T): T extends CoID<infer C> ? Queried<C> | undefined : T;
29
+ cleanup(): void;
30
+ }
31
+ export declare function query<T extends CoValue>(id: CoID<T>, node: LocalNode, callback: (queried: Queried<T> | undefined) => void, parentContext?: QueryContext): CleanupCallbackAndUsable;