@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-collection.js","names":["filter","map","mergeMap","ucfirst","flatClone","promiseSeries","pluginMissing","ensureNotFalsy","getFromMapOrThrow","PROMISE_RESOLVE_FALSE","PROMISE_RESOLVE_VOID","NON_PREMIUM_COLLECTION_LIMIT","hasPremiumFlag","fillObjectDataBeforeInsert","normalizeInlineAttachments","createRxCollectionStorageInstance","removeCollectionStorages","ensureRxCollectionIsNotClosed","createRxQuery","_getDefaultQuery","newRxError","newRxTypeError","DocumentCache","mapDocumentsDataToCacheDocs","createQueryCache","defaultCacheReplacementPolicy","createChangeEventBuffer","runAsyncPluginHooks","runPluginHooks","createNewRxDocument","getRxDocumentConstructor","getWrappedStorageInstance","getWrittenDocumentsFromBulkWriteResponse","throwIfIsStorageWriteError","IncrementalWriteQueue","beforeDocumentUpdateWrite","overwritable","defaultConflictHandler","rxChangeEventBulkToRxChangeEvents","HOOKS_WHEN","HOOKS_KEYS","hooksApplied","OPEN_COLLECTIONS","Set","RxCollectionBase","database","name","schema","internalStorageInstance","instanceCreationOptions","migrationStrategies","methods","attachments","options","cacheReplacementPolicy","statics","conflictHandler","storageInstance","timeouts","incrementalWriteQueue","awaitBeforeReads","_incrementalUpsertQueues","Map","synced","hooks","_subs","_docCache","_queryCache","$","checkpoint$","_changeEventBuffer","eventBulks$","onClose","closed","onRemove","_applyHookFunctions","asRxCollection","pipe","changeEventBulk","collectionName","_proto","prototype","prepare","count","size","promiseWait","collection","args","existing","Array","from","values","c","db","add","jsonSchema","primaryPath","newData","oldData","result","_runHooks","checkpoint","documentConstructor","bulk","isLocal","events","docData","listenToRemoveSub","internalStore","changeStream","key","version","found","find","event","documentData","context","operation","subscribe","close","Promise","all","fn","push","databaseStorageToken","storageToken","subDocs","eventBulk","id","internal","databaseToken","token","$emit","cleanup","_minimumDeletedTime","migrationNeeded","getMigrationState","startMigration","batchSize","migratePromise","insert","json","writeResult","bulkInsert","isError","error","insertResult","success","insertIfNotExists","length","status","conflictDocData","documentInDb","docsData","_this","ids","insertRows","hasHooks","useDocData","then","document","index","documents","normalizePromises","_loop","doc","row","atts","_attachments","Object","keys","hashFunction","normalized","results","bulkWrite","rxDocuments","ret","docsMap","forEach","set","get","primary","bulkRemove","idsOrDocs","rxDocumentMap","findByIds","exec","d","rxDocument","data","toMutableJSON","removeDocs","writeDoc","_deleted","previous","deletedRxDocuments","successIds","getCachedRxDocument","bulkUpsert","_this2","insertData","useJsonByDocId","preparedDocs","useJson","_loop2","_useJson","slice","err","documentId","writeData","docDataInDb","newAttachments","deleteExisting","deleteExistingAttachments","newDoc","addWrite","docWriteData","assign","upsert","bulkResult","incrementalUpsert","hasAttachments","queue","normalizedAttachments","_incrementalUpsertEnsureRxDocumentExists","wasInserted","inserted","_data","queryObj","op","query","findOne","selector","limit","mangoQuery","$in","exportJSON","importJSON","_exportedJSON","registerWebMCP","_options","insertCRDT","_updateObj","addPipeline","addHook","when","fun","parallel","includes","boundFun","bind","runName","series","getHooks","instance","tasks","hook","_runHooksSync","time","res","timeout","setTimeout","delete","clearTimeout","requestIdlePromise","sub","unsubscribe","collections","collectionsSubject$","next","type","remove","storage","multiInstance","password","_createClass","cE","colProto","getPrototypeOf","fnName","rxCollection","docDataFromCache","getLatestDocumentDataIfExists","resolve","getCachedRxDocuments","createRxCollection","autoMigrate","localDocuments","storageInstanceCreationParams","databaseInstanceToken","databaseName","devMode","isDevMode","entries","funName","defineProperty","creator","isRxCollection","obj"],"sources":["../../src/rx-collection.ts"],"sourcesContent":["import {\r\n filter,\r\n map,\r\n mergeMap\r\n} from 'rxjs';\r\n\r\nimport {\r\n ucfirst,\r\n flatClone,\r\n promiseSeries,\r\n pluginMissing,\r\n ensureNotFalsy,\r\n getFromMapOrThrow,\r\n PROMISE_RESOLVE_FALSE,\r\n PROMISE_RESOLVE_VOID,\r\n NON_PREMIUM_COLLECTION_LIMIT,\r\n hasPremiumFlag\r\n} from './plugins/utils/index.ts';\r\nimport {\r\n fillObjectDataBeforeInsert,\r\n normalizeInlineAttachments,\r\n createRxCollectionStorageInstance,\r\n removeCollectionStorages,\r\n ensureRxCollectionIsNotClosed\r\n} from './rx-collection-helper.ts';\r\nimport {\r\n createRxQuery,\r\n _getDefaultQuery\r\n} from './rx-query.ts';\r\nimport {\r\n newRxError,\r\n newRxTypeError\r\n} from './rx-error.ts';\r\nimport type {\r\n RxMigrationState\r\n} from './plugins/migration-schema/index.ts';\r\nimport {\r\n DocumentCache,\r\n mapDocumentsDataToCacheDocs\r\n} from './doc-cache.ts';\r\nimport {\r\n QueryCache,\r\n createQueryCache,\r\n defaultCacheReplacementPolicy\r\n} from './query-cache.ts';\r\nimport {\r\n ChangeEventBuffer,\r\n createChangeEventBuffer\r\n} from './change-event-buffer.ts';\r\nimport {\r\n runAsyncPluginHooks,\r\n runPluginHooks\r\n} from './hooks.ts';\r\n\r\nimport {\r\n Subscription,\r\n Observable,\r\n Subject\r\n} from 'rxjs';\r\n\r\nimport type {\r\n KeyFunctionMap,\r\n RxCollection,\r\n RxDatabase,\r\n RxQuery,\r\n RxDocument,\r\n RxDumpCollection,\r\n RxDumpCollectionAny,\r\n MangoQuery,\r\n MangoQueryNoLimit,\r\n RxCacheReplacementPolicy,\r\n RxStorageWriteError,\r\n RxDocumentData,\r\n RxStorageInstanceCreationParams,\r\n BulkWriteRow,\r\n RxChangeEvent,\r\n RxChangeEventInsert,\r\n RxChangeEventUpdate,\r\n RxChangeEventDelete,\r\n RxStorageInstance,\r\n CollectionsOfDatabase,\r\n RxChangeEventBulk,\r\n RxLocalDocumentData,\r\n RxConflictHandler,\r\n MaybePromise,\r\n CRDTEntry,\r\n MangoQuerySelectorAndIndex,\r\n MigrationStrategies,\r\n WebMCPOptions,\r\n WebMCPLogEvent\r\n} from './types/index.d.ts';\r\n\r\nimport {\r\n RxSchema\r\n} from './rx-schema.ts';\r\n\r\nimport {\r\n createNewRxDocument,\r\n getRxDocumentConstructor\r\n} from './rx-document-prototype-merge.ts';\r\nimport {\r\n getWrappedStorageInstance,\r\n getWrittenDocumentsFromBulkWriteResponse,\r\n throwIfIsStorageWriteError,\r\n WrappedRxStorageInstance\r\n} from './rx-storage-helper.ts';\r\nimport { IncrementalWriteQueue } from './incremental-write.ts';\r\nimport { beforeDocumentUpdateWrite } from './rx-document.ts';\r\nimport { overwritable } from './overwritable.ts';\r\nimport type { RxPipeline, RxPipelineOptions } from './plugins/pipeline/index.ts';\r\nimport { defaultConflictHandler } from './replication-protocol/default-conflict-handler.ts';\r\nimport { rxChangeEventBulkToRxChangeEvents } from './rx-change-event.ts';\r\n\r\nconst HOOKS_WHEN = ['pre', 'post'] as const;\r\ntype HookWhenType = typeof HOOKS_WHEN[number];\r\nconst HOOKS_KEYS = ['insert', 'save', 'remove', 'create'] as const;\r\ntype HookKeyType = typeof HOOKS_KEYS[number];\r\n\r\nexport interface UpsertOptions {\r\n /**\r\n * When true, existing attachments not present in the upsert data\r\n * will be removed. Defaults to false (preserve existing attachments).\r\n */\r\n deleteExistingAttachments?: boolean;\r\n}\r\nlet hooksApplied = false;\r\n\r\nexport const OPEN_COLLECTIONS = new Set<RxCollectionBase<any, any, any>>();\r\n\r\nexport class RxCollectionBase<\r\n InstanceCreationOptions,\r\n RxDocumentType = { [prop: string]: any; },\r\n OrmMethods = {},\r\n StaticMethods = { [key: string]: any; },\r\n Reactivity = any\r\n> {\r\n\r\n\r\n /**\r\n * Stores all 'normal' documents\r\n */\r\n public storageInstance: WrappedRxStorageInstance<RxDocumentType, any, InstanceCreationOptions> = {} as any;\r\n public readonly timeouts: Set<ReturnType<typeof setTimeout>> = new Set();\r\n public incrementalWriteQueue: IncrementalWriteQueue<RxDocumentType> = {} as any;\r\n\r\n\r\n /**\r\n * Before reads, all these methods are awaited. Used to \"block\" reads\r\n * depending on other processes, like when the RxPipeline is running.\r\n */\r\n public readonly awaitBeforeReads = new Set<() => MaybePromise<any>>();\r\n\r\n constructor(\r\n public readonly database: RxDatabase<CollectionsOfDatabase, any, InstanceCreationOptions, Reactivity>,\r\n public name: string,\r\n public schema: RxSchema<RxDocumentType>,\r\n public internalStorageInstance: RxStorageInstance<RxDocumentType, any, InstanceCreationOptions>,\r\n public instanceCreationOptions: InstanceCreationOptions = {} as any,\r\n public migrationStrategies: MigrationStrategies = {},\r\n public methods: KeyFunctionMap = {},\r\n public attachments: KeyFunctionMap = {},\r\n public options: any = {},\r\n public cacheReplacementPolicy: RxCacheReplacementPolicy = defaultCacheReplacementPolicy,\r\n public statics: KeyFunctionMap = {},\r\n public conflictHandler: RxConflictHandler<RxDocumentType> = defaultConflictHandler\r\n ) {\r\n _applyHookFunctions(this.asRxCollection);\r\n\r\n\r\n if (database) { // might be falsy on pseudoInstance\r\n this.eventBulks$ = database.eventBulks$.pipe(\r\n filter((changeEventBulk: RxChangeEventBulk<any>) => changeEventBulk.collectionName === this.name)\r\n );\r\n } else { }\r\n }\r\n\r\n get insert$(): Observable<RxChangeEventInsert<RxDocumentType>> {\r\n return this.$.pipe(\r\n filter((cE: RxChangeEvent<RxDocumentType>) => cE.operation === 'INSERT')\r\n ) as any;\r\n }\r\n get update$(): Observable<RxChangeEventUpdate<RxDocumentType>> {\r\n return this.$.pipe(\r\n filter((cE: RxChangeEvent<RxDocumentType>) => cE.operation === 'UPDATE')\r\n ) as any;\r\n }\r\n get remove$(): Observable<RxChangeEventDelete<RxDocumentType>> {\r\n return this.$.pipe(\r\n filter((cE: RxChangeEvent<RxDocumentType>) => cE.operation === 'DELETE')\r\n ) as any;\r\n }\r\n\r\n public _incrementalUpsertQueues: Map<string, Promise<any>> = new Map();\r\n // defaults\r\n public synced: boolean = false;\r\n public hooks: {\r\n [key in HookKeyType]: {\r\n [when in HookWhenType]: {\r\n series: Function[];\r\n parallel: Function[];\r\n };\r\n }\r\n } = {} as any;\r\n public _subs: Subscription[] = [];\r\n\r\n public _docCache: DocumentCache<RxDocumentType, OrmMethods> = {} as any;\r\n\r\n public _queryCache: QueryCache = createQueryCache();\r\n public $: Observable<RxChangeEvent<RxDocumentType>> = {} as any;\r\n public checkpoint$: Observable<any> = {} as any;\r\n public _changeEventBuffer: ChangeEventBuffer<RxDocumentType> = {} as ChangeEventBuffer<RxDocumentType>;\r\n\r\n /**\r\n * Internally only use eventBulks$\r\n * Do not use .$ or .observable$ because that has to transform\r\n * the events which decreases performance.\r\n */\r\n public readonly eventBulks$: Observable<RxChangeEventBulk<any>> = {} as any;\r\n\r\n\r\n /**\r\n * When the collection is closed,\r\n * these functions will be called an awaited.\r\n * Used to automatically clean up stuff that\r\n * belongs to this collection.\r\n */\r\n public onClose: (() => MaybePromise<any>)[] = [];\r\n public closed = false;\r\n\r\n public onRemove: (() => MaybePromise<any>)[] = [];\r\n\r\n public async prepare(): Promise<void> {\r\n\r\n if (!(await hasPremiumFlag())) {\r\n\r\n /**\r\n * When used in a test suite, we often open and close many databases with collections\r\n * while not awaiting the database.close() call to improve the test times.\r\n * So when reopening collections and the OPEN_COLLECTIONS size is full,\r\n * we retry after some times to account for this.\r\n */\r\n let count = 0;\r\n while (count < 25 && OPEN_COLLECTIONS.size >= NON_PREMIUM_COLLECTION_LIMIT) {\r\n await this.promiseWait(30);\r\n count++;\r\n }\r\n if (OPEN_COLLECTIONS.size > NON_PREMIUM_COLLECTION_LIMIT) {\r\n throw newRxError('COL23', {\r\n database: this.database.name,\r\n collection: this.name,\r\n args: {\r\n existing: Array.from(OPEN_COLLECTIONS.values()).map(c => ({\r\n db: c.database ? c.database.name : '',\r\n c: c.name\r\n }))\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Must be after the check because the hooks might throw on dev-mode\r\n * checks and we do not want to have broken collections here.\r\n * RxCollection instances created for testings do not have a database\r\n * so we do not add these to the list.\r\n */\r\n if (this.database) {\r\n OPEN_COLLECTIONS.add(this);\r\n }\r\n\r\n\r\n this.storageInstance = getWrappedStorageInstance(\r\n this.database,\r\n this.internalStorageInstance,\r\n this.schema.jsonSchema\r\n );\r\n this.incrementalWriteQueue = new IncrementalWriteQueue<RxDocumentType>(\r\n this.storageInstance,\r\n this.schema.primaryPath,\r\n (newData, oldData) => beforeDocumentUpdateWrite(this as any, newData, oldData),\r\n result => this._runHooks('post', 'save', result)\r\n );\r\n\r\n this.$ = this.eventBulks$.pipe(\r\n mergeMap((changeEventBulk: RxChangeEventBulk<any>) => rxChangeEventBulkToRxChangeEvents(changeEventBulk)),\r\n );\r\n this.checkpoint$ = this.eventBulks$.pipe(\r\n map((changeEventBulk: RxChangeEventBulk<any>) => changeEventBulk.checkpoint),\r\n );\r\n\r\n this._changeEventBuffer = createChangeEventBuffer<RxDocumentType>(this.asRxCollection);\r\n let documentConstructor: any;\r\n this._docCache = new DocumentCache(\r\n this.schema.primaryPath,\r\n this.eventBulks$.pipe(\r\n filter((bulk: RxChangeEventBulk<any>) => !bulk.isLocal),\r\n map((bulk: RxChangeEventBulk<any>) => bulk.events)\r\n ),\r\n docData => {\r\n if (!documentConstructor) {\r\n documentConstructor = getRxDocumentConstructor(this.asRxCollection);\r\n }\r\n return createNewRxDocument(this.asRxCollection, documentConstructor, docData);\r\n }\r\n );\r\n\r\n\r\n const listenToRemoveSub = this.database.internalStore.changeStream().pipe(\r\n filter((bulk: any) => {\r\n const key = this.name + '-' + this.schema.version;\r\n const found = bulk.events.find((event: any) => {\r\n return (\r\n event.documentData.context === 'collection' &&\r\n event.documentData.key === key &&\r\n event.operation === 'DELETE'\r\n );\r\n });\r\n return !!found;\r\n })\r\n ).subscribe(async () => {\r\n await this.close();\r\n await Promise.all(this.onRemove.map(fn => fn()));\r\n });\r\n this._subs.push(listenToRemoveSub);\r\n\r\n\r\n const databaseStorageToken = await this.database.storageToken;\r\n const subDocs = this.storageInstance.changeStream().subscribe((eventBulk: any) => {\r\n const changeEventBulk: RxChangeEventBulk<RxDocumentType | RxLocalDocumentData> = {\r\n id: eventBulk.id,\r\n isLocal: false,\r\n internal: false,\r\n collectionName: this.name,\r\n storageToken: databaseStorageToken,\r\n events: eventBulk.events,\r\n databaseToken: this.database.token,\r\n checkpoint: eventBulk.checkpoint,\r\n context: eventBulk.context\r\n };\r\n this.database.$emit(changeEventBulk);\r\n });\r\n this._subs.push(subDocs);\r\n\r\n return PROMISE_RESOLVE_VOID;\r\n }\r\n\r\n\r\n /**\r\n * Manually call the cleanup function of the storage.\r\n * @link https://rxdb.info/cleanup.html\r\n */\r\n cleanup(_minimumDeletedTime?: number): Promise<boolean> {\r\n ensureRxCollectionIsNotClosed(this);\r\n throw pluginMissing('cleanup');\r\n }\r\n\r\n // overwritten by migration-plugin\r\n migrationNeeded(): Promise<boolean> {\r\n throw pluginMissing('migration-schema');\r\n }\r\n getMigrationState(): RxMigrationState {\r\n throw pluginMissing('migration-schema');\r\n }\r\n startMigration(batchSize: number = 10): Promise<void> {\r\n ensureRxCollectionIsNotClosed(this);\r\n return this.getMigrationState().startMigration(batchSize);\r\n }\r\n migratePromise(batchSize: number = 10): Promise<any> {\r\n return this.getMigrationState().migratePromise(batchSize);\r\n }\r\n\r\n async insert(\r\n json: RxDocumentType | RxDocument\r\n ): Promise<RxDocument<RxDocumentType, OrmMethods>> {\r\n ensureRxCollectionIsNotClosed(this);\r\n const writeResult = await this.bulkInsert([json as any]);\r\n\r\n const isError = writeResult.error[0];\r\n throwIfIsStorageWriteError(this as any, (json as any)[this.schema.primaryPath] as any, json, isError as any);\r\n const insertResult = ensureNotFalsy(writeResult.success[0]);\r\n return insertResult;\r\n }\r\n\r\n async insertIfNotExists(\r\n json: RxDocumentType | RxDocument\r\n ): Promise<RxDocument<RxDocumentType, OrmMethods>> {\r\n const writeResult = await this.bulkInsert([json as any]);\r\n if (writeResult.error.length > 0) {\r\n const error = writeResult.error[0];\r\n if (error.status === 409) {\r\n const conflictDocData = error.documentInDb;\r\n return mapDocumentsDataToCacheDocs(this._docCache, [conflictDocData])[0];\r\n\r\n } else {\r\n throw error;\r\n }\r\n }\r\n return writeResult.success[0];\r\n }\r\n\r\n async bulkInsert(\r\n docsData: RxDocumentType[]\r\n ): Promise<{\r\n success: RxDocument<RxDocumentType, OrmMethods>[];\r\n error: RxStorageWriteError<RxDocumentType>[];\r\n }> {\r\n ensureRxCollectionIsNotClosed(this);\r\n /**\r\n * Optimization shortcut,\r\n * do nothing when called with an empty array\r\n */\r\n if (docsData.length === 0) {\r\n return {\r\n success: [],\r\n error: []\r\n };\r\n }\r\n\r\n const primaryPath = this.schema.primaryPath;\r\n\r\n const ids = new Set<string>();\r\n\r\n /**\r\n * This code is a bit redundant for better performance.\r\n * Instead of iterating multiple times,\r\n * we directly transform the input to a write-row array.\r\n */\r\n let insertRows: BulkWriteRow<RxDocumentType>[];\r\n if (this.hasHooks('pre', 'insert')) {\r\n insertRows = await Promise.all(\r\n docsData.map(docData => {\r\n const useDocData = fillObjectDataBeforeInsert(this.schema, docData);\r\n return this._runHooks('pre', 'insert', useDocData)\r\n .then(() => {\r\n ids.add((useDocData as any)[primaryPath]);\r\n return { document: useDocData };\r\n });\r\n })\r\n );\r\n } else {\r\n insertRows = new Array(docsData.length);\r\n const schema = this.schema;\r\n for (let index = 0; index < docsData.length; index++) {\r\n const docData = docsData[index];\r\n const useDocData = fillObjectDataBeforeInsert(schema, docData);\r\n ids.add((useDocData as any)[primaryPath]);\r\n insertRows[index] = { document: useDocData };\r\n }\r\n }\r\n\r\n\r\n if (ids.size !== docsData.length) {\r\n throw newRxError('COL22', {\r\n collection: this.name,\r\n args: {\r\n documents: docsData\r\n }\r\n });\r\n }\r\n\r\n // Normalize any inline attachment inputs (compute digest/length from Blob)\r\n // Also converts array format to internal map format.\r\n // Only create promises for rows that actually need normalization to avoid\r\n // expensive await overhead on the hot path.\r\n if (this.schema.jsonSchema.attachments) {\r\n const normalizePromises: Promise<void>[] = [];\r\n for (const row of insertRows) {\r\n const doc: any = row.document;\r\n const atts = doc._attachments;\r\n if (atts == null || Object.keys(atts).length === 0) {\r\n doc._attachments = {};\r\n } else {\r\n normalizePromises.push(\r\n normalizeInlineAttachments(this.database.hashFunction, atts)\r\n .then(normalized => {\r\n doc._attachments = normalized;\r\n })\r\n );\r\n }\r\n }\r\n if (normalizePromises.length > 0) {\r\n await Promise.all(normalizePromises);\r\n }\r\n }\r\n\r\n const results = await this.storageInstance.bulkWrite(\r\n insertRows,\r\n 'rx-collection-bulk-insert'\r\n );\r\n\r\n\r\n /**\r\n * Often the user does not need to access the RxDocuments of the bulkInsert() call.\r\n * So we transform the data to RxDocuments only if needed to use less CPU performance.\r\n */\r\n let rxDocuments: RxDocument<RxDocumentType, OrmMethods>[];\r\n const collection = this;\r\n const ret = {\r\n get success() {\r\n if (!rxDocuments) {\r\n const success = getWrittenDocumentsFromBulkWriteResponse(\r\n collection.schema.primaryPath,\r\n insertRows,\r\n results\r\n );\r\n rxDocuments = mapDocumentsDataToCacheDocs<RxDocumentType, OrmMethods>(collection._docCache, success);\r\n }\r\n return rxDocuments;\r\n },\r\n error: results.error\r\n };\r\n\r\n if (this.hasHooks('post', 'insert')) {\r\n const docsMap: Map<string, RxDocumentType> = new Map();\r\n insertRows.forEach(row => {\r\n const doc = row.document;\r\n docsMap.set((doc as any)[primaryPath] as any, doc);\r\n });\r\n await Promise.all(\r\n ret.success.map(doc => {\r\n return this._runHooks(\r\n 'post',\r\n 'insert',\r\n docsMap.get(doc.primary),\r\n doc\r\n );\r\n })\r\n );\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n async bulkRemove(\r\n /**\r\n * You can either remove the documents by their ids\r\n * or by directly providing the RxDocument instances\r\n * if you have them already. This improves performance a bit.\r\n */\r\n idsOrDocs: string[] | RxDocument<RxDocumentType>[]\r\n ): Promise<{\r\n success: RxDocument<RxDocumentType, OrmMethods>[];\r\n error: RxStorageWriteError<RxDocumentType>[];\r\n }> {\r\n ensureRxCollectionIsNotClosed(this);\r\n const primaryPath = this.schema.primaryPath;\r\n /**\r\n * Optimization shortcut,\r\n * do nothing when called with an empty array\r\n */\r\n if (idsOrDocs.length === 0) {\r\n return {\r\n success: [],\r\n error: []\r\n };\r\n }\r\n\r\n let rxDocumentMap: Map<string, RxDocument<RxDocumentType, OrmMethods>>;\r\n if (typeof idsOrDocs[0] === 'string') {\r\n rxDocumentMap = await this.findByIds(idsOrDocs as string[]).exec();\r\n } else {\r\n rxDocumentMap = new Map();\r\n (idsOrDocs as RxDocument<RxDocumentType, OrmMethods>[]).forEach(d => rxDocumentMap.set(d.primary, d));\r\n }\r\n\r\n const docsData: RxDocumentData<RxDocumentType>[] = [];\r\n const docsMap: Map<string, RxDocumentData<RxDocumentType>> = new Map();\r\n Array.from(rxDocumentMap.values()).forEach(rxDocument => {\r\n const data: RxDocumentData<RxDocumentType> = rxDocument.toMutableJSON(true) as any;\r\n docsData.push(data);\r\n docsMap.set(rxDocument.primary, data);\r\n });\r\n\r\n await Promise.all(\r\n docsData.map(doc => {\r\n const primary = (doc as any)[this.schema.primaryPath];\r\n return this._runHooks('pre', 'remove', doc, rxDocumentMap.get(primary));\r\n })\r\n );\r\n const removeDocs: BulkWriteRow<RxDocumentType>[] = docsData.map(doc => {\r\n const writeDoc = flatClone(doc);\r\n writeDoc._deleted = true;\r\n return {\r\n previous: doc,\r\n document: writeDoc\r\n };\r\n });\r\n const results = await this.storageInstance.bulkWrite(\r\n removeDocs,\r\n 'rx-collection-bulk-remove'\r\n );\r\n\r\n\r\n const success = getWrittenDocumentsFromBulkWriteResponse(\r\n this.schema.primaryPath,\r\n removeDocs,\r\n results\r\n );\r\n\r\n const deletedRxDocuments: RxDocument<RxDocumentType, OrmMethods>[] = [];\r\n const successIds: string[] = success.map(d => {\r\n const id = d[primaryPath] as string;\r\n const doc = this._docCache.getCachedRxDocument(d);\r\n deletedRxDocuments.push(doc);\r\n return id;\r\n });\r\n\r\n // run hooks\r\n await Promise.all(\r\n successIds.map(id => {\r\n return this._runHooks(\r\n 'post',\r\n 'remove',\r\n docsMap.get(id),\r\n rxDocumentMap.get(id)\r\n );\r\n })\r\n );\r\n\r\n\r\n return {\r\n success: deletedRxDocuments,\r\n error: results.error\r\n };\r\n }\r\n\r\n /**\r\n * same as bulkInsert but overwrites existing document with same primary\r\n */\r\n async bulkUpsert(docsData: Partial<RxDocumentType>[], options?: UpsertOptions): Promise<{\r\n success: RxDocument<RxDocumentType, OrmMethods>[];\r\n error: RxStorageWriteError<RxDocumentType>[];\r\n }> {\r\n ensureRxCollectionIsNotClosed(this);\r\n const insertData: RxDocumentType[] = [];\r\n const useJsonByDocId: Map<string, RxDocumentType> = new Map();\r\n\r\n // First pass: synchronous work — schema filling and primary key validation\r\n const preparedDocs: RxDocumentType[] = [];\r\n for (const docData of docsData) {\r\n const useJson = fillObjectDataBeforeInsert(this.schema, docData);\r\n const primary: string = useJson[this.schema.primaryPath] as any;\r\n if (!primary) {\r\n throw newRxError('COL3', {\r\n primaryPath: this.schema.primaryPath as string,\r\n data: useJson,\r\n schema: this.schema.jsonSchema\r\n });\r\n }\r\n preparedDocs.push(useJson);\r\n }\r\n\r\n // Second pass: normalize inline attachments concurrently across all documents.\r\n // Only create promises for docs that actually need normalization to avoid\r\n // expensive await overhead on the hot path.\r\n if (this.schema.jsonSchema.attachments) {\r\n const normalizePromises: Promise<void>[] = [];\r\n for (const useJson of preparedDocs) {\r\n const atts = (useJson as any)._attachments;\r\n if (atts == null || Object.keys(atts).length === 0) {\r\n (useJson as any)._attachments = {};\r\n } else {\r\n normalizePromises.push(\r\n normalizeInlineAttachments(this.database.hashFunction, atts)\r\n .then(normalized => {\r\n (useJson as any)._attachments = normalized;\r\n })\r\n );\r\n }\r\n }\r\n if (normalizePromises.length > 0) {\r\n await Promise.all(normalizePromises);\r\n }\r\n }\r\n for (const useJson of preparedDocs) {\r\n const primary: string = (useJson as any)[this.schema.primaryPath];\r\n useJsonByDocId.set(primary, useJson);\r\n insertData.push(useJson);\r\n }\r\n\r\n const insertResult = await this.bulkInsert(insertData);\r\n const success = insertResult.success.slice(0);\r\n const error: RxStorageWriteError<RxDocumentType>[] = [];\r\n\r\n // update the ones that existed already\r\n await Promise.all(\r\n insertResult.error.map(async (err) => {\r\n if (err.status !== 409) {\r\n error.push(err);\r\n } else {\r\n const id = err.documentId;\r\n const writeData = getFromMapOrThrow(useJsonByDocId, id);\r\n const docDataInDb = ensureNotFalsy(err.documentInDb);\r\n const newAttachments = (writeData as any)._attachments;\r\n const deleteExisting = options?.deleteExistingAttachments === true;\r\n const newDoc = await this.incrementalWriteQueue.addWrite(\r\n docDataInDb,\r\n (docWriteData: any): any => {\r\n return Object.assign({}, writeData, {\r\n _attachments: deleteExisting\r\n ? newAttachments\r\n : Object.assign(\r\n {},\r\n docWriteData._attachments,\r\n newAttachments\r\n )\r\n });\r\n }\r\n ).then(writeResult => this._docCache.getCachedRxDocument(writeResult) as any);\r\n success.push(newDoc as any);\r\n }\r\n })\r\n );\r\n return {\r\n error,\r\n success\r\n };\r\n }\r\n\r\n /**\r\n * same as insert but overwrites existing document with same primary\r\n */\r\n async upsert(json: Partial<RxDocumentType>, options?: UpsertOptions): Promise<RxDocument<RxDocumentType, OrmMethods>> {\r\n ensureRxCollectionIsNotClosed(this);\r\n const bulkResult = await this.bulkUpsert([json], options);\r\n throwIfIsStorageWriteError<RxDocumentType>(\r\n this.asRxCollection,\r\n (json as any)[this.schema.primaryPath],\r\n json as any,\r\n bulkResult.error[0]\r\n );\r\n return bulkResult.success[0];\r\n }\r\n\r\n /**\r\n * upserts to a RxDocument, uses incrementalModify if document already exists\r\n */\r\n incrementalUpsert(json: Partial<RxDocumentType>, options?: UpsertOptions): Promise<RxDocument<RxDocumentType, OrmMethods>> {\r\n ensureRxCollectionIsNotClosed(this);\r\n const useJson = fillObjectDataBeforeInsert(this.schema, json);\r\n const primary: string = useJson[this.schema.primaryPath] as any;\r\n if (!primary) {\r\n throw newRxError('COL4', {\r\n data: json\r\n });\r\n }\r\n\r\n const hasAttachments = !!this.schema.jsonSchema.attachments;\r\n const deleteExisting = options?.deleteExistingAttachments === true;\r\n\r\n // ensure that it won't try 2 parallel runs\r\n let queue = this._incrementalUpsertQueues.get(primary);\r\n if (!queue) {\r\n queue = PROMISE_RESOLVE_VOID;\r\n }\r\n queue = queue\r\n // Normalize array-format attachments to map format\r\n .then(() => {\r\n if (hasAttachments) {\r\n const atts = (useJson as any)._attachments;\r\n if (atts == null || Object.keys(atts).length === 0) {\r\n return {};\r\n } else {\r\n return normalizeInlineAttachments(this.database.hashFunction, atts);\r\n }\r\n }\r\n return (useJson as any)._attachments;\r\n })\r\n .then((normalizedAttachments) => {\r\n (useJson as any)._attachments = normalizedAttachments;\r\n return _incrementalUpsertEnsureRxDocumentExists(this as any, primary as any, useJson);\r\n })\r\n .then((wasInserted) => {\r\n if (!wasInserted.inserted) {\r\n const doc = wasInserted.doc;\r\n const newAttachments = (useJson as any)._attachments;\r\n return this.incrementalWriteQueue.addWrite(\r\n doc._data as RxDocumentData<RxDocumentType>,\r\n (docWriteData: any): any => {\r\n return Object.assign({}, useJson, {\r\n _attachments: deleteExisting\r\n ? newAttachments\r\n : Object.assign(\r\n {},\r\n docWriteData._attachments,\r\n newAttachments\r\n )\r\n });\r\n }\r\n ).then(writeResult => this._docCache.getCachedRxDocument(writeResult) as any);\r\n } else {\r\n return wasInserted.doc;\r\n }\r\n });\r\n this._incrementalUpsertQueues.set(primary, queue);\r\n return queue;\r\n }\r\n\r\n find(queryObj?: MangoQuery<RxDocumentType>): RxQuery<\r\n RxDocumentType,\r\n RxDocument<RxDocumentType, OrmMethods>[],\r\n OrmMethods,\r\n Reactivity\r\n > {\r\n ensureRxCollectionIsNotClosed(this);\r\n\r\n runPluginHooks('prePrepareRxQuery', {\r\n op: 'find',\r\n queryObj,\r\n collection: this\r\n });\r\n\r\n if (!queryObj) {\r\n queryObj = _getDefaultQuery();\r\n }\r\n\r\n const query = createRxQuery('find', queryObj, this as any);\r\n return query as any;\r\n }\r\n\r\n findOne(\r\n queryObj?: MangoQueryNoLimit<RxDocumentType> | string\r\n ): RxQuery<\r\n RxDocumentType,\r\n RxDocument<RxDocumentType, OrmMethods> | null,\r\n OrmMethods,\r\n Reactivity\r\n > {\r\n ensureRxCollectionIsNotClosed(this);\r\n\r\n runPluginHooks('prePrepareRxQuery', {\r\n op: 'findOne',\r\n queryObj,\r\n collection: this\r\n });\r\n\r\n let query;\r\n\r\n if (typeof queryObj === 'string') {\r\n query = createRxQuery('findOne', {\r\n selector: {\r\n [this.schema.primaryPath]: queryObj\r\n },\r\n limit: 1\r\n }, this as any);\r\n } else {\r\n if (!queryObj) {\r\n queryObj = _getDefaultQuery();\r\n }\r\n\r\n // cannot have limit on findOne queries because it will be overwritten\r\n if ((queryObj as MangoQuery).limit) {\r\n throw newRxError('QU6');\r\n }\r\n\r\n queryObj = flatClone(queryObj);\r\n (queryObj as any).limit = 1;\r\n query = createRxQuery<RxDocumentType>('findOne', queryObj, this as any);\r\n }\r\n\r\n\r\n return query as any;\r\n }\r\n\r\n count(queryObj?: MangoQuerySelectorAndIndex<RxDocumentType>): RxQuery<\r\n RxDocumentType,\r\n number,\r\n OrmMethods,\r\n Reactivity\r\n > {\r\n ensureRxCollectionIsNotClosed(this);\r\n if (!queryObj) {\r\n queryObj = _getDefaultQuery();\r\n }\r\n const query = createRxQuery('count', queryObj, this as any);\r\n return query as any;\r\n }\r\n\r\n /**\r\n * find a list documents by their primary key\r\n * has way better performance then running multiple findOne() or a find() with a complex $or-selected\r\n */\r\n findByIds(\r\n ids: string[]\r\n ): RxQuery<\r\n RxDocumentType,\r\n Map<string, RxDocument<RxDocumentType, OrmMethods>>,\r\n OrmMethods,\r\n Reactivity\r\n > {\r\n ensureRxCollectionIsNotClosed(this);\r\n const mangoQuery: MangoQuery<RxDocumentType> = {\r\n selector: {\r\n [this.schema.primaryPath]: {\r\n $in: ids.slice(0)\r\n }\r\n } as any\r\n };\r\n const query = createRxQuery('findByIds', mangoQuery, this as any);\r\n return query as any;\r\n }\r\n\r\n /**\r\n * Export collection to a JSON friendly format.\r\n */\r\n exportJSON(): Promise<RxDumpCollection<RxDocumentType>>;\r\n exportJSON(): Promise<RxDumpCollectionAny<RxDocumentType>>;\r\n exportJSON(): Promise<any> {\r\n throw pluginMissing('json-dump');\r\n }\r\n\r\n /**\r\n * Import the parsed JSON export into the collection.\r\n * @param _exportedJSON The previously exported data from the `<collection>.exportJSON()` method.\r\n */\r\n importJSON(_exportedJSON: RxDumpCollectionAny<RxDocumentType>): Promise<void> {\r\n throw pluginMissing('json-dump');\r\n }\r\n\r\n registerWebMCP(_options?: WebMCPOptions): { error$: Subject<Error>; log$: Subject<WebMCPLogEvent>; } {\r\n throw pluginMissing('webmcp');\r\n }\r\n\r\n insertCRDT(_updateObj: CRDTEntry<any> | CRDTEntry<any>[]): RxDocument<RxDocumentType, OrmMethods> {\r\n throw pluginMissing('crdt');\r\n }\r\n\r\n\r\n addPipeline(_options: RxPipelineOptions<RxDocumentType>): Promise<RxPipeline<RxDocumentType>> {\r\n throw pluginMissing('pipeline');\r\n }\r\n\r\n /**\r\n * HOOKS\r\n */\r\n addHook(when: HookWhenType, key: HookKeyType, fun: any, parallel = false) {\r\n if (typeof fun !== 'function') {\r\n throw newRxTypeError('COL7', {\r\n key,\r\n when\r\n });\r\n }\r\n\r\n if (!HOOKS_WHEN.includes(when)) {\r\n throw newRxTypeError('COL8', {\r\n key,\r\n when\r\n });\r\n }\r\n\r\n if (!HOOKS_KEYS.includes(key)) {\r\n throw newRxError('COL9', {\r\n key\r\n });\r\n }\r\n\r\n if (when === 'post' && key === 'create' && parallel === true) {\r\n throw newRxError('COL10', {\r\n when,\r\n key,\r\n parallel\r\n });\r\n }\r\n\r\n // bind this-scope to hook-function\r\n const boundFun = fun.bind(this);\r\n\r\n const runName = parallel ? 'parallel' : 'series';\r\n\r\n this.hooks[key] = this.hooks[key] || {};\r\n this.hooks[key][when] = this.hooks[key][when] || {\r\n series: [],\r\n parallel: []\r\n };\r\n this.hooks[key][when][runName].push(boundFun);\r\n }\r\n\r\n getHooks(when: HookWhenType, key: HookKeyType) {\r\n if (\r\n !this.hooks[key] ||\r\n !this.hooks[key][when]\r\n ) {\r\n return {\r\n series: [],\r\n parallel: []\r\n };\r\n }\r\n return this.hooks[key][when];\r\n }\r\n\r\n hasHooks(when: HookWhenType, key: HookKeyType) {\r\n /**\r\n * Performance shortcut\r\n * so that we not have to build the empty object.\r\n */\r\n if (\r\n !this.hooks[key] ||\r\n !this.hooks[key][when]\r\n ) {\r\n return false;\r\n }\r\n\r\n const hooks = this.getHooks(when, key);\r\n if (!hooks) {\r\n return false;\r\n }\r\n return hooks.series.length > 0 || hooks.parallel.length > 0;\r\n }\r\n\r\n _runHooks(when: HookWhenType, key: HookKeyType, data: any, instance?: any): Promise<any> {\r\n const hooks = this.getHooks(when, key);\r\n\r\n if (!hooks) {\r\n return PROMISE_RESOLVE_VOID;\r\n }\r\n\r\n // run parallel: false\r\n const tasks = hooks.series.map((hook: any) => () => hook(data, instance));\r\n return promiseSeries(tasks)\r\n // run parallel: true\r\n .then(() => Promise.all(\r\n hooks.parallel\r\n .map((hook: any) => hook(data, instance))\r\n ));\r\n }\r\n\r\n /**\r\n * does the same as ._runHooks() but with non-async-functions\r\n */\r\n _runHooksSync(when: HookWhenType, key: HookKeyType, data: any, instance: any) {\r\n if (!this.hasHooks(when, key)) {\r\n return;\r\n }\r\n const hooks = this.getHooks(when, key);\r\n if (!hooks) return;\r\n hooks.series.forEach((hook: any) => hook(data, instance));\r\n }\r\n\r\n /**\r\n * Returns a promise that resolves after the given time.\r\n * Ensures that is properly cleans up when the collection is closed\r\n * so that no running timeouts prevent the exit of the JavaScript process.\r\n */\r\n promiseWait(time: number): Promise<void> {\r\n const ret = new Promise<void>(res => {\r\n const timeout = setTimeout(() => {\r\n this.timeouts.delete(timeout);\r\n res();\r\n }, time);\r\n this.timeouts.add(timeout);\r\n });\r\n return ret;\r\n }\r\n\r\n async close(): Promise<boolean> {\r\n if (this.closed) {\r\n return PROMISE_RESOLVE_FALSE;\r\n }\r\n\r\n OPEN_COLLECTIONS.delete(this);\r\n\r\n\r\n await Promise.all(this.onClose.map(fn => fn()));\r\n\r\n /**\r\n * Settings closed = true\r\n * must be the first thing to do,\r\n * so for example the replication can directly stop\r\n * instead of sending requests to a closed storage.\r\n */\r\n this.closed = true;\r\n\r\n\r\n Array.from(this.timeouts).forEach(timeout => clearTimeout(timeout));\r\n if (this._changeEventBuffer) {\r\n this._changeEventBuffer.close();\r\n }\r\n /**\r\n * First wait until the whole database is idle.\r\n * This ensures that the storage does not get closed\r\n * while some operation is running.\r\n * It is important that we do not intercept a running call\r\n * because it might lead to undefined behavior like when a doc is written\r\n * but the change is not added to the changes collection.\r\n */\r\n return this.database.requestIdlePromise()\r\n .then(() => this.storageInstance.close())\r\n .then(() => {\r\n /**\r\n * Unsubscribing must be done AFTER the storageInstance.close()\r\n * Because the conflict handling is part of the subscriptions and\r\n * otherwise there might be open conflicts to be resolved which\r\n * will then stuck and never resolve.\r\n */\r\n this._subs.forEach(sub => sub.unsubscribe());\r\n\r\n delete this.database.collections[this.name];\r\n this.database.collectionsSubject$.next({\r\n collection: this.asRxCollection,\r\n type: 'CLOSED'\r\n });\r\n return runAsyncPluginHooks('postCloseRxCollection', this).then(() => true);\r\n });\r\n }\r\n\r\n /**\r\n * remove all data of the collection\r\n */\r\n async remove(): Promise<any> {\r\n await this.close();\r\n await Promise.all(this.onRemove.map(fn => fn()));\r\n /**\r\n * TODO here we should pass the already existing\r\n * storage instances instead of creating new ones.\r\n */\r\n await removeCollectionStorages(\r\n this.database.storage,\r\n this.database.internalStore,\r\n this.database.token,\r\n this.database.name,\r\n this.name,\r\n this.database.multiInstance,\r\n this.database.password,\r\n this.database.hashFunction\r\n );\r\n }\r\n\r\n get asRxCollection(): RxCollection<RxDocumentType, OrmMethods, StaticMethods, any, Reactivity> {\r\n return this as any;\r\n }\r\n}\r\n\r\n/**\r\n * adds the hook-functions to the collections prototype\r\n * this runs only once\r\n */\r\nfunction _applyHookFunctions(\r\n collection: RxCollection<any, any>\r\n) {\r\n if (hooksApplied) return; // already run\r\n hooksApplied = true;\r\n const colProto = Object.getPrototypeOf(collection);\r\n HOOKS_KEYS.forEach(key => {\r\n HOOKS_WHEN.map(when => {\r\n const fnName = when + ucfirst(key);\r\n colProto[fnName] = function (fun: string, parallel: boolean) {\r\n return this.addHook(when, key, fun, parallel);\r\n };\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * ensures that the given document exists\r\n * @return promise that resolves with new doc and flag if inserted\r\n */\r\nfunction _incrementalUpsertEnsureRxDocumentExists<RxDocType>(\r\n rxCollection: RxCollection<RxDocType>,\r\n primary: string,\r\n json: any\r\n): Promise<\r\n {\r\n doc: RxDocument<RxDocType>;\r\n inserted: boolean;\r\n }\r\n> {\r\n /**\r\n * Optimisation shortcut,\r\n * first try to find the document in the doc-cache\r\n */\r\n const docDataFromCache = rxCollection._docCache.getLatestDocumentDataIfExists(primary);\r\n if (docDataFromCache) {\r\n return Promise.resolve({\r\n doc: rxCollection._docCache.getCachedRxDocuments([docDataFromCache])[0],\r\n inserted: false\r\n });\r\n }\r\n return rxCollection.findOne(primary).exec()\r\n .then(doc => {\r\n if (!doc) {\r\n return rxCollection.insert(json).then(newDoc => ({\r\n doc: newDoc,\r\n inserted: true\r\n }));\r\n } else {\r\n return {\r\n doc,\r\n inserted: false\r\n };\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * creates and prepares a new collection\r\n */\r\nexport async function createRxCollection(\r\n {\r\n database,\r\n name,\r\n schema,\r\n instanceCreationOptions = {},\r\n migrationStrategies = {},\r\n autoMigrate = true,\r\n statics = {},\r\n methods = {},\r\n attachments = {},\r\n options = {},\r\n localDocuments = false,\r\n cacheReplacementPolicy = defaultCacheReplacementPolicy,\r\n conflictHandler = defaultConflictHandler,\r\n storageInstance\r\n }: any\r\n): Promise<RxCollection> {\r\n if (!storageInstance) {\r\n const storageInstanceCreationParams: RxStorageInstanceCreationParams<any, any> = {\r\n databaseInstanceToken: database.token,\r\n databaseName: database.name,\r\n collectionName: name,\r\n schema: schema.jsonSchema,\r\n options: instanceCreationOptions,\r\n multiInstance: database.multiInstance,\r\n password: database.password,\r\n devMode: overwritable.isDevMode()\r\n };\r\n\r\n runPluginHooks(\r\n 'preCreateRxStorageInstance',\r\n storageInstanceCreationParams\r\n );\r\n\r\n storageInstance = await createRxCollectionStorageInstance(\r\n database,\r\n storageInstanceCreationParams\r\n );\r\n }\r\n\r\n const collection = new RxCollectionBase(\r\n database,\r\n name,\r\n schema,\r\n storageInstance,\r\n instanceCreationOptions,\r\n migrationStrategies,\r\n methods,\r\n attachments,\r\n options,\r\n cacheReplacementPolicy,\r\n statics,\r\n conflictHandler\r\n );\r\n\r\n try {\r\n await collection.prepare();\r\n\r\n // ORM add statics\r\n Object\r\n .entries(statics)\r\n .forEach(([funName, fun]) => {\r\n Object.defineProperty(collection, funName, {\r\n get: () => (fun as any).bind(collection)\r\n });\r\n });\r\n\r\n runPluginHooks('createRxCollection', {\r\n collection,\r\n creator: {\r\n name,\r\n schema,\r\n storageInstance,\r\n instanceCreationOptions,\r\n migrationStrategies,\r\n methods,\r\n attachments,\r\n options,\r\n cacheReplacementPolicy,\r\n localDocuments,\r\n statics\r\n }\r\n });\r\n\r\n /**\r\n * Migration must run after the hooks so that the\r\n * dev-mode can check up front if the\r\n * migration strategies are correctly set.\r\n */\r\n if (autoMigrate && collection.schema.version !== 0) {\r\n await collection.migratePromise();\r\n }\r\n\r\n } catch (err) {\r\n /**\r\n * If the collection creation fails,\r\n * we yet have to close the storage instances.\r\n */\r\n OPEN_COLLECTIONS.delete(collection);\r\n await storageInstance.close();\r\n throw err;\r\n }\r\n\r\n return collection as any;\r\n}\r\n\r\nexport function isRxCollection(obj: any): boolean {\r\n return obj instanceof RxCollectionBase;\r\n}\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"rx-collection.js","names":["filter","map","mergeMap","ucfirst","flatClone","promiseSeries","pluginMissing","ensureNotFalsy","getFromMapOrThrow","PROMISE_RESOLVE_FALSE","PROMISE_RESOLVE_VOID","NON_PREMIUM_COLLECTION_LIMIT","hasPremiumFlag","fillObjectDataBeforeInsert","normalizeInlineAttachments","createRxCollectionStorageInstance","removeCollectionStorages","ensureRxCollectionIsNotClosed","createRxQuery","_getDefaultQuery","newRxError","newRxTypeError","DocumentCache","mapDocumentsDataToCacheDocs","createQueryCache","defaultCacheReplacementPolicy","createChangeEventBuffer","runAsyncPluginHooks","runPluginHooks","createNewRxDocument","getRxDocumentConstructor","getWrappedStorageInstance","getWrittenDocumentsFromBulkWriteResponse","throwIfIsStorageWriteError","RX_COLLECTION_BULK_INSERT_CONTEXT","IncrementalWriteQueue","beforeDocumentUpdateWrite","overwritable","defaultConflictHandler","rxChangeEventBulkToRxChangeEvents","HOOKS_WHEN","HOOKS_KEYS","hooksApplied","OPEN_COLLECTIONS","Set","RxCollectionBase","database","name","schema","internalStorageInstance","instanceCreationOptions","migrationStrategies","methods","attachments","options","cacheReplacementPolicy","statics","conflictHandler","storageInstance","timeouts","incrementalWriteQueue","awaitBeforeReads","_incrementalUpsertQueues","Map","synced","hooks","_subs","_docCache","_queryCache","$","checkpoint$","_changeEventBuffer","eventBulks$","onClose","closed","onRemove","_applyHookFunctions","asRxCollection","pipe","changeEventBulk","collectionName","_proto","prototype","prepare","count","startTime","size","Date","now","promiseWait","timeInRetry","collection","args","existing","Array","from","values","c","db","add","jsonSchema","primaryPath","newData","oldData","result","_runHooks","getCachedRxDocument","checkpoint","documentConstructor","bulk","isLocal","events","docData","listenToRemoveSub","internalStore","changeStream","key","version","found","find","event","documentData","context","operation","subscribe","close","Promise","all","fn","push","databaseStorageToken","storageToken","subDocs","eventBulk","id","internal","databaseToken","token","$emit","cleanup","_minimumDeletedTime","migrationNeeded","getMigrationState","startMigration","batchSize","migratePromise","insert","json","writeResult","bulkInsert","isError","error","insertResult","success","insertIfNotExists","length","status","conflictDocData","documentInDb","docsData","_this","ids","insertRows","hasHooks","useDocData","then","document","index","duplicateIdSet","seenIds","row","has","duplicateIds","documents","normalizePromises","_loop","doc","atts","_attachments","Object","keys","hashFunction","normalized","results","bulkWrite","rxDocuments","ret","docsMap","forEach","set","get","primary","bulkRemove","idsOrDocs","rxDocumentMap","findByIds","exec","d","rxDocument","data","toMutableJSON","removeDocs","writeDoc","_deleted","previous","deletedRxDocuments","successIds","bulkUpsert","_this2","insertData","useJsonByDocId","preparedDocs","useJson","_loop2","_useJson","slice","err","documentId","writeData","docDataInDb","newAttachments","deleteExisting","deleteExistingAttachments","newDoc","addWrite","docWriteData","assign","upsert","bulkResult","incrementalUpsert","hasAttachments","queue","normalizedAttachments","_incrementalUpsertEnsureRxDocumentExists","wasInserted","inserted","_data","queryObj","op","query","findOne","selector","limit","mangoQuery","$in","exportJSON","importJSON","_exportedJSON","registerWebMCP","_options","insertCRDT","_updateObj","addPipeline","addHook","when","fun","parallel","includes","boundFun","bind","runName","series","getHooks","instance","tasks","hook","_runHooksSync","time","res","timeout","setTimeout","delete","clearTimeout","requestIdlePromise","sub","unsubscribe","collections","collectionsSubject$","next","type","remove","storage","multiInstance","password","_createClass","cE","colProto","getPrototypeOf","fnName","rxCollection","docDataFromCache","getLatestDocumentDataIfExists","resolve","getCachedRxDocuments","catch","code","createRxCollection","autoMigrate","localDocuments","storageInstanceCreationParams","databaseInstanceToken","databaseName","devMode","isDevMode","entries","funName","defineProperty","creator","isRxCollection","obj"],"sources":["../../src/rx-collection.ts"],"sourcesContent":["import {\r\n filter,\r\n map,\r\n mergeMap\r\n} from 'rxjs';\r\n\r\nimport {\r\n ucfirst,\r\n flatClone,\r\n promiseSeries,\r\n pluginMissing,\r\n ensureNotFalsy,\r\n getFromMapOrThrow,\r\n PROMISE_RESOLVE_FALSE,\r\n PROMISE_RESOLVE_VOID,\r\n NON_PREMIUM_COLLECTION_LIMIT,\r\n hasPremiumFlag\r\n} from './plugins/utils/index.ts';\r\nimport {\r\n fillObjectDataBeforeInsert,\r\n normalizeInlineAttachments,\r\n createRxCollectionStorageInstance,\r\n removeCollectionStorages,\r\n ensureRxCollectionIsNotClosed\r\n} from './rx-collection-helper.ts';\r\nimport {\r\n createRxQuery,\r\n _getDefaultQuery\r\n} from './rx-query.ts';\r\nimport {\r\n newRxError,\r\n newRxTypeError\r\n} from './rx-error.ts';\r\nimport type {\r\n RxMigrationState\r\n} from './plugins/migration-schema/index.ts';\r\nimport {\r\n DocumentCache,\r\n mapDocumentsDataToCacheDocs\r\n} from './doc-cache.ts';\r\nimport {\r\n QueryCache,\r\n createQueryCache,\r\n defaultCacheReplacementPolicy\r\n} from './query-cache.ts';\r\nimport {\r\n ChangeEventBuffer,\r\n createChangeEventBuffer\r\n} from './change-event-buffer.ts';\r\nimport {\r\n runAsyncPluginHooks,\r\n runPluginHooks\r\n} from './hooks.ts';\r\n\r\nimport {\r\n Subscription,\r\n Observable,\r\n Subject\r\n} from 'rxjs';\r\n\r\nimport type {\r\n KeyFunctionMap,\r\n RxCollection,\r\n RxDatabase,\r\n RxQuery,\r\n RxDocument,\r\n RxDumpCollection,\r\n RxDumpCollectionAny,\r\n MangoQuery,\r\n MangoQueryNoLimit,\r\n RxCacheReplacementPolicy,\r\n RxStorageWriteError,\r\n RxDocumentData,\r\n RxStorageInstanceCreationParams,\r\n BulkWriteRow,\r\n RxChangeEvent,\r\n RxChangeEventInsert,\r\n RxChangeEventUpdate,\r\n RxChangeEventDelete,\r\n RxStorageInstance,\r\n CollectionsOfDatabase,\r\n RxChangeEventBulk,\r\n RxLocalDocumentData,\r\n RxConflictHandler,\r\n MaybePromise,\r\n CRDTEntry,\r\n MangoQuerySelectorAndIndex,\r\n MigrationStrategies,\r\n WebMCPOptions,\r\n WebMCPLogEvent\r\n} from './types/index.d.ts';\r\n\r\nimport {\r\n RxSchema\r\n} from './rx-schema.ts';\r\n\r\nimport {\r\n createNewRxDocument,\r\n getRxDocumentConstructor\r\n} from './rx-document-prototype-merge.ts';\r\nimport {\r\n getWrappedStorageInstance,\r\n getWrittenDocumentsFromBulkWriteResponse,\r\n throwIfIsStorageWriteError,\r\n WrappedRxStorageInstance,\r\n RX_COLLECTION_BULK_INSERT_CONTEXT\r\n} from './rx-storage-helper.ts';\r\nimport { IncrementalWriteQueue } from './incremental-write.ts';\r\nimport { beforeDocumentUpdateWrite } from './rx-document.ts';\r\nimport { overwritable } from './overwritable.ts';\r\nimport type { RxPipeline, RxPipelineOptions } from './plugins/pipeline/index.ts';\r\nimport { defaultConflictHandler } from './replication-protocol/default-conflict-handler.ts';\r\nimport { rxChangeEventBulkToRxChangeEvents } from './rx-change-event.ts';\r\n\r\nconst HOOKS_WHEN = ['pre', 'post'] as const;\r\ntype HookWhenType = typeof HOOKS_WHEN[number];\r\nconst HOOKS_KEYS = ['insert', 'save', 'remove', 'create'] as const;\r\ntype HookKeyType = typeof HOOKS_KEYS[number];\r\n\r\nexport interface UpsertOptions {\r\n /**\r\n * When true, existing attachments not present in the upsert data\r\n * will be removed. Defaults to false (preserve existing attachments).\r\n */\r\n deleteExistingAttachments?: boolean;\r\n}\r\nlet hooksApplied = false;\r\n\r\nexport const OPEN_COLLECTIONS = new Set<RxCollectionBase<any, any, any>>();\r\n\r\nexport class RxCollectionBase<\r\n InstanceCreationOptions,\r\n RxDocumentType = { [prop: string]: any; },\r\n OrmMethods = {},\r\n StaticMethods = { [key: string]: any; },\r\n Reactivity = any\r\n> {\r\n\r\n\r\n /**\r\n * Stores all 'normal' documents\r\n */\r\n public storageInstance: WrappedRxStorageInstance<RxDocumentType, any, InstanceCreationOptions> = {} as any;\r\n public readonly timeouts: Set<ReturnType<typeof setTimeout>> = new Set();\r\n public incrementalWriteQueue: IncrementalWriteQueue<RxDocumentType> = {} as any;\r\n\r\n\r\n /**\r\n * Before reads, all these methods are awaited. Used to \"block\" reads\r\n * depending on other processes, like when the RxPipeline is running.\r\n */\r\n public readonly awaitBeforeReads = new Set<() => MaybePromise<any>>();\r\n\r\n constructor(\r\n public readonly database: RxDatabase<CollectionsOfDatabase, any, InstanceCreationOptions, Reactivity>,\r\n public name: string,\r\n public schema: RxSchema<RxDocumentType>,\r\n public internalStorageInstance: RxStorageInstance<RxDocumentType, any, InstanceCreationOptions>,\r\n public instanceCreationOptions: InstanceCreationOptions = {} as any,\r\n public migrationStrategies: MigrationStrategies = {},\r\n public methods: KeyFunctionMap = {},\r\n public attachments: KeyFunctionMap = {},\r\n public options: any = {},\r\n public cacheReplacementPolicy: RxCacheReplacementPolicy = defaultCacheReplacementPolicy,\r\n public statics: KeyFunctionMap = {},\r\n public conflictHandler: RxConflictHandler<RxDocumentType> = defaultConflictHandler\r\n ) {\r\n _applyHookFunctions(this.asRxCollection);\r\n\r\n\r\n if (database) { // might be falsy on pseudoInstance\r\n this.eventBulks$ = database.eventBulks$.pipe(\r\n filter((changeEventBulk: RxChangeEventBulk<any>) => changeEventBulk.collectionName === this.name)\r\n );\r\n } else { }\r\n }\r\n\r\n get insert$(): Observable<RxChangeEventInsert<RxDocumentType>> {\r\n return this.$.pipe(\r\n filter((cE: RxChangeEvent<RxDocumentType>) => cE.operation === 'INSERT')\r\n ) as any;\r\n }\r\n get update$(): Observable<RxChangeEventUpdate<RxDocumentType>> {\r\n return this.$.pipe(\r\n filter((cE: RxChangeEvent<RxDocumentType>) => cE.operation === 'UPDATE')\r\n ) as any;\r\n }\r\n get remove$(): Observable<RxChangeEventDelete<RxDocumentType>> {\r\n return this.$.pipe(\r\n filter((cE: RxChangeEvent<RxDocumentType>) => cE.operation === 'DELETE')\r\n ) as any;\r\n }\r\n\r\n public _incrementalUpsertQueues: Map<string, Promise<any>> = new Map();\r\n // defaults\r\n public synced: boolean = false;\r\n public hooks: {\r\n [key in HookKeyType]: {\r\n [when in HookWhenType]: {\r\n series: Function[];\r\n parallel: Function[];\r\n };\r\n }\r\n } = {} as any;\r\n public _subs: Subscription[] = [];\r\n\r\n public _docCache: DocumentCache<RxDocumentType, OrmMethods> = {} as any;\r\n\r\n public _queryCache: QueryCache = createQueryCache();\r\n public $: Observable<RxChangeEvent<RxDocumentType>> = {} as any;\r\n public checkpoint$: Observable<any> = {} as any;\r\n public _changeEventBuffer: ChangeEventBuffer<RxDocumentType> = {} as ChangeEventBuffer<RxDocumentType>;\r\n\r\n /**\r\n * Internally only use eventBulks$\r\n * Do not use .$ or .observable$ because that has to transform\r\n * the events which decreases performance.\r\n */\r\n public readonly eventBulks$: Observable<RxChangeEventBulk<any>> = {} as any;\r\n\r\n\r\n /**\r\n * When the collection is closed,\r\n * these functions will be called an awaited.\r\n * Used to automatically clean up stuff that\r\n * belongs to this collection.\r\n */\r\n public onClose: (() => MaybePromise<any>)[] = [];\r\n public closed = false;\r\n\r\n public onRemove: (() => MaybePromise<any>)[] = [];\r\n\r\n public async prepare(): Promise<void> {\r\n\r\n if (!(await hasPremiumFlag())) {\r\n\r\n /**\r\n * When used in a test suite, we often open and close many databases with collections\r\n * while not awaiting the database.close() call to improve the test times.\r\n * So when reopening collections and the OPEN_COLLECTIONS size is full,\r\n * we retry after some times to account for this.\r\n */\r\n let count = 0;\r\n let startTime = 0;\r\n while (count < 35 && OPEN_COLLECTIONS.size >= NON_PREMIUM_COLLECTION_LIMIT) {\r\n startTime = Date.now();\r\n await this.promiseWait(30);\r\n count++;\r\n }\r\n if (OPEN_COLLECTIONS.size > NON_PREMIUM_COLLECTION_LIMIT) {\r\n const timeInRetry = Date.now() - startTime;\r\n throw newRxError('COL23', {\r\n database: this.database.name,\r\n collection: this.name,\r\n args: {\r\n timeInRetry,\r\n existing: Array.from(OPEN_COLLECTIONS.values()).map(c => ({\r\n db: c.database ? c.database.name : '',\r\n c: c.name\r\n }))\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Must be after the check because the hooks might throw on dev-mode\r\n * checks and we do not want to have broken collections here.\r\n * RxCollection instances created for testings do not have a database\r\n * so we do not add these to the list.\r\n */\r\n if (this.database) {\r\n OPEN_COLLECTIONS.add(this);\r\n }\r\n\r\n\r\n this.storageInstance = getWrappedStorageInstance(\r\n this.database,\r\n this.internalStorageInstance,\r\n this.schema.jsonSchema\r\n );\r\n this.incrementalWriteQueue = new IncrementalWriteQueue<RxDocumentType>(\r\n this.storageInstance,\r\n this.schema.primaryPath,\r\n (newData, oldData) => beforeDocumentUpdateWrite(this as any, newData, oldData),\r\n result => this._runHooks('post', 'save', result, this._docCache.getCachedRxDocument(result))\r\n );\r\n\r\n this.$ = this.eventBulks$.pipe(\r\n mergeMap((changeEventBulk: RxChangeEventBulk<any>) => rxChangeEventBulkToRxChangeEvents(changeEventBulk)),\r\n );\r\n this.checkpoint$ = this.eventBulks$.pipe(\r\n map((changeEventBulk: RxChangeEventBulk<any>) => changeEventBulk.checkpoint),\r\n );\r\n\r\n this._changeEventBuffer = createChangeEventBuffer<RxDocumentType>(this.asRxCollection);\r\n let documentConstructor: any;\r\n this._docCache = new DocumentCache(\r\n this.schema.primaryPath,\r\n this.eventBulks$.pipe(\r\n filter((bulk: RxChangeEventBulk<any>) => !bulk.isLocal),\r\n map((bulk: RxChangeEventBulk<any>) => bulk.events)\r\n ),\r\n docData => {\r\n if (!documentConstructor) {\r\n documentConstructor = getRxDocumentConstructor(this.asRxCollection);\r\n }\r\n return createNewRxDocument(this.asRxCollection, documentConstructor, docData);\r\n }\r\n );\r\n\r\n\r\n const listenToRemoveSub = this.database.internalStore.changeStream().pipe(\r\n filter((bulk: any) => {\r\n const key = this.name + '-' + this.schema.version;\r\n const found = bulk.events.find((event: any) => {\r\n return (\r\n event.documentData.context === 'collection' &&\r\n event.documentData.key === key &&\r\n event.operation === 'DELETE'\r\n );\r\n });\r\n return !!found;\r\n })\r\n ).subscribe(async () => {\r\n await this.close();\r\n await Promise.all(this.onRemove.map(fn => fn()));\r\n });\r\n this._subs.push(listenToRemoveSub);\r\n\r\n\r\n const databaseStorageToken = await this.database.storageToken;\r\n const subDocs = this.storageInstance.changeStream().subscribe((eventBulk: any) => {\r\n const changeEventBulk: RxChangeEventBulk<RxDocumentType | RxLocalDocumentData> = {\r\n id: eventBulk.id,\r\n isLocal: false,\r\n internal: false,\r\n collectionName: this.name,\r\n storageToken: databaseStorageToken,\r\n events: eventBulk.events,\r\n databaseToken: this.database.token,\r\n checkpoint: eventBulk.checkpoint,\r\n context: eventBulk.context\r\n };\r\n this.database.$emit(changeEventBulk);\r\n });\r\n this._subs.push(subDocs);\r\n\r\n return PROMISE_RESOLVE_VOID;\r\n }\r\n\r\n\r\n /**\r\n * Manually call the cleanup function of the storage.\r\n * @link https://rxdb.info/cleanup.html\r\n */\r\n cleanup(_minimumDeletedTime?: number): Promise<boolean> {\r\n ensureRxCollectionIsNotClosed(this);\r\n throw pluginMissing('cleanup');\r\n }\r\n\r\n // overwritten by migration-plugin\r\n migrationNeeded(): Promise<boolean> {\r\n throw pluginMissing('migration-schema');\r\n }\r\n getMigrationState(): RxMigrationState {\r\n throw pluginMissing('migration-schema');\r\n }\r\n startMigration(batchSize: number = 10): Promise<void> {\r\n ensureRxCollectionIsNotClosed(this);\r\n return this.getMigrationState().startMigration(batchSize);\r\n }\r\n migratePromise(batchSize: number = 10): Promise<any> {\r\n return this.getMigrationState().migratePromise(batchSize);\r\n }\r\n\r\n async insert(\r\n json: RxDocumentType | RxDocument\r\n ): Promise<RxDocument<RxDocumentType, OrmMethods>> {\r\n ensureRxCollectionIsNotClosed(this);\r\n const writeResult = await this.bulkInsert([json as any]);\r\n\r\n const isError = writeResult.error[0];\r\n throwIfIsStorageWriteError(this as any, (json as any)[this.schema.primaryPath] as any, json, isError as any);\r\n const insertResult = ensureNotFalsy(writeResult.success[0]);\r\n return insertResult;\r\n }\r\n\r\n async insertIfNotExists(\r\n json: RxDocumentType | RxDocument\r\n ): Promise<RxDocument<RxDocumentType, OrmMethods>> {\r\n const writeResult = await this.bulkInsert([json as any]);\r\n if (writeResult.error.length > 0) {\r\n const error = writeResult.error[0];\r\n if (error.status === 409) {\r\n const conflictDocData = error.documentInDb;\r\n return mapDocumentsDataToCacheDocs(this._docCache, [conflictDocData])[0];\r\n\r\n } else {\r\n throw error;\r\n }\r\n }\r\n return writeResult.success[0];\r\n }\r\n\r\n async bulkInsert(\r\n docsData: RxDocumentType[]\r\n ): Promise<{\r\n success: RxDocument<RxDocumentType, OrmMethods>[];\r\n error: RxStorageWriteError<RxDocumentType>[];\r\n }> {\r\n ensureRxCollectionIsNotClosed(this);\r\n /**\r\n * Optimization shortcut,\r\n * do nothing when called with an empty array\r\n */\r\n if (docsData.length === 0) {\r\n return {\r\n success: [],\r\n error: []\r\n };\r\n }\r\n\r\n const primaryPath = this.schema.primaryPath;\r\n\r\n const ids = new Set<string>();\r\n\r\n /**\r\n * This code is a bit redundant for better performance.\r\n * Instead of iterating multiple times,\r\n * we directly transform the input to a write-row array.\r\n */\r\n let insertRows: BulkWriteRow<RxDocumentType>[];\r\n if (this.hasHooks('pre', 'insert')) {\r\n insertRows = await Promise.all(\r\n docsData.map(docData => {\r\n const useDocData = fillObjectDataBeforeInsert(this.schema, docData);\r\n return this._runHooks('pre', 'insert', useDocData)\r\n .then(() => {\r\n ids.add((useDocData as any)[primaryPath]);\r\n return { document: useDocData };\r\n });\r\n })\r\n );\r\n } else {\r\n insertRows = new Array(docsData.length);\r\n const schema = this.schema;\r\n for (let index = 0; index < docsData.length; index++) {\r\n const docData = docsData[index];\r\n const useDocData = fillObjectDataBeforeInsert(schema, docData);\r\n ids.add((useDocData as any)[primaryPath]);\r\n insertRows[index] = { document: useDocData };\r\n }\r\n }\r\n\r\n\r\n if (ids.size !== docsData.length) {\r\n const duplicateIdSet = new Set<string>();\r\n const seenIds = new Set<string>();\r\n for (const row of insertRows) {\r\n const id = (row.document as any)[primaryPath];\r\n if (seenIds.has(id)) {\r\n duplicateIdSet.add(id);\r\n } else {\r\n seenIds.add(id);\r\n }\r\n }\r\n throw newRxError('COL22', {\r\n collection: this.name,\r\n duplicateIds: Array.from(duplicateIdSet),\r\n args: {\r\n documents: docsData\r\n }\r\n });\r\n }\r\n\r\n // Normalize any inline attachment inputs (compute digest/length from Blob)\r\n // Also converts array format to internal map format.\r\n // Only create promises for rows that actually need normalization to avoid\r\n // expensive await overhead on the hot path.\r\n if (this.schema.jsonSchema.attachments) {\r\n const normalizePromises: Promise<void>[] = [];\r\n for (const row of insertRows) {\r\n const doc: any = row.document;\r\n const atts = doc._attachments;\r\n if (atts == null || Object.keys(atts).length === 0) {\r\n doc._attachments = {};\r\n } else {\r\n normalizePromises.push(\r\n normalizeInlineAttachments(this.database.hashFunction, atts)\r\n .then(normalized => {\r\n doc._attachments = normalized;\r\n })\r\n );\r\n }\r\n }\r\n if (normalizePromises.length > 0) {\r\n await Promise.all(normalizePromises);\r\n }\r\n }\r\n\r\n const results = await this.storageInstance.bulkWrite(\r\n insertRows,\r\n RX_COLLECTION_BULK_INSERT_CONTEXT\r\n );\r\n\r\n\r\n /**\r\n * Often the user does not need to access the RxDocuments of the bulkInsert() call.\r\n * So we transform the data to RxDocuments only if needed to use less CPU performance.\r\n */\r\n let rxDocuments: RxDocument<RxDocumentType, OrmMethods>[];\r\n const collection = this;\r\n const ret = {\r\n get success() {\r\n if (!rxDocuments) {\r\n const success = getWrittenDocumentsFromBulkWriteResponse(\r\n collection.schema.primaryPath,\r\n insertRows,\r\n results\r\n );\r\n rxDocuments = mapDocumentsDataToCacheDocs<RxDocumentType, OrmMethods>(collection._docCache, success);\r\n }\r\n return rxDocuments;\r\n },\r\n error: results.error\r\n };\r\n\r\n if (this.hasHooks('post', 'insert')) {\r\n const docsMap: Map<string, RxDocumentType> = new Map();\r\n insertRows.forEach(row => {\r\n const doc = row.document;\r\n docsMap.set((doc as any)[primaryPath] as any, doc);\r\n });\r\n await Promise.all(\r\n ret.success.map(doc => {\r\n return this._runHooks(\r\n 'post',\r\n 'insert',\r\n docsMap.get(doc.primary),\r\n doc\r\n );\r\n })\r\n );\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n async bulkRemove(\r\n /**\r\n * You can either remove the documents by their ids\r\n * or by directly providing the RxDocument instances\r\n * if you have them already. This improves performance a bit.\r\n */\r\n idsOrDocs: string[] | RxDocument<RxDocumentType>[]\r\n ): Promise<{\r\n success: RxDocument<RxDocumentType, OrmMethods>[];\r\n error: RxStorageWriteError<RxDocumentType>[];\r\n }> {\r\n ensureRxCollectionIsNotClosed(this);\r\n const primaryPath = this.schema.primaryPath;\r\n /**\r\n * Optimization shortcut,\r\n * do nothing when called with an empty array\r\n */\r\n if (idsOrDocs.length === 0) {\r\n return {\r\n success: [],\r\n error: []\r\n };\r\n }\r\n\r\n let rxDocumentMap: Map<string, RxDocument<RxDocumentType, OrmMethods>>;\r\n if (typeof idsOrDocs[0] === 'string') {\r\n rxDocumentMap = await this.findByIds(idsOrDocs as string[]).exec();\r\n } else {\r\n rxDocumentMap = new Map();\r\n (idsOrDocs as RxDocument<RxDocumentType, OrmMethods>[]).forEach(d => rxDocumentMap.set(d.primary, d));\r\n }\r\n\r\n const docsData: RxDocumentData<RxDocumentType>[] = [];\r\n const docsMap: Map<string, RxDocumentData<RxDocumentType>> = new Map();\r\n Array.from(rxDocumentMap.values()).forEach(rxDocument => {\r\n const data: RxDocumentData<RxDocumentType> = rxDocument.toMutableJSON(true) as any;\r\n docsData.push(data);\r\n docsMap.set(rxDocument.primary, data);\r\n });\r\n\r\n await Promise.all(\r\n docsData.map(doc => {\r\n const primary = (doc as any)[this.schema.primaryPath];\r\n return this._runHooks('pre', 'remove', doc, rxDocumentMap.get(primary));\r\n })\r\n );\r\n const removeDocs: BulkWriteRow<RxDocumentType>[] = docsData.map(doc => {\r\n const writeDoc = flatClone(doc);\r\n writeDoc._deleted = true;\r\n return {\r\n previous: doc,\r\n document: writeDoc\r\n };\r\n });\r\n const results = await this.storageInstance.bulkWrite(\r\n removeDocs,\r\n 'rx-collection-bulk-remove'\r\n );\r\n\r\n\r\n const success = getWrittenDocumentsFromBulkWriteResponse(\r\n this.schema.primaryPath,\r\n removeDocs,\r\n results\r\n );\r\n\r\n const deletedRxDocuments: RxDocument<RxDocumentType, OrmMethods>[] = [];\r\n const successIds: string[] = success.map(d => {\r\n const id = d[primaryPath] as string;\r\n const doc = this._docCache.getCachedRxDocument(d);\r\n deletedRxDocuments.push(doc);\r\n return id;\r\n });\r\n\r\n // run hooks\r\n await Promise.all(\r\n successIds.map(id => {\r\n return this._runHooks(\r\n 'post',\r\n 'remove',\r\n docsMap.get(id),\r\n rxDocumentMap.get(id)\r\n );\r\n })\r\n );\r\n\r\n\r\n return {\r\n success: deletedRxDocuments,\r\n error: results.error\r\n };\r\n }\r\n\r\n /**\r\n * same as bulkInsert but overwrites existing document with same primary\r\n */\r\n async bulkUpsert(docsData: Partial<RxDocumentType>[], options?: UpsertOptions): Promise<{\r\n success: RxDocument<RxDocumentType, OrmMethods>[];\r\n error: RxStorageWriteError<RxDocumentType>[];\r\n }> {\r\n ensureRxCollectionIsNotClosed(this);\r\n const insertData: RxDocumentType[] = [];\r\n const useJsonByDocId: Map<string, RxDocumentType> = new Map();\r\n\r\n // First pass: synchronous work — schema filling and primary key validation\r\n const preparedDocs: RxDocumentType[] = [];\r\n for (const docData of docsData) {\r\n const useJson = fillObjectDataBeforeInsert(this.schema, docData);\r\n const primary: string = useJson[this.schema.primaryPath] as any;\r\n if (!primary) {\r\n throw newRxError('COL3', {\r\n primaryPath: this.schema.primaryPath as string,\r\n data: useJson,\r\n schema: this.schema.jsonSchema\r\n });\r\n }\r\n preparedDocs.push(useJson);\r\n }\r\n\r\n // Second pass: normalize inline attachments concurrently across all documents.\r\n // Only create promises for docs that actually need normalization to avoid\r\n // expensive await overhead on the hot path.\r\n if (this.schema.jsonSchema.attachments) {\r\n const normalizePromises: Promise<void>[] = [];\r\n for (const useJson of preparedDocs) {\r\n const atts = (useJson as any)._attachments;\r\n if (atts == null || Object.keys(atts).length === 0) {\r\n (useJson as any)._attachments = {};\r\n } else {\r\n normalizePromises.push(\r\n normalizeInlineAttachments(this.database.hashFunction, atts)\r\n .then(normalized => {\r\n (useJson as any)._attachments = normalized;\r\n })\r\n );\r\n }\r\n }\r\n if (normalizePromises.length > 0) {\r\n await Promise.all(normalizePromises);\r\n }\r\n }\r\n for (const useJson of preparedDocs) {\r\n const primary: string = (useJson as any)[this.schema.primaryPath];\r\n useJsonByDocId.set(primary, useJson);\r\n insertData.push(useJson);\r\n }\r\n\r\n const insertResult = await this.bulkInsert(insertData);\r\n const success = insertResult.success.slice(0);\r\n const error: RxStorageWriteError<RxDocumentType>[] = [];\r\n\r\n // update the ones that existed already\r\n await Promise.all(\r\n insertResult.error.map(async (err) => {\r\n if (err.status !== 409) {\r\n error.push(err);\r\n } else {\r\n const id = err.documentId;\r\n const writeData = getFromMapOrThrow(useJsonByDocId, id);\r\n const docDataInDb = ensureNotFalsy(err.documentInDb);\r\n const newAttachments = (writeData as any)._attachments;\r\n const deleteExisting = options?.deleteExistingAttachments === true;\r\n const newDoc = await this.incrementalWriteQueue.addWrite(\r\n docDataInDb,\r\n (docWriteData: any): any => {\r\n return Object.assign({}, writeData, {\r\n _attachments: deleteExisting\r\n ? newAttachments\r\n : Object.assign(\r\n {},\r\n docWriteData._attachments,\r\n newAttachments\r\n )\r\n });\r\n }\r\n ).then(writeResult => this._docCache.getCachedRxDocument(writeResult) as any);\r\n success.push(newDoc as any);\r\n }\r\n })\r\n );\r\n return {\r\n error,\r\n success\r\n };\r\n }\r\n\r\n /**\r\n * same as insert but overwrites existing document with same primary\r\n */\r\n async upsert(json: Partial<RxDocumentType>, options?: UpsertOptions): Promise<RxDocument<RxDocumentType, OrmMethods>> {\r\n ensureRxCollectionIsNotClosed(this);\r\n const bulkResult = await this.bulkUpsert([json], options);\r\n throwIfIsStorageWriteError<RxDocumentType>(\r\n this.asRxCollection,\r\n (json as any)[this.schema.primaryPath],\r\n json as any,\r\n bulkResult.error[0]\r\n );\r\n return bulkResult.success[0];\r\n }\r\n\r\n /**\r\n * upserts to a RxDocument, uses incrementalModify if document already exists\r\n */\r\n incrementalUpsert(json: Partial<RxDocumentType>, options?: UpsertOptions): Promise<RxDocument<RxDocumentType, OrmMethods>> {\r\n ensureRxCollectionIsNotClosed(this);\r\n const useJson = fillObjectDataBeforeInsert(this.schema, json);\r\n const primary: string = useJson[this.schema.primaryPath] as any;\r\n if (!primary) {\r\n throw newRxError('COL4', {\r\n data: json\r\n });\r\n }\r\n\r\n const hasAttachments = !!this.schema.jsonSchema.attachments;\r\n const deleteExisting = options?.deleteExistingAttachments === true;\r\n\r\n // ensure that it won't try 2 parallel runs\r\n let queue = this._incrementalUpsertQueues.get(primary);\r\n if (!queue) {\r\n queue = PROMISE_RESOLVE_VOID;\r\n }\r\n queue = queue\r\n // Normalize array-format attachments to map format\r\n .then(() => {\r\n if (hasAttachments) {\r\n const atts = (useJson as any)._attachments;\r\n if (atts == null || Object.keys(atts).length === 0) {\r\n return {};\r\n } else {\r\n return normalizeInlineAttachments(this.database.hashFunction, atts);\r\n }\r\n }\r\n return (useJson as any)._attachments;\r\n })\r\n .then((normalizedAttachments) => {\r\n (useJson as any)._attachments = normalizedAttachments;\r\n return _incrementalUpsertEnsureRxDocumentExists(this as any, primary as any, useJson);\r\n })\r\n .then((wasInserted) => {\r\n if (!wasInserted.inserted) {\r\n const doc = wasInserted.doc;\r\n const newAttachments = (useJson as any)._attachments;\r\n return this.incrementalWriteQueue.addWrite(\r\n doc._data as RxDocumentData<RxDocumentType>,\r\n (docWriteData: any): any => {\r\n return Object.assign({}, useJson, {\r\n _attachments: deleteExisting\r\n ? newAttachments\r\n : Object.assign(\r\n {},\r\n docWriteData._attachments,\r\n newAttachments\r\n )\r\n });\r\n }\r\n ).then(writeResult => this._docCache.getCachedRxDocument(writeResult) as any);\r\n } else {\r\n return wasInserted.doc;\r\n }\r\n });\r\n this._incrementalUpsertQueues.set(primary, queue);\r\n return queue;\r\n }\r\n\r\n find(queryObj?: MangoQuery<RxDocumentType>): RxQuery<\r\n RxDocumentType,\r\n RxDocument<RxDocumentType, OrmMethods>[],\r\n OrmMethods,\r\n Reactivity\r\n > {\r\n ensureRxCollectionIsNotClosed(this);\r\n\r\n runPluginHooks('prePrepareRxQuery', {\r\n op: 'find',\r\n queryObj,\r\n collection: this\r\n });\r\n\r\n if (!queryObj) {\r\n queryObj = _getDefaultQuery();\r\n }\r\n\r\n const query = createRxQuery('find', queryObj, this as any);\r\n return query as any;\r\n }\r\n\r\n findOne(\r\n queryObj?: MangoQueryNoLimit<RxDocumentType> | string\r\n ): RxQuery<\r\n RxDocumentType,\r\n RxDocument<RxDocumentType, OrmMethods> | null,\r\n OrmMethods,\r\n Reactivity\r\n > {\r\n ensureRxCollectionIsNotClosed(this);\r\n\r\n runPluginHooks('prePrepareRxQuery', {\r\n op: 'findOne',\r\n queryObj,\r\n collection: this\r\n });\r\n\r\n let query;\r\n\r\n if (typeof queryObj === 'string') {\r\n query = createRxQuery('findOne', {\r\n selector: {\r\n [this.schema.primaryPath]: queryObj\r\n },\r\n limit: 1\r\n }, this as any);\r\n } else {\r\n if (!queryObj) {\r\n queryObj = _getDefaultQuery();\r\n }\r\n\r\n // cannot have limit on findOne queries because it will be overwritten\r\n if ((queryObj as MangoQuery).limit) {\r\n throw newRxError('QU6');\r\n }\r\n\r\n queryObj = flatClone(queryObj);\r\n (queryObj as any).limit = 1;\r\n query = createRxQuery<RxDocumentType>('findOne', queryObj, this as any);\r\n }\r\n\r\n\r\n return query as any;\r\n }\r\n\r\n count(queryObj?: MangoQuerySelectorAndIndex<RxDocumentType>): RxQuery<\r\n RxDocumentType,\r\n number,\r\n OrmMethods,\r\n Reactivity\r\n > {\r\n ensureRxCollectionIsNotClosed(this);\r\n if (!queryObj) {\r\n queryObj = _getDefaultQuery();\r\n }\r\n const query = createRxQuery('count', queryObj, this as any);\r\n return query as any;\r\n }\r\n\r\n /**\r\n * find a list documents by their primary key\r\n * has way better performance then running multiple findOne() or a find() with a complex $or-selected\r\n */\r\n findByIds(\r\n ids: string[]\r\n ): RxQuery<\r\n RxDocumentType,\r\n Map<string, RxDocument<RxDocumentType, OrmMethods>>,\r\n OrmMethods,\r\n Reactivity\r\n > {\r\n ensureRxCollectionIsNotClosed(this);\r\n const mangoQuery: MangoQuery<RxDocumentType> = {\r\n selector: {\r\n [this.schema.primaryPath]: {\r\n $in: ids.slice(0)\r\n }\r\n } as any\r\n };\r\n const query = createRxQuery('findByIds', mangoQuery, this as any);\r\n return query as any;\r\n }\r\n\r\n /**\r\n * Export collection to a JSON friendly format.\r\n */\r\n exportJSON(): Promise<RxDumpCollection<RxDocumentType>>;\r\n exportJSON(): Promise<RxDumpCollectionAny<RxDocumentType>>;\r\n exportJSON(): Promise<any> {\r\n throw pluginMissing('json-dump');\r\n }\r\n\r\n /**\r\n * Import the parsed JSON export into the collection.\r\n * @param _exportedJSON The previously exported data from the `<collection>.exportJSON()` method.\r\n */\r\n importJSON(_exportedJSON: RxDumpCollectionAny<RxDocumentType>): Promise<void> {\r\n throw pluginMissing('json-dump');\r\n }\r\n\r\n registerWebMCP(_options?: WebMCPOptions): { error$: Subject<Error>; log$: Subject<WebMCPLogEvent>; } {\r\n throw pluginMissing('webmcp');\r\n }\r\n\r\n insertCRDT(_updateObj: CRDTEntry<any> | CRDTEntry<any>[]): RxDocument<RxDocumentType, OrmMethods> {\r\n throw pluginMissing('crdt');\r\n }\r\n\r\n\r\n addPipeline(_options: RxPipelineOptions<RxDocumentType>): Promise<RxPipeline<RxDocumentType>> {\r\n throw pluginMissing('pipeline');\r\n }\r\n\r\n /**\r\n * HOOKS\r\n */\r\n addHook(when: HookWhenType, key: HookKeyType, fun: any, parallel = false) {\r\n if (typeof fun !== 'function') {\r\n throw newRxTypeError('COL7', {\r\n key,\r\n when\r\n });\r\n }\r\n\r\n if (!HOOKS_WHEN.includes(when)) {\r\n throw newRxTypeError('COL8', {\r\n key,\r\n when\r\n });\r\n }\r\n\r\n if (!HOOKS_KEYS.includes(key)) {\r\n throw newRxError('COL9', {\r\n key\r\n });\r\n }\r\n\r\n if (when === 'post' && key === 'create' && parallel === true) {\r\n throw newRxError('COL10', {\r\n when,\r\n key,\r\n parallel\r\n });\r\n }\r\n\r\n // bind this-scope to hook-function\r\n const boundFun = fun.bind(this);\r\n\r\n const runName = parallel ? 'parallel' : 'series';\r\n\r\n this.hooks[key] = this.hooks[key] || {};\r\n this.hooks[key][when] = this.hooks[key][when] || {\r\n series: [],\r\n parallel: []\r\n };\r\n this.hooks[key][when][runName].push(boundFun);\r\n }\r\n\r\n getHooks(when: HookWhenType, key: HookKeyType) {\r\n if (\r\n !this.hooks[key] ||\r\n !this.hooks[key][when]\r\n ) {\r\n return {\r\n series: [],\r\n parallel: []\r\n };\r\n }\r\n return this.hooks[key][when];\r\n }\r\n\r\n hasHooks(when: HookWhenType, key: HookKeyType) {\r\n /**\r\n * Performance shortcut\r\n * so that we not have to build the empty object.\r\n */\r\n if (\r\n !this.hooks[key] ||\r\n !this.hooks[key][when]\r\n ) {\r\n return false;\r\n }\r\n\r\n const hooks = this.getHooks(when, key);\r\n if (!hooks) {\r\n return false;\r\n }\r\n return hooks.series.length > 0 || hooks.parallel.length > 0;\r\n }\r\n\r\n _runHooks(when: HookWhenType, key: HookKeyType, data: any, instance?: any): Promise<any> {\r\n const hooks = this.getHooks(when, key);\r\n\r\n if (!hooks) {\r\n return PROMISE_RESOLVE_VOID;\r\n }\r\n\r\n // run parallel: false\r\n const tasks = hooks.series.map((hook: any) => () => hook(data, instance));\r\n return promiseSeries(tasks)\r\n // run parallel: true\r\n .then(() => Promise.all(\r\n hooks.parallel\r\n .map((hook: any) => hook(data, instance))\r\n ));\r\n }\r\n\r\n /**\r\n * does the same as ._runHooks() but with non-async-functions\r\n */\r\n _runHooksSync(when: HookWhenType, key: HookKeyType, data: any, instance: any) {\r\n if (!this.hasHooks(when, key)) {\r\n return;\r\n }\r\n const hooks = this.getHooks(when, key);\r\n if (!hooks) return;\r\n hooks.series.forEach((hook: any) => hook(data, instance));\r\n }\r\n\r\n /**\r\n * Returns a promise that resolves after the given time.\r\n * Ensures that is properly cleans up when the collection is closed\r\n * so that no running timeouts prevent the exit of the JavaScript process.\r\n */\r\n promiseWait(time: number): Promise<void> {\r\n const ret = new Promise<void>(res => {\r\n const timeout = setTimeout(() => {\r\n this.timeouts.delete(timeout);\r\n res();\r\n }, time);\r\n this.timeouts.add(timeout);\r\n });\r\n return ret;\r\n }\r\n\r\n async close(): Promise<boolean> {\r\n if (this.closed) {\r\n return PROMISE_RESOLVE_FALSE;\r\n }\r\n\r\n OPEN_COLLECTIONS.delete(this);\r\n\r\n\r\n await Promise.all(this.onClose.map(fn => fn()));\r\n\r\n /**\r\n * Settings closed = true\r\n * must be the first thing to do,\r\n * so for example the replication can directly stop\r\n * instead of sending requests to a closed storage.\r\n */\r\n this.closed = true;\r\n\r\n\r\n Array.from(this.timeouts).forEach(timeout => clearTimeout(timeout));\r\n if (this._changeEventBuffer) {\r\n this._changeEventBuffer.close();\r\n }\r\n /**\r\n * First wait until the whole database is idle.\r\n * This ensures that the storage does not get closed\r\n * while some operation is running.\r\n * It is important that we do not intercept a running call\r\n * because it might lead to undefined behavior like when a doc is written\r\n * but the change is not added to the changes collection.\r\n */\r\n return this.database.requestIdlePromise()\r\n .then(() => this.storageInstance.close())\r\n .then(() => {\r\n /**\r\n * Unsubscribing must be done AFTER the storageInstance.close()\r\n * Because the conflict handling is part of the subscriptions and\r\n * otherwise there might be open conflicts to be resolved which\r\n * will then stuck and never resolve.\r\n */\r\n this._subs.forEach(sub => sub.unsubscribe());\r\n\r\n delete this.database.collections[this.name];\r\n this.database.collectionsSubject$.next({\r\n collection: this.asRxCollection,\r\n type: 'CLOSED'\r\n });\r\n return runAsyncPluginHooks('postCloseRxCollection', this).then(() => true);\r\n });\r\n }\r\n\r\n /**\r\n * remove all data of the collection\r\n */\r\n async remove(): Promise<any> {\r\n await this.close();\r\n await Promise.all(this.onRemove.map(fn => fn()));\r\n /**\r\n * TODO here we should pass the already existing\r\n * storage instances instead of creating new ones.\r\n */\r\n await removeCollectionStorages(\r\n this.database.storage,\r\n this.database.internalStore,\r\n this.database.token,\r\n this.database.name,\r\n this.name,\r\n this.database.multiInstance,\r\n this.database.password,\r\n this.database.hashFunction\r\n );\r\n }\r\n\r\n get asRxCollection(): RxCollection<RxDocumentType, OrmMethods, StaticMethods, any, Reactivity> {\r\n return this as any;\r\n }\r\n}\r\n\r\n/**\r\n * adds the hook-functions to the collections prototype\r\n * this runs only once\r\n */\r\nfunction _applyHookFunctions(\r\n collection: RxCollection<any, any>\r\n) {\r\n if (hooksApplied) return; // already run\r\n hooksApplied = true;\r\n const colProto = Object.getPrototypeOf(collection);\r\n HOOKS_KEYS.forEach(key => {\r\n HOOKS_WHEN.map(when => {\r\n const fnName = when + ucfirst(key);\r\n colProto[fnName] = function (fun: string, parallel: boolean) {\r\n return this.addHook(when, key, fun, parallel);\r\n };\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * ensures that the given document exists\r\n * @return promise that resolves with new doc and flag if inserted\r\n */\r\nfunction _incrementalUpsertEnsureRxDocumentExists<RxDocType>(\r\n rxCollection: RxCollection<RxDocType>,\r\n primary: string,\r\n json: any\r\n): Promise<\r\n {\r\n doc: RxDocument<RxDocType>;\r\n inserted: boolean;\r\n }\r\n> {\r\n /**\r\n * Optimisation shortcut,\r\n * first try to find the document in the doc-cache\r\n */\r\n const docDataFromCache = rxCollection._docCache.getLatestDocumentDataIfExists(primary);\r\n if (docDataFromCache) {\r\n return Promise.resolve({\r\n doc: rxCollection._docCache.getCachedRxDocuments([docDataFromCache])[0],\r\n inserted: false\r\n });\r\n }\r\n return rxCollection.findOne(primary).exec()\r\n .then(doc => {\r\n if (!doc) {\r\n return rxCollection.insert(json)\r\n .then(newDoc => ({\r\n doc: newDoc,\r\n inserted: true\r\n }))\r\n .catch((err) => {\r\n /**\r\n * If the insert fails with a conflict error,\r\n * it means another concurrent operation already\r\n * inserted a document with the same primary key\r\n * between our findOne() and insert() calls.\r\n * Re-run the whole function which will now find the\r\n * existing document via cache or query.\r\n */\r\n if ((err as any).code === 'CONFLICT') {\r\n return _incrementalUpsertEnsureRxDocumentExists(rxCollection, primary, json);\r\n }\r\n throw err;\r\n });\r\n } else {\r\n return {\r\n doc,\r\n inserted: false\r\n };\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * creates and prepares a new collection\r\n */\r\nexport async function createRxCollection(\r\n {\r\n database,\r\n name,\r\n schema,\r\n instanceCreationOptions = {},\r\n migrationStrategies = {},\r\n autoMigrate = true,\r\n statics = {},\r\n methods = {},\r\n attachments = {},\r\n options = {},\r\n localDocuments = false,\r\n cacheReplacementPolicy = defaultCacheReplacementPolicy,\r\n conflictHandler = defaultConflictHandler,\r\n storageInstance\r\n }: any\r\n): Promise<RxCollection> {\r\n if (!storageInstance) {\r\n const storageInstanceCreationParams: RxStorageInstanceCreationParams<any, any> = {\r\n databaseInstanceToken: database.token,\r\n databaseName: database.name,\r\n collectionName: name,\r\n schema: schema.jsonSchema,\r\n options: instanceCreationOptions,\r\n multiInstance: database.multiInstance,\r\n password: database.password,\r\n devMode: overwritable.isDevMode()\r\n };\r\n\r\n runPluginHooks(\r\n 'preCreateRxStorageInstance',\r\n storageInstanceCreationParams\r\n );\r\n\r\n storageInstance = await createRxCollectionStorageInstance(\r\n database,\r\n storageInstanceCreationParams\r\n );\r\n }\r\n\r\n const collection = new RxCollectionBase(\r\n database,\r\n name,\r\n schema,\r\n storageInstance,\r\n instanceCreationOptions,\r\n migrationStrategies,\r\n methods,\r\n attachments,\r\n options,\r\n cacheReplacementPolicy,\r\n statics,\r\n conflictHandler\r\n );\r\n\r\n try {\r\n await collection.prepare();\r\n\r\n // ORM add statics\r\n Object\r\n .entries(statics)\r\n .forEach(([funName, fun]) => {\r\n Object.defineProperty(collection, funName, {\r\n get: () => (fun as any).bind(collection)\r\n });\r\n });\r\n\r\n runPluginHooks('createRxCollection', {\r\n collection,\r\n creator: {\r\n name,\r\n schema,\r\n storageInstance,\r\n instanceCreationOptions,\r\n migrationStrategies,\r\n methods,\r\n attachments,\r\n options,\r\n cacheReplacementPolicy,\r\n localDocuments,\r\n statics\r\n }\r\n });\r\n\r\n /**\r\n * Migration must run after the hooks so that the\r\n * dev-mode can check up front if the\r\n * migration strategies are correctly set.\r\n */\r\n if (autoMigrate && collection.schema.version !== 0) {\r\n await collection.migratePromise();\r\n }\r\n\r\n } catch (err) {\r\n /**\r\n * If the collection creation fails,\r\n * we yet have to close the storage instances.\r\n */\r\n OPEN_COLLECTIONS.delete(collection);\r\n await storageInstance.close();\r\n throw err;\r\n }\r\n\r\n return collection as any;\r\n}\r\n\r\nexport function isRxCollection(obj: any): boolean {\r\n return obj instanceof RxCollectionBase;\r\n}\r\n"],"mappings":"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","ignoreList":[]}
@@ -407,7 +407,8 @@ export var RxDatabaseBase = /*#__PURE__*/function () {
407
407
  }
408
408
  var {
409
409
  promise,
410
- resolve
410
+ resolve,
411
+ reject
411
412
  } = createPromiseWithResolvers();
412
413
  var resolveClosePromise = result => {
413
414
  if (this.onClosed) {
@@ -442,12 +443,36 @@ export var RxDatabaseBase = /*#__PURE__*/function () {
442
443
  /**
443
444
  * First wait until the database is idle
444
445
  */
445
- return this.requestIdlePromise().then(() => Promise.all(this.onClose.map(fn => fn())))
446
+ await this.requestIdlePromise();
447
+ var closingError = null;
448
+ try {
449
+ await Promise.all(this.onClose.map(fn => fn()));
450
+ } catch (err) {
451
+ closingError = err;
452
+ }
453
+
446
454
  // close all collections
447
- .then(() => Promise.all(Object.keys(this.collections).map(key => this.collections[key]).map(col => col.close())))
455
+ await Promise.all(Object.keys(this.collections).map(key => this.collections[key]).map(col => col.close()));
456
+
448
457
  // close internal storage instances
449
- .then(() => this.internalStore.close()).then(() => resolveClosePromise(true));
450
- })();
458
+ await this.internalStore.close();
459
+ if (closingError) {
460
+ throw closingError;
461
+ }
462
+ resolveClosePromise(true);
463
+ })().catch(err => {
464
+ /**
465
+ * If an error occurs during closing,
466
+ * we still have to mark the database as closed
467
+ * and clean up the instance tracking so that
468
+ * a new database with the same name can be created.
469
+ */
470
+ if (this.onClosed) {
471
+ this.onClosed();
472
+ }
473
+ this.closed = true;
474
+ reject(err);
475
+ });
451
476
  return promise;
452
477
  }
453
478
 
@@ -455,8 +480,16 @@ export var RxDatabaseBase = /*#__PURE__*/function () {
455
480
  * deletes the database and its stored data.
456
481
  * Returns the names of all removed collections.
457
482
  */;
458
- _proto.remove = function remove() {
459
- return this.close().then(() => removeRxDatabase(this.name, this.storage, this.multiInstance, this.password));
483
+ _proto.remove = async function remove() {
484
+ /**
485
+ * Collect all collection onRemove handlers before closing,
486
+ * because close() will clear the collections and unsubscribe
487
+ * all listeners, making it impossible to trigger onRemove afterwards.
488
+ */
489
+ var collections = Object.values(this.collections);
490
+ await this.close();
491
+ await Promise.all(collections.map(col => Promise.all(col.onRemove.map(fn => fn()))));
492
+ return removeRxDatabase(this.name, this.storage, this.multiInstance, this.password);
460
493
  };
461
494
  _proto.registerWebMCP = function registerWebMCP(_options) {
462
495
  throw pluginMissing('webmcp');