@dittolive/ditto 4.5.0 → 4.5.1-experimental.aarch64-linux.1.aarch64

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/README.md +2 -2
  2. package/node/ditto.cjs.js +2 -9620
  3. package/node/{ditto.linux-x64.node → ditto.linux-arm64.node} +0 -0
  4. package/package.json +38 -34
  5. package/types/ditto.d.ts +0 -2
  6. package/web/ditto.es6.js +1 -1
  7. package/web/ditto.umd.js +1 -1
  8. package/web/ditto.wasm +0 -0
  9. package/DittoReactNative.podspec +0 -27
  10. package/node/ditto.darwin-arm64.node +0 -0
  11. package/node/ditto.darwin-x64.node +0 -0
  12. package/node/ditto.linux-arm.node +0 -0
  13. package/node/ditto.win32-x64.node +0 -0
  14. package/node/transports.darwin-arm64.node +0 -0
  15. package/node/transports.darwin-x64.node +0 -0
  16. package/react-native/android/CMakeLists.txt +0 -37
  17. package/react-native/android/build.gradle +0 -203
  18. package/react-native/android/cpp-adapter.cpp +0 -254
  19. package/react-native/android/gradle.properties +0 -5
  20. package/react-native/android/src/main/AndroidManifest.xml +0 -4
  21. package/react-native/android/src/main/java/com/dittolive/rnsdk/DittoRNSDKModule.java +0 -85
  22. package/react-native/android/src/main/java/com/dittolive/rnsdk/DittoRNSDKPackage.java +0 -28
  23. package/react-native/boost/boost/assert.hpp +0 -85
  24. package/react-native/boost/boost/config/abi/borland_prefix.hpp +0 -27
  25. package/react-native/boost/boost/config/abi/borland_suffix.hpp +0 -12
  26. package/react-native/boost/boost/config/abi/msvc_prefix.hpp +0 -22
  27. package/react-native/boost/boost/config/abi/msvc_suffix.hpp +0 -8
  28. package/react-native/boost/boost/config/abi_prefix.hpp +0 -25
  29. package/react-native/boost/boost/config/abi_suffix.hpp +0 -25
  30. package/react-native/boost/boost/config/assert_cxx03.hpp +0 -211
  31. package/react-native/boost/boost/config/assert_cxx11.hpp +0 -209
  32. package/react-native/boost/boost/config/assert_cxx14.hpp +0 -47
  33. package/react-native/boost/boost/config/assert_cxx17.hpp +0 -62
  34. package/react-native/boost/boost/config/assert_cxx20.hpp +0 -59
  35. package/react-native/boost/boost/config/assert_cxx98.hpp +0 -23
  36. package/react-native/boost/boost/config/auto_link.hpp +0 -525
  37. package/react-native/boost/boost/config/compiler/borland.hpp +0 -339
  38. package/react-native/boost/boost/config/compiler/clang.hpp +0 -366
  39. package/react-native/boost/boost/config/compiler/clang_version.hpp +0 -83
  40. package/react-native/boost/boost/config/compiler/codegear.hpp +0 -385
  41. package/react-native/boost/boost/config/compiler/comeau.hpp +0 -59
  42. package/react-native/boost/boost/config/compiler/common_edg.hpp +0 -183
  43. package/react-native/boost/boost/config/compiler/compaq_cxx.hpp +0 -19
  44. package/react-native/boost/boost/config/compiler/cray.hpp +0 -446
  45. package/react-native/boost/boost/config/compiler/diab.hpp +0 -26
  46. package/react-native/boost/boost/config/compiler/digitalmars.hpp +0 -143
  47. package/react-native/boost/boost/config/compiler/gcc.hpp +0 -383
  48. package/react-native/boost/boost/config/compiler/gcc_xml.hpp +0 -114
  49. package/react-native/boost/boost/config/compiler/greenhills.hpp +0 -28
  50. package/react-native/boost/boost/config/compiler/hp_acc.hpp +0 -149
  51. package/react-native/boost/boost/config/compiler/intel.hpp +0 -577
  52. package/react-native/boost/boost/config/compiler/kai.hpp +0 -33
  53. package/react-native/boost/boost/config/compiler/metrowerks.hpp +0 -198
  54. package/react-native/boost/boost/config/compiler/mpw.hpp +0 -140
  55. package/react-native/boost/boost/config/compiler/nvcc.hpp +0 -61
  56. package/react-native/boost/boost/config/compiler/pathscale.hpp +0 -138
  57. package/react-native/boost/boost/config/compiler/pgi.hpp +0 -23
  58. package/react-native/boost/boost/config/compiler/sgi_mipspro.hpp +0 -29
  59. package/react-native/boost/boost/config/compiler/sunpro_cc.hpp +0 -222
  60. package/react-native/boost/boost/config/compiler/vacpp.hpp +0 -186
  61. package/react-native/boost/boost/config/compiler/visualc.hpp +0 -391
  62. package/react-native/boost/boost/config/compiler/xlcpp.hpp +0 -299
  63. package/react-native/boost/boost/config/compiler/xlcpp_zos.hpp +0 -173
  64. package/react-native/boost/boost/config/detail/cxx_composite.hpp +0 -203
  65. package/react-native/boost/boost/config/detail/posix_features.hpp +0 -95
  66. package/react-native/boost/boost/config/detail/select_compiler_config.hpp +0 -157
  67. package/react-native/boost/boost/config/detail/select_platform_config.hpp +0 -147
  68. package/react-native/boost/boost/config/detail/select_stdlib_config.hpp +0 -121
  69. package/react-native/boost/boost/config/detail/suffix.hpp +0 -1294
  70. package/react-native/boost/boost/config/header_deprecated.hpp +0 -26
  71. package/react-native/boost/boost/config/helper_macros.hpp +0 -37
  72. package/react-native/boost/boost/config/no_tr1/cmath.hpp +0 -28
  73. package/react-native/boost/boost/config/no_tr1/complex.hpp +0 -28
  74. package/react-native/boost/boost/config/no_tr1/functional.hpp +0 -28
  75. package/react-native/boost/boost/config/no_tr1/memory.hpp +0 -28
  76. package/react-native/boost/boost/config/no_tr1/utility.hpp +0 -28
  77. package/react-native/boost/boost/config/platform/aix.hpp +0 -33
  78. package/react-native/boost/boost/config/platform/amigaos.hpp +0 -15
  79. package/react-native/boost/boost/config/platform/beos.hpp +0 -26
  80. package/react-native/boost/boost/config/platform/bsd.hpp +0 -83
  81. package/react-native/boost/boost/config/platform/cloudabi.hpp +0 -18
  82. package/react-native/boost/boost/config/platform/cray.hpp +0 -18
  83. package/react-native/boost/boost/config/platform/cygwin.hpp +0 -71
  84. package/react-native/boost/boost/config/platform/haiku.hpp +0 -31
  85. package/react-native/boost/boost/config/platform/hpux.hpp +0 -87
  86. package/react-native/boost/boost/config/platform/irix.hpp +0 -31
  87. package/react-native/boost/boost/config/platform/linux.hpp +0 -106
  88. package/react-native/boost/boost/config/platform/macos.hpp +0 -87
  89. package/react-native/boost/boost/config/platform/qnxnto.hpp +0 -31
  90. package/react-native/boost/boost/config/platform/solaris.hpp +0 -31
  91. package/react-native/boost/boost/config/platform/symbian.hpp +0 -97
  92. package/react-native/boost/boost/config/platform/vms.hpp +0 -25
  93. package/react-native/boost/boost/config/platform/vxworks.hpp +0 -422
  94. package/react-native/boost/boost/config/platform/wasm.hpp +0 -23
  95. package/react-native/boost/boost/config/platform/win32.hpp +0 -90
  96. package/react-native/boost/boost/config/platform/zos.hpp +0 -32
  97. package/react-native/boost/boost/config/pragma_message.hpp +0 -31
  98. package/react-native/boost/boost/config/requires_threads.hpp +0 -92
  99. package/react-native/boost/boost/config/stdlib/dinkumware.hpp +0 -324
  100. package/react-native/boost/boost/config/stdlib/libcomo.hpp +0 -93
  101. package/react-native/boost/boost/config/stdlib/libcpp.hpp +0 -180
  102. package/react-native/boost/boost/config/stdlib/libstdcpp3.hpp +0 -482
  103. package/react-native/boost/boost/config/stdlib/modena.hpp +0 -79
  104. package/react-native/boost/boost/config/stdlib/msl.hpp +0 -98
  105. package/react-native/boost/boost/config/stdlib/roguewave.hpp +0 -208
  106. package/react-native/boost/boost/config/stdlib/sgi.hpp +0 -168
  107. package/react-native/boost/boost/config/stdlib/stlport.hpp +0 -258
  108. package/react-native/boost/boost/config/stdlib/vacpp.hpp +0 -74
  109. package/react-native/boost/boost/config/stdlib/xlcpp_zos.hpp +0 -61
  110. package/react-native/boost/boost/config/user.hpp +0 -133
  111. package/react-native/boost/boost/config/warning_disable.hpp +0 -47
  112. package/react-native/boost/boost/config/workaround.hpp +0 -305
  113. package/react-native/boost/boost/config.hpp +0 -67
  114. package/react-native/boost/boost/cstdint.hpp +0 -556
  115. package/react-native/boost/boost/intrusive_ptr.hpp +0 -18
  116. package/react-native/boost/boost/smart_ptr/detail/atomic_count.hpp +0 -103
  117. package/react-native/boost/boost/smart_ptr/detail/atomic_count_gcc.hpp +0 -79
  118. package/react-native/boost/boost/smart_ptr/detail/atomic_count_gcc_atomic.hpp +0 -63
  119. package/react-native/boost/boost/smart_ptr/detail/atomic_count_gcc_x86.hpp +0 -88
  120. package/react-native/boost/boost/smart_ptr/detail/atomic_count_nt.hpp +0 -66
  121. package/react-native/boost/boost/smart_ptr/detail/atomic_count_pt.hpp +0 -104
  122. package/react-native/boost/boost/smart_ptr/detail/atomic_count_spin.hpp +0 -69
  123. package/react-native/boost/boost/smart_ptr/detail/atomic_count_std_atomic.hpp +0 -67
  124. package/react-native/boost/boost/smart_ptr/detail/atomic_count_sync.hpp +0 -72
  125. package/react-native/boost/boost/smart_ptr/detail/atomic_count_win32.hpp +0 -70
  126. package/react-native/boost/boost/smart_ptr/detail/local_counted_base.hpp +0 -148
  127. package/react-native/boost/boost/smart_ptr/detail/local_sp_deleter.hpp +0 -91
  128. package/react-native/boost/boost/smart_ptr/detail/operator_bool.hpp +0 -64
  129. package/react-native/boost/boost/smart_ptr/detail/requires_cxx11.hpp +0 -23
  130. package/react-native/boost/boost/smart_ptr/detail/shared_count.hpp +0 -707
  131. package/react-native/boost/boost/smart_ptr/detail/sp_convertible.hpp +0 -92
  132. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base.hpp +0 -92
  133. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +0 -163
  134. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_aix.hpp +0 -152
  135. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +0 -185
  136. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_gcc_atomic.hpp +0 -148
  137. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +0 -170
  138. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +0 -200
  139. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +0 -194
  140. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +0 -179
  141. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +0 -186
  142. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_nt.hpp +0 -119
  143. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_pt.hpp +0 -147
  144. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +0 -174
  145. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_spin.hpp +0 -141
  146. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp +0 -147
  147. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_sync.hpp +0 -165
  148. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +0 -163
  149. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_w32.hpp +0 -140
  150. package/react-native/boost/boost/smart_ptr/detail/sp_counted_impl.hpp +0 -309
  151. package/react-native/boost/boost/smart_ptr/detail/sp_disable_deprecated.hpp +0 -40
  152. package/react-native/boost/boost/smart_ptr/detail/sp_forward.hpp +0 -52
  153. package/react-native/boost/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +0 -27
  154. package/react-native/boost/boost/smart_ptr/detail/sp_has_sync_intrinsics.hpp +0 -69
  155. package/react-native/boost/boost/smart_ptr/detail/sp_interlocked.hpp +0 -173
  156. package/react-native/boost/boost/smart_ptr/detail/sp_noexcept.hpp +0 -48
  157. package/react-native/boost/boost/smart_ptr/detail/sp_nullptr_t.hpp +0 -45
  158. package/react-native/boost/boost/smart_ptr/detail/sp_obsolete.hpp +0 -32
  159. package/react-native/boost/boost/smart_ptr/detail/sp_thread_pause.hpp +0 -51
  160. package/react-native/boost/boost/smart_ptr/detail/sp_thread_sleep.hpp +0 -104
  161. package/react-native/boost/boost/smart_ptr/detail/sp_thread_yield.hpp +0 -100
  162. package/react-native/boost/boost/smart_ptr/detail/sp_typeinfo_.hpp +0 -58
  163. package/react-native/boost/boost/smart_ptr/detail/sp_win32_sleep.hpp +0 -49
  164. package/react-native/boost/boost/smart_ptr/intrusive_ptr.hpp +0 -409
  165. package/react-native/boost/boost/smart_ptr/intrusive_ref_counter.hpp +0 -188
  166. package/react-native/cpp/include/Attachment.h +0 -16
  167. package/react-native/cpp/include/Authentication.h +0 -23
  168. package/react-native/cpp/include/Collection.h +0 -13
  169. package/react-native/cpp/include/DQL.h +0 -21
  170. package/react-native/cpp/include/Document.h +0 -17
  171. package/react-native/cpp/include/Identity.h +0 -17
  172. package/react-native/cpp/include/Lifecycle.h +0 -16
  173. package/react-native/cpp/include/LiveQuery.h +0 -17
  174. package/react-native/cpp/include/Logger.h +0 -22
  175. package/react-native/cpp/include/Misc.h +0 -26
  176. package/react-native/cpp/include/Presence.h +0 -14
  177. package/react-native/cpp/include/RetainableState.h +0 -24
  178. package/react-native/cpp/include/SmallPeerInfo.h +0 -17
  179. package/react-native/cpp/include/Transports.h +0 -25
  180. package/react-native/cpp/include/TypedArray.hpp +0 -167
  181. package/react-native/cpp/include/Utils.h +0 -61
  182. package/react-native/cpp/include/main.h +0 -10
  183. package/react-native/cpp/src/Attachment.cpp +0 -86
  184. package/react-native/cpp/src/Authentication.cpp +0 -224
  185. package/react-native/cpp/src/Collection.cpp +0 -54
  186. package/react-native/cpp/src/DQL.cpp +0 -254
  187. package/react-native/cpp/src/Document.cpp +0 -146
  188. package/react-native/cpp/src/Identity.cpp +0 -123
  189. package/react-native/cpp/src/Lifecycle.cpp +0 -75
  190. package/react-native/cpp/src/LiveQuery.cpp +0 -64
  191. package/react-native/cpp/src/Logger.cpp +0 -200
  192. package/react-native/cpp/src/Misc.cpp +0 -271
  193. package/react-native/cpp/src/Presence.cpp +0 -77
  194. package/react-native/cpp/src/RetainableState.cpp +0 -15
  195. package/react-native/cpp/src/SmallPeerInfo.cpp +0 -108
  196. package/react-native/cpp/src/Transports.cpp +0 -270
  197. package/react-native/cpp/src/TypedArray.cpp +0 -303
  198. package/react-native/cpp/src/Utils.cpp +0 -138
  199. package/react-native/cpp/src/main.cpp +0 -149
  200. package/react-native/dittoffi/dittoffi.h +0 -4698
  201. package/react-native/dittoffi/ifaddrs.cpp +0 -385
  202. package/react-native/dittoffi/ifaddrs.h +0 -206
  203. package/react-native/ios/DittoRNSDK.h +0 -7
  204. package/react-native/ios/DittoRNSDK.mm +0 -107
  205. package/react-native/ios/YeetJSIUtils.h +0 -60
  206. package/react-native/ios/YeetJSIUtils.mm +0 -196
  207. package/react-native/lib/commonjs/ditto.rn.js +0 -93
  208. package/react-native/lib/commonjs/ditto.rn.js.map +0 -1
  209. package/react-native/lib/commonjs/index.js +0 -14
  210. package/react-native/lib/commonjs/index.js.map +0 -1
  211. package/react-native/lib/module/ditto.rn.js +0 -83
  212. package/react-native/lib/module/ditto.rn.js.map +0 -1
  213. package/react-native/lib/module/index.js +0 -13
  214. package/react-native/lib/module/index.js.map +0 -1
  215. package/react-native/lib/typescript/ditto.rn.d.ts +0 -15
  216. package/react-native/lib/typescript/ditto.rn.d.ts.map +0 -1
  217. package/react-native/lib/typescript/index.d.ts +0 -1
  218. package/react-native/lib/typescript/index.d.ts.map +0 -1
  219. package/react-native/scripts/ruby/include_local_boost.rb +0 -78
  220. package/react-native/src/ditto.rn.ts +0 -91
  221. package/react-native/src/environment/environment.fallback.ts +0 -4
  222. package/react-native/src/index.ts +0 -26
  223. package/react-native/src/sources/@cbor-redux.ts +0 -2
  224. package/react-native/src/sources/@ditto.core.ts +0 -1
  225. package/react-native/src/sources/@environment.ts +0 -2
  226. package/react-native/src/sources/attachment-fetch-event.ts +0 -54
  227. package/react-native/src/sources/attachment-fetcher-manager.ts +0 -129
  228. package/react-native/src/sources/attachment-fetcher.ts +0 -124
  229. package/react-native/src/sources/attachment-token.ts +0 -48
  230. package/react-native/src/sources/attachment.ts +0 -59
  231. package/react-native/src/sources/augment.ts +0 -89
  232. package/react-native/src/sources/authenticator.ts +0 -314
  233. package/react-native/src/sources/base-pending-cursor-operation.ts +0 -237
  234. package/react-native/src/sources/base-pending-id-specific-operation.ts +0 -109
  235. package/react-native/src/sources/bridge.ts +0 -549
  236. package/react-native/src/sources/build-time-constants.ts +0 -4
  237. package/react-native/src/sources/cbor.ts +0 -35
  238. package/react-native/src/sources/collection-interface.ts +0 -67
  239. package/react-native/src/sources/collection.ts +0 -212
  240. package/react-native/src/sources/collections-event.ts +0 -99
  241. package/react-native/src/sources/counter.ts +0 -77
  242. package/react-native/src/sources/ditto.ts +0 -945
  243. package/react-native/src/sources/document-id.ts +0 -159
  244. package/react-native/src/sources/document-path.ts +0 -303
  245. package/react-native/src/sources/document.ts +0 -192
  246. package/react-native/src/sources/epilogue.ts +0 -24
  247. package/react-native/src/sources/error-codes.ts +0 -52
  248. package/react-native/src/sources/error.ts +0 -203
  249. package/react-native/src/sources/essentials.ts +0 -53
  250. package/react-native/src/sources/ffi-error.ts +0 -117
  251. package/react-native/src/sources/ffi.ts +0 -1972
  252. package/react-native/src/sources/identity.ts +0 -163
  253. package/react-native/src/sources/init.ts +0 -70
  254. package/react-native/src/sources/internal.ts +0 -113
  255. package/react-native/src/sources/keep-alive.ts +0 -69
  256. package/react-native/src/sources/key-path.ts +0 -195
  257. package/react-native/src/sources/live-query-event.ts +0 -208
  258. package/react-native/src/sources/live-query-manager.ts +0 -101
  259. package/react-native/src/sources/live-query.ts +0 -164
  260. package/react-native/src/sources/logger.ts +0 -196
  261. package/react-native/src/sources/observer-manager.ts +0 -175
  262. package/react-native/src/sources/observer.ts +0 -77
  263. package/react-native/src/sources/pending-collections-operation.ts +0 -232
  264. package/react-native/src/sources/pending-cursor-operation.ts +0 -218
  265. package/react-native/src/sources/pending-id-specific-operation.ts +0 -216
  266. package/react-native/src/sources/presence-manager.ts +0 -160
  267. package/react-native/src/sources/presence.ts +0 -238
  268. package/react-native/src/sources/query-result-item.ts +0 -116
  269. package/react-native/src/sources/query-result.ts +0 -55
  270. package/react-native/src/sources/register.ts +0 -92
  271. package/react-native/src/sources/small-peer-info.ts +0 -176
  272. package/react-native/src/sources/static-tcp-client.ts +0 -6
  273. package/react-native/src/sources/store-observer.ts +0 -176
  274. package/react-native/src/sources/store.ts +0 -365
  275. package/react-native/src/sources/subscription-manager.ts +0 -98
  276. package/react-native/src/sources/subscription.ts +0 -88
  277. package/react-native/src/sources/sync-subscription.ts +0 -90
  278. package/react-native/src/sources/sync.ts +0 -495
  279. package/react-native/src/sources/test-helpers.ts +0 -24
  280. package/react-native/src/sources/transport-conditions-manager.ts +0 -104
  281. package/react-native/src/sources/transport-config.ts +0 -428
  282. package/react-native/src/sources/update-result.ts +0 -66
  283. package/react-native/src/sources/update-results-map.ts +0 -57
  284. package/react-native/src/sources/websocket-client.ts +0 -6
  285. package/react-native/src/sources/write-transaction-collection.ts +0 -122
  286. package/react-native/src/sources/write-transaction-pending-cursor-operation.ts +0 -101
  287. package/react-native/src/sources/write-transaction-pending-id-specific-operation.ts +0 -72
  288. package/react-native/src/sources/write-transaction.ts +0 -119
  289. package/react-native.config.js +0 -9
