@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,142 +1,142 @@
|
|
|
1
|
-
import { EntityFile, MARK_FAILED, UPDATE } from './EntityFile.js';
|
|
2
|
-
import { FileStorage } from './FileStorage.js';
|
|
3
|
-
/**
|
|
4
|
-
* Default: if file was deleted > 3 days ago
|
|
5
|
-
*/
|
|
6
|
-
function defaultCanCleanup(fileData) {
|
|
7
|
-
return (fileData.deletedAt !== null &&
|
|
8
|
-
fileData.deletedAt < Date.now() - 1000 * 60 * 24 * 3);
|
|
9
|
-
}
|
|
10
|
-
export class FileManager {
|
|
11
|
-
constructor({ db, sync, context, meta, config = {}, }) {
|
|
12
|
-
this.files = new Map();
|
|
13
|
-
this.add = async (fileInput) => {
|
|
14
|
-
const file = fileInput;
|
|
15
|
-
file.remote = false;
|
|
16
|
-
// immediately cache the file
|
|
17
|
-
if (!this.files.has(file.id)) {
|
|
18
|
-
const entityFile = new EntityFile(file.id);
|
|
19
|
-
entityFile[UPDATE](file);
|
|
20
|
-
this.files.set(file.id, entityFile);
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
this.files.get(file.id)[UPDATE](file);
|
|
24
|
-
}
|
|
25
|
-
// write to local storage and send to sync immediately
|
|
26
|
-
await this.storage.addFile(file);
|
|
27
|
-
// send to sync
|
|
28
|
-
if (file.file) {
|
|
29
|
-
const result = await this.sync.uploadFile(file);
|
|
30
|
-
if (result.success) {
|
|
31
|
-
await this.storage.markUploaded(file.id);
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
this.context.log('error', 'Failed to upload file');
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
this.uploadFile = async (file, retries = 0) => {
|
|
39
|
-
const result = await this.sync.uploadFile(file);
|
|
40
|
-
if (result.success) {
|
|
41
|
-
await this.storage.markUploaded(file.id);
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
if (result.retry && retries < 5) {
|
|
45
|
-
this.context.log('error', 'Error uploading file, retrying...');
|
|
46
|
-
// schedule a retry
|
|
47
|
-
setTimeout(this.uploadFile, 1000, file, retries + 1);
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
this.context.log('error', 'Failed to upload file. Not retrying until next sync.');
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
/**
|
|
55
|
-
* Immediately returns an EntityFile to use, then either loads
|
|
56
|
-
* the file from cache, local database, or the server.
|
|
57
|
-
*/
|
|
58
|
-
this.get = (id) => {
|
|
59
|
-
if (this.files.has(id)) {
|
|
60
|
-
return this.files.get(id);
|
|
61
|
-
}
|
|
62
|
-
const file = new EntityFile(id);
|
|
63
|
-
this.files.set(id, file);
|
|
64
|
-
this.load(file);
|
|
65
|
-
return file;
|
|
66
|
-
};
|
|
67
|
-
this.load = async (file, retries = 0) => {
|
|
68
|
-
if (retries > 5) {
|
|
69
|
-
file[MARK_FAILED]();
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
const fileData = await this.storage.getFile(file.id);
|
|
73
|
-
if (fileData) {
|
|
74
|
-
file[UPDATE](fileData);
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
// maybe we don't have it yet, it might be on the server still.
|
|
78
|
-
try {
|
|
79
|
-
const result = await this.sync.getFile(file.id);
|
|
80
|
-
if (result.success) {
|
|
81
|
-
file[UPDATE](result.data);
|
|
82
|
-
await this.storage.addFile(result.data);
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
file[MARK_FAILED]();
|
|
86
|
-
if (result.retry) {
|
|
87
|
-
// schedule a retry
|
|
88
|
-
setTimeout(this.load, 1000, file, retries + 1);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
catch (err) {
|
|
93
|
-
this.context.log('error', 'Failed to load file', err);
|
|
94
|
-
file[MARK_FAILED]();
|
|
95
|
-
// schedule a retry
|
|
96
|
-
setTimeout(this.load, 1000, file, retries + 1);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
this.listUnsynced = async () => {
|
|
101
|
-
return this.storage.listUnsynced();
|
|
102
|
-
};
|
|
103
|
-
this.onOnlineChange = async (online) => {
|
|
104
|
-
// if online, try to upload any unsynced files
|
|
105
|
-
if (online) {
|
|
106
|
-
const unsynced = await this.listUnsynced();
|
|
107
|
-
await Promise.all(unsynced.map(this.uploadFile));
|
|
108
|
-
}
|
|
109
|
-
};
|
|
110
|
-
this.tryCleanupDeletedFiles = async () => {
|
|
111
|
-
let count = 0;
|
|
112
|
-
let skipCount = 0;
|
|
113
|
-
await this.storage.iterateOverPendingDelete((fileData, store) => {
|
|
114
|
-
if (this.config.canCleanupDeletedFile(fileData)) {
|
|
115
|
-
count++;
|
|
116
|
-
store.delete(fileData.id);
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
skipCount++;
|
|
120
|
-
}
|
|
121
|
-
});
|
|
122
|
-
this.context.log('info', `Cleaned up ${count} files, skipped ${skipCount} files`);
|
|
123
|
-
};
|
|
124
|
-
this.handleFileRefsDeleted = async (fileRefs) => {
|
|
125
|
-
const tx = this.storage.createTransaction(['files'], 'readwrite');
|
|
126
|
-
await Promise.all(fileRefs.map(async (fileRef) => {
|
|
127
|
-
await this.storage.markPendingDelete(fileRef.id, { transaction: tx });
|
|
128
|
-
}));
|
|
129
|
-
this.context.log('info', `Marked ${fileRefs.length} files as pending delete`);
|
|
130
|
-
};
|
|
131
|
-
this.storage = new FileStorage(db);
|
|
132
|
-
this.sync = sync;
|
|
133
|
-
this.context = context;
|
|
134
|
-
this.meta = meta;
|
|
135
|
-
this.config = Object.assign({ canCleanupDeletedFile: defaultCanCleanup }, config);
|
|
136
|
-
this.sync.subscribe('onlineChange', this.onOnlineChange);
|
|
137
|
-
this.meta.subscribe('filesDeleted', this.handleFileRefsDeleted);
|
|
138
|
-
// check on startup to see if files can be cleaned up
|
|
139
|
-
this.tryCleanupDeletedFiles();
|
|
140
|
-
}
|
|
141
|
-
}
|
|
1
|
+
import { EntityFile, MARK_FAILED, UPDATE } from './EntityFile.js';
|
|
2
|
+
import { FileStorage } from './FileStorage.js';
|
|
3
|
+
/**
|
|
4
|
+
* Default: if file was deleted > 3 days ago
|
|
5
|
+
*/
|
|
6
|
+
function defaultCanCleanup(fileData) {
|
|
7
|
+
return (fileData.deletedAt !== null &&
|
|
8
|
+
fileData.deletedAt < Date.now() - 1000 * 60 * 24 * 3);
|
|
9
|
+
}
|
|
10
|
+
export class FileManager {
|
|
11
|
+
constructor({ db, sync, context, meta, config = {}, }) {
|
|
12
|
+
this.files = new Map();
|
|
13
|
+
this.add = async (fileInput) => {
|
|
14
|
+
const file = fileInput;
|
|
15
|
+
file.remote = false;
|
|
16
|
+
// immediately cache the file
|
|
17
|
+
if (!this.files.has(file.id)) {
|
|
18
|
+
const entityFile = new EntityFile(file.id);
|
|
19
|
+
entityFile[UPDATE](file);
|
|
20
|
+
this.files.set(file.id, entityFile);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
this.files.get(file.id)[UPDATE](file);
|
|
24
|
+
}
|
|
25
|
+
// write to local storage and send to sync immediately
|
|
26
|
+
await this.storage.addFile(file);
|
|
27
|
+
// send to sync
|
|
28
|
+
if (file.file) {
|
|
29
|
+
const result = await this.sync.uploadFile(file);
|
|
30
|
+
if (result.success) {
|
|
31
|
+
await this.storage.markUploaded(file.id);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
this.context.log('error', 'Failed to upload file');
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
this.uploadFile = async (file, retries = 0) => {
|
|
39
|
+
const result = await this.sync.uploadFile(file);
|
|
40
|
+
if (result.success) {
|
|
41
|
+
await this.storage.markUploaded(file.id);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
if (result.retry && retries < 5) {
|
|
45
|
+
this.context.log('error', 'Error uploading file, retrying...');
|
|
46
|
+
// schedule a retry
|
|
47
|
+
setTimeout(this.uploadFile, 1000, file, retries + 1);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
this.context.log('error', 'Failed to upload file. Not retrying until next sync.');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Immediately returns an EntityFile to use, then either loads
|
|
56
|
+
* the file from cache, local database, or the server.
|
|
57
|
+
*/
|
|
58
|
+
this.get = (id) => {
|
|
59
|
+
if (this.files.has(id)) {
|
|
60
|
+
return this.files.get(id);
|
|
61
|
+
}
|
|
62
|
+
const file = new EntityFile(id);
|
|
63
|
+
this.files.set(id, file);
|
|
64
|
+
this.load(file);
|
|
65
|
+
return file;
|
|
66
|
+
};
|
|
67
|
+
this.load = async (file, retries = 0) => {
|
|
68
|
+
if (retries > 5) {
|
|
69
|
+
file[MARK_FAILED]();
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const fileData = await this.storage.getFile(file.id);
|
|
73
|
+
if (fileData) {
|
|
74
|
+
file[UPDATE](fileData);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
// maybe we don't have it yet, it might be on the server still.
|
|
78
|
+
try {
|
|
79
|
+
const result = await this.sync.getFile(file.id);
|
|
80
|
+
if (result.success) {
|
|
81
|
+
file[UPDATE](result.data);
|
|
82
|
+
await this.storage.addFile(result.data);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
file[MARK_FAILED]();
|
|
86
|
+
if (result.retry) {
|
|
87
|
+
// schedule a retry
|
|
88
|
+
setTimeout(this.load, 1000, file, retries + 1);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
this.context.log('error', 'Failed to load file', err);
|
|
94
|
+
file[MARK_FAILED]();
|
|
95
|
+
// schedule a retry
|
|
96
|
+
setTimeout(this.load, 1000, file, retries + 1);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
this.listUnsynced = async () => {
|
|
101
|
+
return this.storage.listUnsynced();
|
|
102
|
+
};
|
|
103
|
+
this.onOnlineChange = async (online) => {
|
|
104
|
+
// if online, try to upload any unsynced files
|
|
105
|
+
if (online) {
|
|
106
|
+
const unsynced = await this.listUnsynced();
|
|
107
|
+
await Promise.all(unsynced.map(this.uploadFile));
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
this.tryCleanupDeletedFiles = async () => {
|
|
111
|
+
let count = 0;
|
|
112
|
+
let skipCount = 0;
|
|
113
|
+
await this.storage.iterateOverPendingDelete((fileData, store) => {
|
|
114
|
+
if (this.config.canCleanupDeletedFile(fileData)) {
|
|
115
|
+
count++;
|
|
116
|
+
store.delete(fileData.id);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
skipCount++;
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
this.context.log('info', `Cleaned up ${count} files, skipped ${skipCount} files`);
|
|
123
|
+
};
|
|
124
|
+
this.handleFileRefsDeleted = async (fileRefs) => {
|
|
125
|
+
const tx = this.storage.createTransaction(['files'], 'readwrite');
|
|
126
|
+
await Promise.all(fileRefs.map(async (fileRef) => {
|
|
127
|
+
await this.storage.markPendingDelete(fileRef.id, { transaction: tx });
|
|
128
|
+
}));
|
|
129
|
+
this.context.log('info', `Marked ${fileRefs.length} files as pending delete`);
|
|
130
|
+
};
|
|
131
|
+
this.storage = new FileStorage(db);
|
|
132
|
+
this.sync = sync;
|
|
133
|
+
this.context = context;
|
|
134
|
+
this.meta = meta;
|
|
135
|
+
this.config = Object.assign({ canCleanupDeletedFile: defaultCanCleanup }, config);
|
|
136
|
+
this.sync.subscribe('onlineChange', this.onOnlineChange);
|
|
137
|
+
this.meta.subscribe('filesDeleted', this.handleFileRefsDeleted);
|
|
138
|
+
// check on startup to see if files can be cleaned up
|
|
139
|
+
this.tryCleanupDeletedFiles();
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
142
|
//# sourceMappingURL=FileManager.js.map
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import { FileData } from '@verdant-web/common';
|
|
2
|
-
import { IDBService } from '../IDBService.js';
|
|
3
|
-
export interface ReturnedFileData extends FileData {
|
|
4
|
-
deletedAt: number | null;
|
|
5
|
-
}
|
|
6
|
-
export declare class FileStorage extends IDBService {
|
|
7
|
-
addFile: (file: FileData, { transaction }?: {
|
|
8
|
-
transaction?: IDBTransaction | undefined;
|
|
9
|
-
}) => Promise<IDBValidKey>;
|
|
10
|
-
private hydrateFileData;
|
|
11
|
-
markUploaded: (id: string, { transaction }?: {
|
|
12
|
-
transaction?: IDBTransaction | undefined;
|
|
13
|
-
}) => Promise<IDBValidKey>;
|
|
14
|
-
private getFileRaw;
|
|
15
|
-
getFile: (id: string, { transaction }?: {
|
|
16
|
-
transaction?: IDBTransaction | undefined;
|
|
17
|
-
}) => Promise<ReturnedFileData | undefined>;
|
|
18
|
-
deleteFile(id: string, { transaction }?: {
|
|
19
|
-
transaction?: IDBTransaction;
|
|
20
|
-
}): Promise<undefined>;
|
|
21
|
-
markPendingDelete: (id: string, { transaction }?: {
|
|
22
|
-
transaction?: IDBTransaction | undefined;
|
|
23
|
-
}) => Promise<IDBValidKey>;
|
|
24
|
-
listUnsynced: () => Promise<ReturnedFileData[]>;
|
|
25
|
-
iterateOverPendingDelete: (iterator: (file: ReturnedFileData, store: IDBObjectStore) => void, transaction?: IDBTransaction) => Promise<void>;
|
|
26
|
-
}
|
|
27
|
-
export declare function arrayBufferToBlob(buffer: ArrayBuffer, type: string): Blob;
|
|
1
|
+
import { FileData } from '@verdant-web/common';
|
|
2
|
+
import { IDBService } from '../IDBService.js';
|
|
3
|
+
export interface ReturnedFileData extends FileData {
|
|
4
|
+
deletedAt: number | null;
|
|
5
|
+
}
|
|
6
|
+
export declare class FileStorage extends IDBService {
|
|
7
|
+
addFile: (file: FileData, { transaction }?: {
|
|
8
|
+
transaction?: IDBTransaction | undefined;
|
|
9
|
+
}) => Promise<IDBValidKey>;
|
|
10
|
+
private hydrateFileData;
|
|
11
|
+
markUploaded: (id: string, { transaction }?: {
|
|
12
|
+
transaction?: IDBTransaction | undefined;
|
|
13
|
+
}) => Promise<IDBValidKey>;
|
|
14
|
+
private getFileRaw;
|
|
15
|
+
getFile: (id: string, { transaction }?: {
|
|
16
|
+
transaction?: IDBTransaction | undefined;
|
|
17
|
+
}) => Promise<ReturnedFileData | undefined>;
|
|
18
|
+
deleteFile(id: string, { transaction }?: {
|
|
19
|
+
transaction?: IDBTransaction;
|
|
20
|
+
}): Promise<undefined>;
|
|
21
|
+
markPendingDelete: (id: string, { transaction }?: {
|
|
22
|
+
transaction?: IDBTransaction | undefined;
|
|
23
|
+
}) => Promise<IDBValidKey>;
|
|
24
|
+
listUnsynced: () => Promise<ReturnedFileData[]>;
|
|
25
|
+
iterateOverPendingDelete: (iterator: (file: ReturnedFileData, store: IDBObjectStore) => void, transaction?: IDBTransaction) => Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
export declare function arrayBufferToBlob(buffer: ArrayBuffer, type: string): Blob;
|
|
@@ -1,89 +1,89 @@
|
|
|
1
|
-
import { IDBService } from '../IDBService.js';
|
|
2
|
-
import { fileToArrayBuffer } from './utils.js';
|
|
3
|
-
export class FileStorage extends IDBService {
|
|
4
|
-
constructor() {
|
|
5
|
-
super(...arguments);
|
|
6
|
-
this.addFile = async (file, { transaction } = {}) => {
|
|
7
|
-
const buffer = file.file ? await fileToArrayBuffer(file.file) : undefined;
|
|
8
|
-
return this.run('files', (store) => {
|
|
9
|
-
return store.put({
|
|
10
|
-
id: file.id,
|
|
11
|
-
// IDB doesn't support boolean indexes
|
|
12
|
-
remote: file.remote ? 'true' : 'false',
|
|
13
|
-
deletedAt: null,
|
|
14
|
-
name: file.name,
|
|
15
|
-
type: file.type,
|
|
16
|
-
url: file.url,
|
|
17
|
-
buffer,
|
|
18
|
-
});
|
|
19
|
-
}, 'readwrite', transaction);
|
|
20
|
-
};
|
|
21
|
-
this.hydrateFileData = (raw) => {
|
|
22
|
-
raw.remote = raw.remote === 'true';
|
|
23
|
-
const buffer = raw.buffer;
|
|
24
|
-
delete raw.buffer;
|
|
25
|
-
raw.file = buffer
|
|
26
|
-
? arrayBufferToBlob(buffer, raw.type)
|
|
27
|
-
: undefined;
|
|
28
|
-
return raw;
|
|
29
|
-
};
|
|
30
|
-
this.markUploaded = async (id, { transaction } = {}) => {
|
|
31
|
-
const current = await this.getFileRaw(id, { transaction });
|
|
32
|
-
if (!current) {
|
|
33
|
-
throw new Error('File is not in local database');
|
|
34
|
-
}
|
|
35
|
-
return this.run('files', (store) => {
|
|
36
|
-
return store.put(Object.assign(Object.assign({}, current), { remote: 'true' }));
|
|
37
|
-
}, 'readwrite', transaction);
|
|
38
|
-
};
|
|
39
|
-
this.getFileRaw = async (id, { transaction } = {}) => {
|
|
40
|
-
const raw = await this.run('files', (store) => {
|
|
41
|
-
return store.get(id);
|
|
42
|
-
}, 'readonly', transaction);
|
|
43
|
-
if (!raw) {
|
|
44
|
-
return undefined;
|
|
45
|
-
}
|
|
46
|
-
return raw;
|
|
47
|
-
};
|
|
48
|
-
this.getFile = async (id, { transaction } = {}) => {
|
|
49
|
-
const raw = await this.getFileRaw(id, { transaction });
|
|
50
|
-
if (!raw) {
|
|
51
|
-
return undefined;
|
|
52
|
-
}
|
|
53
|
-
return this.hydrateFileData(raw);
|
|
54
|
-
};
|
|
55
|
-
this.markPendingDelete = async (id, { transaction } = {}) => {
|
|
56
|
-
const current = await this.getFileRaw(id, { transaction });
|
|
57
|
-
if (!current) {
|
|
58
|
-
throw new Error('File is not in local database');
|
|
59
|
-
}
|
|
60
|
-
return this.run('files', (store) => {
|
|
61
|
-
return store.put(Object.assign(Object.assign({}, current), { deletedAt: Date.now() }));
|
|
62
|
-
}, 'readwrite', transaction);
|
|
63
|
-
};
|
|
64
|
-
this.listUnsynced = async () => {
|
|
65
|
-
const raw = await this.run('files', (store) => {
|
|
66
|
-
return store.index('remote').getAll('false');
|
|
67
|
-
}, 'readonly');
|
|
68
|
-
return raw.map(this.hydrateFileData);
|
|
69
|
-
};
|
|
70
|
-
this.iterateOverPendingDelete = (iterator, transaction) => {
|
|
71
|
-
return this.iterate('files', (store) => {
|
|
72
|
-
return store
|
|
73
|
-
.index('deletedAt')
|
|
74
|
-
.openCursor(IDBKeyRange.lowerBound(0, true));
|
|
75
|
-
}, (value, store) => {
|
|
76
|
-
iterator(this.hydrateFileData(value), store);
|
|
77
|
-
}, 'readwrite', transaction);
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
deleteFile(id, { transaction } = {}) {
|
|
81
|
-
return this.run('files', (store) => {
|
|
82
|
-
return store.delete(id);
|
|
83
|
-
}, 'readwrite', transaction);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
export function arrayBufferToBlob(buffer, type) {
|
|
87
|
-
return new Blob([buffer], { type });
|
|
88
|
-
}
|
|
1
|
+
import { IDBService } from '../IDBService.js';
|
|
2
|
+
import { fileToArrayBuffer } from './utils.js';
|
|
3
|
+
export class FileStorage extends IDBService {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(...arguments);
|
|
6
|
+
this.addFile = async (file, { transaction } = {}) => {
|
|
7
|
+
const buffer = file.file ? await fileToArrayBuffer(file.file) : undefined;
|
|
8
|
+
return this.run('files', (store) => {
|
|
9
|
+
return store.put({
|
|
10
|
+
id: file.id,
|
|
11
|
+
// IDB doesn't support boolean indexes
|
|
12
|
+
remote: file.remote ? 'true' : 'false',
|
|
13
|
+
deletedAt: null,
|
|
14
|
+
name: file.name,
|
|
15
|
+
type: file.type,
|
|
16
|
+
url: file.url,
|
|
17
|
+
buffer,
|
|
18
|
+
});
|
|
19
|
+
}, 'readwrite', transaction);
|
|
20
|
+
};
|
|
21
|
+
this.hydrateFileData = (raw) => {
|
|
22
|
+
raw.remote = raw.remote === 'true';
|
|
23
|
+
const buffer = raw.buffer;
|
|
24
|
+
delete raw.buffer;
|
|
25
|
+
raw.file = buffer
|
|
26
|
+
? arrayBufferToBlob(buffer, raw.type)
|
|
27
|
+
: undefined;
|
|
28
|
+
return raw;
|
|
29
|
+
};
|
|
30
|
+
this.markUploaded = async (id, { transaction } = {}) => {
|
|
31
|
+
const current = await this.getFileRaw(id, { transaction });
|
|
32
|
+
if (!current) {
|
|
33
|
+
throw new Error('File is not in local database');
|
|
34
|
+
}
|
|
35
|
+
return this.run('files', (store) => {
|
|
36
|
+
return store.put(Object.assign(Object.assign({}, current), { remote: 'true' }));
|
|
37
|
+
}, 'readwrite', transaction);
|
|
38
|
+
};
|
|
39
|
+
this.getFileRaw = async (id, { transaction } = {}) => {
|
|
40
|
+
const raw = await this.run('files', (store) => {
|
|
41
|
+
return store.get(id);
|
|
42
|
+
}, 'readonly', transaction);
|
|
43
|
+
if (!raw) {
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
return raw;
|
|
47
|
+
};
|
|
48
|
+
this.getFile = async (id, { transaction } = {}) => {
|
|
49
|
+
const raw = await this.getFileRaw(id, { transaction });
|
|
50
|
+
if (!raw) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
return this.hydrateFileData(raw);
|
|
54
|
+
};
|
|
55
|
+
this.markPendingDelete = async (id, { transaction } = {}) => {
|
|
56
|
+
const current = await this.getFileRaw(id, { transaction });
|
|
57
|
+
if (!current) {
|
|
58
|
+
throw new Error('File is not in local database');
|
|
59
|
+
}
|
|
60
|
+
return this.run('files', (store) => {
|
|
61
|
+
return store.put(Object.assign(Object.assign({}, current), { deletedAt: Date.now() }));
|
|
62
|
+
}, 'readwrite', transaction);
|
|
63
|
+
};
|
|
64
|
+
this.listUnsynced = async () => {
|
|
65
|
+
const raw = await this.run('files', (store) => {
|
|
66
|
+
return store.index('remote').getAll('false');
|
|
67
|
+
}, 'readonly');
|
|
68
|
+
return raw.map(this.hydrateFileData);
|
|
69
|
+
};
|
|
70
|
+
this.iterateOverPendingDelete = (iterator, transaction) => {
|
|
71
|
+
return this.iterate('files', (store) => {
|
|
72
|
+
return store
|
|
73
|
+
.index('deletedAt')
|
|
74
|
+
.openCursor(IDBKeyRange.lowerBound(0, true));
|
|
75
|
+
}, (value, store) => {
|
|
76
|
+
iterator(this.hydrateFileData(value), store);
|
|
77
|
+
}, 'readwrite', transaction);
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
deleteFile(id, { transaction } = {}) {
|
|
81
|
+
return this.run('files', (store) => {
|
|
82
|
+
return store.delete(id);
|
|
83
|
+
}, 'readwrite', transaction);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export function arrayBufferToBlob(buffer, type) {
|
|
87
|
+
return new Blob([buffer], { type });
|
|
88
|
+
}
|
|
89
89
|
//# sourceMappingURL=FileStorage.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { FileData } from '@verdant-web/common';
|
|
2
|
-
export declare function createFileData(file: File): FileData;
|
|
3
|
-
/**
|
|
4
|
-
* Replaces File values with refs and returns the normalized value.
|
|
5
|
-
* The list of files passed to the second argument will be populated with the files found in the value.
|
|
6
|
-
*/
|
|
7
|
-
export declare function processValueFiles(value: any, onFileIdentified: (fileData: FileData) => void): any;
|
|
8
|
-
export declare function fileToArrayBuffer(file: File | Blob): Promise<ArrayBuffer>;
|
|
1
|
+
import { FileData } from '@verdant-web/common';
|
|
2
|
+
export declare function createFileData(file: File): FileData;
|
|
3
|
+
/**
|
|
4
|
+
* Replaces File values with refs and returns the normalized value.
|
|
5
|
+
* The list of files passed to the second argument will be populated with the files found in the value.
|
|
6
|
+
*/
|
|
7
|
+
export declare function processValueFiles(value: any, onFileIdentified: (fileData: FileData) => void): any;
|
|
8
|
+
export declare function fileToArrayBuffer(file: File | Blob): Promise<ArrayBuffer>;
|
package/dist/esm/files/utils.js
CHANGED
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
import { createFileRef } from '@verdant-web/common';
|
|
2
|
-
import cuid from 'cuid';
|
|
3
|
-
export function createFileData(file) {
|
|
4
|
-
return {
|
|
5
|
-
id: cuid(),
|
|
6
|
-
file: file,
|
|
7
|
-
url: undefined,
|
|
8
|
-
remote: false,
|
|
9
|
-
name: file.name,
|
|
10
|
-
type: file.type,
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Replaces File values with refs and returns the normalized value.
|
|
15
|
-
* The list of files passed to the second argument will be populated with the files found in the value.
|
|
16
|
-
*/
|
|
17
|
-
export function processValueFiles(value, onFileIdentified) {
|
|
18
|
-
if (value instanceof File) {
|
|
19
|
-
const data = createFileData(value);
|
|
20
|
-
onFileIdentified(data);
|
|
21
|
-
return createFileRef(data.id);
|
|
22
|
-
}
|
|
23
|
-
if (Array.isArray(value)) {
|
|
24
|
-
for (let i = 0; i < value.length; i++) {
|
|
25
|
-
value[i] = processValueFiles(value[i], onFileIdentified);
|
|
26
|
-
}
|
|
27
|
-
return value;
|
|
28
|
-
}
|
|
29
|
-
if (typeof value === 'object') {
|
|
30
|
-
for (const key in value) {
|
|
31
|
-
value[key] = processValueFiles(value[key], onFileIdentified);
|
|
32
|
-
}
|
|
33
|
-
return value;
|
|
34
|
-
}
|
|
35
|
-
return value;
|
|
36
|
-
}
|
|
37
|
-
export function fileToArrayBuffer(file) {
|
|
38
|
-
return new Promise((resolve, reject) => {
|
|
39
|
-
const reader = new FileReader();
|
|
40
|
-
reader.onload = () => {
|
|
41
|
-
resolve(reader.result);
|
|
42
|
-
};
|
|
43
|
-
reader.onerror = reject;
|
|
44
|
-
reader.readAsArrayBuffer(file);
|
|
45
|
-
});
|
|
46
|
-
}
|
|
1
|
+
import { createFileRef } from '@verdant-web/common';
|
|
2
|
+
import cuid from 'cuid';
|
|
3
|
+
export function createFileData(file) {
|
|
4
|
+
return {
|
|
5
|
+
id: cuid(),
|
|
6
|
+
file: file,
|
|
7
|
+
url: undefined,
|
|
8
|
+
remote: false,
|
|
9
|
+
name: file.name,
|
|
10
|
+
type: file.type,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Replaces File values with refs and returns the normalized value.
|
|
15
|
+
* The list of files passed to the second argument will be populated with the files found in the value.
|
|
16
|
+
*/
|
|
17
|
+
export function processValueFiles(value, onFileIdentified) {
|
|
18
|
+
if (value instanceof File) {
|
|
19
|
+
const data = createFileData(value);
|
|
20
|
+
onFileIdentified(data);
|
|
21
|
+
return createFileRef(data.id);
|
|
22
|
+
}
|
|
23
|
+
if (Array.isArray(value)) {
|
|
24
|
+
for (let i = 0; i < value.length; i++) {
|
|
25
|
+
value[i] = processValueFiles(value[i], onFileIdentified);
|
|
26
|
+
}
|
|
27
|
+
return value;
|
|
28
|
+
}
|
|
29
|
+
if (typeof value === 'object') {
|
|
30
|
+
for (const key in value) {
|
|
31
|
+
value[key] = processValueFiles(value[key], onFileIdentified);
|
|
32
|
+
}
|
|
33
|
+
return value;
|
|
34
|
+
}
|
|
35
|
+
return value;
|
|
36
|
+
}
|
|
37
|
+
export function fileToArrayBuffer(file) {
|
|
38
|
+
return new Promise((resolve, reject) => {
|
|
39
|
+
const reader = new FileReader();
|
|
40
|
+
reader.onload = () => {
|
|
41
|
+
resolve(reader.result);
|
|
42
|
+
};
|
|
43
|
+
reader.onerror = reject;
|
|
44
|
+
reader.readAsArrayBuffer(file);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
47
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export {};
|
|
1
|
+
export {};
|