cojson 0.3.7 → 0.4.1

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 (79) hide show
  1. package/dist/coValue.d.ts +7 -12
  2. package/dist/coValue.js.map +1 -1
  3. package/dist/coValueCore.d.ts +9 -4
  4. package/dist/coValueCore.js +69 -33
  5. package/dist/coValueCore.js.map +1 -1
  6. package/dist/coValues/account.d.ts +62 -0
  7. package/dist/{account.js → coValues/account.js} +19 -11
  8. package/dist/coValues/account.js.map +1 -0
  9. package/dist/coValues/coList.d.ts +19 -19
  10. package/dist/coValues/coList.js.map +1 -1
  11. package/dist/coValues/coMap.d.ts +31 -23
  12. package/dist/coValues/coMap.js +4 -6
  13. package/dist/coValues/coMap.js.map +1 -1
  14. package/dist/coValues/coStream.d.ts +20 -20
  15. package/dist/coValues/coStream.js +2 -1
  16. package/dist/coValues/coStream.js.map +1 -1
  17. package/dist/{group.d.ts → coValues/group.d.ts} +27 -38
  18. package/dist/{group.js → coValues/group.js} +69 -73
  19. package/dist/coValues/group.js.map +1 -0
  20. package/dist/ids.d.ts +1 -1
  21. package/dist/index.d.ts +15 -11
  22. package/dist/index.js +10 -5
  23. package/dist/index.js.map +1 -1
  24. package/dist/localNode.d.ts +20 -7
  25. package/dist/localNode.js +74 -39
  26. package/dist/localNode.js.map +1 -1
  27. package/dist/media.d.ts +1 -1
  28. package/dist/permissions.d.ts +1 -1
  29. package/dist/permissions.js +43 -22
  30. package/dist/permissions.js.map +1 -1
  31. package/dist/queriedCoValues/queriedAccount.d.ts +13 -0
  32. package/dist/queriedCoValues/queriedAccount.js +24 -0
  33. package/dist/queriedCoValues/queriedAccount.js.map +1 -0
  34. package/dist/queriedCoValues/queriedCoList.d.ts +10 -10
  35. package/dist/queriedCoValues/queriedCoList.js +11 -15
  36. package/dist/queriedCoValues/queriedCoList.js.map +1 -1
  37. package/dist/queriedCoValues/queriedCoMap.d.ts +14 -21
  38. package/dist/queriedCoValues/queriedCoMap.js +27 -28
  39. package/dist/queriedCoValues/queriedCoMap.js.map +1 -1
  40. package/dist/queriedCoValues/queriedCoStream.d.ts +13 -17
  41. package/dist/queriedCoValues/queriedCoStream.js +57 -32
  42. package/dist/queriedCoValues/queriedCoStream.js.map +1 -1
  43. package/dist/queriedCoValues/queriedGroup.d.ts +29 -0
  44. package/dist/queriedCoValues/queriedGroup.js +54 -0
  45. package/dist/queriedCoValues/queriedGroup.js.map +1 -0
  46. package/dist/queries.d.ts +40 -9
  47. package/dist/queries.js +104 -39
  48. package/dist/queries.js.map +1 -1
  49. package/dist/tests/testUtils.d.ts +15 -7
  50. package/dist/tests/testUtils.js +16 -17
  51. package/dist/tests/testUtils.js.map +1 -1
  52. package/package.json +2 -2
  53. package/src/coValue.ts +12 -31
  54. package/src/coValueCore.ts +100 -40
  55. package/src/{account.ts → coValues/account.ts} +46 -27
  56. package/src/coValues/coList.ts +24 -28
  57. package/src/coValues/coMap.ts +42 -68
  58. package/src/coValues/coStream.ts +22 -28
  59. package/src/{group.ts → coValues/group.ts} +121 -141
  60. package/src/ids.ts +1 -1
  61. package/src/index.ts +25 -10
  62. package/src/localNode.ts +180 -77
  63. package/src/media.ts +1 -1
  64. package/src/permissions.ts +67 -36
  65. package/src/queriedCoValues/queriedAccount.ts +40 -0
  66. package/src/queriedCoValues/queriedCoList.ts +22 -30
  67. package/src/queriedCoValues/queriedCoMap.ts +60 -72
  68. package/src/queriedCoValues/queriedCoStream.ts +105 -79
  69. package/src/queriedCoValues/queriedGroup.ts +90 -0
  70. package/src/queries.ts +181 -60
  71. package/src/tests/account.test.ts +14 -9
  72. package/src/tests/coValueCore.test.ts +2 -2
  73. package/src/tests/permissions.test.ts +351 -242
  74. package/src/tests/queries.test.ts +162 -82
  75. package/src/tests/sync.test.ts +11 -11
  76. package/src/tests/testUtils.ts +16 -18
  77. package/dist/account.d.ts +0 -58
  78. package/dist/account.js.map +0 -1
  79. 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 { AccountID, Profile } from "../account.js";
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
- export type QueriedCoMap<M extends AnyCoMap> = {
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 AnyCoMap, K extends keyof M["_shape"]> = {
12
- by?: QueriedAccountAndProfile;
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] extends CoValue ? CoID<M["_shape"][K]> : Exclude<M["_shape"][K], CoValue>;
15
+ value: M["_shape"][K];
16
16
  };
