@verdant-web/store 2.8.5 → 3.0.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 (278) hide show
  1. package/dist/bundle/index.js +9 -10
  2. package/dist/bundle/index.js.map +4 -4
  3. package/dist/cjs/DocumentManager.d.ts +1 -1
  4. package/dist/cjs/DocumentManager.js +1 -1
  5. package/dist/cjs/DocumentManager.js.map +1 -1
  6. package/dist/cjs/IDBService.d.ts +28 -7
  7. package/dist/cjs/IDBService.js +50 -13
  8. package/dist/cjs/IDBService.js.map +1 -1
  9. package/dist/cjs/UndoHistory.d.ts +1 -1
  10. package/dist/cjs/UndoHistory.js +6 -2
  11. package/dist/cjs/UndoHistory.js.map +1 -1
  12. package/dist/cjs/__tests__/batching.test.js +3 -1
  13. package/dist/cjs/__tests__/batching.test.js.map +1 -1
  14. package/dist/cjs/__tests__/documents.test.js +37 -6
  15. package/dist/cjs/__tests__/documents.test.js.map +1 -1
  16. package/dist/cjs/__tests__/fixtures/testStorage.d.ts +2 -2
  17. package/dist/cjs/__tests__/fixtures/testStorage.js +2 -1
  18. package/dist/cjs/__tests__/fixtures/testStorage.js.map +1 -1
  19. package/dist/cjs/__tests__/legacyOids.test.js +50 -17
  20. package/dist/cjs/__tests__/legacyOids.test.js.map +1 -1
  21. package/dist/cjs/__tests__/mutations.test.js +9 -3
  22. package/dist/cjs/__tests__/mutations.test.js.map +1 -1
  23. package/dist/cjs/__tests__/queries.test.js +6 -2
  24. package/dist/cjs/__tests__/queries.test.js.map +1 -1
  25. package/dist/cjs/__tests__/setup/indexedDB.d.ts +1 -1
  26. package/dist/cjs/__tests__/setup/indexedDB.js +8 -1
  27. package/dist/cjs/__tests__/setup/indexedDB.js.map +1 -1
  28. package/dist/cjs/__tests__/undo.test.js +16 -9
  29. package/dist/cjs/__tests__/undo.test.js.map +1 -1
  30. package/dist/cjs/client/Client.d.ts +1 -1
  31. package/dist/cjs/client/Client.js +7 -3
  32. package/dist/cjs/client/Client.js.map +1 -1
  33. package/dist/cjs/client/ClientDescriptor.js +21 -6
  34. package/dist/cjs/client/ClientDescriptor.js.map +1 -1
  35. package/dist/cjs/context.d.ts +10 -1
  36. package/dist/cjs/entities/Entity.d.ts +106 -178
  37. package/dist/cjs/entities/Entity.js +558 -376
  38. package/dist/cjs/entities/Entity.js.map +1 -1
  39. package/dist/cjs/entities/Entity.test.d.ts +1 -0
  40. package/dist/cjs/entities/Entity.test.js +194 -0
  41. package/dist/cjs/entities/Entity.test.js.map +1 -0
  42. package/dist/cjs/entities/EntityCache.d.ts +15 -0
  43. package/dist/cjs/entities/EntityCache.js +39 -0
  44. package/dist/cjs/entities/EntityCache.js.map +1 -0
  45. package/dist/cjs/entities/EntityMetadata.d.ts +68 -0
  46. package/dist/cjs/entities/EntityMetadata.js +261 -0
  47. package/dist/cjs/entities/EntityMetadata.js.map +1 -0
  48. package/dist/cjs/entities/EntityStore.d.ts +63 -68
  49. package/dist/cjs/entities/EntityStore.js +294 -438
  50. package/dist/cjs/entities/EntityStore.js.map +1 -1
  51. package/dist/cjs/entities/OperationBatcher.d.ts +52 -0
  52. package/dist/cjs/entities/OperationBatcher.js +165 -0
  53. package/dist/cjs/entities/OperationBatcher.js.map +1 -0
  54. package/dist/cjs/entities/types.d.ts +84 -0
  55. package/dist/cjs/entities/types.js +3 -0
  56. package/dist/cjs/entities/types.js.map +1 -0
  57. package/dist/cjs/files/EntityFile.d.ts +5 -2
  58. package/dist/cjs/files/EntityFile.js +8 -4
  59. package/dist/cjs/files/EntityFile.js.map +1 -1
  60. package/dist/cjs/files/FileManager.d.ts +3 -1
  61. package/dist/cjs/files/FileManager.js +5 -3
  62. package/dist/cjs/files/FileManager.js.map +1 -1
  63. package/dist/cjs/files/FileStorage.js +7 -7
  64. package/dist/cjs/files/FileStorage.js.map +1 -1
  65. package/dist/cjs/files/utils.d.ts +2 -0
  66. package/dist/cjs/files/utils.js +5 -2
  67. package/dist/cjs/files/utils.js.map +1 -1
  68. package/dist/cjs/idb.d.ts +2 -0
  69. package/dist/cjs/idb.js +50 -4
  70. package/dist/cjs/idb.js.map +1 -1
  71. package/dist/cjs/index.d.ts +1 -1
  72. package/dist/cjs/metadata/AckInfoStore.js +1 -1
  73. package/dist/cjs/metadata/AckInfoStore.js.map +1 -1
  74. package/dist/cjs/metadata/BaselinesStore.d.ts +4 -1
  75. package/dist/cjs/metadata/BaselinesStore.js +19 -10
  76. package/dist/cjs/metadata/BaselinesStore.js.map +1 -1
  77. package/dist/cjs/metadata/LocalReplicaStore.d.ts +1 -1
  78. package/dist/cjs/metadata/LocalReplicaStore.js +11 -5
  79. package/dist/cjs/metadata/LocalReplicaStore.js.map +1 -1
  80. package/dist/cjs/metadata/Metadata.d.ts +26 -5
  81. package/dist/cjs/metadata/Metadata.js +55 -18
  82. package/dist/cjs/metadata/Metadata.js.map +1 -1
  83. package/dist/cjs/metadata/OperationsStore.d.ts +3 -0
  84. package/dist/cjs/metadata/OperationsStore.js +35 -15
  85. package/dist/cjs/metadata/OperationsStore.js.map +1 -1
  86. package/dist/cjs/migration/openDatabase.js +31 -10
  87. package/dist/cjs/migration/openDatabase.js.map +1 -1
  88. package/dist/cjs/queries/BaseQuery.js +13 -1
  89. package/dist/cjs/queries/BaseQuery.js.map +1 -1
  90. package/dist/cjs/queries/CollectionQueries.js +1 -1
  91. package/dist/cjs/queries/CollectionQueries.js.map +1 -1
  92. package/dist/cjs/queries/FindAllQuery.js +1 -0
  93. package/dist/cjs/queries/FindAllQuery.js.map +1 -1
  94. package/dist/cjs/queries/QueryCache.d.ts +1 -0
  95. package/dist/cjs/queries/QueryCache.js +4 -0
  96. package/dist/cjs/queries/QueryCache.js.map +1 -1
  97. package/dist/cjs/queries/QueryableStorage.d.ts +20 -0
  98. package/dist/cjs/queries/QueryableStorage.js +84 -0
  99. package/dist/cjs/queries/QueryableStorage.js.map +1 -0
  100. package/dist/cjs/queries/dbQueries.js +13 -3
  101. package/dist/cjs/queries/dbQueries.js.map +1 -1
  102. package/dist/cjs/sync/FileSync.d.ts +1 -0
  103. package/dist/cjs/sync/FileSync.js +1 -0
  104. package/dist/cjs/sync/FileSync.js.map +1 -1
  105. package/dist/cjs/sync/PushPullSync.d.ts +2 -1
  106. package/dist/cjs/sync/PushPullSync.js +7 -1
  107. package/dist/cjs/sync/PushPullSync.js.map +1 -1
  108. package/dist/cjs/sync/Sync.d.ts +6 -3
  109. package/dist/cjs/sync/Sync.js +9 -4
  110. package/dist/cjs/sync/Sync.js.map +1 -1
  111. package/dist/cjs/sync/WebSocketSync.d.ts +4 -1
  112. package/dist/cjs/sync/WebSocketSync.js +41 -11
  113. package/dist/cjs/sync/WebSocketSync.js.map +1 -1
  114. package/dist/esm/DocumentManager.d.ts +1 -1
  115. package/dist/esm/DocumentManager.js +1 -1
  116. package/dist/esm/DocumentManager.js.map +1 -1
  117. package/dist/esm/IDBService.d.ts +28 -7
  118. package/dist/esm/IDBService.js +51 -14
  119. package/dist/esm/IDBService.js.map +1 -1
  120. package/dist/esm/UndoHistory.d.ts +1 -1
  121. package/dist/esm/UndoHistory.js +6 -2
  122. package/dist/esm/UndoHistory.js.map +1 -1
  123. package/dist/esm/__tests__/batching.test.js +3 -1
  124. package/dist/esm/__tests__/batching.test.js.map +1 -1
  125. package/dist/esm/__tests__/documents.test.js +37 -6
  126. package/dist/esm/__tests__/documents.test.js.map +1 -1
  127. package/dist/esm/__tests__/fixtures/testStorage.d.ts +2 -2
  128. package/dist/esm/__tests__/fixtures/testStorage.js +2 -1
  129. package/dist/esm/__tests__/fixtures/testStorage.js.map +1 -1
  130. package/dist/esm/__tests__/legacyOids.test.js +50 -17
  131. package/dist/esm/__tests__/legacyOids.test.js.map +1 -1
  132. package/dist/esm/__tests__/mutations.test.js +9 -3
  133. package/dist/esm/__tests__/mutations.test.js.map +1 -1
  134. package/dist/esm/__tests__/queries.test.js +6 -2
  135. package/dist/esm/__tests__/queries.test.js.map +1 -1
  136. package/dist/esm/__tests__/setup/indexedDB.d.ts +1 -1
  137. package/dist/esm/__tests__/setup/indexedDB.js +8 -1
  138. package/dist/esm/__tests__/setup/indexedDB.js.map +1 -1
  139. package/dist/esm/__tests__/undo.test.js +16 -9
  140. package/dist/esm/__tests__/undo.test.js.map +1 -1
  141. package/dist/esm/client/Client.d.ts +1 -1
  142. package/dist/esm/client/Client.js +7 -3
  143. package/dist/esm/client/Client.js.map +1 -1
  144. package/dist/esm/client/ClientDescriptor.js +21 -6
  145. package/dist/esm/client/ClientDescriptor.js.map +1 -1
  146. package/dist/esm/context.d.ts +10 -1
  147. package/dist/esm/entities/Entity.d.ts +106 -178
  148. package/dist/esm/entities/Entity.js +559 -376
  149. package/dist/esm/entities/Entity.js.map +1 -1
  150. package/dist/esm/entities/Entity.test.d.ts +1 -0
  151. package/dist/esm/entities/Entity.test.js +192 -0
  152. package/dist/esm/entities/Entity.test.js.map +1 -0
  153. package/dist/esm/entities/EntityCache.d.ts +15 -0
  154. package/dist/esm/entities/EntityCache.js +35 -0
  155. package/dist/esm/entities/EntityCache.js.map +1 -0
  156. package/dist/esm/entities/EntityMetadata.d.ts +68 -0
  157. package/dist/esm/entities/EntityMetadata.js +256 -0
  158. package/dist/esm/entities/EntityMetadata.js.map +1 -0
  159. package/dist/esm/entities/EntityStore.d.ts +63 -68
  160. package/dist/esm/entities/EntityStore.js +295 -439
  161. package/dist/esm/entities/EntityStore.js.map +1 -1
  162. package/dist/esm/entities/OperationBatcher.d.ts +52 -0
  163. package/dist/esm/entities/OperationBatcher.js +161 -0
  164. package/dist/esm/entities/OperationBatcher.js.map +1 -0
  165. package/dist/esm/entities/types.d.ts +84 -0
  166. package/dist/esm/entities/types.js +2 -0
  167. package/dist/esm/entities/types.js.map +1 -0
  168. package/dist/esm/files/EntityFile.d.ts +5 -2
  169. package/dist/esm/files/EntityFile.js +8 -4
  170. package/dist/esm/files/EntityFile.js.map +1 -1
  171. package/dist/esm/files/FileManager.d.ts +3 -1
  172. package/dist/esm/files/FileManager.js +5 -3
  173. package/dist/esm/files/FileManager.js.map +1 -1
  174. package/dist/esm/files/FileStorage.js +7 -7
  175. package/dist/esm/files/FileStorage.js.map +1 -1
  176. package/dist/esm/files/utils.d.ts +2 -0
  177. package/dist/esm/files/utils.js +4 -2
  178. package/dist/esm/files/utils.js.map +1 -1
  179. package/dist/esm/idb.d.ts +2 -0
  180. package/dist/esm/idb.js +47 -3
  181. package/dist/esm/idb.js.map +1 -1
  182. package/dist/esm/index.d.ts +1 -1
  183. package/dist/esm/metadata/AckInfoStore.js +1 -1
  184. package/dist/esm/metadata/AckInfoStore.js.map +1 -1
  185. package/dist/esm/metadata/BaselinesStore.d.ts +4 -1
  186. package/dist/esm/metadata/BaselinesStore.js +19 -10
  187. package/dist/esm/metadata/BaselinesStore.js.map +1 -1
  188. package/dist/esm/metadata/LocalReplicaStore.d.ts +1 -1
  189. package/dist/esm/metadata/LocalReplicaStore.js +11 -5
  190. package/dist/esm/metadata/LocalReplicaStore.js.map +1 -1
  191. package/dist/esm/metadata/Metadata.d.ts +26 -5
  192. package/dist/esm/metadata/Metadata.js +56 -19
  193. package/dist/esm/metadata/Metadata.js.map +1 -1
  194. package/dist/esm/metadata/OperationsStore.d.ts +3 -0
  195. package/dist/esm/metadata/OperationsStore.js +35 -15
  196. package/dist/esm/metadata/OperationsStore.js.map +1 -1
  197. package/dist/esm/migration/openDatabase.js +32 -11
  198. package/dist/esm/migration/openDatabase.js.map +1 -1
  199. package/dist/esm/queries/BaseQuery.js +13 -1
  200. package/dist/esm/queries/BaseQuery.js.map +1 -1
  201. package/dist/esm/queries/CollectionQueries.js +1 -1
  202. package/dist/esm/queries/CollectionQueries.js.map +1 -1
  203. package/dist/esm/queries/FindAllQuery.js +1 -0
  204. package/dist/esm/queries/FindAllQuery.js.map +1 -1
  205. package/dist/esm/queries/QueryCache.d.ts +1 -0
  206. package/dist/esm/queries/QueryCache.js +4 -0
  207. package/dist/esm/queries/QueryCache.js.map +1 -1
  208. package/dist/esm/queries/QueryableStorage.d.ts +20 -0
  209. package/dist/esm/queries/QueryableStorage.js +80 -0
  210. package/dist/esm/queries/QueryableStorage.js.map +1 -0
  211. package/dist/esm/queries/dbQueries.js +13 -3
  212. package/dist/esm/queries/dbQueries.js.map +1 -1
  213. package/dist/esm/sync/FileSync.d.ts +1 -0
  214. package/dist/esm/sync/FileSync.js +1 -0
  215. package/dist/esm/sync/FileSync.js.map +1 -1
  216. package/dist/esm/sync/PushPullSync.d.ts +2 -1
  217. package/dist/esm/sync/PushPullSync.js +7 -1
  218. package/dist/esm/sync/PushPullSync.js.map +1 -1
  219. package/dist/esm/sync/Sync.d.ts +6 -3
  220. package/dist/esm/sync/Sync.js +9 -4
  221. package/dist/esm/sync/Sync.js.map +1 -1
  222. package/dist/esm/sync/WebSocketSync.d.ts +4 -1
  223. package/dist/esm/sync/WebSocketSync.js +41 -11
  224. package/dist/esm/sync/WebSocketSync.js.map +1 -1
  225. package/dist/tsconfig-cjs.tsbuildinfo +1 -1
  226. package/dist/tsconfig.tsbuildinfo +1 -1
  227. package/package.json +8 -7
  228. package/src/DocumentManager.ts +1 -1
  229. package/src/IDBService.ts +78 -17
  230. package/src/UndoHistory.ts +5 -3
  231. package/src/__tests__/batching.test.ts +5 -2
  232. package/src/__tests__/documents.test.ts +44 -6
  233. package/src/__tests__/fixtures/testStorage.ts +3 -0
  234. package/src/__tests__/legacyOids.test.ts +53 -17
  235. package/src/__tests__/mutations.test.ts +9 -3
  236. package/src/__tests__/queries.test.ts +6 -2
  237. package/src/__tests__/setup/indexedDB.ts +8 -1
  238. package/src/__tests__/undo.test.ts +17 -9
  239. package/src/client/Client.ts +7 -3
  240. package/src/client/ClientDescriptor.ts +24 -8
  241. package/src/context.ts +16 -1
  242. package/src/entities/Entity.test.ts +218 -0
  243. package/src/entities/Entity.ts +696 -616
  244. package/src/entities/EntityCache.ts +41 -0
  245. package/src/entities/EntityMetadata.ts +364 -0
  246. package/src/entities/EntityStore.ts +384 -621
  247. package/src/entities/OperationBatcher.ts +251 -0
  248. package/src/entities/types.ts +154 -0
  249. package/src/files/EntityFile.ts +9 -4
  250. package/src/files/FileManager.ts +5 -3
  251. package/src/files/FileStorage.ts +7 -13
  252. package/src/files/utils.ts +6 -2
  253. package/src/idb.ts +51 -3
  254. package/src/index.ts +1 -1
  255. package/src/metadata/AckInfoStore.ts +1 -1
  256. package/src/metadata/BaselinesStore.ts +16 -24
  257. package/src/metadata/LocalReplicaStore.ts +13 -6
  258. package/src/metadata/Metadata.ts +109 -24
  259. package/src/metadata/OperationsStore.ts +37 -16
  260. package/src/migration/openDatabase.ts +32 -10
  261. package/src/queries/BaseQuery.ts +14 -1
  262. package/src/queries/CollectionQueries.ts +1 -1
  263. package/src/queries/FindAllQuery.ts +4 -0
  264. package/src/queries/QueryCache.ts +5 -0
  265. package/src/queries/QueryableStorage.ts +107 -0
  266. package/src/queries/dbQueries.ts +10 -3
  267. package/src/sync/FileSync.ts +2 -0
  268. package/src/sync/PushPullSync.ts +8 -1
  269. package/src/sync/Sync.ts +14 -6
  270. package/src/sync/WebSocketSync.ts +47 -10
  271. package/dist/cjs/entities/DocumentFamiliyCache.d.ts +0 -96
  272. package/dist/cjs/entities/DocumentFamiliyCache.js +0 -287
  273. package/dist/cjs/entities/DocumentFamiliyCache.js.map +0 -1
  274. package/dist/esm/entities/DocumentFamiliyCache.d.ts +0 -96
  275. package/dist/esm/entities/DocumentFamiliyCache.js +0 -283
  276. package/dist/esm/entities/DocumentFamiliyCache.js.map +0 -1
  277. package/src/entities/DocumentFamiliyCache.ts +0 -426
  278. package/src/entities/design.tldr +0 -808
