@may-db/core 0.1.1 → 0.1.2

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 (81) hide show
  1. package/README.md +117 -5
  2. package/dist/IndexRuntime.d.ts +60 -0
  3. package/dist/IndexRuntime.d.ts.map +1 -0
  4. package/dist/IndexRuntime.js +340 -0
  5. package/dist/IndexRuntime.js.map +1 -0
  6. package/dist/MayDb.d.ts +26 -7
  7. package/dist/MayDb.d.ts.map +1 -1
  8. package/dist/MayDb.js +178 -52
  9. package/dist/MayDb.js.map +1 -1
  10. package/dist/RuntimeIndexHandle.d.ts +29 -0
  11. package/dist/RuntimeIndexHandle.d.ts.map +1 -0
  12. package/dist/RuntimeIndexHandle.js +48 -0
  13. package/dist/RuntimeIndexHandle.js.map +1 -0
  14. package/dist/errors.d.ts +12 -0
  15. package/dist/errors.d.ts.map +1 -0
  16. package/dist/errors.js +15 -0
  17. package/dist/errors.js.map +1 -0
  18. package/dist/index.d.ts +1 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +1 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/indexing/collaborativeSync.d.ts +25 -0
  23. package/dist/indexing/collaborativeSync.d.ts.map +1 -0
  24. package/dist/indexing/collaborativeSync.js +56 -0
  25. package/dist/indexing/collaborativeSync.js.map +1 -0
  26. package/dist/indexing/descriptor.d.ts +6 -0
  27. package/dist/indexing/descriptor.d.ts.map +1 -0
  28. package/dist/indexing/descriptor.js +2 -0
  29. package/dist/indexing/descriptor.js.map +1 -0
  30. package/dist/indexing/errors.d.ts +9 -0
  31. package/dist/indexing/errors.d.ts.map +1 -0
  32. package/dist/indexing/errors.js +11 -0
  33. package/dist/indexing/errors.js.map +1 -0
  34. package/dist/indexing/handle.d.ts +29 -0
  35. package/dist/indexing/handle.d.ts.map +1 -0
  36. package/dist/indexing/handle.js +48 -0
  37. package/dist/indexing/handle.js.map +1 -0
  38. package/dist/indexing/indexRoomStore.d.ts +18 -0
  39. package/dist/indexing/indexRoomStore.d.ts.map +1 -0
  40. package/dist/indexing/indexRoomStore.js +71 -0
  41. package/dist/indexing/indexRoomStore.js.map +1 -0
  42. package/dist/indexing/roomRegistry.d.ts +26 -0
  43. package/dist/indexing/roomRegistry.d.ts.map +1 -0
  44. package/dist/indexing/roomRegistry.js +125 -0
  45. package/dist/indexing/roomRegistry.js.map +1 -0
  46. package/dist/indexing/rows.d.ts +8 -0
  47. package/dist/indexing/rows.d.ts.map +1 -0
  48. package/dist/indexing/rows.js +86 -0
  49. package/dist/indexing/rows.js.map +1 -0
  50. package/dist/indexing/runtime.d.ts +61 -0
  51. package/dist/indexing/runtime.d.ts.map +1 -0
  52. package/dist/indexing/runtime.js +378 -0
  53. package/dist/indexing/runtime.js.map +1 -0
  54. package/dist/indexing.d.ts +93 -0
  55. package/dist/indexing.d.ts.map +1 -0
  56. package/dist/indexing.js +394 -0
  57. package/dist/indexing.js.map +1 -0
  58. package/dist/indexingErrors.d.ts +9 -0
  59. package/dist/indexingErrors.d.ts.map +1 -0
  60. package/dist/indexingErrors.js +11 -0
  61. package/dist/indexingErrors.js.map +1 -0
  62. package/dist/indexingRoomStore.d.ts +26 -0
  63. package/dist/indexingRoomStore.d.ts.map +1 -0
  64. package/dist/indexingRoomStore.js +125 -0
  65. package/dist/indexingRoomStore.js.map +1 -0
  66. package/dist/indexingRows.d.ts +8 -0
  67. package/dist/indexingRows.d.ts.map +1 -0
  68. package/dist/indexingRows.js +114 -0
  69. package/dist/indexingRows.js.map +1 -0
  70. package/dist/indexingTypes.d.ts +9 -0
  71. package/dist/indexingTypes.d.ts.map +1 -0
  72. package/dist/indexingTypes.js +2 -0
  73. package/dist/indexingTypes.js.map +1 -0
  74. package/dist/roomMetadata.d.ts +3 -0
  75. package/dist/roomMetadata.d.ts.map +1 -0
  76. package/dist/roomMetadata.js +3 -0
  77. package/dist/roomMetadata.js.map +1 -0
  78. package/dist/types.d.ts +56 -7
  79. package/dist/types.d.ts.map +1 -1
  80. package/package.json +6 -5
  81. package/patches/matrix-crdt+0.2.1-alpha.1.patch +108 -0
