@connecttomahdi/rxdb 17.0.0-beta.17 → 17.1.1

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 (349) hide show
  1. package/AGENTS.md +4 -0
  2. package/CHANGELOG.md +47 -4
  3. package/CLAUDE.md +2 -0
  4. package/dist/cjs/change-event-buffer.js +2 -1
  5. package/dist/cjs/change-event-buffer.js.map +1 -1
  6. package/dist/cjs/custom-index.js +85 -12
  7. package/dist/cjs/custom-index.js.map +1 -1
  8. package/dist/cjs/doc-cache.js +117 -35
  9. package/dist/cjs/doc-cache.js.map +1 -1
  10. package/dist/cjs/event-reduce.js +10 -1
  11. package/dist/cjs/event-reduce.js.map +1 -1
  12. package/dist/cjs/plugin-helpers.js +16 -0
  13. package/dist/cjs/plugin-helpers.js.map +1 -1
  14. package/dist/cjs/plugins/attachments/index.js +3 -3
  15. package/dist/cjs/plugins/attachments/index.js.map +1 -1
  16. package/dist/cjs/plugins/cleanup/cleanup.js +5 -3
  17. package/dist/cjs/plugins/cleanup/cleanup.js.map +1 -1
  18. package/dist/cjs/plugins/crdt/index.js +52 -0
  19. package/dist/cjs/plugins/crdt/index.js.map +1 -1
  20. package/dist/cjs/plugins/dev-mode/check-query.js +7 -1
  21. package/dist/cjs/plugins/dev-mode/check-query.js.map +1 -1
  22. package/dist/cjs/plugins/dev-mode/check-schema.js +2 -1
  23. package/dist/cjs/plugins/dev-mode/check-schema.js.map +1 -1
  24. package/dist/cjs/plugins/dev-mode/error-messages.js +43 -5
  25. package/dist/cjs/plugins/dev-mode/error-messages.js.map +1 -1
  26. package/dist/cjs/plugins/encryption-crypto-js/index.js +22 -6
  27. package/dist/cjs/plugins/encryption-crypto-js/index.js.map +1 -1
  28. package/dist/cjs/plugins/leader-election/index.js +5 -5
  29. package/dist/cjs/plugins/leader-election/index.js.map +1 -1
  30. package/dist/cjs/plugins/local-documents/local-documents.js +20 -13
  31. package/dist/cjs/plugins/local-documents/local-documents.js.map +1 -1
  32. package/dist/cjs/plugins/migration-schema/migration-helpers.js +3 -0
  33. package/dist/cjs/plugins/migration-schema/migration-helpers.js.map +1 -1
  34. package/dist/cjs/plugins/migration-schema/rx-migration-state.js +1 -1
  35. package/dist/cjs/plugins/migration-schema/rx-migration-state.js.map +1 -1
  36. package/dist/cjs/plugins/pipeline/rx-pipeline.js +5 -1
  37. package/dist/cjs/plugins/pipeline/rx-pipeline.js.map +1 -1
  38. package/dist/cjs/plugins/query-builder/mquery/nosql-query-builder.js +4 -2
  39. package/dist/cjs/plugins/query-builder/mquery/nosql-query-builder.js.map +1 -1
  40. package/dist/cjs/plugins/replication/index.js +40 -2
  41. package/dist/cjs/plugins/replication/index.js.map +1 -1
  42. package/dist/cjs/plugins/replication-google-drive/document-handling.js +17 -6
  43. package/dist/cjs/plugins/replication-google-drive/document-handling.js.map +1 -1
  44. package/dist/cjs/plugins/replication-google-drive/google-drive-helper.js +1 -1
  45. package/dist/cjs/plugins/replication-google-drive/google-drive-helper.js.map +1 -1
  46. package/dist/cjs/plugins/replication-google-drive/google-drive-types.js.map +1 -1
  47. package/dist/cjs/plugins/replication-google-drive/signaling.js +4 -1
  48. package/dist/cjs/plugins/replication-google-drive/signaling.js.map +1 -1
  49. package/dist/cjs/plugins/replication-google-drive/upstream.js +7 -4
  50. package/dist/cjs/plugins/replication-google-drive/upstream.js.map +1 -1
  51. package/dist/cjs/plugins/replication-microsoft-onedrive/signaling.js +4 -1
  52. package/dist/cjs/plugins/replication-microsoft-onedrive/signaling.js.map +1 -1
  53. package/dist/cjs/plugins/state/rx-state.js +14 -3
  54. package/dist/cjs/plugins/state/rx-state.js.map +1 -1
  55. package/dist/cjs/plugins/storage-dexie/rx-storage-instance-dexie.js +0 -7
  56. package/dist/cjs/plugins/storage-dexie/rx-storage-instance-dexie.js.map +1 -1
  57. package/dist/cjs/plugins/storage-memory/binary-search-bounds.js +112 -40
  58. package/dist/cjs/plugins/storage-memory/binary-search-bounds.js.map +1 -1
  59. package/dist/cjs/plugins/storage-memory/memory-helper.js +127 -40
  60. package/dist/cjs/plugins/storage-memory/memory-helper.js.map +1 -1
  61. package/dist/cjs/plugins/storage-memory/memory-indexes.js +1 -0
  62. package/dist/cjs/plugins/storage-memory/memory-indexes.js.map +1 -1
  63. package/dist/cjs/plugins/storage-memory/memory-types.js.map +1 -1
  64. package/dist/cjs/plugins/storage-memory/rx-storage-instance-memory.js +97 -37
  65. package/dist/cjs/plugins/storage-memory/rx-storage-instance-memory.js.map +1 -1
  66. package/dist/cjs/plugins/storage-mongodb/mongodb-helper.js +42 -1
  67. package/dist/cjs/plugins/storage-mongodb/mongodb-helper.js.map +1 -1
  68. package/dist/cjs/plugins/storage-mongodb/rx-storage-instance-mongodb.js +7 -7
  69. package/dist/cjs/plugins/storage-mongodb/rx-storage-instance-mongodb.js.map +1 -1
  70. package/dist/cjs/plugins/test-utils/config.js +1 -1
  71. package/dist/cjs/plugins/test-utils/config.js.map +1 -1
  72. package/dist/cjs/plugins/test-utils/performance.js +122 -92
  73. package/dist/cjs/plugins/test-utils/performance.js.map +1 -1
  74. package/dist/cjs/plugins/test-utils/schema-objects.js +1 -1
  75. package/dist/cjs/plugins/test-utils/schema-objects.js.map +1 -1
  76. package/dist/cjs/plugins/test-utils/test-util.js +62 -0
  77. package/dist/cjs/plugins/test-utils/test-util.js.map +1 -1
  78. package/dist/cjs/plugins/utils/utils-map.js +2 -2
  79. package/dist/cjs/plugins/utils/utils-map.js.map +1 -1
  80. package/dist/cjs/plugins/utils/utils-object-deep-equal.js +3 -2
  81. package/dist/cjs/plugins/utils/utils-object-deep-equal.js.map +1 -1
  82. package/dist/cjs/plugins/utils/utils-object-dot-prop.js +25 -0
  83. package/dist/cjs/plugins/utils/utils-object-dot-prop.js.map +1 -1
  84. package/dist/cjs/plugins/utils/utils-object.js +102 -27
  85. package/dist/cjs/plugins/utils/utils-object.js.map +1 -1
  86. package/dist/cjs/plugins/utils/utils-other.js +9 -4
  87. package/dist/cjs/plugins/utils/utils-other.js.map +1 -1
  88. package/dist/cjs/plugins/utils/utils-premium.js +5 -23
  89. package/dist/cjs/plugins/utils/utils-premium.js.map +1 -1
  90. package/dist/cjs/plugins/utils/utils-revision.js +20 -10
  91. package/dist/cjs/plugins/utils/utils-revision.js.map +1 -1
  92. package/dist/cjs/plugins/utils/utils-rxdb-version.js +1 -1
  93. package/dist/cjs/plugins/utils/utils-rxdb-version.js.map +1 -1
  94. package/dist/cjs/plugins/utils/utils-string.js +11 -8
  95. package/dist/cjs/plugins/utils/utils-string.js.map +1 -1
  96. package/dist/cjs/plugins/utils/utils-time.js +21 -16
  97. package/dist/cjs/plugins/utils/utils-time.js.map +1 -1
  98. package/dist/cjs/query-cache.js +6 -4
  99. package/dist/cjs/query-cache.js.map +1 -1
  100. package/dist/cjs/query-planner.js +2 -2
  101. package/dist/cjs/query-planner.js.map +1 -1
  102. package/dist/cjs/replication-protocol/downstream.js +1 -1
  103. package/dist/cjs/replication-protocol/downstream.js.map +1 -1
  104. package/dist/cjs/rx-collection-helper.js +11 -6
  105. package/dist/cjs/rx-collection-helper.js.map +1 -1
  106. package/dist/cjs/rx-collection.js +34 -6
  107. package/dist/cjs/rx-collection.js.map +1 -1
  108. package/dist/cjs/rx-database.js +40 -7
  109. package/dist/cjs/rx-database.js.map +1 -1
  110. package/dist/cjs/rx-document.js +10 -3
  111. package/dist/cjs/rx-document.js.map +1 -1
  112. package/dist/cjs/rx-query-helper.js +35 -12
  113. package/dist/cjs/rx-query-helper.js.map +1 -1
  114. package/dist/cjs/rx-query-single-result.js +9 -2
  115. package/dist/cjs/rx-query-single-result.js.map +1 -1
  116. package/dist/cjs/rx-query.js +72 -29
  117. package/dist/cjs/rx-query.js.map +1 -1
  118. package/dist/cjs/rx-schema-helper.js +9 -3
  119. package/dist/cjs/rx-schema-helper.js.map +1 -1
  120. package/dist/cjs/rx-schema.js +1 -0
  121. package/dist/cjs/rx-schema.js.map +1 -1
  122. package/dist/cjs/rx-storage-helper.js +212 -129
  123. package/dist/cjs/rx-storage-helper.js.map +1 -1
  124. package/dist/cjs/types/rx-error.d.js.map +1 -1
  125. package/dist/cjs/types/rx-schema.d.js.map +1 -1
  126. package/dist/esm/change-event-buffer.js +2 -1
  127. package/dist/esm/change-event-buffer.js.map +1 -1
  128. package/dist/esm/custom-index.js +85 -12
  129. package/dist/esm/custom-index.js.map +1 -1
  130. package/dist/esm/doc-cache.js +118 -36
  131. package/dist/esm/doc-cache.js.map +1 -1
  132. package/dist/esm/event-reduce.js +10 -1
  133. package/dist/esm/event-reduce.js.map +1 -1
  134. package/dist/esm/plugin-helpers.js +16 -0
  135. package/dist/esm/plugin-helpers.js.map +1 -1
  136. package/dist/esm/plugins/attachments/index.js +3 -3
  137. package/dist/esm/plugins/attachments/index.js.map +1 -1
  138. package/dist/esm/plugins/cleanup/cleanup.js +5 -3
  139. package/dist/esm/plugins/cleanup/cleanup.js.map +1 -1
  140. package/dist/esm/plugins/crdt/index.js +52 -0
  141. package/dist/esm/plugins/crdt/index.js.map +1 -1
  142. package/dist/esm/plugins/dev-mode/check-query.js +7 -1
  143. package/dist/esm/plugins/dev-mode/check-query.js.map +1 -1
  144. package/dist/esm/plugins/dev-mode/check-schema.js +2 -1
  145. package/dist/esm/plugins/dev-mode/check-schema.js.map +1 -1
  146. package/dist/esm/plugins/dev-mode/error-messages.js +43 -5
  147. package/dist/esm/plugins/dev-mode/error-messages.js.map +1 -1
  148. package/dist/esm/plugins/encryption-crypto-js/index.js +22 -6
  149. package/dist/esm/plugins/encryption-crypto-js/index.js.map +1 -1
  150. package/dist/esm/plugins/leader-election/index.js +4 -4
  151. package/dist/esm/plugins/leader-election/index.js.map +1 -1
  152. package/dist/esm/plugins/local-documents/local-documents.js +20 -13
  153. package/dist/esm/plugins/local-documents/local-documents.js.map +1 -1
  154. package/dist/esm/plugins/migration-schema/migration-helpers.js +3 -0
  155. package/dist/esm/plugins/migration-schema/migration-helpers.js.map +1 -1
  156. package/dist/esm/plugins/migration-schema/rx-migration-state.js +1 -1
  157. package/dist/esm/plugins/migration-schema/rx-migration-state.js.map +1 -1
  158. package/dist/esm/plugins/pipeline/rx-pipeline.js +5 -1
  159. package/dist/esm/plugins/pipeline/rx-pipeline.js.map +1 -1
  160. package/dist/esm/plugins/query-builder/mquery/nosql-query-builder.js +4 -2
  161. package/dist/esm/plugins/query-builder/mquery/nosql-query-builder.js.map +1 -1
  162. package/dist/esm/plugins/replication/index.js +40 -2
  163. package/dist/esm/plugins/replication/index.js.map +1 -1
  164. package/dist/esm/plugins/replication-google-drive/document-handling.js +17 -6
  165. package/dist/esm/plugins/replication-google-drive/document-handling.js.map +1 -1
  166. package/dist/esm/plugins/replication-google-drive/google-drive-helper.js +1 -1
  167. package/dist/esm/plugins/replication-google-drive/google-drive-helper.js.map +1 -1
  168. package/dist/esm/plugins/replication-google-drive/google-drive-types.js.map +1 -1
  169. package/dist/esm/plugins/replication-google-drive/signaling.js +4 -1
  170. package/dist/esm/plugins/replication-google-drive/signaling.js.map +1 -1
  171. package/dist/esm/plugins/replication-google-drive/upstream.js +7 -4
  172. package/dist/esm/plugins/replication-google-drive/upstream.js.map +1 -1
  173. package/dist/esm/plugins/replication-microsoft-onedrive/signaling.js +4 -1
  174. package/dist/esm/plugins/replication-microsoft-onedrive/signaling.js.map +1 -1
  175. package/dist/esm/plugins/state/rx-state.js +15 -4
  176. package/dist/esm/plugins/state/rx-state.js.map +1 -1
  177. package/dist/esm/plugins/storage-dexie/rx-storage-instance-dexie.js +1 -8
  178. package/dist/esm/plugins/storage-dexie/rx-storage-instance-dexie.js.map +1 -1
  179. package/dist/esm/plugins/storage-memory/binary-search-bounds.js +107 -40
  180. package/dist/esm/plugins/storage-memory/binary-search-bounds.js.map +1 -1
  181. package/dist/esm/plugins/storage-memory/memory-helper.js +128 -41
  182. package/dist/esm/plugins/storage-memory/memory-helper.js.map +1 -1
  183. package/dist/esm/plugins/storage-memory/memory-indexes.js +1 -0
  184. package/dist/esm/plugins/storage-memory/memory-indexes.js.map +1 -1
  185. package/dist/esm/plugins/storage-memory/memory-types.js.map +1 -1
  186. package/dist/esm/plugins/storage-memory/rx-storage-instance-memory.js +90 -30
  187. package/dist/esm/plugins/storage-memory/rx-storage-instance-memory.js.map +1 -1
  188. package/dist/esm/plugins/storage-mongodb/mongodb-helper.js +39 -0
  189. package/dist/esm/plugins/storage-mongodb/mongodb-helper.js.map +1 -1
  190. package/dist/esm/plugins/storage-mongodb/rx-storage-instance-mongodb.js +8 -8
  191. package/dist/esm/plugins/storage-mongodb/rx-storage-instance-mongodb.js.map +1 -1
  192. package/dist/esm/plugins/test-utils/config.js +1 -1
  193. package/dist/esm/plugins/test-utils/config.js.map +1 -1
  194. package/dist/esm/plugins/test-utils/performance.js +122 -92
  195. package/dist/esm/plugins/test-utils/performance.js.map +1 -1
  196. package/dist/esm/plugins/test-utils/schema-objects.js +1 -1
  197. package/dist/esm/plugins/test-utils/schema-objects.js.map +1 -1
  198. package/dist/esm/plugins/test-utils/test-util.js +59 -0
  199. package/dist/esm/plugins/test-utils/test-util.js.map +1 -1
  200. package/dist/esm/plugins/utils/utils-map.js +2 -2
  201. package/dist/esm/plugins/utils/utils-map.js.map +1 -1
  202. package/dist/esm/plugins/utils/utils-object-deep-equal.js +3 -2
  203. package/dist/esm/plugins/utils/utils-object-deep-equal.js.map +1 -1
  204. package/dist/esm/plugins/utils/utils-object-dot-prop.js +25 -0
  205. package/dist/esm/plugins/utils/utils-object-dot-prop.js.map +1 -1
  206. package/dist/esm/plugins/utils/utils-object.js +102 -27
  207. package/dist/esm/plugins/utils/utils-object.js.map +1 -1
  208. package/dist/esm/plugins/utils/utils-other.js +9 -4
  209. package/dist/esm/plugins/utils/utils-other.js.map +1 -1
  210. package/dist/esm/plugins/utils/utils-premium.js +5 -23
  211. package/dist/esm/plugins/utils/utils-premium.js.map +1 -1
  212. package/dist/esm/plugins/utils/utils-revision.js +20 -10
  213. package/dist/esm/plugins/utils/utils-revision.js.map +1 -1
  214. package/dist/esm/plugins/utils/utils-rxdb-version.js +1 -1
  215. package/dist/esm/plugins/utils/utils-rxdb-version.js.map +1 -1
  216. package/dist/esm/plugins/utils/utils-string.js +11 -8
  217. package/dist/esm/plugins/utils/utils-string.js.map +1 -1
  218. package/dist/esm/plugins/utils/utils-time.js +21 -16
  219. package/dist/esm/plugins/utils/utils-time.js.map +1 -1
  220. package/dist/esm/query-cache.js +7 -5
  221. package/dist/esm/query-cache.js.map +1 -1
  222. package/dist/esm/query-planner.js +2 -2
  223. package/dist/esm/query-planner.js.map +1 -1
  224. package/dist/esm/replication-protocol/downstream.js +1 -1
  225. package/dist/esm/replication-protocol/downstream.js.map +1 -1
  226. package/dist/esm/rx-collection-helper.js +12 -7
  227. package/dist/esm/rx-collection-helper.js.map +1 -1
  228. package/dist/esm/rx-collection.js +35 -7
  229. package/dist/esm/rx-collection.js.map +1 -1
  230. package/dist/esm/rx-database.js +40 -7
  231. package/dist/esm/rx-database.js.map +1 -1
  232. package/dist/esm/rx-document.js +11 -4
  233. package/dist/esm/rx-document.js.map +1 -1
  234. package/dist/esm/rx-query-helper.js +35 -12
  235. package/dist/esm/rx-query-helper.js.map +1 -1
  236. package/dist/esm/rx-query-single-result.js +10 -3
  237. package/dist/esm/rx-query-single-result.js.map +1 -1
  238. package/dist/esm/rx-query.js +72 -29
  239. package/dist/esm/rx-query.js.map +1 -1
  240. package/dist/esm/rx-schema-helper.js +9 -3
  241. package/dist/esm/rx-schema-helper.js.map +1 -1
  242. package/dist/esm/rx-schema.js +1 -0
  243. package/dist/esm/rx-schema.js.map +1 -1
  244. package/dist/esm/rx-storage-helper.js +176 -94
  245. package/dist/esm/rx-storage-helper.js.map +1 -1
  246. package/dist/esm/types/rx-error.d.js.map +1 -1
  247. package/dist/esm/types/rx-schema.d.js.map +1 -1
  248. package/dist/types/custom-index.d.ts +5 -0
  249. package/dist/types/doc-cache.d.ts +1 -1
  250. package/dist/types/plugins/dev-mode/error-messages.d.ts +36 -0
  251. package/dist/types/plugins/leader-election/index.d.ts +1 -0
  252. package/dist/types/plugins/replication-google-drive/document-handling.d.ts +4 -1
  253. package/dist/types/plugins/replication-google-drive/google-drive-types.d.ts +1 -0
  254. package/dist/types/plugins/state/rx-state.d.ts +1 -1
  255. package/dist/types/plugins/storage-denokv/index.d.ts +1 -1
  256. package/dist/types/plugins/storage-dexie/rx-storage-dexie.d.ts +1 -1
  257. package/dist/types/plugins/storage-localstorage/index.d.ts +1 -1
  258. package/dist/types/plugins/storage-memory/binary-search-bounds.d.ts +21 -10
  259. package/dist/types/plugins/storage-memory/memory-helper.d.ts +7 -3
  260. package/dist/types/plugins/storage-memory/memory-types.d.ts +5 -0
  261. package/dist/types/plugins/storage-mongodb/mongodb-helper.d.ts +9 -1
  262. package/dist/types/plugins/storage-mongodb/rx-storage-instance-mongodb.d.ts +2 -2
  263. package/dist/types/plugins/storage-mongodb/rx-storage-mongodb.d.ts +1 -1
  264. package/dist/types/plugins/storage-remote/rx-storage-remote.d.ts +1 -1
  265. package/dist/types/plugins/storage-sqlite/index.d.ts +1 -1
  266. package/dist/types/plugins/test-utils/performance.d.ts +36 -0
  267. package/dist/types/plugins/test-utils/test-util.d.ts +17 -0
  268. package/dist/types/plugins/utils/utils-object.d.ts +8 -3
  269. package/dist/types/plugins/utils/utils-premium.d.ts +0 -2
  270. package/dist/types/plugins/utils/utils-rxdb-version.d.ts +1 -1
  271. package/dist/types/rx-database.d.ts +1 -1
  272. package/dist/types/rx-query-single-result.d.ts +1 -1
  273. package/dist/types/rx-query.d.ts +3 -2
  274. package/dist/types/rx-storage-helper.d.ts +15 -0
  275. package/dist/types/types/rx-error.d.ts +3 -0
  276. package/dist/types/types/rx-schema.d.ts +5 -0
  277. package/eslint.config.mjs +2 -1
  278. package/package.json +38 -35
  279. package/scripts/check-code-block-line-length.js +91 -0
  280. package/scripts/check-em-dashes.js +53 -0
  281. package/scripts/copy-path.mjs +20 -0
  282. package/scripts/docs-fetch-git-history.mjs +36 -0
  283. package/scripts/fix-types.mjs +15 -8
  284. package/scripts/install-foundationdb.sh +0 -6
  285. package/scripts/notify-indexnow.mjs +171 -0
  286. package/scripts/start-foundationdb-docker.sh +73 -0
  287. package/src/change-event-buffer.ts +4 -1
  288. package/src/custom-index.ts +93 -16
  289. package/src/doc-cache.ts +117 -41
  290. package/src/event-reduce.ts +10 -1
  291. package/src/plugin-helpers.ts +10 -0
  292. package/src/plugins/attachments/index.ts +10 -12
  293. package/src/plugins/cleanup/cleanup.ts +5 -3
  294. package/src/plugins/crdt/index.ts +55 -0
  295. package/src/plugins/dev-mode/check-query.ts +7 -1
  296. package/src/plugins/dev-mode/check-schema.ts +2 -1
  297. package/src/plugins/dev-mode/error-messages.ts +45 -5
  298. package/src/plugins/encryption-crypto-js/index.ts +18 -6
  299. package/src/plugins/leader-election/index.ts +9 -8
  300. package/src/plugins/local-documents/local-documents.ts +21 -12
  301. package/src/plugins/migration-schema/migration-helpers.ts +3 -0
  302. package/src/plugins/migration-schema/rx-migration-state.ts +1 -1
  303. package/src/plugins/pipeline/rx-pipeline.ts +5 -1
  304. package/src/plugins/query-builder/mquery/nosql-query-builder.ts +8 -2
  305. package/src/plugins/replication/index.ts +41 -3
  306. package/src/plugins/replication-google-drive/document-handling.ts +17 -5
  307. package/src/plugins/replication-google-drive/google-drive-helper.ts +1 -1
  308. package/src/plugins/replication-google-drive/google-drive-types.ts +1 -0
  309. package/src/plugins/replication-google-drive/signaling.ts +4 -1
  310. package/src/plugins/replication-google-drive/upstream.ts +7 -4
  311. package/src/plugins/replication-microsoft-onedrive/signaling.ts +4 -1
  312. package/src/plugins/state/rx-state.ts +17 -5
  313. package/src/plugins/storage-dexie/rx-storage-instance-dexie.ts +0 -27
  314. package/src/plugins/storage-memory/binary-search-bounds.ts +105 -40
  315. package/src/plugins/storage-memory/memory-helper.ts +158 -67
  316. package/src/plugins/storage-memory/memory-indexes.ts +1 -0
  317. package/src/plugins/storage-memory/memory-types.ts +5 -0
  318. package/src/plugins/storage-memory/rx-storage-instance-memory.ts +104 -53
  319. package/src/plugins/storage-mongodb/mongodb-helper.ts +43 -1
  320. package/src/plugins/storage-mongodb/rx-storage-instance-mongodb.ts +11 -9
  321. package/src/plugins/test-utils/config.ts +2 -1
  322. package/src/plugins/test-utils/performance.ts +159 -85
  323. package/src/plugins/test-utils/schema-objects.ts +1 -1
  324. package/src/plugins/test-utils/test-util.ts +71 -0
  325. package/src/plugins/utils/utils-map.ts +2 -2
  326. package/src/plugins/utils/utils-object-deep-equal.ts +2 -4
  327. package/src/plugins/utils/utils-object-dot-prop.ts +25 -0
  328. package/src/plugins/utils/utils-object.ts +103 -28
  329. package/src/plugins/utils/utils-other.ts +9 -4
  330. package/src/plugins/utils/utils-premium.ts +11 -37
  331. package/src/plugins/utils/utils-revision.ts +20 -9
  332. package/src/plugins/utils/utils-rxdb-version.ts +1 -1
  333. package/src/plugins/utils/utils-string.ts +11 -9
  334. package/src/plugins/utils/utils-time.ts +21 -17
  335. package/src/query-cache.ts +6 -5
  336. package/src/query-planner.ts +2 -2
  337. package/src/replication-protocol/downstream.ts +1 -1
  338. package/src/rx-collection-helper.ts +12 -6
  339. package/src/rx-collection.ts +39 -8
  340. package/src/rx-database.ts +49 -17
  341. package/src/rx-document.ts +12 -3
  342. package/src/rx-query-helper.ts +36 -15
  343. package/src/rx-query-single-result.ts +10 -3
  344. package/src/rx-query.ts +48 -8
  345. package/src/rx-schema-helper.ts +7 -4
  346. package/src/rx-schema.ts +1 -0
  347. package/src/rx-storage-helper.ts +210 -139
  348. package/src/types/rx-error.d.ts +3 -0
  349. package/src/types/rx-schema.d.ts +5 -0
