@connecttomahdi/rxdb 17.0.0-beta.17 → 17.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (379) 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 +10 -17
  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 +1 -19
  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 +11 -18
  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 +1 -19
  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/index.d.ts +25 -26
  251. package/dist/types/plugins/dev-mode/error-messages.d.ts +36 -0
  252. package/dist/types/plugins/leader-election/index.d.ts +1 -0
  253. package/dist/types/plugins/replication-google-drive/document-handling.d.ts +4 -1
  254. package/dist/types/plugins/replication-google-drive/google-drive-types.d.ts +1 -0
  255. package/dist/types/plugins/state/rx-state.d.ts +1 -1
  256. package/dist/types/plugins/storage-denokv/index.d.ts +1 -1
  257. package/dist/types/plugins/storage-dexie/rx-storage-dexie.d.ts +1 -1
  258. package/dist/types/plugins/storage-localstorage/index.d.ts +1 -1
  259. package/dist/types/plugins/storage-memory/binary-search-bounds.d.ts +21 -10
  260. package/dist/types/plugins/storage-memory/memory-helper.d.ts +7 -3
  261. package/dist/types/plugins/storage-memory/memory-types.d.ts +5 -0
  262. package/dist/types/plugins/storage-mongodb/mongodb-helper.d.ts +9 -1
  263. package/dist/types/plugins/storage-mongodb/rx-storage-instance-mongodb.d.ts +2 -2
  264. package/dist/types/plugins/storage-mongodb/rx-storage-mongodb.d.ts +1 -1
  265. package/dist/types/plugins/storage-remote/rx-storage-remote.d.ts +1 -1
  266. package/dist/types/plugins/storage-sqlite/index.d.ts +1 -1
  267. package/dist/types/plugins/test-utils/performance.d.ts +36 -0
  268. package/dist/types/plugins/test-utils/test-util.d.ts +17 -0
  269. package/dist/types/plugins/utils/utils-object.d.ts +8 -3
  270. package/dist/types/plugins/utils/utils-premium.d.ts +0 -2
  271. package/dist/types/plugins/utils/utils-rxdb-version.d.ts +1 -1
  272. package/dist/types/rx-database.d.ts +1 -1
  273. package/dist/types/rx-query-single-result.d.ts +1 -1
  274. package/dist/types/rx-query.d.ts +3 -2
  275. package/dist/types/rx-storage-helper.d.ts +15 -0
  276. package/eslint.config.mjs +2 -1
  277. package/package.json +732 -729
  278. package/scripts/check-code-block-line-length.js +91 -0
  279. package/scripts/check-em-dashes.js +53 -0
  280. package/scripts/docs-fetch-git-history.mjs +36 -0
  281. package/scripts/install-foundationdb.sh +0 -6
  282. package/scripts/notify-indexnow.mjs +171 -0
  283. package/scripts/start-foundationdb-docker.sh +73 -0
  284. package/src/change-event-buffer.ts +4 -1
  285. package/src/custom-index.ts +93 -16
  286. package/src/doc-cache.ts +117 -41
  287. package/src/event-reduce.ts +10 -1
  288. package/src/plugin-helpers.ts +10 -0
  289. package/src/plugins/attachments/index.ts +10 -12
  290. package/src/plugins/cleanup/cleanup.ts +5 -3
  291. package/src/plugins/crdt/index.ts +55 -0
  292. package/src/plugins/dev-mode/check-query.ts +7 -1
  293. package/src/plugins/dev-mode/check-schema.ts +2 -1
  294. package/src/plugins/dev-mode/error-messages.ts +45 -5
  295. package/src/plugins/encryption-crypto-js/index.ts +18 -6
  296. package/src/plugins/leader-election/index.ts +9 -8
  297. package/src/plugins/local-documents/local-documents.ts +21 -12
  298. package/src/plugins/migration-schema/migration-helpers.ts +3 -0
  299. package/src/plugins/migration-schema/rx-migration-state.ts +1 -1
  300. package/src/plugins/pipeline/rx-pipeline.ts +5 -1
  301. package/src/plugins/query-builder/mquery/nosql-query-builder.ts +8 -2
  302. package/src/plugins/replication/index.ts +41 -3
  303. package/src/plugins/replication-google-drive/document-handling.ts +17 -5
  304. package/src/plugins/replication-google-drive/google-drive-helper.ts +1 -1
  305. package/src/plugins/replication-google-drive/google-drive-types.ts +1 -0
  306. package/src/plugins/replication-google-drive/signaling.ts +4 -1
  307. package/src/plugins/replication-google-drive/upstream.ts +7 -4
  308. package/src/plugins/replication-microsoft-onedrive/signaling.ts +4 -1
  309. package/src/plugins/state/rx-state.ts +17 -5
  310. package/src/plugins/storage-dexie/rx-storage-instance-dexie.ts +0 -27
  311. package/src/plugins/storage-memory/binary-search-bounds.ts +105 -40
  312. package/src/plugins/storage-memory/memory-helper.ts +158 -67
  313. package/src/plugins/storage-memory/memory-indexes.ts +1 -0
  314. package/src/plugins/storage-memory/memory-types.ts +5 -0
  315. package/src/plugins/storage-memory/rx-storage-instance-memory.ts +104 -53
  316. package/src/plugins/storage-mongodb/mongodb-helper.ts +43 -1
  317. package/src/plugins/storage-mongodb/rx-storage-instance-mongodb.ts +11 -9
  318. package/src/plugins/test-utils/config.ts +2 -1
  319. package/src/plugins/test-utils/performance.ts +159 -85
  320. package/src/plugins/test-utils/schema-objects.ts +1 -1
  321. package/src/plugins/test-utils/test-util.ts +71 -0
  322. package/src/plugins/utils/utils-map.ts +2 -2
  323. package/src/plugins/utils/utils-object-deep-equal.ts +2 -4
  324. package/src/plugins/utils/utils-object-dot-prop.ts +25 -0
  325. package/src/plugins/utils/utils-object.ts +103 -28
  326. package/src/plugins/utils/utils-other.ts +9 -4
  327. package/src/plugins/utils/utils-premium.ts +11 -37
  328. package/src/plugins/utils/utils-revision.ts +20 -9
  329. package/src/plugins/utils/utils-rxdb-version.ts +1 -1
  330. package/src/plugins/utils/utils-string.ts +11 -9
  331. package/src/plugins/utils/utils-time.ts +21 -17
  332. package/src/query-cache.ts +6 -5
  333. package/src/query-planner.ts +2 -2
  334. package/src/replication-protocol/downstream.ts +1 -1
  335. package/src/rx-collection-helper.ts +12 -6
  336. package/src/rx-collection.ts +39 -8
  337. package/src/rx-database.ts +49 -17
  338. package/src/rx-document.ts +12 -3
  339. package/src/rx-query-helper.ts +36 -15
  340. package/src/rx-query-single-result.ts +10 -3
  341. package/src/rx-query.ts +48 -8
  342. package/src/rx-schema-helper.ts +7 -4
  343. package/src/rx-schema.ts +1 -0
  344. package/src/rx-storage-helper.ts +210 -139
  345. package/src/types/rx-error.d.ts +3 -0
  346. package/src/types/rx-schema.d.ts +5 -0
  347. package/dist/esm/package.json +0 -1
  348. package/dist/types/types/conflict-handling.d.ts +0 -48
  349. package/dist/types/types/couchdb.d.ts +0 -293
  350. package/dist/types/types/index.d.ts +0 -32
  351. package/dist/types/types/modules/index.d.ts +0 -0
  352. package/dist/types/types/modules/mocha.parallel.d.ts +0 -1
  353. package/dist/types/types/plugins/backup.d.ts +0 -35
  354. package/dist/types/types/plugins/cleanup.d.ts +0 -38
  355. package/dist/types/types/plugins/crdt.d.ts +0 -76
  356. package/dist/types/types/plugins/dexie.d.ts +0 -30
  357. package/dist/types/types/plugins/local-documents.d.ts +0 -49
  358. package/dist/types/types/plugins/migration.d.ts +0 -14
  359. package/dist/types/types/plugins/reactivity.d.ts +0 -40
  360. package/dist/types/types/plugins/replication-graphql.d.ts +0 -98
  361. package/dist/types/types/plugins/replication.d.ts +0 -175
  362. package/dist/types/types/plugins/state.d.ts +0 -4
  363. package/dist/types/types/plugins/update.d.ts +0 -23
  364. package/dist/types/types/plugins/webmcp.d.ts +0 -40
  365. package/dist/types/types/query-planner.d.ts +0 -47
  366. package/dist/types/types/replication-protocol.d.ts +0 -296
  367. package/dist/types/types/rx-attachment.d.ts +0 -46
  368. package/dist/types/types/rx-change-event.d.ts +0 -85
  369. package/dist/types/types/rx-collection.d.ts +0 -117
  370. package/dist/types/types/rx-database-internal-store.d.ts +0 -54
  371. package/dist/types/types/rx-database.d.ts +0 -124
  372. package/dist/types/types/rx-document.d.ts +0 -160
  373. package/dist/types/types/rx-error.d.ts +0 -222
  374. package/dist/types/types/rx-plugin.d.ts +0 -167
  375. package/dist/types/types/rx-query.d.ts +0 -144
  376. package/dist/types/types/rx-schema.d.ts +0 -209
  377. package/dist/types/types/rx-storage.d.ts +0 -347
  378. package/dist/types/types/rx-storage.interface.d.ts +0 -312
  379. package/dist/types/types/util.d.ts +0 -180
