@verdant-web/store 2.0.1 → 2.0.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.
- package/dist/cjs/BackoffScheduler.d.ts +19 -19
- package/dist/cjs/BackoffScheduler.js +44 -44
- package/dist/cjs/DocumentManager.d.ts +28 -28
- package/dist/cjs/DocumentManager.js +44 -44
- package/dist/cjs/IDBService.d.ts +9 -9
- package/dist/cjs/IDBService.js +46 -46
- package/dist/cjs/UndoHistory.d.ts +16 -16
- package/dist/cjs/UndoHistory.js +50 -50
- package/dist/cjs/__tests__/batching.test.d.ts +1 -1
- package/dist/cjs/__tests__/batching.test.js +44 -44
- package/dist/cjs/__tests__/documents.test.d.ts +1 -1
- package/dist/cjs/__tests__/documents.test.js +398 -398
- package/dist/cjs/__tests__/fixtures/testStorage.d.ts +118 -118
- package/dist/cjs/__tests__/fixtures/testStorage.js +115 -115
- package/dist/cjs/__tests__/queries.test.d.ts +1 -1
- package/dist/cjs/__tests__/queries.test.js +262 -262
- package/dist/cjs/__tests__/setup/indexedDB.d.ts +1 -1
- package/dist/cjs/__tests__/setup/indexedDB.js +3 -3
- package/dist/cjs/__tests__/undo.test.d.ts +1 -1
- package/dist/cjs/__tests__/undo.test.js +86 -86
- package/dist/cjs/client/Client.d.ts +86 -86
- package/dist/cjs/client/Client.js +226 -226
- package/dist/cjs/client/ClientDescriptor.d.ts +62 -62
- package/dist/cjs/client/ClientDescriptor.js +108 -108
- package/dist/cjs/constants.d.ts +1 -1
- package/dist/cjs/constants.js +4 -4
- package/dist/cjs/context.d.ts +17 -17
- package/dist/cjs/context.js +2 -2
- package/dist/cjs/files/EntityFile.d.ts +27 -27
- package/dist/cjs/files/EntityFile.js +71 -71
- package/dist/cjs/files/FileManager.d.ts +42 -42
- package/dist/cjs/files/FileManager.js +145 -145
- package/dist/cjs/files/FileStorage.d.ts +27 -27
- package/dist/cjs/files/FileStorage.js +93 -93
- package/dist/cjs/files/utils.d.ts +8 -8
- package/dist/cjs/files/utils.js +55 -55
- package/dist/cjs/files/utils.test.d.ts +1 -1
- package/dist/cjs/files/utils.test.js +80 -80
- package/dist/cjs/idb.d.ts +8 -8
- package/dist/cjs/idb.js +87 -87
- package/dist/cjs/index.d.ts +19 -19
- package/dist/cjs/index.js +20 -20
- package/dist/cjs/indexes.d.ts +3 -3
- package/dist/cjs/indexes.js +19 -19
- package/dist/cjs/metadata/AckInfoStore.d.ts +10 -10
- package/dist/cjs/metadata/AckInfoStore.js +25 -25
- package/dist/cjs/metadata/BaselinesStore.d.ts +33 -33
- package/dist/cjs/metadata/BaselinesStore.js +59 -59
- package/dist/cjs/metadata/LocalReplicaStore.d.ts +17 -17
- package/dist/cjs/metadata/LocalReplicaStore.js +47 -47
- package/dist/cjs/metadata/MessageCreator.d.ts +19 -19
- package/dist/cjs/metadata/MessageCreator.js +127 -127
- package/dist/cjs/metadata/Metadata.d.ts +106 -106
- package/dist/cjs/metadata/Metadata.js +336 -336
- package/dist/cjs/metadata/OperationsStore.d.ts +50 -50
- package/dist/cjs/metadata/OperationsStore.js +145 -145
- package/dist/cjs/metadata/SchemaStore.d.ts +9 -9
- package/dist/cjs/metadata/SchemaStore.js +38 -38
- package/dist/cjs/metadata/openMetadataDatabase.d.ts +8 -8
- package/dist/cjs/metadata/openMetadataDatabase.js +105 -105
- package/dist/cjs/openDocumentDatabase.d.ts +12 -12
- package/dist/cjs/openDocumentDatabase.js +424 -424
- package/dist/cjs/queries2/BaseQuery.d.ts +39 -39
- package/dist/cjs/queries2/BaseQuery.js +98 -98
- package/dist/cjs/queries2/CollectionQueries.d.ts +55 -55
- package/dist/cjs/queries2/CollectionQueries.js +82 -82
- package/dist/cjs/queries2/FindAllQuery.d.ts +11 -11
- package/dist/cjs/queries2/FindAllQuery.js +33 -33
- package/dist/cjs/queries2/FindInfiniteQuery.d.ts +18 -18
- package/dist/cjs/queries2/FindInfiniteQuery.js +60 -60
- package/dist/cjs/queries2/FindOneQuery.d.ts +11 -11
- package/dist/cjs/queries2/FindOneQuery.js +33 -33
- package/dist/cjs/queries2/FindPageQuery.d.ts +23 -23
- package/dist/cjs/queries2/FindPageQuery.js +67 -67
- package/dist/cjs/queries2/GetQuery.d.ts +10 -10
- package/dist/cjs/queries2/GetQuery.js +29 -29
- package/dist/cjs/queries2/QueryCache.d.ts +16 -16
- package/dist/cjs/queries2/QueryCache.js +39 -39
- package/dist/cjs/queries2/dbQueries.d.ts +22 -22
- package/dist/cjs/queries2/dbQueries.js +125 -125
- package/dist/cjs/queries2/keys.d.ts +10 -10
- package/dist/cjs/queries2/keys.js +33 -33
- package/dist/cjs/queries2/ranges.d.ts +2 -2
- package/dist/cjs/queries2/ranges.js +69 -69
- package/dist/cjs/queries2/types.d.ts +6 -6
- package/dist/cjs/queries2/types.js +2 -2
- package/dist/cjs/queries2/utils.d.ts +1 -1
- package/dist/cjs/queries2/utils.js +19 -19
- package/dist/cjs/reactives/DocumentFamiliyCache.d.ts +47 -47
- package/dist/cjs/reactives/DocumentFamiliyCache.js +210 -210
- package/dist/cjs/reactives/Entity.d.ts +191 -191
- package/dist/cjs/reactives/Entity.js +462 -462
- package/dist/cjs/reactives/EntityStore.d.ts +84 -84
- package/dist/cjs/reactives/EntityStore.js +421 -421
- package/dist/cjs/reactives/FakeWeakRef.d.ts +11 -11
- package/dist/cjs/reactives/FakeWeakRef.js +18 -18
- package/dist/cjs/sync/FileSync.d.ts +23 -23
- package/dist/cjs/sync/FileSync.js +84 -84
- package/dist/cjs/sync/Heartbeat.d.ts +24 -24
- package/dist/cjs/sync/Heartbeat.js +55 -55
- package/dist/cjs/sync/PresenceManager.d.ts +41 -41
- package/dist/cjs/sync/PresenceManager.js +107 -107
- package/dist/cjs/sync/PushPullSync.d.ts +36 -36
- package/dist/cjs/sync/PushPullSync.js +141 -141
- package/dist/cjs/sync/ServerSyncEndpointProvider.d.ts +27 -27
- package/dist/cjs/sync/ServerSyncEndpointProvider.js +64 -64
- package/dist/cjs/sync/Sync.d.ts +127 -127
- package/dist/cjs/sync/Sync.js +244 -244
- package/dist/cjs/sync/WebSocketSync.d.ts +41 -41
- package/dist/cjs/sync/WebSocketSync.js +183 -183
- package/dist/cjs/types.d.ts +5 -5
- package/dist/cjs/types.js +2 -2
- package/dist/cjs/utils/Disposable.d.ts +6 -6
- package/dist/cjs/utils/Disposable.js +18 -18
- package/dist/cjs/utils/Resolvable.d.ts +8 -8
- package/dist/cjs/utils/Resolvable.js +22 -22
- package/dist/esm/BackoffScheduler.d.ts +19 -19
- package/dist/esm/BackoffScheduler.js +39 -39
- package/dist/esm/DocumentManager.d.ts +28 -28
- package/dist/esm/DocumentManager.js +40 -40
- package/dist/esm/IDBService.d.ts +9 -9
- package/dist/esm/IDBService.js +42 -42
- package/dist/esm/UndoHistory.d.ts +16 -16
- package/dist/esm/UndoHistory.js +46 -46
- package/dist/esm/__tests__/batching.test.d.ts +1 -1
- package/dist/esm/__tests__/batching.test.js +42 -42
- package/dist/esm/__tests__/documents.test.d.ts +1 -1
- package/dist/esm/__tests__/documents.test.js +396 -396
- package/dist/esm/__tests__/fixtures/testStorage.d.ts +118 -118
- package/dist/esm/__tests__/fixtures/testStorage.js +111 -111
- package/dist/esm/__tests__/queries.test.d.ts +1 -1
- package/dist/esm/__tests__/queries.test.js +260 -260
- package/dist/esm/__tests__/setup/indexedDB.d.ts +1 -1
- package/dist/esm/__tests__/setup/indexedDB.js +1 -1
- package/dist/esm/__tests__/undo.test.d.ts +1 -1
- package/dist/esm/__tests__/undo.test.js +84 -84
- package/dist/esm/client/Client.d.ts +86 -86
- package/dist/esm/client/Client.js +222 -222
- package/dist/esm/client/ClientDescriptor.d.ts +62 -62
- package/dist/esm/client/ClientDescriptor.js +104 -104
- package/dist/esm/constants.d.ts +1 -1
- package/dist/esm/constants.js +1 -1
- package/dist/esm/context.d.ts +17 -17
- package/dist/esm/context.js +1 -1
- package/dist/esm/files/EntityFile.d.ts +27 -27
- package/dist/esm/files/EntityFile.js +67 -67
- package/dist/esm/files/FileManager.d.ts +42 -42
- package/dist/esm/files/FileManager.js +141 -141
- package/dist/esm/files/FileStorage.d.ts +27 -27
- package/dist/esm/files/FileStorage.js +88 -88
- package/dist/esm/files/utils.d.ts +8 -8
- package/dist/esm/files/utils.js +46 -46
- package/dist/esm/files/utils.test.d.ts +1 -1
- package/dist/esm/files/utils.test.js +78 -78
- package/dist/esm/idb.d.ts +8 -8
- package/dist/esm/idb.js +79 -79
- package/dist/esm/index.d.ts +19 -19
- package/dist/esm/index.js +11 -11
- package/dist/esm/indexes.d.ts +3 -3
- package/dist/esm/indexes.js +14 -14
- package/dist/esm/metadata/AckInfoStore.d.ts +10 -10
- package/dist/esm/metadata/AckInfoStore.js +21 -21
- package/dist/esm/metadata/BaselinesStore.d.ts +33 -33
- package/dist/esm/metadata/BaselinesStore.js +55 -55
- package/dist/esm/metadata/LocalReplicaStore.d.ts +17 -17
- package/dist/esm/metadata/LocalReplicaStore.js +40 -40
- package/dist/esm/metadata/MessageCreator.d.ts +19 -19
- package/dist/esm/metadata/MessageCreator.js +123 -123
- package/dist/esm/metadata/Metadata.d.ts +106 -106
- package/dist/esm/metadata/Metadata.js +332 -332
- package/dist/esm/metadata/OperationsStore.d.ts +50 -50
- package/dist/esm/metadata/OperationsStore.js +141 -141
- package/dist/esm/metadata/SchemaStore.d.ts +9 -9
- package/dist/esm/metadata/SchemaStore.js +34 -34
- package/dist/esm/metadata/openMetadataDatabase.d.ts +8 -8
- package/dist/esm/metadata/openMetadataDatabase.js +101 -101
- package/dist/esm/openDocumentDatabase.d.ts +12 -12
- package/dist/esm/openDocumentDatabase.js +420 -420
- package/dist/esm/queries2/BaseQuery.d.ts +39 -39
- package/dist/esm/queries2/BaseQuery.js +94 -94
- package/dist/esm/queries2/CollectionQueries.d.ts +55 -55
- package/dist/esm/queries2/CollectionQueries.js +78 -78
- package/dist/esm/queries2/FindAllQuery.d.ts +11 -11
- package/dist/esm/queries2/FindAllQuery.js +29 -29
- package/dist/esm/queries2/FindInfiniteQuery.d.ts +18 -18
- package/dist/esm/queries2/FindInfiniteQuery.js +56 -56
- package/dist/esm/queries2/FindOneQuery.d.ts +11 -11
- package/dist/esm/queries2/FindOneQuery.js +29 -29
- package/dist/esm/queries2/FindPageQuery.d.ts +23 -23
- package/dist/esm/queries2/FindPageQuery.js +63 -63
- package/dist/esm/queries2/GetQuery.d.ts +10 -10
- package/dist/esm/queries2/GetQuery.js +25 -25
- package/dist/esm/queries2/QueryCache.d.ts +16 -16
- package/dist/esm/queries2/QueryCache.js +35 -35
- package/dist/esm/queries2/dbQueries.d.ts +22 -22
- package/dist/esm/queries2/dbQueries.js +119 -119
- package/dist/esm/queries2/keys.d.ts +10 -10
- package/dist/esm/queries2/keys.js +29 -29
- package/dist/esm/queries2/ranges.d.ts +2 -2
- package/dist/esm/queries2/ranges.js +65 -65
- package/dist/esm/queries2/types.d.ts +6 -6
- package/dist/esm/queries2/types.js +1 -1
- package/dist/esm/queries2/utils.d.ts +1 -1
- package/dist/esm/queries2/utils.js +15 -15
- package/dist/esm/reactives/DocumentFamiliyCache.d.ts +47 -47
- package/dist/esm/reactives/DocumentFamiliyCache.js +206 -206
- package/dist/esm/reactives/Entity.d.ts +191 -191
- package/dist/esm/reactives/Entity.js +457 -457
- package/dist/esm/reactives/EntityStore.d.ts +84 -84
- package/dist/esm/reactives/EntityStore.js +417 -417
- package/dist/esm/reactives/FakeWeakRef.d.ts +11 -11
- package/dist/esm/reactives/FakeWeakRef.js +14 -14
- package/dist/esm/sync/FileSync.d.ts +23 -23
- package/dist/esm/sync/FileSync.js +80 -80
- package/dist/esm/sync/Heartbeat.d.ts +24 -24
- package/dist/esm/sync/Heartbeat.js +51 -51
- package/dist/esm/sync/PresenceManager.d.ts +41 -41
- package/dist/esm/sync/PresenceManager.js +103 -103
- package/dist/esm/sync/PushPullSync.d.ts +36 -36
- package/dist/esm/sync/PushPullSync.js +137 -137
- package/dist/esm/sync/ServerSyncEndpointProvider.d.ts +27 -27
- package/dist/esm/sync/ServerSyncEndpointProvider.js +57 -57
- package/dist/esm/sync/Sync.d.ts +127 -127
- package/dist/esm/sync/Sync.js +239 -239
- package/dist/esm/sync/{WebsocketSync.d.ts → WebSocketSync.d.ts} +41 -41
- package/dist/esm/sync/{WebsocketSync.js → WebSocketSync.js} +179 -179
- package/dist/esm/types.d.ts +5 -5
- package/dist/esm/types.js +1 -1
- package/dist/esm/utils/Disposable.d.ts +6 -6
- package/dist/esm/utils/Disposable.js +14 -14
- package/dist/esm/utils/Resolvable.d.ts +8 -8
- package/dist/esm/utils/Resolvable.js +18 -18
- package/dist/tsconfig-cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/dist/cjs/AckInfoStore.d.ts +0 -10
- package/dist/cjs/AckInfoStore.js +0 -26
- package/dist/cjs/AckInfoStore.js.map +0 -1
- package/dist/cjs/BaselinesStore.d.ts +0 -10
- package/dist/cjs/BaselinesStore.js +0 -36
- package/dist/cjs/BaselinesStore.js.map +0 -1
- package/dist/cjs/Entity.d.ts +0 -96
- package/dist/cjs/Entity.js +0 -345
- package/dist/cjs/Entity.js.map +0 -1
- package/dist/cjs/EntityStore.d.ts +0 -36
- package/dist/cjs/EntityStore.js +0 -172
- package/dist/cjs/EntityStore.js.map +0 -1
- package/dist/cjs/LocalHistoryStore.d.ts +0 -15
- package/dist/cjs/LocalHistoryStore.js +0 -53
- package/dist/cjs/LocalHistoryStore.js.map +0 -1
- package/dist/cjs/LocalReplicaStore.d.ts +0 -13
- package/dist/cjs/LocalReplicaStore.js +0 -49
- package/dist/cjs/LocalReplicaStore.js.map +0 -1
- package/dist/cjs/MessageCreator.d.ts +0 -19
- package/dist/cjs/MessageCreator.js +0 -104
- package/dist/cjs/MessageCreator.js.map +0 -1
- package/dist/cjs/Metadata.d.ts +0 -91
- package/dist/cjs/Metadata.js +0 -250
- package/dist/cjs/Metadata.js.map +0 -1
- package/dist/cjs/OperationsStore.d.ts +0 -38
- package/dist/cjs/OperationsStore.js +0 -146
- package/dist/cjs/OperationsStore.js.map +0 -1
- package/dist/cjs/PresenceManager.d.ts +0 -30
- package/dist/cjs/PresenceManager.js +0 -89
- package/dist/cjs/PresenceManager.js.map +0 -1
- package/dist/cjs/Query.d.ts +0 -26
- package/dist/cjs/Query.js +0 -86
- package/dist/cjs/Query.js.map +0 -1
- package/dist/cjs/QueryMaker.d.ts +0 -18
- package/dist/cjs/QueryMaker.js +0 -98
- package/dist/cjs/QueryMaker.js.map +0 -1
- package/dist/cjs/QueryStore.d.ts +0 -38
- package/dist/cjs/QueryStore.js +0 -146
- package/dist/cjs/QueryStore.js.map +0 -1
- package/dist/cjs/SchemaStore.d.ts +0 -9
- package/dist/cjs/SchemaStore.js +0 -35
- package/dist/cjs/SchemaStore.js.map +0 -1
- package/dist/cjs/Storage.d.ts +0 -147
- package/dist/cjs/Storage.js +0 -346
- package/dist/cjs/Storage.js.map +0 -1
- package/dist/cjs/Sync.d.ts +0 -117
- package/dist/cjs/Sync.js +0 -561
- package/dist/cjs/Sync.js.map +0 -1
- package/dist/cjs/SyncHarness.d.ts +0 -45
- package/dist/cjs/SyncHarness.js +0 -110
- package/dist/cjs/SyncHarness.js.map +0 -1
- package/dist/cjs/metadata/LocalHistoryStore.d.ts +0 -15
- package/dist/cjs/metadata/LocalHistoryStore.js +0 -53
- package/dist/cjs/metadata/LocalHistoryStore.js.map +0 -1
- package/dist/cjs/queries/LiveQuery.d.ts +0 -28
- package/dist/cjs/queries/LiveQuery.js +0 -96
- package/dist/cjs/queries/LiveQuery.js.map +0 -1
- package/dist/cjs/queries/LiveQueryMaker.d.ts +0 -15
- package/dist/cjs/queries/LiveQueryMaker.js +0 -42
- package/dist/cjs/queries/LiveQueryMaker.js.map +0 -1
- package/dist/cjs/queries/LiveQueryStore.d.ts +0 -33
- package/dist/cjs/queries/LiveQueryStore.js +0 -85
- package/dist/cjs/queries/LiveQueryStore.js.map +0 -1
- package/dist/cjs/queries/Query.d.ts +0 -18
- package/dist/cjs/queries/Query.js +0 -36
- package/dist/cjs/queries/Query.js.map +0 -1
- package/dist/cjs/queries/QueryMaker.d.ts +0 -14
- package/dist/cjs/queries/QueryMaker.js +0 -42
- package/dist/cjs/queries/QueryMaker.js.map +0 -1
- package/dist/cjs/queries/QueryStore.d.ts +0 -35
- package/dist/cjs/queries/QueryStore.js +0 -130
- package/dist/cjs/queries/QueryStore.js.map +0 -1
- package/dist/cjs/queries/ranges.d.ts +0 -2
- package/dist/cjs/queries/ranges.js +0 -70
- package/dist/cjs/queries/ranges.js.map +0 -1
- package/dist/cjs/v2/AckInfoStore.d.ts +0 -10
- package/dist/cjs/v2/AckInfoStore.js +0 -26
- package/dist/cjs/v2/AckInfoStore.js.map +0 -1
- package/dist/cjs/v2/BaselinesStore.d.ts +0 -10
- package/dist/cjs/v2/BaselinesStore.js +0 -36
- package/dist/cjs/v2/BaselinesStore.js.map +0 -1
- package/dist/cjs/v2/DocumentManager.d.ts +0 -19
- package/dist/cjs/v2/DocumentManager.js +0 -47
- package/dist/cjs/v2/DocumentManager.js.map +0 -1
- package/dist/cjs/v2/Entity.d.ts +0 -87
- package/dist/cjs/v2/Entity.js +0 -305
- package/dist/cjs/v2/Entity.js.map +0 -1
- package/dist/cjs/v2/EntityStore.d.ts +0 -37
- package/dist/cjs/v2/EntityStore.js +0 -165
- package/dist/cjs/v2/EntityStore.js.map +0 -1
- package/dist/cjs/v2/IDBService.d.ts +0 -7
- package/dist/cjs/v2/IDBService.js +0 -26
- package/dist/cjs/v2/IDBService.js.map +0 -1
- package/dist/cjs/v2/LocalHistoryStore.d.ts +0 -15
- package/dist/cjs/v2/LocalHistoryStore.js +0 -53
- package/dist/cjs/v2/LocalHistoryStore.js.map +0 -1
- package/dist/cjs/v2/LocalReplicaStore.d.ts +0 -14
- package/dist/cjs/v2/LocalReplicaStore.js +0 -49
- package/dist/cjs/v2/LocalReplicaStore.js.map +0 -1
- package/dist/cjs/v2/MessageCreator.d.ts +0 -19
- package/dist/cjs/v2/MessageCreator.js +0 -99
- package/dist/cjs/v2/MessageCreator.js.map +0 -1
- package/dist/cjs/v2/Metadata.d.ts +0 -90
- package/dist/cjs/v2/Metadata.js +0 -251
- package/dist/cjs/v2/Metadata.js.map +0 -1
- package/dist/cjs/v2/OperationsStore.d.ts +0 -38
- package/dist/cjs/v2/OperationsStore.js +0 -146
- package/dist/cjs/v2/OperationsStore.js.map +0 -1
- package/dist/cjs/v2/PresenceManager.d.ts +0 -24
- package/dist/cjs/v2/PresenceManager.js +0 -73
- package/dist/cjs/v2/PresenceManager.js.map +0 -1
- package/dist/cjs/v2/Query.d.ts +0 -24
- package/dist/cjs/v2/Query.js +0 -79
- package/dist/cjs/v2/Query.js.map +0 -1
- package/dist/cjs/v2/QueryMaker.d.ts +0 -16
- package/dist/cjs/v2/QueryMaker.js +0 -84
- package/dist/cjs/v2/QueryMaker.js.map +0 -1
- package/dist/cjs/v2/QueryStore.d.ts +0 -26
- package/dist/cjs/v2/QueryStore.js +0 -136
- package/dist/cjs/v2/QueryStore.js.map +0 -1
- package/dist/cjs/v2/SchemaStore.d.ts +0 -9
- package/dist/cjs/v2/SchemaStore.js +0 -35
- package/dist/cjs/v2/SchemaStore.js.map +0 -1
- package/dist/cjs/v2/Storage.d.ts +0 -80
- package/dist/cjs/v2/Storage.js +0 -154
- package/dist/cjs/v2/Storage.js.map +0 -1
- package/dist/cjs/v2/Sync.d.ts +0 -42
- package/dist/cjs/v2/Sync.js +0 -98
- package/dist/cjs/v2/Sync.js.map +0 -1
- package/dist/cjs/v2/SyncHarness.d.ts +0 -45
- package/dist/cjs/v2/SyncHarness.js +0 -110
- package/dist/cjs/v2/SyncHarness.js.map +0 -1
- package/dist/cjs/v2/__tests__/documents.test.d.ts +0 -1
- package/dist/cjs/v2/__tests__/documents.test.js +0 -185
- package/dist/cjs/v2/__tests__/documents.test.js.map +0 -1
- package/dist/cjs/v2/__tests__/fixtures/testStorage.d.ts +0 -189
- package/dist/cjs/v2/__tests__/fixtures/testStorage.js +0 -93
- package/dist/cjs/v2/__tests__/fixtures/testStorage.js.map +0 -1
- package/dist/cjs/v2/__tests__/queries.test.d.ts +0 -1
- package/dist/cjs/v2/__tests__/queries.test.js +0 -92
- package/dist/cjs/v2/__tests__/queries.test.js.map +0 -1
- package/dist/cjs/v2/__tests__/setup/indexedDB.d.ts +0 -1
- package/dist/cjs/v2/__tests__/setup/indexedDB.js +0 -4
- package/dist/cjs/v2/__tests__/setup/indexedDB.js.map +0 -1
- package/dist/cjs/v2/constants.d.ts +0 -1
- package/dist/cjs/v2/constants.js +0 -5
- package/dist/cjs/v2/constants.js.map +0 -1
- package/dist/cjs/v2/idb.d.ts +0 -6
- package/dist/cjs/v2/idb.js +0 -71
- package/dist/cjs/v2/idb.js.map +0 -1
- package/dist/cjs/v2/index.d.ts +0 -6
- package/dist/cjs/v2/index.js +0 -14
- package/dist/cjs/v2/index.js.map +0 -1
- package/dist/cjs/v2/indexes.d.ts +0 -3
- package/dist/cjs/v2/indexes.js +0 -20
- package/dist/cjs/v2/indexes.js.map +0 -1
- package/dist/cjs/v2/openDocumentDatabase.d.ts +0 -9
- package/dist/cjs/v2/openDocumentDatabase.js +0 -100
- package/dist/cjs/v2/openDocumentDatabase.js.map +0 -1
- package/dist/cjs/v2/types.d.ts +0 -3
- package/dist/cjs/v2/types.js +0 -3
- package/dist/cjs/v2/types.js.map +0 -1
- package/dist/esm/AckInfoStore.d.ts +0 -10
- package/dist/esm/AckInfoStore.js +0 -22
- package/dist/esm/AckInfoStore.js.map +0 -1
- package/dist/esm/BaselinesStore.d.ts +0 -10
- package/dist/esm/BaselinesStore.js +0 -32
- package/dist/esm/BaselinesStore.js.map +0 -1
- package/dist/esm/Entity.d.ts +0 -96
- package/dist/esm/Entity.js +0 -337
- package/dist/esm/Entity.js.map +0 -1
- package/dist/esm/EntityStore.d.ts +0 -36
- package/dist/esm/EntityStore.js +0 -168
- package/dist/esm/EntityStore.js.map +0 -1
- package/dist/esm/LocalHistoryStore.d.ts +0 -15
- package/dist/esm/LocalHistoryStore.js +0 -49
- package/dist/esm/LocalHistoryStore.js.map +0 -1
- package/dist/esm/LocalReplicaStore.d.ts +0 -13
- package/dist/esm/LocalReplicaStore.js +0 -42
- package/dist/esm/LocalReplicaStore.js.map +0 -1
- package/dist/esm/MessageCreator.d.ts +0 -19
- package/dist/esm/MessageCreator.js +0 -97
- package/dist/esm/MessageCreator.js.map +0 -1
- package/dist/esm/Metadata.d.ts +0 -91
- package/dist/esm/Metadata.js +0 -245
- package/dist/esm/Metadata.js.map +0 -1
- package/dist/esm/OperationsStore.d.ts +0 -38
- package/dist/esm/OperationsStore.js +0 -142
- package/dist/esm/OperationsStore.js.map +0 -1
- package/dist/esm/PresenceManager.d.ts +0 -30
- package/dist/esm/PresenceManager.js +0 -85
- package/dist/esm/PresenceManager.js.map +0 -1
- package/dist/esm/Query.d.ts +0 -26
- package/dist/esm/Query.js +0 -82
- package/dist/esm/Query.js.map +0 -1
- package/dist/esm/QueryMaker.d.ts +0 -18
- package/dist/esm/QueryMaker.js +0 -94
- package/dist/esm/QueryMaker.js.map +0 -1
- package/dist/esm/QueryStore.d.ts +0 -38
- package/dist/esm/QueryStore.js +0 -142
- package/dist/esm/QueryStore.js.map +0 -1
- package/dist/esm/SchemaStore.d.ts +0 -9
- package/dist/esm/SchemaStore.js +0 -31
- package/dist/esm/SchemaStore.js.map +0 -1
- package/dist/esm/Storage.d.ts +0 -147
- package/dist/esm/Storage.js +0 -341
- package/dist/esm/Storage.js.map +0 -1
- package/dist/esm/Sync.d.ts +0 -117
- package/dist/esm/Sync.js +0 -553
- package/dist/esm/Sync.js.map +0 -1
- package/dist/esm/SyncHarness.d.ts +0 -45
- package/dist/esm/SyncHarness.js +0 -105
- package/dist/esm/SyncHarness.js.map +0 -1
- package/dist/esm/metadata/LocalHistoryStore.d.ts +0 -15
- package/dist/esm/metadata/LocalHistoryStore.js +0 -49
- package/dist/esm/metadata/LocalHistoryStore.js.map +0 -1
- package/dist/esm/queries/LiveQuery.d.ts +0 -28
- package/dist/esm/queries/LiveQuery.js +0 -92
- package/dist/esm/queries/LiveQuery.js.map +0 -1
- package/dist/esm/queries/LiveQueryMaker.d.ts +0 -15
- package/dist/esm/queries/LiveQueryMaker.js +0 -38
- package/dist/esm/queries/LiveQueryMaker.js.map +0 -1
- package/dist/esm/queries/LiveQueryStore.d.ts +0 -33
- package/dist/esm/queries/LiveQueryStore.js +0 -81
- package/dist/esm/queries/LiveQueryStore.js.map +0 -1
- package/dist/esm/queries/Query.d.ts +0 -18
- package/dist/esm/queries/Query.js +0 -32
- package/dist/esm/queries/Query.js.map +0 -1
- package/dist/esm/queries/QueryMaker.d.ts +0 -14
- package/dist/esm/queries/QueryMaker.js +0 -38
- package/dist/esm/queries/QueryMaker.js.map +0 -1
- package/dist/esm/queries/QueryStore.d.ts +0 -35
- package/dist/esm/queries/QueryStore.js +0 -126
- package/dist/esm/queries/QueryStore.js.map +0 -1
- package/dist/esm/queries/ranges.d.ts +0 -2
- package/dist/esm/queries/ranges.js +0 -66
- package/dist/esm/queries/ranges.js.map +0 -1
- package/dist/esm/v2/AckInfoStore.d.ts +0 -10
- package/dist/esm/v2/AckInfoStore.js +0 -22
- package/dist/esm/v2/AckInfoStore.js.map +0 -1
- package/dist/esm/v2/BaselinesStore.d.ts +0 -10
- package/dist/esm/v2/BaselinesStore.js +0 -32
- package/dist/esm/v2/BaselinesStore.js.map +0 -1
- package/dist/esm/v2/DocumentManager.d.ts +0 -19
- package/dist/esm/v2/DocumentManager.js +0 -43
- package/dist/esm/v2/DocumentManager.js.map +0 -1
- package/dist/esm/v2/Entity.d.ts +0 -91
- package/dist/esm/v2/Entity.js +0 -305
- package/dist/esm/v2/Entity.js.map +0 -1
- package/dist/esm/v2/EntityStore.d.ts +0 -37
- package/dist/esm/v2/EntityStore.js +0 -166
- package/dist/esm/v2/EntityStore.js.map +0 -1
- package/dist/esm/v2/IDBService.d.ts +0 -7
- package/dist/esm/v2/IDBService.js +0 -22
- package/dist/esm/v2/IDBService.js.map +0 -1
- package/dist/esm/v2/LocalHistoryStore.d.ts +0 -15
- package/dist/esm/v2/LocalHistoryStore.js +0 -49
- package/dist/esm/v2/LocalHistoryStore.js.map +0 -1
- package/dist/esm/v2/LocalReplicaStore.d.ts +0 -14
- package/dist/esm/v2/LocalReplicaStore.js +0 -42
- package/dist/esm/v2/LocalReplicaStore.js.map +0 -1
- package/dist/esm/v2/MessageCreator.d.ts +0 -19
- package/dist/esm/v2/MessageCreator.js +0 -92
- package/dist/esm/v2/MessageCreator.js.map +0 -1
- package/dist/esm/v2/Metadata.d.ts +0 -90
- package/dist/esm/v2/Metadata.js +0 -246
- package/dist/esm/v2/Metadata.js.map +0 -1
- package/dist/esm/v2/OperationsStore.d.ts +0 -38
- package/dist/esm/v2/OperationsStore.js +0 -142
- package/dist/esm/v2/OperationsStore.js.map +0 -1
- package/dist/esm/v2/PresenceManager.d.ts +0 -24
- package/dist/esm/v2/PresenceManager.js +0 -69
- package/dist/esm/v2/PresenceManager.js.map +0 -1
- package/dist/esm/v2/Query.d.ts +0 -24
- package/dist/esm/v2/Query.js +0 -75
- package/dist/esm/v2/Query.js.map +0 -1
- package/dist/esm/v2/QueryMaker.d.ts +0 -16
- package/dist/esm/v2/QueryMaker.js +0 -80
- package/dist/esm/v2/QueryMaker.js.map +0 -1
- package/dist/esm/v2/QueryStore.d.ts +0 -26
- package/dist/esm/v2/QueryStore.js +0 -132
- package/dist/esm/v2/QueryStore.js.map +0 -1
- package/dist/esm/v2/SchemaStore.d.ts +0 -9
- package/dist/esm/v2/SchemaStore.js +0 -31
- package/dist/esm/v2/SchemaStore.js.map +0 -1
- package/dist/esm/v2/Storage.d.ts +0 -80
- package/dist/esm/v2/Storage.js +0 -149
- package/dist/esm/v2/Storage.js.map +0 -1
- package/dist/esm/v2/Sync.d.ts +0 -42
- package/dist/esm/v2/Sync.js +0 -94
- package/dist/esm/v2/Sync.js.map +0 -1
- package/dist/esm/v2/SyncHarness.d.ts +0 -45
- package/dist/esm/v2/SyncHarness.js +0 -105
- package/dist/esm/v2/SyncHarness.js.map +0 -1
- package/dist/esm/v2/__tests__/documents.test.d.ts +0 -1
- package/dist/esm/v2/__tests__/documents.test.js +0 -208
- package/dist/esm/v2/__tests__/documents.test.js.map +0 -1
- package/dist/esm/v2/__tests__/fixtures/testStorage.d.ts +0 -223
- package/dist/esm/v2/__tests__/fixtures/testStorage.js +0 -106
- package/dist/esm/v2/__tests__/fixtures/testStorage.js.map +0 -1
- package/dist/esm/v2/__tests__/queries.test.d.ts +0 -1
- package/dist/esm/v2/__tests__/queries.test.js +0 -90
- package/dist/esm/v2/__tests__/queries.test.js.map +0 -1
- package/dist/esm/v2/__tests__/setup/indexedDB.d.ts +0 -1
- package/dist/esm/v2/__tests__/setup/indexedDB.js +0 -2
- package/dist/esm/v2/__tests__/setup/indexedDB.js.map +0 -1
- package/dist/esm/v2/constants.d.ts +0 -1
- package/dist/esm/v2/constants.js +0 -2
- package/dist/esm/v2/constants.js.map +0 -1
- package/dist/esm/v2/idb.d.ts +0 -6
- package/dist/esm/v2/idb.js +0 -65
- package/dist/esm/v2/idb.js.map +0 -1
- package/dist/esm/v2/index.d.ts +0 -6
- package/dist/esm/v2/index.js +0 -5
- package/dist/esm/v2/index.js.map +0 -1
- package/dist/esm/v2/indexes.d.ts +0 -3
- package/dist/esm/v2/indexes.js +0 -15
- package/dist/esm/v2/indexes.js.map +0 -1
- package/dist/esm/v2/openDocumentDatabase.d.ts +0 -9
- package/dist/esm/v2/openDocumentDatabase.js +0 -96
- package/dist/esm/v2/openDocumentDatabase.js.map +0 -1
- package/dist/esm/v2/types.d.ts +0 -3
- package/dist/esm/v2/types.js +0 -2
- package/dist/esm/v2/types.js.map +0 -1
- /package/dist/esm/sync/{WebsocketSync.js.map → WebSocketSync.js.map} +0 -0
|
@@ -1,401 +1,401 @@
|
|
|
1
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
-
var t = {};
|
|
3
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
-
t[p] = s[p];
|
|
5
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
-
t[p[i]] = s[p[i]];
|
|
9
|
-
}
|
|
10
|
-
return t;
|
|
11
|
-
};
|
|
12
|
-
import { assert } from '@verdant-web/common';
|
|
13
|
-
import { describe, it, expect, vi, vitest } from 'vitest';
|
|
14
|
-
import { createTestStorage } from './fixtures/testStorage.js';
|
|
15
|
-
async function waitForStoragePropagation(mock) {
|
|
16
|
-
await new Promise((resolve, reject) => {
|
|
17
|
-
// timeout after 3s waiting
|
|
18
|
-
const timeout = setTimeout(() => reject(new Error('Waiting for storage change timed out')), 3000);
|
|
19
|
-
const interval = setInterval(() => {
|
|
20
|
-
if (mock.mock.calls.length > 0) {
|
|
21
|
-
clearInterval(interval);
|
|
22
|
-
clearTimeout(timeout);
|
|
23
|
-
resolve();
|
|
24
|
-
}
|
|
25
|
-
}, 0);
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
describe('storage documents', () => {
|
|
29
|
-
it('should fill in default values', async () => {
|
|
30
|
-
const storage = await createTestStorage();
|
|
31
|
-
const item = await storage.todos.put({
|
|
32
|
-
content: 'item',
|
|
33
|
-
category: 'general',
|
|
34
|
-
attachments: [
|
|
35
|
-
{
|
|
36
|
-
name: 'thing',
|
|
37
|
-
},
|
|
38
|
-
],
|
|
39
|
-
});
|
|
40
|
-
expect(item.get('id')).toBeDefined();
|
|
41
|
-
expect(item.get('done')).toBe(false);
|
|
42
|
-
expect(item.get('tags').length).toBe(0);
|
|
43
|
-
expect(item.get('attachments').get(0).get('test')).toBe(1);
|
|
44
|
-
});
|
|
45
|
-
it('should have a stable identity across different queries when subscribed', async () => {
|
|
46
|
-
const storage = await createTestStorage();
|
|
47
|
-
const item1 = await storage.todos.put({
|
|
48
|
-
content: 'item 1',
|
|
49
|
-
done: false,
|
|
50
|
-
tags: [],
|
|
51
|
-
category: 'general',
|
|
52
|
-
attachments: [],
|
|
53
|
-
});
|
|
54
|
-
await storage.todos.put({
|
|
55
|
-
content: 'item 2',
|
|
56
|
-
done: true,
|
|
57
|
-
tags: [],
|
|
58
|
-
category: 'general',
|
|
59
|
-
attachments: [],
|
|
60
|
-
});
|
|
61
|
-
const singleItemQuery = storage.todos.get(item1.get('id'));
|
|
62
|
-
const singleItemResult = await singleItemQuery.resolved;
|
|
63
|
-
expect(singleItemResult).toBeTruthy();
|
|
64
|
-
assert(!!singleItemResult);
|
|
65
|
-
singleItemResult.subscribe('change', vi.fn());
|
|
66
|
-
const allItemsQuery = storage.todos.findAll();
|
|
67
|
-
const allItemsResult = await allItemsQuery.resolved;
|
|
68
|
-
const allItemsReferenceToItem1 = allItemsResult.find((item) => item.get('id') === item1.get('id'));
|
|
69
|
-
expect(singleItemResult).toBe(allItemsReferenceToItem1);
|
|
70
|
-
});
|
|
71
|
-
it('should immediately reflect mutations', async () => {
|
|
72
|
-
const storage = await createTestStorage();
|
|
73
|
-
const item1 = await storage.todos.put({
|
|
74
|
-
content: 'item 1',
|
|
75
|
-
done: false,
|
|
76
|
-
tags: [],
|
|
77
|
-
category: 'general',
|
|
78
|
-
attachments: [],
|
|
79
|
-
});
|
|
80
|
-
item1.set('done', true);
|
|
81
|
-
expect(item1.get('done')).toBe(true);
|
|
82
|
-
});
|
|
83
|
-
it('should notify about changes', async () => {
|
|
84
|
-
const storage = await createTestStorage();
|
|
85
|
-
const item1 = await storage.todos.put({
|
|
86
|
-
content: 'item 1',
|
|
87
|
-
done: false,
|
|
88
|
-
tags: [],
|
|
89
|
-
category: 'general',
|
|
90
|
-
attachments: [],
|
|
91
|
-
});
|
|
92
|
-
const liveItem1 = await storage.todos.get(item1.get('id')).resolved;
|
|
93
|
-
expect(liveItem1).toBeTruthy();
|
|
94
|
-
assert(!!liveItem1);
|
|
95
|
-
const callback = vi.fn();
|
|
96
|
-
liveItem1.subscribe('change', callback);
|
|
97
|
-
liveItem1.set('done', true);
|
|
98
|
-
liveItem1.set('content', 'item 1 updated');
|
|
99
|
-
await waitForStoragePropagation(callback);
|
|
100
|
-
// only 1 callback - changes are batched.
|
|
101
|
-
// expect(callback).toBeCalledTimes(1); // FIXME: called twice, once for immediate in-memory change and once after propagation. can this be 1?
|
|
102
|
-
expect(liveItem1.getSnapshot()).toEqual({
|
|
103
|
-
id: liveItem1.get('id'),
|
|
104
|
-
content: 'item 1 updated',
|
|
105
|
-
done: true,
|
|
106
|
-
tags: [],
|
|
107
|
-
category: 'general',
|
|
108
|
-
attachments: [],
|
|
109
|
-
});
|
|
110
|
-
const callbackDeep = vi.fn();
|
|
111
|
-
liveItem1.subscribe('changeDeep', callbackDeep);
|
|
112
|
-
liveItem1.update({
|
|
113
|
-
tags: ['tag 1', 'tag 2'],
|
|
114
|
-
});
|
|
115
|
-
await waitForStoragePropagation(callbackDeep);
|
|
116
|
-
expect(liveItem1.getSnapshot().tags).toEqual(['tag 1', 'tag 2']);
|
|
117
|
-
});
|
|
118
|
-
it('should expose array mutators on nested arrays', async () => {
|
|
119
|
-
const storage = await createTestStorage();
|
|
120
|
-
const item1 = await storage.todos.put({
|
|
121
|
-
content: 'item 1',
|
|
122
|
-
done: false,
|
|
123
|
-
tags: [],
|
|
124
|
-
category: 'general',
|
|
125
|
-
attachments: [],
|
|
126
|
-
});
|
|
127
|
-
const callback = vi.fn();
|
|
128
|
-
item1.get('tags').subscribe('change', callback);
|
|
129
|
-
item1.get('tags').push('tag 1');
|
|
130
|
-
item1.get('tags').push('tag 2');
|
|
131
|
-
item1.get('tags').push('tag 3');
|
|
132
|
-
item1.get('tags').move(1, 2);
|
|
133
|
-
// fields are immediately updated
|
|
134
|
-
expect(item1.get('tags').get(0)).toEqual('tag 1');
|
|
135
|
-
expect(item1.get('tags').get(1)).toEqual('tag 3');
|
|
136
|
-
expect(item1.get('tags').get(2)).toEqual('tag 2');
|
|
137
|
-
await waitForStoragePropagation(callback);
|
|
138
|
-
expect(callback).toBeCalledTimes(4);
|
|
139
|
-
expect(item1.getSnapshot()).toEqual({
|
|
140
|
-
id: item1.get('id'),
|
|
141
|
-
content: 'item 1',
|
|
142
|
-
done: false,
|
|
143
|
-
tags: ['tag 1', 'tag 3', 'tag 2'],
|
|
144
|
-
category: 'general',
|
|
145
|
-
attachments: [],
|
|
146
|
-
});
|
|
147
|
-
});
|
|
148
|
-
it('should expose array accessors on nested arrays', async () => {
|
|
149
|
-
const storage = await createTestStorage();
|
|
150
|
-
const item1 = await storage.todos.put({
|
|
151
|
-
content: 'item 1',
|
|
152
|
-
done: false,
|
|
153
|
-
tags: ['tag 1', 'tag 2'],
|
|
154
|
-
category: 'general',
|
|
155
|
-
attachments: [
|
|
156
|
-
{
|
|
157
|
-
name: 'attachment 1',
|
|
158
|
-
},
|
|
159
|
-
],
|
|
160
|
-
});
|
|
161
|
-
for (const attachment of item1.get('attachments')) {
|
|
162
|
-
expect(attachment.get('name')).toBe('attachment 1');
|
|
163
|
-
}
|
|
164
|
-
let i = 0;
|
|
165
|
-
for (const tag of item1.get('tags')) {
|
|
166
|
-
expect(tag).toBe('tag ' + ++i);
|
|
167
|
-
}
|
|
168
|
-
expect(item1.get('tags').filter((tag) => tag === 'tag 1')).toEqual([
|
|
169
|
-
'tag 1',
|
|
170
|
-
]);
|
|
171
|
-
item1.get('attachments').push({
|
|
172
|
-
name: 'attachment 2',
|
|
173
|
-
});
|
|
174
|
-
expect(item1.get('attachments').getSnapshot()).toEqual([
|
|
175
|
-
{ name: 'attachment 1', test: 1 },
|
|
176
|
-
{ name: 'attachment 2', test: 1 },
|
|
177
|
-
]);
|
|
178
|
-
});
|
|
179
|
-
it('should provide a reasonable way to interact with unknown data', async () => {
|
|
180
|
-
/**
|
|
181
|
-
* 'any' field types should basically just stop type checking, but still
|
|
182
|
-
* provide full reactive entity access for nested data.
|
|
183
|
-
*/
|
|
184
|
-
const storage = await createTestStorage();
|
|
185
|
-
const item1 = await storage.weirds.put({
|
|
186
|
-
weird: {
|
|
187
|
-
foo: 'bar',
|
|
188
|
-
baz: [
|
|
189
|
-
{
|
|
190
|
-
corge: 3,
|
|
191
|
-
},
|
|
192
|
-
],
|
|
193
|
-
},
|
|
194
|
-
map: {},
|
|
195
|
-
objectMap: {},
|
|
196
|
-
});
|
|
197
|
-
expect(item1.get('weird').get('foo')).toBe('bar');
|
|
198
|
-
expect(item1.get('weird').get('baz').get(0).get('corge')).toBe(3);
|
|
199
|
-
expect(item1.get('weird').getSnapshot()).toEqual({
|
|
200
|
-
foo: 'bar',
|
|
201
|
-
baz: [{ corge: 3 }],
|
|
202
|
-
});
|
|
203
|
-
item1.get('weird').get('baz').push({ corge: 4 });
|
|
204
|
-
expect(item1.get('weird').get('baz').getSnapshot()).toEqual([
|
|
205
|
-
{ corge: 3 },
|
|
206
|
-
{ corge: 4 },
|
|
207
|
-
]);
|
|
208
|
-
});
|
|
209
|
-
it('should provide access and updates for map-type fields', async () => {
|
|
210
|
-
const storage = await createTestStorage();
|
|
211
|
-
const item1 = await storage.weirds.put({
|
|
212
|
-
weird: null,
|
|
213
|
-
map: {
|
|
214
|
-
foo: 'bar',
|
|
215
|
-
baz: 'qux',
|
|
216
|
-
},
|
|
217
|
-
objectMap: {
|
|
218
|
-
foo: {
|
|
219
|
-
content: 'bar',
|
|
220
|
-
},
|
|
221
|
-
},
|
|
222
|
-
});
|
|
223
|
-
expect(item1.get('map').get('foo')).toBe('bar');
|
|
224
|
-
expect(item1.get('map').get('baz')).toBe('qux');
|
|
225
|
-
expect(item1.get('map').getSnapshot()).toEqual({
|
|
226
|
-
foo: 'bar',
|
|
227
|
-
baz: 'qux',
|
|
228
|
-
});
|
|
229
|
-
expect(item1.get('objectMap').get('foo').get('content')).toBe('bar');
|
|
230
|
-
expect(item1.get('objectMap').get('baz')).toBe(undefined);
|
|
231
|
-
item1.get('objectMap').set('baz', { content: 'qux' });
|
|
232
|
-
expect(item1.get('objectMap').get('baz').get('content')).toBe('qux');
|
|
233
|
-
});
|
|
234
|
-
it('should merge .update fields and not discard undefined ones', async () => {
|
|
235
|
-
const storage = await createTestStorage();
|
|
236
|
-
const item1 = await storage.weirds.put({
|
|
237
|
-
weird: null,
|
|
238
|
-
map: {
|
|
239
|
-
foo: 'bar',
|
|
240
|
-
baz: 'qux',
|
|
241
|
-
},
|
|
242
|
-
objectMap: {
|
|
243
|
-
foo: {
|
|
244
|
-
content: 'bar',
|
|
245
|
-
},
|
|
246
|
-
},
|
|
247
|
-
});
|
|
248
|
-
item1.update({
|
|
249
|
-
weird: 'foo',
|
|
250
|
-
});
|
|
251
|
-
expect(item1.get('weird')).toBe('foo');
|
|
252
|
-
expect(item1.get('map').get('foo')).toBe('bar');
|
|
253
|
-
item1.update({
|
|
254
|
-
weird: undefined,
|
|
255
|
-
});
|
|
256
|
-
expect(item1.get('weird')).toBe('foo');
|
|
257
|
-
});
|
|
258
|
-
it('should delete undefined fields in .update if merge is false', async () => {
|
|
259
|
-
const storage = await createTestStorage();
|
|
260
|
-
const item1 = await storage.weirds.put({
|
|
261
|
-
weird: {
|
|
262
|
-
bar: 2,
|
|
263
|
-
qux: 3,
|
|
264
|
-
},
|
|
265
|
-
map: {
|
|
266
|
-
foo: 'bar',
|
|
267
|
-
baz: 'qux',
|
|
268
|
-
},
|
|
269
|
-
objectMap: {
|
|
270
|
-
foo: {
|
|
271
|
-
content: 'bar',
|
|
272
|
-
},
|
|
273
|
-
},
|
|
274
|
-
});
|
|
275
|
-
item1.get('weird').update({
|
|
276
|
-
bar: 1,
|
|
277
|
-
}, {
|
|
278
|
-
merge: false,
|
|
279
|
-
});
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
import { assert } from '@verdant-web/common';
|
|
13
|
+
import { describe, it, expect, vi, vitest } from 'vitest';
|
|
14
|
+
import { createTestStorage } from './fixtures/testStorage.js';
|
|
15
|
+
async function waitForStoragePropagation(mock) {
|
|
16
|
+
await new Promise((resolve, reject) => {
|
|
17
|
+
// timeout after 3s waiting
|
|
18
|
+
const timeout = setTimeout(() => reject(new Error('Waiting for storage change timed out')), 3000);
|
|
19
|
+
const interval = setInterval(() => {
|
|
20
|
+
if (mock.mock.calls.length > 0) {
|
|
21
|
+
clearInterval(interval);
|
|
22
|
+
clearTimeout(timeout);
|
|
23
|
+
resolve();
|
|
24
|
+
}
|
|
25
|
+
}, 0);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
describe('storage documents', () => {
|
|
29
|
+
it('should fill in default values', async () => {
|
|
30
|
+
const storage = await createTestStorage();
|
|
31
|
+
const item = await storage.todos.put({
|
|
32
|
+
content: 'item',
|
|
33
|
+
category: 'general',
|
|
34
|
+
attachments: [
|
|
35
|
+
{
|
|
36
|
+
name: 'thing',
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
});
|
|
40
|
+
expect(item.get('id')).toBeDefined();
|
|
41
|
+
expect(item.get('done')).toBe(false);
|
|
42
|
+
expect(item.get('tags').length).toBe(0);
|
|
43
|
+
expect(item.get('attachments').get(0).get('test')).toBe(1);
|
|
44
|
+
});
|
|
45
|
+
it('should have a stable identity across different queries when subscribed', async () => {
|
|
46
|
+
const storage = await createTestStorage();
|
|
47
|
+
const item1 = await storage.todos.put({
|
|
48
|
+
content: 'item 1',
|
|
49
|
+
done: false,
|
|
50
|
+
tags: [],
|
|
51
|
+
category: 'general',
|
|
52
|
+
attachments: [],
|
|
53
|
+
});
|
|
54
|
+
await storage.todos.put({
|
|
55
|
+
content: 'item 2',
|
|
56
|
+
done: true,
|
|
57
|
+
tags: [],
|
|
58
|
+
category: 'general',
|
|
59
|
+
attachments: [],
|
|
60
|
+
});
|
|
61
|
+
const singleItemQuery = storage.todos.get(item1.get('id'));
|
|
62
|
+
const singleItemResult = await singleItemQuery.resolved;
|
|
63
|
+
expect(singleItemResult).toBeTruthy();
|
|
64
|
+
assert(!!singleItemResult);
|
|
65
|
+
singleItemResult.subscribe('change', vi.fn());
|
|
66
|
+
const allItemsQuery = storage.todos.findAll();
|
|
67
|
+
const allItemsResult = await allItemsQuery.resolved;
|
|
68
|
+
const allItemsReferenceToItem1 = allItemsResult.find((item) => item.get('id') === item1.get('id'));
|
|
69
|
+
expect(singleItemResult).toBe(allItemsReferenceToItem1);
|
|
70
|
+
});
|
|
71
|
+
it('should immediately reflect mutations', async () => {
|
|
72
|
+
const storage = await createTestStorage();
|
|
73
|
+
const item1 = await storage.todos.put({
|
|
74
|
+
content: 'item 1',
|
|
75
|
+
done: false,
|
|
76
|
+
tags: [],
|
|
77
|
+
category: 'general',
|
|
78
|
+
attachments: [],
|
|
79
|
+
});
|
|
80
|
+
item1.set('done', true);
|
|
81
|
+
expect(item1.get('done')).toBe(true);
|
|
82
|
+
});
|
|
83
|
+
it('should notify about changes', async () => {
|
|
84
|
+
const storage = await createTestStorage();
|
|
85
|
+
const item1 = await storage.todos.put({
|
|
86
|
+
content: 'item 1',
|
|
87
|
+
done: false,
|
|
88
|
+
tags: [],
|
|
89
|
+
category: 'general',
|
|
90
|
+
attachments: [],
|
|
91
|
+
});
|
|
92
|
+
const liveItem1 = await storage.todos.get(item1.get('id')).resolved;
|
|
93
|
+
expect(liveItem1).toBeTruthy();
|
|
94
|
+
assert(!!liveItem1);
|
|
95
|
+
const callback = vi.fn();
|
|
96
|
+
liveItem1.subscribe('change', callback);
|
|
97
|
+
liveItem1.set('done', true);
|
|
98
|
+
liveItem1.set('content', 'item 1 updated');
|
|
99
|
+
await waitForStoragePropagation(callback);
|
|
100
|
+
// only 1 callback - changes are batched.
|
|
101
|
+
// expect(callback).toBeCalledTimes(1); // FIXME: called twice, once for immediate in-memory change and once after propagation. can this be 1?
|
|
102
|
+
expect(liveItem1.getSnapshot()).toEqual({
|
|
103
|
+
id: liveItem1.get('id'),
|
|
104
|
+
content: 'item 1 updated',
|
|
105
|
+
done: true,
|
|
106
|
+
tags: [],
|
|
107
|
+
category: 'general',
|
|
108
|
+
attachments: [],
|
|
109
|
+
});
|
|
110
|
+
const callbackDeep = vi.fn();
|
|
111
|
+
liveItem1.subscribe('changeDeep', callbackDeep);
|
|
112
|
+
liveItem1.update({
|
|
113
|
+
tags: ['tag 1', 'tag 2'],
|
|
114
|
+
});
|
|
115
|
+
await waitForStoragePropagation(callbackDeep);
|
|
116
|
+
expect(liveItem1.getSnapshot().tags).toEqual(['tag 1', 'tag 2']);
|
|
117
|
+
});
|
|
118
|
+
it('should expose array mutators on nested arrays', async () => {
|
|
119
|
+
const storage = await createTestStorage();
|
|
120
|
+
const item1 = await storage.todos.put({
|
|
121
|
+
content: 'item 1',
|
|
122
|
+
done: false,
|
|
123
|
+
tags: [],
|
|
124
|
+
category: 'general',
|
|
125
|
+
attachments: [],
|
|
126
|
+
});
|
|
127
|
+
const callback = vi.fn();
|
|
128
|
+
item1.get('tags').subscribe('change', callback);
|
|
129
|
+
item1.get('tags').push('tag 1');
|
|
130
|
+
item1.get('tags').push('tag 2');
|
|
131
|
+
item1.get('tags').push('tag 3');
|
|
132
|
+
item1.get('tags').move(1, 2);
|
|
133
|
+
// fields are immediately updated
|
|
134
|
+
expect(item1.get('tags').get(0)).toEqual('tag 1');
|
|
135
|
+
expect(item1.get('tags').get(1)).toEqual('tag 3');
|
|
136
|
+
expect(item1.get('tags').get(2)).toEqual('tag 2');
|
|
137
|
+
await waitForStoragePropagation(callback);
|
|
138
|
+
expect(callback).toBeCalledTimes(4);
|
|
139
|
+
expect(item1.getSnapshot()).toEqual({
|
|
140
|
+
id: item1.get('id'),
|
|
141
|
+
content: 'item 1',
|
|
142
|
+
done: false,
|
|
143
|
+
tags: ['tag 1', 'tag 3', 'tag 2'],
|
|
144
|
+
category: 'general',
|
|
145
|
+
attachments: [],
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
it('should expose array accessors on nested arrays', async () => {
|
|
149
|
+
const storage = await createTestStorage();
|
|
150
|
+
const item1 = await storage.todos.put({
|
|
151
|
+
content: 'item 1',
|
|
152
|
+
done: false,
|
|
153
|
+
tags: ['tag 1', 'tag 2'],
|
|
154
|
+
category: 'general',
|
|
155
|
+
attachments: [
|
|
156
|
+
{
|
|
157
|
+
name: 'attachment 1',
|
|
158
|
+
},
|
|
159
|
+
],
|
|
160
|
+
});
|
|
161
|
+
for (const attachment of item1.get('attachments')) {
|
|
162
|
+
expect(attachment.get('name')).toBe('attachment 1');
|
|
163
|
+
}
|
|
164
|
+
let i = 0;
|
|
165
|
+
for (const tag of item1.get('tags')) {
|
|
166
|
+
expect(tag).toBe('tag ' + ++i);
|
|
167
|
+
}
|
|
168
|
+
expect(item1.get('tags').filter((tag) => tag === 'tag 1')).toEqual([
|
|
169
|
+
'tag 1',
|
|
170
|
+
]);
|
|
171
|
+
item1.get('attachments').push({
|
|
172
|
+
name: 'attachment 2',
|
|
173
|
+
});
|
|
174
|
+
expect(item1.get('attachments').getSnapshot()).toEqual([
|
|
175
|
+
{ name: 'attachment 1', test: 1 },
|
|
176
|
+
{ name: 'attachment 2', test: 1 },
|
|
177
|
+
]);
|
|
178
|
+
});
|
|
179
|
+
it('should provide a reasonable way to interact with unknown data', async () => {
|
|
180
|
+
/**
|
|
181
|
+
* 'any' field types should basically just stop type checking, but still
|
|
182
|
+
* provide full reactive entity access for nested data.
|
|
183
|
+
*/
|
|
184
|
+
const storage = await createTestStorage();
|
|
185
|
+
const item1 = await storage.weirds.put({
|
|
186
|
+
weird: {
|
|
187
|
+
foo: 'bar',
|
|
188
|
+
baz: [
|
|
189
|
+
{
|
|
190
|
+
corge: 3,
|
|
191
|
+
},
|
|
192
|
+
],
|
|
193
|
+
},
|
|
194
|
+
map: {},
|
|
195
|
+
objectMap: {},
|
|
196
|
+
});
|
|
197
|
+
expect(item1.get('weird').get('foo')).toBe('bar');
|
|
198
|
+
expect(item1.get('weird').get('baz').get(0).get('corge')).toBe(3);
|
|
199
|
+
expect(item1.get('weird').getSnapshot()).toEqual({
|
|
200
|
+
foo: 'bar',
|
|
201
|
+
baz: [{ corge: 3 }],
|
|
202
|
+
});
|
|
203
|
+
item1.get('weird').get('baz').push({ corge: 4 });
|
|
204
|
+
expect(item1.get('weird').get('baz').getSnapshot()).toEqual([
|
|
205
|
+
{ corge: 3 },
|
|
206
|
+
{ corge: 4 },
|
|
207
|
+
]);
|
|
208
|
+
});
|
|
209
|
+
it('should provide access and updates for map-type fields', async () => {
|
|
210
|
+
const storage = await createTestStorage();
|
|
211
|
+
const item1 = await storage.weirds.put({
|
|
212
|
+
weird: null,
|
|
213
|
+
map: {
|
|
214
|
+
foo: 'bar',
|
|
215
|
+
baz: 'qux',
|
|
216
|
+
},
|
|
217
|
+
objectMap: {
|
|
218
|
+
foo: {
|
|
219
|
+
content: 'bar',
|
|
220
|
+
},
|
|
221
|
+
},
|
|
222
|
+
});
|
|
223
|
+
expect(item1.get('map').get('foo')).toBe('bar');
|
|
224
|
+
expect(item1.get('map').get('baz')).toBe('qux');
|
|
225
|
+
expect(item1.get('map').getSnapshot()).toEqual({
|
|
226
|
+
foo: 'bar',
|
|
227
|
+
baz: 'qux',
|
|
228
|
+
});
|
|
229
|
+
expect(item1.get('objectMap').get('foo').get('content')).toBe('bar');
|
|
230
|
+
expect(item1.get('objectMap').get('baz')).toBe(undefined);
|
|
231
|
+
item1.get('objectMap').set('baz', { content: 'qux' });
|
|
232
|
+
expect(item1.get('objectMap').get('baz').get('content')).toBe('qux');
|
|
233
|
+
});
|
|
234
|
+
it('should merge .update fields and not discard undefined ones', async () => {
|
|
235
|
+
const storage = await createTestStorage();
|
|
236
|
+
const item1 = await storage.weirds.put({
|
|
237
|
+
weird: null,
|
|
238
|
+
map: {
|
|
239
|
+
foo: 'bar',
|
|
240
|
+
baz: 'qux',
|
|
241
|
+
},
|
|
242
|
+
objectMap: {
|
|
243
|
+
foo: {
|
|
244
|
+
content: 'bar',
|
|
245
|
+
},
|
|
246
|
+
},
|
|
247
|
+
});
|
|
248
|
+
item1.update({
|
|
249
|
+
weird: 'foo',
|
|
250
|
+
});
|
|
251
|
+
expect(item1.get('weird')).toBe('foo');
|
|
252
|
+
expect(item1.get('map').get('foo')).toBe('bar');
|
|
253
|
+
item1.update({
|
|
254
|
+
weird: undefined,
|
|
255
|
+
});
|
|
256
|
+
expect(item1.get('weird')).toBe('foo');
|
|
257
|
+
});
|
|
258
|
+
it('should delete undefined fields in .update if merge is false', async () => {
|
|
259
|
+
const storage = await createTestStorage();
|
|
260
|
+
const item1 = await storage.weirds.put({
|
|
261
|
+
weird: {
|
|
262
|
+
bar: 2,
|
|
263
|
+
qux: 3,
|
|
264
|
+
},
|
|
265
|
+
map: {
|
|
266
|
+
foo: 'bar',
|
|
267
|
+
baz: 'qux',
|
|
268
|
+
},
|
|
269
|
+
objectMap: {
|
|
270
|
+
foo: {
|
|
271
|
+
content: 'bar',
|
|
272
|
+
},
|
|
273
|
+
},
|
|
274
|
+
});
|
|
275
|
+
item1.get('weird').update({
|
|
276
|
+
bar: 1,
|
|
277
|
+
}, {
|
|
278
|
+
merge: false,
|
|
279
|
+
});
|
|
280
280
|
expect(item1.get('weird').getSnapshot()).toMatchInlineSnapshot(`
|
|
281
281
|
{
|
|
282
282
|
"bar": 1,
|
|
283
283
|
}
|
|
284
|
-
`);
|
|
285
|
-
});
|
|
286
|
-
it('should not allow merge: false in strict schema field updates', async () => {
|
|
287
|
-
const storage = await createTestStorage();
|
|
288
|
-
const item1 = await storage.todos.put({
|
|
289
|
-
content: 'item 1',
|
|
290
|
-
done: false,
|
|
291
|
-
tags: [],
|
|
292
|
-
category: 'general',
|
|
293
|
-
attachments: [],
|
|
294
|
-
});
|
|
295
|
-
expect(() => {
|
|
296
|
-
item1.update({ content: 'bar' }, { merge: false });
|
|
297
|
-
}).toThrowErrorMatchingInlineSnapshot('"Cannot use .update without merge if the field has a strict schema type. merge: false is only available on \\"any\\" or \\"map\\" types."');
|
|
298
|
-
});
|
|
299
|
-
it('should apply defaults to created sub-objects in .update', async () => {
|
|
300
|
-
const storage = await createTestStorage();
|
|
301
|
-
const item1 = await storage.todos.put({
|
|
302
|
-
content: 'item 1',
|
|
303
|
-
done: false,
|
|
304
|
-
tags: [],
|
|
305
|
-
category: 'general',
|
|
306
|
-
attachments: [],
|
|
307
|
-
});
|
|
308
|
-
item1.update({
|
|
309
|
-
attachments: [
|
|
310
|
-
{
|
|
311
|
-
name: 'attachment 1',
|
|
312
|
-
},
|
|
313
|
-
],
|
|
314
|
-
});
|
|
315
|
-
expect(item1.get('attachments').get(0).get('test')).toBe(1);
|
|
316
|
-
});
|
|
317
|
-
it('should remove items from list when .delete is called', async () => {
|
|
318
|
-
const storage = await createTestStorage();
|
|
319
|
-
const item1 = await storage.todos.put({
|
|
320
|
-
content: 'item 1',
|
|
321
|
-
done: false,
|
|
322
|
-
tags: [],
|
|
323
|
-
category: 'general',
|
|
324
|
-
attachments: [],
|
|
325
|
-
});
|
|
326
|
-
item1.get('attachments').push({
|
|
327
|
-
name: 'attachment 1',
|
|
328
|
-
});
|
|
329
|
-
item1.get('attachments').push({
|
|
330
|
-
name: 'attachment 2',
|
|
331
|
-
});
|
|
332
|
-
item1.get('attachments').push({
|
|
333
|
-
name: 'attachment 3',
|
|
334
|
-
});
|
|
335
|
-
item1.get('attachments').delete(1);
|
|
336
|
-
expect(item1.get('attachments').length).toBe(2);
|
|
337
|
-
expect(item1.get('attachments').get(0).get('name')).toBe('attachment 1');
|
|
338
|
-
expect(item1.get('attachments').get(1).get('name')).toBe('attachment 3');
|
|
339
|
-
// should work on lists which are not field-validated
|
|
340
|
-
const item2 = await storage.weirds.put({
|
|
341
|
-
weird: ['foo', 'bar', 'baz'],
|
|
342
|
-
});
|
|
343
|
-
item2.get('weird').delete(1);
|
|
344
|
-
expect(item2.get('weird').length).toBe(2);
|
|
345
|
-
expect(item2.get('weird').get(0)).toBe('foo');
|
|
346
|
-
expect(item2.get('weird').get(1)).toBe('baz');
|
|
347
|
-
});
|
|
348
|
-
it('should expose updatedAt', async () => {
|
|
349
|
-
const storage = await createTestStorage();
|
|
350
|
-
let time = new Date();
|
|
351
|
-
vitest.setSystemTime(time);
|
|
352
|
-
const item1 = await storage.todos.put({
|
|
353
|
-
content: 'item 1',
|
|
354
|
-
done: false,
|
|
355
|
-
tags: [],
|
|
356
|
-
category: 'general',
|
|
357
|
-
attachments: [],
|
|
358
|
-
});
|
|
359
|
-
expect(item1.updatedAt).toEqual(time.getTime());
|
|
360
|
-
time = new Date(time.getTime() + 1000);
|
|
361
|
-
vitest.setSystemTime(time);
|
|
362
|
-
item1.update({
|
|
363
|
-
content: 'item 1 updated',
|
|
364
|
-
});
|
|
365
|
-
expect(item1.updatedAt).toEqual(time.getTime());
|
|
366
|
-
// works on nested fields
|
|
367
|
-
time = new Date(time.getTime() + 1000);
|
|
368
|
-
vitest.setSystemTime(time);
|
|
369
|
-
item1.get('attachments').push({
|
|
370
|
-
name: 'attachment 1',
|
|
371
|
-
});
|
|
372
|
-
expect(item1.deepUpdatedAt).toEqual(time.getTime());
|
|
373
|
-
time = new Date(time.getTime() + 1000);
|
|
374
|
-
vitest.setSystemTime(time);
|
|
375
|
-
item1.get('attachments').get(0).set('name', 'attachment 1 updated');
|
|
376
|
-
expect(item1.deepUpdatedAt).toEqual(time.getTime());
|
|
377
|
-
// but other items have their own updatedAt
|
|
378
|
-
expect(item1.get('tags').deepUpdatedAt).not.toEqual(time.getTime());
|
|
379
|
-
});
|
|
380
|
-
it('should allow creating a new document from another document snapshot', async () => {
|
|
381
|
-
const storage = await createTestStorage();
|
|
382
|
-
const item1 = await storage.todos.put({
|
|
383
|
-
content: 'item 1',
|
|
384
|
-
done: false,
|
|
385
|
-
tags: ['tag 1'],
|
|
386
|
-
category: 'general',
|
|
387
|
-
attachments: [
|
|
388
|
-
{
|
|
389
|
-
name: 'attachment 1',
|
|
390
|
-
},
|
|
391
|
-
],
|
|
392
|
-
});
|
|
393
|
-
const _a = item1.getSnapshot(), { id } = _a, snapshot = __rest(_a, ["id"]);
|
|
394
|
-
const item2 = await storage.todos.put(snapshot);
|
|
395
|
-
expect(item2.get('tags').length).toBe(1);
|
|
396
|
-
expect(item2.get('attachments').length).toBe(1);
|
|
397
|
-
item2.get('attachments').get(0).set('name', 'attachment 2');
|
|
398
|
-
expect(item1.get('attachments').get(0).get('name')).toBe('attachment 1');
|
|
399
|
-
});
|
|
400
|
-
});
|
|
284
|
+
`);
|
|
285
|
+
});
|
|
286
|
+
it('should not allow merge: false in strict schema field updates', async () => {
|
|
287
|
+
const storage = await createTestStorage();
|
|
288
|
+
const item1 = await storage.todos.put({
|
|
289
|
+
content: 'item 1',
|
|
290
|
+
done: false,
|
|
291
|
+
tags: [],
|
|
292
|
+
category: 'general',
|
|
293
|
+
attachments: [],
|
|
294
|
+
});
|
|
295
|
+
expect(() => {
|
|
296
|
+
item1.update({ content: 'bar' }, { merge: false });
|
|
297
|
+
}).toThrowErrorMatchingInlineSnapshot('"Cannot use .update without merge if the field has a strict schema type. merge: false is only available on \\"any\\" or \\"map\\" types."');
|
|
298
|
+
});
|
|
299
|
+
it('should apply defaults to created sub-objects in .update', async () => {
|
|
300
|
+
const storage = await createTestStorage();
|
|
301
|
+
const item1 = await storage.todos.put({
|
|
302
|
+
content: 'item 1',
|
|
303
|
+
done: false,
|
|
304
|
+
tags: [],
|
|
305
|
+
category: 'general',
|
|
306
|
+
attachments: [],
|
|
307
|
+
});
|
|
308
|
+
item1.update({
|
|
309
|
+
attachments: [
|
|
310
|
+
{
|
|
311
|
+
name: 'attachment 1',
|
|
312
|
+
},
|
|
313
|
+
],
|
|
314
|
+
});
|
|
315
|
+
expect(item1.get('attachments').get(0).get('test')).toBe(1);
|
|
316
|
+
});
|
|
317
|
+
it('should remove items from list when .delete is called', async () => {
|
|
318
|
+
const storage = await createTestStorage();
|
|
319
|
+
const item1 = await storage.todos.put({
|
|
320
|
+
content: 'item 1',
|
|
321
|
+
done: false,
|
|
322
|
+
tags: [],
|
|
323
|
+
category: 'general',
|
|
324
|
+
attachments: [],
|
|
325
|
+
});
|
|
326
|
+
item1.get('attachments').push({
|
|
327
|
+
name: 'attachment 1',
|
|
328
|
+
});
|
|
329
|
+
item1.get('attachments').push({
|
|
330
|
+
name: 'attachment 2',
|
|
331
|
+
});
|
|
332
|
+
item1.get('attachments').push({
|
|
333
|
+
name: 'attachment 3',
|
|
334
|
+
});
|
|
335
|
+
item1.get('attachments').delete(1);
|
|
336
|
+
expect(item1.get('attachments').length).toBe(2);
|
|
337
|
+
expect(item1.get('attachments').get(0).get('name')).toBe('attachment 1');
|
|
338
|
+
expect(item1.get('attachments').get(1).get('name')).toBe('attachment 3');
|
|
339
|
+
// should work on lists which are not field-validated
|
|
340
|
+
const item2 = await storage.weirds.put({
|
|
341
|
+
weird: ['foo', 'bar', 'baz'],
|
|
342
|
+
});
|
|
343
|
+
item2.get('weird').delete(1);
|
|
344
|
+
expect(item2.get('weird').length).toBe(2);
|
|
345
|
+
expect(item2.get('weird').get(0)).toBe('foo');
|
|
346
|
+
expect(item2.get('weird').get(1)).toBe('baz');
|
|
347
|
+
});
|
|
348
|
+
it('should expose updatedAt', async () => {
|
|
349
|
+
const storage = await createTestStorage();
|
|
350
|
+
let time = new Date();
|
|
351
|
+
vitest.setSystemTime(time);
|
|
352
|
+
const item1 = await storage.todos.put({
|
|
353
|
+
content: 'item 1',
|
|
354
|
+
done: false,
|
|
355
|
+
tags: [],
|
|
356
|
+
category: 'general',
|
|
357
|
+
attachments: [],
|
|
358
|
+
});
|
|
359
|
+
expect(item1.updatedAt).toEqual(time.getTime());
|
|
360
|
+
time = new Date(time.getTime() + 1000);
|
|
361
|
+
vitest.setSystemTime(time);
|
|
362
|
+
item1.update({
|
|
363
|
+
content: 'item 1 updated',
|
|
364
|
+
});
|
|
365
|
+
expect(item1.updatedAt).toEqual(time.getTime());
|
|
366
|
+
// works on nested fields
|
|
367
|
+
time = new Date(time.getTime() + 1000);
|
|
368
|
+
vitest.setSystemTime(time);
|
|
369
|
+
item1.get('attachments').push({
|
|
370
|
+
name: 'attachment 1',
|
|
371
|
+
});
|
|
372
|
+
expect(item1.deepUpdatedAt).toEqual(time.getTime());
|
|
373
|
+
time = new Date(time.getTime() + 1000);
|
|
374
|
+
vitest.setSystemTime(time);
|
|
375
|
+
item1.get('attachments').get(0).set('name', 'attachment 1 updated');
|
|
376
|
+
expect(item1.deepUpdatedAt).toEqual(time.getTime());
|
|
377
|
+
// but other items have their own updatedAt
|
|
378
|
+
expect(item1.get('tags').deepUpdatedAt).not.toEqual(time.getTime());
|
|
379
|
+
});
|
|
380
|
+
it('should allow creating a new document from another document snapshot', async () => {
|
|
381
|
+
const storage = await createTestStorage();
|
|
382
|
+
const item1 = await storage.todos.put({
|
|
383
|
+
content: 'item 1',
|
|
384
|
+
done: false,
|
|
385
|
+
tags: ['tag 1'],
|
|
386
|
+
category: 'general',
|
|
387
|
+
attachments: [
|
|
388
|
+
{
|
|
389
|
+
name: 'attachment 1',
|
|
390
|
+
},
|
|
391
|
+
],
|
|
392
|
+
});
|
|
393
|
+
const _a = item1.getSnapshot(), { id } = _a, snapshot = __rest(_a, ["id"]);
|
|
394
|
+
const item2 = await storage.todos.put(snapshot);
|
|
395
|
+
expect(item2.get('tags').length).toBe(1);
|
|
396
|
+
expect(item2.get('attachments').length).toBe(1);
|
|
397
|
+
item2.get('attachments').get(0).set('name', 'attachment 2');
|
|
398
|
+
expect(item1.get('attachments').get(0).get('name')).toBe('attachment 1');
|
|
399
|
+
});
|
|
400
|
+
});
|
|
401
401
|
//# sourceMappingURL=documents.test.js.map
|