@@ -1 +1 @@
1
- {"version":3,"file":"rx-storage-helper.js","names":["overwritable","newRxError","getPrimaryFieldOfPrimaryKey","PROMISE_RESOLVE_TRUE","RXDB_VERSION","RX_META_LWT_MINIMUM","createRevision","ensureNotFalsy","flatClone","getFromMapOrCreate","lastOfArray","now","promiseWait","randomToken","filter","map","startWith","switchMap","normalizeMangoQuery","prepareQuery","HOOKS","runPluginHooks","INTERNAL_STORAGE_NAME","RX_DATABASE_LOCAL_DOCS_STORAGE_NAME","getSingleDocument","storageInstance","documentId","results","findDocumentsById","doc","undefined","writeSingle","instance","writeRow","context","writeResult","bulkWrite","error","length","primaryPath","schema","primaryKey","success","getWrittenDocumentsFromBulkWriteResponse","ret","observeSingle","firstFindPromise","changeStream","pipe","evBulk","events","find","ev","Promise","resolve","documentData","v","stackCheckpoints","checkpoints","Object","assign","x","throwIfIsStorageWriteError","collection","writeData","status","name","id","writeError","data","EVENT_BULK_ID_PREFIX","eventBulkCounter","nextEventBulkId","categorizeBulkWriteRows","docsInDb","bulkWriteRows","onInsert","onUpdate","hasAttachments","attachments","bulkInsertDocs","bulkUpdateDocs","errors","eventBulkId","eventBulk","checkpoint","eventBulkEvents","attachmentsAdd","attachmentsRemove","attachmentsUpdate","hasDocsInDb","size","newestRow","rowAmount","_loop","rowId","document","previous","docId","documentDeleted","_deleted","previousDeleted","documentInDb","get","attachmentError","insertedIsDeleted","entries","_attachments","forEach","attachmentId","attachmentData","isError","push","digest","stripAttachmentsDataFromRow","event","operation","stripAttachmentsDataFromDocument","previousDocumentData","revInDb","_rev","err","updatedRow","keys","previousAttachmentData","newDigest","eventDocumentData","previousEventDocumentData","args","attachmentWriteDataToNormalData","type","atts","hasAnyAttachment","key","prototype","hasOwnProperty","call","useDoc","flatCloneDocWithMeta","_meta","getWrappedStorageInstance","database","rxJsonSchema","deepFreezeWhenDevMode","originalStorageInstance","internals","collectionName","databaseName","options","rows","databaseToken","token","toStorageWriteRows","Array","time","firstRevision","index","lwt","preStorageWrite","lockedRun","BULK_WRITE_ROWS_BY_RESPONSE","set","useWriteResult","reInsertErrors","reInsertIds","Set","reInserts","add","subResult","concat","successArray","subSuccess","query","preparedQuery","count","ids","deleted","getAttachmentData","getChangedDocumentsSince","limit","cleanup","minDeletedTime","remove","storageInstances","delete","close","ensureRxStorageInstanceParamsAreCorrect","params","keyCompression","hasEncryption","compression","jsonSchema","encrypted","getChangedDocumentsSinceQuery","sinceLwt","sinceId","selector","$or","$gt","$eq","$gte","sort","skip","result","documents","lastDoc","WeakMap","BULK_WRITE_SUCCESS_MAP","writeRows","response","realWriteRows","errorIds","has","randomDelayStorage","input","randomDelayStorageWriteQueue","retStorage","storage","rxdbVersion","createStorageInstance","delayTimeBefore","delayTimeAfter","a","b","then","c"],"sources":["../../src/rx-storage-helper.ts"],"sourcesContent":["/**\r\n * Helper functions for accessing the RxStorage instances.\r\n */\r\n\r\nimport { overwritable } from './overwritable.ts';\r\nimport { newRxError } from './rx-error.ts';\r\nimport {\r\n getPrimaryFieldOfPrimaryKey\r\n} from './rx-schema-helper.ts';\r\nimport type {\r\n BulkWriteRow,\r\n BulkWriteRowProcessed,\r\n CategorizeBulkWriteRowsOutput,\r\n EventBulk,\r\n RxAttachmentData,\r\n RxAttachmentWriteData,\r\n RxCollection,\r\n RxDatabase,\r\n RxDocumentData,\r\n RxDocumentWriteData,\r\n RxJsonSchema,\r\n RxStorageWriteError,\r\n RxStorageChangeEvent,\r\n RxStorageInstance,\r\n RxStorageInstanceCreationParams,\r\n StringKeys,\r\n RxStorageWriteErrorConflict,\r\n RxStorageWriteErrorAttachment,\r\n RxStorage,\r\n RxStorageDefaultCheckpoint,\r\n FilledMangoQuery,\r\n RxStorageBulkWriteResponse\r\n} from './types/index.d.ts';\r\nimport {\r\n PROMISE_RESOLVE_TRUE,\r\n RXDB_VERSION,\r\n RX_META_LWT_MINIMUM,\r\n createRevision,\r\n ensureNotFalsy,\r\n flatClone,\r\n getFromMapOrCreate,\r\n lastOfArray,\r\n now,\r\n promiseWait,\r\n randomToken\r\n} from './plugins/utils/index.ts';\r\nimport { Observable, filter, map, startWith, switchMap } from 'rxjs';\r\nimport { normalizeMangoQuery, prepareQuery } from './rx-query-helper.ts';\r\nimport { HOOKS, runPluginHooks } from './hooks.ts';\r\n\r\nexport const INTERNAL_STORAGE_NAME = '_rxdb_internal';\r\nexport const RX_DATABASE_LOCAL_DOCS_STORAGE_NAME = 'rxdatabase_storage_local';\r\n\r\nexport async function getSingleDocument<RxDocType>(\r\n storageInstance: RxStorageInstance<RxDocType, any, any>,\r\n documentId: string\r\n): Promise<RxDocumentData<RxDocType> | undefined> {\r\n const results = await storageInstance.findDocumentsById([documentId], false);\r\n const doc = results[0];\r\n if (doc) {\r\n return doc;\r\n } else {\r\n return undefined;\r\n }\r\n}\r\n\r\n/**\r\n * Writes a single document,\r\n * throws RxStorageBulkWriteError on failure\r\n */\r\nexport async function writeSingle<RxDocType>(\r\n instance: RxStorageInstance<RxDocType, any, any>,\r\n writeRow: BulkWriteRow<RxDocType>,\r\n context: string\r\n): Promise<RxDocumentData<RxDocType>> {\r\n const writeResult = await instance.bulkWrite(\r\n [writeRow],\r\n context\r\n );\r\n if (writeResult.error.length > 0) {\r\n const error = writeResult.error[0];\r\n throw error;\r\n } else {\r\n const primaryPath = getPrimaryFieldOfPrimaryKey(instance.schema.primaryKey);\r\n const success = getWrittenDocumentsFromBulkWriteResponse(primaryPath, [writeRow], writeResult);\r\n const ret = success[0];\r\n return ret;\r\n }\r\n}\r\n\r\n/**\r\n * Observe the plain document data of a single document.\r\n * Do not forget to unsubscribe.\r\n */\r\nexport function observeSingle<RxDocType>(\r\n storageInstance: RxStorageInstance<RxDocType, any, any>,\r\n documentId: string\r\n): Observable<RxDocumentData<RxDocType>> {\r\n const firstFindPromise = getSingleDocument(storageInstance, documentId);\r\n const ret = storageInstance\r\n .changeStream()\r\n .pipe(\r\n map((evBulk: any) => evBulk.events.find((ev: any) => ev.documentId === documentId)),\r\n filter((ev: any) => !!ev),\r\n map((ev: any) => Promise.resolve(ensureNotFalsy(ev).documentData)),\r\n startWith(firstFindPromise),\r\n switchMap((v: any) => v),\r\n filter((v: any) => !!v)\r\n ) as any;\r\n return ret;\r\n}\r\n\r\n/**\r\n * Checkpoints must be stackable over another.\r\n * This is required form some RxStorage implementations\r\n * like the sharding plugin, where a checkpoint only represents\r\n * the document state from some, but not all shards.\r\n */\r\nexport function stackCheckpoints<CheckpointType>(\r\n checkpoints: (CheckpointType | undefined)[]\r\n): CheckpointType {\r\n return Object.assign(\r\n {},\r\n ...checkpoints.filter(x => !!x)\r\n );\r\n}\r\n\r\nexport function throwIfIsStorageWriteError<RxDocType>(\r\n collection: RxCollection<RxDocType, any, any>,\r\n documentId: string,\r\n writeData: RxDocumentWriteData<RxDocType> | RxDocType,\r\n error: RxStorageWriteError<RxDocType> | undefined\r\n) {\r\n if (error) {\r\n if (error.status === 409) {\r\n throw newRxError('CONFLICT', {\r\n collection: collection.name,\r\n id: documentId,\r\n writeError: error,\r\n data: writeData\r\n });\r\n } else if (error.status === 422) {\r\n throw newRxError('VD2', {\r\n collection: collection.name,\r\n id: documentId,\r\n writeError: error,\r\n data: writeData\r\n });\r\n } else {\r\n throw error;\r\n }\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Use a counter-based event bulk ID instead of randomToken()\r\n * for better performance. The prefix ensures uniqueness across instances.\r\n */\r\nconst EVENT_BULK_ID_PREFIX = randomToken(10);\r\nlet eventBulkCounter = 0;\r\nfunction nextEventBulkId(): string {\r\n return EVENT_BULK_ID_PREFIX + (++eventBulkCounter);\r\n}\r\n\r\n/**\r\n * Analyzes a list of BulkWriteRows and determines\r\n * which documents must be inserted, updated or deleted\r\n * and which events must be emitted and which documents cause a conflict\r\n * and must not be written.\r\n * Used as helper inside of some RxStorage implementations.\r\n * @hotPath The performance of this function is critical\r\n */\r\nexport function categorizeBulkWriteRows<RxDocType>(\r\n storageInstance: RxStorageInstance<any, any, any>,\r\n primaryPath: StringKeys<RxDocType>,\r\n /**\r\n * Current state of the documents\r\n * inside of the storage. Used to determine\r\n * which writes cause conflicts.\r\n * This must be a Map for better performance.\r\n */\r\n docsInDb: Map<RxDocumentData<RxDocType>[StringKeys<RxDocType>] | string, RxDocumentData<RxDocType>>,\r\n /**\r\n * The write rows that are passed to\r\n * RxStorageInstance().bulkWrite().\r\n */\r\n bulkWriteRows: BulkWriteRow<RxDocType>[],\r\n context: string,\r\n /**\r\n * Used by some storages for better performance.\r\n * For example when get-by-id and insert/update can run in parallel.\r\n */\r\n onInsert?: (docData: RxDocumentData<RxDocType>) => void,\r\n onUpdate?: (docData: RxDocumentData<RxDocType>) => void\r\n): CategorizeBulkWriteRowsOutput<RxDocType> {\r\n const hasAttachments = !!storageInstance.schema.attachments;\r\n const bulkInsertDocs: BulkWriteRowProcessed<RxDocType>[] = [];\r\n const bulkUpdateDocs: BulkWriteRowProcessed<RxDocType>[] = [];\r\n const errors: RxStorageWriteError<RxDocType>[] = [];\r\n const eventBulkId = nextEventBulkId();\r\n const eventBulk: EventBulk<RxStorageChangeEvent<RxDocumentData<RxDocType>>, any> = {\r\n id: eventBulkId,\r\n events: [],\r\n checkpoint: null,\r\n context\r\n };\r\n const eventBulkEvents = eventBulk.events;\r\n\r\n const attachmentsAdd: {\r\n documentId: string;\r\n attachmentId: string;\r\n attachmentData: RxAttachmentWriteData;\r\n digest: string;\r\n }[] = [];\r\n const attachmentsRemove: {\r\n documentId: string;\r\n attachmentId: string;\r\n digest: string;\r\n }[] = [];\r\n const attachmentsUpdate: {\r\n documentId: string;\r\n attachmentId: string;\r\n attachmentData: RxAttachmentWriteData;\r\n digest: string;\r\n }[] = [];\r\n\r\n const hasDocsInDb = docsInDb.size > 0;\r\n let newestRow: BulkWriteRowProcessed<RxDocType> | undefined;\r\n\r\n /**\r\n * @performance is really important in this loop!\r\n */\r\n const rowAmount = bulkWriteRows.length;\r\n for (let rowId = 0; rowId < rowAmount; rowId++) {\r\n const writeRow = bulkWriteRows[rowId];\r\n\r\n // use these variables to have less property accesses\r\n const document = writeRow.document;\r\n const previous = writeRow.previous;\r\n const docId = document[primaryPath] as string;\r\n const documentDeleted = document._deleted;\r\n const previousDeleted = previous && previous._deleted;\r\n\r\n let documentInDb: RxDocumentData<RxDocType> | undefined = undefined as any;\r\n if (hasDocsInDb) {\r\n documentInDb = docsInDb.get(docId);\r\n }\r\n let attachmentError: RxStorageWriteErrorAttachment<RxDocType> | undefined;\r\n\r\n if (!documentInDb) {\r\n /**\r\n * It is possible to insert already deleted documents,\r\n * this can happen on replication.\r\n */\r\n const insertedIsDeleted = documentDeleted ? true : false;\r\n if (hasAttachments) {\r\n Object\r\n .entries(document._attachments)\r\n .forEach(([attachmentId, attachmentData]) => {\r\n if (\r\n !(attachmentData as RxAttachmentWriteData).data\r\n ) {\r\n attachmentError = {\r\n documentId: docId,\r\n isError: true,\r\n status: 510,\r\n writeRow,\r\n attachmentId,\r\n context\r\n };\r\n errors.push(attachmentError);\r\n } else {\r\n attachmentsAdd.push({\r\n documentId: docId,\r\n attachmentId,\r\n attachmentData: attachmentData as any,\r\n digest: attachmentData.digest\r\n });\r\n }\r\n });\r\n }\r\n if (!attachmentError) {\r\n if (hasAttachments) {\r\n bulkInsertDocs.push(stripAttachmentsDataFromRow(writeRow));\r\n if (onInsert) {\r\n onInsert(document);\r\n }\r\n } else {\r\n bulkInsertDocs.push(writeRow as any);\r\n if (onInsert) {\r\n onInsert(document);\r\n }\r\n }\r\n\r\n newestRow = writeRow as any;\r\n }\r\n\r\n if (!insertedIsDeleted) {\r\n const event = {\r\n documentId: docId,\r\n operation: 'INSERT' as const,\r\n documentData: hasAttachments ? stripAttachmentsDataFromDocument(document) : document as any,\r\n previousDocumentData: hasAttachments && previous ? stripAttachmentsDataFromDocument(previous) : previous as any\r\n };\r\n eventBulkEvents.push(event);\r\n }\r\n } else {\r\n // update existing document\r\n const revInDb: string = documentInDb._rev;\r\n\r\n /**\r\n * Check for conflict\r\n */\r\n if (\r\n (\r\n !previous\r\n ) ||\r\n (\r\n !!previous &&\r\n revInDb !== previous._rev\r\n )\r\n ) {\r\n // is conflict error\r\n const err: RxStorageWriteError<RxDocType> = {\r\n isError: true,\r\n status: 409,\r\n documentId: docId,\r\n writeRow: writeRow,\r\n documentInDb,\r\n context\r\n };\r\n errors.push(err);\r\n continue;\r\n }\r\n\r\n // handle attachments data\r\n\r\n const updatedRow: BulkWriteRowProcessed<RxDocType> = hasAttachments ? stripAttachmentsDataFromRow(writeRow) : writeRow as any;\r\n if (hasAttachments) {\r\n if (documentDeleted) {\r\n /**\r\n * Deleted documents must have cleared all their attachments.\r\n */\r\n if (previous) {\r\n Object\r\n .keys(previous._attachments)\r\n .forEach(attachmentId => {\r\n attachmentsRemove.push({\r\n documentId: docId,\r\n attachmentId,\r\n digest: ensureNotFalsy(previous)._attachments[attachmentId].digest\r\n });\r\n });\r\n }\r\n } else {\r\n // first check for errors\r\n Object\r\n .entries(document._attachments)\r\n .find(([attachmentId, attachmentData]) => {\r\n const previousAttachmentData = previous ? previous._attachments[attachmentId] : undefined;\r\n if (\r\n !previousAttachmentData &&\r\n !(attachmentData as RxAttachmentWriteData).data\r\n ) {\r\n attachmentError = {\r\n documentId: docId,\r\n documentInDb: documentInDb as any,\r\n isError: true,\r\n status: 510,\r\n writeRow,\r\n attachmentId,\r\n context\r\n };\r\n }\r\n return true;\r\n });\r\n if (!attachmentError) {\r\n Object\r\n .entries(document._attachments)\r\n .forEach(([attachmentId, attachmentData]) => {\r\n const previousAttachmentData = previous ? previous._attachments[attachmentId] : undefined;\r\n if (!previousAttachmentData) {\r\n attachmentsAdd.push({\r\n documentId: docId,\r\n attachmentId,\r\n attachmentData: attachmentData as any,\r\n digest: attachmentData.digest\r\n });\r\n } else {\r\n const newDigest = updatedRow.document._attachments[attachmentId].digest;\r\n if (\r\n (attachmentData as RxAttachmentWriteData).data &&\r\n /**\r\n * Performance shortcut,\r\n * do not update the attachment data if it did not change.\r\n */\r\n previousAttachmentData.digest !== newDigest\r\n ) {\r\n attachmentsUpdate.push({\r\n documentId: docId,\r\n attachmentId,\r\n attachmentData: attachmentData as RxAttachmentWriteData,\r\n digest: attachmentData.digest\r\n });\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n if (attachmentError) {\r\n errors.push(attachmentError);\r\n } else {\r\n if (hasAttachments) {\r\n bulkUpdateDocs.push(stripAttachmentsDataFromRow(updatedRow));\r\n if (onUpdate) {\r\n onUpdate(document);\r\n }\r\n } else {\r\n bulkUpdateDocs.push(updatedRow);\r\n if (onUpdate) {\r\n onUpdate(document);\r\n }\r\n }\r\n newestRow = updatedRow as any;\r\n }\r\n\r\n let eventDocumentData: RxDocumentData<RxDocType> | undefined;\r\n let previousEventDocumentData: RxDocumentData<RxDocType> | undefined = null as any;\r\n let operation: 'INSERT' | 'UPDATE' | 'DELETE';\r\n\r\n if (previousDeleted && !documentDeleted) {\r\n operation = 'INSERT';\r\n eventDocumentData = hasAttachments ? stripAttachmentsDataFromDocument(document) : document as any;\r\n } else if (previous && !previousDeleted && !documentDeleted) {\r\n operation = 'UPDATE';\r\n eventDocumentData = hasAttachments ? stripAttachmentsDataFromDocument(document) : document as any;\r\n previousEventDocumentData = previous;\r\n } else if (documentDeleted) {\r\n operation = 'DELETE';\r\n eventDocumentData = ensureNotFalsy(document) as any;\r\n previousEventDocumentData = previous;\r\n } else {\r\n throw newRxError('SNH', { args: { writeRow } });\r\n }\r\n\r\n const event = {\r\n documentId: docId,\r\n documentData: eventDocumentData as RxDocumentData<RxDocType>,\r\n previousDocumentData: previousEventDocumentData,\r\n operation: operation\r\n };\r\n eventBulkEvents.push(event);\r\n }\r\n }\r\n\r\n return {\r\n bulkInsertDocs,\r\n bulkUpdateDocs,\r\n newestRow,\r\n errors,\r\n eventBulk,\r\n attachmentsAdd,\r\n attachmentsRemove,\r\n attachmentsUpdate\r\n };\r\n}\r\n\r\nexport function stripAttachmentsDataFromRow<RxDocType>(writeRow: BulkWriteRow<RxDocType>): BulkWriteRowProcessed<RxDocType> {\r\n return {\r\n previous: writeRow.previous,\r\n document: stripAttachmentsDataFromDocument(writeRow.document)\r\n };\r\n}\r\n\r\n/**\r\n * Used in custom RxStorage implementations.\r\n */\r\nexport function attachmentWriteDataToNormalData(writeData: RxAttachmentData | RxAttachmentWriteData): RxAttachmentData {\r\n const data = (writeData as RxAttachmentWriteData).data;\r\n if (!data) {\r\n return writeData as any;\r\n }\r\n const ret: RxAttachmentData = {\r\n length: data.size,\r\n digest: writeData.digest,\r\n type: writeData.type\r\n };\r\n return ret;\r\n}\r\n\r\nexport function stripAttachmentsDataFromDocument<RxDocType>(doc: RxDocumentWriteData<RxDocType>): RxDocumentData<RxDocType> {\r\n const atts = doc._attachments;\r\n if (!atts) {\r\n return doc;\r\n }\r\n\r\n // Use for..in loop to check for any keys without creating an array via Object.keys()\r\n let hasAnyAttachment = false;\r\n for (const key in atts) {\r\n if (Object.prototype.hasOwnProperty.call(atts, key)) {\r\n hasAnyAttachment = true;\r\n break;\r\n }\r\n }\r\n if (!hasAnyAttachment) {\r\n return doc;\r\n }\r\n\r\n const useDoc: RxDocumentData<RxDocType> = flatClone(doc) as any;\r\n useDoc._attachments = {};\r\n Object\r\n .entries(doc._attachments)\r\n .forEach(([attachmentId, attachmentData]) => {\r\n useDoc._attachments[attachmentId] = attachmentWriteDataToNormalData(attachmentData);\r\n });\r\n return useDoc;\r\n}\r\n\r\n/**\r\n * Flat clone the document data\r\n * and also the _meta field.\r\n * Used many times when we want to change the meta\r\n * during replication etc.\r\n */\r\nexport function flatCloneDocWithMeta<RxDocType>(\r\n doc: RxDocumentData<RxDocType>\r\n): RxDocumentData<RxDocType> {\r\n return Object.assign(\r\n {},\r\n doc,\r\n {\r\n _meta: flatClone(doc._meta)\r\n }\r\n );\r\n}\r\n\r\nexport type WrappedRxStorageInstance<RxDocumentType, Internals, InstanceCreationOptions> = RxStorageInstance<RxDocumentType, any, InstanceCreationOptions> & {\r\n originalStorageInstance: RxStorageInstance<RxDocumentType, Internals, InstanceCreationOptions>;\r\n};\r\n\r\n/**\r\n * Wraps the normal storageInstance of a RxCollection\r\n * to ensure that all access is properly using the hooks\r\n * and other data transformations and also ensure that database.lockedRun()\r\n * is used properly.\r\n */\r\nexport function getWrappedStorageInstance<\r\n RxDocType,\r\n Internals,\r\n InstanceCreationOptions,\r\n CheckpointType\r\n>(\r\n database: RxDatabase<{}, Internals, InstanceCreationOptions, any>,\r\n storageInstance: RxStorageInstance<RxDocType, Internals, InstanceCreationOptions, CheckpointType>,\r\n /**\r\n * The original RxJsonSchema\r\n * before it was mutated by hooks.\r\n */\r\n rxJsonSchema: RxJsonSchema<RxDocumentData<RxDocType>>\r\n): WrappedRxStorageInstance<RxDocType, Internals, InstanceCreationOptions> {\r\n overwritable.deepFreezeWhenDevMode(rxJsonSchema);\r\n\r\n const primaryPath = getPrimaryFieldOfPrimaryKey(storageInstance.schema.primaryKey);\r\n\r\n const ret: WrappedRxStorageInstance<RxDocType, Internals, InstanceCreationOptions> = {\r\n originalStorageInstance: storageInstance,\r\n schema: storageInstance.schema,\r\n internals: storageInstance.internals,\r\n collectionName: storageInstance.collectionName,\r\n databaseName: storageInstance.databaseName,\r\n options: storageInstance.options,\r\n async bulkWrite(\r\n rows: BulkWriteRow<RxDocType>[],\r\n context: string\r\n ) {\r\n const databaseToken = database.token;\r\n const toStorageWriteRows: BulkWriteRow<RxDocType>[] = new Array(rows.length);\r\n /**\r\n * Use the same timestamp for all docs of this rows-set.\r\n * This improves performance because calling Date.now() inside of the now() function\r\n * is too costly.\r\n */\r\n const time = now();\r\n /**\r\n * Pre-compute the first revision string for inserts (no previous document).\r\n * This avoids repeated string concatenation and getHeightOfRevision() calls\r\n * inside the hot loop.\r\n */\r\n const firstRevision = '1-' + databaseToken;\r\n for (let index = 0; index < rows.length; index++) {\r\n const writeRow = rows[index];\r\n const previous = writeRow.previous;\r\n let document;\r\n if (previous) {\r\n document = flatCloneDocWithMeta(writeRow.document);\r\n document._meta.lwt = time;\r\n document._rev = createRevision(\r\n databaseToken,\r\n previous\r\n );\r\n } else {\r\n /**\r\n * Optimized insert path:\r\n * - Skip cloning _meta since we overwrite it entirely with { lwt: time }\r\n * - Use pre-computed firstRevision instead of calling createRevision()\r\n */\r\n document = flatClone(writeRow.document);\r\n document._meta = { lwt: time };\r\n document._rev = firstRevision;\r\n }\r\n toStorageWriteRows[index] = {\r\n document,\r\n previous\r\n };\r\n }\r\n\r\n if (HOOKS.preStorageWrite.length > 0) {\r\n runPluginHooks('preStorageWrite', {\r\n storageInstance: this.originalStorageInstance,\r\n rows: toStorageWriteRows\r\n });\r\n }\r\n\r\n const writeResult = await database.lockedRun(\r\n () => storageInstance.bulkWrite(\r\n toStorageWriteRows,\r\n context\r\n )\r\n );\r\n\r\n /**\r\n * The RxStorageInstance MUST NOT allow to insert already _deleted documents,\r\n * without sending the previous document version.\r\n * But for better developer experience, RxDB does allow to re-insert deleted documents.\r\n * We do this by automatically fixing the conflict errors for that case\r\n * by running another bulkWrite() and merging the results.\r\n * @link https://github.com/pubkey/rxdb/pull/3839\r\n */\r\n\r\n /**\r\n * Fast path: when there are no errors, skip the wrapper object creation\r\n * and error filtering to reduce allocations.\r\n */\r\n if (writeResult.error.length === 0) {\r\n BULK_WRITE_ROWS_BY_RESPONSE.set(writeResult, toStorageWriteRows);\r\n return writeResult;\r\n }\r\n\r\n const useWriteResult: typeof writeResult = {\r\n error: []\r\n };\r\n BULK_WRITE_ROWS_BY_RESPONSE.set(useWriteResult, toStorageWriteRows);\r\n\r\n // No need to check writeResult.error.length === 0 here because\r\n // the fast path above already returns early when there are no errors.\r\n const reInsertErrors: RxStorageWriteErrorConflict<RxDocType>[] = writeResult.error\r\n .filter((error) => {\r\n if (\r\n error.status === 409 &&\r\n !error.writeRow.previous &&\r\n !error.writeRow.document._deleted &&\r\n ensureNotFalsy(error.documentInDb)._deleted\r\n ) {\r\n return true;\r\n }\r\n\r\n // add the \"normal\" errors to the parent error array.\r\n useWriteResult.error.push(error);\r\n return false;\r\n }) as any;\r\n if (reInsertErrors.length > 0) {\r\n const reInsertIds = new Set<string>();\r\n const reInserts: BulkWriteRow<RxDocType>[] = reInsertErrors\r\n .map((error) => {\r\n reInsertIds.add(error.documentId);\r\n return {\r\n previous: error.documentInDb,\r\n document: Object.assign(\r\n {},\r\n error.writeRow.document,\r\n {\r\n _rev: createRevision(\r\n database.token,\r\n error.documentInDb\r\n )\r\n }\r\n )\r\n };\r\n });\r\n\r\n const subResult = await database.lockedRun(\r\n () => storageInstance.bulkWrite(\r\n reInserts,\r\n context\r\n )\r\n );\r\n\r\n\r\n useWriteResult.error = useWriteResult.error.concat(subResult.error);\r\n const successArray = getWrittenDocumentsFromBulkWriteResponse(\r\n primaryPath,\r\n toStorageWriteRows,\r\n useWriteResult,\r\n reInsertIds\r\n );\r\n const subSuccess = getWrittenDocumentsFromBulkWriteResponse(\r\n primaryPath,\r\n reInserts,\r\n subResult\r\n );\r\n successArray.push(...subSuccess);\r\n return useWriteResult;\r\n }\r\n\r\n return useWriteResult;\r\n },\r\n query(preparedQuery) {\r\n return database.lockedRun(\r\n () => storageInstance.query(preparedQuery)\r\n );\r\n },\r\n count(preparedQuery) {\r\n return database.lockedRun(\r\n () => storageInstance.count(preparedQuery)\r\n );\r\n },\r\n findDocumentsById(ids, deleted) {\r\n return database.lockedRun(\r\n () => storageInstance.findDocumentsById(ids, deleted)\r\n );\r\n },\r\n getAttachmentData(\r\n documentId: string,\r\n attachmentId: string,\r\n digest: string\r\n ) {\r\n return database.lockedRun(\r\n () => storageInstance.getAttachmentData(documentId, attachmentId, digest)\r\n );\r\n },\r\n getChangedDocumentsSince: !storageInstance.getChangedDocumentsSince ? undefined : (limit: number, checkpoint?: any) => {\r\n return database.lockedRun(\r\n () => ((storageInstance as any).getChangedDocumentsSince)(ensureNotFalsy(limit), checkpoint)\r\n );\r\n },\r\n cleanup(minDeletedTime: number) {\r\n return database.lockedRun(\r\n () => storageInstance.cleanup(minDeletedTime)\r\n );\r\n },\r\n remove() {\r\n database.storageInstances.delete(ret);\r\n return database.lockedRun(\r\n () => storageInstance.remove()\r\n );\r\n },\r\n close() {\r\n database.storageInstances.delete(ret);\r\n return database.lockedRun(\r\n () => storageInstance.close()\r\n );\r\n },\r\n changeStream() {\r\n return storageInstance.changeStream();\r\n }\r\n };\r\n\r\n database.storageInstances.add(ret);\r\n return ret;\r\n}\r\n\r\n/**\r\n * Each RxStorage implementation should\r\n * run this method at the first step of createStorageInstance()\r\n * to ensure that the configuration is correct.\r\n */\r\nexport function ensureRxStorageInstanceParamsAreCorrect(\r\n params: RxStorageInstanceCreationParams<any, any>\r\n) {\r\n if (params.schema.keyCompression) {\r\n throw newRxError('UT5', { args: { params } });\r\n }\r\n if (hasEncryption(params.schema)) {\r\n throw newRxError('UT6', { args: { params } });\r\n }\r\n if (\r\n params.schema.attachments &&\r\n params.schema.attachments.compression\r\n ) {\r\n throw newRxError('UT7', { args: { params } });\r\n }\r\n}\r\n\r\nexport function hasEncryption(jsonSchema: RxJsonSchema<any>): boolean {\r\n if (\r\n (!!jsonSchema.encrypted && jsonSchema.encrypted.length > 0) ||\r\n (jsonSchema.attachments && jsonSchema.attachments.encrypted)\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\nexport function getChangedDocumentsSinceQuery<RxDocType, CheckpointType>(\r\n storageInstance: RxStorageInstance<RxDocType, any, any, CheckpointType>,\r\n limit: number,\r\n checkpoint?: CheckpointType\r\n): FilledMangoQuery<RxDocType> {\r\n const primaryPath = getPrimaryFieldOfPrimaryKey(storageInstance.schema.primaryKey);\r\n const sinceLwt = checkpoint ? (checkpoint as unknown as RxStorageDefaultCheckpoint).lwt : RX_META_LWT_MINIMUM;\r\n const sinceId = checkpoint ? (checkpoint as unknown as RxStorageDefaultCheckpoint).id : '';\r\n return normalizeMangoQuery(storageInstance.schema, {\r\n selector: {\r\n $or: [\r\n {\r\n '_meta.lwt': {\r\n $gt: sinceLwt\r\n }\r\n },\r\n {\r\n '_meta.lwt': {\r\n $eq: sinceLwt\r\n },\r\n [primaryPath]: {\r\n $gt: checkpoint ? sinceId : ''\r\n }\r\n }\r\n ],\r\n // add this hint for better index usage\r\n '_meta.lwt': {\r\n $gte: sinceLwt\r\n }\r\n } as any,\r\n sort: [\r\n { '_meta.lwt': 'asc' },\r\n { [primaryPath]: 'asc' }\r\n ] as any,\r\n skip: 0,\r\n limit,\r\n /**\r\n * DO NOT SET A SPECIFIC INDEX HERE!\r\n * The query might be modified by some plugin\r\n * before sending it to the storage.\r\n * We can be sure that in the end the query planner\r\n * will find the best index.\r\n */\r\n // index: ['_meta.lwt', primaryPath]\r\n });\r\n}\r\n\r\nexport async function getChangedDocumentsSince<RxDocType, CheckpointType>(\r\n storageInstance: RxStorageInstance<RxDocType, any, any, CheckpointType>,\r\n limit: number,\r\n checkpoint?: CheckpointType\r\n): Promise<{\r\n documents: RxDocumentData<RxDocType>[];\r\n /**\r\n * The checkpoint contains data so that another\r\n * call to getChangedDocumentsSince() will continue\r\n * from exactly the last document that was returned before.\r\n */\r\n checkpoint: CheckpointType;\r\n}> {\r\n if (storageInstance.getChangedDocumentsSince) {\r\n return storageInstance.getChangedDocumentsSince(limit, checkpoint);\r\n }\r\n\r\n const primaryPath = getPrimaryFieldOfPrimaryKey(storageInstance.schema.primaryKey);\r\n const query = prepareQuery<RxDocumentData<any>>(\r\n storageInstance.schema,\r\n getChangedDocumentsSinceQuery(\r\n storageInstance,\r\n limit,\r\n checkpoint\r\n )\r\n );\r\n\r\n const result = await storageInstance.query(query);\r\n const documents = result.documents;\r\n const lastDoc = lastOfArray(documents);\r\n\r\n return {\r\n documents: documents,\r\n checkpoint: lastDoc ? {\r\n id: (lastDoc as any)[primaryPath],\r\n lwt: lastDoc._meta.lwt\r\n } as any : checkpoint ? checkpoint : {\r\n id: '',\r\n lwt: 0\r\n }\r\n };\r\n}\r\n\r\n\r\nconst BULK_WRITE_ROWS_BY_RESPONSE = new WeakMap<RxStorageBulkWriteResponse<any>, BulkWriteRow<any>[]>();\r\nconst BULK_WRITE_SUCCESS_MAP = new WeakMap<RxStorageBulkWriteResponse<any>, RxDocumentData<any>[]>();\r\n\r\n/**\r\n * For better performance, this is done only when accessed\r\n * because most of the time we do not need the results, only the errors.\r\n */\r\nexport function getWrittenDocumentsFromBulkWriteResponse<RxDocType>(\r\n primaryPath: string,\r\n writeRows: BulkWriteRow<RxDocType>[],\r\n response: RxStorageBulkWriteResponse<RxDocType>,\r\n reInsertIds?: Set<string>\r\n): RxDocumentData<RxDocType>[] {\r\n return getFromMapOrCreate(\r\n BULK_WRITE_SUCCESS_MAP,\r\n response,\r\n () => {\r\n const ret: RxDocumentData<RxDocType>[] = [];\r\n let realWriteRows = BULK_WRITE_ROWS_BY_RESPONSE.get(response);\r\n if (!realWriteRows) {\r\n realWriteRows = writeRows;\r\n }\r\n if (response.error.length > 0 || reInsertIds) {\r\n const errorIds = reInsertIds ? reInsertIds : new Set<string>();\r\n for (let index = 0; index < response.error.length; index++) {\r\n const error = response.error[index];\r\n errorIds.add(error.documentId);\r\n }\r\n\r\n for (let index = 0; index < realWriteRows.length; index++) {\r\n const doc = realWriteRows[index].document;\r\n if (!errorIds.has((doc as any)[primaryPath])) {\r\n ret.push(stripAttachmentsDataFromDocument(doc));\r\n }\r\n }\r\n } else {\r\n // pre-set array size for better performance\r\n ret.length = writeRows.length - response.error.length;\r\n for (let index = 0; index < realWriteRows.length; index++) {\r\n const doc = realWriteRows[index].document;\r\n ret[index] = stripAttachmentsDataFromDocument(doc);\r\n }\r\n }\r\n return ret;\r\n }\r\n );\r\n}\r\n\r\n\r\n/**\r\n * Wraps the storage and simluates\r\n * delays. Mostly used in tests.\r\n */\r\nexport function randomDelayStorage<Internals, InstanceCreationOptions>(\r\n input: {\r\n storage: RxStorage<Internals, InstanceCreationOptions>;\r\n delayTimeBefore: () => number;\r\n delayTimeAfter: () => number;\r\n }\r\n): RxStorage<Internals, InstanceCreationOptions> {\r\n /**\r\n * Ensure writes to a delay storage\r\n * are still correctly run in order.\r\n */\r\n let randomDelayStorageWriteQueue: Promise<any> = PROMISE_RESOLVE_TRUE;\r\n\r\n const retStorage: RxStorage<Internals, InstanceCreationOptions> = {\r\n name: 'random-delay-' + input.storage.name,\r\n rxdbVersion: RXDB_VERSION,\r\n async createStorageInstance(params) {\r\n await promiseWait(input.delayTimeBefore());\r\n const storageInstance = await input.storage.createStorageInstance(params);\r\n await promiseWait(input.delayTimeAfter());\r\n\r\n return {\r\n databaseName: storageInstance.databaseName,\r\n internals: storageInstance.internals,\r\n options: storageInstance.options,\r\n schema: storageInstance.schema,\r\n collectionName: storageInstance.collectionName,\r\n bulkWrite(a, b) {\r\n randomDelayStorageWriteQueue = randomDelayStorageWriteQueue.then(async () => {\r\n await promiseWait(input.delayTimeBefore());\r\n const response = await storageInstance.bulkWrite(a, b);\r\n await promiseWait(input.delayTimeAfter());\r\n return response;\r\n });\r\n const ret = randomDelayStorageWriteQueue;\r\n return ret;\r\n },\r\n async findDocumentsById(a, b) {\r\n await promiseWait(input.delayTimeBefore());\r\n const ret = await storageInstance.findDocumentsById(a, b);\r\n await promiseWait(input.delayTimeAfter());\r\n return ret;\r\n },\r\n async query(a) {\r\n await promiseWait(input.delayTimeBefore());\r\n const ret = await storageInstance.query(a);\r\n return ret;\r\n },\r\n async count(a) {\r\n await promiseWait(input.delayTimeBefore());\r\n const ret = await storageInstance.count(a);\r\n await promiseWait(input.delayTimeAfter());\r\n return ret;\r\n\r\n },\r\n async getAttachmentData(a, b, c) {\r\n await promiseWait(input.delayTimeBefore());\r\n const ret = await storageInstance.getAttachmentData(a, b, c);\r\n await promiseWait(input.delayTimeAfter());\r\n return ret;\r\n\r\n },\r\n getChangedDocumentsSince: !storageInstance.getChangedDocumentsSince ? undefined : async (a, b) => {\r\n await promiseWait(input.delayTimeBefore());\r\n const ret = await ensureNotFalsy(storageInstance.getChangedDocumentsSince)(a, b);\r\n await promiseWait(input.delayTimeAfter());\r\n return ret;\r\n\r\n },\r\n changeStream() {\r\n return storageInstance.changeStream();\r\n },\r\n async cleanup(a) {\r\n await promiseWait(input.delayTimeBefore());\r\n const ret = await storageInstance.cleanup(a);\r\n await promiseWait(input.delayTimeAfter());\r\n return ret;\r\n\r\n },\r\n async close() {\r\n await promiseWait(input.delayTimeBefore());\r\n const ret = await storageInstance.close();\r\n await promiseWait(input.delayTimeAfter());\r\n return ret;\r\n\r\n },\r\n async remove() {\r\n await promiseWait(input.delayTimeBefore());\r\n const ret = await storageInstance.remove();\r\n await promiseWait(input.delayTimeAfter());\r\n return ret;\r\n },\r\n };\r\n\r\n\r\n }\r\n };\r\n return retStorage;\r\n}\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"rx-storage-helper.js","names":["overwritable","newRxError","getPrimaryFieldOfPrimaryKey","PROMISE_RESOLVE_TRUE","RXDB_VERSION","RX_META_LWT_MINIMUM","createRevision","ensureNotFalsy","flatClone","getFromMapOrCreate","lastOfArray","now","promiseWait","randomToken","filter","map","startWith","switchMap","normalizeMangoQuery","prepareQuery","HOOKS","runPluginHooks","INTERNAL_STORAGE_NAME","RX_DATABASE_LOCAL_DOCS_STORAGE_NAME","RX_COLLECTION_BULK_INSERT_CONTEXT","MUTABLE_DOCUMENT_WRITE_CONTEXTS","Set","registerMutableWriteContext","context","add","getSingleDocument","storageInstance","documentId","results","findDocumentsById","doc","undefined","writeSingle","instance","writeRow","writeResult","bulkWrite","error","length","primaryPath","schema","primaryKey","success","getWrittenDocumentsFromBulkWriteResponse","ret","observeSingle","firstFindPromise","changeStream","pipe","evBulk","events","find","ev","Promise","resolve","documentData","v","stackCheckpoints","checkpoints","Object","assign","x","throwIfIsStorageWriteError","collection","writeData","status","name","id","writeError","data","EVENT_BULK_ID_PREFIX","eventBulkCounter","nextEventBulkId","categorizeBulkWriteRows","docsInDb","bulkWriteRows","onInsert","onUpdate","hasAttachments","attachments","bulkInsertDocs","bulkUpdateDocs","errors","eventBulkId","eventBulk","checkpoint","eventBulkEvents","attachmentsAdd","attachmentsRemove","attachmentsUpdate","hasDocsInDb","size","newestRow","rowAmount","rowId","document","previous","docId","documentDeleted","_deleted","previousDeleted","documentInDb","get","attachmentError","atts","_attachments","attKeys","keys","a","attachmentId","attachmentData","isError","push","digest","insertedRow","row","stripAttachmentsDataFromRow","eventDocData","stripAttachmentsDataFromDocument","event","operation","previousDocumentData","revInDb","_rev","err","updatedRow","prevAtts","prevAttKeys","docAtts","docAttKeys","previousAttachmentData","newDigest","eventDocumentData","previousEventDocumentData","args","attachmentWriteDataToNormalData","type","hasAnyAttachment","key","prototype","hasOwnProperty","call","useDoc","destAtts","i","flatCloneDocWithMeta","_meta","getWrappedStorageInstance","database","rxJsonSchema","deepFreezeWhenDevMode","originalStorageInstance","internals","collectionName","databaseName","options","rows","databaseToken","token","time","firstRevision","insertMeta","lwt","isMutableContext","has","toStorageWriteRows","index","Array","preStorageWrite","lockedRun","BULK_WRITE_ROWS_BY_RESPONSE","set","useWriteResult","reInsertErrors","reInsertIds","reInserts","subResult","concat","successArray","subSuccess","query","preparedQuery","count","ids","deleted","getAttachmentData","getChangedDocumentsSince","limit","cleanup","minDeletedTime","remove","storageInstances","delete","close","ensureRxStorageInstanceParamsAreCorrect","params","keyCompression","hasEncryption","compression","jsonSchema","encrypted","getChangedDocumentsSinceQuery","sinceLwt","sinceId","selector","$or","$gt","$eq","$gte","sort","skip","result","documents","lastDoc","WeakMap","BULK_WRITE_SUCCESS_MAP","writeRows","response","realWriteRows","errorIds","randomDelayStorage","input","randomDelayStorageWriteQueue","retStorage","storage","rxdbVersion","createStorageInstance","delayTimeBefore","delayTimeAfter","b","then","c"],"sources":["../../src/rx-storage-helper.ts"],"sourcesContent":["/**\r\n * Helper functions for accessing the RxStorage instances.\r\n */\r\n\r\nimport { overwritable } from './overwritable.ts';\r\nimport { newRxError } from './rx-error.ts';\r\nimport {\r\n getPrimaryFieldOfPrimaryKey\r\n} from './rx-schema-helper.ts';\r\nimport type {\r\n BulkWriteRow,\r\n BulkWriteRowProcessed,\r\n CategorizeBulkWriteRowsOutput,\r\n EventBulk,\r\n RxAttachmentData,\r\n RxAttachmentWriteData,\r\n RxCollection,\r\n RxDatabase,\r\n RxDocumentData,\r\n RxDocumentWriteData,\r\n RxJsonSchema,\r\n RxStorageWriteError,\r\n RxStorageChangeEvent,\r\n RxStorageInstance,\r\n RxStorageInstanceCreationParams,\r\n StringKeys,\r\n RxStorageWriteErrorConflict,\r\n RxStorageWriteErrorAttachment,\r\n RxStorage,\r\n RxStorageDefaultCheckpoint,\r\n FilledMangoQuery,\r\n RxStorageBulkWriteResponse\r\n} from './types/index.d.ts';\r\nimport {\r\n PROMISE_RESOLVE_TRUE,\r\n RXDB_VERSION,\r\n RX_META_LWT_MINIMUM,\r\n createRevision,\r\n ensureNotFalsy,\r\n flatClone,\r\n getFromMapOrCreate,\r\n lastOfArray,\r\n now,\r\n promiseWait,\r\n randomToken\r\n} from './plugins/utils/index.ts';\r\nimport { Observable, filter, map, startWith, switchMap } from 'rxjs';\r\nimport { normalizeMangoQuery, prepareQuery } from './rx-query-helper.ts';\r\nimport { HOOKS, runPluginHooks } from './hooks.ts';\r\n\r\nexport const INTERNAL_STORAGE_NAME = '_rxdb_internal';\r\nexport const RX_DATABASE_LOCAL_DOCS_STORAGE_NAME = 'rxdatabase_storage_local';\r\n\r\n/**\r\n * Context string used by RxCollection.bulkInsert().\r\n * Documents written with this context are already cloned\r\n * by fillObjectDataBeforeInsert(), so the wrapped storage\r\n * can safely mutate them in place instead of cloning again.\r\n */\r\nexport const RX_COLLECTION_BULK_INSERT_CONTEXT = 'rx-collection-bulk-insert';\r\n\r\n/**\r\n * Set of bulkWrite context strings whose documents\r\n * are already cloned by the caller and can be safely\r\n * mutated in place (skip flatClone in the insert path).\r\n *\r\n * Plugins can register additional contexts via\r\n * registerMutableWriteContext().\r\n */\r\nconst MUTABLE_DOCUMENT_WRITE_CONTEXTS: Set<string> = new Set([\r\n RX_COLLECTION_BULK_INSERT_CONTEXT\r\n]);\r\n\r\n/**\r\n * Register a bulkWrite context string as \"mutable\",\r\n * meaning the caller guarantees that insert documents\r\n * are already cloned and safe to mutate in place.\r\n * This allows the wrapped storage to skip a redundant\r\n * flatClone() call on the insert hot path.\r\n */\r\nexport function registerMutableWriteContext(context: string): void {\r\n MUTABLE_DOCUMENT_WRITE_CONTEXTS.add(context);\r\n}\r\n\r\nexport async function getSingleDocument<RxDocType>(\r\n storageInstance: RxStorageInstance<RxDocType, any, any>,\r\n documentId: string\r\n): Promise<RxDocumentData<RxDocType> | undefined> {\r\n const results = await storageInstance.findDocumentsById([documentId], false);\r\n const doc = results[0];\r\n if (doc) {\r\n return doc;\r\n } else {\r\n return undefined;\r\n }\r\n}\r\n\r\n/**\r\n * Writes a single document,\r\n * throws RxStorageBulkWriteError on failure\r\n */\r\nexport async function writeSingle<RxDocType>(\r\n instance: RxStorageInstance<RxDocType, any, any>,\r\n writeRow: BulkWriteRow<RxDocType>,\r\n context: string\r\n): Promise<RxDocumentData<RxDocType>> {\r\n const writeResult = await instance.bulkWrite(\r\n [writeRow],\r\n context\r\n );\r\n if (writeResult.error.length > 0) {\r\n const error = writeResult.error[0];\r\n throw error;\r\n } else {\r\n const primaryPath = getPrimaryFieldOfPrimaryKey(instance.schema.primaryKey);\r\n const success = getWrittenDocumentsFromBulkWriteResponse(primaryPath, [writeRow], writeResult);\r\n const ret = success[0];\r\n return ret;\r\n }\r\n}\r\n\r\n/**\r\n * Observe the plain document data of a single document.\r\n * Do not forget to unsubscribe.\r\n */\r\nexport function observeSingle<RxDocType>(\r\n storageInstance: RxStorageInstance<RxDocType, any, any>,\r\n documentId: string\r\n): Observable<RxDocumentData<RxDocType>> {\r\n const firstFindPromise = getSingleDocument(storageInstance, documentId);\r\n const ret = storageInstance\r\n .changeStream()\r\n .pipe(\r\n map((evBulk: any) => evBulk.events.find((ev: any) => ev.documentId === documentId)),\r\n filter((ev: any) => !!ev),\r\n map((ev: any) => Promise.resolve(ensureNotFalsy(ev).documentData)),\r\n startWith(firstFindPromise),\r\n switchMap((v: any) => v),\r\n filter((v: any) => !!v)\r\n ) as any;\r\n return ret;\r\n}\r\n\r\n/**\r\n * Checkpoints must be stackable over another.\r\n * This is required form some RxStorage implementations\r\n * like the sharding plugin, where a checkpoint only represents\r\n * the document state from some, but not all shards.\r\n */\r\nexport function stackCheckpoints<CheckpointType>(\r\n checkpoints: (CheckpointType | undefined)[]\r\n): CheckpointType {\r\n return Object.assign(\r\n {},\r\n ...checkpoints.filter(x => !!x)\r\n );\r\n}\r\n\r\nexport function throwIfIsStorageWriteError<RxDocType>(\r\n collection: RxCollection<RxDocType, any, any>,\r\n documentId: string,\r\n writeData: RxDocumentWriteData<RxDocType> | RxDocType,\r\n error: RxStorageWriteError<RxDocType> | undefined\r\n) {\r\n if (error) {\r\n if (error.status === 409) {\r\n throw newRxError('CONFLICT', {\r\n collection: collection.name,\r\n id: documentId,\r\n writeError: error,\r\n data: writeData\r\n });\r\n } else if (error.status === 422) {\r\n throw newRxError('VD2', {\r\n collection: collection.name,\r\n id: documentId,\r\n writeError: error,\r\n data: writeData\r\n });\r\n } else {\r\n throw error;\r\n }\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Use a counter-based event bulk ID instead of randomToken()\r\n * for better performance. The prefix ensures uniqueness across instances.\r\n */\r\nconst EVENT_BULK_ID_PREFIX = randomToken(10);\r\nlet eventBulkCounter = 0;\r\nfunction nextEventBulkId(): string {\r\n return EVENT_BULK_ID_PREFIX + (++eventBulkCounter);\r\n}\r\n\r\n/**\r\n * Analyzes a list of BulkWriteRows and determines\r\n * which documents must be inserted, updated or deleted\r\n * and which events must be emitted and which documents cause a conflict\r\n * and must not be written.\r\n * Used as helper inside of some RxStorage implementations.\r\n * @hotPath The performance of this function is critical\r\n */\r\nexport function categorizeBulkWriteRows<RxDocType>(\r\n storageInstance: RxStorageInstance<any, any, any>,\r\n primaryPath: StringKeys<RxDocType>,\r\n /**\r\n * Current state of the documents\r\n * inside of the storage. Used to determine\r\n * which writes cause conflicts.\r\n * This must be a Map for better performance.\r\n */\r\n docsInDb: Map<RxDocumentData<RxDocType>[StringKeys<RxDocType>] | string, RxDocumentData<RxDocType>>,\r\n /**\r\n * The write rows that are passed to\r\n * RxStorageInstance().bulkWrite().\r\n */\r\n bulkWriteRows: BulkWriteRow<RxDocType>[],\r\n context: string,\r\n /**\r\n * Used by some storages for better performance.\r\n * For example when get-by-id and insert/update can run in parallel.\r\n */\r\n onInsert?: (docData: RxDocumentData<RxDocType>) => void,\r\n onUpdate?: (docData: RxDocumentData<RxDocType>) => void\r\n): CategorizeBulkWriteRowsOutput<RxDocType> {\r\n const hasAttachments = !!storageInstance.schema.attachments;\r\n const bulkInsertDocs: BulkWriteRowProcessed<RxDocType>[] = [];\r\n const bulkUpdateDocs: BulkWriteRowProcessed<RxDocType>[] = [];\r\n const errors: RxStorageWriteError<RxDocType>[] = [];\r\n const eventBulkId = nextEventBulkId();\r\n const eventBulk: EventBulk<RxStorageChangeEvent<RxDocumentData<RxDocType>>, any> = {\r\n id: eventBulkId,\r\n events: [],\r\n checkpoint: null,\r\n context\r\n };\r\n const eventBulkEvents = eventBulk.events;\r\n\r\n const attachmentsAdd: {\r\n documentId: string;\r\n attachmentId: string;\r\n attachmentData: RxAttachmentWriteData;\r\n digest: string;\r\n }[] = [];\r\n const attachmentsRemove: {\r\n documentId: string;\r\n attachmentId: string;\r\n digest: string;\r\n }[] = [];\r\n const attachmentsUpdate: {\r\n documentId: string;\r\n attachmentId: string;\r\n attachmentData: RxAttachmentWriteData;\r\n digest: string;\r\n }[] = [];\r\n\r\n const hasDocsInDb = docsInDb.size > 0;\r\n let newestRow: BulkWriteRowProcessed<RxDocType> | undefined;\r\n\r\n /**\r\n * @performance is really important in this loop!\r\n */\r\n const rowAmount = bulkWriteRows.length;\r\n for (let rowId = 0; rowId < rowAmount; rowId++) {\r\n const writeRow = bulkWriteRows[rowId];\r\n\r\n // use these variables to have less property accesses\r\n const document = writeRow.document;\r\n const previous = writeRow.previous;\r\n const docId = document[primaryPath] as string;\r\n const documentDeleted = document._deleted;\r\n const previousDeleted = previous && previous._deleted;\r\n\r\n let documentInDb: RxDocumentData<RxDocType> | undefined = undefined as any;\r\n if (hasDocsInDb) {\r\n documentInDb = docsInDb.get(docId);\r\n }\r\n let attachmentError: RxStorageWriteErrorAttachment<RxDocType> | undefined;\r\n\r\n if (!documentInDb) {\r\n /**\r\n * It is possible to insert already deleted documents,\r\n * this can happen on replication.\r\n */\r\n if (hasAttachments) {\r\n const atts = document._attachments;\r\n const attKeys = Object.keys(atts);\r\n for (let a = 0; a < attKeys.length; a++) {\r\n const attachmentId = attKeys[a];\r\n const attachmentData = atts[attachmentId];\r\n if (\r\n !(attachmentData as RxAttachmentWriteData).data\r\n ) {\r\n attachmentError = {\r\n documentId: docId,\r\n isError: true,\r\n status: 510,\r\n writeRow,\r\n attachmentId,\r\n context\r\n };\r\n errors.push(attachmentError);\r\n } else {\r\n attachmentsAdd.push({\r\n documentId: docId,\r\n attachmentId,\r\n attachmentData: attachmentData as any,\r\n digest: attachmentData.digest\r\n });\r\n }\r\n }\r\n }\r\n let insertedRow: BulkWriteRowProcessed<RxDocType> | undefined;\r\n if (!attachmentError) {\r\n const row: BulkWriteRowProcessed<RxDocType> = hasAttachments ? stripAttachmentsDataFromRow(writeRow) : writeRow as any;\r\n insertedRow = row;\r\n bulkInsertDocs.push(row);\r\n if (onInsert) {\r\n onInsert(document);\r\n }\r\n newestRow = row;\r\n }\r\n\r\n if (!documentDeleted) {\r\n let eventDocData = document as RxDocumentData<RxDocType>;\r\n if (hasAttachments) {\r\n eventDocData = insertedRow ? insertedRow.document : stripAttachmentsDataFromDocument(document);\r\n }\r\n const event = {\r\n documentId: docId,\r\n operation: 'INSERT' as const,\r\n documentData: eventDocData,\r\n previousDocumentData: hasAttachments && previous ? stripAttachmentsDataFromDocument(previous) : previous as any\r\n };\r\n eventBulkEvents.push(event);\r\n }\r\n } else {\r\n // update existing document\r\n const revInDb: string = documentInDb._rev;\r\n\r\n /**\r\n * Check for conflict\r\n */\r\n if (\r\n (\r\n !previous\r\n ) ||\r\n (\r\n !!previous &&\r\n revInDb !== previous._rev\r\n )\r\n ) {\r\n // is conflict error\r\n const err: RxStorageWriteError<RxDocType> = {\r\n isError: true,\r\n status: 409,\r\n documentId: docId,\r\n writeRow: writeRow,\r\n documentInDb,\r\n context\r\n };\r\n errors.push(err);\r\n continue;\r\n }\r\n\r\n // handle attachments data\r\n\r\n const updatedRow: BulkWriteRowProcessed<RxDocType> = hasAttachments ? stripAttachmentsDataFromRow(writeRow) : writeRow as any;\r\n if (hasAttachments) {\r\n if (documentDeleted) {\r\n /**\r\n * Deleted documents must have cleared all their attachments.\r\n */\r\n if (previous) {\r\n const prevAtts = previous._attachments;\r\n const prevAttKeys = Object.keys(prevAtts);\r\n for (let a = 0; a < prevAttKeys.length; a++) {\r\n const attachmentId = prevAttKeys[a];\r\n attachmentsRemove.push({\r\n documentId: docId,\r\n attachmentId,\r\n digest: prevAtts[attachmentId].digest\r\n });\r\n }\r\n }\r\n } else {\r\n // first check for errors\r\n const docAtts = document._attachments;\r\n const docAttKeys = Object.keys(docAtts);\r\n for (let a = 0; a < docAttKeys.length; a++) {\r\n const attachmentId = docAttKeys[a];\r\n const attachmentData = docAtts[attachmentId];\r\n const previousAttachmentData = previous ? previous._attachments[attachmentId] : undefined;\r\n if (\r\n !previousAttachmentData &&\r\n !(attachmentData as RxAttachmentWriteData).data\r\n ) {\r\n attachmentError = {\r\n documentId: docId,\r\n documentInDb: documentInDb as any,\r\n isError: true,\r\n status: 510,\r\n writeRow,\r\n attachmentId,\r\n context\r\n };\r\n break;\r\n }\r\n }\r\n if (!attachmentError) {\r\n for (let a = 0; a < docAttKeys.length; a++) {\r\n const attachmentId = docAttKeys[a];\r\n const attachmentData = docAtts[attachmentId];\r\n const previousAttachmentData = previous ? previous._attachments[attachmentId] : undefined;\r\n if (!previousAttachmentData) {\r\n attachmentsAdd.push({\r\n documentId: docId,\r\n attachmentId,\r\n attachmentData: attachmentData as any,\r\n digest: attachmentData.digest\r\n });\r\n } else {\r\n const newDigest = updatedRow.document._attachments[attachmentId].digest;\r\n if (\r\n (attachmentData as RxAttachmentWriteData).data &&\r\n /**\r\n * Performance shortcut,\r\n * do not update the attachment data if it did not change.\r\n */\r\n previousAttachmentData.digest !== newDigest\r\n ) {\r\n attachmentsUpdate.push({\r\n documentId: docId,\r\n attachmentId,\r\n attachmentData: attachmentData as RxAttachmentWriteData,\r\n digest: attachmentData.digest\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (attachmentError) {\r\n errors.push(attachmentError);\r\n } else {\r\n /**\r\n * updatedRow already has attachments stripped (line above),\r\n * so push it directly without stripping again.\r\n */\r\n bulkUpdateDocs.push(updatedRow);\r\n if (onUpdate) {\r\n onUpdate(document);\r\n }\r\n newestRow = updatedRow as any;\r\n }\r\n\r\n let eventDocumentData: RxDocumentData<RxDocType> | undefined;\r\n let previousEventDocumentData: RxDocumentData<RxDocType> | undefined = null as any;\r\n let operation: 'INSERT' | 'UPDATE' | 'DELETE';\r\n\r\n if (previousDeleted && !documentDeleted) {\r\n operation = 'INSERT';\r\n /**\r\n * Reuse the already-stripped document from updatedRow\r\n * instead of calling stripAttachmentsDataFromDocument() again.\r\n */\r\n eventDocumentData = hasAttachments ? updatedRow.document : document as any;\r\n } else if (previous && !previousDeleted && !documentDeleted) {\r\n operation = 'UPDATE';\r\n eventDocumentData = hasAttachments ? updatedRow.document : document as any;\r\n previousEventDocumentData = previous;\r\n } else if (documentDeleted) {\r\n operation = 'DELETE';\r\n eventDocumentData = ensureNotFalsy(document) as any;\r\n previousEventDocumentData = previous;\r\n } else {\r\n throw newRxError('SNH', { args: { writeRow } });\r\n }\r\n\r\n const event = {\r\n documentId: docId,\r\n documentData: eventDocumentData as RxDocumentData<RxDocType>,\r\n previousDocumentData: previousEventDocumentData,\r\n operation: operation\r\n };\r\n eventBulkEvents.push(event);\r\n }\r\n }\r\n\r\n return {\r\n bulkInsertDocs,\r\n bulkUpdateDocs,\r\n newestRow,\r\n errors,\r\n eventBulk,\r\n attachmentsAdd,\r\n attachmentsRemove,\r\n attachmentsUpdate\r\n };\r\n}\r\n\r\nexport function stripAttachmentsDataFromRow<RxDocType>(writeRow: BulkWriteRow<RxDocType>): BulkWriteRowProcessed<RxDocType> {\r\n return {\r\n previous: writeRow.previous,\r\n document: stripAttachmentsDataFromDocument(writeRow.document)\r\n };\r\n}\r\n\r\n/**\r\n * Used in custom RxStorage implementations.\r\n */\r\nexport function attachmentWriteDataToNormalData(writeData: RxAttachmentData | RxAttachmentWriteData): RxAttachmentData {\r\n const data = (writeData as RxAttachmentWriteData).data;\r\n if (!data) {\r\n return writeData as any;\r\n }\r\n const ret: RxAttachmentData = {\r\n length: data.size,\r\n digest: writeData.digest,\r\n type: writeData.type\r\n };\r\n return ret;\r\n}\r\n\r\nexport function stripAttachmentsDataFromDocument<RxDocType>(doc: RxDocumentWriteData<RxDocType>): RxDocumentData<RxDocType> {\r\n const atts = doc._attachments;\r\n if (!atts) {\r\n return doc;\r\n }\r\n\r\n // Use for..in loop to check for any keys without creating an array via Object.keys()\r\n let hasAnyAttachment = false;\r\n for (const key in atts) {\r\n if (Object.prototype.hasOwnProperty.call(atts, key)) {\r\n hasAnyAttachment = true;\r\n break;\r\n }\r\n }\r\n if (!hasAnyAttachment) {\r\n return doc;\r\n }\r\n\r\n const useDoc: RxDocumentData<RxDocType> = flatClone(doc) as any;\r\n const destAtts: Record<string, RxAttachmentData> = {};\r\n const attKeys = Object.keys(atts);\r\n for (let i = 0; i < attKeys.length; i++) {\r\n const attachmentId = attKeys[i];\r\n destAtts[attachmentId] = attachmentWriteDataToNormalData(atts[attachmentId]);\r\n }\r\n useDoc._attachments = destAtts;\r\n return useDoc;\r\n}\r\n\r\n/**\r\n * Flat clone the document data\r\n * and also the _meta field.\r\n * Used many times when we want to change the meta\r\n * during replication etc.\r\n */\r\nexport function flatCloneDocWithMeta<RxDocType>(\r\n doc: RxDocumentData<RxDocType>\r\n): RxDocumentData<RxDocType> {\r\n return {\r\n ...doc,\r\n _meta: { ...doc._meta }\r\n } as any;\r\n}\r\n\r\nexport type WrappedRxStorageInstance<RxDocumentType, Internals, InstanceCreationOptions> = RxStorageInstance<RxDocumentType, any, InstanceCreationOptions> & {\r\n originalStorageInstance: RxStorageInstance<RxDocumentType, Internals, InstanceCreationOptions>;\r\n};\r\n\r\n/**\r\n * Wraps the normal storageInstance of a RxCollection\r\n * to ensure that all access is properly using the hooks\r\n * and other data transformations and also ensure that database.lockedRun()\r\n * is used properly.\r\n */\r\nexport function getWrappedStorageInstance<\r\n RxDocType,\r\n Internals,\r\n InstanceCreationOptions,\r\n CheckpointType\r\n>(\r\n database: RxDatabase<{}, Internals, InstanceCreationOptions, any>,\r\n storageInstance: RxStorageInstance<RxDocType, Internals, InstanceCreationOptions, CheckpointType>,\r\n /**\r\n * The original RxJsonSchema\r\n * before it was mutated by hooks.\r\n */\r\n rxJsonSchema: RxJsonSchema<RxDocumentData<RxDocType>>\r\n): WrappedRxStorageInstance<RxDocType, Internals, InstanceCreationOptions> {\r\n overwritable.deepFreezeWhenDevMode(rxJsonSchema);\r\n\r\n const primaryPath = getPrimaryFieldOfPrimaryKey(storageInstance.schema.primaryKey);\r\n\r\n const ret: WrappedRxStorageInstance<RxDocType, Internals, InstanceCreationOptions> = {\r\n originalStorageInstance: storageInstance,\r\n schema: storageInstance.schema,\r\n internals: storageInstance.internals,\r\n collectionName: storageInstance.collectionName,\r\n databaseName: storageInstance.databaseName,\r\n options: storageInstance.options,\r\n async bulkWrite(\r\n rows: BulkWriteRow<RxDocType>[],\r\n context: string\r\n ) {\r\n const databaseToken = database.token;\r\n /**\r\n * Use the same timestamp for all docs of this rows-set.\r\n * This improves performance because calling Date.now() inside of the now() function\r\n * is too costly.\r\n */\r\n const time = now();\r\n /**\r\n * Pre-compute the first revision string for inserts (no previous document).\r\n * This avoids repeated string concatenation and getHeightOfRevision() calls\r\n * inside the hot loop.\r\n */\r\n const firstRevision = '1-' + databaseToken;\r\n /**\r\n * Share a single _meta object for all insert rows in this batch.\r\n * All inserts in the same bulkWrite share the same timestamp,\r\n * so we avoid creating a new { lwt: time } object per row.\r\n * This shared reference is safe because:\r\n * - All documents in one batch receive identical metadata values.\r\n * - When a document is later updated, flatCloneDocWithMeta() creates\r\n * a new _meta object, so the shared reference is never mutated.\r\n */\r\n const insertMeta = { lwt: time };\r\n\r\n /**\r\n * When the caller has already cloned the documents (registered\r\n * via MUTABLE_DOCUMENT_WRITE_CONTEXTS), we can mutate them\r\n * in place and reuse the input array, avoiding redundant\r\n * flatClone() and wrapper-object allocations on every insert row.\r\n */\r\n const isMutableContext = MUTABLE_DOCUMENT_WRITE_CONTEXTS.has(context);\r\n let toStorageWriteRows: BulkWriteRow<RxDocType>[];\r\n\r\n if (isMutableContext) {\r\n /**\r\n * Fast path: documents are already cloned by the caller.\r\n * Set _meta/_rev directly on the document and reuse the\r\n * input rows array without allocating wrapper objects.\r\n */\r\n for (let index = 0; index < rows.length; index++) {\r\n const document = rows[index].document;\r\n document._meta = insertMeta;\r\n document._rev = firstRevision;\r\n }\r\n toStorageWriteRows = rows;\r\n } else {\r\n toStorageWriteRows = new Array(rows.length);\r\n for (let index = 0; index < rows.length; index++) {\r\n const writeRow = rows[index];\r\n const previous = writeRow.previous;\r\n let document;\r\n if (previous) {\r\n document = flatCloneDocWithMeta(writeRow.document);\r\n document._meta.lwt = time;\r\n document._rev = createRevision(\r\n databaseToken,\r\n previous\r\n );\r\n } else {\r\n /**\r\n * Insert path: flatClone is required because the input document\r\n * may be a direct reference to another storage's internal data\r\n * (e.g., during migration, query results from the old storage are\r\n * passed directly as insert rows to the new storage).\r\n *\r\n * Use a shared insertMeta object instead of allocating { lwt: time }\r\n * per row, since all inserts in the same batch share the same timestamp.\r\n */\r\n document = flatClone(writeRow.document);\r\n document._meta = insertMeta;\r\n document._rev = firstRevision;\r\n }\r\n toStorageWriteRows[index] = {\r\n document,\r\n previous\r\n };\r\n }\r\n }\r\n\r\n if (HOOKS.preStorageWrite.length > 0) {\r\n runPluginHooks('preStorageWrite', {\r\n storageInstance: this.originalStorageInstance,\r\n rows: toStorageWriteRows\r\n });\r\n }\r\n\r\n const writeResult = await database.lockedRun(\r\n () => storageInstance.bulkWrite(\r\n toStorageWriteRows,\r\n context\r\n )\r\n );\r\n\r\n /**\r\n * The RxStorageInstance MUST NOT allow to insert already _deleted documents,\r\n * without sending the previous document version.\r\n * But for better developer experience, RxDB does allow to re-insert deleted documents.\r\n * We do this by automatically fixing the conflict errors for that case\r\n * by running another bulkWrite() and merging the results.\r\n * @link https://github.com/pubkey/rxdb/pull/3839\r\n */\r\n\r\n /**\r\n * Fast path: when there are no errors, skip the wrapper object creation\r\n * and error filtering to reduce allocations.\r\n */\r\n if (writeResult.error.length === 0) {\r\n BULK_WRITE_ROWS_BY_RESPONSE.set(writeResult, toStorageWriteRows);\r\n return writeResult;\r\n }\r\n\r\n const useWriteResult: typeof writeResult = {\r\n error: []\r\n };\r\n BULK_WRITE_ROWS_BY_RESPONSE.set(useWriteResult, toStorageWriteRows);\r\n\r\n // No need to check writeResult.error.length === 0 here because\r\n // the fast path above already returns early when there are no errors.\r\n const reInsertErrors: RxStorageWriteErrorConflict<RxDocType>[] = writeResult.error\r\n .filter((error) => {\r\n if (\r\n error.status === 409 &&\r\n !error.writeRow.previous &&\r\n !error.writeRow.document._deleted &&\r\n ensureNotFalsy(error.documentInDb)._deleted\r\n ) {\r\n return true;\r\n }\r\n\r\n // add the \"normal\" errors to the parent error array.\r\n useWriteResult.error.push(error);\r\n return false;\r\n }) as any;\r\n if (reInsertErrors.length > 0) {\r\n const reInsertIds = new Set<string>();\r\n const reInserts: BulkWriteRow<RxDocType>[] = reInsertErrors\r\n .map((error) => {\r\n reInsertIds.add(error.documentId);\r\n return {\r\n previous: error.documentInDb,\r\n document: Object.assign(\r\n {},\r\n error.writeRow.document,\r\n {\r\n _rev: createRevision(\r\n database.token,\r\n error.documentInDb\r\n )\r\n }\r\n )\r\n };\r\n });\r\n\r\n const subResult = await database.lockedRun(\r\n () => storageInstance.bulkWrite(\r\n reInserts,\r\n context\r\n )\r\n );\r\n\r\n\r\n useWriteResult.error = useWriteResult.error.concat(subResult.error);\r\n const successArray = getWrittenDocumentsFromBulkWriteResponse(\r\n primaryPath,\r\n toStorageWriteRows,\r\n useWriteResult,\r\n reInsertIds\r\n );\r\n const subSuccess = getWrittenDocumentsFromBulkWriteResponse(\r\n primaryPath,\r\n reInserts,\r\n subResult\r\n );\r\n successArray.push(...subSuccess);\r\n return useWriteResult;\r\n }\r\n\r\n return useWriteResult;\r\n },\r\n query(preparedQuery) {\r\n return database.lockedRun(\r\n () => storageInstance.query(preparedQuery)\r\n );\r\n },\r\n count(preparedQuery) {\r\n return database.lockedRun(\r\n () => storageInstance.count(preparedQuery)\r\n );\r\n },\r\n findDocumentsById(ids, deleted) {\r\n return database.lockedRun(\r\n () => storageInstance.findDocumentsById(ids, deleted)\r\n );\r\n },\r\n getAttachmentData(\r\n documentId: string,\r\n attachmentId: string,\r\n digest: string\r\n ) {\r\n return database.lockedRun(\r\n () => storageInstance.getAttachmentData(documentId, attachmentId, digest)\r\n );\r\n },\r\n getChangedDocumentsSince: !storageInstance.getChangedDocumentsSince ? undefined : (limit: number, checkpoint?: any) => {\r\n return database.lockedRun(\r\n () => ((storageInstance as any).getChangedDocumentsSince)(ensureNotFalsy(limit), checkpoint)\r\n );\r\n },\r\n cleanup(minDeletedTime: number) {\r\n return database.lockedRun(\r\n () => storageInstance.cleanup(minDeletedTime)\r\n );\r\n },\r\n remove() {\r\n database.storageInstances.delete(ret);\r\n return database.lockedRun(\r\n () => storageInstance.remove()\r\n );\r\n },\r\n close() {\r\n database.storageInstances.delete(ret);\r\n return database.lockedRun(\r\n () => storageInstance.close()\r\n );\r\n },\r\n changeStream() {\r\n return storageInstance.changeStream();\r\n }\r\n };\r\n\r\n database.storageInstances.add(ret);\r\n return ret;\r\n}\r\n\r\n/**\r\n * Each RxStorage implementation should\r\n * run this method at the first step of createStorageInstance()\r\n * to ensure that the configuration is correct.\r\n */\r\nexport function ensureRxStorageInstanceParamsAreCorrect(\r\n params: RxStorageInstanceCreationParams<any, any>\r\n) {\r\n if (params.schema.keyCompression) {\r\n throw newRxError('UT5', { args: { params } });\r\n }\r\n if (hasEncryption(params.schema)) {\r\n throw newRxError('UT6', { args: { params } });\r\n }\r\n if (\r\n params.schema.attachments &&\r\n params.schema.attachments.compression\r\n ) {\r\n throw newRxError('UT7', { args: { params } });\r\n }\r\n}\r\n\r\nexport function hasEncryption(jsonSchema: RxJsonSchema<any>): boolean {\r\n if (\r\n (!!jsonSchema.encrypted && jsonSchema.encrypted.length > 0) ||\r\n (jsonSchema.attachments && jsonSchema.attachments.encrypted)\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\nexport function getChangedDocumentsSinceQuery<RxDocType, CheckpointType>(\r\n storageInstance: RxStorageInstance<RxDocType, any, any, CheckpointType>,\r\n limit: number,\r\n checkpoint?: CheckpointType\r\n): FilledMangoQuery<RxDocType> {\r\n const primaryPath = getPrimaryFieldOfPrimaryKey(storageInstance.schema.primaryKey);\r\n const sinceLwt = checkpoint ? (checkpoint as unknown as RxStorageDefaultCheckpoint).lwt : RX_META_LWT_MINIMUM;\r\n const sinceId = checkpoint ? (checkpoint as unknown as RxStorageDefaultCheckpoint).id : '';\r\n return normalizeMangoQuery(storageInstance.schema, {\r\n selector: {\r\n $or: [\r\n {\r\n '_meta.lwt': {\r\n $gt: sinceLwt\r\n }\r\n },\r\n {\r\n '_meta.lwt': {\r\n $eq: sinceLwt\r\n },\r\n [primaryPath]: {\r\n $gt: checkpoint ? sinceId : ''\r\n }\r\n }\r\n ],\r\n // add this hint for better index usage\r\n '_meta.lwt': {\r\n $gte: sinceLwt\r\n }\r\n } as any,\r\n sort: [\r\n { '_meta.lwt': 'asc' },\r\n { [primaryPath]: 'asc' }\r\n ] as any,\r\n skip: 0,\r\n limit,\r\n /**\r\n * DO NOT SET A SPECIFIC INDEX HERE!\r\n * The query might be modified by some plugin\r\n * before sending it to the storage.\r\n * We can be sure that in the end the query planner\r\n * will find the best index.\r\n */\r\n // index: ['_meta.lwt', primaryPath]\r\n });\r\n}\r\n\r\nexport async function getChangedDocumentsSince<RxDocType, CheckpointType>(\r\n storageInstance: RxStorageInstance<RxDocType, any, any, CheckpointType>,\r\n limit: number,\r\n checkpoint?: CheckpointType\r\n): Promise<{\r\n documents: RxDocumentData<RxDocType>[];\r\n /**\r\n * The checkpoint contains data so that another\r\n * call to getChangedDocumentsSince() will continue\r\n * from exactly the last document that was returned before.\r\n */\r\n checkpoint: CheckpointType;\r\n}> {\r\n if (storageInstance.getChangedDocumentsSince) {\r\n return storageInstance.getChangedDocumentsSince(limit, checkpoint);\r\n }\r\n\r\n const primaryPath = getPrimaryFieldOfPrimaryKey(storageInstance.schema.primaryKey);\r\n const query = prepareQuery<RxDocumentData<any>>(\r\n storageInstance.schema,\r\n getChangedDocumentsSinceQuery(\r\n storageInstance,\r\n limit,\r\n checkpoint\r\n )\r\n );\r\n\r\n const result = await storageInstance.query(query);\r\n const documents = result.documents;\r\n const lastDoc = lastOfArray(documents);\r\n\r\n return {\r\n documents: documents,\r\n checkpoint: lastDoc ? {\r\n id: (lastDoc as any)[primaryPath],\r\n lwt: lastDoc._meta.lwt\r\n } as any : checkpoint ? checkpoint : {\r\n id: '',\r\n lwt: 0\r\n }\r\n };\r\n}\r\n\r\n\r\nconst BULK_WRITE_ROWS_BY_RESPONSE = new WeakMap<RxStorageBulkWriteResponse<any>, BulkWriteRow<any>[]>();\r\nconst BULK_WRITE_SUCCESS_MAP = new WeakMap<RxStorageBulkWriteResponse<any>, RxDocumentData<any>[]>();\r\n\r\n/**\r\n * For better performance, this is done only when accessed\r\n * because most of the time we do not need the results, only the errors.\r\n */\r\nexport function getWrittenDocumentsFromBulkWriteResponse<RxDocType>(\r\n primaryPath: string,\r\n writeRows: BulkWriteRow<RxDocType>[],\r\n response: RxStorageBulkWriteResponse<RxDocType>,\r\n reInsertIds?: Set<string>\r\n): RxDocumentData<RxDocType>[] {\r\n return getFromMapOrCreate(\r\n BULK_WRITE_SUCCESS_MAP,\r\n response,\r\n () => {\r\n const ret: RxDocumentData<RxDocType>[] = [];\r\n let realWriteRows = BULK_WRITE_ROWS_BY_RESPONSE.get(response);\r\n if (!realWriteRows) {\r\n realWriteRows = writeRows;\r\n }\r\n if (response.error.length > 0 || reInsertIds) {\r\n const errorIds = reInsertIds ? reInsertIds : new Set<string>();\r\n for (let index = 0; index < response.error.length; index++) {\r\n const error = response.error[index];\r\n errorIds.add(error.documentId);\r\n }\r\n\r\n for (let index = 0; index < realWriteRows.length; index++) {\r\n const doc = realWriteRows[index].document;\r\n if (!errorIds.has((doc as any)[primaryPath])) {\r\n ret.push(stripAttachmentsDataFromDocument(doc));\r\n }\r\n }\r\n } else {\r\n // pre-set array size for better performance\r\n ret.length = writeRows.length - response.error.length;\r\n for (let index = 0; index < realWriteRows.length; index++) {\r\n const doc = realWriteRows[index].document;\r\n ret[index] = stripAttachmentsDataFromDocument(doc);\r\n }\r\n }\r\n return ret;\r\n }\r\n );\r\n}\r\n\r\n\r\n/**\r\n * Wraps the storage and simluates\r\n * delays. Mostly used in tests.\r\n */\r\nexport function randomDelayStorage<Internals, InstanceCreationOptions>(\r\n input: {\r\n storage: RxStorage<Internals, InstanceCreationOptions>;\r\n delayTimeBefore: () => number;\r\n delayTimeAfter: () => number;\r\n }\r\n): RxStorage<Internals, InstanceCreationOptions> {\r\n /**\r\n * Ensure writes to a delay storage\r\n * are still correctly run in order.\r\n */\r\n let randomDelayStorageWriteQueue: Promise<any> = PROMISE_RESOLVE_TRUE;\r\n\r\n const retStorage: RxStorage<Internals, InstanceCreationOptions> = {\r\n name: 'random-delay-' + input.storage.name,\r\n rxdbVersion: RXDB_VERSION,\r\n async createStorageInstance(params) {\r\n await promiseWait(input.delayTimeBefore());\r\n const storageInstance = await input.storage.createStorageInstance(params);\r\n await promiseWait(input.delayTimeAfter());\r\n\r\n return {\r\n databaseName: storageInstance.databaseName,\r\n internals: storageInstance.internals,\r\n options: storageInstance.options,\r\n schema: storageInstance.schema,\r\n collectionName: storageInstance.collectionName,\r\n bulkWrite(a, b) {\r\n randomDelayStorageWriteQueue = randomDelayStorageWriteQueue.then(async () => {\r\n await promiseWait(input.delayTimeBefore());\r\n const response = await storageInstance.bulkWrite(a, b);\r\n await promiseWait(input.delayTimeAfter());\r\n return response;\r\n });\r\n const ret = randomDelayStorageWriteQueue;\r\n return ret;\r\n },\r\n async findDocumentsById(a, b) {\r\n await promiseWait(input.delayTimeBefore());\r\n const ret = await storageInstance.findDocumentsById(a, b);\r\n await promiseWait(input.delayTimeAfter());\r\n return ret;\r\n },\r\n async query(a) {\r\n await promiseWait(input.delayTimeBefore());\r\n const ret = await storageInstance.query(a);\r\n return ret;\r\n },\r\n async count(a) {\r\n await promiseWait(input.delayTimeBefore());\r\n const ret = await storageInstance.count(a);\r\n await promiseWait(input.delayTimeAfter());\r\n return ret;\r\n\r\n },\r\n async getAttachmentData(a, b, c) {\r\n await promiseWait(input.delayTimeBefore());\r\n const ret = await storageInstance.getAttachmentData(a, b, c);\r\n await promiseWait(input.delayTimeAfter());\r\n return ret;\r\n\r\n },\r\n getChangedDocumentsSince: !storageInstance.getChangedDocumentsSince ? undefined : async (a, b) => {\r\n await promiseWait(input.delayTimeBefore());\r\n const ret = await ensureNotFalsy(storageInstance.getChangedDocumentsSince)(a, b);\r\n await promiseWait(input.delayTimeAfter());\r\n return ret;\r\n\r\n },\r\n changeStream() {\r\n return storageInstance.changeStream();\r\n },\r\n async cleanup(a) {\r\n await promiseWait(input.delayTimeBefore());\r\n const ret = await storageInstance.cleanup(a);\r\n await promiseWait(input.delayTimeAfter());\r\n return ret;\r\n\r\n },\r\n async close() {\r\n await promiseWait(input.delayTimeBefore());\r\n const ret = await storageInstance.close();\r\n await promiseWait(input.delayTimeAfter());\r\n return ret;\r\n\r\n },\r\n async remove() {\r\n await promiseWait(input.delayTimeBefore());\r\n const ret = await storageInstance.remove();\r\n await promiseWait(input.delayTimeAfter());\r\n return ret;\r\n },\r\n };\r\n\r\n\r\n }\r\n };\r\n return retStorage;\r\n}\r\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"rx-error.d.js","names":[],"sources":["../../../src/types/rx-error.d.ts"],"sourcesContent":["import type { RxJsonSchema } from './rx-schema.d.ts';\r\nimport {\r\n RxSchema\r\n} from '../rx-schema.ts';\r\nimport type { RxPlugin } from './rx-plugin.d.ts';\r\nimport { ERROR_MESSAGES } from '../plugins/dev-mode/error-messages.ts';\r\nimport type { RxReplicationWriteToMasterRow } from './replication-protocol.d.ts';\r\nimport type { BulkWriteRow, RxDocumentData } from './rx-storage.d.ts';\r\n\r\ntype KeyOf<T extends object> = Extract<keyof T, string>;\r\nexport type RxErrorKey = KeyOf<typeof ERROR_MESSAGES>;\r\n\r\nexport type {\r\n RxError,\r\n RxTypeError\r\n} from '../rx-error.ts';\r\n\r\n/**\r\n * this lists all possible parameters\r\n */\r\nexport interface RxErrorParameters {\r\n readonly error?: PlainJsonError;\r\n readonly errors?: PlainJsonError[];\r\n readonly errorText?: string;\r\n readonly writeError?: RxStorageWriteError<any>;\r\n readonly schemaPath?: string;\r\n readonly objPath?: string;\r\n readonly rootPath?: string;\r\n readonly childpath?: string;\r\n readonly ids?: string[];\r\n readonly obj?: any;\r\n readonly document?: any;\r\n readonly schema?: Readonly<RxJsonSchema<any> | RxSchema>;\r\n readonly schemaObj?: any;\r\n readonly pluginKey?: string;\r\n readonly originalDoc?: Readonly<any>;\r\n readonly finalDoc?: Readonly<any>;\r\n readonly regex?: string;\r\n readonly fieldName?: string;\r\n readonly id?: string;\r\n readonly documentId?: string;\r\n readonly data?: any;\r\n readonly missingCollections?: string[];\r\n readonly primaryPath?: string;\r\n readonly primary?: string;\r\n readonly primaryKey?: string;\r\n readonly have?: any;\r\n readonly should?: any;\r\n readonly name?: string;\r\n readonly adapter?: any;\r\n readonly link?: string;\r\n readonly path?: string;\r\n readonly value?: any;\r\n readonly givenName?: string;\r\n readonly fromVersion?: number;\r\n readonly toVersion?: number;\r\n readonly version?: number;\r\n readonly args?: any;\r\n readonly opts?: any;\r\n readonly dataBefore?: any;\r\n readonly dataAfter?: any;\r\n readonly pull?: boolean;\r\n readonly push?: boolean;\r\n readonly url?: string;\r\n readonly key?: string;\r\n readonly queryObj?: any;\r\n readonly query?: any;\r\n readonly op?: string;\r\n readonly skip?: any;\r\n readonly limit?: any;\r\n readonly passwordHash?: string;\r\n readonly existingPasswordHash?: string;\r\n readonly password?: string | any;\r\n readonly minPassLength?: number;\r\n readonly own?: any;\r\n readonly source?: any;\r\n readonly method?: any;\r\n readonly field?: string;\r\n readonly ref?: string;\r\n readonly funName?: string;\r\n readonly functionName?: string;\r\n readonly schemaHash?: string;\r\n readonly previousSchema?: Readonly<RxJsonSchema<any>>;\r\n readonly previousSchemaHash?: string;\r\n readonly type?: string;\r\n readonly when?: string;\r\n readonly parallel?: boolean;\r\n readonly collection?: any;\r\n readonly database?: any;\r\n readonly storage?: string;\r\n readonly indexes?: Array<string | string[]> | Readonly<Array<string | string[]>>;\r\n readonly index?: string | string[] | readonly string[];\r\n readonly plugin?: RxPlugin | any;\r\n readonly plugins?: Set<RxPlugin | any>;\r\n\r\n // used in the replication plugin\r\n\r\n /**\r\n * The checkpoint of the response from the last successful\r\n * pull by the client.\r\n * Null if there was no pull operation before\r\n * so that there is no last pulled checkpoint.\r\n */\r\n readonly checkpoint?: any;\r\n /**\r\n * The documents that failed to be pushed.\r\n * Typed as 'any' because they might be modified by the push modifier.\r\n */\r\n readonly pushRows?: RxReplicationWriteToMasterRow<any>[];\r\n readonly direction?: 'pull' | 'push';\r\n\r\n // google-drive-replication\r\n readonly folderPath?: string;\r\n readonly folderName?: string;\r\n readonly file?: any;\r\n readonly parentId?: string;\r\n\r\n // fetch\r\n readonly body?: any;\r\n readonly status?: number;\r\n readonly statusText?: string;\r\n readonly headers?: Record<string, any>;\r\n readonly code?: string;\r\n}\r\n\r\n/**\r\n * Error-Items which are created by the jsonschema-validator\r\n */\r\nexport type RxValidationError = {\r\n readonly field: string;\r\n readonly message: string;\r\n};\r\n\r\n/**\r\n * Use to have a transferable error object\r\n * in plain json instead of a JavaScript Error instance.\r\n */\r\nexport type PlainJsonError = {\r\n name: string;\r\n message: string;\r\n rxdb?: true;\r\n code?: RxErrorKey;\r\n url?: string;\r\n extensions?: Record<string, any>;\r\n parameters?: RxErrorParameters;\r\n stack?: string;\r\n};\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Error that can happen per document when\r\n * RxStorage.bulkWrite() is called\r\n */\r\nexport type RxStorageWriteErrorBase<RxDocType> = {\r\n status: number\r\n | 409 // conflict\r\n | 422 // schema validation error\r\n | 510 // attachment data missing\r\n ;\r\n\r\n /**\r\n * set this property to make it easy\r\n * to detect if the object is a RxStorageBulkWriteError\r\n */\r\n isError: true;\r\n\r\n // primary key of the document\r\n documentId: string;\r\n\r\n // the original document data that should have been written.\r\n writeRow: BulkWriteRow<RxDocType>;\r\n\r\n /**\r\n * The context which was given to bulkWrite(),\r\n * used for debugging.\r\n */\r\n context: string;\r\n};\r\n\r\nexport type RxStorageWriteErrorConflict<RxDocType> = RxStorageWriteErrorBase<RxDocType> & {\r\n status: 409;\r\n /**\r\n * A conflict error state must contain the\r\n * document state in the database.\r\n * This ensures that we can continue resolving a conflict\r\n * without having to pull the document out of the db first.\r\n * Is not set if the error happens on an insert.\r\n */\r\n documentInDb: RxDocumentData<RxDocType>;\r\n};\r\n\r\nexport type RxStorageWriteErrorValidation<RxDocType> = RxStorageWriteErrorBase<RxDocType> & {\r\n status: 422;\r\n /**\r\n * Other properties that give\r\n * information about the error,\r\n * for example a schema validation error\r\n * might contain the exact error from the validator here.\r\n * Must be plain JSON!\r\n */\r\n validationErrors: RxValidationError[];\r\n /**\r\n * For easier debugging,\r\n * we directly put the schema into the error.\r\n */\r\n schema: RxJsonSchema<RxDocumentData<RxDocType>>;\r\n};\r\n\r\nexport type RxStorageWriteErrorAttachment<RxDocType> = RxStorageWriteErrorBase<RxDocType> & {\r\n status: 510;\r\n attachmentId: string;\r\n documentInDb?: RxDocumentData<RxDocType>;\r\n};\r\n\r\n\r\nexport type RxStorageWriteError<RxDocType> =\r\n RxStorageWriteErrorConflict<RxDocType> |\r\n RxStorageWriteErrorValidation<RxDocType> |\r\n RxStorageWriteErrorAttachment<RxDocType>;\r\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"rx-error.d.js","names":[],"sources":["../../../src/types/rx-error.d.ts"],"sourcesContent":["import type { RxJsonSchema } from './rx-schema.d.ts';\r\nimport {\r\n RxSchema\r\n} from '../rx-schema.ts';\r\nimport type { RxPlugin } from './rx-plugin.d.ts';\r\nimport { ERROR_MESSAGES } from '../plugins/dev-mode/error-messages.ts';\r\nimport type { RxReplicationWriteToMasterRow } from './replication-protocol.d.ts';\r\nimport type { BulkWriteRow, RxDocumentData } from './rx-storage.d.ts';\r\n\r\ntype KeyOf<T extends object> = Extract<keyof T, string>;\r\nexport type RxErrorKey = KeyOf<typeof ERROR_MESSAGES>;\r\n\r\nexport type {\r\n RxError,\r\n RxTypeError\r\n} from '../rx-error.ts';\r\n\r\n/**\r\n * this lists all possible parameters\r\n */\r\nexport interface RxErrorParameters {\r\n readonly error?: PlainJsonError;\r\n readonly errors?: PlainJsonError[];\r\n readonly errorText?: string;\r\n readonly writeError?: RxStorageWriteError<any>;\r\n readonly schemaPath?: string;\r\n readonly objPath?: string;\r\n readonly rootPath?: string;\r\n readonly childpath?: string;\r\n readonly ids?: string[];\r\n readonly duplicateIds?: string[];\r\n readonly obj?: any;\r\n readonly document?: any;\r\n readonly schema?: Readonly<RxJsonSchema<any> | RxSchema>;\r\n readonly schemaObj?: any;\r\n readonly pluginKey?: string;\r\n readonly originalDoc?: Readonly<any>;\r\n readonly finalDoc?: Readonly<any>;\r\n readonly regex?: string;\r\n readonly fieldName?: string;\r\n readonly id?: string;\r\n readonly documentId?: string;\r\n readonly data?: any;\r\n readonly missingCollections?: string[];\r\n readonly primaryPath?: string;\r\n readonly primary?: string;\r\n readonly primaryKey?: string;\r\n readonly have?: any;\r\n readonly should?: any;\r\n readonly name?: string;\r\n readonly adapter?: any;\r\n readonly link?: string;\r\n readonly path?: string;\r\n readonly value?: any;\r\n readonly givenName?: string;\r\n readonly fromVersion?: number;\r\n readonly toVersion?: number;\r\n readonly version?: number;\r\n readonly args?: any;\r\n readonly opts?: any;\r\n readonly dataBefore?: any;\r\n readonly dataAfter?: any;\r\n readonly pull?: boolean;\r\n readonly push?: boolean;\r\n readonly url?: string;\r\n readonly key?: string;\r\n readonly queryObj?: any;\r\n readonly query?: any;\r\n readonly op?: string;\r\n readonly skip?: any;\r\n readonly limit?: any;\r\n readonly passwordHash?: string;\r\n readonly existingPasswordHash?: string;\r\n readonly password?: string | any;\r\n readonly passwordType?: string;\r\n readonly passwordLength?: number;\r\n readonly minPassLength?: number;\r\n readonly own?: any;\r\n readonly source?: any;\r\n readonly method?: any;\r\n readonly field?: string;\r\n readonly ref?: string;\r\n readonly funName?: string;\r\n readonly functionName?: string;\r\n readonly schemaHash?: string;\r\n readonly previousSchema?: Readonly<RxJsonSchema<any>>;\r\n readonly previousSchemaHash?: string;\r\n readonly type?: string;\r\n readonly when?: string;\r\n readonly parallel?: boolean;\r\n readonly collection?: any;\r\n readonly database?: any;\r\n readonly storage?: string;\r\n readonly indexes?: Array<string | string[]> | Readonly<Array<string | string[]>>;\r\n readonly index?: string | string[] | readonly string[];\r\n readonly plugin?: RxPlugin | any;\r\n readonly plugins?: Set<RxPlugin | any>;\r\n\r\n // used in the replication plugin\r\n\r\n /**\r\n * The checkpoint of the response from the last successful\r\n * pull by the client.\r\n * Null if there was no pull operation before\r\n * so that there is no last pulled checkpoint.\r\n */\r\n readonly checkpoint?: any;\r\n /**\r\n * The documents that failed to be pushed.\r\n * Typed as 'any' because they might be modified by the push modifier.\r\n */\r\n readonly pushRows?: RxReplicationWriteToMasterRow<any>[];\r\n readonly direction?: 'pull' | 'push';\r\n\r\n // google-drive-replication\r\n readonly folderPath?: string;\r\n readonly folderName?: string;\r\n readonly file?: any;\r\n readonly parentId?: string;\r\n\r\n // fetch\r\n readonly body?: any;\r\n readonly status?: number;\r\n readonly statusText?: string;\r\n readonly headers?: Record<string, any>;\r\n readonly code?: string;\r\n}\r\n\r\n/**\r\n * Error-Items which are created by the jsonschema-validator\r\n */\r\nexport type RxValidationError = {\r\n readonly field: string;\r\n readonly message: string;\r\n};\r\n\r\n/**\r\n * Use to have a transferable error object\r\n * in plain json instead of a JavaScript Error instance.\r\n */\r\nexport type PlainJsonError = {\r\n name: string;\r\n message: string;\r\n rxdb?: true;\r\n code?: RxErrorKey;\r\n url?: string;\r\n extensions?: Record<string, any>;\r\n parameters?: RxErrorParameters;\r\n stack?: string;\r\n};\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Error that can happen per document when\r\n * RxStorage.bulkWrite() is called\r\n */\r\nexport type RxStorageWriteErrorBase<RxDocType> = {\r\n status: number\r\n | 409 // conflict\r\n | 422 // schema validation error\r\n | 510 // attachment data missing\r\n ;\r\n\r\n /**\r\n * set this property to make it easy\r\n * to detect if the object is a RxStorageBulkWriteError\r\n */\r\n isError: true;\r\n\r\n // primary key of the document\r\n documentId: string;\r\n\r\n // the original document data that should have been written.\r\n writeRow: BulkWriteRow<RxDocType>;\r\n\r\n /**\r\n * The context which was given to bulkWrite(),\r\n * used for debugging.\r\n */\r\n context: string;\r\n};\r\n\r\nexport type RxStorageWriteErrorConflict<RxDocType> = RxStorageWriteErrorBase<RxDocType> & {\r\n status: 409;\r\n /**\r\n * A conflict error state must contain the\r\n * document state in the database.\r\n * This ensures that we can continue resolving a conflict\r\n * without having to pull the document out of the db first.\r\n * Is not set if the error happens on an insert.\r\n */\r\n documentInDb: RxDocumentData<RxDocType>;\r\n};\r\n\r\nexport type RxStorageWriteErrorValidation<RxDocType> = RxStorageWriteErrorBase<RxDocType> & {\r\n status: 422;\r\n /**\r\n * Other properties that give\r\n * information about the error,\r\n * for example a schema validation error\r\n * might contain the exact error from the validator here.\r\n * Must be plain JSON!\r\n */\r\n validationErrors: RxValidationError[];\r\n /**\r\n * For easier debugging,\r\n * we directly put the schema into the error.\r\n */\r\n schema: RxJsonSchema<RxDocumentData<RxDocType>>;\r\n};\r\n\r\nexport type RxStorageWriteErrorAttachment<RxDocType> = RxStorageWriteErrorBase<RxDocType> & {\r\n status: 510;\r\n attachmentId: string;\r\n documentInDb?: RxDocumentData<RxDocType>;\r\n};\r\n\r\n\r\nexport type RxStorageWriteError<RxDocType> =\r\n RxStorageWriteErrorConflict<RxDocType> |\r\n RxStorageWriteErrorValidation<RxDocType> |\r\n RxStorageWriteErrorAttachment<RxDocType>;\r\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"rx-schema.d.js","names":[],"sources":["../../../src/types/rx-schema.d.ts"],"sourcesContent":["import { AsTyped } from 'as-typed';\r\nimport type { CRDTSchemaOptions } from './plugins/crdt.d.ts';\r\nimport type { StringKeys } from './util.d.ts';\r\n\r\n/**\r\n * @link https://github.com/types/lib-json-schema/blob/master/v4/index.d.ts\r\n */\r\nexport type JsonSchemaTypes = 'array' | 'boolean' | 'integer' | 'number' | 'null' | 'object' | 'string' | (string & {});\r\n\r\nexport type CompositePrimaryKey<RxDocType> = {\r\n /**\r\n * The top level field of the document that will be used\r\n * to store the composite key as string.\r\n */\r\n key: StringKeys<RxDocType>;\r\n\r\n /**\r\n * The fields of the composite key,\r\n * the fields must be required and final\r\n * and have the type number, int, or string.\r\n */\r\n fields: (StringKeys<RxDocType> | string)[] | readonly (StringKeys<RxDocType> | string)[];\r\n /**\r\n * The separator which is used to concat the\r\n * primary fields values.\r\n * Choose a character as separator that is known\r\n * to never appear inside of the primary fields values.\r\n * I recommend to use the pipe char '|'.\r\n */\r\n separator: string;\r\n};\r\n\r\nexport type PrimaryKey<RxDocType> = StringKeys<RxDocType> | CompositePrimaryKey<RxDocType>;\r\n\r\nexport type JsonSchema<RxDocType = any> = {\r\n allOf?: JsonSchema[] | readonly JsonSchema[];\r\n anyOf?: JsonSchema[] | readonly JsonSchema[];\r\n oneOf?: JsonSchema[] | readonly JsonSchema[];\r\n additionalItems?: boolean | JsonSchema;\r\n additionalProperties?: boolean | JsonSchema;\r\n type?: JsonSchemaTypes | JsonSchemaTypes[] | readonly JsonSchemaTypes[];\r\n description?: string;\r\n dependencies?: {\r\n [key: string]: JsonSchema | string[] | readonly string[];\r\n };\r\n exclusiveMinimum?: number;\r\n exclusiveMaximum?: number;\r\n items?: JsonSchema | JsonSchema[] | readonly JsonSchema[];\r\n multipleOf?: number;\r\n maxProperties?: number;\r\n maximum?: number;\r\n minimum?: number;\r\n maxLength?: number;\r\n minLength?: number;\r\n maxItems?: number;\r\n minItems?: number;\r\n minProperties?: number;\r\n pattern?: string;\r\n patternProperties?: {\r\n [key: string]: JsonSchema;\r\n };\r\n properties?: {\r\n [key in StringKeys<RxDocType>]: JsonSchema;\r\n };\r\n required?: string[] | readonly string[];\r\n uniqueItems?: boolean;\r\n enum?: any[] | readonly any[];\r\n not?: JsonSchema;\r\n definitions?: {\r\n [key: string]: JsonSchema;\r\n };\r\n format?: 'date-time' | 'email' | 'hostname' | 'ipv4' | 'ipv6' | 'uri' | string;\r\n example?: any;\r\n\r\n // RxDB-specific\r\n ref?: string;\r\n final?: boolean;\r\n};\r\n\r\nexport interface TopLevelProperty extends JsonSchema {\r\n default?: any;\r\n}\r\n\r\n/**\r\n * @link https://developer.mozilla.org/en-US/docs/Web/API/Compression_Streams_API\r\n */\r\nexport type CompressionMode = 'deflate' | 'gzip';\r\n\r\nexport type RxJsonSchema<\r\n /**\r\n * The doctype must be given, and '=any' cannot be used,\r\n * otherwise the keyof of primaryKey\r\n * would be optional when the type of the document is not known.\r\n */\r\n RxDocType\r\n> = {\r\n title?: string;\r\n description?: string;\r\n version: number;\r\n\r\n /**\r\n * The primary key of the documents.\r\n * Must be in the top level of the properties of the schema\r\n * and that property must have the type 'string'\r\n */\r\n primaryKey: PrimaryKey<RxDocType>;\r\n\r\n /**\r\n * TODO this looks like a typescript-bug\r\n * we have to allows all string because the 'object'-literal is not recognized\r\n * retry this in later typescript-versions\r\n */\r\n type: 'object' | string;\r\n\r\n properties: { [key in StringKeys<RxDocType>]: TopLevelProperty };\r\n\r\n /**\r\n * On the top level the required-array must be set\r\n * because we always have to set the primary key to required.\r\n */\r\n required?: StringKeys<RxDocType>[] | readonly StringKeys<RxDocType>[];\r\n\r\n /**\r\n * Indexes that will be used for the queries.\r\n * RxDB will internally prepend the _deleted field to the index\r\n * because queries do NOT return documents with _deleted=true.\r\n * @example ['firstName', ['lastName', 'yearOfBirth']]\r\n */\r\n indexes?: (string | string[])[] | (string | readonly string[])[] | readonly (string | string[])[] | readonly (string | readonly string[])[];\r\n\r\n /**\r\n * Internally used indexes that do not get _deleted prepended\r\n * by RxDB. Use these to speed up queries that are run manually on the storage\r\n * or to speed up requests when you use the RxDB server.\r\n * These could also be utilised when you build a plugin that\r\n * has to query documents without respecting the _deleted value.\r\n * @example [['firstName'], ['lastName', 'yearOfBirth']]\r\n */\r\n internalIndexes?: string[][] | readonly string[][];\r\n\r\n\r\n /**\r\n * Array of fields that should be encrypted.\r\n * @link https://rxdb.info/encryption.html\r\n * @example ['secret']\r\n */\r\n encrypted?: string[] | readonly string[];\r\n\r\n /**\r\n * Enables key compression for the collection to reduce storage size.\r\n * @link https://rxdb.info/key-compression.html\r\n * @example true\r\n */\r\n keyCompression?: boolean;\r\n\r\n /**\r\n * if not set, rxdb will set 'false' as default\r\n * Having additionalProperties: true is not allowed on the root level to ensure\r\n * that property names do not clash with properties of the RxDocument class\r\n * or ORM methods.\r\n */\r\n additionalProperties?: false;\r\n attachments?: {\r\n encrypted?: boolean;\r\n /**\r\n * @link https://developer.mozilla.org/en-US/docs/Web/API/Compression_Streams_API\r\n */\r\n compression?: CompressionMode;\r\n /**\r\n * Optional whitelist of MIME type patterns that should be compressed.\r\n * Supports '*' suffix for prefix matching (e.g., 'text/*').\r\n * If omitted, a built-in default list of compressible types is used.\r\n * Only relevant when 'compression' is set.\r\n */\r\n compressibleTypes?: string[];\r\n };\r\n /**\r\n * Options for the sharding plugin of rxdb-premium.\r\n * We set these on the schema because changing the shard amount or mode\r\n * will require a migration.\r\n * @link https://rxdb.info/rx-storage-sharding.html\r\n */\r\n sharding?: {\r\n /**\r\n * Amount of shards.\r\n * This value cannot be changed after you have stored data,\r\n * if you change it anyway, you will loose the existing data.\r\n */\r\n shards: number;\r\n /**\r\n * Either shard by collection or by database.\r\n * For most use cases (IndexedDB based storages), sharding by collection is the way to go\r\n * because it has a faster initial load time.\r\n */\r\n mode: 'database' | 'collection';\r\n };\r\n /**\r\n * Configuration for Conflict-free Replicated Data Types (CRDTs).\r\n * @link https://rxdb.info/crdt.html\r\n * @example { field: 'crdts' }\r\n */\r\n crdt?: CRDTSchemaOptions<RxDocType>;\r\n};\r\n\r\n/**\r\n * Used to aggregate the document type from the schema.\r\n * @link https://github.com/pubkey/rxdb/discussions/3467\r\n */\r\nexport type ExtractDocumentTypeFromTypedRxJsonSchema<TypedRxJsonSchema> = AsTyped<TypedRxJsonSchema>;\r\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"rx-schema.d.js","names":[],"sources":["../../../src/types/rx-schema.d.ts"],"sourcesContent":["import { AsTyped } from 'as-typed';\r\nimport type { CRDTSchemaOptions } from './plugins/crdt.d.ts';\r\nimport type { StringKeys } from './util.d.ts';\r\n\r\n/**\r\n * @link https://github.com/types/lib-json-schema/blob/master/v4/index.d.ts\r\n */\r\nexport type JsonSchemaTypes = 'array' | 'boolean' | 'integer' | 'number' | 'null' | 'object' | 'string' | (string & {});\r\n\r\nexport type CompositePrimaryKey<RxDocType> = {\r\n /**\r\n * The top level field of the document that will be used\r\n * to store the composite key as string.\r\n */\r\n key: StringKeys<RxDocType>;\r\n\r\n /**\r\n * The fields of the composite key,\r\n * the fields must be required and final\r\n * and have the type number, int, or string.\r\n */\r\n fields: (StringKeys<RxDocType> | string)[] | readonly (StringKeys<RxDocType> | string)[];\r\n /**\r\n * The separator which is used to concat the\r\n * primary fields values.\r\n * Choose a character as separator that is known\r\n * to never appear inside of the primary fields values.\r\n * I recommend to use the pipe char '|'.\r\n */\r\n separator: string;\r\n};\r\n\r\nexport type PrimaryKey<RxDocType> = StringKeys<RxDocType> | CompositePrimaryKey<RxDocType>;\r\n\r\nexport type JsonSchema<RxDocType = any> = {\r\n allOf?: JsonSchema[] | readonly JsonSchema[];\r\n anyOf?: JsonSchema[] | readonly JsonSchema[];\r\n oneOf?: JsonSchema[] | readonly JsonSchema[];\r\n additionalItems?: boolean | JsonSchema;\r\n additionalProperties?: boolean | JsonSchema;\r\n type?: JsonSchemaTypes | JsonSchemaTypes[] | readonly JsonSchemaTypes[];\r\n description?: string;\r\n dependencies?: {\r\n [key: string]: JsonSchema | string[] | readonly string[];\r\n };\r\n exclusiveMinimum?: number;\r\n exclusiveMaximum?: number;\r\n items?: JsonSchema | JsonSchema[] | readonly JsonSchema[];\r\n multipleOf?: number;\r\n maxProperties?: number;\r\n maximum?: number;\r\n minimum?: number;\r\n /**\r\n * Having a large maxLength for indexed fields and primary keys can negatively\r\n * impact performance on many storages. Therefore, you should only set it\r\n * as big as needed.\r\n */\r\n maxLength?: number;\r\n minLength?: number;\r\n maxItems?: number;\r\n minItems?: number;\r\n minProperties?: number;\r\n pattern?: string;\r\n patternProperties?: {\r\n [key: string]: JsonSchema;\r\n };\r\n properties?: {\r\n [key in StringKeys<RxDocType>]: JsonSchema;\r\n };\r\n required?: string[] | readonly string[];\r\n uniqueItems?: boolean;\r\n enum?: any[] | readonly any[];\r\n not?: JsonSchema;\r\n definitions?: {\r\n [key: string]: JsonSchema;\r\n };\r\n format?: 'date-time' | 'email' | 'hostname' | 'ipv4' | 'ipv6' | 'uri' | string;\r\n example?: any;\r\n\r\n // RxDB-specific\r\n ref?: string;\r\n final?: boolean;\r\n};\r\n\r\nexport interface TopLevelProperty extends JsonSchema {\r\n default?: any;\r\n}\r\n\r\n/**\r\n * @link https://developer.mozilla.org/en-US/docs/Web/API/Compression_Streams_API\r\n */\r\nexport type CompressionMode = 'deflate' | 'gzip';\r\n\r\nexport type RxJsonSchema<\r\n /**\r\n * The doctype must be given, and '=any' cannot be used,\r\n * otherwise the keyof of primaryKey\r\n * would be optional when the type of the document is not known.\r\n */\r\n RxDocType\r\n> = {\r\n title?: string;\r\n description?: string;\r\n version: number;\r\n\r\n /**\r\n * The primary key of the documents.\r\n * Must be in the top level of the properties of the schema\r\n * and that property must have the type 'string'\r\n */\r\n primaryKey: PrimaryKey<RxDocType>;\r\n\r\n /**\r\n * TODO this looks like a typescript-bug\r\n * we have to allows all string because the 'object'-literal is not recognized\r\n * retry this in later typescript-versions\r\n */\r\n type: 'object' | string;\r\n\r\n properties: { [key in StringKeys<RxDocType>]: TopLevelProperty };\r\n\r\n /**\r\n * On the top level the required-array must be set\r\n * because we always have to set the primary key to required.\r\n */\r\n required?: StringKeys<RxDocType>[] | readonly StringKeys<RxDocType>[];\r\n\r\n /**\r\n * Indexes that will be used for the queries.\r\n * RxDB will internally prepend the _deleted field to the index\r\n * because queries do NOT return documents with _deleted=true.\r\n * @example ['firstName', ['lastName', 'yearOfBirth']]\r\n */\r\n indexes?: (string | string[])[] | (string | readonly string[])[] | readonly (string | string[])[] | readonly (string | readonly string[])[];\r\n\r\n /**\r\n * Internally used indexes that do not get _deleted prepended\r\n * by RxDB. Use these to speed up queries that are run manually on the storage\r\n * or to speed up requests when you use the RxDB server.\r\n * These could also be utilised when you build a plugin that\r\n * has to query documents without respecting the _deleted value.\r\n * @example [['firstName'], ['lastName', 'yearOfBirth']]\r\n */\r\n internalIndexes?: string[][] | readonly string[][];\r\n\r\n\r\n /**\r\n * Array of fields that should be encrypted.\r\n * @link https://rxdb.info/encryption.html\r\n * @example ['secret']\r\n */\r\n encrypted?: string[] | readonly string[];\r\n\r\n /**\r\n * Enables key compression for the collection to reduce storage size.\r\n * @link https://rxdb.info/key-compression.html\r\n * @example true\r\n */\r\n keyCompression?: boolean;\r\n\r\n /**\r\n * if not set, rxdb will set 'false' as default\r\n * Having additionalProperties: true is not allowed on the root level to ensure\r\n * that property names do not clash with properties of the RxDocument class\r\n * or ORM methods.\r\n */\r\n additionalProperties?: false;\r\n attachments?: {\r\n encrypted?: boolean;\r\n /**\r\n * @link https://developer.mozilla.org/en-US/docs/Web/API/Compression_Streams_API\r\n */\r\n compression?: CompressionMode;\r\n /**\r\n * Optional whitelist of MIME type patterns that should be compressed.\r\n * Supports '*' suffix for prefix matching (e.g., 'text/*').\r\n * If omitted, a built-in default list of compressible types is used.\r\n * Only relevant when 'compression' is set.\r\n */\r\n compressibleTypes?: string[];\r\n };\r\n /**\r\n * Options for the sharding plugin of rxdb-premium.\r\n * We set these on the schema because changing the shard amount or mode\r\n * will require a migration.\r\n * @link https://rxdb.info/rx-storage-sharding.html\r\n */\r\n sharding?: {\r\n /**\r\n * Amount of shards.\r\n * This value cannot be changed after you have stored data,\r\n * if you change it anyway, you will loose the existing data.\r\n */\r\n shards: number;\r\n /**\r\n * Either shard by collection or by database.\r\n * For most use cases (IndexedDB based storages), sharding by collection is the way to go\r\n * because it has a faster initial load time.\r\n */\r\n mode: 'database' | 'collection';\r\n };\r\n /**\r\n * Configuration for Conflict-free Replicated Data Types (CRDTs).\r\n * @link https://rxdb.info/crdt.html\r\n * @example { field: 'crdts' }\r\n */\r\n crdt?: CRDTSchemaOptions<RxDocType>;\r\n};\r\n\r\n/**\r\n * Used to aggregate the document type from the schema.\r\n * @link https://github.com/pubkey/rxdb/discussions/3467\r\n */\r\nexport type ExtractDocumentTypeFromTypedRxJsonSchema<TypedRxJsonSchema> = AsTyped<TypedRxJsonSchema>;\r\n"],"mappings":"","ignoreList":[]}
@@ -43,6 +43,11 @@ declare type ParsedLengths = {
43
43
  nonDecimals: number;
44
44
  decimals: number;
45
45
  roundedMinimum: number;
46
+ /**
47
+ * Pre-computed Math.pow(10, decimals) to avoid
48
+ * recomputing on every getNumberIndexString call.
49
+ */
50
+ multiplier: number;
46
51
  };
47
52
  export declare function getStringLengthOfIndexNumber(schemaPart: JsonSchema): ParsedLengths;
48
53
  export declare function getIndexStringLength<RxDocType>(schema: RxJsonSchema<RxDocumentData<RxDocType>>, index: string[]): number;
@@ -38,7 +38,7 @@ declare type CacheItem<RxDocType, OrmMethods> = [
38
38
  */
39
39
  declare type FinalizationRegistryValue = {
40
40
  docId: string;
41
- revisionHeight: number;
41
+ rev: string;
42
42
  lwt: number;
43
43
  };
44
44
  /**
@@ -646,6 +646,12 @@ export declare const ERROR_MESSAGES: {
646
646
  fix: string;
647
647
  docs: string;
648
648
  };
649
+ EN5: {
650
+ message: string;
651
+ cause: string;
652
+ fix: string;
653
+ docs: string;
654
+ };
649
655
  JD1: {
650
656
  message: string;
651
657
  cause: string;
@@ -1084,6 +1090,12 @@ export declare const ERROR_MESSAGES: {
1084
1090
  fix: string;
1085
1091
  docs: string;
1086
1092
  };
1093
+ CRDT4: {
1094
+ message: string;
1095
+ cause: string;
1096
+ fix: string;
1097
+ docs: string;
1098
+ };
1087
1099
  DXE1: {
1088
1100
  message: string;
1089
1101
  cause: string;
@@ -1174,6 +1186,12 @@ export declare const ERROR_MESSAGES: {
1174
1186
  fix: string;
1175
1187
  docs: string;
1176
1188
  };
1189
+ GDR20: {
1190
+ message: string;
1191
+ cause: string;
1192
+ fix: string;
1193
+ docs: string;
1194
+ };
1177
1195
  ODR1: {
1178
1196
  message: string;
1179
1197
  cause: string;
@@ -1216,6 +1234,24 @@ export declare const ERROR_MESSAGES: {
1216
1234
  fix: string;
1217
1235
  docs: string;
1218
1236
  };
1237
+ CI1: {
1238
+ message: string;
1239
+ cause: string;
1240
+ fix: string;
1241
+ docs: string;
1242
+ };
1243
+ CI2: {
1244
+ message: string;
1245
+ cause: string;
1246
+ fix: string;
1247
+ docs: string;
1248
+ };
1249
+ COB1: {
1250
+ message: string;
1251
+ cause: string;
1252
+ fix: string;
1253
+ docs: string;
1254
+ };
1219
1255
  /**
1220
1256
  * Should never be thrown, use this for
1221
1257
  * null checks etc. so you do not have to increase the
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import { LeaderElector, BroadcastChannel } from 'broadcast-channel';
5
5
  import type { RxDatabase, RxPlugin } from '../../types/index.d.ts';
6
+ export declare const OPEN_LEADER_ELECTORS: Set<LeaderElector>;
6
7
  /**
7
8
  * Returns the leader elector of a broadcast channel.
8
9
  * Used to ensure we reuse the same elector for the channel each time.
@@ -4,7 +4,10 @@ import { DriveStructure } from './init.ts';
4
4
  export declare function getDocumentFiles(googleDriveOptions: GoogleDriveOptionsWithDefaults, init: DriveStructure, docIds: string[]): Promise<DriveFileListResponse>;
5
5
  export declare function batchGetFilesMetadata(googleDriveOptions: GoogleDriveOptionsWithDefaults, fileIds: string[]): Promise<string>;
6
6
  export declare function insertDocumentFiles<RxDocType>(googleDriveOptions: GoogleDriveOptionsWithDefaults, init: DriveStructure, primaryPath: keyof RxDocType, docs: RxDocType[]): Promise<void>;
7
- export declare function updateDocumentFiles<DocType>(googleDriveOptions: GoogleDriveOptionsWithDefaults, primaryPath: keyof DocType, docs: DocType[], fileIdByDocId: Record<string, string>, concurrency?: number): Promise<Record<string, {
7
+ export declare function updateDocumentFiles<DocType>(googleDriveOptions: GoogleDriveOptionsWithDefaults, primaryPath: keyof DocType, docs: DocType[], fileMetaByDocId: Record<string, {
8
+ fileId: string;
9
+ etag: string;
10
+ }>, concurrency?: number): Promise<Record<string, {
8
11
  id: string;
9
12
  }>>;
10
13
  export declare function fetchDocumentContents<DocType>(googleDriveOptions: GoogleDriveOptionsWithDefaults, fileIds: string[], concurrency?: number): Promise<{
@@ -20,6 +20,7 @@ export interface DriveFileMetadata {
20
20
  modifiedTime?: string;
21
21
  size?: string;
22
22
  fileSize?: string;
23
+ etag?: string;
23
24
  }
24
25
  export type GoogleDriveOptions = {
25
26
  oauthClientId: string;
@@ -43,4 +43,4 @@ export declare class RxStateBase<T, Reactivity = unknown> {
43
43
  _cleanup(): Promise<void>;
44
44
  }
45
45
  export declare function createRxState<T>(database: RxDatabase, prefix: string): Promise<RxStateBase<T>>;
46
- export declare function mergeOperationsIntoState<T>(state: T, operations: RxStateOperation[]): void;
46
+ export declare function mergeOperationsIntoState<T>(state: T, operations: RxStateOperation[]): T;
@@ -4,7 +4,7 @@ import { RxStorageInstanceDenoKV } from "./rx-storage-instance-denokv.ts";
4
4
  export declare class RxStorageDenoKV implements RxStorage<DenoKVStorageInternals<any>, DenoKVSettings> {
5
5
  settings: DenoKVSettings;
6
6
  name: string;
7
- readonly rxdbVersion = "17.0.0-beta.17";
7
+ readonly rxdbVersion = "17.1.0";
8
8
  constructor(settings: DenoKVSettings);
9
9
  createStorageInstance<RxDocType>(params: RxStorageInstanceCreationParams<RxDocType, DenoKVSettings>): Promise<RxStorageInstanceDenoKV<RxDocType>>;
10
10
  }
@@ -4,7 +4,7 @@ import { RxStorageInstanceDexie } from './rx-storage-instance-dexie.ts';
4
4
  export declare class RxStorageDexie implements RxStorage<DexieStorageInternals, DexieSettings> {
5
5
  settings: DexieSettings;
6
6
  name: string;
7
- readonly rxdbVersion = "17.0.0-beta.17";
7
+ readonly rxdbVersion = "17.1.0";
8
8
  constructor(settings: DexieSettings);
9
9
  createStorageInstance<RxDocType>(params: RxStorageInstanceCreationParams<RxDocType, DexieSettings>): Promise<RxStorageInstanceDexie<RxDocType>>;
10
10
  }
@@ -4,7 +4,7 @@ export * from './localstorage-mock.ts';
4
4
  export declare class RxStorageLocalstorage implements RxStorage<LocalstorageStorageInternals, LocalstorageInstanceCreationOptions> {
5
5
  settings: LocalstorageStorageSettings;
6
6
  name: string;
7
- readonly rxdbVersion = "17.0.0-beta.17";
7
+ readonly rxdbVersion = "17.1.0";
8
8
  constructor(settings: LocalstorageStorageSettings);
9
9
  createStorageInstance<RxDocType>(params: RxStorageInstanceCreationParams<RxDocType, LocalstorageInstanceCreationOptions>): Promise<RxStorageInstanceLocalstorage<RxDocType>>;
10
10
  }