@@ -0,0 +1,11 @@
1
+ export class IndexCapacityError extends Error {
2
+ indexName;
3
+ indexRoomId;
4
+ constructor(options) {
5
+ super(`Index "${options.indexName}" has reached capacity`);
6
+ this.name = "IndexCapacityError";
7
+ this.indexName = options.indexName;
8
+ this.indexRoomId = options.indexRoomId;
9
+ }
10
+ }
11
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/indexing/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,SAAS,CAAS;IAClB,WAAW,CAAgB;IAEpC,YAAY,OAA0D;QACpE,KAAK,CAAC,UAAU,OAAO,CAAC,SAAS,wBAAwB,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACzC,CAAC;CACF"}
@@ -0,0 +1,29 @@
1
+ import * as Y from "yjs";
2
+ import type { IndexRuntime } from "./runtime";
3
+ import type { Room } from "../Room";
4
+ import type { MayDbIndexDefinition, MayDbIndexHandle, MayDbIndexQueryPageOptions, MayDbIndexQueryPageResult } from "../types";
5
+ export declare class RuntimeIndexHandle implements MayDbIndexHandle {
6
+ readonly indexName: string;
7
+ readonly indexRoomId: string | null;
8
+ readonly definition: MayDbIndexDefinition;
9
+ activeCount: number;
10
+ paused: boolean;
11
+ indexRoom: Room | null;
12
+ rowsMap: Y.Map<string> | null;
13
+ roomObserverCleanup: (() => void) | null;
14
+ readyPromise: Promise<void> | null;
15
+ private readonly runtime;
16
+ private readonly listeners;
17
+ constructor(options: {
18
+ runtime: IndexRuntime;
19
+ indexName: string;
20
+ indexRoomId: string | null;
21
+ definition: MayDbIndexDefinition;
22
+ });
23
+ activate(): () => void;
24
+ ensureReady(): Promise<void>;
25
+ queryPage(options: MayDbIndexQueryPageOptions): Promise<MayDbIndexQueryPageResult>;
26
+ subscribe(listener: () => void): () => void;
27
+ notifyChange(): void;
28
+ }
29
+ //# sourceMappingURL=handle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle.d.ts","sourceRoot":"","sources":["../../src/indexing/handle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EAChB,0BAA0B,EAC1B,yBAAyB,EAC1B,MAAM,UAAU,CAAC;AAElB,qBAAa,kBAAmB,YAAW,gBAAgB;IACzD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC1C,WAAW,SAAK;IAChB,MAAM,UAAS;IAEf,SAAS,EAAE,IAAI,GAAG,IAAI,CAAQ;IAC9B,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAQ;IACrC,mBAAmB,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAQ;IAChD,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAQ;IAE1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;gBAEvC,OAAO,EAAE;QACnB,OAAO,EAAE,YAAY,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,UAAU,EAAE,oBAAoB,CAAC;KAClC;IAOD,QAAQ,IAAI,MAAM,IAAI;IAahB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,SAAS,CACb,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,yBAAyB,CAAC;IAIrC,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAK3C,YAAY,IAAI,IAAI;CAKrB"}
@@ -0,0 +1,48 @@
1
+ import * as Y from "yjs";
2
+ export class RuntimeIndexHandle {
3
+ indexName;
4
+ indexRoomId;
5
+ definition;
6
+ activeCount = 0;
7
+ paused = false;
8
+ indexRoom = null;
9
+ rowsMap = null;
10
+ roomObserverCleanup = null;
11
+ readyPromise = null;
12
+ runtime;
13
+ listeners = new Set();
14
+ constructor(options) {
15
+ this.runtime = options.runtime;
16
+ this.indexName = options.indexName;
17
+ this.indexRoomId = options.indexRoomId;
18
+ this.definition = options.definition;
19
+ }
20
+ activate() {
21
+ this.activeCount += 1;
22
+ this.runtime.onHandleActivated(this);
23
+ let disposed = false;
24
+ return () => {
25
+ if (disposed)
26
+ return;
27
+ disposed = true;
28
+ this.activeCount = Math.max(0, this.activeCount - 1);
29
+ this.runtime.onHandleDeactivated(this);
30
+ };
31
+ }
32
+ async ensureReady() {
33
+ await this.runtime.ensureHandleReady(this);
34
+ }
35
+ async queryPage(options) {
36
+ return this.runtime.queryHandlePage(this, options);
37
+ }
38
+ subscribe(listener) {
39
+ this.listeners.add(listener);
40
+ return () => this.listeners.delete(listener);
41
+ }
42
+ notifyChange() {
43
+ for (const listener of this.listeners) {
44
+ listener();
45
+ }
46
+ }
47
+ }
48
+ //# sourceMappingURL=handle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle.js","sourceRoot":"","sources":["../../src/indexing/handle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAUzB,MAAM,OAAO,kBAAkB;IACpB,SAAS,CAAS;IAClB,WAAW,CAAgB;IAC3B,UAAU,CAAuB;IAC1C,WAAW,GAAG,CAAC,CAAC;IAChB,MAAM,GAAG,KAAK,CAAC;IAEf,SAAS,GAAgB,IAAI,CAAC;IAC9B,OAAO,GAAyB,IAAI,CAAC;IACrC,mBAAmB,GAAwB,IAAI,CAAC;IAChD,YAAY,GAAyB,IAAI,CAAC;IAEzB,OAAO,CAAe;IACtB,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;IAEnD,YAAY,OAKX;QACC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACvC,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAErC,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,OAAO,GAAG,EAAE;YACV,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;YACrD,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,SAAS,CACb,OAAmC;QAEnC,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,SAAS,CAAC,QAAoB;QAC5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED,YAAY;QACV,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,QAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ import type { MatrixClient, MayDbIndexScope } from "../types";
2
+ export declare class IndexRoomStore {
3
+ private readonly namespace;
4
+ private readonly matrixClient;
5
+ constructor(options: {
6
+ namespace: string;
7
+ matrixClient: MatrixClient;
8
+ });
9
+ resolveOrCreatePrivateIndexRoomId(indexName: string): Promise<string>;
10
+ ensureJoined(roomId: string): Promise<void>;
11
+ private getAccountDataMapping;
12
+ createIndexMatrixRoom(options: {
13
+ indexName: string;
14
+ scope: MayDbIndexScope;
15
+ }): Promise<string>;
16
+ private privateIndexAccountDataType;
17
+ }
18
+ //# sourceMappingURL=indexRoomStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexRoomStore.d.ts","sourceRoot":"","sources":["../../src/indexing/indexRoomStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE9D,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;gBAEhC,OAAO,EAAE;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,YAAY,CAAC;KAC5B;IAKK,iCAAiC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAoBrE,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAKnC,qBAAqB;IAc7B,qBAAqB,CAAC,OAAO,EAAE;QACnC,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,eAAe,CAAC;KACxB,GAAG,OAAO,CAAC,MAAM,CAAC;IA4BnB,OAAO,CAAC,2BAA2B;CAGpC"}
@@ -0,0 +1,71 @@
1
+ import * as sdk from "matrix-js-sdk";
2
+ export class IndexRoomStore {
3
+ namespace;
4
+ matrixClient;
5
+ constructor(options) {
6
+ this.namespace = options.namespace;
7
+ this.matrixClient = options.matrixClient;
8
+ }
9
+ async resolveOrCreatePrivateIndexRoomId(indexName) {
10
+ const eventType = this.privateIndexAccountDataType();
11
+ let mapping = await this.getAccountDataMapping(eventType);
12
+ const existing = mapping[indexName];
13
+ if (typeof existing === "string") {
14
+ return existing;
15
+ }
16
+ const roomId = await this.createIndexMatrixRoom({
17
+ indexName,
18
+ scope: "private",
19
+ });
20
+ mapping = { ...mapping, [indexName]: roomId };
21
+ await this.matrixClient.setAccountData(eventType, mapping);
22
+ return roomId;
23
+ }
24
+ async ensureJoined(roomId) {
25
+ if (this.matrixClient.getRoom(roomId))
26
+ return;
27
+ await this.matrixClient.joinRoom(roomId);
28
+ }
29
+ async getAccountDataMapping(eventType) {
30
+ try {
31
+ const data = await this.matrixClient.getAccountDataFromServer(eventType);
32
+ if (!data || typeof data !== "object")
33
+ return {};
34
+ return data;
35
+ }
36
+ catch {
37
+ return {};
38
+ }
39
+ }
40
+ async createIndexMatrixRoom(options) {
41
+ const timestamp = Date.now();
42
+ const randomSuffix = Math.random().toString(36).substring(2, 8);
43
+ const localAlias = `${this.namespace}-index-${timestamp}-${randomSuffix}`;
44
+ const response = await this.matrixClient.createRoom({
45
+ name: `Index: ${options.indexName}`,
46
+ room_alias_name: localAlias,
47
+ visibility: sdk.Visibility.Private,
48
+ preset: sdk.Preset.PrivateChat,
49
+ initial_state: [
50
+ {
51
+ type: "m.room.history_visibility",
52
+ content: { history_visibility: "shared" },
53
+ },
54
+ {
55
+ type: this.namespace,
56
+ state_key: "",
57
+ content: {
58
+ version: 1,
59
+ indexName: options.indexName,
60
+ indexScope: options.scope,
61
+ },
62
+ },
63
+ ],
64
+ });
65
+ return response.room_id;
66
+ }
67
+ privateIndexAccountDataType() {
68
+ return `${this.namespace}.private_indexes`;
69
+ }
70
+ }
71
+ //# sourceMappingURL=indexRoomStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexRoomStore.js","sourceRoot":"","sources":["../../src/indexing/indexRoomStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { Room } from "../Room";
2
+ import type { MatrixClient, MayDbIndexScope } from "../types";
3
+ export declare class IndexRoomStore {
4
+ private readonly namespace;
5
+ private readonly matrixClient;
6
+ private readonly openRoom;
7
+ constructor(options: {
8
+ namespace: string;
9
+ matrixClient: MatrixClient;
10
+ openRoom: (roomId: string) => Room;
11
+ });
12
+ resolveIndexRoomId(options: {
13
+ indexName: string;
14
+ scope: MayDbIndexScope;
15
+ ownerRoomId: string | null;
16
+ }): Promise<string>;
17
+ private resolvePrivateIndexRoomId;
18
+ private resolveCollaborativeIndexRoomId;
19
+ private ensureJoined;
20
+ private getAccountDataMapping;
21
+ private getOwnerRoomIndexMapping;
22
+ private createIndexMatrixRoom;
23
+ private privateIndexAccountDataType;
24
+ private ownerIndexMappingStateType;
25
+ }
26
+ //# sourceMappingURL=roomRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roomRegistry.d.ts","sourceRoot":"","sources":["../../src/indexing/roomRegistry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE9D,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;gBAExC,OAAO,EAAE;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,YAAY,CAAC;QAC3B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;KACpC;IAMK,kBAAkB,CAAC,OAAO,EAAE;QAChC,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,eAAe,CAAC;QACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B,GAAG,OAAO,CAAC,MAAM,CAAC;YAOL,yBAAyB;YAoBzB,+BAA+B;YA4C/B,YAAY;YAKZ,qBAAqB;YAcrB,wBAAwB;YAiBxB,qBAAqB;IAgCnC,OAAO,CAAC,2BAA2B;IAInC,OAAO,CAAC,0BAA0B;CAGnC"}
@@ -0,0 +1,125 @@
1
+ import * as sdk from "matrix-js-sdk";
2
+ import { Room } from "../Room";
3
+ export class IndexRoomStore {
4
+ namespace;
5
+ matrixClient;
6
+ openRoom;
7
+ constructor(options) {
8
+ this.namespace = options.namespace;
9
+ this.matrixClient = options.matrixClient;
10
+ this.openRoom = options.openRoom;
11
+ }
12
+ async resolveIndexRoomId(options) {
13
+ if (options.scope === "private") {
14
+ return this.resolvePrivateIndexRoomId(options.indexName);
15
+ }
16
+ return this.resolveCollaborativeIndexRoomId(options.indexName, options.ownerRoomId);
17
+ }
18
+ async resolvePrivateIndexRoomId(indexName) {
19
+ const eventType = this.privateIndexAccountDataType();
20
+ let mapping = await this.getAccountDataMapping(eventType);
21
+ const existing = mapping[indexName];
22
+ if (typeof existing === "string") {
23
+ return existing;
24
+ }
25
+ const roomId = await this.createIndexMatrixRoom({
26
+ indexName,
27
+ scope: "private",
28
+ });
29
+ mapping = { ...mapping, [indexName]: roomId };
30
+ await this.matrixClient.setAccountData(eventType, mapping);
31
+ return roomId;
32
+ }
33
+ async resolveCollaborativeIndexRoomId(indexName, ownerRoomId) {
34
+ if (!ownerRoomId) {
35
+ throw new Error(`Collaborative index "${indexName}" missing ownerRoomId`);
36
+ }
37
+ let mapping = await this.getOwnerRoomIndexMapping(ownerRoomId);
38
+ const existing = mapping[indexName];
39
+ if (typeof existing === "string") {
40
+ await this.ensureJoined(existing);
41
+ return existing;
42
+ }
43
+ const ownerRoom = this.openRoom(ownerRoomId);
44
+ await ownerRoom.ensureJoined();
45
+ await ownerRoom.connect();
46
+ if (!ownerRoom.canEdit) {
47
+ throw new Error(`Cannot create index "${indexName}" without owner room write access`);
48
+ }
49
+ const roomId = await this.createIndexMatrixRoom({
50
+ indexName,
51
+ scope: "collaborative",
52
+ });
53
+ const indexRoom = this.openRoom(roomId);
54
+ await indexRoom.ensureJoined();
55
+ await indexRoom.connect();
56
+ await indexRoom.delegates.add(ownerRoomId);
57
+ mapping = { ...mapping, [indexName]: roomId };
58
+ await this.matrixClient.sendStateEvent(ownerRoomId, this.ownerIndexMappingStateType(), mapping, "");
59
+ return roomId;
60
+ }
61
+ async ensureJoined(roomId) {
62
+ if (this.matrixClient.getRoom(roomId))
63
+ return;
64
+ await this.matrixClient.joinRoom(roomId);
65
+ }
66
+ async getAccountDataMapping(eventType) {
67
+ try {
68
+ const data = await this.matrixClient.getAccountDataFromServer(eventType);
69
+ if (!data || typeof data !== "object")
70
+ return {};
71
+ return data;
72
+ }
73
+ catch {
74
+ return {};
75
+ }
76
+ }
77
+ async getOwnerRoomIndexMapping(ownerRoomId) {
78
+ try {
79
+ const state = await this.matrixClient.roomState(ownerRoomId);
80
+ const event = state.find((entry) => entry.type === this.ownerIndexMappingStateType() &&
81
+ entry.state_key === "");
82
+ if (!event || typeof event.content !== "object")
83
+ return {};
84
+ return event.content;
85
+ }
86
+ catch {
87
+ return {};
88
+ }
89
+ }
90
+ async createIndexMatrixRoom(options) {
91
+ const timestamp = Date.now();
92
+ const randomSuffix = Math.random().toString(36).substring(2, 8);
93
+ const localAlias = `${this.namespace}-index-${timestamp}-${randomSuffix}`;
94
+ const response = await this.matrixClient.createRoom({
95
+ name: `Index: ${options.indexName}`,
96
+ room_alias_name: localAlias,
97
+ visibility: sdk.Visibility.Private,
98
+ preset: sdk.Preset.PrivateChat,
99
+ initial_state: [
100
+ {
101
+ type: "m.room.history_visibility",
102
+ content: { history_visibility: "shared" },
103
+ },
104
+ {
105
+ type: this.namespace,
106
+ state_key: "",
107
+ content: {
108
+ version: 1,
109
+ roomType: "__index__",
110
+ indexName: options.indexName,
111
+ indexScope: options.scope,
112
+ },
113
+ },
114
+ ],
115
+ });
116
+ return response.room_id;
117
+ }
118
+ privateIndexAccountDataType() {
119
+ return `${this.namespace}.private_indexes`;
120
+ }
121
+ ownerIndexMappingStateType() {
122
+ return `${this.namespace}.index_rooms`;
123
+ }
124
+ }
125
+ //# sourceMappingURL=roomRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roomRegistry.js","sourceRoot":"","sources":["../../src/indexing/roomRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import * as Y from "yjs";
2
+ import type { RoomDescriptor } from "./descriptor";
3
+ import type { MayDbIndexDefinition, MayDbIndexItem, MayDbIndexOrderBy, MayDbIndexPrimitive, MayDbIndexQueryPageResult } from "../types";
4
+ export declare function buildIndexItem(definition: MayDbIndexDefinition, roomDescriptor: RoomDescriptor, doc: Y.Doc): MayDbIndexItem;
5
+ export declare function readQueryRows(rowsMap: Y.Map<string>, where: Record<string, MayDbIndexPrimitive>): MayDbIndexItem[];
6
+ export declare function pageRows(rows: MayDbIndexItem[], limit: number, afterRoomId: string | null): MayDbIndexQueryPageResult;
7
+ export declare function compareIndexItems(left: MayDbIndexItem, right: MayDbIndexItem, orderBy: MayDbIndexOrderBy): number;
8
+ //# sourceMappingURL=rows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rows.d.ts","sourceRoot":"","sources":["../../src/indexing/rows.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EACV,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,EAC1B,MAAM,UAAU,CAAC;AAElB,wBAAgB,cAAc,CAC5B,UAAU,EAAE,oBAAoB,EAChC,cAAc,EAAE,cAAc,EAC9B,GAAG,EAAE,CAAC,CAAC,GAAG,GACT,cAAc,CAahB;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,GACzC,cAAc,EAAE,CAKlB;AAED,wBAAgB,QAAQ,CACtB,IAAI,EAAE,cAAc,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAAG,IAAI,GACzB,yBAAyB,CAU3B;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,iBAAiB,GACzB,MAAM,CAOR"}
@@ -0,0 +1,86 @@
1
+ import * as Y from "yjs";
2
+ export function buildIndexItem(definition, roomDescriptor, doc) {
3
+ const values = {};
4
+ for (const [columnName, column] of Object.entries(definition.columns)) {
5
+ values[columnName] =
6
+ column.source.kind === "system"
7
+ ? readSystemColumnValue(roomDescriptor, column.source.field)
8
+ : doc.getText(column.source.path).toString();
9
+ }
10
+ return {
11
+ roomId: roomDescriptor.roomId,
12
+ values,
13
+ };
14
+ }
15
+ export function readQueryRows(rowsMap, where) {
16
+ return Array.from(rowsMap.values())
17
+ .map((value) => parseItem(value))
18
+ .filter((item) => item != null)
19
+ .filter((item) => matchesWhere(item, where));
20
+ }
21
+ export function pageRows(rows, limit, afterRoomId) {
22
+ let startIndex = 0;
23
+ if (afterRoomId) {
24
+ const afterIndex = rows.findIndex((item) => item.roomId === afterRoomId);
25
+ startIndex = afterIndex >= 0 ? afterIndex + 1 : 0;
26
+ }
27
+ const items = rows.slice(startIndex, startIndex + limit);
28
+ const hasMore = startIndex + limit < rows.length;
29
+ return { items, hasMore };
30
+ }
31
+ export function compareIndexItems(left, right, orderBy) {
32
+ const leftValue = left.values[orderBy.column] ?? null;
33
+ const rightValue = right.values[orderBy.column] ?? null;
34
+ const direction = orderBy.direction === "asc" ? 1 : -1;
35
+ const base = comparePrimitive(leftValue, rightValue) * direction;
36
+ if (base !== 0)
37
+ return base;
38
+ return left.roomId.localeCompare(right.roomId);
39
+ }
40
+ function readSystemColumnValue(roomDescriptor, field) {
41
+ switch (field) {
42
+ case "roomId":
43
+ return roomDescriptor.roomId;
44
+ case "roomName":
45
+ return roomDescriptor.roomName;
46
+ case "roomType":
47
+ return roomDescriptor.roomType;
48
+ }
49
+ }
50
+ function parseItem(encoded) {
51
+ try {
52
+ const parsed = JSON.parse(encoded);
53
+ if (!parsed || typeof parsed.roomId !== "string")
54
+ return null;
55
+ if (!parsed.values || typeof parsed.values !== "object")
56
+ return null;
57
+ return parsed;
58
+ }
59
+ catch {
60
+ return null;
61
+ }
62
+ }
63
+ function matchesWhere(item, where) {
64
+ for (const [column, value] of Object.entries(where)) {
65
+ if (item.values[column] !== value) {
66
+ return false;
67
+ }
68
+ }
69
+ return true;
70
+ }
71
+ function comparePrimitive(left, right) {
72
+ if (left === right)
73
+ return 0;
74
+ if (left === null)
75
+ return -1;
76
+ if (right === null)
77
+ return 1;
78
+ if (typeof left === "number" && typeof right === "number") {
79
+ return left - right;
80
+ }
81
+ if (typeof left === "boolean" && typeof right === "boolean") {
82
+ return Number(left) - Number(right);
83
+ }
84
+ return String(left).localeCompare(String(right));
85
+ }
86
+ //# sourceMappingURL=rows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rows.js","sourceRoot":"","sources":["../../src/indexing/rows.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { Room } from "../Room";
2
+ import { RuntimeIndexHandle } from "./handle";
3
+ import type { MayDbIndexHandle, MayDbIndexQueryPageOptions, MayDbIndexQueryPageResult, MayDbSchema, MatrixClient } from "../types";
4
+ export declare class IndexRuntime {
5
+ private readonly namespace;
6
+ private readonly matrixClient;
7
+ private readonly schema;
8
+ private readonly openRoom;
9
+ private readonly roomStore;
10
+ private readonly indexEntries;
11
+ private readonly roomDescriptors;
12
+ private readonly trackedRooms;
13
+ private readonly collaborativeSync;
14
+ private readonly handles;
15
+ private readonly roomTypesInIndexes;
16
+ private readonly roomWriteListenerSetupInFlight;
17
+ constructor(options: {
18
+ namespace: string;
19
+ matrixClient: MatrixClient;
20
+ schema: MayDbSchema;
21
+ openRoom: (roomId: string) => Room;
22
+ });
23
+ hasIndexes(): boolean;
24
+ isRoomTypeIndexed(roomType: string): boolean;
25
+ validateRoomType(roomType: string): void;
26
+ openIndex(options: {
27
+ indexName: string;
28
+ indexRoomId?: string;
29
+ }): MayDbIndexHandle;
30
+ dispose(): void;
31
+ trackRoom(room: Room): void;
32
+ ensureRoomIndexed(options: {
33
+ roomId: string;
34
+ roomNameHint: string;
35
+ }): Promise<void>;
36
+ onHandleActivated(handle: RuntimeIndexHandle): void;
37
+ onHandleDeactivated(handle: RuntimeIndexHandle): void;
38
+ ensureHandleReady(handle: RuntimeIndexHandle): Promise<void>;
39
+ queryHandlePage(handle: RuntimeIndexHandle, options: MayDbIndexQueryPageOptions): Promise<MayDbIndexQueryPageResult>;
40
+ private validateSchemaIndexes;
41
+ private getIndexDefinition;
42
+ private validateIndexScopeOptions;
43
+ private getOrCreateHandle;
44
+ private initializeHandle;
45
+ private ensureRoomWriteListener;
46
+ private setupRoomWriteListener;
47
+ private onLocalRoomWrite;
48
+ private syncRoomIntoIndexes;
49
+ private syncRoomIntoIndex;
50
+ private removeRoomFromIndex;
51
+ private upsertRoomToIndex;
52
+ private getRoomDescriptor;
53
+ private readRoomDescriptor;
54
+ private resolveRoomName;
55
+ private resolveRoomType;
56
+ private normalizeRoomType;
57
+ private readRoomTypeFromDocument;
58
+ private resolveHandleIndexRoomId;
59
+ private handleKey;
60
+ }
61
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/indexing/runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAW/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C,OAAO,KAAK,EAEV,gBAAgB,EAChB,0BAA0B,EAC1B,yBAAyB,EACzB,WAAW,EACX,YAAY,EACb,MAAM,UAAU,CAAC;AAWlB,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwC;IAGrE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqC;IACrE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkC;IAC/D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAyB;IAC3D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;IACjE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IACxD,OAAO,CAAC,QAAQ,CAAC,8BAA8B,CAG3C;gBAEQ,OAAO,EAAE;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,YAAY,CAAC;QAC3B,MAAM,EAAE,WAAW,CAAC;QACpB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;KACpC;IAuBD,UAAU,IAAI,OAAO;IAIrB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI5C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMxC,SAAS,CAAC,OAAO,EAAE;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,gBAAgB;IAYpB,OAAO,IAAI,IAAI;IAkBf,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAWrB,iBAAiB,CAAC,OAAO,EAAE;QAC/B,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC,IAAI,CAAC;IAcjB,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAMnD,mBAAmB,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAK/C,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB5D,eAAe,CACnB,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,yBAAyB,CAAC;IAcrC,OAAO,CAAC,qBAAqB;IAmC7B,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,yBAAyB;IAajC,OAAO,CAAC,iBAAiB;YAmBX,gBAAgB;YAsBhB,uBAAuB;YAmBvB,sBAAsB;YAmBtB,gBAAgB;YAUhB,mBAAmB;YAenB,iBAAiB;YAmBjB,mBAAmB;YAQnB,iBAAiB;YAoCjB,iBAAiB;YAYjB,kBAAkB;YAclB,eAAe;YAiBf,eAAe;IAO7B,OAAO,CAAC,iBAAiB;YAMX,wBAAwB;YAcxB,wBAAwB;IAetC,OAAO,CAAC,SAAS;CAKlB"}