@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":"schema-objects.js","names":["schemas","ensureNotFalsy","lastOfArray","randomNumber","TEST_DATA_CHARSET","TEST_DATA_CHARSET_LAST_SORTED","split","sort","someEmojisArr","baseChars","allChars","slice","concat","randomStringWithSpecialChars","minLength","maxLength","text","Error","length","Math","floor","random","humanData","passportId","age","firstName","lastName","simpleHumanData","simpleHumanV3Data","partial","defaultObj","Object","assign","simpleHumanAge","humanWithSubOther","other","NoIndexHuman","nestedHumanData","mainSkill","name","level","deepNestedHumanData","attack","good","count","bigHumanDocumentType","dnaHash","heroArrayData","skills","Array","fill","map","damage","simpleHeroArray","encryptedHumanData","secret","encryptedObjectHumanData","subname","encryptedDeepHumanDocumentType","firstLevelPassword","secretData","pw","deepSecret","darkhole","nestedSecret","compoundIndexData","passportCountry","compoundIndexNoStringData","nostringIndex","refHumanData","bestFriend","refHumanNestedData","foo","humanWithTimestampData","givenData","ret","id","updatedAt","Date","now","averageSchemaForFieldLength","averageSchema","averageSchemaData","properties","var1","var2","maximum","deep","deep1","deep2","deeper","deepNr","list","pointData","x","y","humanWithIdAndAgeIndexDocumentType","humanWithCompositePrimary","info","humanWithOwnershipData","owner"],"sources":["../../../../src/plugins/test-utils/schema-objects.ts"],"sourcesContent":["/**\r\n * this file contains objects which match the schemas in schemas.js\r\n */\r\nimport { HumanDocumentType } from './schemas.ts';\r\nimport * as schemas from './schemas.ts';\r\nimport {\r\n ensureNotFalsy,\r\n lastOfArray,\r\n randomNumber\r\n} from '../utils/index.ts';\r\n\r\n\r\n/**\r\n * Some storages had problems with umlauts and other special chars.\r\n * So we add these to all test strings.\r\n */\r\nexport const TEST_DATA_CHARSET = '0987654321ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzäöüÖÄßÜ[]{}\\'';\r\nexport const TEST_DATA_CHARSET_LAST_SORTED = ensureNotFalsy(lastOfArray(TEST_DATA_CHARSET.split('').sort()));\r\nconst someEmojisArr = ['😊', '💩', '👵', '🍌', '🏳️‍🌈', '😃'];\r\n\r\nconst baseChars = TEST_DATA_CHARSET.split('');\r\nlet allChars = baseChars.slice(0);\r\nallChars = allChars.concat(someEmojisArr);\r\n\r\nexport function randomStringWithSpecialChars(\r\n minLength: number,\r\n /**\r\n * It has shown that alternating string lengths\r\n * can reproduce various problems. So by having variable\r\n * lengths we ensure that this fully works.\r\n */\r\n maxLength: number\r\n) {\r\n let text = '';\r\n\r\n if (!minLength || !maxLength || minLength > maxLength) {\r\n throw new Error('invalid length given ' + minLength + ' ' + maxLength);\r\n }\r\n\r\n const length = randomNumber(minLength, maxLength);\r\n\r\n while (text.length < length) {\r\n if (text.length === 0) {\r\n /**\r\n * TODO foundationdb does not work correctly when an index string starts\r\n * with an emoji. This can likely be fixed by upgrading foundationdb to the\r\n * latest version.\r\n */\r\n text += baseChars[Math.floor(Math.random() * baseChars.length)];\r\n } else {\r\n text += allChars[Math.floor(Math.random() * allChars.length)];\r\n }\r\n }\r\n\r\n /**\r\n * Because emojis can have a string.length of 2,\r\n * we can sometimes end up with strings that are longer\r\n * than the provided length. In that cases we have to rerun.\r\n */\r\n if (text.length > length) {\r\n return randomStringWithSpecialChars(minLength, maxLength);\r\n }\r\n\r\n return text;\r\n}\r\n\r\nexport interface SimpleHumanDocumentType {\r\n passportId: string;\r\n firstName: string;\r\n lastName: string;\r\n}\r\n\r\nexport function humanData(\r\n passportId: string = randomStringWithSpecialChars(8, 12),\r\n age: number = randomNumber(10, 50),\r\n firstName: string = randomStringWithSpecialChars(8, 12)\r\n): HumanDocumentType {\r\n return {\r\n passportId: passportId,\r\n firstName,\r\n lastName: randomStringWithSpecialChars(8, 12),\r\n age\r\n };\r\n}\r\n\r\nexport function simpleHumanData(): SimpleHumanDocumentType {\r\n return {\r\n passportId: randomStringWithSpecialChars(8, 12),\r\n firstName: randomStringWithSpecialChars(8, 12),\r\n lastName: randomStringWithSpecialChars(8, 12)\r\n };\r\n}\r\n\r\nexport interface SimpleHumanV3DocumentType {\r\n passportId: string;\r\n age: number;\r\n oneOptional?: string;\r\n}\r\nexport function simpleHumanV3Data(partial: Partial<SimpleHumanV3DocumentType> = {}): SimpleHumanV3DocumentType {\r\n const defaultObj = {\r\n passportId: randomStringWithSpecialChars(8, 12),\r\n age: randomNumber(10, 50)\r\n };\r\n return Object.assign(\r\n defaultObj,\r\n partial\r\n );\r\n}\r\n\r\nexport interface SimpleHumanAgeDocumentType {\r\n passportId: string;\r\n age: string;\r\n}\r\nexport function simpleHumanAge(partial: Partial<SimpleHumanAgeDocumentType> = {}): SimpleHumanAgeDocumentType {\r\n const defaultObj = {\r\n passportId: randomStringWithSpecialChars(8, 12),\r\n age: randomNumber(10, 50) + ''\r\n };\r\n return Object.assign(\r\n defaultObj,\r\n partial\r\n );\r\n}\r\n\r\nexport interface HumanWithSubOtherDocumentType {\r\n passportId: string;\r\n other: {\r\n age: number;\r\n };\r\n}\r\nexport function humanWithSubOther(): HumanWithSubOtherDocumentType {\r\n return {\r\n passportId: randomStringWithSpecialChars(8, 12),\r\n other: {\r\n age: randomNumber(10, 50)\r\n }\r\n };\r\n}\r\n\r\nexport interface NoIndexHumanDocumentType {\r\n firstName: string;\r\n lastName: string;\r\n}\r\nexport function NoIndexHuman(): NoIndexHumanDocumentType {\r\n return {\r\n firstName: randomStringWithSpecialChars(8, 12),\r\n lastName: randomStringWithSpecialChars(8, 12)\r\n };\r\n}\r\n\r\nexport interface NestedHumanDocumentType {\r\n passportId: string;\r\n firstName: string;\r\n mainSkill: {\r\n name: string;\r\n level: number;\r\n };\r\n}\r\nexport function nestedHumanData(partial: Partial<NestedHumanDocumentType> = {}): NestedHumanDocumentType {\r\n const defaultObj = {\r\n passportId: randomStringWithSpecialChars(8, 12),\r\n firstName: randomStringWithSpecialChars(8, 12),\r\n mainSkill: {\r\n name: randomStringWithSpecialChars(4, 6),\r\n level: 5\r\n }\r\n };\r\n return Object.assign(\r\n defaultObj,\r\n partial\r\n );\r\n}\r\n\r\nexport interface DeepNestedHumanDocumentType {\r\n passportId: string;\r\n mainSkill: {\r\n name: string;\r\n attack: {\r\n good: boolean;\r\n count: number;\r\n };\r\n };\r\n}\r\nexport function deepNestedHumanData(): DeepNestedHumanDocumentType {\r\n return {\r\n passportId: randomStringWithSpecialChars(8, 12),\r\n mainSkill: {\r\n name: randomStringWithSpecialChars(4, 6),\r\n attack: {\r\n good: false,\r\n count: 5\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport interface BigHumanDocumentType {\r\n passportId: string;\r\n dnaHash: string;\r\n firstName: string;\r\n lastName: string;\r\n age: number;\r\n}\r\nexport function bigHumanDocumentType(): BigHumanDocumentType {\r\n return {\r\n passportId: randomStringWithSpecialChars(8, 12),\r\n dnaHash: randomStringWithSpecialChars(8, 12),\r\n firstName: randomStringWithSpecialChars(8, 12),\r\n lastName: randomStringWithSpecialChars(8, 12),\r\n age: randomNumber(10, 50)\r\n };\r\n}\r\n\r\nexport interface HeroArrayDocumentType {\r\n name: string;\r\n skills: {\r\n name: string;\r\n damage: number;\r\n }[];\r\n}\r\nexport function heroArrayData(): HeroArrayDocumentType {\r\n return {\r\n name: randomStringWithSpecialChars(6, 8),\r\n skills: new Array(3).fill(0).map(() => {\r\n return {\r\n name: randomStringWithSpecialChars(4, 6),\r\n damage: randomNumber(10, 50)\r\n };\r\n })\r\n };\r\n}\r\n\r\nexport interface SimpleHeroArrayDocumentType {\r\n name: string;\r\n skills: string[];\r\n}\r\nexport function simpleHeroArray(partial: Partial<SimpleHeroArrayDocumentType> = {}): SimpleHeroArrayDocumentType {\r\n const defaultObj = {\r\n name: randomStringWithSpecialChars(6, 8),\r\n skills: new Array(3).fill(0).map(() => randomStringWithSpecialChars(3, 6))\r\n };\r\n return Object.assign(\r\n defaultObj,\r\n partial\r\n );\r\n}\r\n\r\nexport interface EncryptedHumanDocumentType {\r\n passportId: string;\r\n firstName: string;\r\n secret: string;\r\n}\r\nexport function encryptedHumanData(secret = randomStringWithSpecialChars(8, 12)): EncryptedHumanDocumentType {\r\n return {\r\n passportId: randomStringWithSpecialChars(8, 12),\r\n firstName: randomStringWithSpecialChars(8, 12),\r\n secret\r\n };\r\n}\r\n\r\nexport interface EncryptedObjectHumanDocumentType {\r\n passportId: string;\r\n firstName: string;\r\n secret: {\r\n name: string;\r\n subname: string;\r\n };\r\n}\r\nexport function encryptedObjectHumanData(): EncryptedObjectHumanDocumentType {\r\n return {\r\n passportId: randomStringWithSpecialChars(8, 12),\r\n firstName: randomStringWithSpecialChars(8, 12),\r\n secret: {\r\n name: randomStringWithSpecialChars(8, 12),\r\n subname: randomStringWithSpecialChars(8, 12)\r\n }\r\n };\r\n}\r\n\r\nexport interface EncryptedDeepHumanDocumentType {\r\n passportId: string;\r\n firstName: string;\r\n firstLevelPassword: string;\r\n secretData: {\r\n pw: string;\r\n };\r\n deepSecret: {\r\n darkhole: {\r\n pw: string;\r\n };\r\n };\r\n nestedSecret: {\r\n darkhole: {\r\n pw: string;\r\n };\r\n };\r\n}\r\nexport function encryptedDeepHumanDocumentType(): EncryptedDeepHumanDocumentType {\r\n return {\r\n passportId: randomStringWithSpecialChars(8, 12),\r\n firstName: randomStringWithSpecialChars(8, 12),\r\n firstLevelPassword: randomStringWithSpecialChars(8, 12),\r\n secretData: {\r\n pw: randomStringWithSpecialChars(8, 12)\r\n },\r\n deepSecret: {\r\n darkhole: {\r\n pw: randomStringWithSpecialChars(8, 12)\r\n }\r\n },\r\n nestedSecret: {\r\n darkhole: {\r\n pw: randomStringWithSpecialChars(8, 12)\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport interface CompoundIndexDocumentType {\r\n passportId: string;\r\n passportCountry: string;\r\n age: number;\r\n}\r\nexport function compoundIndexData(): CompoundIndexDocumentType {\r\n return {\r\n passportId: randomStringWithSpecialChars(8, 12),\r\n passportCountry: randomStringWithSpecialChars(8, 12),\r\n age: randomNumber(10, 50)\r\n };\r\n}\r\n\r\nexport interface CompoundIndexNoStringDocumentType {\r\n passportId: string;\r\n passportCountry: { [prop: string]: string; };\r\n age: number;\r\n}\r\nexport function compoundIndexNoStringData(): CompoundIndexNoStringDocumentType {\r\n return {\r\n passportId: randomStringWithSpecialChars(8, 12),\r\n passportCountry: { [randomStringWithSpecialChars(8, 12)]: randomStringWithSpecialChars(8, 12) },\r\n age: randomNumber(10, 50)\r\n };\r\n}\r\n\r\nexport interface NostringIndexDocumentType {\r\n passportId: {};\r\n firstName: string;\r\n}\r\nexport function nostringIndex(): NostringIndexDocumentType {\r\n return {\r\n passportId: {},\r\n firstName: randomStringWithSpecialChars(8, 12)\r\n };\r\n}\r\n\r\nexport interface RefHumanDocumentType {\r\n name: string;\r\n bestFriend: string;\r\n}\r\nexport function refHumanData(bestFriend?: string): RefHumanDocumentType {\r\n return {\r\n name: randomStringWithSpecialChars(8, 12),\r\n bestFriend\r\n } as any;\r\n}\r\n\r\nexport interface RefHumanNestedDocumentType {\r\n name: string;\r\n foo: {\r\n bestFriend: string;\r\n };\r\n}\r\nexport function refHumanNestedData(bestFriend?: string): RefHumanNestedDocumentType {\r\n return {\r\n name: randomStringWithSpecialChars(8, 12),\r\n foo: {\r\n bestFriend\r\n } as any\r\n };\r\n}\r\nexport interface HumanWithTimestampNestedDocumentType extends HumanWithTimestampDocumentType {\r\n address?: {\r\n street: string;\r\n suite: string;\r\n city: string;\r\n zipcode: string;\r\n geo: {\r\n lat: string;\r\n lng: string;\r\n };\r\n }\r\n}\r\n\r\nexport interface HumanWithTimestampDocumentType {\r\n id: string;\r\n name: string;\r\n age: number;\r\n updatedAt: number;\r\n deletedAt?: number;\r\n}\r\nexport function humanWithTimestampData(givenData: Partial<HumanWithTimestampDocumentType> = {}): HumanWithTimestampDocumentType {\r\n let ret = {\r\n id: randomStringWithSpecialChars(8, 12),\r\n name: randomStringWithSpecialChars(8, 12),\r\n age: randomNumber(1, 100),\r\n // use some time in the past week\r\n updatedAt: Date.now()\r\n };\r\n ret = Object.assign({}, ret, givenData);\r\n return ret;\r\n}\r\n\r\nexport interface AverageSchemaDocumentType {\r\n id: string;\r\n var1: string;\r\n var2: number;\r\n deep: {\r\n deep1: string;\r\n deep2: string;\r\n deeper: {\r\n deepNr: number;\r\n };\r\n };\r\n list: {\r\n deep1: string;\r\n deep2: string;\r\n }[];\r\n}\r\n\r\n\r\nconst averageSchemaForFieldLength = schemas.averageSchema() as any;\r\nexport function averageSchemaData(\r\n partial: Partial<AverageSchemaDocumentType> = {}\r\n): AverageSchemaDocumentType {\r\n return Object.assign(\r\n {},\r\n {\r\n id: randomStringWithSpecialChars(ensureNotFalsy(averageSchemaForFieldLength.properties.id.maxLength - 1), ensureNotFalsy(averageSchemaForFieldLength.properties.id.maxLength)),\r\n var1: randomStringWithSpecialChars(ensureNotFalsy(averageSchemaForFieldLength.properties.var1.maxLength) - 3, ensureNotFalsy(averageSchemaForFieldLength.properties.var1.maxLength)),\r\n var2: randomNumber(100, ensureNotFalsy(averageSchemaForFieldLength.properties.var2.maximum)),\r\n deep: {\r\n deep1: randomStringWithSpecialChars(ensureNotFalsy(averageSchemaForFieldLength.properties.deep.properties.deep1.maxLength) - 3, ensureNotFalsy(averageSchemaForFieldLength.properties.deep.properties.deep1.maxLength)),\r\n deep2: randomStringWithSpecialChars(ensureNotFalsy(averageSchemaForFieldLength.properties.deep.properties.deep2.maxLength) - 3, ensureNotFalsy(averageSchemaForFieldLength.properties.deep.properties.deep2.maxLength)),\r\n deeper: {\r\n deepNr: randomNumber(0, 10)\r\n }\r\n },\r\n list: new Array(5).fill(0).map(() => ({\r\n deep1: randomStringWithSpecialChars(2, 5),\r\n deep2: randomStringWithSpecialChars(5, 8)\r\n }))\r\n },\r\n partial\r\n );\r\n}\r\n\r\nexport interface PointDocumentType {\r\n id: string;\r\n x: number;\r\n y: number;\r\n}\r\nexport function pointData(): PointDocumentType {\r\n return {\r\n id: randomStringWithSpecialChars(8, 12),\r\n x: randomNumber(1, 100),\r\n y: randomNumber(1, 100)\r\n };\r\n}\r\n\r\nexport interface HumanWithIdAndAgeIndexDocumentType {\r\n id: string;\r\n name: string;\r\n age: number;\r\n}\r\nexport function humanWithIdAndAgeIndexDocumentType(\r\n age: number = randomNumber(1, 100)\r\n): HumanWithIdAndAgeIndexDocumentType {\r\n return {\r\n id: randomStringWithSpecialChars(8, 12),\r\n name: randomStringWithSpecialChars(8, 12),\r\n age\r\n };\r\n}\r\n\r\nexport type HumanWithCompositePrimary = {\r\n // optional because it might be created by RxDB and not known before\r\n id?: string;\r\n firstName: string;\r\n lastName: string;\r\n info: {\r\n age: number;\r\n };\r\n};\r\nexport function humanWithCompositePrimary(partial: Partial<HumanWithCompositePrimary> = {}): HumanWithCompositePrimary {\r\n const defaultObj = {\r\n firstName: randomStringWithSpecialChars(8, 12),\r\n lastName: randomStringWithSpecialChars(8, 12),\r\n info: {\r\n age: randomNumber(10, 50)\r\n }\r\n };\r\n return Object.assign(\r\n defaultObj,\r\n partial\r\n );\r\n}\r\n\r\nexport type HumanWithOwnershipDocumentType = {\r\n passportId: string;\r\n firstName: string;\r\n lastName: string;\r\n age: number;\r\n owner?: string;\r\n};\r\nexport function humanWithOwnershipData(partial: Partial<HumanWithOwnershipDocumentType> = {}, owner: string): HumanWithOwnershipDocumentType {\r\n const defaultObj = {\r\n passportId: randomStringWithSpecialChars(8, 12),\r\n firstName: randomStringWithSpecialChars(8, 12),\r\n lastName: randomStringWithSpecialChars(8, 12),\r\n age: randomNumber(10, 50),\r\n owner\r\n };\r\n return Object.assign(\r\n defaultObj,\r\n partial\r\n );\r\n}\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"schema-objects.js","names":["schemas","ensureNotFalsy","lastOfArray","randomNumber","TEST_DATA_CHARSET","TEST_DATA_CHARSET_LAST_SORTED","split","sort","someEmojisArr","baseChars","allChars","slice","concat","randomStringWithSpecialChars","minLength","maxLength","text","Error","length","Math","floor","random","humanData","passportId","age","firstName","lastName","simpleHumanData","simpleHumanV3Data","partial","defaultObj","Object","assign","simpleHumanAge","humanWithSubOther","other","NoIndexHuman","nestedHumanData","mainSkill","name","level","deepNestedHumanData","attack","good","count","bigHumanDocumentType","dnaHash","heroArrayData","skills","Array","fill","map","damage","simpleHeroArray","encryptedHumanData","secret","encryptedObjectHumanData","subname","encryptedDeepHumanDocumentType","firstLevelPassword","secretData","pw","deepSecret","darkhole","nestedSecret","compoundIndexData","passportCountry","compoundIndexNoStringData","nostringIndex","refHumanData","bestFriend","refHumanNestedData","foo","humanWithTimestampData","givenData","ret","id","updatedAt","Date","now","averageSchemaForFieldLength","averageSchema","averageSchemaData","properties","var1","var2","maximum","deep","deep1","deep2","deeper","deepNr","list","pointData","x","y","humanWithIdAndAgeIndexDocumentType","humanWithCompositePrimary","info","humanWithOwnershipData","owner"],"sources":["../../../../src/plugins/test-utils/schema-objects.ts"],"sourcesContent":["/**\r\n * this file contains objects which match the schemas in schemas.js\r\n */\r\nimport { HumanDocumentType } from './schemas.ts';\r\nimport * as schemas from './schemas.ts';\r\nimport {\r\n ensureNotFalsy,\r\n lastOfArray,\r\n randomNumber\r\n} from '../utils/index.ts';\r\n\r\n\r\n/**\r\n * Some storages had problems with umlauts and other special chars.\r\n * So we add these to all test strings.\r\n */\r\nexport const TEST_DATA_CHARSET = '0987654321ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzäöüÖÄßÜ[]{}\\'';\r\nexport const TEST_DATA_CHARSET_LAST_SORTED = ensureNotFalsy(lastOfArray(TEST_DATA_CHARSET.split('').sort()));\r\nconst someEmojisArr = ['😊', '💩', '👵', '🍌', '🏳️‍🌈', '😃'];\r\n\r\nconst baseChars = TEST_DATA_CHARSET.split('');\r\nlet allChars = baseChars.slice(0);\r\nallChars = allChars.concat(someEmojisArr);\r\n\r\nexport function randomStringWithSpecialChars(\r\n minLength: number,\r\n /**\r\n * It has shown that alternating string lengths\r\n * can reproduce various problems. So by having variable\r\n * lengths we ensure that this fully works.\r\n */\r\n maxLength: number\r\n) {\r\n let text = '';\r\n\r\n if (!minLength || !maxLength || minLength > maxLength) {\r\n throw new Error('invalid length given ' + minLength + ' ' + maxLength);\r\n }\r\n\r\n const length = randomNumber(minLength, maxLength);\r\n\r\n while (text.length < length) {\r\n if (text.length === 0) {\r\n /**\r\n * TODO foundationdb does not work correctly when an index string starts\r\n * with an emoji. This can likely be fixed by upgrading foundationdb to the\r\n * latest version.\r\n */\r\n text += baseChars[Math.floor(Math.random() * baseChars.length)];\r\n } else {\r\n text += allChars[Math.floor(Math.random() * allChars.length)];\r\n }\r\n }\r\n\r\n /**\r\n * Because emojis can have a string.length of 2,\r\n * we can sometimes end up with strings that are longer\r\n * than the provided length. In that cases we have to rerun.\r\n */\r\n if (text.length > length) {\r\n return randomStringWithSpecialChars(minLength, maxLength);\r\n }\r\n\r\n return text;\r\n}\r\n\r\nexport interface SimpleHumanDocumentType {\r\n passportId: string;\r\n firstName: string;\r\n lastName: string;\r\n}\r\n\r\nexport function humanData(\r\n passportId: string = randomStringWithSpecialChars(8, 12),\r\n age: number = randomNumber(10, 50),\r\n firstName: string = randomStringWithSpecialChars(8, 12)\r\n): HumanDocumentType {\r\n return {\r\n passportId: passportId,\r\n firstName,\r\n lastName: randomStringWithSpecialChars(8, 12),\r\n age\r\n };\r\n}\r\n\r\nexport function simpleHumanData(): SimpleHumanDocumentType {\r\n return {\r\n passportId: randomStringWithSpecialChars(8, 12),\r\n firstName: randomStringWithSpecialChars(8, 12),\r\n lastName: randomStringWithSpecialChars(8, 12)\r\n };\r\n}\r\n\r\nexport interface SimpleHumanV3DocumentType {\r\n passportId: string;\r\n age: number;\r\n oneOptional?: string;\r\n}\r\nexport function simpleHumanV3Data(partial: Partial<SimpleHumanV3DocumentType> = {}): SimpleHumanV3DocumentType {\r\n const defaultObj = {\r\n passportId: randomStringWithSpecialChars(8, 12),\r\n age: randomNumber(10, 50)\r\n };\r\n return Object.assign(\r\n defaultObj,\r\n partial\r\n );\r\n}\r\n\r\nexport interface SimpleHumanAgeDocumentType {\r\n passportId: string;\r\n age: string;\r\n}\r\nexport function simpleHumanAge(partial: Partial<SimpleHumanAgeDocumentType> = {}): SimpleHumanAgeDocumentType {\r\n const defaultObj = {\r\n passportId: randomStringWithSpecialChars(8, 12),\r\n age: randomNumber(10, 50) + ''\r\n };\r\n return Object.assign(\r\n defaultObj,\r\n partial\r\n );\r\n}\r\n\r\nexport interface HumanWithSubOtherDocumentType {\r\n passportId: string;\r\n other: {\r\n age: number;\r\n };\r\n}\r\nexport function humanWithSubOther(): HumanWithSubOtherDocumentType {\r\n return {\r\n passportId: randomStringWithSpecialChars(8, 12),\r\n other: {\r\n age: randomNumber(10, 50)\r\n }\r\n };\r\n}\r\n\r\nexport interface NoIndexHumanDocumentType {\r\n firstName: string;\r\n lastName: string;\r\n}\r\nexport function NoIndexHuman(): NoIndexHumanDocumentType {\r\n return {\r\n firstName: randomStringWithSpecialChars(8, 12),\r\n lastName: randomStringWithSpecialChars(8, 12)\r\n };\r\n}\r\n\r\nexport interface NestedHumanDocumentType {\r\n passportId: string;\r\n firstName: string;\r\n mainSkill: {\r\n name: string;\r\n level: number;\r\n };\r\n}\r\nexport function nestedHumanData(partial: Partial<NestedHumanDocumentType> = {}): NestedHumanDocumentType {\r\n const defaultObj = {\r\n passportId: randomStringWithSpecialChars(8, 12),\r\n firstName: randomStringWithSpecialChars(8, 12),\r\n mainSkill: {\r\n name: randomStringWithSpecialChars(4, 6),\r\n level: 5\r\n }\r\n };\r\n return Object.assign(\r\n defaultObj,\r\n partial\r\n );\r\n}\r\n\r\nexport interface DeepNestedHumanDocumentType {\r\n passportId: string;\r\n mainSkill: {\r\n name: string;\r\n attack: {\r\n good: boolean;\r\n count: number;\r\n };\r\n };\r\n}\r\nexport function deepNestedHumanData(): DeepNestedHumanDocumentType {\r\n return {\r\n passportId: randomStringWithSpecialChars(8, 12),\r\n mainSkill: {\r\n name: randomStringWithSpecialChars(4, 6),\r\n attack: {\r\n good: false,\r\n count: 5\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport interface BigHumanDocumentType {\r\n passportId: string;\r\n dnaHash: string;\r\n firstName: string;\r\n lastName: string;\r\n age: number;\r\n}\r\nexport function bigHumanDocumentType(): BigHumanDocumentType {\r\n return {\r\n passportId: randomStringWithSpecialChars(8, 12),\r\n dnaHash: randomStringWithSpecialChars(8, 12),\r\n firstName: randomStringWithSpecialChars(8, 12),\r\n lastName: randomStringWithSpecialChars(8, 12),\r\n age: randomNumber(10, 50)\r\n };\r\n}\r\n\r\nexport interface HeroArrayDocumentType {\r\n name: string;\r\n skills: {\r\n name: string;\r\n damage: number;\r\n }[];\r\n}\r\nexport function heroArrayData(): HeroArrayDocumentType {\r\n return {\r\n name: randomStringWithSpecialChars(6, 8),\r\n skills: new Array(3).fill(0).map(() => {\r\n return {\r\n name: randomStringWithSpecialChars(4, 6),\r\n damage: randomNumber(10, 50)\r\n };\r\n })\r\n };\r\n}\r\n\r\nexport interface SimpleHeroArrayDocumentType {\r\n name: string;\r\n skills: string[];\r\n}\r\nexport function simpleHeroArray(partial: Partial<SimpleHeroArrayDocumentType> = {}): SimpleHeroArrayDocumentType {\r\n const defaultObj = {\r\n name: randomStringWithSpecialChars(8, 10),\r\n skills: new Array(3).fill(0).map(() => randomStringWithSpecialChars(3, 6))\r\n };\r\n return Object.assign(\r\n defaultObj,\r\n partial\r\n );\r\n}\r\n\r\nexport interface EncryptedHumanDocumentType {\r\n passportId: string;\r\n firstName: string;\r\n secret: string;\r\n}\r\nexport function encryptedHumanData(secret = randomStringWithSpecialChars(8, 12)): EncryptedHumanDocumentType {\r\n return {\r\n passportId: randomStringWithSpecialChars(8, 12),\r\n firstName: randomStringWithSpecialChars(8, 12),\r\n secret\r\n };\r\n}\r\n\r\nexport interface EncryptedObjectHumanDocumentType {\r\n passportId: string;\r\n firstName: string;\r\n secret: {\r\n name: string;\r\n subname: string;\r\n };\r\n}\r\nexport function encryptedObjectHumanData(): EncryptedObjectHumanDocumentType {\r\n return {\r\n passportId: randomStringWithSpecialChars(8, 12),\r\n firstName: randomStringWithSpecialChars(8, 12),\r\n secret: {\r\n name: randomStringWithSpecialChars(8, 12),\r\n subname: randomStringWithSpecialChars(8, 12)\r\n }\r\n };\r\n}\r\n\r\nexport interface EncryptedDeepHumanDocumentType {\r\n passportId: string;\r\n firstName: string;\r\n firstLevelPassword: string;\r\n secretData: {\r\n pw: string;\r\n };\r\n deepSecret: {\r\n darkhole: {\r\n pw: string;\r\n };\r\n };\r\n nestedSecret: {\r\n darkhole: {\r\n pw: string;\r\n };\r\n };\r\n}\r\nexport function encryptedDeepHumanDocumentType(): EncryptedDeepHumanDocumentType {\r\n return {\r\n passportId: randomStringWithSpecialChars(8, 12),\r\n firstName: randomStringWithSpecialChars(8, 12),\r\n firstLevelPassword: randomStringWithSpecialChars(8, 12),\r\n secretData: {\r\n pw: randomStringWithSpecialChars(8, 12)\r\n },\r\n deepSecret: {\r\n darkhole: {\r\n pw: randomStringWithSpecialChars(8, 12)\r\n }\r\n },\r\n nestedSecret: {\r\n darkhole: {\r\n pw: randomStringWithSpecialChars(8, 12)\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport interface CompoundIndexDocumentType {\r\n passportId: string;\r\n passportCountry: string;\r\n age: number;\r\n}\r\nexport function compoundIndexData(): CompoundIndexDocumentType {\r\n return {\r\n passportId: randomStringWithSpecialChars(8, 12),\r\n passportCountry: randomStringWithSpecialChars(8, 12),\r\n age: randomNumber(10, 50)\r\n };\r\n}\r\n\r\nexport interface CompoundIndexNoStringDocumentType {\r\n passportId: string;\r\n passportCountry: { [prop: string]: string; };\r\n age: number;\r\n}\r\nexport function compoundIndexNoStringData(): CompoundIndexNoStringDocumentType {\r\n return {\r\n passportId: randomStringWithSpecialChars(8, 12),\r\n passportCountry: { [randomStringWithSpecialChars(8, 12)]: randomStringWithSpecialChars(8, 12) },\r\n age: randomNumber(10, 50)\r\n };\r\n}\r\n\r\nexport interface NostringIndexDocumentType {\r\n passportId: {};\r\n firstName: string;\r\n}\r\nexport function nostringIndex(): NostringIndexDocumentType {\r\n return {\r\n passportId: {},\r\n firstName: randomStringWithSpecialChars(8, 12)\r\n };\r\n}\r\n\r\nexport interface RefHumanDocumentType {\r\n name: string;\r\n bestFriend: string;\r\n}\r\nexport function refHumanData(bestFriend?: string): RefHumanDocumentType {\r\n return {\r\n name: randomStringWithSpecialChars(8, 12),\r\n bestFriend\r\n } as any;\r\n}\r\n\r\nexport interface RefHumanNestedDocumentType {\r\n name: string;\r\n foo: {\r\n bestFriend: string;\r\n };\r\n}\r\nexport function refHumanNestedData(bestFriend?: string): RefHumanNestedDocumentType {\r\n return {\r\n name: randomStringWithSpecialChars(8, 12),\r\n foo: {\r\n bestFriend\r\n } as any\r\n };\r\n}\r\nexport interface HumanWithTimestampNestedDocumentType extends HumanWithTimestampDocumentType {\r\n address?: {\r\n street: string;\r\n suite: string;\r\n city: string;\r\n zipcode: string;\r\n geo: {\r\n lat: string;\r\n lng: string;\r\n };\r\n }\r\n}\r\n\r\nexport interface HumanWithTimestampDocumentType {\r\n id: string;\r\n name: string;\r\n age: number;\r\n updatedAt: number;\r\n deletedAt?: number;\r\n}\r\nexport function humanWithTimestampData(givenData: Partial<HumanWithTimestampDocumentType> = {}): HumanWithTimestampDocumentType {\r\n let ret = {\r\n id: randomStringWithSpecialChars(8, 12),\r\n name: randomStringWithSpecialChars(8, 12),\r\n age: randomNumber(1, 100),\r\n // use some time in the past week\r\n updatedAt: Date.now()\r\n };\r\n ret = Object.assign({}, ret, givenData);\r\n return ret;\r\n}\r\n\r\nexport interface AverageSchemaDocumentType {\r\n id: string;\r\n var1: string;\r\n var2: number;\r\n deep: {\r\n deep1: string;\r\n deep2: string;\r\n deeper: {\r\n deepNr: number;\r\n };\r\n };\r\n list: {\r\n deep1: string;\r\n deep2: string;\r\n }[];\r\n}\r\n\r\n\r\nconst averageSchemaForFieldLength = schemas.averageSchema() as any;\r\nexport function averageSchemaData(\r\n partial: Partial<AverageSchemaDocumentType> = {}\r\n): AverageSchemaDocumentType {\r\n return Object.assign(\r\n {},\r\n {\r\n id: randomStringWithSpecialChars(ensureNotFalsy(averageSchemaForFieldLength.properties.id.maxLength - 1), ensureNotFalsy(averageSchemaForFieldLength.properties.id.maxLength)),\r\n var1: randomStringWithSpecialChars(ensureNotFalsy(averageSchemaForFieldLength.properties.var1.maxLength) - 3, ensureNotFalsy(averageSchemaForFieldLength.properties.var1.maxLength)),\r\n var2: randomNumber(100, ensureNotFalsy(averageSchemaForFieldLength.properties.var2.maximum)),\r\n deep: {\r\n deep1: randomStringWithSpecialChars(ensureNotFalsy(averageSchemaForFieldLength.properties.deep.properties.deep1.maxLength) - 3, ensureNotFalsy(averageSchemaForFieldLength.properties.deep.properties.deep1.maxLength)),\r\n deep2: randomStringWithSpecialChars(ensureNotFalsy(averageSchemaForFieldLength.properties.deep.properties.deep2.maxLength) - 3, ensureNotFalsy(averageSchemaForFieldLength.properties.deep.properties.deep2.maxLength)),\r\n deeper: {\r\n deepNr: randomNumber(0, 10)\r\n }\r\n },\r\n list: new Array(5).fill(0).map(() => ({\r\n deep1: randomStringWithSpecialChars(2, 5),\r\n deep2: randomStringWithSpecialChars(5, 8)\r\n }))\r\n },\r\n partial\r\n );\r\n}\r\n\r\nexport interface PointDocumentType {\r\n id: string;\r\n x: number;\r\n y: number;\r\n}\r\nexport function pointData(): PointDocumentType {\r\n return {\r\n id: randomStringWithSpecialChars(8, 12),\r\n x: randomNumber(1, 100),\r\n y: randomNumber(1, 100)\r\n };\r\n}\r\n\r\nexport interface HumanWithIdAndAgeIndexDocumentType {\r\n id: string;\r\n name: string;\r\n age: number;\r\n}\r\nexport function humanWithIdAndAgeIndexDocumentType(\r\n age: number = randomNumber(1, 100)\r\n): HumanWithIdAndAgeIndexDocumentType {\r\n return {\r\n id: randomStringWithSpecialChars(8, 12),\r\n name: randomStringWithSpecialChars(8, 12),\r\n age\r\n };\r\n}\r\n\r\nexport type HumanWithCompositePrimary = {\r\n // optional because it might be created by RxDB and not known before\r\n id?: string;\r\n firstName: string;\r\n lastName: string;\r\n info: {\r\n age: number;\r\n };\r\n};\r\nexport function humanWithCompositePrimary(partial: Partial<HumanWithCompositePrimary> = {}): HumanWithCompositePrimary {\r\n const defaultObj = {\r\n firstName: randomStringWithSpecialChars(8, 12),\r\n lastName: randomStringWithSpecialChars(8, 12),\r\n info: {\r\n age: randomNumber(10, 50)\r\n }\r\n };\r\n return Object.assign(\r\n defaultObj,\r\n partial\r\n );\r\n}\r\n\r\nexport type HumanWithOwnershipDocumentType = {\r\n passportId: string;\r\n firstName: string;\r\n lastName: string;\r\n age: number;\r\n owner?: string;\r\n};\r\nexport function humanWithOwnershipData(partial: Partial<HumanWithOwnershipDocumentType> = {}, owner: string): HumanWithOwnershipDocumentType {\r\n const defaultObj = {\r\n passportId: randomStringWithSpecialChars(8, 12),\r\n firstName: randomStringWithSpecialChars(8, 12),\r\n lastName: randomStringWithSpecialChars(8, 12),\r\n age: randomNumber(10, 50),\r\n owner\r\n };\r\n return Object.assign(\r\n defaultObj,\r\n partial\r\n );\r\n}\r\n"],"mappings":"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","ignoreList":[]}
@@ -46,6 +46,65 @@ export async function awaitCollectionsHaveEqualState(c1, c2, logContext, timeout
46
46
  }
47
47
  }
48
48
  }
49
+
50
+ /**
51
+ * Deletes all locally stored IndexedDB databases.
52
+ * Noop if IndexedDB is not available (e.g. in Node.js)
53
+ * or if the .databases() method is not supported.
54
+ */
55
+ export async function clearAllLocalIndexedDB() {
56
+ if (typeof indexedDB === 'undefined' || typeof indexedDB.databases !== 'function') {
57
+ return;
58
+ }
59
+ var databases = await indexedDB.databases();
60
+ await Promise.all(databases.filter(db => !!db.name).map(db => {
61
+ return new Promise((resolve, reject) => {
62
+ var req = indexedDB.deleteDatabase(db.name);
63
+ req.onsuccess = () => resolve();
64
+ req.onerror = () => reject(req.error);
65
+ });
66
+ }));
67
+ }
68
+
69
+ /**
70
+ * Deletes all files and directories stored in the
71
+ * Origin Private File System (OPFS).
72
+ * Noop if OPFS is not available (e.g. in Node.js).
73
+ */
74
+ export async function clearAllLocalOPFS(maxRetries = 20, delayMs = 200) {
75
+ if (typeof navigator === 'undefined' || !navigator.storage || typeof navigator.storage.getDirectory !== 'function') {
76
+ return;
77
+ }
78
+ var root = await navigator.storage.getDirectory();
79
+ // @ts-ignore entries() is not in all TS lib definitions
80
+ for await (var [name] of root.entries()) {
81
+ for (var attempt = 0; attempt < maxRetries; attempt++) {
82
+ try {
83
+ await root.removeEntry(name, {
84
+ recursive: true
85
+ });
86
+ break;
87
+ } catch (err) {
88
+ if (err?.name === 'NoModificationAllowedError' && attempt < maxRetries - 1) {
89
+ await new Promise(resolve => setTimeout(resolve, delayMs));
90
+ } else {
91
+ throw err;
92
+ }
93
+ }
94
+ }
95
+ }
96
+ }
97
+
98
+ /**
99
+ * Clears all localStorage data.
100
+ * Noop if localStorage is not available (e.g. in Node.js).
101
+ */
102
+ export async function clearAllLocalStorage() {
103
+ if (typeof localStorage === 'undefined' || typeof localStorage.clear !== 'function') {
104
+ return;
105
+ }
106
+ localStorage.clear();
107
+ }
49
108
  export function ensureReplicationHasNoErrors(replicationState) {
50
109
  /**
51
110
  * We do not have to unsubscribe because the observable will cancel anyway.
@@ -1 +1 @@
1
- {"version":3,"file":"test-util.js","names":["assert","promiseWait","requestIdlePromise","testMultipleTimes","times","title","test","Array","fill","forEach","it","ensureCollectionsHaveEqualState","c1","c2","logContext","getJson","collection","docs","find","exec","map","d","toJSON","json1","json2","deepStrictEqual","err","console","error","name","dir","log","awaitCollectionsHaveEqualState","timeout","i","startTime","Date","now","ensureReplicationHasNoErrors","replicationState","error$","subscribe","parameters","errors"],"sources":["../../../../src/plugins/test-utils/test-util.ts"],"sourcesContent":["import type { Func } from 'mocha';\r\nimport assert from 'assert';\r\nimport type { RxCollection } from '../../types';\r\nimport { promiseWait, requestIdlePromise } from '../utils/index.ts';\r\nimport type { RxReplicationState } from '../replication/index.ts';\r\n\r\nexport function testMultipleTimes(times: number, title: string, test: Func) {\r\n new Array(times).fill(0).forEach(() => {\r\n it(title, test);\r\n });\r\n}\r\n\r\nexport async function ensureCollectionsHaveEqualState<RxDocType>(\r\n c1: RxCollection<RxDocType>,\r\n c2: RxCollection<RxDocType>,\r\n logContext?: string\r\n) {\r\n await requestIdlePromise();\r\n const getJson = async (collection: RxCollection<RxDocType>) => {\r\n const docs = await collection.find().exec();\r\n return docs.map(d => d.toJSON());\r\n };\r\n const json1 = await getJson(c1);\r\n const json2 = await getJson(c2);\r\n try {\r\n assert.deepStrictEqual(\r\n json1,\r\n json2\r\n );\r\n } catch (err) {\r\n console.error('ensureCollectionsHaveEqualState(' + logContext + ') states not equal (c1:' + c1.name + ', c2:' + c2.name + '):');\r\n console.dir({\r\n c1: json1,\r\n c2: json2\r\n });\r\n console.log('----------');\r\n throw err;\r\n }\r\n}\r\n\r\n/**\r\n * Waits until the collections have the equal state.\r\n */\r\nexport async function awaitCollectionsHaveEqualState<RxDocType>(\r\n c1: RxCollection<RxDocType>,\r\n c2: RxCollection<RxDocType>,\r\n logContext?: string,\r\n timeout = 8000\r\n) {\r\n let i = 0;\r\n const startTime = Date.now();\r\n while (true) {\r\n i++;\r\n try {\r\n await ensureCollectionsHaveEqualState(\r\n c1,\r\n c2,\r\n logContext\r\n );\r\n return;\r\n } catch (err) {\r\n if ((Date.now() - startTime) > timeout) {\r\n throw err;\r\n } else {\r\n await promiseWait(50 * i);\r\n }\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\nexport function ensureReplicationHasNoErrors(replicationState: RxReplicationState<any, any>) {\r\n /**\r\n * We do not have to unsubscribe because the observable will cancel anyway.\r\n */\r\n replicationState.error$.subscribe((err: any) => {\r\n console.error('ensureReplicationHasNoErrors() has error:');\r\n console.log(err);\r\n if (err?.parameters?.errors) {\r\n throw err.parameters.errors[0];\r\n }\r\n throw err;\r\n });\r\n}\r\n"],"mappings":"AACA,OAAOA,MAAM,MAAM,QAAQ;AAE3B,SAASC,WAAW,EAAEC,kBAAkB,QAAQ,mBAAmB;AAGnE,OAAO,SAASC,iBAAiBA,CAACC,KAAa,EAAEC,KAAa,EAAEC,IAAU,EAAE;EACxE,IAAIC,KAAK,CAACH,KAAK,CAAC,CAACI,IAAI,CAAC,CAAC,CAAC,CAACC,OAAO,CAAC,MAAM;IACnCC,EAAE,CAACL,KAAK,EAAEC,IAAI,CAAC;EACnB,CAAC,CAAC;AACN;AAEA,OAAO,eAAeK,+BAA+BA,CACjDC,EAA2B,EAC3BC,EAA2B,EAC3BC,UAAmB,EACrB;EACE,MAAMZ,kBAAkB,CAAC,CAAC;EAC1B,IAAMa,OAAO,GAAG,MAAOC,UAAmC,IAAK;IAC3D,IAAMC,IAAI,GAAG,MAAMD,UAAU,CAACE,IAAI,CAAC,CAAC,CAACC,IAAI,CAAC,CAAC;IAC3C,OAAOF,IAAI,CAACG,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACC,MAAM,CAAC,CAAC,CAAC;EACpC,CAAC;EACD,IAAMC,KAAK,GAAG,MAAMR,OAAO,CAACH,EAAE,CAAC;EAC/B,IAAMY,KAAK,GAAG,MAAMT,OAAO,CAACF,EAAE,CAAC;EAC/B,IAAI;IACAb,MAAM,CAACyB,eAAe,CAClBF,KAAK,EACLC,KACJ,CAAC;EACL,CAAC,CAAC,OAAOE,GAAG,EAAE;IACVC,OAAO,CAACC,KAAK,CAAC,kCAAkC,GAAGd,UAAU,GAAG,yBAAyB,GAAGF,EAAE,CAACiB,IAAI,GAAG,OAAO,GAAGhB,EAAE,CAACgB,IAAI,GAAG,IAAI,CAAC;IAC/HF,OAAO,CAACG,GAAG,CAAC;MACRlB,EAAE,EAAEW,KAAK;MACTV,EAAE,EAAEW;IACR,CAAC,CAAC;IACFG,OAAO,CAACI,GAAG,CAAC,YAAY,CAAC;IACzB,MAAML,GAAG;EACb;AACJ;;AAEA;AACA;AACA;AACA,OAAO,eAAeM,8BAA8BA,CAChDpB,EAA2B,EAC3BC,EAA2B,EAC3BC,UAAmB,EACnBmB,OAAO,GAAG,IAAI,EAChB;EACE,IAAIC,CAAC,GAAG,CAAC;EACT,IAAMC,SAAS,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;EAC5B,OAAO,IAAI,EAAE;IACTH,CAAC,EAAE;IACH,IAAI;MACA,MAAMvB,+BAA+B,CACjCC,EAAE,EACFC,EAAE,EACFC,UACJ,CAAC;MACD;IACJ,CAAC,CAAC,OAAOY,GAAG,EAAE;MACV,IAAKU,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGF,SAAS,GAAIF,OAAO,EAAE;QACpC,MAAMP,GAAG;MACb,CAAC,MAAM;QACH,MAAMzB,WAAW,CAAC,EAAE,GAAGiC,CAAC,CAAC;MAC7B;IACJ;EACJ;AACJ;AAIA,OAAO,SAASI,4BAA4BA,CAACC,gBAA8C,EAAE;EACzF;AACJ;AACA;EACIA,gBAAgB,CAACC,MAAM,CAACC,SAAS,CAAEf,GAAQ,IAAK;IAC5CC,OAAO,CAACC,KAAK,CAAC,2CAA2C,CAAC;IAC1DD,OAAO,CAACI,GAAG,CAACL,GAAG,CAAC;IAChB,IAAIA,GAAG,EAAEgB,UAAU,EAAEC,MAAM,EAAE;MACzB,MAAMjB,GAAG,CAACgB,UAAU,CAACC,MAAM,CAAC,CAAC,CAAC;IAClC;IACA,MAAMjB,GAAG;EACb,CAAC,CAAC;AACN","ignoreList":[]}
1
+ {"version":3,"file":"test-util.js","names":["assert","promiseWait","requestIdlePromise","testMultipleTimes","times","title","test","Array","fill","forEach","it","ensureCollectionsHaveEqualState","c1","c2","logContext","getJson","collection","docs","find","exec","map","d","toJSON","json1","json2","deepStrictEqual","err","console","error","name","dir","log","awaitCollectionsHaveEqualState","timeout","i","startTime","Date","now","clearAllLocalIndexedDB","indexedDB","databases","Promise","all","filter","db","resolve","reject","req","deleteDatabase","onsuccess","onerror","clearAllLocalOPFS","maxRetries","delayMs","navigator","storage","getDirectory","root","entries","attempt","removeEntry","recursive","setTimeout","clearAllLocalStorage","localStorage","clear","ensureReplicationHasNoErrors","replicationState","error$","subscribe","parameters","errors"],"sources":["../../../../src/plugins/test-utils/test-util.ts"],"sourcesContent":["import type { Func } from 'mocha';\r\nimport assert from 'assert';\r\nimport type { RxCollection } from '../../types';\r\nimport { promiseWait, requestIdlePromise } from '../utils/index.ts';\r\nimport type { RxReplicationState } from '../replication/index.ts';\r\n\r\nexport function testMultipleTimes(times: number, title: string, test: Func) {\r\n new Array(times).fill(0).forEach(() => {\r\n it(title, test);\r\n });\r\n}\r\n\r\nexport async function ensureCollectionsHaveEqualState<RxDocType>(\r\n c1: RxCollection<RxDocType>,\r\n c2: RxCollection<RxDocType>,\r\n logContext?: string\r\n) {\r\n await requestIdlePromise();\r\n const getJson = async (collection: RxCollection<RxDocType>) => {\r\n const docs = await collection.find().exec();\r\n return docs.map(d => d.toJSON());\r\n };\r\n const json1 = await getJson(c1);\r\n const json2 = await getJson(c2);\r\n try {\r\n assert.deepStrictEqual(\r\n json1,\r\n json2\r\n );\r\n } catch (err) {\r\n console.error('ensureCollectionsHaveEqualState(' + logContext + ') states not equal (c1:' + c1.name + ', c2:' + c2.name + '):');\r\n console.dir({\r\n c1: json1,\r\n c2: json2\r\n });\r\n console.log('----------');\r\n throw err;\r\n }\r\n}\r\n\r\n/**\r\n * Waits until the collections have the equal state.\r\n */\r\nexport async function awaitCollectionsHaveEqualState<RxDocType>(\r\n c1: RxCollection<RxDocType>,\r\n c2: RxCollection<RxDocType>,\r\n logContext?: string,\r\n timeout = 8000\r\n) {\r\n let i = 0;\r\n const startTime = Date.now();\r\n while (true) {\r\n i++;\r\n try {\r\n await ensureCollectionsHaveEqualState(\r\n c1,\r\n c2,\r\n logContext\r\n );\r\n return;\r\n } catch (err) {\r\n if ((Date.now() - startTime) > timeout) {\r\n throw err;\r\n } else {\r\n await promiseWait(50 * i);\r\n }\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n/**\r\n * Deletes all locally stored IndexedDB databases.\r\n * Noop if IndexedDB is not available (e.g. in Node.js)\r\n * or if the .databases() method is not supported.\r\n */\r\nexport async function clearAllLocalIndexedDB(): Promise<void> {\r\n if (\r\n typeof indexedDB === 'undefined' ||\r\n typeof indexedDB.databases !== 'function'\r\n ) {\r\n return;\r\n }\r\n const databases = await indexedDB.databases();\r\n await Promise.all(\r\n databases\r\n .filter(db => !!db.name)\r\n .map(db => {\r\n return new Promise<void>((resolve, reject) => {\r\n const req = indexedDB.deleteDatabase(db.name as string);\r\n req.onsuccess = () => resolve();\r\n req.onerror = () => reject(req.error);\r\n });\r\n })\r\n );\r\n}\r\n\r\n/**\r\n * Deletes all files and directories stored in the\r\n * Origin Private File System (OPFS).\r\n * Noop if OPFS is not available (e.g. in Node.js).\r\n */\r\nexport async function clearAllLocalOPFS(maxRetries = 20, delayMs = 200): Promise<void> {\r\n if (\r\n typeof navigator === 'undefined' ||\r\n !navigator.storage ||\r\n typeof navigator.storage.getDirectory !== 'function'\r\n ) {\r\n return;\r\n }\r\n const root = await navigator.storage.getDirectory();\r\n // @ts-ignore entries() is not in all TS lib definitions\r\n for await (const [name] of root.entries()) {\r\n for (let attempt = 0; attempt < maxRetries; attempt++) {\r\n try {\r\n await root.removeEntry(name, { recursive: true });\r\n break;\r\n } catch (err: any) {\r\n if (err?.name === 'NoModificationAllowedError' && attempt < maxRetries - 1) {\r\n await new Promise(resolve => setTimeout(resolve, delayMs));\r\n } else {\r\n throw err;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Clears all localStorage data.\r\n * Noop if localStorage is not available (e.g. in Node.js).\r\n */\r\nexport async function clearAllLocalStorage(): Promise<void> {\r\n if (\r\n typeof localStorage === 'undefined' ||\r\n typeof localStorage.clear !== 'function'\r\n ) {\r\n return;\r\n }\r\n localStorage.clear();\r\n}\r\n\r\nexport function ensureReplicationHasNoErrors(replicationState: RxReplicationState<any, any>) {\r\n /**\r\n * We do not have to unsubscribe because the observable will cancel anyway.\r\n */\r\n replicationState.error$.subscribe((err: any) => {\r\n console.error('ensureReplicationHasNoErrors() has error:');\r\n console.log(err);\r\n if (err?.parameters?.errors) {\r\n throw err.parameters.errors[0];\r\n }\r\n throw err;\r\n });\r\n}\r\n"],"mappings":"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","ignoreList":[]}
@@ -1,13 +1,13 @@
1
1
  export function getFromMapOrThrow(map, key) {
2
2
  var val = map.get(key);
3
- if (typeof val === 'undefined') {
3
+ if (val === undefined) {
4
4
  throw new Error('missing value from map ' + key);
5
5
  }
6
6
  return val;
7
7
  }
8
8
  export function getFromMapOrCreate(map, index, creator, ifWasThere) {
9
9
  var value = map.get(index);
10
- if (typeof value === 'undefined') {
10
+ if (value === undefined) {
11
11
  value = creator();
12
12
  map.set(index, value);
13
13
  } else if (ifWasThere) {
@@ -1 +1 @@
1
- {"version":3,"file":"utils-map.js","names":["getFromMapOrThrow","map","key","val","get","Error","getFromMapOrCreate","index","creator","ifWasThere","value","set"],"sources":["../../../../src/plugins/utils/utils-map.ts"],"sourcesContent":["export function getFromMapOrThrow<K, V>(map: Map<K, V> | WeakMap<any, V>, key: K): V {\r\n const val = map.get(key);\r\n if (typeof val === 'undefined') {\r\n throw new Error('missing value from map ' + key);\r\n }\r\n return val;\r\n}\r\n\r\nexport function getFromMapOrCreate<MapIndex, MapValue>(\r\n map: Map<MapIndex, MapValue> | WeakMap<any, MapValue>,\r\n index: MapIndex,\r\n creator: () => MapValue,\r\n ifWasThere?: (value: MapValue) => void\r\n): MapValue {\r\n let value = map.get(index);\r\n if (typeof value === 'undefined') {\r\n value = creator();\r\n map.set(index, value);\r\n } else if (ifWasThere) {\r\n ifWasThere(value);\r\n }\r\n return value;\r\n}\r\n"],"mappings":"AAAA,OAAO,SAASA,iBAAiBA,CAAOC,GAAgC,EAAEC,GAAM,EAAK;EACjF,IAAMC,GAAG,GAAGF,GAAG,CAACG,GAAG,CAACF,GAAG,CAAC;EACxB,IAAI,OAAOC,GAAG,KAAK,WAAW,EAAE;IAC5B,MAAM,IAAIE,KAAK,CAAC,yBAAyB,GAAGH,GAAG,CAAC;EACpD;EACA,OAAOC,GAAG;AACd;AAEA,OAAO,SAASG,kBAAkBA,CAC9BL,GAAqD,EACrDM,KAAe,EACfC,OAAuB,EACvBC,UAAsC,EAC9B;EACR,IAAIC,KAAK,GAAGT,GAAG,CAACG,GAAG,CAACG,KAAK,CAAC;EAC1B,IAAI,OAAOG,KAAK,KAAK,WAAW,EAAE;IAC9BA,KAAK,GAAGF,OAAO,CAAC,CAAC;IACjBP,GAAG,CAACU,GAAG,CAACJ,KAAK,EAAEG,KAAK,CAAC;EACzB,CAAC,MAAM,IAAID,UAAU,EAAE;IACnBA,UAAU,CAACC,KAAK,CAAC;EACrB;EACA,OAAOA,KAAK;AAChB","ignoreList":[]}
1
+ {"version":3,"file":"utils-map.js","names":["getFromMapOrThrow","map","key","val","get","undefined","Error","getFromMapOrCreate","index","creator","ifWasThere","value","set"],"sources":["../../../../src/plugins/utils/utils-map.ts"],"sourcesContent":["export function getFromMapOrThrow<K, V>(map: Map<K, V> | WeakMap<any, V>, key: K): V {\r\n const val = map.get(key);\r\n if (val === undefined) {\r\n throw new Error('missing value from map ' + key);\r\n }\r\n return val;\r\n}\r\n\r\nexport function getFromMapOrCreate<MapIndex, MapValue>(\r\n map: Map<MapIndex, MapValue> | WeakMap<any, MapValue>,\r\n index: MapIndex,\r\n creator: () => MapValue,\r\n ifWasThere?: (value: MapValue) => void\r\n): MapValue {\r\n let value = map.get(index);\r\n if (value === undefined) {\r\n value = creator();\r\n map.set(index, value);\r\n } else if (ifWasThere) {\r\n ifWasThere(value);\r\n }\r\n return value;\r\n}\r\n"],"mappings":"AAAA,OAAO,SAASA,iBAAiBA,CAAOC,GAAgC,EAAEC,GAAM,EAAK;EACjF,IAAMC,GAAG,GAAGF,GAAG,CAACG,GAAG,CAACF,GAAG,CAAC;EACxB,IAAIC,GAAG,KAAKE,SAAS,EAAE;IACnB,MAAM,IAAIC,KAAK,CAAC,yBAAyB,GAAGJ,GAAG,CAAC;EACpD;EACA,OAAOC,GAAG;AACd;AAEA,OAAO,SAASI,kBAAkBA,CAC9BN,GAAqD,EACrDO,KAAe,EACfC,OAAuB,EACvBC,UAAsC,EAC9B;EACR,IAAIC,KAAK,GAAGV,GAAG,CAACG,GAAG,CAACI,KAAK,CAAC;EAC1B,IAAIG,KAAK,KAAKN,SAAS,EAAE;IACrBM,KAAK,GAAGF,OAAO,CAAC,CAAC;IACjBR,GAAG,CAACW,GAAG,CAACJ,KAAK,EAAEG,KAAK,CAAC;EACzB,CAAC,MAAM,IAAID,UAAU,EAAE;IACnBA,UAAU,CAACC,KAAK,CAAC;EACrB;EACA,OAAOA,KAAK;AAChB","ignoreList":[]}
@@ -22,10 +22,11 @@ export function deepEqual(a, b) {
22
22
  var keys = Object.keys(a);
23
23
  length = keys.length;
24
24
  if (length !== Object.keys(b).length) return false;
25
- for (i = length; i-- !== 0;) if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;
25
+
26
+ // Single combined loop: check key existence AND deep-compare in one pass.
26
27
  for (i = length; i-- !== 0;) {
27
28
  var key = keys[i];
28
- if (!deepEqual(a[key], b[key])) return false;
29
+ if (!Object.prototype.hasOwnProperty.call(b, key) || !deepEqual(a[key], b[key])) return false;
29
30
  }
30
31
  return true;
31
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"utils-object-deep-equal.js","names":["deepEqual","a","b","constructor","length","i","Array","isArray","RegExp","source","flags","valueOf","Object","prototype","toString","keys","hasOwnProperty","call","key"],"sources":["../../../../src/plugins/utils/utils-object-deep-equal.ts"],"sourcesContent":["\r\n/**\r\n * Copied from the fast-deep-equal package\r\n * because it does not support es modules and causes optimization bailouts.\r\n * TODO use the npm package again when this is merged:\r\n * @link https://github.com/epoberezkin/fast-deep-equal/pull/105\r\n */\r\nexport function deepEqual(a: any, b: any): boolean {\r\n if (a === b) return true;\r\n\r\n if (a && b && typeof a == 'object' && typeof b == 'object') {\r\n if (a.constructor !== b.constructor) return false;\r\n\r\n let length;\r\n let i;\r\n if (Array.isArray(a)) {\r\n length = a.length;\r\n if (length !== b.length) return false;\r\n for (i = length; i-- !== 0;)\r\n if (!deepEqual(a[i], b[i])) return false;\r\n return true;\r\n }\r\n\r\n\r\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\r\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\r\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\r\n\r\n const keys = Object.keys(a);\r\n length = keys.length;\r\n if (length !== Object.keys(b).length) return false;\r\n\r\n for (i = length; i-- !== 0;)\r\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\r\n\r\n for (i = length; i-- !== 0;) {\r\n const key = keys[i];\r\n if (!deepEqual(a[key], b[key])) return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n // true if both NaN, false otherwise\r\n return a !== a && b !== b;\r\n}\r\n"],"mappings":"AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,SAASA,CAACC,CAAM,EAAEC,CAAM,EAAW;EAC/C,IAAID,CAAC,KAAKC,CAAC,EAAE,OAAO,IAAI;EAExB,IAAID,CAAC,IAAIC,CAAC,IAAI,OAAOD,CAAC,IAAI,QAAQ,IAAI,OAAOC,CAAC,IAAI,QAAQ,EAAE;IACxD,IAAID,CAAC,CAACE,WAAW,KAAKD,CAAC,CAACC,WAAW,EAAE,OAAO,KAAK;IAEjD,IAAIC,MAAM;IACV,IAAIC,CAAC;IACL,IAAIC,KAAK,CAACC,OAAO,CAACN,CAAC,CAAC,EAAE;MAClBG,MAAM,GAAGH,CAAC,CAACG,MAAM;MACjB,IAAIA,MAAM,KAAKF,CAAC,CAACE,MAAM,EAAE,OAAO,KAAK;MACrC,KAAKC,CAAC,GAAGD,MAAM,EAAEC,CAAC,EAAE,KAAK,CAAC,GACtB,IAAI,CAACL,SAAS,CAACC,CAAC,CAACI,CAAC,CAAC,EAAEH,CAAC,CAACG,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK;MAC5C,OAAO,IAAI;IACf;IAGA,IAAIJ,CAAC,CAACE,WAAW,KAAKK,MAAM,EAAE,OAAOP,CAAC,CAACQ,MAAM,KAAKP,CAAC,CAACO,MAAM,IAAIR,CAAC,CAACS,KAAK,KAAKR,CAAC,CAACQ,KAAK;IACjF,IAAIT,CAAC,CAACU,OAAO,KAAKC,MAAM,CAACC,SAAS,CAACF,OAAO,EAAE,OAAOV,CAAC,CAACU,OAAO,CAAC,CAAC,KAAKT,CAAC,CAACS,OAAO,CAAC,CAAC;IAC9E,IAAIV,CAAC,CAACa,QAAQ,KAAKF,MAAM,CAACC,SAAS,CAACC,QAAQ,EAAE,OAAOb,CAAC,CAACa,QAAQ,CAAC,CAAC,KAAKZ,CAAC,CAACY,QAAQ,CAAC,CAAC;IAElF,IAAMC,IAAI,GAAGH,MAAM,CAACG,IAAI,CAACd,CAAC,CAAC;IAC3BG,MAAM,GAAGW,IAAI,CAACX,MAAM;IACpB,IAAIA,MAAM,KAAKQ,MAAM,CAACG,IAAI,CAACb,CAAC,CAAC,CAACE,MAAM,EAAE,OAAO,KAAK;IAElD,KAAKC,CAAC,GAAGD,MAAM,EAAEC,CAAC,EAAE,KAAK,CAAC,GACtB,IAAI,CAACO,MAAM,CAACC,SAAS,CAACG,cAAc,CAACC,IAAI,CAACf,CAAC,EAAEa,IAAI,CAACV,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK;IAEvE,KAAKA,CAAC,GAAGD,MAAM,EAAEC,CAAC,EAAE,KAAK,CAAC,GAAG;MACzB,IAAMa,GAAG,GAAGH,IAAI,CAACV,CAAC,CAAC;MACnB,IAAI,CAACL,SAAS,CAACC,CAAC,CAACiB,GAAG,CAAC,EAAEhB,CAAC,CAACgB,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK;IAChD;IAEA,OAAO,IAAI;EACf;;EAEA;EACA,OAAOjB,CAAC,KAAKA,CAAC,IAAIC,CAAC,KAAKA,CAAC;AAC7B","ignoreList":[]}
1
+ {"version":3,"file":"utils-object-deep-equal.js","names":["deepEqual","a","b","constructor","length","i","Array","isArray","RegExp","source","flags","valueOf","Object","prototype","toString","keys","key","hasOwnProperty","call"],"sources":["../../../../src/plugins/utils/utils-object-deep-equal.ts"],"sourcesContent":["\r\n/**\r\n * Copied from the fast-deep-equal package\r\n * because it does not support es modules and causes optimization bailouts.\r\n * TODO use the npm package again when this is merged:\r\n * @link https://github.com/epoberezkin/fast-deep-equal/pull/105\r\n */\r\nexport function deepEqual(a: any, b: any): boolean {\r\n if (a === b) return true;\r\n\r\n if (a && b && typeof a == 'object' && typeof b == 'object') {\r\n if (a.constructor !== b.constructor) return false;\r\n\r\n let length;\r\n let i;\r\n if (Array.isArray(a)) {\r\n length = a.length;\r\n if (length !== b.length) return false;\r\n for (i = length; i-- !== 0;)\r\n if (!deepEqual(a[i], b[i])) return false;\r\n return true;\r\n }\r\n\r\n\r\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\r\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\r\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\r\n\r\n const keys = Object.keys(a);\r\n length = keys.length;\r\n if (length !== Object.keys(b).length) return false;\r\n\r\n // Single combined loop: check key existence AND deep-compare in one pass.\r\n for (i = length; i-- !== 0;) {\r\n const key = keys[i];\r\n if (!Object.prototype.hasOwnProperty.call(b, key) || !deepEqual(a[key], b[key])) return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n // true if both NaN, false otherwise\r\n return a !== a && b !== b;\r\n}\r\n"],"mappings":"AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,SAASA,CAACC,CAAM,EAAEC,CAAM,EAAW;EAC/C,IAAID,CAAC,KAAKC,CAAC,EAAE,OAAO,IAAI;EAExB,IAAID,CAAC,IAAIC,CAAC,IAAI,OAAOD,CAAC,IAAI,QAAQ,IAAI,OAAOC,CAAC,IAAI,QAAQ,EAAE;IACxD,IAAID,CAAC,CAACE,WAAW,KAAKD,CAAC,CAACC,WAAW,EAAE,OAAO,KAAK;IAEjD,IAAIC,MAAM;IACV,IAAIC,CAAC;IACL,IAAIC,KAAK,CAACC,OAAO,CAACN,CAAC,CAAC,EAAE;MAClBG,MAAM,GAAGH,CAAC,CAACG,MAAM;MACjB,IAAIA,MAAM,KAAKF,CAAC,CAACE,MAAM,EAAE,OAAO,KAAK;MACrC,KAAKC,CAAC,GAAGD,MAAM,EAAEC,CAAC,EAAE,KAAK,CAAC,GACtB,IAAI,CAACL,SAAS,CAACC,CAAC,CAACI,CAAC,CAAC,EAAEH,CAAC,CAACG,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK;MAC5C,OAAO,IAAI;IACf;IAGA,IAAIJ,CAAC,CAACE,WAAW,KAAKK,MAAM,EAAE,OAAOP,CAAC,CAACQ,MAAM,KAAKP,CAAC,CAACO,MAAM,IAAIR,CAAC,CAACS,KAAK,KAAKR,CAAC,CAACQ,KAAK;IACjF,IAAIT,CAAC,CAACU,OAAO,KAAKC,MAAM,CAACC,SAAS,CAACF,OAAO,EAAE,OAAOV,CAAC,CAACU,OAAO,CAAC,CAAC,KAAKT,CAAC,CAACS,OAAO,CAAC,CAAC;IAC9E,IAAIV,CAAC,CAACa,QAAQ,KAAKF,MAAM,CAACC,SAAS,CAACC,QAAQ,EAAE,OAAOb,CAAC,CAACa,QAAQ,CAAC,CAAC,KAAKZ,CAAC,CAACY,QAAQ,CAAC,CAAC;IAElF,IAAMC,IAAI,GAAGH,MAAM,CAACG,IAAI,CAACd,CAAC,CAAC;IAC3BG,MAAM,GAAGW,IAAI,CAACX,MAAM;IACpB,IAAIA,MAAM,KAAKQ,MAAM,CAACG,IAAI,CAACb,CAAC,CAAC,CAACE,MAAM,EAAE,OAAO,KAAK;;IAElD;IACA,KAAKC,CAAC,GAAGD,MAAM,EAAEC,CAAC,EAAE,KAAK,CAAC,GAAG;MACzB,IAAMW,GAAG,GAAGD,IAAI,CAACV,CAAC,CAAC;MACnB,IAAI,CAACO,MAAM,CAACC,SAAS,CAACI,cAAc,CAACC,IAAI,CAAChB,CAAC,EAAEc,GAAG,CAAC,IAAI,CAAChB,SAAS,CAACC,CAAC,CAACe,GAAG,CAAC,EAAEd,CAAC,CAACc,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK;IACjG;IAEA,OAAO,IAAI;EACf;;EAEA;EACA,OAAOf,CAAC,KAAKA,CAAC,IAAIC,CAAC,KAAKA,CAAC;AAC7B","ignoreList":[]}
@@ -169,6 +169,31 @@ export function getProperty(object, path, value) {
169
169
  if (!isObject(object) || typeof path !== 'string') {
170
170
  return value === undefined ? object : value;
171
171
  }
172
+
173
+ /**
174
+ * Fast path for simple dot-notation paths without bracket
175
+ * notation or backslash escaping. This covers the vast majority
176
+ * of RxDB property access patterns (e.g. 'nested.field')
177
+ * and avoids the expensive getPathSegments() parser.
178
+ */
179
+ if (!path.includes('[') && !path.includes('\\')) {
180
+ var segments = path.split('.');
181
+ var current = object;
182
+ for (var i = 0; i < segments.length; i++) {
183
+ var seg = segments[i];
184
+ if (disallowedKeys.has(seg)) {
185
+ return value;
186
+ }
187
+ current = current[seg];
188
+ if (current === undefined || current === null) {
189
+ if (i !== segments.length - 1) {
190
+ return value;
191
+ }
192
+ break;
193
+ }
194
+ }
195
+ return current === undefined ? value : current;
196
+ }
172
197
  var pathArray = getPathSegments(path);
173
198
  if (pathArray.length === 0) {
174
199
  return value;
@@ -1 +1 @@
1
- {"version":3,"file":"utils-object-dot-prop.js","names":["isObject","value","type","disallowedKeys","Set","digits","getPathSegments","path","parts","currentSegment","currentPart","isIgnoring","character","Error","has","push","Number","parseInt","isStringIndex","object","key","Array","isArray","index","isInteger","assertNotStringIndex","getProperty","join","includes","undefined","pathArray","length","setProperty","root","deleteProperty","hasProperty","escapePath","TypeError","replace","entries","map","v","Object","stringifyPath","pathSegments","result","segment","deepKeysIterator","currentPath","deepKeys"],"sources":["../../../../src/plugins/utils/utils-object-dot-prop.ts"],"sourcesContent":["/**\r\n * Copied from\r\n * @link https://github.com/sindresorhus/dot-prop/blob/main/index.js\r\n * because it is currently an esm only module.\r\n * TODO use the npm package again when RxDB is also fully esm.\r\n */\r\n\r\nconst isObject = (value: null) => {\r\n const type = typeof value;\r\n return value !== null && (type === 'object' || type === 'function');\r\n};\r\n\r\nconst disallowedKeys = new Set([\r\n '__proto__',\r\n 'prototype',\r\n 'constructor',\r\n]);\r\n\r\nconst digits = new Set('0123456789');\r\n\r\nfunction getPathSegments(path: string) {\r\n const parts = [];\r\n let currentSegment = '';\r\n let currentPart = 'start';\r\n let isIgnoring = false;\r\n\r\n for (const character of path) {\r\n switch (character) {\r\n case '\\\\': {\r\n if (currentPart === 'index') {\r\n throw new Error('Invalid character in an index');\r\n }\r\n\r\n if (currentPart === 'indexEnd') {\r\n throw new Error('Invalid character after an index');\r\n }\r\n\r\n if (isIgnoring) {\r\n currentSegment += character;\r\n }\r\n\r\n currentPart = 'property';\r\n isIgnoring = !isIgnoring;\r\n break;\r\n }\r\n\r\n case '.': {\r\n if (currentPart === 'index') {\r\n throw new Error('Invalid character in an index');\r\n }\r\n\r\n if (currentPart === 'indexEnd') {\r\n currentPart = 'property';\r\n break;\r\n }\r\n\r\n if (isIgnoring) {\r\n isIgnoring = false;\r\n currentSegment += character;\r\n break;\r\n }\r\n\r\n if (disallowedKeys.has(currentSegment)) {\r\n return [];\r\n }\r\n\r\n parts.push(currentSegment);\r\n currentSegment = '';\r\n currentPart = 'property';\r\n break;\r\n }\r\n\r\n case '[': {\r\n if (currentPart === 'index') {\r\n throw new Error('Invalid character in an index');\r\n }\r\n\r\n if (currentPart === 'indexEnd') {\r\n currentPart = 'index';\r\n break;\r\n }\r\n\r\n if (isIgnoring) {\r\n isIgnoring = false;\r\n currentSegment += character;\r\n break;\r\n }\r\n\r\n if (currentPart === 'property') {\r\n if (disallowedKeys.has(currentSegment)) {\r\n return [];\r\n }\r\n\r\n parts.push(currentSegment);\r\n currentSegment = '';\r\n }\r\n\r\n currentPart = 'index';\r\n break;\r\n }\r\n\r\n case ']': {\r\n if (currentPart === 'index') {\r\n parts.push(Number.parseInt(currentSegment, 10));\r\n currentSegment = '';\r\n currentPart = 'indexEnd';\r\n break;\r\n }\r\n\r\n if (currentPart === 'indexEnd') {\r\n throw new Error('Invalid character after an index');\r\n }\r\n\r\n // Falls through\r\n }\r\n\r\n default: {\r\n if (currentPart === 'index' && !digits.has(character)) {\r\n throw new Error('Invalid character in an index');\r\n }\r\n\r\n if (currentPart === 'indexEnd') {\r\n throw new Error('Invalid character after an index');\r\n }\r\n\r\n if (currentPart === 'start') {\r\n currentPart = 'property';\r\n }\r\n\r\n if (isIgnoring) {\r\n isIgnoring = false;\r\n currentSegment += '\\\\';\r\n }\r\n\r\n currentSegment += character;\r\n }\r\n }\r\n }\r\n\r\n if (isIgnoring) {\r\n currentSegment += '\\\\';\r\n }\r\n\r\n switch (currentPart) {\r\n case 'property': {\r\n if (disallowedKeys.has(currentSegment)) {\r\n return [];\r\n }\r\n\r\n parts.push(currentSegment);\r\n\r\n break;\r\n }\r\n\r\n case 'index': {\r\n throw new Error('Index was not closed');\r\n }\r\n\r\n case 'start': {\r\n parts.push('');\r\n\r\n break;\r\n }\r\n // No default\r\n }\r\n\r\n return parts;\r\n}\r\n\r\nfunction isStringIndex(object: any[], key: string) {\r\n if (typeof key !== 'number' && Array.isArray(object)) {\r\n const index = Number.parseInt(key, 10);\r\n return Number.isInteger(index) && object[index] === object[key as any];\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction assertNotStringIndex(object: any, key: string | number) {\r\n if (isStringIndex(object, key as any)) {\r\n throw new Error('Cannot use string index');\r\n }\r\n}\r\n\r\n/**\r\n * TODO we need some performance tests and improvements here.\r\n */\r\nexport function getProperty(object: any, path: string | string[], value?: any) {\r\n if (Array.isArray(path)) {\r\n path = path.join('.');\r\n }\r\n\r\n /**\r\n * Performance shortcut.\r\n * In most cases we just have a simple property name\r\n * so we can directly return it.\r\n */\r\n if (\r\n !path.includes('.') &&\r\n !path.includes('[')\r\n ) {\r\n return object[path];\r\n }\r\n\r\n if (!isObject(object as any) || typeof path !== 'string') {\r\n return value === undefined ? object : value;\r\n }\r\n\r\n const pathArray = getPathSegments(path);\r\n if (pathArray.length === 0) {\r\n return value;\r\n }\r\n\r\n for (let index = 0; index < pathArray.length; index++) {\r\n const key = pathArray[index];\r\n\r\n if (isStringIndex(object as any, key as any)) {\r\n object = index === pathArray.length - 1 ? undefined : null;\r\n } else {\r\n object = (object as any)[key];\r\n }\r\n\r\n if (object === undefined || object === null) {\r\n // `object` is either `undefined` or `null` so we want to stop the loop, and\r\n // if this is not the last bit of the path, and\r\n // if it didn't return `undefined`\r\n // it would return `null` if `object` is `null`\r\n // but we want `get({foo: null}, 'foo.bar')` to equal `undefined`, or the supplied value, not `null`\r\n if (index !== pathArray.length - 1) {\r\n return value;\r\n }\r\n\r\n break;\r\n }\r\n }\r\n\r\n return object === undefined ? value : object;\r\n}\r\n\r\nexport function setProperty(object: any, path: string, value: any) {\r\n if (Array.isArray(path)) {\r\n path = path.join('.');\r\n }\r\n\r\n if (!isObject(object as any) || typeof path !== 'string') {\r\n return object;\r\n }\r\n\r\n const root = object;\r\n const pathArray = getPathSegments(path);\r\n\r\n for (let index = 0; index < pathArray.length; index++) {\r\n const key = pathArray[index];\r\n\r\n assertNotStringIndex(object, key);\r\n\r\n if (index === pathArray.length - 1) {\r\n object[key] = value;\r\n } else if (!isObject(object[key])) {\r\n object[key] = typeof pathArray[index + 1] === 'number' ? [] : {};\r\n }\r\n\r\n object = object[key];\r\n }\r\n\r\n return root;\r\n}\r\n\r\nexport function deleteProperty(object: any, path: string) {\r\n if (!isObject(object as any) || typeof path !== 'string') {\r\n return false;\r\n }\r\n\r\n const pathArray = getPathSegments(path);\r\n\r\n for (let index = 0; index < pathArray.length; index++) {\r\n const key = pathArray[index];\r\n\r\n assertNotStringIndex(object, key);\r\n\r\n if (index === pathArray.length - 1) {\r\n delete object[key];\r\n return true;\r\n }\r\n\r\n object = object[key];\r\n\r\n if (!isObject(object as any)) {\r\n return false;\r\n }\r\n }\r\n}\r\n\r\nexport function hasProperty(object: any, path: string) {\r\n if (!isObject(object) || typeof path !== 'string') {\r\n return false;\r\n }\r\n\r\n const pathArray = getPathSegments(path);\r\n if (pathArray.length === 0) {\r\n return false;\r\n }\r\n\r\n for (const key of pathArray) {\r\n if (!isObject(object) || !(key in object) || isStringIndex(object, key as any)) {\r\n return false;\r\n }\r\n\r\n object = object[key];\r\n }\r\n\r\n return true;\r\n}\r\n\r\n// TODO: Backslashes with no effect should not be escaped\r\nfunction escapePath(path: string) {\r\n if (typeof path !== 'string') {\r\n throw new TypeError('Expected a string');\r\n }\r\n\r\n return path.replace(/[\\\\.[]/g, '\\\\$&');\r\n}\r\n\r\n// The keys returned by Object.entries() for arrays are strings\r\nfunction entries(value: any) {\r\n if (Array.isArray(value)) {\r\n return value.map((v, index) => [index, v]);\r\n }\r\n\r\n return Object.entries(value);\r\n}\r\n\r\nfunction stringifyPath(pathSegments: never[]) {\r\n let result = '';\r\n\r\n // eslint-disable-next-line prefer-const\r\n for (let [index, segment] of entries(pathSegments)) {\r\n if (typeof segment === 'number') {\r\n result += `[${segment}]`;\r\n } else {\r\n segment = escapePath(segment);\r\n result += index === 0 ? segment : `.${segment}`;\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction* deepKeysIterator(object: any, currentPath = []): any {\r\n if (!isObject(object)) {\r\n if (currentPath.length > 0) {\r\n yield stringifyPath(currentPath);\r\n }\r\n\r\n return;\r\n }\r\n\r\n for (const [key, value] of entries(object)) {\r\n yield* deepKeysIterator(value, [...currentPath, key] as any);\r\n }\r\n}\r\n\r\nexport function deepKeys(object: any) {\r\n return [...deepKeysIterator(object)];\r\n}\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"utils-object-dot-prop.js","names":["isObject","value","type","disallowedKeys","Set","digits","getPathSegments","path","parts","currentSegment","currentPart","isIgnoring","character","Error","has","push","Number","parseInt","isStringIndex","object","key","Array","isArray","index","isInteger","assertNotStringIndex","getProperty","join","includes","undefined","segments","split","current","i","length","seg","pathArray","setProperty","root","deleteProperty","hasProperty","escapePath","TypeError","replace","entries","map","v","Object","stringifyPath","pathSegments","result","segment","deepKeysIterator","currentPath","deepKeys"],"sources":["../../../../src/plugins/utils/utils-object-dot-prop.ts"],"sourcesContent":["/**\r\n * Copied from\r\n * @link https://github.com/sindresorhus/dot-prop/blob/main/index.js\r\n * because it is currently an esm only module.\r\n * TODO use the npm package again when RxDB is also fully esm.\r\n */\r\n\r\nconst isObject = (value: null) => {\r\n const type = typeof value;\r\n return value !== null && (type === 'object' || type === 'function');\r\n};\r\n\r\nconst disallowedKeys = new Set([\r\n '__proto__',\r\n 'prototype',\r\n 'constructor',\r\n]);\r\n\r\nconst digits = new Set('0123456789');\r\n\r\nfunction getPathSegments(path: string) {\r\n const parts = [];\r\n let currentSegment = '';\r\n let currentPart = 'start';\r\n let isIgnoring = false;\r\n\r\n for (const character of path) {\r\n switch (character) {\r\n case '\\\\': {\r\n if (currentPart === 'index') {\r\n throw new Error('Invalid character in an index');\r\n }\r\n\r\n if (currentPart === 'indexEnd') {\r\n throw new Error('Invalid character after an index');\r\n }\r\n\r\n if (isIgnoring) {\r\n currentSegment += character;\r\n }\r\n\r\n currentPart = 'property';\r\n isIgnoring = !isIgnoring;\r\n break;\r\n }\r\n\r\n case '.': {\r\n if (currentPart === 'index') {\r\n throw new Error('Invalid character in an index');\r\n }\r\n\r\n if (currentPart === 'indexEnd') {\r\n currentPart = 'property';\r\n break;\r\n }\r\n\r\n if (isIgnoring) {\r\n isIgnoring = false;\r\n currentSegment += character;\r\n break;\r\n }\r\n\r\n if (disallowedKeys.has(currentSegment)) {\r\n return [];\r\n }\r\n\r\n parts.push(currentSegment);\r\n currentSegment = '';\r\n currentPart = 'property';\r\n break;\r\n }\r\n\r\n case '[': {\r\n if (currentPart === 'index') {\r\n throw new Error('Invalid character in an index');\r\n }\r\n\r\n if (currentPart === 'indexEnd') {\r\n currentPart = 'index';\r\n break;\r\n }\r\n\r\n if (isIgnoring) {\r\n isIgnoring = false;\r\n currentSegment += character;\r\n break;\r\n }\r\n\r\n if (currentPart === 'property') {\r\n if (disallowedKeys.has(currentSegment)) {\r\n return [];\r\n }\r\n\r\n parts.push(currentSegment);\r\n currentSegment = '';\r\n }\r\n\r\n currentPart = 'index';\r\n break;\r\n }\r\n\r\n case ']': {\r\n if (currentPart === 'index') {\r\n parts.push(Number.parseInt(currentSegment, 10));\r\n currentSegment = '';\r\n currentPart = 'indexEnd';\r\n break;\r\n }\r\n\r\n if (currentPart === 'indexEnd') {\r\n throw new Error('Invalid character after an index');\r\n }\r\n\r\n // Falls through\r\n }\r\n\r\n default: {\r\n if (currentPart === 'index' && !digits.has(character)) {\r\n throw new Error('Invalid character in an index');\r\n }\r\n\r\n if (currentPart === 'indexEnd') {\r\n throw new Error('Invalid character after an index');\r\n }\r\n\r\n if (currentPart === 'start') {\r\n currentPart = 'property';\r\n }\r\n\r\n if (isIgnoring) {\r\n isIgnoring = false;\r\n currentSegment += '\\\\';\r\n }\r\n\r\n currentSegment += character;\r\n }\r\n }\r\n }\r\n\r\n if (isIgnoring) {\r\n currentSegment += '\\\\';\r\n }\r\n\r\n switch (currentPart) {\r\n case 'property': {\r\n if (disallowedKeys.has(currentSegment)) {\r\n return [];\r\n }\r\n\r\n parts.push(currentSegment);\r\n\r\n break;\r\n }\r\n\r\n case 'index': {\r\n throw new Error('Index was not closed');\r\n }\r\n\r\n case 'start': {\r\n parts.push('');\r\n\r\n break;\r\n }\r\n // No default\r\n }\r\n\r\n return parts;\r\n}\r\n\r\nfunction isStringIndex(object: any[], key: string) {\r\n if (typeof key !== 'number' && Array.isArray(object)) {\r\n const index = Number.parseInt(key, 10);\r\n return Number.isInteger(index) && object[index] === object[key as any];\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction assertNotStringIndex(object: any, key: string | number) {\r\n if (isStringIndex(object, key as any)) {\r\n throw new Error('Cannot use string index');\r\n }\r\n}\r\n\r\n/**\r\n * TODO we need some performance tests and improvements here.\r\n */\r\nexport function getProperty(object: any, path: string | string[], value?: any) {\r\n if (Array.isArray(path)) {\r\n path = path.join('.');\r\n }\r\n\r\n /**\r\n * Performance shortcut.\r\n * In most cases we just have a simple property name\r\n * so we can directly return it.\r\n */\r\n if (\r\n !path.includes('.') &&\r\n !path.includes('[')\r\n ) {\r\n return object[path];\r\n }\r\n\r\n if (!isObject(object as any) || typeof path !== 'string') {\r\n return value === undefined ? object : value;\r\n }\r\n\r\n /**\r\n * Fast path for simple dot-notation paths without bracket\r\n * notation or backslash escaping. This covers the vast majority\r\n * of RxDB property access patterns (e.g. 'nested.field')\r\n * and avoids the expensive getPathSegments() parser.\r\n */\r\n if (!path.includes('[') && !path.includes('\\\\')) {\r\n const segments = path.split('.');\r\n let current = object;\r\n for (let i = 0; i < segments.length; i++) {\r\n const seg = segments[i];\r\n if (disallowedKeys.has(seg)) {\r\n return value;\r\n }\r\n current = current[seg];\r\n if (current === undefined || current === null) {\r\n if (i !== segments.length - 1) {\r\n return value;\r\n }\r\n break;\r\n }\r\n }\r\n return current === undefined ? value : current;\r\n }\r\n\r\n const pathArray = getPathSegments(path);\r\n if (pathArray.length === 0) {\r\n return value;\r\n }\r\n\r\n for (let index = 0; index < pathArray.length; index++) {\r\n const key = pathArray[index];\r\n\r\n if (isStringIndex(object as any, key as any)) {\r\n object = index === pathArray.length - 1 ? undefined : null;\r\n } else {\r\n object = (object as any)[key];\r\n }\r\n\r\n if (object === undefined || object === null) {\r\n // `object` is either `undefined` or `null` so we want to stop the loop, and\r\n // if this is not the last bit of the path, and\r\n // if it didn't return `undefined`\r\n // it would return `null` if `object` is `null`\r\n // but we want `get({foo: null}, 'foo.bar')` to equal `undefined`, or the supplied value, not `null`\r\n if (index !== pathArray.length - 1) {\r\n return value;\r\n }\r\n\r\n break;\r\n }\r\n }\r\n\r\n return object === undefined ? value : object;\r\n}\r\n\r\nexport function setProperty(object: any, path: string, value: any) {\r\n if (Array.isArray(path)) {\r\n path = path.join('.');\r\n }\r\n\r\n if (!isObject(object as any) || typeof path !== 'string') {\r\n return object;\r\n }\r\n\r\n const root = object;\r\n const pathArray = getPathSegments(path);\r\n\r\n for (let index = 0; index < pathArray.length; index++) {\r\n const key = pathArray[index];\r\n\r\n assertNotStringIndex(object, key);\r\n\r\n if (index === pathArray.length - 1) {\r\n object[key] = value;\r\n } else if (!isObject(object[key])) {\r\n object[key] = typeof pathArray[index + 1] === 'number' ? [] : {};\r\n }\r\n\r\n object = object[key];\r\n }\r\n\r\n return root;\r\n}\r\n\r\nexport function deleteProperty(object: any, path: string) {\r\n if (!isObject(object as any) || typeof path !== 'string') {\r\n return false;\r\n }\r\n\r\n const pathArray = getPathSegments(path);\r\n\r\n for (let index = 0; index < pathArray.length; index++) {\r\n const key = pathArray[index];\r\n\r\n assertNotStringIndex(object, key);\r\n\r\n if (index === pathArray.length - 1) {\r\n delete object[key];\r\n return true;\r\n }\r\n\r\n object = object[key];\r\n\r\n if (!isObject(object as any)) {\r\n return false;\r\n }\r\n }\r\n}\r\n\r\nexport function hasProperty(object: any, path: string) {\r\n if (!isObject(object) || typeof path !== 'string') {\r\n return false;\r\n }\r\n\r\n const pathArray = getPathSegments(path);\r\n if (pathArray.length === 0) {\r\n return false;\r\n }\r\n\r\n for (const key of pathArray) {\r\n if (!isObject(object) || !(key in object) || isStringIndex(object, key as any)) {\r\n return false;\r\n }\r\n\r\n object = object[key];\r\n }\r\n\r\n return true;\r\n}\r\n\r\n// TODO: Backslashes with no effect should not be escaped\r\nfunction escapePath(path: string) {\r\n if (typeof path !== 'string') {\r\n throw new TypeError('Expected a string');\r\n }\r\n\r\n return path.replace(/[\\\\.[]/g, '\\\\$&');\r\n}\r\n\r\n// The keys returned by Object.entries() for arrays are strings\r\nfunction entries(value: any) {\r\n if (Array.isArray(value)) {\r\n return value.map((v, index) => [index, v]);\r\n }\r\n\r\n return Object.entries(value);\r\n}\r\n\r\nfunction stringifyPath(pathSegments: never[]) {\r\n let result = '';\r\n\r\n // eslint-disable-next-line prefer-const\r\n for (let [index, segment] of entries(pathSegments)) {\r\n if (typeof segment === 'number') {\r\n result += `[${segment}]`;\r\n } else {\r\n segment = escapePath(segment);\r\n result += index === 0 ? segment : `.${segment}`;\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction* deepKeysIterator(object: any, currentPath = []): any {\r\n if (!isObject(object)) {\r\n if (currentPath.length > 0) {\r\n yield stringifyPath(currentPath);\r\n }\r\n\r\n return;\r\n }\r\n\r\n for (const [key, value] of entries(object)) {\r\n yield* deepKeysIterator(value, [...currentPath, key] as any);\r\n }\r\n}\r\n\r\nexport function deepKeys(object: any) {\r\n return [...deepKeysIterator(object)];\r\n}\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAMA,QAAQ,GAAIC,KAAW,IAAK;EAC9B,IAAMC,IAAI,GAAG,OAAOD,KAAK;EACzB,OAAOA,KAAK,KAAK,IAAI,KAAKC,IAAI,KAAK,QAAQ,IAAIA,IAAI,KAAK,UAAU,CAAC;AACvE,CAAC;AAED,IAAMC,cAAc,GAAG,IAAIC,GAAG,CAAC,CAC3B,WAAW,EACX,WAAW,EACX,aAAa,CAChB,CAAC;AAEF,IAAMC,MAAM,GAAG,IAAID,GAAG,CAAC,YAAY,CAAC;AAEpC,SAASE,eAAeA,CAACC,IAAY,EAAE;EACnC,IAAMC,KAAK,GAAG,EAAE;EAChB,IAAIC,cAAc,GAAG,EAAE;EACvB,IAAIC,WAAW,GAAG,OAAO;EACzB,IAAIC,UAAU,GAAG,KAAK;EAEtB,KAAK,IAAMC,SAAS,IAAIL,IAAI,EAAE;IAC1B,QAAQK,SAAS;MACb,KAAK,IAAI;QAAE;UACP,IAAIF,WAAW,KAAK,OAAO,EAAE;YACzB,MAAM,IAAIG,KAAK,CAAC,+BAA+B,CAAC;UACpD;UAEA,IAAIH,WAAW,KAAK,UAAU,EAAE;YAC5B,MAAM,IAAIG,KAAK,CAAC,kCAAkC,CAAC;UACvD;UAEA,IAAIF,UAAU,EAAE;YACZF,cAAc,IAAIG,SAAS;UAC/B;UAEAF,WAAW,GAAG,UAAU;UACxBC,UAAU,GAAG,CAACA,UAAU;UACxB;QACJ;MAEA,KAAK,GAAG;QAAE;UACN,IAAID,WAAW,KAAK,OAAO,EAAE;YACzB,MAAM,IAAIG,KAAK,CAAC,+BAA+B,CAAC;UACpD;UAEA,IAAIH,WAAW,KAAK,UAAU,EAAE;YAC5BA,WAAW,GAAG,UAAU;YACxB;UACJ;UAEA,IAAIC,UAAU,EAAE;YACZA,UAAU,GAAG,KAAK;YAClBF,cAAc,IAAIG,SAAS;YAC3B;UACJ;UAEA,IAAIT,cAAc,CAACW,GAAG,CAACL,cAAc,CAAC,EAAE;YACpC,OAAO,EAAE;UACb;UAEAD,KAAK,CAACO,IAAI,CAACN,cAAc,CAAC;UAC1BA,cAAc,GAAG,EAAE;UACnBC,WAAW,GAAG,UAAU;UACxB;QACJ;MAEA,KAAK,GAAG;QAAE;UACN,IAAIA,WAAW,KAAK,OAAO,EAAE;YACzB,MAAM,IAAIG,KAAK,CAAC,+BAA+B,CAAC;UACpD;UAEA,IAAIH,WAAW,KAAK,UAAU,EAAE;YAC5BA,WAAW,GAAG,OAAO;YACrB;UACJ;UAEA,IAAIC,UAAU,EAAE;YACZA,UAAU,GAAG,KAAK;YAClBF,cAAc,IAAIG,SAAS;YAC3B;UACJ;UAEA,IAAIF,WAAW,KAAK,UAAU,EAAE;YAC5B,IAAIP,cAAc,CAACW,GAAG,CAACL,cAAc,CAAC,EAAE;cACpC,OAAO,EAAE;YACb;YAEAD,KAAK,CAACO,IAAI,CAACN,cAAc,CAAC;YAC1BA,cAAc,GAAG,EAAE;UACvB;UAEAC,WAAW,GAAG,OAAO;UACrB;QACJ;MAEA,KAAK,GAAG;QAAE;UACN,IAAIA,WAAW,KAAK,OAAO,EAAE;YACzBF,KAAK,CAACO,IAAI,CAACC,MAAM,CAACC,QAAQ,CAACR,cAAc,EAAE,EAAE,CAAC,CAAC;YAC/CA,cAAc,GAAG,EAAE;YACnBC,WAAW,GAAG,UAAU;YACxB;UACJ;UAEA,IAAIA,WAAW,KAAK,UAAU,EAAE;YAC5B,MAAM,IAAIG,KAAK,CAAC,kCAAkC,CAAC;UACvD;;UAEA;QACJ;MAEA;QAAS;UACL,IAAIH,WAAW,KAAK,OAAO,IAAI,CAACL,MAAM,CAACS,GAAG,CAACF,SAAS,CAAC,EAAE;YACnD,MAAM,IAAIC,KAAK,CAAC,+BAA+B,CAAC;UACpD;UAEA,IAAIH,WAAW,KAAK,UAAU,EAAE;YAC5B,MAAM,IAAIG,KAAK,CAAC,kCAAkC,CAAC;UACvD;UAEA,IAAIH,WAAW,KAAK,OAAO,EAAE;YACzBA,WAAW,GAAG,UAAU;UAC5B;UAEA,IAAIC,UAAU,EAAE;YACZA,UAAU,GAAG,KAAK;YAClBF,cAAc,IAAI,IAAI;UAC1B;UAEAA,cAAc,IAAIG,SAAS;QAC/B;IACJ;EACJ;EAEA,IAAID,UAAU,EAAE;IACZF,cAAc,IAAI,IAAI;EAC1B;EAEA,QAAQC,WAAW;IACf,KAAK,UAAU;MAAE;QACb,IAAIP,cAAc,CAACW,GAAG,CAACL,cAAc,CAAC,EAAE;UACpC,OAAO,EAAE;QACb;QAEAD,KAAK,CAACO,IAAI,CAACN,cAAc,CAAC;QAE1B;MACJ;IAEA,KAAK,OAAO;MAAE;QACV,MAAM,IAAII,KAAK,CAAC,sBAAsB,CAAC;MAC3C;IAEA,KAAK,OAAO;MAAE;QACVL,KAAK,CAACO,IAAI,CAAC,EAAE,CAAC;QAEd;MACJ;IACA;EACJ;EAEA,OAAOP,KAAK;AAChB;AAEA,SAASU,aAAaA,CAACC,MAAa,EAAEC,GAAW,EAAE;EAC/C,IAAI,OAAOA,GAAG,KAAK,QAAQ,IAAIC,KAAK,CAACC,OAAO,CAACH,MAAM,CAAC,EAAE;IAClD,IAAMI,KAAK,GAAGP,MAAM,CAACC,QAAQ,CAACG,GAAG,EAAE,EAAE,CAAC;IACtC,OAAOJ,MAAM,CAACQ,SAAS,CAACD,KAAK,CAAC,IAAIJ,MAAM,CAACI,KAAK,CAAC,KAAKJ,MAAM,CAACC,GAAG,CAAQ;EAC1E;EAEA,OAAO,KAAK;AAChB;AAEA,SAASK,oBAAoBA,CAACN,MAAW,EAAEC,GAAoB,EAAE;EAC7D,IAAIF,aAAa,CAACC,MAAM,EAAEC,GAAU,CAAC,EAAE;IACnC,MAAM,IAAIP,KAAK,CAAC,yBAAyB,CAAC;EAC9C;AACJ;;AAEA;AACA;AACA;AACA,OAAO,SAASa,WAAWA,CAACP,MAAW,EAAEZ,IAAuB,EAAEN,KAAW,EAAE;EAC3E,IAAIoB,KAAK,CAACC,OAAO,CAACf,IAAI,CAAC,EAAE;IACrBA,IAAI,GAAGA,IAAI,CAACoB,IAAI,CAAC,GAAG,CAAC;EACzB;;EAEA;AACJ;AACA;AACA;AACA;EACI,IACI,CAACpB,IAAI,CAACqB,QAAQ,CAAC,GAAG,CAAC,IACnB,CAACrB,IAAI,CAACqB,QAAQ,CAAC,GAAG,CAAC,EACrB;IACE,OAAOT,MAAM,CAACZ,IAAI,CAAC;EACvB;EAEA,IAAI,CAACP,QAAQ,CAACmB,MAAa,CAAC,IAAI,OAAOZ,IAAI,KAAK,QAAQ,EAAE;IACtD,OAAON,KAAK,KAAK4B,SAAS,GAAGV,MAAM,GAAGlB,KAAK;EAC/C;;EAEA;AACJ;AACA;AACA;AACA;AACA;EACI,IAAI,CAACM,IAAI,CAACqB,QAAQ,CAAC,GAAG,CAAC,IAAI,CAACrB,IAAI,CAACqB,QAAQ,CAAC,IAAI,CAAC,EAAE;IAC7C,IAAME,QAAQ,GAAGvB,IAAI,CAACwB,KAAK,CAAC,GAAG,CAAC;IAChC,IAAIC,OAAO,GAAGb,MAAM;IACpB,KAAK,IAAIc,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,QAAQ,CAACI,MAAM,EAAED,CAAC,EAAE,EAAE;MACtC,IAAME,GAAG,GAAGL,QAAQ,CAACG,CAAC,CAAC;MACvB,IAAI9B,cAAc,CAACW,GAAG,CAACqB,GAAG,CAAC,EAAE;QACzB,OAAOlC,KAAK;MAChB;MACA+B,OAAO,GAAGA,OAAO,CAACG,GAAG,CAAC;MACtB,IAAIH,OAAO,KAAKH,SAAS,IAAIG,OAAO,KAAK,IAAI,EAAE;QAC3C,IAAIC,CAAC,KAAKH,QAAQ,CAACI,MAAM,GAAG,CAAC,EAAE;UAC3B,OAAOjC,KAAK;QAChB;QACA;MACJ;IACJ;IACA,OAAO+B,OAAO,KAAKH,SAAS,GAAG5B,KAAK,GAAG+B,OAAO;EAClD;EAEA,IAAMI,SAAS,GAAG9B,eAAe,CAACC,IAAI,CAAC;EACvC,IAAI6B,SAAS,CAACF,MAAM,KAAK,CAAC,EAAE;IACxB,OAAOjC,KAAK;EAChB;EAEA,KAAK,IAAIsB,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGa,SAAS,CAACF,MAAM,EAAEX,KAAK,EAAE,EAAE;IACnD,IAAMH,GAAG,GAAGgB,SAAS,CAACb,KAAK,CAAC;IAE5B,IAAIL,aAAa,CAACC,MAAM,EAASC,GAAU,CAAC,EAAE;MAC1CD,MAAM,GAAGI,KAAK,KAAKa,SAAS,CAACF,MAAM,GAAG,CAAC,GAAGL,SAAS,GAAG,IAAI;IAC9D,CAAC,MAAM;MACHV,MAAM,GAAIA,MAAM,CAASC,GAAG,CAAC;IACjC;IAEA,IAAID,MAAM,KAAKU,SAAS,IAAIV,MAAM,KAAK,IAAI,EAAE;MACzC;MACA;MACA;MACA;MACA;MACA,IAAII,KAAK,KAAKa,SAAS,CAACF,MAAM,GAAG,CAAC,EAAE;QAChC,OAAOjC,KAAK;MAChB;MAEA;IACJ;EACJ;EAEA,OAAOkB,MAAM,KAAKU,SAAS,GAAG5B,KAAK,GAAGkB,MAAM;AAChD;AAEA,OAAO,SAASkB,WAAWA,CAAClB,MAAW,EAAEZ,IAAY,EAAEN,KAAU,EAAE;EAC/D,IAAIoB,KAAK,CAACC,OAAO,CAACf,IAAI,CAAC,EAAE;IACrBA,IAAI,GAAGA,IAAI,CAACoB,IAAI,CAAC,GAAG,CAAC;EACzB;EAEA,IAAI,CAAC3B,QAAQ,CAACmB,MAAa,CAAC,IAAI,OAAOZ,IAAI,KAAK,QAAQ,EAAE;IACtD,OAAOY,MAAM;EACjB;EAEA,IAAMmB,IAAI,GAAGnB,MAAM;EACnB,IAAMiB,SAAS,GAAG9B,eAAe,CAACC,IAAI,CAAC;EAEvC,KAAK,IAAIgB,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGa,SAAS,CAACF,MAAM,EAAEX,KAAK,EAAE,EAAE;IACnD,IAAMH,GAAG,GAAGgB,SAAS,CAACb,KAAK,CAAC;IAE5BE,oBAAoB,CAACN,MAAM,EAAEC,GAAG,CAAC;IAEjC,IAAIG,KAAK,KAAKa,SAAS,CAACF,MAAM,GAAG,CAAC,EAAE;MAChCf,MAAM,CAACC,GAAG,CAAC,GAAGnB,KAAK;IACvB,CAAC,MAAM,IAAI,CAACD,QAAQ,CAACmB,MAAM,CAACC,GAAG,CAAC,CAAC,EAAE;MAC/BD,MAAM,CAACC,GAAG,CAAC,GAAG,OAAOgB,SAAS,CAACb,KAAK,GAAG,CAAC,CAAC,KAAK,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC;IACpE;IAEAJ,MAAM,GAAGA,MAAM,CAACC,GAAG,CAAC;EACxB;EAEA,OAAOkB,IAAI;AACf;AAEA,OAAO,SAASC,cAAcA,CAACpB,MAAW,EAAEZ,IAAY,EAAE;EACtD,IAAI,CAACP,QAAQ,CAACmB,MAAa,CAAC,IAAI,OAAOZ,IAAI,KAAK,QAAQ,EAAE;IACtD,OAAO,KAAK;EAChB;EAEA,IAAM6B,SAAS,GAAG9B,eAAe,CAACC,IAAI,CAAC;EAEvC,KAAK,IAAIgB,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGa,SAAS,CAACF,MAAM,EAAEX,KAAK,EAAE,EAAE;IACnD,IAAMH,GAAG,GAAGgB,SAAS,CAACb,KAAK,CAAC;IAE5BE,oBAAoB,CAACN,MAAM,EAAEC,GAAG,CAAC;IAEjC,IAAIG,KAAK,KAAKa,SAAS,CAACF,MAAM,GAAG,CAAC,EAAE;MAChC,OAAOf,MAAM,CAACC,GAAG,CAAC;MAClB,OAAO,IAAI;IACf;IAEAD,MAAM,GAAGA,MAAM,CAACC,GAAG,CAAC;IAEpB,IAAI,CAACpB,QAAQ,CAACmB,MAAa,CAAC,EAAE;MAC1B,OAAO,KAAK;IAChB;EACJ;AACJ;AAEA,OAAO,SAASqB,WAAWA,CAACrB,MAAW,EAAEZ,IAAY,EAAE;EACnD,IAAI,CAACP,QAAQ,CAACmB,MAAM,CAAC,IAAI,OAAOZ,IAAI,KAAK,QAAQ,EAAE;IAC/C,OAAO,KAAK;EAChB;EAEA,IAAM6B,SAAS,GAAG9B,eAAe,CAACC,IAAI,CAAC;EACvC,IAAI6B,SAAS,CAACF,MAAM,KAAK,CAAC,EAAE;IACxB,OAAO,KAAK;EAChB;EAEA,KAAK,IAAMd,GAAG,IAAIgB,SAAS,EAAE;IACzB,IAAI,CAACpC,QAAQ,CAACmB,MAAM,CAAC,IAAI,EAAEC,GAAG,IAAID,MAAM,CAAC,IAAID,aAAa,CAACC,MAAM,EAAEC,GAAU,CAAC,EAAE;MAC5E,OAAO,KAAK;IAChB;IAEAD,MAAM,GAAGA,MAAM,CAACC,GAAG,CAAC;EACxB;EAEA,OAAO,IAAI;AACf;;AAEA;AACA,SAASqB,UAAUA,CAAClC,IAAY,EAAE;EAC9B,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;IAC1B,MAAM,IAAImC,SAAS,CAAC,mBAAmB,CAAC;EAC5C;EAEA,OAAOnC,IAAI,CAACoC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;AAC1C;;AAEA;AACA,SAASC,OAAOA,CAAC3C,KAAU,EAAE;EACzB,IAAIoB,KAAK,CAACC,OAAO,CAACrB,KAAK,CAAC,EAAE;IACtB,OAAOA,KAAK,CAAC4C,GAAG,CAAC,CAACC,CAAC,EAAEvB,KAAK,KAAK,CAACA,KAAK,EAAEuB,CAAC,CAAC,CAAC;EAC9C;EAEA,OAAOC,MAAM,CAACH,OAAO,CAAC3C,KAAK,CAAC;AAChC;AAEA,SAAS+C,aAAaA,CAACC,YAAqB,EAAE;EAC1C,IAAIC,MAAM,GAAG,EAAE;;EAEf;EACA,KAAK,IAAI,CAAC3B,KAAK,EAAE4B,OAAO,CAAC,IAAIP,OAAO,CAACK,YAAY,CAAC,EAAE;IAChD,IAAI,OAAOE,OAAO,KAAK,QAAQ,EAAE;MAC7BD,MAAM,UAAQC,OAAO,MAAG;IAC5B,CAAC,MAAM;MACHA,OAAO,GAAGV,UAAU,CAACU,OAAO,CAAC;MAC7BD,MAAM,IAAI3B,KAAK,KAAK,CAAC,GAAG4B,OAAO,SAAOA,OAAS;IACnD;EACJ;EAEA,OAAOD,MAAM;AACjB;AAEA,UAAUE,gBAAgBA,CAACjC,MAAW,EAAEkC,WAAW,GAAG,EAAE,EAAO;EAC3D,IAAI,CAACrD,QAAQ,CAACmB,MAAM,CAAC,EAAE;IACnB,IAAIkC,WAAW,CAACnB,MAAM,GAAG,CAAC,EAAE;MACxB,MAAMc,aAAa,CAACK,WAAW,CAAC;IACpC;IAEA;EACJ;EAEA,KAAK,IAAM,CAACjC,GAAG,EAAEnB,KAAK,CAAC,IAAI2C,OAAO,CAACzB,MAAM,CAAC,EAAE;IACxC,OAAOiC,gBAAgB,CAACnD,KAAK,EAAE,CAAC,GAAGoD,WAAW,EAAEjC,GAAG,CAAQ,CAAC;EAChE;AACJ;AAEA,OAAO,SAASkC,QAAQA,CAACnC,MAAW,EAAE;EAClC,OAAO,CAAC,GAAGiC,gBAAgB,CAACjC,MAAM,CAAC,CAAC;AACxC","ignoreList":[]}
@@ -16,7 +16,16 @@ export function deepFreeze(o) {
16
16
  * and we can reuse the generated function.
17
17
  */
18
18
 
19
+ /**
20
+ * Cache for objectPathMonad to avoid re-creating closures
21
+ * and re-splitting strings for the same paths.
22
+ */
23
+ var objectPathMonadCache = new Map();
19
24
  export function objectPathMonad(objectPath) {
25
+ var fn = objectPathMonadCache.get(objectPath);
26
+ if (fn) {
27
+ return fn;
28
+ }
20
29
  var split = objectPath.split('.');
21
30
 
22
31
  // reuse this variable for better performance.
@@ -28,19 +37,83 @@ export function objectPathMonad(objectPath) {
28
37
  * directly return the field of the object.
29
38
  */
30
39
  if (splitLength === 1) {
31
- return obj => obj[objectPath];
32
- }
33
- return obj => {
34
- var currentVal = obj;
35
- for (var i = 0; i < splitLength; ++i) {
36
- var subPath = split[i];
37
- currentVal = currentVal[subPath];
38
- if (typeof currentVal === 'undefined') {
39
- return currentVal;
40
+ fn = obj => obj[objectPath];
41
+ } else if (splitLength === 2) {
42
+ /**
43
+ * Fast path for 2-segment paths (e.g. 'nested.field').
44
+ * Avoids the loop overhead for the most common nested case.
45
+ */
46
+ var key0 = split[0];
47
+ var key1 = split[1];
48
+ fn = obj => {
49
+ var v = obj[key0];
50
+ return v === undefined ? v : v[key1];
51
+ };
52
+ } else if (splitLength === 3) {
53
+ /**
54
+ * Fast path for 3-segment paths (e.g. 'deep.deeper.deepNr').
55
+ * Common in index fields and nested document properties.
56
+ */
57
+ var _key = split[0];
58
+ var _key2 = split[1];
59
+ var key2 = split[2];
60
+ fn = obj => {
61
+ var v = obj[_key];
62
+ if (v === undefined) return v;
63
+ var v2 = v[_key2];
64
+ return v2 === undefined ? v2 : v2[key2];
65
+ };
66
+ } else if (splitLength === 4) {
67
+ /**
68
+ * Fast path for 4-segment paths.
69
+ * Avoids loop overhead for deeper nested properties.
70
+ */
71
+ var _key3 = split[0];
72
+ var _key4 = split[1];
73
+ var _key5 = split[2];
74
+ var key3 = split[3];
75
+ fn = obj => {
76
+ var v = obj[_key3];
77
+ if (v === undefined) return v;
78
+ var v2 = v[_key4];
79
+ if (v2 === undefined) return v2;
80
+ var v3 = v2[_key5];
81
+ return v3 === undefined ? v3 : v3[key3];
82
+ };
83
+ } else if (splitLength === 5) {
84
+ /**
85
+ * Fast path for 5-segment paths.
86
+ * Avoids loop overhead for deeply nested properties.
87
+ */
88
+ var _key6 = split[0];
89
+ var _key7 = split[1];
90
+ var _key8 = split[2];
91
+ var _key9 = split[3];
92
+ var key4 = split[4];
93
+ fn = obj => {
94
+ var v = obj[_key6];
95
+ if (v === undefined) return v;
96
+ var v2 = v[_key7];
97
+ if (v2 === undefined) return v2;
98
+ var v3 = v2[_key8];
99
+ if (v3 === undefined) return v3;
100
+ var v4 = v3[_key9];
101
+ return v4 === undefined ? v4 : v4[key4];
102
+ };
103
+ } else {
104
+ fn = obj => {
105
+ var currentVal = obj;
106
+ for (var i = 0; i < splitLength; ++i) {
107
+ currentVal = currentVal[split[i]];
108
+ if (currentVal === undefined) {
109
+ return currentVal;
110
+ }
40
111
  }
41
- }
42
- return currentVal;
43
- };
112
+ return currentVal;
113
+ };
114
+ }
115
+ objectPathMonadCache.set(objectPath, fn);
116
+ return fn;
44
117
  }
45
118
  export function getFromObjectOrThrow(obj, key) {
46
119
  var val = obj[key];
@@ -73,11 +146,14 @@ export function flattenObject(ob) {
73
146
 
74
147
  /**
75
148
  * does a flat copy on the objects,
76
- * is about 3 times faster than using deepClone
77
- * @link https://jsperf.com/object-rest-spread-vs-clone/2
149
+ * is about 3 times faster than using deepClone.
150
+ * Using the spread operator instead of Object.assign
151
+ * because V8 optimizes spread for plain objects (~4x faster).
78
152
  */
79
153
  export function flatClone(obj) {
80
- return Object.assign({}, obj);
154
+ return {
155
+ ...obj
156
+ };
81
157
  }
82
158
 
83
159
  /**
@@ -130,14 +206,7 @@ export function sortObject(obj, noArraySort = false) {
130
206
  * @link https://github.com/zxdong262/deep-copy/blob/master/src/index.ts
131
207
  */
132
208
  function deepClone(src) {
133
- if (!src) {
134
- return src;
135
- }
136
- if (src === null || typeof src !== 'object') {
137
- return src;
138
- }
139
- // Blobs are immutable — pass through without cloning, otherwise it gets converted into a normal object, which breaks things.
140
- if (typeof Blob !== 'undefined' && src instanceof Blob) {
209
+ if (!src || typeof src !== 'object') {
141
210
  return src;
142
211
  }
143
212
  if (Array.isArray(src)) {
@@ -148,6 +217,10 @@ function deepClone(src) {
148
217
  }
149
218
  return ret;
150
219
  }
220
+ // Blobs are immutable — pass through without cloning, otherwise it gets converted into a normal object, which breaks things.
221
+ if (typeof Blob !== 'undefined' && src instanceof Blob) {
222
+ return src;
223
+ }
151
224
  var dest = {};
152
225
  // eslint-disable-next-line guard-for-in
153
226
  for (var key in src) {
@@ -159,13 +232,15 @@ export var clone = deepClone;
159
232
 
160
233
  /**
161
234
  * overwrites the getter with the actual value
162
- * Mostly used for caching stuff on the first run
235
+ * Mostly used for caching stuff on the first run.
236
+ *
237
+ * Using a value descriptor instead of a getter descriptor
238
+ * so that subsequent property accesses are direct value lookups
239
+ * instead of function calls, which is ~37% faster for reads.
163
240
  */
164
241
  export function overwriteGetterForCaching(obj, getterName, value) {
165
242
  Object.defineProperty(obj, getterName, {
166
- get: function () {
167
- return value;
168
- }
243
+ value
169
244
  });
170
245
  return value;
171
246
  }