@verdant-web/store 2.5.8 → 2.7.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 (145) hide show
  1. package/dist/bundle/index.js +15 -10
  2. package/dist/bundle/index.js.map +4 -4
  3. package/dist/cjs/{entities/FakeWeakRef.d.ts → FakeWeakRef.d.ts} +2 -2
  4. package/dist/cjs/{entities/FakeWeakRef.js → FakeWeakRef.js} +4 -4
  5. package/dist/cjs/FakeWeakRef.js.map +1 -0
  6. package/dist/cjs/IDBService.d.ts +1 -1
  7. package/dist/cjs/IDBService.js +18 -1
  8. package/dist/cjs/IDBService.js.map +1 -1
  9. package/dist/cjs/__tests__/documents.test.js +17 -0
  10. package/dist/cjs/__tests__/documents.test.js.map +1 -1
  11. package/dist/cjs/__tests__/fixtures/testStorage.d.ts +1 -1
  12. package/dist/cjs/__tests__/fixtures/testStorage.js +3 -2
  13. package/dist/cjs/__tests__/fixtures/testStorage.js.map +1 -1
  14. package/dist/cjs/__tests__/mutations.test.d.ts +1 -0
  15. package/dist/cjs/__tests__/mutations.test.js +42 -0
  16. package/dist/cjs/__tests__/mutations.test.js.map +1 -0
  17. package/dist/cjs/__tests__/queries.test.js +2 -0
  18. package/dist/cjs/__tests__/queries.test.js.map +1 -1
  19. package/dist/cjs/client/Client.d.ts +6 -4
  20. package/dist/cjs/client/Client.js +24 -16
  21. package/dist/cjs/client/Client.js.map +1 -1
  22. package/dist/cjs/client/ClientDescriptor.d.ts +15 -4
  23. package/dist/cjs/client/ClientDescriptor.js +117 -36
  24. package/dist/cjs/client/ClientDescriptor.js.map +1 -1
  25. package/dist/cjs/context.d.ts +1 -0
  26. package/dist/cjs/entities/DocumentFamiliyCache.d.ts +22 -2
  27. package/dist/cjs/entities/DocumentFamiliyCache.js +39 -21
  28. package/dist/cjs/entities/DocumentFamiliyCache.js.map +1 -1
  29. package/dist/cjs/entities/Entity.d.ts +7 -2
  30. package/dist/cjs/entities/Entity.js +33 -3
  31. package/dist/cjs/entities/Entity.js.map +1 -1
  32. package/dist/cjs/entities/EntityStore.d.ts +2 -1
  33. package/dist/cjs/entities/EntityStore.js +50 -20
  34. package/dist/cjs/entities/EntityStore.js.map +1 -1
  35. package/dist/cjs/idb.d.ts +2 -0
  36. package/dist/cjs/idb.js +9 -1
  37. package/dist/cjs/idb.js.map +1 -1
  38. package/dist/cjs/index.d.ts +1 -1
  39. package/dist/cjs/index.js +2 -1
  40. package/dist/cjs/index.js.map +1 -1
  41. package/dist/cjs/metadata/BaselinesStore.js +15 -5
  42. package/dist/cjs/metadata/BaselinesStore.js.map +1 -1
  43. package/dist/cjs/metadata/openMetadataDatabase.d.ts +11 -2
  44. package/dist/cjs/metadata/openMetadataDatabase.js +56 -3
  45. package/dist/cjs/metadata/openMetadataDatabase.js.map +1 -1
  46. package/dist/cjs/migration/db.d.ts +1 -1
  47. package/dist/cjs/migration/db.js +5 -2
  48. package/dist/cjs/migration/db.js.map +1 -1
  49. package/dist/cjs/migration/openDatabase.d.ts +8 -0
  50. package/dist/cjs/migration/openDatabase.js +217 -165
  51. package/dist/cjs/migration/openDatabase.js.map +1 -1
  52. package/dist/cjs/queries/BaseQuery.js +12 -1
  53. package/dist/cjs/queries/BaseQuery.js.map +1 -1
  54. package/dist/cjs/sync/Sync.d.ts +6 -5
  55. package/dist/cjs/sync/Sync.js.map +1 -1
  56. package/dist/cjs/sync/WebSocketSync.js +4 -3
  57. package/dist/cjs/sync/WebSocketSync.js.map +1 -1
  58. package/dist/esm/{entities/FakeWeakRef.d.ts → FakeWeakRef.d.ts} +2 -2
  59. package/dist/esm/{entities/FakeWeakRef.js → FakeWeakRef.js} +2 -2
  60. package/dist/esm/FakeWeakRef.js.map +1 -0
  61. package/dist/esm/IDBService.d.ts +1 -1
  62. package/dist/esm/IDBService.js +18 -1
  63. package/dist/esm/IDBService.js.map +1 -1
  64. package/dist/esm/__tests__/documents.test.js +17 -0
  65. package/dist/esm/__tests__/documents.test.js.map +1 -1
  66. package/dist/esm/__tests__/fixtures/testStorage.d.ts +1 -1
  67. package/dist/esm/__tests__/fixtures/testStorage.js +4 -3
  68. package/dist/esm/__tests__/fixtures/testStorage.js.map +1 -1
  69. package/dist/esm/__tests__/mutations.test.d.ts +1 -0
  70. package/dist/esm/__tests__/mutations.test.js +40 -0
  71. package/dist/esm/__tests__/mutations.test.js.map +1 -0
  72. package/dist/esm/__tests__/queries.test.js +2 -0
  73. package/dist/esm/__tests__/queries.test.js.map +1 -1
  74. package/dist/esm/client/Client.d.ts +6 -4
  75. package/dist/esm/client/Client.js +25 -17
  76. package/dist/esm/client/Client.js.map +1 -1
  77. package/dist/esm/client/ClientDescriptor.d.ts +15 -4
  78. package/dist/esm/client/ClientDescriptor.js +121 -40
  79. package/dist/esm/client/ClientDescriptor.js.map +1 -1
  80. package/dist/esm/context.d.ts +1 -0
  81. package/dist/esm/entities/DocumentFamiliyCache.d.ts +22 -2
  82. package/dist/esm/entities/DocumentFamiliyCache.js +39 -21
  83. package/dist/esm/entities/DocumentFamiliyCache.js.map +1 -1
  84. package/dist/esm/entities/Entity.d.ts +7 -2
  85. package/dist/esm/entities/Entity.js +33 -3
  86. package/dist/esm/entities/Entity.js.map +1 -1
  87. package/dist/esm/entities/EntityStore.d.ts +2 -1
  88. package/dist/esm/entities/EntityStore.js +51 -21
  89. package/dist/esm/entities/EntityStore.js.map +1 -1
  90. package/dist/esm/idb.d.ts +2 -0
  91. package/dist/esm/idb.js +6 -0
  92. package/dist/esm/idb.js.map +1 -1
  93. package/dist/esm/index.d.ts +1 -1
  94. package/dist/esm/index.js +1 -1
  95. package/dist/esm/index.js.map +1 -1
  96. package/dist/esm/metadata/BaselinesStore.js +16 -6
  97. package/dist/esm/metadata/BaselinesStore.js.map +1 -1
  98. package/dist/esm/metadata/openMetadataDatabase.d.ts +11 -2
  99. package/dist/esm/metadata/openMetadataDatabase.js +54 -2
  100. package/dist/esm/metadata/openMetadataDatabase.js.map +1 -1
  101. package/dist/esm/migration/db.d.ts +1 -1
  102. package/dist/esm/migration/db.js +5 -2
  103. package/dist/esm/migration/db.js.map +1 -1
  104. package/dist/esm/migration/openDatabase.d.ts +8 -0
  105. package/dist/esm/migration/openDatabase.js +215 -164
  106. package/dist/esm/migration/openDatabase.js.map +1 -1
  107. package/dist/esm/queries/BaseQuery.js +12 -1
  108. package/dist/esm/queries/BaseQuery.js.map +1 -1
  109. package/dist/esm/sync/Sync.d.ts +6 -5
  110. package/dist/esm/sync/Sync.js.map +1 -1
  111. package/dist/esm/sync/WebSocketSync.js +4 -3
  112. package/dist/esm/sync/WebSocketSync.js.map +1 -1
  113. package/dist/tsconfig-cjs.tsbuildinfo +1 -1
  114. package/dist/tsconfig.tsbuildinfo +1 -1
  115. package/package.json +9 -4
  116. package/src/{entities/FakeWeakRef.ts → FakeWeakRef.ts} +2 -2
  117. package/src/IDBService.ts +20 -2
  118. package/src/__tests__/documents.test.ts +19 -0
  119. package/src/__tests__/fixtures/testStorage.ts +4 -7
  120. package/src/__tests__/mutations.test.ts +51 -0
  121. package/src/__tests__/queries.test.ts +3 -0
  122. package/src/client/Client.ts +29 -21
  123. package/src/client/ClientDescriptor.ts +176 -53
  124. package/src/context.ts +1 -0
  125. package/src/entities/DocumentFamiliyCache.ts +66 -21
  126. package/src/entities/Entity.ts +41 -6
  127. package/src/entities/EntityStore.ts +68 -21
  128. package/src/idb.ts +10 -0
  129. package/src/index.ts +1 -0
  130. package/src/metadata/BaselinesStore.ts +17 -6
  131. package/src/metadata/openMetadataDatabase.ts +96 -13
  132. package/src/migration/db.ts +14 -1
  133. package/src/migration/openDatabase.ts +350 -219
  134. package/src/queries/BaseQuery.ts +14 -1
  135. package/src/sync/Sync.ts +13 -9
  136. package/src/sync/WebSocketSync.ts +1 -0
  137. package/dist/cjs/entities/FakeWeakRef.js.map +0 -1
  138. package/dist/cjs/indexes.d.ts +0 -3
  139. package/dist/cjs/indexes.js +0 -20
  140. package/dist/cjs/indexes.js.map +0 -1
  141. package/dist/esm/entities/FakeWeakRef.js.map +0 -1
  142. package/dist/esm/indexes.d.ts +0 -3
  143. package/dist/esm/indexes.js +0 -15
  144. package/dist/esm/indexes.js.map +0 -1
  145. package/src/indexes.ts +0 -31
