@dittolive/ditto 4.4.5 → 4.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DittoReactNative.podspec +27 -0
- package/README.md +68 -51
- package/node/ditto.cjs.js +1639 -851
- package/node/ditto.darwin-arm64.node +0 -0
- package/node/ditto.darwin-x64.node +0 -0
- package/node/ditto.linux-arm.node +0 -0
- package/node/ditto.linux-x64.node +0 -0
- package/node/ditto.win32-x64.node +0 -0
- package/node/transports.darwin-arm64.node +0 -0
- package/node/transports.darwin-x64.node +0 -0
- package/package.json +34 -38
- package/react-native/android/CMakeLists.txt +37 -0
- package/react-native/android/build.gradle +203 -0
- package/react-native/android/cpp-adapter.cpp +254 -0
- package/react-native/android/gradle.properties +5 -0
- package/react-native/android/src/main/AndroidManifest.xml +4 -0
- package/react-native/android/src/main/java/com/dittolive/rnsdk/DittoRNSDKModule.java +85 -0
- package/react-native/android/src/main/java/com/dittolive/rnsdk/DittoRNSDKPackage.java +28 -0
- package/react-native/boost/boost/assert.hpp +85 -0
- package/react-native/boost/boost/config/abi/borland_prefix.hpp +27 -0
- package/react-native/boost/boost/config/abi/borland_suffix.hpp +12 -0
- package/react-native/boost/boost/config/abi/msvc_prefix.hpp +22 -0
- package/react-native/boost/boost/config/abi/msvc_suffix.hpp +8 -0
- package/react-native/boost/boost/config/abi_prefix.hpp +25 -0
- package/react-native/boost/boost/config/abi_suffix.hpp +25 -0
- package/react-native/boost/boost/config/assert_cxx03.hpp +211 -0
- package/react-native/boost/boost/config/assert_cxx11.hpp +209 -0
- package/react-native/boost/boost/config/assert_cxx14.hpp +47 -0
- package/react-native/boost/boost/config/assert_cxx17.hpp +62 -0
- package/react-native/boost/boost/config/assert_cxx20.hpp +59 -0
- package/react-native/boost/boost/config/assert_cxx98.hpp +23 -0
- package/react-native/boost/boost/config/auto_link.hpp +525 -0
- package/react-native/boost/boost/config/compiler/borland.hpp +339 -0
- package/react-native/boost/boost/config/compiler/clang.hpp +366 -0
- package/react-native/boost/boost/config/compiler/clang_version.hpp +83 -0
- package/react-native/boost/boost/config/compiler/codegear.hpp +385 -0
- package/react-native/boost/boost/config/compiler/comeau.hpp +59 -0
- package/react-native/boost/boost/config/compiler/common_edg.hpp +183 -0
- package/react-native/boost/boost/config/compiler/compaq_cxx.hpp +19 -0
- package/react-native/boost/boost/config/compiler/cray.hpp +446 -0
- package/react-native/boost/boost/config/compiler/diab.hpp +26 -0
- package/react-native/boost/boost/config/compiler/digitalmars.hpp +143 -0
- package/react-native/boost/boost/config/compiler/gcc.hpp +383 -0
- package/react-native/boost/boost/config/compiler/gcc_xml.hpp +114 -0
- package/react-native/boost/boost/config/compiler/greenhills.hpp +28 -0
- package/react-native/boost/boost/config/compiler/hp_acc.hpp +149 -0
- package/react-native/boost/boost/config/compiler/intel.hpp +577 -0
- package/react-native/boost/boost/config/compiler/kai.hpp +33 -0
- package/react-native/boost/boost/config/compiler/metrowerks.hpp +198 -0
- package/react-native/boost/boost/config/compiler/mpw.hpp +140 -0
- package/react-native/boost/boost/config/compiler/nvcc.hpp +61 -0
- package/react-native/boost/boost/config/compiler/pathscale.hpp +138 -0
- package/react-native/boost/boost/config/compiler/pgi.hpp +23 -0
- package/react-native/boost/boost/config/compiler/sgi_mipspro.hpp +29 -0
- package/react-native/boost/boost/config/compiler/sunpro_cc.hpp +222 -0
- package/react-native/boost/boost/config/compiler/vacpp.hpp +186 -0
- package/react-native/boost/boost/config/compiler/visualc.hpp +391 -0
- package/react-native/boost/boost/config/compiler/xlcpp.hpp +299 -0
- package/react-native/boost/boost/config/compiler/xlcpp_zos.hpp +173 -0
- package/react-native/boost/boost/config/detail/cxx_composite.hpp +203 -0
- package/react-native/boost/boost/config/detail/posix_features.hpp +95 -0
- package/react-native/boost/boost/config/detail/select_compiler_config.hpp +157 -0
- package/react-native/boost/boost/config/detail/select_platform_config.hpp +147 -0
- package/react-native/boost/boost/config/detail/select_stdlib_config.hpp +121 -0
- package/react-native/boost/boost/config/detail/suffix.hpp +1294 -0
- package/react-native/boost/boost/config/header_deprecated.hpp +26 -0
- package/react-native/boost/boost/config/helper_macros.hpp +37 -0
- package/react-native/boost/boost/config/no_tr1/cmath.hpp +28 -0
- package/react-native/boost/boost/config/no_tr1/complex.hpp +28 -0
- package/react-native/boost/boost/config/no_tr1/functional.hpp +28 -0
- package/react-native/boost/boost/config/no_tr1/memory.hpp +28 -0
- package/react-native/boost/boost/config/no_tr1/utility.hpp +28 -0
- package/react-native/boost/boost/config/platform/aix.hpp +33 -0
- package/react-native/boost/boost/config/platform/amigaos.hpp +15 -0
- package/react-native/boost/boost/config/platform/beos.hpp +26 -0
- package/react-native/boost/boost/config/platform/bsd.hpp +83 -0
- package/react-native/boost/boost/config/platform/cloudabi.hpp +18 -0
- package/react-native/boost/boost/config/platform/cray.hpp +18 -0
- package/react-native/boost/boost/config/platform/cygwin.hpp +71 -0
- package/react-native/boost/boost/config/platform/haiku.hpp +31 -0
- package/react-native/boost/boost/config/platform/hpux.hpp +87 -0
- package/react-native/boost/boost/config/platform/irix.hpp +31 -0
- package/react-native/boost/boost/config/platform/linux.hpp +106 -0
- package/react-native/boost/boost/config/platform/macos.hpp +87 -0
- package/react-native/boost/boost/config/platform/qnxnto.hpp +31 -0
- package/react-native/boost/boost/config/platform/solaris.hpp +31 -0
- package/react-native/boost/boost/config/platform/symbian.hpp +97 -0
- package/react-native/boost/boost/config/platform/vms.hpp +25 -0
- package/react-native/boost/boost/config/platform/vxworks.hpp +422 -0
- package/react-native/boost/boost/config/platform/wasm.hpp +23 -0
- package/react-native/boost/boost/config/platform/win32.hpp +90 -0
- package/react-native/boost/boost/config/platform/zos.hpp +32 -0
- package/react-native/boost/boost/config/pragma_message.hpp +31 -0
- package/react-native/boost/boost/config/requires_threads.hpp +92 -0
- package/react-native/boost/boost/config/stdlib/dinkumware.hpp +324 -0
- package/react-native/boost/boost/config/stdlib/libcomo.hpp +93 -0
- package/react-native/boost/boost/config/stdlib/libcpp.hpp +180 -0
- package/react-native/boost/boost/config/stdlib/libstdcpp3.hpp +482 -0
- package/react-native/boost/boost/config/stdlib/modena.hpp +79 -0
- package/react-native/boost/boost/config/stdlib/msl.hpp +98 -0
- package/react-native/boost/boost/config/stdlib/roguewave.hpp +208 -0
- package/react-native/boost/boost/config/stdlib/sgi.hpp +168 -0
- package/react-native/boost/boost/config/stdlib/stlport.hpp +258 -0
- package/react-native/boost/boost/config/stdlib/vacpp.hpp +74 -0
- package/react-native/boost/boost/config/stdlib/xlcpp_zos.hpp +61 -0
- package/react-native/boost/boost/config/user.hpp +133 -0
- package/react-native/boost/boost/config/warning_disable.hpp +47 -0
- package/react-native/boost/boost/config/workaround.hpp +305 -0
- package/react-native/boost/boost/config.hpp +67 -0
- package/react-native/boost/boost/cstdint.hpp +556 -0
- package/react-native/boost/boost/intrusive_ptr.hpp +18 -0
- package/react-native/boost/boost/smart_ptr/detail/atomic_count.hpp +103 -0
- package/react-native/boost/boost/smart_ptr/detail/atomic_count_gcc.hpp +79 -0
- package/react-native/boost/boost/smart_ptr/detail/atomic_count_gcc_atomic.hpp +63 -0
- package/react-native/boost/boost/smart_ptr/detail/atomic_count_gcc_x86.hpp +88 -0
- package/react-native/boost/boost/smart_ptr/detail/atomic_count_nt.hpp +66 -0
- package/react-native/boost/boost/smart_ptr/detail/atomic_count_pt.hpp +104 -0
- package/react-native/boost/boost/smart_ptr/detail/atomic_count_spin.hpp +69 -0
- package/react-native/boost/boost/smart_ptr/detail/atomic_count_std_atomic.hpp +67 -0
- package/react-native/boost/boost/smart_ptr/detail/atomic_count_sync.hpp +72 -0
- package/react-native/boost/boost/smart_ptr/detail/atomic_count_win32.hpp +70 -0
- package/react-native/boost/boost/smart_ptr/detail/local_counted_base.hpp +148 -0
- package/react-native/boost/boost/smart_ptr/detail/local_sp_deleter.hpp +91 -0
- package/react-native/boost/boost/smart_ptr/detail/operator_bool.hpp +64 -0
- package/react-native/boost/boost/smart_ptr/detail/requires_cxx11.hpp +23 -0
- package/react-native/boost/boost/smart_ptr/detail/shared_count.hpp +707 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_convertible.hpp +92 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base.hpp +92 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +163 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_aix.hpp +152 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +185 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_gcc_atomic.hpp +148 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +170 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +200 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +194 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +179 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +186 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_nt.hpp +119 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_pt.hpp +147 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +174 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_spin.hpp +141 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp +147 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_sync.hpp +165 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +163 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_w32.hpp +140 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_impl.hpp +309 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_disable_deprecated.hpp +40 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_forward.hpp +52 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +27 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_has_sync_intrinsics.hpp +69 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_interlocked.hpp +173 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_noexcept.hpp +48 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_nullptr_t.hpp +45 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_obsolete.hpp +32 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_thread_pause.hpp +51 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_thread_sleep.hpp +104 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_thread_yield.hpp +100 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_typeinfo_.hpp +58 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_win32_sleep.hpp +49 -0
- package/react-native/boost/boost/smart_ptr/intrusive_ptr.hpp +409 -0
- package/react-native/boost/boost/smart_ptr/intrusive_ref_counter.hpp +188 -0
- package/react-native/cpp/include/Attachment.h +16 -0
- package/react-native/cpp/include/Authentication.h +23 -0
- package/react-native/cpp/include/Collection.h +13 -0
- package/react-native/cpp/include/DQL.h +21 -0
- package/react-native/cpp/include/Document.h +17 -0
- package/react-native/cpp/include/Identity.h +17 -0
- package/react-native/cpp/include/Lifecycle.h +16 -0
- package/react-native/cpp/include/LiveQuery.h +17 -0
- package/react-native/cpp/include/Logger.h +22 -0
- package/react-native/cpp/include/Misc.h +26 -0
- package/react-native/cpp/include/Presence.h +14 -0
- package/react-native/cpp/include/RetainableState.h +24 -0
- package/react-native/cpp/include/SmallPeerInfo.h +17 -0
- package/react-native/cpp/include/Transports.h +25 -0
- package/react-native/cpp/include/TypedArray.hpp +167 -0
- package/react-native/cpp/include/Utils.h +61 -0
- package/react-native/cpp/include/main.h +10 -0
- package/react-native/cpp/src/Attachment.cpp +86 -0
- package/react-native/cpp/src/Authentication.cpp +224 -0
- package/react-native/cpp/src/Collection.cpp +54 -0
- package/react-native/cpp/src/DQL.cpp +254 -0
- package/react-native/cpp/src/Document.cpp +146 -0
- package/react-native/cpp/src/Identity.cpp +123 -0
- package/react-native/cpp/src/Lifecycle.cpp +75 -0
- package/react-native/cpp/src/LiveQuery.cpp +64 -0
- package/react-native/cpp/src/Logger.cpp +200 -0
- package/react-native/cpp/src/Misc.cpp +271 -0
- package/react-native/cpp/src/Presence.cpp +77 -0
- package/react-native/cpp/src/RetainableState.cpp +15 -0
- package/react-native/cpp/src/SmallPeerInfo.cpp +108 -0
- package/react-native/cpp/src/Transports.cpp +270 -0
- package/react-native/cpp/src/TypedArray.cpp +303 -0
- package/react-native/cpp/src/Utils.cpp +138 -0
- package/react-native/cpp/src/main.cpp +149 -0
- package/react-native/dittoffi/dittoffi.h +4698 -0
- package/react-native/dittoffi/ifaddrs.cpp +385 -0
- package/react-native/dittoffi/ifaddrs.h +206 -0
- package/react-native/ios/DittoRNSDK.h +7 -0
- package/react-native/ios/DittoRNSDK.mm +107 -0
- package/react-native/ios/YeetJSIUtils.h +60 -0
- package/react-native/ios/YeetJSIUtils.mm +196 -0
- package/react-native/lib/commonjs/ditto.rn.js +93 -0
- package/react-native/lib/commonjs/ditto.rn.js.map +1 -0
- package/react-native/lib/commonjs/index.js +14 -0
- package/react-native/lib/commonjs/index.js.map +1 -0
- package/react-native/lib/module/ditto.rn.js +83 -0
- package/react-native/lib/module/ditto.rn.js.map +1 -0
- package/react-native/lib/module/index.js +13 -0
- package/react-native/lib/module/index.js.map +1 -0
- package/react-native/lib/typescript/ditto.rn.d.ts +15 -0
- package/react-native/lib/typescript/ditto.rn.d.ts.map +1 -0
- package/react-native/lib/typescript/index.d.ts +1 -0
- package/react-native/lib/typescript/index.d.ts.map +1 -0
- package/react-native/scripts/ruby/include_local_boost.rb +78 -0
- package/react-native/src/ditto.rn.ts +91 -0
- package/react-native/src/environment/environment.fallback.ts +4 -0
- package/react-native/src/index.ts +26 -0
- package/react-native/src/sources/@cbor-redux.ts +2 -0
- package/react-native/src/sources/@ditto.core.ts +1 -0
- package/react-native/src/sources/@environment.ts +2 -0
- package/react-native/src/sources/attachment-fetch-event.ts +54 -0
- package/react-native/src/sources/attachment-fetcher-manager.ts +129 -0
- package/react-native/src/sources/attachment-fetcher.ts +124 -0
- package/react-native/src/sources/attachment-token.ts +48 -0
- package/react-native/src/sources/attachment.ts +59 -0
- package/react-native/src/sources/augment.ts +89 -0
- package/react-native/src/sources/authenticator.ts +314 -0
- package/react-native/src/sources/base-pending-cursor-operation.ts +237 -0
- package/react-native/src/sources/base-pending-id-specific-operation.ts +109 -0
- package/react-native/src/sources/bridge.ts +549 -0
- package/react-native/src/sources/build-time-constants.ts +4 -0
- package/react-native/src/sources/cbor.ts +35 -0
- package/react-native/src/sources/collection-interface.ts +67 -0
- package/react-native/src/sources/collection.ts +212 -0
- package/react-native/src/sources/collections-event.ts +99 -0
- package/react-native/src/sources/counter.ts +77 -0
- package/react-native/src/sources/ditto.ts +945 -0
- package/react-native/src/sources/document-id.ts +159 -0
- package/react-native/src/sources/document-path.ts +303 -0
- package/react-native/src/sources/document.ts +192 -0
- package/react-native/src/sources/epilogue.ts +24 -0
- package/react-native/src/sources/error-codes.ts +52 -0
- package/react-native/src/sources/error.ts +203 -0
- package/react-native/src/sources/essentials.ts +53 -0
- package/react-native/src/sources/ffi-error.ts +117 -0
- package/react-native/src/sources/ffi.ts +1972 -0
- package/react-native/src/sources/identity.ts +163 -0
- package/react-native/src/sources/init.ts +70 -0
- package/react-native/src/sources/internal.ts +113 -0
- package/react-native/src/sources/keep-alive.ts +69 -0
- package/react-native/src/sources/key-path.ts +195 -0
- package/react-native/src/sources/live-query-event.ts +208 -0
- package/react-native/src/sources/live-query-manager.ts +101 -0
- package/react-native/src/sources/live-query.ts +164 -0
- package/react-native/src/sources/logger.ts +196 -0
- package/react-native/src/sources/observer-manager.ts +175 -0
- package/react-native/src/sources/observer.ts +77 -0
- package/react-native/src/sources/pending-collections-operation.ts +232 -0
- package/react-native/src/sources/pending-cursor-operation.ts +218 -0
- package/react-native/src/sources/pending-id-specific-operation.ts +216 -0
- package/react-native/src/sources/presence-manager.ts +160 -0
- package/react-native/src/sources/presence.ts +238 -0
- package/react-native/src/sources/query-result-item.ts +116 -0
- package/react-native/src/sources/query-result.ts +55 -0
- package/react-native/src/sources/register.ts +92 -0
- package/react-native/src/sources/small-peer-info.ts +176 -0
- package/react-native/src/sources/static-tcp-client.ts +6 -0
- package/react-native/src/sources/store-observer.ts +176 -0
- package/react-native/src/sources/store.ts +365 -0
- package/react-native/src/sources/subscription-manager.ts +98 -0
- package/react-native/src/sources/subscription.ts +88 -0
- package/react-native/src/sources/sync-subscription.ts +90 -0
- package/react-native/src/sources/sync.ts +495 -0
- package/react-native/src/sources/test-helpers.ts +24 -0
- package/react-native/src/sources/transport-conditions-manager.ts +104 -0
- package/react-native/src/sources/transport-config.ts +428 -0
- package/react-native/src/sources/update-result.ts +66 -0
- package/react-native/src/sources/update-results-map.ts +57 -0
- package/react-native/src/sources/websocket-client.ts +6 -0
- package/react-native/src/sources/write-transaction-collection.ts +122 -0
- package/react-native/src/sources/write-transaction-pending-cursor-operation.ts +101 -0
- package/react-native/src/sources/write-transaction-pending-id-specific-operation.ts +72 -0
- package/react-native/src/sources/write-transaction.ts +119 -0
- package/react-native.config.js +9 -0
- package/types/ditto.d.ts +1230 -798
- package/web/ditto.es6.js +1 -1
- package/web/ditto.umd.js +1 -1
- package/web/ditto.wasm +0 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright © 2023 DittoLive Incorporated. All rights reserved.
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as FFI from './ffi'
|
|
6
|
+
|
|
7
|
+
import { Bridge } from './bridge'
|
|
8
|
+
import { DocumentID } from './document-id'
|
|
9
|
+
import { performAsyncToWorkaroundNonAsyncFFIAPI } from './internal'
|
|
10
|
+
import { BasePendingCursorOperation } from './base-pending-cursor-operation'
|
|
11
|
+
|
|
12
|
+
import type { QueryArguments, SortDirection } from './essentials'
|
|
13
|
+
import type { Document, MutableDocument } from './document'
|
|
14
|
+
import type { UpdateResultsMap } from './update-results-map'
|
|
15
|
+
import type { Collection } from './collection'
|
|
16
|
+
import type { WriteTransactionCollection } from './write-transaction-collection'
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* These objects are returned when using `find`-like functionality on
|
|
20
|
+
* {@link Collection}.
|
|
21
|
+
*
|
|
22
|
+
* They allow chaining of further query-related functions to do things like add
|
|
23
|
+
* a limit to the number of documents you want returned or specify how you want
|
|
24
|
+
* the documents to be sorted and ordered.
|
|
25
|
+
*
|
|
26
|
+
* You can call {@link exec | exec()} on the cursor to get an array of
|
|
27
|
+
* {@link Document | documents} or you can use methods for updating, removing
|
|
28
|
+
* or evicting any matching documents.
|
|
29
|
+
*
|
|
30
|
+
* Live queries and subscriptions are only available outside of transactions.
|
|
31
|
+
*/
|
|
32
|
+
export class WriteTransactionPendingCursorOperation extends BasePendingCursorOperation {
|
|
33
|
+
sort(propertyPath: string, direction: SortDirection = 'ascending'): WriteTransactionPendingCursorOperation {
|
|
34
|
+
return super.sort(propertyPath, direction) as WriteTransactionPendingCursorOperation
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
offset(offset: number): WriteTransactionPendingCursorOperation {
|
|
38
|
+
return super.offset(offset) as WriteTransactionPendingCursorOperation
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
limit(limit: number): WriteTransactionPendingCursorOperation {
|
|
42
|
+
return super.limit(limit) as WriteTransactionPendingCursorOperation
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
async remove(): Promise<DocumentID[]> {
|
|
46
|
+
const ditto = this.collection.store.ditto
|
|
47
|
+
const dittoHandle = Bridge.ditto.handleFor(ditto)
|
|
48
|
+
return ditto.deferCloseAsync(async () => {
|
|
49
|
+
const query = this.query
|
|
50
|
+
const transaction = (this.collection as WriteTransactionCollection).writeTransaction
|
|
51
|
+
|
|
52
|
+
const documentsX = await performAsyncToWorkaroundNonAsyncFFIAPI(async () => FFI.collectionRemoveQueryStr(dittoHandle.deref(), this.collection.name, transaction.writeTransactionPointer, query, this.queryArgsCBOR, this.orderBys, this.currentLimit, this.currentOffset))
|
|
53
|
+
const results: DocumentID[] = documentsX.map((idCBOR: Uint8Array) => {
|
|
54
|
+
return new DocumentID(idCBOR, true)
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
results.forEach((documentId) => {
|
|
58
|
+
transaction.addResult('removed', documentId, this.collection.name)
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
return results
|
|
62
|
+
})
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
async evict(): Promise<DocumentID[]> {
|
|
66
|
+
const ditto = this.collection.store.ditto
|
|
67
|
+
const dittoHandle = Bridge.ditto.handleFor(ditto)
|
|
68
|
+
return ditto.deferCloseAsync(async () => {
|
|
69
|
+
const query = this.query
|
|
70
|
+
const transaction = (this.collection as WriteTransactionCollection).writeTransaction
|
|
71
|
+
|
|
72
|
+
const documentsX = await performAsyncToWorkaroundNonAsyncFFIAPI(async () => FFI.collectionEvictQueryStr(dittoHandle.deref(), this.collection.name, transaction.writeTransactionPointer, query, this.queryArgsCBOR, this.orderBys, this.currentLimit, this.currentOffset))
|
|
73
|
+
|
|
74
|
+
const results: DocumentID[] = documentsX.map((idCBOR: Uint8Array) => {
|
|
75
|
+
return new DocumentID(idCBOR, true)
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
results.forEach((documentId) => {
|
|
79
|
+
transaction.addResult('evicted', documentId, this.collection.name)
|
|
80
|
+
})
|
|
81
|
+
|
|
82
|
+
return results
|
|
83
|
+
})
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
async update(closure: (documents: MutableDocument[]) => void): Promise<UpdateResultsMap> {
|
|
87
|
+
const transaction = (this.collection as WriteTransactionCollection).writeTransaction
|
|
88
|
+
const results = await super.updateWithTransaction(closure, transaction.writeTransactionPointer)
|
|
89
|
+
results.keys().forEach((documentId) => {
|
|
90
|
+
transaction.addResult('updated', documentId, this.collection.name)
|
|
91
|
+
})
|
|
92
|
+
return results
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// ----------------------------------------------------------- Internal ------
|
|
96
|
+
|
|
97
|
+
/** @internal */
|
|
98
|
+
constructor(query: string, queryArgs: QueryArguments | null, collection: WriteTransactionCollection) {
|
|
99
|
+
super(query, queryArgs, collection)
|
|
100
|
+
}
|
|
101
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright © 2023 DittoLive Incorporated. All rights reserved.
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as FFI from './ffi'
|
|
6
|
+
|
|
7
|
+
import { Bridge } from './bridge'
|
|
8
|
+
import { MutableDocument } from './document'
|
|
9
|
+
import { performAsyncToWorkaroundNonAsyncFFIAPI } from './internal'
|
|
10
|
+
import { BasePendingIDSpecificOperation } from './base-pending-id-specific-operation'
|
|
11
|
+
|
|
12
|
+
import type { UpdateResult } from './update-result'
|
|
13
|
+
import type { DocumentID } from './document-id'
|
|
14
|
+
import type { WriteTransactionCollection } from './write-transaction-collection'
|
|
15
|
+
|
|
16
|
+
export class WriteTransactionPendingIDSpecificOperation extends BasePendingIDSpecificOperation {
|
|
17
|
+
async remove(): Promise<boolean> {
|
|
18
|
+
const ditto = this.collection.store.ditto
|
|
19
|
+
const dittoHandle = Bridge.ditto.handleFor(ditto)
|
|
20
|
+
return ditto.deferCloseAsync(async () => {
|
|
21
|
+
const transaction = (this.collection as WriteTransactionCollection).writeTransaction
|
|
22
|
+
const result = await performAsyncToWorkaroundNonAsyncFFIAPI(async () => FFI.collectionRemove(dittoHandle.deref(), this.collection.name, transaction.writeTransactionPointer, this.documentIDCBOR))
|
|
23
|
+
|
|
24
|
+
transaction.addResult('removed', this.documentID, this.collection.name)
|
|
25
|
+
return result
|
|
26
|
+
})
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async evict(): Promise<boolean> {
|
|
30
|
+
const ditto = this.collection.store.ditto
|
|
31
|
+
const dittoHandle = Bridge.ditto.handleFor(ditto)
|
|
32
|
+
return ditto.deferCloseAsync(async () => {
|
|
33
|
+
const transaction = (this.collection as WriteTransactionCollection).writeTransaction
|
|
34
|
+
const result = await performAsyncToWorkaroundNonAsyncFFIAPI(async () => await FFI.collectionEvict(dittoHandle.deref(), this.collection.name, transaction.writeTransactionPointer, this.documentIDCBOR))
|
|
35
|
+
|
|
36
|
+
transaction.addResult('evicted', this.documentID, this.collection.name)
|
|
37
|
+
return result
|
|
38
|
+
})
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
async update(closure: (document: MutableDocument) => void): Promise<UpdateResult[]> {
|
|
42
|
+
const ditto = this.collection.store.ditto
|
|
43
|
+
const dittoHandle = Bridge.ditto.handleFor(ditto)
|
|
44
|
+
return ditto.deferCloseAsync(async () => {
|
|
45
|
+
const transaction = (this.collection as WriteTransactionCollection).writeTransaction
|
|
46
|
+
|
|
47
|
+
const readTransactionX = await FFI.readTransaction(dittoHandle.deref())
|
|
48
|
+
const documentX = await FFI.collectionGet(dittoHandle.deref(), this.collection.name, this.documentIDCBOR, readTransactionX)
|
|
49
|
+
FFI.readTransactionFree(readTransactionX)
|
|
50
|
+
|
|
51
|
+
if (!documentX) throw new Error(`Can't update, document with ID '${this.documentID.toString()}' not found in collection named '${this.collection.name}'`)
|
|
52
|
+
|
|
53
|
+
const mutableDocument = Bridge.mutableDocument.bridge(documentX, () => new MutableDocument())
|
|
54
|
+
closure(mutableDocument)
|
|
55
|
+
|
|
56
|
+
Bridge.mutableDocument.unregister(mutableDocument)
|
|
57
|
+
|
|
58
|
+
await FFI.collectionUpdate(dittoHandle.deref(), this.collection.name, transaction.writeTransactionPointer, documentX)
|
|
59
|
+
|
|
60
|
+
transaction.addResult('updated', this.documentID, this.collection.name)
|
|
61
|
+
|
|
62
|
+
return mutableDocument['@ditto.updateResults'].slice()
|
|
63
|
+
})
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// ----------------------------------------------------------- Internal ------
|
|
67
|
+
|
|
68
|
+
/** @internal */
|
|
69
|
+
constructor(documentID: DocumentID, collection: WriteTransactionCollection) {
|
|
70
|
+
super(documentID, collection)
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright © 2023 DittoLive Incorporated. All rights reserved.
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as FFI from './ffi'
|
|
6
|
+
|
|
7
|
+
import { Bridge } from './bridge'
|
|
8
|
+
import { Ditto } from './ditto'
|
|
9
|
+
import { WriteTransactionCollection } from './write-transaction-collection'
|
|
10
|
+
|
|
11
|
+
import type { DocumentID } from './document-id'
|
|
12
|
+
import type { Store } from './store'
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Provides information about the result of an operation on a document that was
|
|
16
|
+
* part of a write transaction.
|
|
17
|
+
*
|
|
18
|
+
* The write transaction result can be one of the following types:
|
|
19
|
+
*
|
|
20
|
+
* - `inserted`
|
|
21
|
+
* - `removed`
|
|
22
|
+
* - `evicted`
|
|
23
|
+
* - `updated`
|
|
24
|
+
*
|
|
25
|
+
* Please note that an `upsert` operation always results in the result type
|
|
26
|
+
* `inserted`, regardless of whether it resulted in an update or insert.
|
|
27
|
+
*/
|
|
28
|
+
export interface WriteTransactionResult {
|
|
29
|
+
type: 'inserted' | 'removed' | 'evicted' | 'updated'
|
|
30
|
+
docID: DocumentID
|
|
31
|
+
collectionName: string
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Perform writes in a transaction.
|
|
36
|
+
*
|
|
37
|
+
* Create a write transaction using {@link Store.write | ditto.store.write}.
|
|
38
|
+
*/
|
|
39
|
+
export class WriteTransaction {
|
|
40
|
+
/** @internal */
|
|
41
|
+
readonly writeTransactionPointer: FFI.Pointer<FFI.FFIWriteTransaction>
|
|
42
|
+
|
|
43
|
+
/** @internal */
|
|
44
|
+
readonly ditto: Ditto
|
|
45
|
+
|
|
46
|
+
readonly results: WriteTransactionResult[]
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Initialise a write transaction given a Ditto instance.
|
|
50
|
+
*
|
|
51
|
+
* This is not implemented as a constructor in order to be able to use FFI
|
|
52
|
+
* async functions. Users start transactions through {@link Store.write}.
|
|
53
|
+
*
|
|
54
|
+
* @param ditto an instance of Ditto
|
|
55
|
+
* @internal
|
|
56
|
+
*/
|
|
57
|
+
static async init(ditto: Ditto) {
|
|
58
|
+
return ditto.deferCloseAsync(async () => {
|
|
59
|
+
const dittoHandle = Bridge.ditto.handleFor(ditto)
|
|
60
|
+
const writeTransactionPointer = await FFI.writeTransaction(dittoHandle.deref())
|
|
61
|
+
return new WriteTransaction(ditto, writeTransactionPointer)
|
|
62
|
+
})
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Creates a transaction-specific
|
|
67
|
+
* {@link WriteTransactionCollection | collection} object that will ensure
|
|
68
|
+
* that operations called on it are all in the context of the collection name
|
|
69
|
+
* provided to this function. You can create many
|
|
70
|
+
* {@link WriteTransactionCollection | collection} objects per
|
|
71
|
+
* {@link WriteTransaction} object.
|
|
72
|
+
* */
|
|
73
|
+
scoped(toCollectionNamed: string): WriteTransactionCollection {
|
|
74
|
+
if (typeof toCollectionNamed !== 'string') {
|
|
75
|
+
throw new Error('Collection name must be a string')
|
|
76
|
+
}
|
|
77
|
+
return new WriteTransactionCollection(toCollectionNamed, this.ditto.store, this)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// ----------------------------------------------------------- Internal ------
|
|
81
|
+
|
|
82
|
+
/** @internal */
|
|
83
|
+
async commit(): Promise<void> {
|
|
84
|
+
const ditto = this.ditto
|
|
85
|
+
const dittoHandle = Bridge.ditto.handleFor(ditto)
|
|
86
|
+
return ditto.deferCloseAsync(async () => {
|
|
87
|
+
return FFI.writeTransactionCommit(dittoHandle.deref(), this.writeTransactionPointer)
|
|
88
|
+
})
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/** @internal */
|
|
92
|
+
async rollback(): Promise<void> {
|
|
93
|
+
const ditto = this.ditto
|
|
94
|
+
const dittoHandle = Bridge.ditto.handleFor(ditto)
|
|
95
|
+
return ditto.deferCloseAsync(async () => {
|
|
96
|
+
return FFI.writeTransactionRollback(dittoHandle.deref(), this.writeTransactionPointer)
|
|
97
|
+
})
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Adds an entry to the list of results that is returned at the end of a
|
|
102
|
+
* transaction.
|
|
103
|
+
*
|
|
104
|
+
* @internal */
|
|
105
|
+
addResult(type: WriteTransactionResult['type'], docID: DocumentID, collectionName: string) {
|
|
106
|
+
this.results.push({
|
|
107
|
+
type,
|
|
108
|
+
docID,
|
|
109
|
+
collectionName,
|
|
110
|
+
})
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/** @internal */
|
|
114
|
+
constructor(ditto: Ditto, cTransaction: FFI.Pointer<FFI.FFIWriteTransaction>) {
|
|
115
|
+
this.writeTransactionPointer = cTransaction
|
|
116
|
+
this.ditto = ditto
|
|
117
|
+
this.results = []
|
|
118
|
+
}
|
|
119
|
+
}
|