17
- export declare class QueriedCoMapBase<M extends AnyCoMap> {
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 AnyCoMap>(coMap: M, queryContext: QueryContext): QueriedCoMap<M>;
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] extends CoValue ? M["_shape"][K] | CoID<M["_shape"][K]> : M["_shape"][K], privacy?: "private" | "trusting"): M;
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] extends CoValue ? M["_shape"][K] | CoID<M["_shape"][K]> : 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
- 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
- }
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: { value: coMap, enumerable: false },
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
- value: edit.value &&
43
- queryContext.resolveValue(edit.value),
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":"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"}
1
+ {"version":3,"file":"queriedCoMap.js","sourceRoot":"","sources":["../../src/queriedCoValues/queriedCoMap.ts"],"names":[],"mappings":"AAmBA,MAAM,OAAO,gBAAgB;IAKzB,gBAAgB;IAChB,MAAM,CAAC,cAAc,CACjB,KAAQ,EACR,YAA0B;QAE1B,MAAM,EAAE,GAAG,EAIV,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE;YAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAE7B,IAAI,KAAK,KAAK,SAAS;gBAAE,SAAS;YAElC,YAAY,CAAC,0BAA0B,CACnC,EAAE,EACF;gBACI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;aACrC,EACD,CAAC,KAAK,CAAC,EAAE,CAAC,CACb,CAAC;SACL;QAED,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,gBAAgB;IAChB,YAAY,KAAQ,EAAE,YAA0B;QAC5C,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE;YAC1B,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;YAC3C,KAAK,EAAE;gBACH,KAAK,EAAE,MAAM,CAAC,WAAW,CACrB,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;oBACzB,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC/C,YAAY,CAAC,0BAA0B,CACnC;wBACI,EAAE,EAAE,IAAI,CAAC,EAAE;wBACX,EAAE,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;qBACxB,EACD;wBACI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;wBACxC,KAAK,EAAE;4BACH,KAAK,EAAE,IAAI,CAAC,KAAK;4BACjB,UAAU,EAAE,IAAI;yBACnB;qBACJ,EACD,CAAC,KAAK,CAAC,EAAE,CAAC,CACb,CACJ,CAAC;oBACF,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBACzC,IAAI,CAAC,QAAQ;wBAAE,OAAO,EAAE,CAAC;oBACzB,8DAA8D;oBAC9D,MAAM,UAAU,GAAG;wBACf,EAAE,EAAE,QAAQ,CAAC,EAAE;wBACf,EAAE,EAAE,QAAQ,CAAC,EAAE;wBACf,EAAE,EAAE,QAAQ,CAAC,EAAE;wBACf,8DAA8D;wBAC9D,KAAK,EAAE,QAAQ,CAAC,KAAY;wBAC5B,GAAG,EAAE,KAAK;qBACb,CAAC;oBAEF,OAAO,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;gBAC/B,CAAC,CAAC,CACL;gBACD,UAAU,EAAE,KAAK;aACpB;YACD,EAAE,EAAE;gBACA,KAAK,EAAE,CAAI,SAA+B,EAAE,EAAE;oBAC1C,OAAO,YAAY,CAAC,oBAAoB,CACpC,KAAK,CAAC,EAAE,EACR,SAAS,CACZ,CAAC;gBACN,CAAC;gBACD,UAAU,EAAE,KAAK;aACpB;SACJ,CAAC,CAAC;IACP,CAAC;IAUD,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC5B,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAC3B,CAAC;IAaD,GAAG,CACC,GAAG,IAOiD;QAEpD,wDAAwD;QACxD,OAAQ,IAAI,CAAC,KAAK,CAAC,GAAgB,CAAC,GAAG,IAAI,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,CACF,GAA+B,EAC/B,OAAgC;QAEhC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,CACF,OAAgE;QAEhE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;CAGJ"}
@@ -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 { AnyCoStream, CoID, CoValue } from "../coValue.js";
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";
10
- export type QueriedCoStreamItems<Item extends JsonValue | CoValue> = {
9
+ import { QueriedAccount } from "./queriedAccount.js";
10
+ export type QueriedCoStreamEntry<Item extends JsonValue | CoValue> = {
11
11
  last?: ValueOrSubQueried<Item>;
12
- by?: QueriedAccountAndProfile;
12
+ by?: QueriedAccount;
13
13
  tx?: TransactionID;
14
14
  at?: Date;
15
15
  all: {
16
16
  value: ValueOrSubQueried<Item>;
17
- by?: QueriedAccountAndProfile;
17
+ by?: QueriedAccount;
18
18
  tx: TransactionID;
19
19
  at: Date;
20
20
  }[];
21
21
  };
22
- export declare class QueriedCoStream<S extends AnyCoStream> {
22
+ export declare class QueriedCoStream<S extends CoStream> {
23
23
  coStream: S;
24
24
  id: CoID<S>;
25
25
  type: "costream";
@@ -28,13 +28,9 @@ export declare class QueriedCoStream<S extends AnyCoStream> {
28
28
  get meta(): S["meta"];
29
29
  get group(): Group;
30
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;
31
+ me?: QueriedCoStreamEntry<S["_item"]>;
32
+ perAccount: [account: AccountID, items: QueriedCoStreamEntry<S["_item"]>][];
33
+ perSession: [session: SessionID, items: QueriedCoStreamEntry<S["_item"]>][];
34
+ push(item: S["_item"], privacy?: "private" | "trusting"): S;
39
35
  mutate(mutator: (mutable: MutableCoStream<S["_item"], S["meta"]>) => void): S;
40
36
  }
@@ -1,57 +1,82 @@
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.coStream = coStream;
6
+ Object.defineProperty(this, "coStream", {
7
+ get() {
8
+ return coStream;
9
+ },
10
+ });
7
11
  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,
12
+ this.perSession = coStream.sessions().map((sessionID) => {
13
+ const items = [...coStream.itemsIn(sessionID)].map((item) => queryContext.defineSubqueryPropertiesIn({
13
14
  tx: item.tx,
14
15
  at: new Date(item.at),
15
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
- value: queryContext.resolveValue(item.value),
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: lastItem?.value,
23
- by: lastItem?.by,
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,
27
41
  },
28
42
  ];
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,
43
+ });
44
+ this.perAccount = [...coStream.accounts()].map((accountID) => {
45
+ const items = [...coStream.itemsBy(accountID)].map((item) => queryContext.defineSubqueryPropertiesIn({
35
46
  tx: item.tx,
36
47
  at: new Date(item.at),
37
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
38
- value: queryContext.resolveValue(item.value),
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];
61
+ const entry = {
62
+ get last() {
63
+ return lastItem?.value;
64
+ },
65
+ get by() {
66
+ return lastItem?.by;
67
+ },
68
+ tx: lastItem?.tx,
69
+ at: lastItem?.at,
70
+ all: items,
71
+ };
72
+ if (accountID === queryContext.node.account.id) {
73
+ this.me = entry;
74
+ }
41
75
  return [
42
76
  accountID,
43
- {
44
- last: lastItem?.value,
45
- by: lastItem?.by,
46
- tx: lastItem?.tx,
47
- at: lastItem?.at,
48
- all: items,
49
- },
77
+ entry
50
78
  ];
51
- }));
52
- this.me = isAccountID(queryContext.node.account.id)
53
- ? this.perAccount[queryContext.node.account.id]
54
- : undefined;
79
+ });
55
80
  }
56
81
  get meta() {
57
82
  return this.coStream.meta;
@@ -1 +1 @@
1
- {"version":3,"file":"queriedCoStream.js","sourceRoot":"","sources":["../../src/queriedCoValues/queriedCoStream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queriedCoStream.js","sourceRoot":"","sources":["../../src/queriedCoValues/queriedCoStream.ts"],"names":[],"mappings":"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"}
@@ -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 { AccountID } from "./account.js";
3
- import { AnyCoList, AnyCoMap, AnyCoStream, CoID, CoValue } from "./coValue.js";
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 { QueriedAccountAndProfile, QueriedCoMap } from "./queriedCoValues/queriedCoMap.js";
8
+ import { QueriedCoMap } from "./queriedCoValues/queriedCoMap.js";
6
9
  import { QueriedCoList } from "./queriedCoValues/queriedCoList.js";
7
10
  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 {
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> : never;
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
- 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;
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, parentContext?: QueryContext): CleanupCallbackAndUsable;
62
+ export declare function query<T extends CoValue>(id: CoID<T>, node: LocalNode, callback: (queried: Queried<T> | undefined) => void): CleanupCallbackAndUsable;