@@ -182,7 +182,20 @@ export abstract class BaseQuery<T> extends Disposable {
182
182
  }
183
183
  // no status change needed if already in a 'running' status.
184
184
 
185
- this._executionPromise = this.run().then(() => this._value);
185
+ this._executionPromise = this.run()
186
+ .then(() => this._value)
187
+ .catch((err) => {
188
+ if (err instanceof Error) {
189
+ if (
190
+ err.name === 'InvalidStateError' ||
191
+ err.name === 'InvalidAccessError'
192
+ ) {
193
+ // possibly accessing db while it's closed. not much we can do.
194
+ return this._value;
195
+ }
196
+ }
197
+ throw err;
198
+ });
186
199
  return this._executionPromise;
187
200
  };
188
201
  protected abstract run(): Promise<void>;
package/src/sync/Sync.ts CHANGED
@@ -48,15 +48,19 @@ export interface SyncTransport {
48
48
  readonly status: 'active' | 'paused';
49
49
  }
50
50
 
51
- export interface Sync extends SyncTransport {
51
+ export interface Sync<Presence = any, Profile = any> extends SyncTransport {
52
52
  setMode(mode: SyncTransportMode): void;
53
53
  setPullInterval(interval: number): void;
54
54
  readonly pullInterval: number;
55
55
  uploadFile(data: FileData): Promise<FileUploadResult>;
56
56
  getFile(fileId: string): Promise<FilePullResult>;
57
+ readonly presence: PresenceManager<Profile, Presence>;
57
58
  }
58
59
 
59
- export class NoSync extends EventSubscriber<SyncEvents> implements Sync {
60
+ export class NoSync<Presence = any, Profile = any>
61
+ extends EventSubscriber<SyncEvents>
62
+ implements Sync<Presence, Profile>
63
+ {
60
64
  readonly mode = 'pull';
61
65
 
62
66
  public send(): void {}
@@ -76,9 +80,9 @@ export class NoSync extends EventSubscriber<SyncEvents> implements Sync {
76
80
  public readonly status = 'paused';
77
81
  public readonly pullInterval = 0;
78
82
 
79
- public readonly presence = new PresenceManager({
80
- initialPresence: {},
81
- defaultProfile: {},
83
+ public readonly presence = new PresenceManager<Profile, Presence>({
84
+ initialPresence: {} as any,
85
+ defaultProfile: {} as any,
82
86
  });
83
87
 
84
88
  uploadFile = async () => {
@@ -152,11 +156,11 @@ export interface ServerSyncOptions<Profile = any, Presence = any>
152
156
  useBroadcastChannel?: boolean;
153
157
  }
154
158
 
155
- export class ServerSync<Profile = any, Presence = any>
159
+ export class ServerSync<Presence = any, Profile = any>
156
160
  extends EventSubscriber<
157
161
  SyncEvents & { syncingChange: (syncing: boolean) => void }
158
162
  >
159
- implements Sync
163
+ implements Sync<Presence, Profile>
160
164
  {
161
165
  private webSocketSync: WebSocketSync;
162
166
  private pushPullSync: PushPullSync;
@@ -173,7 +177,7 @@ export class ServerSync<Profile = any, Presence = any>
173
177
 
174
178
  private meta: Metadata;
175
179
 
176
- readonly presence;
180
+ readonly presence: PresenceManager<Profile, Presence>;
177
181
 
178
182
  private log;
179
183
 
@@ -208,7 +212,7 @@ export class ServerSync<Profile = any, Presence = any>
208
212
  this.meta = meta;
209
213
  this.onData = onData;
210
214
  this.log = log || (() => {});
211
- this.presence = new PresenceManager<Profile, Presence>({
215
+ this.presence = new PresenceManager({
212
216
  initialPresence,
213
217
  defaultProfile,
214
218
  updateBatchTimeout: presenceUpdateBatchTimeout,
@@ -216,6 +216,7 @@ export class WebSocketSync
216
216
  };
217
217
 
218
218
  dispose = () => {
219
+ this.socket?.removeEventListener('message', this.onMessage);
219
220
  this.socket?.removeEventListener('close', this.onClose);
220
221
  this.socket?.close();
221
222
  };
@@ -1 +0,0 @@
1
- {"version":3,"file":"FakeWeakRef.js","sourceRoot":"","sources":["../../../src/entities/FakeWeakRef.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,MAAa,OAAO;IACnB,YAAY,KAAQ;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,CAAC;IAID,KAAK;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;CACD;AAVD,0BAUC"}
@@ -1,3 +0,0 @@
1
- import { StorageCollectionSchema } from '@verdant-web/common';
2
- export declare function computeSynthetics(schema: StorageCollectionSchema, obj: any): Record<string, any>;
3
- export declare function computeCompoundIndices(schema: StorageCollectionSchema<any, any, any>, doc: any): any;
@@ -1,20 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.computeCompoundIndices = exports.computeSynthetics = void 0;
4
- const common_1 = require("@verdant-web/common");
5
- function computeSynthetics(schema, obj) {
6
- const result = {};
7
- for (const [name, property] of Object.entries(schema.synthetics || {})) {
8
- result[name] = property.compute(obj);
9
- }
10
- return result;
11
- }
12
- exports.computeSynthetics = computeSynthetics;
13
- function computeCompoundIndices(schema, doc) {
14
- return Object.entries(schema.compounds || {}).reduce((acc, [indexKey, index]) => {
15
- acc[indexKey] = (0, common_1.createCompoundIndexValue)(...index.of.map((key) => doc[key]));
16
- return acc;
17
- }, {});
18
- }
19
- exports.computeCompoundIndices = computeCompoundIndices;
20
- //# sourceMappingURL=indexes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"indexes.js","sourceRoot":"","sources":["../../src/indexes.ts"],"names":[],"mappings":";;;AAAA,gDAM6B;AAE7B,SAAgB,iBAAiB,CAAC,MAA+B,EAAE,GAAQ;IAC1E,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE;QACvE,MAAM,CAAC,IAAI,CAAC,GAAI,QAA6C,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;KAC3E;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAND,8CAMC;AAED,SAAgB,sBAAsB,CACrC,MAA8C,EAC9C,GAAQ;IAER,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,CAElD,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE;QAC5B,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAA,iCAAwB,EACvC,GAAI,KAA2C,CAAC,EAAE,CAAC,GAAG,CACrD,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAoB,CACpC,CACD,CAAC;QACF,OAAO,GAAG,CAAC;IACZ,CAAC,EAAE,EAAwC,CAAC,CAAC;AAC9C,CAAC;AAdD,wDAcC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"FakeWeakRef.js","sourceRoot":"","sources":["../../../src/entities/FakeWeakRef.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,OAAO,OAAO;IACnB,YAAY,KAAQ;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,CAAC;IAID,KAAK;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;CACD"}
@@ -1,3 +0,0 @@
1
- import { StorageCollectionSchema } from '@verdant-web/common';
2
- export declare function computeSynthetics(schema: StorageCollectionSchema, obj: any): Record<string, any>;
3
- export declare function computeCompoundIndices(schema: StorageCollectionSchema<any, any, any>, doc: any): any;
@@ -1,15 +0,0 @@
1
- import { createCompoundIndexValue, } from '@verdant-web/common';
2
- export function computeSynthetics(schema, obj) {
3
- const result = {};
4
- for (const [name, property] of Object.entries(schema.synthetics || {})) {
5
- result[name] = property.compute(obj);
6
- }
7
- return result;
8
- }
9
- export function computeCompoundIndices(schema, doc) {
10
- return Object.entries(schema.compounds || {}).reduce((acc, [indexKey, index]) => {
11
- acc[indexKey] = createCompoundIndexValue(...index.of.map((key) => doc[key]));
12
- return acc;
13
- }, {});
14
- }
15
- //# sourceMappingURL=indexes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"indexes.js","sourceRoot":"","sources":["../../src/indexes.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,wBAAwB,GAGxB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,UAAU,iBAAiB,CAAC,MAA+B,EAAE,GAAQ;IAC1E,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE;QACvE,MAAM,CAAC,IAAI,CAAC,GAAI,QAA6C,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;KAC3E;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,MAAM,UAAU,sBAAsB,CACrC,MAA8C,EAC9C,GAAQ;IAER,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,CAElD,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE;QAC5B,GAAG,CAAC,QAAQ,CAAC,GAAG,wBAAwB,CACvC,GAAI,KAA2C,CAAC,EAAE,CAAC,GAAG,CACrD,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAoB,CACpC,CACD,CAAC;QACF,OAAO,GAAG,CAAC;IACZ,CAAC,EAAE,EAAwC,CAAC,CAAC;AAC9C,CAAC"}
package/src/indexes.ts DELETED
@@ -1,31 +0,0 @@
1
- import {
2
- CollectionCompoundIndex,
3
- CompoundIndexValue,
4
- createCompoundIndexValue,
5
- StorageCollectionSchema,
6
- StorageSyntheticIndexSchema,
7
- } from '@verdant-web/common';
8
-
9
- export function computeSynthetics(schema: StorageCollectionSchema, obj: any) {
10
- const result: Record<string, any> = {};
11
- for (const [name, property] of Object.entries(schema.synthetics || {})) {
12
- result[name] = (property as StorageSyntheticIndexSchema<any>).compute(obj);
13
- }
14
- return result;
15
- }
16
-
17
- export function computeCompoundIndices(
18
- schema: StorageCollectionSchema<any, any, any>,
19
- doc: any,
20
- ): any {
21
- return Object.entries(schema.compounds || {}).reduce<
22
- Record<string, CompoundIndexValue>
23
- >((acc, [indexKey, index]) => {
24
- acc[indexKey] = createCompoundIndexValue(
25
- ...(index as CollectionCompoundIndex<any, any>).of.map(
26
- (key) => doc[key] as string | number,
27
- ),
28
- );
29
- return acc;
30
- }, {} as Record<string, CompoundIndexValue>);
31
- }