@@ -1,159 +0,0 @@
1
- //
2
- // Copyright © 2021 DittoLive Incorporated. All rights reserved.
3
- //
4
-
5
- import * as FFI from './ffi'
6
- import { CBOR } from './cbor'
7
-
8
- /** Represents a unique identifier for a {@link Document}. */
9
- export type DocumentIDValue = any // REFACTOR: get rid of any.
10
-
11
- /** Represents a unique identifier for a {@link Document}. */
12
- export class DocumentID {
13
- /**
14
- * Returns the value of the receiver, lazily decoded from its CBOR
15
- * representation if needed.
16
- */
17
- get value(): any {
18
- let value = this['@ditto.value']
19
- if (typeof value === 'undefined') {
20
- value = CBOR.decode(this['@ditto.cbor'])
21
- this['@ditto.value'] = value
22
- }
23
- return value
24
- }
25
-
26
- /**
27
- * Returns `false` if validation has been skipped at construction time,
28
- * otherwise returns `true`. This is mostly for internal use only, you
29
- * shouldn't need this in client code.
30
- */
31
- readonly isValidated: boolean
32
-
33
- /**
34
- * Creates a new `DocumentID`.
35
- *
36
- * A document ID can be created from any of the following:
37
- *
38
- * - `string`
39
- * - `number` (integer)
40
- * - `boolean`
41
- * - `null`
42
- * - raw data in the form of a JS [Typed Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays)
43
- * - `Array` (containing any of the items in this list)
44
- * - Map (a raw JS `object`, where the keys must be strings and the values
45
- * can be made up of any of the items in this list)
46
- *
47
- * Note that you cannot use floats or other custom types to create a document
48
- * ID.
49
- *
50
- * Document IDs are also limited in size, based on their serialized
51
- * representation, to 256 bytes. You will receive an error if you try to
52
- * create a document ID that exceeds the size limit.
53
- *
54
- * @param value The value that represents the document identifier.
55
- * @param skipCBOREncoding If `true, skips CBOR encoding and assumes
56
- * the passed in `value` is already CBOR encoded. You shouldn't need to ever
57
- * pass this parameter, it's only used internally for certain edge cases.
58
- * @param skipValidation If `true, skips validation of the passed in value or
59
- * CBOR. You shouldn't need to ever pass this parameter, it's only used
60
- * internally for certain edge cases.
61
- */
62
- constructor(value: any, skipCBOREncoding: boolean = false, skipValidation: boolean = false) {
63
- const cbor = skipCBOREncoding ? value : CBOR.encode(value)
64
- const validatedCBOR = skipValidation ? cbor : validateDocumentIDCBOR(cbor)
65
-
66
- if (!validatedCBOR) {
67
- throw new Error(`Can't create DocumentID, passed in value is not valid: ${value}`)
68
- }
69
-
70
- this.isValidated = !skipValidation
71
- this['@ditto.cbor'] = validatedCBOR
72
- }
73
-
74
- /**
75
- * Returns `true` if passed in `documentID` is equal to the receiver,
76
- * otherwise returns `false`.
77
- */
78
- equals(documentID: DocumentID): boolean {
79
- const left = this['@ditto.cbor']
80
- const right = documentID['@ditto.cbor']
81
-
82
- if (left === right) {
83
- return true
84
- }
85
-
86
- if (!(left instanceof Uint8Array)) {
87
- return false
88
- }
89
-
90
- if (!(right instanceof Uint8Array)) {
91
- return false
92
- }
93
-
94
- if (left.length !== right.length) {
95
- return false
96
- }
97
-
98
- for (let i = 0; i < left.length; i += 1) {
99
- if (left[i] !== right[i]) return false
100
- }
101
-
102
- return true
103
- }
104
-
105
- /**
106
- * Returns a string representation of the receiver.
107
- *
108
- * If you need a string representation to be used directly in a query,
109
- * please use `toQueryCompatibleString()` instead.
110
- */
111
- toString(): string {
112
- return FFI.documentIDQueryCompatible(this['@ditto.cbor'], 'WithoutQuotes')
113
- }
114
-
115
- /**
116
- * Returns a byte representation of the document ID value as base64 string.
117
- */
118
- toBase64String(): string {
119
- const bytes = this['@ditto.cbor']
120
- return btoa(String.fromCharCode.apply(null, bytes))
121
- }
122
-
123
- /**
124
- * Returns a query compatible string representation of the receiver.
125
- *
126
- * The returned string can be used directly in queries that you use with
127
- * other Ditto functions. For example you could create a query that was like
128
- * this:
129
- *
130
- * ``` TypeScript
131
- * collection.find(`_id == ${documentID.toQueryCompatibleString()}`)
132
- * ```
133
- */
134
- toQueryCompatibleString(): string {
135
- return FFI.documentIDQueryCompatible(this['@ditto.cbor'], 'WithQuotes')
136
- }
137
-
138
- /** @internal */
139
- toCBOR(): Uint8Array {
140
- return this['@ditto.cbor']
141
- }
142
- }
143
-
144
- // -----------------------------------------------------------------------------
145
-
146
- /** @internal */
147
- export function validateDocumentIDValue(id: DocumentIDValue): DocumentIDValue {
148
- if (typeof id === 'undefined') {
149
- throw new Error(`Invalid document ID: ${id}`)
150
- }
151
-
152
- return id
153
- }
154
-
155
- /** @internal */
156
- export function validateDocumentIDCBOR(idCBOR: Uint8Array): Uint8Array {
157
- const validatedIDCBOROrNull = FFI.validateDocumentID(idCBOR)
158
- return validatedIDCBOROrNull ?? idCBOR
159
- }
@@ -1,303 +0,0 @@
1
- //
2
- // Copyright © 2021 DittoLive Incorporated. All rights reserved.
3
- //
4
-
5
- import * as FFI from './ffi'
6
- import { CBOR } from './cbor'
7
- import { Bridge } from './bridge'
8
- import { Counter, MutableCounter } from './counter'
9
- import { Register, MutableRegister } from './register'
10
- import { AttachmentToken } from './attachment-token'
11
- import { UpdateResult } from './update-result'
12
- import { desugarJSObject, augmentJSONValue } from './augment'
13
- import { validateNumber } from './internal'
14
- import { KeyPath } from './key-path'
15
- import type { Document, MutableDocument } from './document'
16
-
17
- // -----------------------------------------------------------------------------
18
-
19
- /**
20
- * Represents a portion of the document at a specific key-path.
21
- *
22
- * Provides an interface to specify a path to a key in a document that you can
23
- * then call a function on to get the value at the specified key as a specific
24
- * type. You don't create a `DocumentPath` directly but obtain one via the
25
- * {@link Document.path | path} property or the {@link Document.at | at()}
26
- * method of {@link Document}.
27
- */
28
- export class DocumentPath {
29
- /** The document this path belongs to. */
30
- readonly document: Document
31
-
32
- /** The full document path so far. */
33
- readonly path: string
34
-
35
- /**
36
- * Returns a new document path instance with the passed in key-path or
37
- * index appended.
38
- *
39
- * A key-path can be a single property name or multiple property names
40
- * separated by a dot. Indexes can also be specified as part of the key
41
- * path using the square bracket syntax. The empty string returns a document
42
- * path representing the same portion of the document as the receiver. If a
43
- * key-path starts with a property name and is prefixed by a dot, the dot is
44
- * ignored.
45
- *
46
- * Examples:
47
- *
48
- * - `documentPath.at('mileage')`
49
- * - `documentPath.at('driver.name')`
50
- * - `documentPath.at('passengers[2]')`
51
- * - `documentPath.at('passengers[2].belongings[1].kind')`
52
- * - `documentPath.at('.mileage')`
53
- */
54
- at(keyPathOrIndex: string | number): DocumentPath {
55
- if (typeof keyPathOrIndex === 'string') {
56
- const keyPath: string = keyPathOrIndex
57
- const validatedKeyPath = KeyPath.validate(keyPath)
58
- const absoluteKeyPath = KeyPath.withoutLeadingDot(`${this.path}${validatedKeyPath}`)
59
- return new DocumentPath(this.document, absoluteKeyPath, false)
60
- }
61
-
62
- if (typeof keyPathOrIndex === 'number') {
63
- const index: number = keyPathOrIndex
64
- const validatedIndex = validateNumber(index, { integer: true, min: 0, errorMessagePrefix: 'DocumentPath.at() validation failed index:' })
65
- return new DocumentPath(this.document, `${this.path}[${validatedIndex.toString()}]`, false)
66
- }
67
-
68
- throw new Error(`Can't return document path at key-path or index, string or number expected but got ${typeof keyPathOrIndex}: ${keyPathOrIndex}`)
69
- }
70
-
71
- /**
72
- * Traverses the document with the key-path represented by the receiver and
73
- * returns the corresponding object or value.
74
- */
75
- get value(): any | undefined {
76
- return this.underlyingValueForPathType('Any')
77
- }
78
-
79
- /**
80
- * Returns the value at the previously specified key in the document as a
81
- * {@link Counter} if possible, otherwise returns `null`.
82
- */
83
- get counter(): Counter | null {
84
- const underlyingValue = this.underlyingValueForPathType('Counter')
85
- return typeof underlyingValue !== 'undefined' ? Counter['@ditto.create'](null, this.path, underlyingValue) : null
86
- }
87
-
88
- /**
89
- * Returns the value at the previously specified key in the document as a
90
- * {@link Register} if possible, otherwise returns `null`.
91
- */
92
- get register(): Register | null {
93
- const underlyingValue = this.underlyingValueForPathType('Register')
94
- return typeof underlyingValue !== 'undefined' ? Register['@ditto.create'](null, this.path, underlyingValue) : null
95
- }
96
-
97
- /**
98
- * Returns the value at the previously specified key in the document as an
99
- * {@link AttachmentToken} if possible, otherwise returns `null`.
100
- */
101
- get attachmentToken(): AttachmentToken | null {
102
- const underlyingValue = this.underlyingValueForPathType('Attachment')
103
- return typeof underlyingValue !== 'undefined' ? new AttachmentToken(underlyingValue) : null
104
- }
105
-
106
- /** @internal */
107
- constructor(document: Document, path: string, validate: boolean) {
108
- this.document = document
109
- this.path = validate ? KeyPath.validate(path, { isInitial: true }) : path
110
- }
111
-
112
- /** @internal */
113
- underlyingValueForPathType(pathType: FFI.PathAccessorType): any | undefined {
114
- const path = this.path
115
- const document = this.document
116
- const documentHandle = Bridge.document.handleFor(document)
117
- const cborPathResult = FFI.documentGetCBORWithPathType(documentHandle.deref(), path, pathType)
118
- return cborPathResult.cbor !== null ? CBOR.decode(cborPathResult.cbor) : undefined
119
- }
120
- }
121
-
122
- // -----------------------------------------------------------------------------
123
-
124
- /**
125
- * Mutable version of {@link DocumentPath} allowing you to mutate a document at
126
- * a specific key-path. You don't create a `MutableDocumentPath` directly but
127
- * obtain one via the {@link MutableDocument.path | path} property or the
128
- * {@link MutableDocument.at | at()} method of {@link MutableDocument}.
129
- */
130
- export class MutableDocumentPath {
131
- /** The (mutable) document this path belongs to. */
132
- readonly mutableDocument: MutableDocument
133
-
134
- /** The full document path so far. */
135
- readonly path: string
136
-
137
- /**
138
- * Returns a new mutable document path instance with the passed in key-path or
139
- * index appended.
140
- *
141
- * A key-path can be a single property name or multiple property names
142
- * separated by a dot. Indexes can also be specified as part of the key
143
- * path using square brackets syntax. The empty string returns a document path
144
- * representing the same portion of the document as the receiver. If a key
145
- * path starts with a property name and is prefixed by a dot, the dot is
146
- * ignored.
147
- *
148
- * Examples:
149
- *
150
- * - `mutableDocumentPath.at('mileage')`
151
- * - `mutableDocumentPath.at('driver.name')`
152
- * - `mutableDocumentPath.at('passengers[2]')`
153
- * - `mutableDocumentPath.at('passengers[2].belongings[1].kind')`
154
- * - `mutableDocumentPath.at('.mileage')`
155
- */
156
- at(keyPathOrIndex: string | number): MutableDocumentPath {
157
- if (typeof keyPathOrIndex === 'string') {
158
- const keyPath: string = keyPathOrIndex
159
- const validatedKeyPath = KeyPath.validate(keyPath)
160
- const absoluteKeyPath = KeyPath.withoutLeadingDot(`${this.path}${validatedKeyPath}`)
161
- return new MutableDocumentPath(this.mutableDocument, absoluteKeyPath, false)
162
- }
163
-
164
- if (typeof keyPathOrIndex === 'number') {
165
- const index: number = keyPathOrIndex
166
- const validatedIndex = validateNumber(index, { integer: true, min: 0, errorMessagePrefix: 'MutableDocumentPath.at() validation failed index:' })
167
- return new MutableDocumentPath(this.mutableDocument, `${this.path}[${validatedIndex.toString()}]`, false)
168
- }
169
-
170
- throw new Error(`Can't return mutable document path at key-path or index, string or number expected but got ${typeof keyPathOrIndex}: ${keyPathOrIndex}`)
171
- }
172
-
173
- /**
174
- * Traverses the document with the key-path represented by the receiver and
175
- * returns the corresponding object or value.
176
- */
177
- get value(): any | undefined {
178
- return this.underlyingValueForPathType('Any')
179
- }
180
-
181
- /**
182
- * Returns the value at the previously specified key in the document as a
183
- * {@link MutableCounter} if possible, otherwise returns `null`.
184
- */
185
- get counter(): MutableCounter | null {
186
- const underlyingValue = this.underlyingValueForPathType('Counter')
187
- return typeof underlyingValue !== 'undefined' ? Counter['@ditto.create'](this.mutableDocument, this.path, underlyingValue) : null
188
- }
189
-
190
- /**
191
- * Returns the value at the previously specified key in the document as a
192
- * {@link MutableRegister} if possible, otherwise returns `null`.
193
- */
194
- get register(): MutableRegister | null {
195
- const underlyingValue = this.underlyingValueForPathType('Register')
196
- return typeof underlyingValue !== 'undefined' ? Register['@ditto.create'](this.mutableDocument, this.path, underlyingValue) : null
197
- }
198
-
199
- /**
200
- * Returns the value at the previously specified key in the document as a
201
- * {@link AttachmentToken} if possible, otherwise returns `null`.
202
- */
203
- get attachmentToken(): AttachmentToken | null {
204
- const underlyingValue = this.underlyingValueForPathType('Attachment')
205
- return typeof underlyingValue !== 'undefined' ? new AttachmentToken(underlyingValue) : null
206
- }
207
-
208
- /**
209
- * Sets a value at the document's key-path defined by the receiver.
210
- *
211
- * @param isDefault Represents whether or not the value should be set as a
212
- * default value. Set this to `true` if you want to set a default value that
213
- * you expect to be overwritten by other devices in the network. The default
214
- * value is `false`.
215
- */
216
- set(value: any, isDefault?: boolean) {
217
- return this['@ditto.set'](value, isDefault)
218
- }
219
-
220
- /**
221
- * Removes a value at the document's key-path defined by the receiver.
222
- */
223
- remove() {
224
- return this['@ditto.remove']()
225
- }
226
-
227
- /** @internal */
228
- constructor(mutableDocument: MutableDocument, path: string, validate: boolean) {
229
- this.mutableDocument = mutableDocument
230
- this.path = validate ? KeyPath.validate(path, { isInitial: true }) : path
231
- }
232
-
233
- /** @internal */
234
- underlyingValueForPathType(pathType: FFI.PathAccessorType): any | null {
235
- const path = this.path
236
- const document = this.mutableDocument
237
- const documentHandle = Bridge.mutableDocument.handleFor(document)
238
- const cborPathResult = FFI.documentGetCBORWithPathType(documentHandle.deref(), path, pathType)
239
- return cborPathResult.cbor !== null ? CBOR.decode(cborPathResult.cbor) : undefined
240
- }
241
-
242
- /** @internal */
243
- '@ditto.increment'(amount: number) {
244
-
245
- const documentHandle = Bridge.mutableDocument.handleFor(this.mutableDocument)
246
- FFI.documentIncrementCounter(documentHandle.deref(), this.path, amount)
247
-
248
- const updateResult = UpdateResult.incremented(this.mutableDocument.id, this.path, amount)
249
- this.recordUpdateResult(updateResult)
250
- }
251
-
252
- /** @internal */
253
- '@ditto.set'(value: any, isDefault?: boolean) {
254
- const documentHandle = Bridge.mutableDocument.handleFor(this.mutableDocument)
255
- const valueJSON = desugarJSObject(value, false)
256
- const valueCBOR = CBOR.encode(valueJSON)
257
-
258
- if (isDefault) {
259
- FFI.documentSetCBORWithTimestamp(documentHandle.deref(), this.path, valueCBOR, 0)
260
- } else {
261
- FFI.documentSetCBOR(documentHandle.deref(), this.path, valueCBOR)
262
- }
263
-
264
- const valueJSONCopy = CBOR.decode(valueCBOR)
265
- const valueCopy = augmentJSONValue(valueJSONCopy, this.mutableDocument, this.path)
266
-
267
- const updateResult = UpdateResult.set(this.mutableDocument.id, this.path, valueCopy)
268
- this.recordUpdateResult(updateResult)
269
- }
270
-
271
- /** @internal */
272
- '@ditto.remove'() {
273
- const documentHandle = Bridge.mutableDocument.handleFor(this.mutableDocument)
274
- FFI.documentRemove(documentHandle.deref(), this.path)
275
-
276
- this.updateInMemory((container, lastPathComponent) => {
277
- if (Array.isArray(container) && typeof lastPathComponent === 'number') {
278
- container.splice(lastPathComponent, 1)
279
- } else {
280
- delete container[lastPathComponent]
281
- }
282
- })
283
-
284
- const updateResult = UpdateResult.removed(this.mutableDocument.id, this.path)
285
- this.recordUpdateResult(updateResult)
286
- }
287
-
288
- /** @private */
289
- private updateInMemory(block: (container: any, lastPathComponent: any) => void) {
290
- const mutableDocumentValue = this.mutableDocument.value
291
- const evaluationResult = KeyPath.evaluate(this.path, mutableDocumentValue, { stopAtLastContainer: true })
292
- block(evaluationResult.value, evaluationResult.nextPathComponent)
293
- }
294
-
295
- /** @private */
296
- private recordUpdateResult(updateResult: UpdateResult) {
297
-
298
- const updateResults = this.mutableDocument['@ditto.updateResults'].slice()
299
- updateResults.push(updateResult)
300
- Object.freeze(updateResults)
301
- this.mutableDocument['@ditto.updateResults' as any] = updateResults
302
- }
303
- }
@@ -1,192 +0,0 @@
1
- //
2
- // Copyright © 2021 DittoLive Incorporated. All rights reserved.
3
- //
4
-
5
- import * as FFI from './ffi'
6
- import { Bridge } from './bridge'
7
- import { DocumentID } from './document-id'
8
- import { validateDocumentIDCBOR } from './document-id'
9
- import { DocumentPath, MutableDocumentPath } from './document-path'
10
-
11
- import type { UpdateResult } from './update-result'
12
-
13
- // -----------------------------------------------------------------------------
14
-
15
- /**
16
- * A document value is a JavaScript object containing values for keys that
17
- * can be serialized via CBOR.
18
- */
19
- export type DocumentValue = Record<string, any>
20
-
21
- // -----------------------------------------------------------------------------
22
-
23
- /** A document belonging to a {@link Collection} with an inner value. */
24
- export class Document {
25
- /**
26
- * Returns a hash that represents the passed in document(s).
27
- */
28
- static hash(documentOrMany: Document | Document[]): BigInt {
29
- const documents = documentsFrom(documentOrMany)
30
- const documentHandles = documents.map((doc) => Bridge.document.handleFor(doc))
31
- return FFI.documentsHash(documentHandles.map((handle) => handle.deref()))
32
- }
33
-
34
- /**
35
- * Returns a pattern of words that together create a mnemonic, which
36
- * represents the passed in document(s).
37
- */
38
- static hashMnemonic(documentOrMany: Document | Document[]): string {
39
- const documents = documentsFrom(documentOrMany)
40
- const documentHandles = Bridge.document.handlesFor(documents)
41
- return FFI.documentsHashMnemonic(documentHandles.deref())
42
- }
43
-
44
- /**
45
- * Returns the document ID.
46
- */
47
- get id(): DocumentID {
48
- let id = this['@ditto.id']
49
- if (typeof id === 'undefined') {
50
- const documentHandle = Bridge.document.handleFor(this)
51
- const documentIDCBOR = FFI.documentID(documentHandle.deref())
52
- id = new DocumentID(documentIDCBOR, true)
53
- this['@ditto.id'] = id
54
- }
55
- return id
56
- }
57
-
58
- /**
59
- * Returns the document path at the root of the document.
60
- */
61
- get path(): DocumentPath {
62
- return new DocumentPath(this, '', false)
63
- }
64
-
65
- /**
66
- * Convenience property, same as calling `path.value`. The value is cached on
67
- * first access and returned on subsequent calls without calling `path.value`
68
- * again.
69
- */
70
- get value(): DocumentValue {
71
- let value = this['@ditto.value']
72
- if (typeof value === 'undefined') {
73
- value = this.path.value
74
- this['@ditto.value'] = value
75
- }
76
- return value
77
- }
78
-
79
- /**
80
- * Convenience method, same as calling `path.at()`.
81
- */
82
- at(keyPathOrIndex: string | number): DocumentPath {
83
- return this.path.at(keyPathOrIndex)
84
- }
85
-
86
- /** @internal */
87
- constructor() {}
88
-
89
-
90
- /** @internal */
91
- static idCBOR(document: Document): Uint8Array {
92
- const documentHandle = Bridge.document.handleFor(document)
93
- return FFI.documentID(documentHandle.deref())
94
- }
95
-
96
- /** @internal */
97
- static canonicalizedIDCBOR(idCBOR: Uint8Array): Uint8Array {
98
- return validateDocumentIDCBOR(idCBOR)
99
- }
100
-
101
- /** @internal */
102
- static isIDCBORCanonical(idCBOR: Uint8Array): boolean {
103
- const canonicalIDCBOR = this.canonicalizedIDCBOR(idCBOR)
104
- return idCBOR === canonicalIDCBOR
105
- }
106
- }
107
-
108
- // -----------------------------------------------------------------------------
109
-
110
-
111
- /**
112
- * A representation of a {@link Document} that can be mutated via
113
- * {@link MutableDocumentPath}. You don't create or interact with
114
- * a `MutableDocument` directly but rather through our proxy-based
115
- * subscripting API exposed within the `update()` methods of
116
- * {@link PendingCursorOperation.update | PendingCursorOperation} and
117
- * {@link PendingIDSpecificOperation.update | PendingIDSpecificOperation}.
118
- */
119
- export class MutableDocument {
120
- /**
121
- * Returns the ID of the document.
122
- */
123
- get id(): DocumentID {
124
- let id = this['@ditto.id']
125
- if (typeof id === 'undefined') {
126
- const documentHandle = Bridge.mutableDocument.handleFor(this)
127
- const documentIDCBOR = FFI.documentID(documentHandle.deref())
128
- id = new DocumentID(documentIDCBOR, true)
129
- this['@ditto.id'] = id
130
- }
131
- return id
132
- }
133
-
134
- /**
135
- * Returns the document path at the root of the document.
136
- */
137
- get path(): MutableDocumentPath {
138
- return new MutableDocumentPath(this, '', false)
139
- }
140
-
141
- /**
142
- * Convenience property, same as `path.value`.
143
- */
144
- get value(): DocumentValue {
145
- return this.path.value
146
- }
147
-
148
- /**
149
- * Convenience method, same as calling `path.at()`.
150
- */
151
- at(keyPathOrIndex: string | number): MutableDocumentPath {
152
- return this.path.at(keyPathOrIndex)
153
- }
154
-
155
- /** @internal */
156
- constructor() {}
157
-
158
- /** @internal */
159
- readonly '@ditto.updateResults': UpdateResult[] = []
160
-
161
-
162
- /** @internal */
163
- static idCBOR(mutableDocument: MutableDocument): Uint8Array {
164
- const documentHandle = Bridge.mutableDocument.handleFor(mutableDocument)
165
- return FFI.documentID(documentHandle.deref())
166
- }
167
-
168
- /** @internal */
169
- static canonicalizedIDCBOR = Document.canonicalizedIDCBOR
170
-
171
- /** @internal */
172
- static isIDCBORCanonical = Document.isIDCBORCanonical
173
- }
174
-
175
- // -----------------------------------------------------------------------------
176
-
177
- /** @private */
178
- function documentsFrom(documentOrMany: Document | Document[] | null): Document[] {
179
- if (!documentOrMany) {
180
- return []
181
- }
182
-
183
- if (documentOrMany instanceof Document) {
184
- return [documentOrMany]
185
- }
186
-
187
- if (documentOrMany instanceof Array) {
188
- return documentOrMany as Document[]
189
- }
190
-
191
- throw new Error(`Expected null, a single document, or an array of documents but got value of type ${typeof documentOrMany}: ${documentOrMany}`)
192
- }
@@ -1,24 +0,0 @@
1
- //
2
- // Copyright © 2021 DittoLive Incorporated. All rights reserved.
3
- //
4
-
5
-
6
- import { Attachment } from './attachment'
7
- import { Document, MutableDocument } from './document'
8
-
9
- import { StaticTCPClient } from './static-tcp-client'
10
- import { WebsocketClient } from './websocket-client'
11
-
12
- import { Ditto } from './ditto'
13
- import { Bridge } from './bridge'
14
- import { QueryResult } from './query-result'
15
- import { QueryResultItem } from './query-result-item'
16
-
17
- Bridge.attachment.registerType(Attachment)
18
- Bridge.document.registerType(Document)
19
- Bridge.dqlResult.registerType(QueryResultItem)
20
- Bridge.dqlResponse.registerType(QueryResult)
21
- Bridge.mutableDocument.registerType(MutableDocument)
22
- Bridge.staticTCPClient.registerType(StaticTCPClient)
23
- Bridge.websocketClient.registerType(WebsocketClient)
24
- Bridge.ditto.registerType(Ditto)