@@ -1,134 +1,101 @@
1
- import { EventSubscriber, FileData, ObjectIdentifier, Operation, PatchCreator, StorageFieldSchema, StorageFieldsSchema, TimestampProvider } from '@verdant-web/common';
2
- import { EntityFile } from '../files/EntityFile.js';
3
- export declare const ADD_OPERATIONS = "@@addOperations";
4
- export declare const DELETE = "@@delete";
5
- export declare const REBASE = "@@rebase";
6
- declare const REFRESH = "@@refresh";
7
- export declare const DEEP_CHANGE = "@@deepChange";
8
- export interface CacheTools {
9
- computeView(oid: ObjectIdentifier): {
10
- view: any;
11
- deleted: boolean;
12
- lastTimestamp: number | null;
13
- };
14
- getEntity(params: {
15
- oid: ObjectIdentifier;
16
- fieldSchema: StorageFieldSchema;
17
- parent?: Entity;
18
- fieldKey?: string | number;
19
- }): Entity;
20
- hasOid(oid: ObjectIdentifier): boolean;
21
- weakRef<T extends object>(value: T): WeakRef<T>;
22
- }
23
- export interface StoreTools {
24
- addLocalOperations(operations: Operation[]): void;
1
+ import { EntityValidationProblem, EventSubscriber, ObjectIdentifier, PatchCreator, StorageFieldSchema } from '@verdant-web/common';
2
+ import { Context } from '../context.js';
3
+ import { FileManager } from '../files/FileManager.js';
4
+ import { EntityCache } from './EntityCache.js';
5
+ import { EntityFamilyMetadata, EntityMetadataView } from './EntityMetadata.js';
6
+ import { BaseEntityValue, DataFromInit, DeepPartial, EntityChange, EntityEvents, ListEntity, ListItemInit, ListItemValue, ObjectEntity } from './types.js';
7
+ import { EntityStoreEvents } from './EntityStore.js';
8
+ export interface EntityInit {
9
+ oid: ObjectIdentifier;
10
+ schema: StorageFieldSchema;
11
+ entityFamily?: EntityCache;
12
+ metadataFamily: EntityFamilyMetadata;
13
+ parent?: Entity;
14
+ ctx: Context;
15
+ files: FileManager;
16
+ readonlyKeys?: string[];
17
+ fieldPath?: (string | number)[];
25
18
  patchCreator: PatchCreator;
26
- addFile: (file: FileData) => void;
27
- getFile: (id: string) => EntityFile;
28
- time: TimestampProvider;
29
- now: string;
30
- }
31
- export type AccessibleEntityProperty<T> = T extends Array<any> ? number : T extends object ? keyof T : never;
32
- type DataFromInit<Init> = Init extends {
33
- [key: string]: any;
34
- } ? {
35
- [Key in keyof Init]: Init[Key];
36
- } : Init extends Array<any> ? Init : any;
37
- export type EntityShape<E extends Entity<any, any>> = E extends Entity<infer Value, any> ? Value : never;
38
- type DeletableKeys<T> = keyof {
39
- [Key in keyof T as IfNullableThen<T[Key], Key>]: Key;
40
- };
41
- type IfNullableThen<T, Out> = undefined extends T ? Out : null extends T ? Out : never;
42
- export declare function refreshEntity(entity: Entity<any, any>, info: EntityChangeInfo): void;
43
- export interface EntityChangeInfo {
44
- isLocal?: boolean;
19
+ events: EntityStoreEvents;
45
20
  }
46
- type EntityEvents = {
47
- change: (info: EntityChangeInfo) => void;
48
- changeDeep: (target: Entity<any, any>, info: EntityChangeInfo) => void;
49
- delete: (info: EntityChangeInfo) => void;
50
- restore: (info: EntityChangeInfo) => void;
51
- };
52
- type BaseEntityValue = {
53
- [Key: string]: any;
54
- } | any[];
55
- export declare class Entity<Init = any, KeyValue extends BaseEntityValue = any, Snapshot extends any = DataFromInit<Init>> implements ObjectEntity<Init, KeyValue, Snapshot>, ListEntity<Init, KeyValue, Snapshot> {
56
- protected _current: any | null;
21
+ export declare class Entity<Init = any, KeyValue extends BaseEntityValue = any, Snapshot extends any = DataFromInit<Init>> extends EventSubscriber<EntityEvents> implements ObjectEntity<Init, KeyValue, Snapshot>, ListEntity<Init, KeyValue, Snapshot> {
57
22
  readonly oid: ObjectIdentifier;
58
- readonly fieldPath: string[];
59
- readonly collection: string;
60
- protected readonly store: StoreTools;
61
- protected readonly fieldSchema: StorageFieldSchema | StorageFieldsSchema;
62
- protected readonly cache: CacheTools;
63
- protected _deleted: boolean;
64
- protected parent: WeakRef<Entity<any, any>> | undefined;
65
- protected readonly readonlyKeys: (keyof Init)[];
66
- private cachedSnapshot;
67
- private cachedDestructure;
23
+ private readonlyKeys;
24
+ private fieldPath;
25
+ private entityFamily;
26
+ private metadataFamily;
27
+ private schema;
28
+ private parent;
29
+ private ctx;
30
+ private files;
31
+ private patchCreator;
32
+ private events;
33
+ private _viewData;
34
+ private validationError;
68
35
  private cachedDeepUpdatedAt;
69
- private _updatedAt;
70
- protected events: EventSubscriber<EntityEvents>;
71
- protected hasSubscribersToDeepChanges(): boolean;
72
- get hasSubscribers(): boolean;
36
+ private wasDeletedLastChange;
37
+ private cachedView;
38
+ constructor({ oid, schema, entityFamily: childCache, parent, ctx, metadataFamily, readonlyKeys, files, patchCreator, events, }: EntityInit);
39
+ private onAdd;
40
+ private onReplace;
41
+ private onResetAll;
42
+ private get metadata();
43
+ /**
44
+ * The view of this Entity, not including nested
45
+ * entities (that's the snapshot - see #getSnapshot())
46
+ *
47
+ * Nested entities are represented by refs.
48
+ */
49
+ private get viewData();
50
+ /** convenience getter for viewData.view */
51
+ private get rawView();
52
+ /**
53
+ * An Entity's View includes the rendering of its underlying data,
54
+ * connecting of children where refs were, and validation
55
+ * and pruning according to schema.
56
+ */
57
+ private get view();
58
+ private childIsNull;
59
+ get uid(): string;
73
60
  get deleted(): boolean;
74
- protected get value(): any;
61
+ get invalid(): boolean;
75
62
  get isList(): any;
76
- get updatedAt(): number | null;
77
- get deepUpdatedAt(): number | null;
78
- get uid(): string;
79
- constructor({ oid, store, fieldSchema, cache, parent, onAllUnsubscribed, readonlyKeys, fieldPath, }: {
80
- oid: ObjectIdentifier;
81
- store: StoreTools;
82
- fieldSchema: StorageFieldSchema | StorageFieldsSchema;
83
- cache: CacheTools;
84
- parent?: Entity<any, any>;
85
- onAllUnsubscribed?: () => void;
86
- readonlyKeys?: (keyof Init)[];
87
- fieldPath?: string[];
88
- });
89
- private [REFRESH];
90
- private [DEEP_CHANGE];
91
- protected getChildFieldSchema: (key: any) => any;
92
- dispose: () => void;
93
- subscribe: <EventName extends keyof EntityEvents>(event: EventName, callback: EntityEvents[EventName]) => () => void;
94
- protected addPatches: (patches: Operation[]) => void;
95
- protected cloneCurrent: () => any;
96
- protected getSubObject: (oid: ObjectIdentifier, key: any) => Entity<any, any>;
97
- protected wrapValue: <Key extends keyof KeyValue>(value: any, key: Key) => KeyValue[Key];
98
- protected processInputValue: (value: any, key: any) => any;
99
- get: <Key extends keyof KeyValue>(key: Key) => KeyValue[Key];
100
- getAll: () => KeyValue;
101
- private getFileSnapshot;
63
+ get updatedAt(): number;
64
+ get deepUpdatedAt(): number;
102
65
  /**
103
- * Returns a copy of the entity and all sub-objects as
104
- * a plain object or array.
66
+ * @internal - this is relevant to Verdant's system, not users.
67
+ *
68
+ * Indicates whether this document is from an outdated version
69
+ * of the schema - which means it cannot be used until it is upgraded.
105
70
  */
106
- getSnapshot: () => any;
71
+ get isOutdatedVersion(): boolean;
107
72
  /**
108
- * Object methods
73
+ * Pruning - when entities have invalid children, we 'prune' that
74
+ * data up to the nearest prunable point - a nullable field,
75
+ * or a list.
109
76
  */
110
- keys: () => string[];
111
- entries: () => [string, any][];
112
- values: () => any[];
113
- set: <Key extends keyof Init>(key: Key, value: Init[Key]) => void;
114
- delete: (key: any) => void;
115
- private getDeleteMode;
116
- /** @deprecated - renamed to delete */
117
- remove: (key: any) => void;
118
- update: (value: DeepPartial<Init>, { replaceSubObjects, merge, }?: {
119
- /**
120
- * If true, merged sub-objects will be replaced entirely if there's
121
- * ambiguity about their identity.
122
- */
123
- replaceSubObjects?: boolean | undefined;
124
- /**
125
- * If false, omitted keys will erase their respective fields.
126
- */
127
- merge?: boolean | undefined;
128
- }) => void;
77
+ protected validate: (...args: unknown[]) => EntityValidationProblem | undefined;
78
+ private viewWithMappedChildren;
129
79
  /**
130
- * List methods
80
+ * A current snapshot of this Entity's data, including nested
81
+ * Entities.
131
82
  */
83
+ getSnapshot: () => any;
84
+ private addPendingOperations;
85
+ private addConfirmedData;
86
+ private replaceAllData;
87
+ private resetAllData;
88
+ private change;
89
+ protected deepChange: (target: Entity, ev: EntityChange) => void;
90
+ private getChild;
91
+ /**
92
+ * Gets a value from this Entity. If the value
93
+ * is an object, it will be wrapped in another
94
+ * Entity.
95
+ */
96
+ get: <Key extends keyof KeyValue>(key: Key) => KeyValue[Key];
97
+ private processInputValue;
98
+ private getDeleteMode;
132
99
  /**
133
100
  * Returns the referent value of an item in the list, used for
134
101
  * operations which act on items. if the item is an object,
@@ -136,16 +103,29 @@ export declare class Entity<Init = any, KeyValue extends BaseEntityValue = any,
136
103
  * is a primitive, it will return the primitive.
137
104
  */
138
105
  private getItemRefValue;
139
- get length(): any;
106
+ set: <Key extends keyof Init>(key: Key, value: Init[Key]) => void;
107
+ /**
108
+ * Returns a destructured version of this Entity, where child
109
+ * Entities are accessible at their respective keys.
110
+ */
111
+ getAll: () => KeyValue;
112
+ delete: (key: any) => void;
113
+ keys: () => string[];
114
+ entries: () => [string, Exclude<KeyValue[keyof KeyValue], undefined>][];
115
+ values: () => Exclude<KeyValue[keyof KeyValue], undefined>[];
116
+ update: (data: DeepPartial<Init>, { merge, replaceSubObjects, }?: {
117
+ replaceSubObjects?: boolean | undefined;
118
+ merge?: boolean | undefined;
119
+ }) => void;
120
+ get length(): number;
140
121
  push: (value: ListItemInit<Init>) => void;
141
122
  insert: (index: number, value: ListItemInit<Init>) => void;
142
123
  move: (from: number, to: number) => void;
143
124
  moveItem: (item: ListItemValue<KeyValue>, to: number) => void;
125
+ add: (value: ListItemValue<KeyValue>) => void;
144
126
  removeAll: (item: ListItemValue<KeyValue>) => void;
145
127
  removeFirst: (item: ListItemValue<KeyValue>) => void;
146
128
  removeLast: (item: ListItemValue<KeyValue>) => void;
147
- add: (item: ListItemValue<KeyValue>) => void;
148
- has: (item: ListItemValue<KeyValue>) => any;
149
129
  [Symbol.iterator](): {
150
130
  next: () => {
151
131
  readonly value: ListItemValue<KeyValue>;
@@ -155,66 +135,14 @@ export declare class Entity<Init = any, KeyValue extends BaseEntityValue = any,
155
135
  readonly done: true;
156
136
  };
157
137
  };
158
- private getAsWrapped;
159
138
  map: <U>(callback: (value: ListItemValue<KeyValue>, index: number) => U) => U[];
160
139
  filter: (callback: (value: ListItemValue<KeyValue>, index: number) => boolean) => ListItemValue<KeyValue>[];
140
+ has: (value: ListItemValue<KeyValue>) => boolean;
161
141
  forEach: (callback: (value: ListItemValue<KeyValue>, index: number) => void) => void;
162
142
  some: (predicate: (value: ListItemValue<KeyValue>) => boolean) => boolean;
163
143
  every: (predicate: (value: ListItemValue<KeyValue>) => boolean) => boolean;
164
144
  find: (predicate: (value: ListItemValue<KeyValue>) => boolean) => ListItemValue<KeyValue> | undefined;
165
- includes: (item: ListItemValue<KeyValue>) => any;
166
- }
167
- export interface BaseEntity<Init, Value extends BaseEntityValue, Snapshot = DataFromInit<Init>> {
168
- dispose: () => void;
169
- subscribe<EventName extends keyof EntityEvents>(event: EventName, callback: EntityEvents[EventName]): () => void;
170
- get<Key extends keyof Value>(key: Key): Value[Key];
171
- getAll(): Value;
172
- getSnapshot(): Snapshot;
173
- readonly deleted: boolean;
174
- readonly hasSubscribers: boolean;
175
- }
176
- type DeepPartial<T> = {
177
- [P in keyof T]?: T[P] extends Array<infer U> ? Array<DeepPartial<U>> : T[P] extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : DeepPartial<T[P]>;
178
- };
179
- export interface ObjectEntity<Init, Value extends BaseEntityValue, Snapshot = DataFromInit<Init>> extends BaseEntity<Init, Value, Snapshot> {
180
- keys(): string[];
181
- entries(): [string, Exclude<Value[keyof Value], undefined>][];
182
- values(): Exclude<Value[keyof Value], undefined>[];
183
- set<Key extends keyof Init>(key: Key, value: Init[Key]): void;
184
- delete(key: DeletableKeys<Value>): void;
185
- update(value: DeepPartial<Init>, options?: {
186
- replaceSubObjects?: boolean;
187
- merge?: boolean;
188
- }): void;
189
- readonly isList: false;
190
- }
191
- export interface ListEntity<Init, Value extends BaseEntityValue, Snapshot = DataFromInit<Init>> extends Iterable<ListItemValue<Value>>, BaseEntity<Init, Value, Snapshot> {
192
- readonly isList: true;
193
- readonly length: number;
194
- push(value: ListItemInit<Init>): void;
195
- insert(index: number, value: ListItemInit<Init>): void;
196
- move(from: number, to: number): void;
197
- moveItem(item: ListItemValue<Value>, to: number): void;
198
- /**
199
- * A Set operation which adds a value if an equivalent value is not already present.
200
- * Object values are never the same.
201
- */
202
- add(value: ListItemValue<Value>): void;
203
- removeAll(item: ListItemValue<Value>): void;
204
- removeFirst(item: ListItemValue<Value>): void;
205
- removeLast(item: ListItemValue<Value>): void;
206
- map<U>(callback: (value: ListItemValue<Value>, index: number) => U): U[];
207
- filter(callback: (value: ListItemValue<Value>, index: number) => boolean): ListItemValue<Value>[];
208
- delete(index: number): void;
209
- has(value: ListItemValue<Value>): boolean;
210
- forEach(callback: (value: ListItemValue<Value>, index: number) => void): void;
211
- some(predicate: (value: ListItemValue<Value>) => boolean): boolean;
212
- every(predicate: (value: ListItemValue<Value>) => boolean): boolean;
213
- find(predicate: (value: ListItemValue<Value>) => boolean): ListItemValue<Value> | undefined;
214
- includes(value: ListItemValue<Value>): boolean;
145
+ includes: (value: ListItemValue<KeyValue>) => boolean;
146
+ __getViewData__: (oid: ObjectIdentifier, type: 'confirmed' | 'pending') => EntityMetadataView;
147
+ __getFamilyOids__: () => string[];
215
148
  }
216
- export type AnyEntity<Init, KeyValue extends BaseEntityValue, Snapshot extends any> = ListEntity<Init, KeyValue, Snapshot> | ObjectEntity<Init, KeyValue, Snapshot>;
217
- type ListItemValue<KeyValue> = KeyValue extends Array<infer T> ? T : never;
218
- type ListItemInit<Init> = Init extends Array<infer T> ? T : never;
219
- export type EntityDestructured<T extends AnyEntity<any, any, any> | null> = (T extends ListEntity<any, infer KeyValue, any> ? KeyValue : T extends ObjectEntity<any, infer KeyValue, any> ? KeyValue : never) | (T extends null ? null : never);
220
- export {};