@@ -1 +1 @@
1
- {"version":3,"file":"schema-objects.js","names":["schemas","_interopRequireWildcard","require","_index","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","TEST_DATA_CHARSET","exports","TEST_DATA_CHARSET_LAST_SORTED","ensureNotFalsy","lastOfArray","split","sort","someEmojisArr","baseChars","allChars","slice","concat","randomStringWithSpecialChars","minLength","maxLength","text","Error","length","randomNumber","Math","floor","random","humanData","passportId","age","firstName","lastName","simpleHumanData","simpleHumanV3Data","partial","defaultObj","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","_interopRequireWildcard","require","_index","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","TEST_DATA_CHARSET","exports","TEST_DATA_CHARSET_LAST_SORTED","ensureNotFalsy","lastOfArray","split","sort","someEmojisArr","baseChars","allChars","slice","concat","randomStringWithSpecialChars","minLength","maxLength","text","Error","length","randomNumber","Math","floor","random","humanData","passportId","age","firstName","lastName","simpleHumanData","simpleHumanV3Data","partial","defaultObj","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":[]}
@@ -5,6 +5,9 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.awaitCollectionsHaveEqualState = awaitCollectionsHaveEqualState;
8
+ exports.clearAllLocalIndexedDB = clearAllLocalIndexedDB;
9
+ exports.clearAllLocalOPFS = clearAllLocalOPFS;
10
+ exports.clearAllLocalStorage = clearAllLocalStorage;
8
11
  exports.ensureCollectionsHaveEqualState = ensureCollectionsHaveEqualState;
9
12
  exports.ensureReplicationHasNoErrors = ensureReplicationHasNoErrors;
10
13
  exports.testMultipleTimes = testMultipleTimes;
@@ -56,6 +59,65 @@ async function awaitCollectionsHaveEqualState(c1, c2, logContext, timeout = 8000
56
59
  }
57
60
  }
58
61
  }
62
+
63
+ /**
64
+ * Deletes all locally stored IndexedDB databases.
65
+ * Noop if IndexedDB is not available (e.g. in Node.js)
66
+ * or if the .databases() method is not supported.
67
+ */
68
+ async function clearAllLocalIndexedDB() {
69
+ if (typeof indexedDB === 'undefined' || typeof indexedDB.databases !== 'function') {
70
+ return;
71
+ }
72
+ var databases = await indexedDB.databases();
73
+ await Promise.all(databases.filter(db => !!db.name).map(db => {
74
+ return new Promise((resolve, reject) => {
75
+ var req = indexedDB.deleteDatabase(db.name);
76
+ req.onsuccess = () => resolve();
77
+ req.onerror = () => reject(req.error);
78
+ });
79
+ }));
80
+ }
81
+
82
+ /**
83
+ * Deletes all files and directories stored in the
84
+ * Origin Private File System (OPFS).
85
+ * Noop if OPFS is not available (e.g. in Node.js).
86
+ */
87
+ async function clearAllLocalOPFS(maxRetries = 20, delayMs = 200) {
88
+ if (typeof navigator === 'undefined' || !navigator.storage || typeof navigator.storage.getDirectory !== 'function') {
89
+ return;
90
+ }
91
+ var root = await navigator.storage.getDirectory();
92
+ // @ts-ignore entries() is not in all TS lib definitions
93
+ for await (var [name] of root.entries()) {
94
+ for (var attempt = 0; attempt < maxRetries; attempt++) {
95
+ try {
96
+ await root.removeEntry(name, {
97
+ recursive: true
98
+ });
99
+ break;
100
+ } catch (err) {
101
+ if (err?.name === 'NoModificationAllowedError' && attempt < maxRetries - 1) {
102
+ await new Promise(resolve => setTimeout(resolve, delayMs));
103
+ } else {
104
+ throw err;
105
+ }
106
+ }
107
+ }
108
+ }
109
+ }
110
+
111
+ /**
112
+ * Clears all localStorage data.
113
+ * Noop if localStorage is not available (e.g. in Node.js).
114
+ */
115
+ async function clearAllLocalStorage() {
116
+ if (typeof localStorage === 'undefined' || typeof localStorage.clear !== 'function') {
117
+ return;
118
+ }
119
+ localStorage.clear();
120
+ }
59
121
  function ensureReplicationHasNoErrors(replicationState) {
60
122
  /**
61
123
  * We do not have to unsubscribe because the observable will cancel anyway.
@@ -1 +1 @@
1
- {"version":3,"file":"test-util.js","names":["_assert","_interopRequireDefault","require","_index","testMultipleTimes","times","title","test","Array","fill","forEach","it","ensureCollectionsHaveEqualState","c1","c2","logContext","requestIdlePromise","getJson","collection","docs","find","exec","map","d","toJSON","json1","json2","assert","deepStrictEqual","err","console","error","name","dir","log","awaitCollectionsHaveEqualState","timeout","i","startTime","Date","now","promiseWait","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,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AAGO,SAASE,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;AAEO,eAAeK,+BAA+BA,CACjDC,EAA2B,EAC3BC,EAA2B,EAC3BC,UAAmB,EACrB;EACE,MAAM,IAAAC,yBAAkB,EAAC,CAAC;EAC1B,IAAMC,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,CAACJ,EAAE,CAAC;EAC/B,IAAMa,KAAK,GAAG,MAAMT,OAAO,CAACH,EAAE,CAAC;EAC/B,IAAI;IACAa,eAAM,CAACC,eAAe,CAClBH,KAAK,EACLC,KACJ,CAAC;EACL,CAAC,CAAC,OAAOG,GAAG,EAAE;IACVC,OAAO,CAACC,KAAK,CAAC,kCAAkC,GAAGhB,UAAU,GAAG,yBAAyB,GAAGF,EAAE,CAACmB,IAAI,GAAG,OAAO,GAAGlB,EAAE,CAACkB,IAAI,GAAG,IAAI,CAAC;IAC/HF,OAAO,CAACG,GAAG,CAAC;MACRpB,EAAE,EAAEY,KAAK;MACTX,EAAE,EAAEY;IACR,CAAC,CAAC;IACFI,OAAO,CAACI,GAAG,CAAC,YAAY,CAAC;IACzB,MAAML,GAAG;EACb;AACJ;;AAEA;AACA;AACA;AACO,eAAeM,8BAA8BA,CAChDtB,EAA2B,EAC3BC,EAA2B,EAC3BC,UAAmB,EACnBqB,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,MAAMzB,+BAA+B,CACjCC,EAAE,EACFC,EAAE,EACFC,UACJ,CAAC;MACD;IACJ,CAAC,CAAC,OAAOc,GAAG,EAAE;MACV,IAAKU,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGF,SAAS,GAAIF,OAAO,EAAE;QACpC,MAAMP,GAAG;MACb,CAAC,MAAM;QACH,MAAM,IAAAY,kBAAW,EAAC,EAAE,GAAGJ,CAAC,CAAC;MAC7B;IACJ;EACJ;AACJ;AAIO,SAASK,4BAA4BA,CAACC,gBAA8C,EAAE;EACzF;AACJ;AACA;EACIA,gBAAgB,CAACC,MAAM,CAACC,SAAS,CAAEhB,GAAQ,IAAK;IAC5CC,OAAO,CAACC,KAAK,CAAC,2CAA2C,CAAC;IAC1DD,OAAO,CAACI,GAAG,CAACL,GAAG,CAAC;IAChB,IAAIA,GAAG,EAAEiB,UAAU,EAAEC,MAAM,EAAE;MACzB,MAAMlB,GAAG,CAACiB,UAAU,CAACC,MAAM,CAAC,CAAC,CAAC;IAClC;IACA,MAAMlB,GAAG;EACb,CAAC,CAAC;AACN","ignoreList":[]}
1
+ {"version":3,"file":"test-util.js","names":["_assert","_interopRequireDefault","require","_index","testMultipleTimes","times","title","test","Array","fill","forEach","it","ensureCollectionsHaveEqualState","c1","c2","logContext","requestIdlePromise","getJson","collection","docs","find","exec","map","d","toJSON","json1","json2","assert","deepStrictEqual","err","console","error","name","dir","log","awaitCollectionsHaveEqualState","timeout","i","startTime","Date","now","promiseWait","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":[]}
@@ -7,14 +7,14 @@ exports.getFromMapOrCreate = getFromMapOrCreate;
7
7
  exports.getFromMapOrThrow = getFromMapOrThrow;
8
8
  function getFromMapOrThrow(map, key) {
9
9
  var val = map.get(key);
10
- if (typeof val === 'undefined') {
10
+ if (val === undefined) {
11
11
  throw new Error('missing value from map ' + key);
12
12
  }
13
13
  return val;
14
14
  }
15
15
  function getFromMapOrCreate(map, index, creator, ifWasThere) {
16
16
  var value = map.get(index);
17
- if (typeof value === 'undefined') {
17
+ if (value === undefined) {
18
18
  value = creator();
19
19
  map.set(index, value);
20
20
  } 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":";;;;;;;AAAO,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;AAEO,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":";;;;;;;AAAO,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;AAEO,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":[]}
@@ -28,10 +28,11 @@ function deepEqual(a, b) {
28
28
  var keys = Object.keys(a);
29
29
  length = keys.length;
30
30
  if (length !== Object.keys(b).length) return false;
31
- for (i = length; i-- !== 0;) if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;
31
+
32
+ // Single combined loop: check key existence AND deep-compare in one pass.
32
33
  for (i = length; i-- !== 0;) {
33
34
  var key = keys[i];
34
- if (!deepEqual(a[key], b[key])) return false;
35
+ if (!Object.prototype.hasOwnProperty.call(b, key) || !deepEqual(a[key], b[key])) return false;
35
36
  }
36
37
  return true;
37
38
  }
@@ -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;AACO,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;AACO,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":[]}
@@ -179,6 +179,31 @@ function getProperty(object, path, value) {
179
179
  if (!isObject(object) || typeof path !== 'string') {
180
180
  return value === undefined ? object : value;
181
181
  }
182
+
183
+ /**
184
+ * Fast path for simple dot-notation paths without bracket
185
+ * notation or backslash escaping. This covers the vast majority
186
+ * of RxDB property access patterns (e.g. 'nested.field')
187
+ * and avoids the expensive getPathSegments() parser.
188
+ */
189
+ if (!path.includes('[') && !path.includes('\\')) {
190
+ var segments = path.split('.');
191
+ var current = object;
192
+ for (var i = 0; i < segments.length; i++) {
193
+ var seg = segments[i];
194
+ if (disallowedKeys.has(seg)) {
195
+ return value;
196
+ }
197
+ current = current[seg];
198
+ if (current === undefined || current === null) {
199
+ if (i !== segments.length - 1) {
200
+ return value;
201
+ }
202
+ break;
203
+ }
204
+ }
205
+ return current === undefined ? value : current;
206
+ }
182
207
  var pathArray = getPathSegments(path);
183
208
  if (pathArray.length === 0) {
184
209
  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":"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","ignoreList":[]}
@@ -33,7 +33,16 @@ function deepFreeze(o) {
33
33
  * and we can reuse the generated function.
34
34
  */
35
35
 
36
+ /**
37
+ * Cache for objectPathMonad to avoid re-creating closures
38
+ * and re-splitting strings for the same paths.
39
+ */
40
+ var objectPathMonadCache = new Map();
36
41
  function objectPathMonad(objectPath) {
42
+ var fn = objectPathMonadCache.get(objectPath);
43
+ if (fn) {
44
+ return fn;
45
+ }
37
46
  var split = objectPath.split('.');
38
47
 
39
48
  // reuse this variable for better performance.
@@ -45,19 +54,83 @@ function objectPathMonad(objectPath) {
45
54
  * directly return the field of the object.
46
55
  */
47
56
  if (splitLength === 1) {
48
- return obj => obj[objectPath];
49
- }
50
- return obj => {
51
- var currentVal = obj;
52
- for (var i = 0; i < splitLength; ++i) {
53
- var subPath = split[i];
54
- currentVal = currentVal[subPath];
55
- if (typeof currentVal === 'undefined') {
56
- return currentVal;
57
+ fn = obj => obj[objectPath];
58
+ } else if (splitLength === 2) {
59
+ /**
60
+ * Fast path for 2-segment paths (e.g. 'nested.field').
61
+ * Avoids the loop overhead for the most common nested case.
62
+ */
63
+ var key0 = split[0];
64
+ var key1 = split[1];
65
+ fn = obj => {
66
+ var v = obj[key0];
67
+ return v === undefined ? v : v[key1];
68
+ };
69
+ } else if (splitLength === 3) {
70
+ /**
71
+ * Fast path for 3-segment paths (e.g. 'deep.deeper.deepNr').
72
+ * Common in index fields and nested document properties.
73
+ */
74
+ var _key = split[0];
75
+ var _key2 = split[1];
76
+ var key2 = split[2];
77
+ fn = obj => {
78
+ var v = obj[_key];
79
+ if (v === undefined) return v;
80
+ var v2 = v[_key2];
81
+ return v2 === undefined ? v2 : v2[key2];
82
+ };
83
+ } else if (splitLength === 4) {
84
+ /**
85
+ * Fast path for 4-segment paths.
86
+ * Avoids loop overhead for deeper nested properties.
87
+ */
88
+ var _key3 = split[0];
89
+ var _key4 = split[1];
90
+ var _key5 = split[2];
91
+ var key3 = split[3];
92
+ fn = obj => {
93
+ var v = obj[_key3];
94
+ if (v === undefined) return v;
95
+ var v2 = v[_key4];
96
+ if (v2 === undefined) return v2;
97
+ var v3 = v2[_key5];
98
+ return v3 === undefined ? v3 : v3[key3];
99
+ };
100
+ } else if (splitLength === 5) {
101
+ /**
102
+ * Fast path for 5-segment paths.
103
+ * Avoids loop overhead for deeply nested properties.
104
+ */
105
+ var _key6 = split[0];
106
+ var _key7 = split[1];
107
+ var _key8 = split[2];
108
+ var _key9 = split[3];
109
+ var key4 = split[4];
110
+ fn = obj => {
111
+ var v = obj[_key6];
112
+ if (v === undefined) return v;
113
+ var v2 = v[_key7];
114
+ if (v2 === undefined) return v2;
115
+ var v3 = v2[_key8];
116
+ if (v3 === undefined) return v3;
117
+ var v4 = v3[_key9];
118
+ return v4 === undefined ? v4 : v4[key4];
119
+ };
120
+ } else {
121
+ fn = obj => {
122
+ var currentVal = obj;
123
+ for (var i = 0; i < splitLength; ++i) {
124
+ currentVal = currentVal[split[i]];
125
+ if (currentVal === undefined) {
126
+ return currentVal;
127
+ }
57
128
  }
58
- }
59
- return currentVal;
60
- };
129
+ return currentVal;
130
+ };
131
+ }
132
+ objectPathMonadCache.set(objectPath, fn);
133
+ return fn;
61
134
  }
62
135
  function getFromObjectOrThrow(obj, key) {
63
136
  var val = obj[key];
@@ -90,11 +163,14 @@ function flattenObject(ob) {
90
163
 
91
164
  /**
92
165
  * does a flat copy on the objects,
93
- * is about 3 times faster than using deepClone
94
- * @link https://jsperf.com/object-rest-spread-vs-clone/2
166
+ * is about 3 times faster than using deepClone.
167
+ * Using the spread operator instead of Object.assign
168
+ * because V8 optimizes spread for plain objects (~4x faster).
95
169
  */
96
170
  function flatClone(obj) {
97
- return Object.assign({}, obj);
171
+ return {
172
+ ...obj
173
+ };
98
174
  }
99
175
 
100
176
  /**
@@ -147,14 +223,7 @@ function sortObject(obj, noArraySort = false) {
147
223
  * @link https://github.com/zxdong262/deep-copy/blob/master/src/index.ts
148
224
  */
149
225
  function deepClone(src) {
150
- if (!src) {
151
- return src;
152
- }
153
- if (src === null || typeof src !== 'object') {
154
- return src;
155
- }
156
- // Blobs are immutable — pass through without cloning, otherwise it gets converted into a normal object, which breaks things.
157
- if (typeof Blob !== 'undefined' && src instanceof Blob) {
226
+ if (!src || typeof src !== 'object') {
158
227
  return src;
159
228
  }
160
229
  if (Array.isArray(src)) {
@@ -165,6 +234,10 @@ function deepClone(src) {
165
234
  }
166
235
  return ret;
167
236
  }
237
+ // Blobs are immutable — pass through without cloning, otherwise it gets converted into a normal object, which breaks things.
238
+ if (typeof Blob !== 'undefined' && src instanceof Blob) {
239
+ return src;
240
+ }
168
241
  var dest = {};
169
242
  // eslint-disable-next-line guard-for-in
170
243
  for (var key in src) {
@@ -176,13 +249,15 @@ var clone = exports.clone = deepClone;
176
249
 
177
250
  /**
178
251
  * overwrites the getter with the actual value
179
- * Mostly used for caching stuff on the first run
252
+ * Mostly used for caching stuff on the first run.
253
+ *
254
+ * Using a value descriptor instead of a getter descriptor
255
+ * so that subsequent property accesses are direct value lookups
256
+ * instead of function calls, which is ~37% faster for reads.
180
257
  */
181
258
  function overwriteGetterForCaching(obj, getterName, value) {
182
259
  Object.defineProperty(obj, getterName, {
183
- get: function () {
184
- return value;
185
- }
260
+ value
186
261
  });
187
262
  return value;
188
263
  }