@react-native-firebase/firestore 23.8.8 → 24.0.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 (359) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/RNFBFirestore.podspec +2 -1
  3. package/android/src/reactnative/java/io/invertase/firebase/firestore/ReactNativeFirebaseFirestoreCollectionModule.java +17 -4
  4. package/android/src/reactnative/java/io/invertase/firebase/firestore/ReactNativeFirebaseFirestoreDocumentModule.java +2 -2
  5. package/android/src/reactnative/java/io/invertase/firebase/firestore/ReactNativeFirebaseFirestorePipelineExecutor.java +1243 -0
  6. package/android/src/reactnative/java/io/invertase/firebase/firestore/ReactNativeFirebaseFirestorePipelineNodeBuilder.java +3919 -0
  7. package/android/src/reactnative/java/io/invertase/firebase/firestore/ReactNativeFirebaseFirestorePipelineParser.java +1735 -0
  8. package/android/src/reactnative/java/io/invertase/firebase/firestore/ReactNativeFirebaseFirestoreSerialize.java +1 -1
  9. package/dist/module/FieldPath.js +59 -0
  10. package/dist/module/FieldPath.js.map +1 -0
  11. package/dist/module/FieldValue.js +82 -0
  12. package/dist/module/FieldValue.js.map +1 -0
  13. package/{lib → dist/module}/FirestoreAggregate.js +31 -43
  14. package/dist/module/FirestoreAggregate.js.map +1 -0
  15. package/dist/module/FirestoreBlob.js +56 -0
  16. package/dist/module/FirestoreBlob.js.map +1 -0
  17. package/dist/module/FirestoreCollectionReference.js +70 -0
  18. package/dist/module/FirestoreCollectionReference.js.map +1 -0
  19. package/{lib → dist/module}/FirestoreDocumentChange.js +12 -15
  20. package/dist/module/FirestoreDocumentChange.js.map +1 -0
  21. package/dist/module/FirestoreDocumentReference.js +170 -0
  22. package/dist/module/FirestoreDocumentReference.js.map +1 -0
  23. package/dist/module/FirestoreDocumentSnapshot.js +88 -0
  24. package/dist/module/FirestoreDocumentSnapshot.js.map +1 -0
  25. package/dist/module/FirestoreFilter.js +146 -0
  26. package/dist/module/FirestoreFilter.js.map +1 -0
  27. package/dist/module/FirestoreGeoPoint.js +80 -0
  28. package/dist/module/FirestoreGeoPoint.js.map +1 -0
  29. package/{lib → dist/module}/FirestorePath.js +5 -12
  30. package/dist/module/FirestorePath.js.map +1 -0
  31. package/{lib → dist/module}/FirestorePersistentCacheIndexManager.js +11 -4
  32. package/dist/module/FirestorePersistentCacheIndexManager.js.map +1 -0
  33. package/dist/module/FirestoreQuery.js +298 -0
  34. package/dist/module/FirestoreQuery.js.map +1 -0
  35. package/{lib → dist/module}/FirestoreQueryModifiers.js +25 -136
  36. package/dist/module/FirestoreQueryModifiers.js.map +1 -0
  37. package/dist/module/FirestoreQuerySnapshot.js +98 -0
  38. package/dist/module/FirestoreQuerySnapshot.js.map +1 -0
  39. package/dist/module/FirestoreSnapshotMetadata.js +38 -0
  40. package/dist/module/FirestoreSnapshotMetadata.js.map +1 -0
  41. package/dist/module/FirestoreStatics.js +50 -0
  42. package/dist/module/FirestoreStatics.js.map +1 -0
  43. package/{lib → dist/module}/FirestoreTimestamp.js +39 -39
  44. package/dist/module/FirestoreTimestamp.js.map +1 -0
  45. package/dist/module/FirestoreTransaction.js +113 -0
  46. package/dist/module/FirestoreTransaction.js.map +1 -0
  47. package/dist/module/FirestoreTransactionHandler.js +137 -0
  48. package/dist/module/FirestoreTransactionHandler.js.map +1 -0
  49. package/dist/module/FirestoreVectorValue.js +75 -0
  50. package/dist/module/FirestoreVectorValue.js.map +1 -0
  51. package/dist/module/FirestoreWriteBatch.js +113 -0
  52. package/dist/module/FirestoreWriteBatch.js.map +1 -0
  53. package/dist/module/LoadBundleTask.js +70 -0
  54. package/dist/module/LoadBundleTask.js.map +1 -0
  55. package/dist/module/index.js +31 -0
  56. package/dist/module/index.js.map +1 -0
  57. package/dist/module/modular/Bytes.js +67 -0
  58. package/dist/module/modular/Bytes.js.map +1 -0
  59. package/dist/module/modular/FieldPath.js +25 -0
  60. package/dist/module/modular/FieldPath.js.map +1 -0
  61. package/dist/module/modular/FieldValue.js +37 -0
  62. package/dist/module/modular/FieldValue.js.map +1 -0
  63. package/dist/module/modular/GeoPoint.js +22 -0
  64. package/dist/module/modular/GeoPoint.js.map +1 -0
  65. package/dist/module/modular/Timestamp.js +22 -0
  66. package/dist/module/modular/Timestamp.js.map +1 -0
  67. package/dist/module/modular/VectorValue.js +25 -0
  68. package/dist/module/modular/VectorValue.js.map +1 -0
  69. package/dist/module/modular/query.js +222 -0
  70. package/dist/module/modular/query.js.map +1 -0
  71. package/dist/module/modular/snapshot.js +32 -0
  72. package/dist/module/modular/snapshot.js.map +1 -0
  73. package/dist/module/modular.js +229 -0
  74. package/dist/module/modular.js.map +1 -0
  75. package/dist/module/namespaced.js +298 -0
  76. package/dist/module/namespaced.js.map +1 -0
  77. package/dist/module/package.json +1 -0
  78. package/dist/module/pipelines/expressions.js +1273 -0
  79. package/dist/module/pipelines/expressions.js.map +1 -0
  80. package/dist/module/pipelines/index.js +32 -0
  81. package/dist/module/pipelines/index.js.map +1 -0
  82. package/dist/module/pipelines/pipeline-result.js +58 -0
  83. package/dist/module/pipelines/pipeline-result.js.map +1 -0
  84. package/dist/module/pipelines/pipeline-source.js +4 -0
  85. package/dist/module/pipelines/pipeline-source.js.map +1 -0
  86. package/dist/module/pipelines/pipeline.js +4 -0
  87. package/dist/module/pipelines/pipeline.js.map +1 -0
  88. package/dist/module/pipelines/pipeline_impl.js +42 -0
  89. package/dist/module/pipelines/pipeline_impl.js.map +1 -0
  90. package/dist/module/pipelines/pipeline_options.js +4 -0
  91. package/dist/module/pipelines/pipeline_options.js.map +1 -0
  92. package/dist/module/pipelines/pipeline_runtime.js +526 -0
  93. package/dist/module/pipelines/pipeline_runtime.js.map +1 -0
  94. package/dist/module/pipelines/pipeline_support.js +71 -0
  95. package/dist/module/pipelines/pipeline_support.js.map +1 -0
  96. package/dist/module/pipelines/pipeline_validate.js +183 -0
  97. package/dist/module/pipelines/pipeline_validate.js.map +1 -0
  98. package/dist/module/pipelines/stage_options.js +4 -0
  99. package/dist/module/pipelines/stage_options.js.map +1 -0
  100. package/dist/module/pipelines/types.js +2 -0
  101. package/dist/module/pipelines/types.js.map +1 -0
  102. package/dist/module/types/firestore.js +4 -0
  103. package/dist/module/types/firestore.js.map +1 -0
  104. package/dist/module/types/internal.js +4 -0
  105. package/dist/module/types/internal.js.map +1 -0
  106. package/dist/module/types/namespaced.js +338 -0
  107. package/dist/module/types/namespaced.js.map +1 -0
  108. package/{lib → dist/module}/utils/index.js +59 -114
  109. package/dist/module/utils/index.js.map +1 -0
  110. package/{lib → dist/module}/utils/serialize.js +58 -116
  111. package/dist/module/utils/serialize.js.map +1 -0
  112. package/{lib → dist/module}/utils/typemap.js +6 -20
  113. package/dist/module/utils/typemap.js.map +1 -0
  114. package/dist/module/version.js +5 -0
  115. package/dist/module/version.js.map +1 -0
  116. package/dist/module/web/RNFBFirestoreModule.android.js +5 -0
  117. package/dist/module/web/RNFBFirestoreModule.android.js.map +1 -0
  118. package/dist/module/web/RNFBFirestoreModule.ios.js +5 -0
  119. package/dist/module/web/RNFBFirestoreModule.ios.js.map +1 -0
  120. package/dist/module/web/RNFBFirestoreModule.js +387 -0
  121. package/dist/module/web/RNFBFirestoreModule.js.map +1 -0
  122. package/{lib → dist/module}/web/convert.js +60 -94
  123. package/dist/module/web/convert.js.map +1 -0
  124. package/dist/module/web/pipelines/pipeline.js +34 -0
  125. package/dist/module/web/pipelines/pipeline.js.map +1 -0
  126. package/dist/module/web/pipelines/pipeline_bridge_factory.js +217 -0
  127. package/dist/module/web/pipelines/pipeline_bridge_factory.js.map +1 -0
  128. package/dist/module/web/pipelines/pipeline_node_builder.js +294 -0
  129. package/dist/module/web/pipelines/pipeline_node_builder.js.map +1 -0
  130. package/dist/module/web/pipelines/pipeline_parser.js +21 -0
  131. package/dist/module/web/pipelines/pipeline_parser.js.map +1 -0
  132. package/dist/module/web/pipelines/pipeline_snapshot_serializer.js +89 -0
  133. package/dist/module/web/pipelines/pipeline_snapshot_serializer.js.map +1 -0
  134. package/dist/module/web/query.js +95 -0
  135. package/dist/module/web/query.js.map +1 -0
  136. package/dist/typescript/lib/FieldPath.d.ts +10 -0
  137. package/dist/typescript/lib/FieldPath.d.ts.map +1 -0
  138. package/dist/typescript/lib/FieldValue.d.ts +17 -0
  139. package/dist/typescript/lib/FieldValue.d.ts.map +1 -0
  140. package/dist/typescript/lib/FirestoreAggregate.d.ts +40 -0
  141. package/dist/typescript/lib/FirestoreAggregate.d.ts.map +1 -0
  142. package/dist/typescript/lib/FirestoreBlob.d.ts +11 -0
  143. package/dist/typescript/lib/FirestoreBlob.d.ts.map +1 -0
  144. package/dist/typescript/lib/FirestoreCollectionReference.d.ts +15 -0
  145. package/dist/typescript/lib/FirestoreCollectionReference.d.ts.map +1 -0
  146. package/dist/typescript/lib/FirestoreDocumentChange.d.ts +27 -0
  147. package/dist/typescript/lib/FirestoreDocumentChange.d.ts.map +1 -0
  148. package/dist/typescript/lib/FirestoreDocumentReference.d.ts +30 -0
  149. package/dist/typescript/lib/FirestoreDocumentReference.d.ts.map +1 -0
  150. package/dist/typescript/lib/FirestoreDocumentSnapshot.d.ts +30 -0
  151. package/dist/typescript/lib/FirestoreDocumentSnapshot.d.ts.map +1 -0
  152. package/dist/typescript/lib/FirestoreFilter.d.ts +52 -0
  153. package/dist/typescript/lib/FirestoreFilter.d.ts.map +1 -0
  154. package/dist/typescript/lib/FirestoreGeoPoint.d.ts +22 -0
  155. package/dist/typescript/lib/FirestoreGeoPoint.d.ts.map +1 -0
  156. package/dist/typescript/lib/FirestorePath.d.ts +12 -0
  157. package/dist/typescript/lib/FirestorePath.d.ts.map +1 -0
  158. package/dist/typescript/lib/FirestorePersistentCacheIndexManager.d.ts +16 -0
  159. package/dist/typescript/lib/FirestorePersistentCacheIndexManager.d.ts.map +1 -0
  160. package/dist/typescript/lib/FirestoreQuery.d.ts +39 -0
  161. package/dist/typescript/lib/FirestoreQuery.d.ts.map +1 -0
  162. package/dist/typescript/lib/FirestoreQueryModifiers.d.ts +59 -0
  163. package/dist/typescript/lib/FirestoreQueryModifiers.d.ts.map +1 -0
  164. package/dist/typescript/lib/FirestoreQuerySnapshot.d.ts +49 -0
  165. package/dist/typescript/lib/FirestoreQuerySnapshot.d.ts.map +1 -0
  166. package/dist/typescript/lib/FirestoreSnapshotMetadata.d.ts +8 -0
  167. package/dist/typescript/lib/FirestoreSnapshotMetadata.d.ts.map +1 -0
  168. package/dist/typescript/lib/FirestoreStatics.d.ts +23 -0
  169. package/dist/typescript/lib/FirestoreStatics.d.ts.map +1 -0
  170. package/dist/typescript/lib/FirestoreTimestamp.d.ts +33 -0
  171. package/dist/typescript/lib/FirestoreTimestamp.d.ts.map +1 -0
  172. package/dist/typescript/lib/FirestoreTransaction.d.ts +42 -0
  173. package/dist/typescript/lib/FirestoreTransaction.d.ts.map +1 -0
  174. package/dist/typescript/lib/FirestoreTransactionHandler.d.ts +26 -0
  175. package/dist/typescript/lib/FirestoreTransactionHandler.d.ts.map +1 -0
  176. package/dist/typescript/lib/FirestoreVectorValue.d.ts +17 -0
  177. package/dist/typescript/lib/FirestoreVectorValue.d.ts.map +1 -0
  178. package/dist/typescript/lib/FirestoreWriteBatch.d.ts +21 -0
  179. package/dist/typescript/lib/FirestoreWriteBatch.d.ts.map +1 -0
  180. package/dist/typescript/lib/LoadBundleTask.d.ts +16 -0
  181. package/dist/typescript/lib/LoadBundleTask.d.ts.map +1 -0
  182. package/dist/typescript/lib/index.d.ts +6 -0
  183. package/dist/typescript/lib/index.d.ts.map +1 -0
  184. package/dist/typescript/lib/modular/Bytes.d.ts +22 -0
  185. package/dist/typescript/lib/modular/Bytes.d.ts.map +1 -0
  186. package/dist/typescript/lib/modular/FieldPath.d.ts +4 -0
  187. package/dist/typescript/lib/modular/FieldPath.d.ts.map +1 -0
  188. package/dist/typescript/lib/modular/FieldValue.d.ts +8 -0
  189. package/dist/typescript/lib/modular/FieldValue.d.ts.map +1 -0
  190. package/dist/typescript/lib/modular/GeoPoint.d.ts +3 -0
  191. package/dist/typescript/lib/modular/GeoPoint.d.ts.map +1 -0
  192. package/dist/typescript/lib/modular/Timestamp.d.ts +3 -0
  193. package/dist/typescript/lib/modular/Timestamp.d.ts.map +1 -0
  194. package/dist/typescript/lib/modular/VectorValue.d.ts +4 -0
  195. package/dist/typescript/lib/modular/VectorValue.d.ts.map +1 -0
  196. package/dist/typescript/lib/modular/query.d.ts +93 -0
  197. package/dist/typescript/lib/modular/query.d.ts.map +1 -0
  198. package/dist/typescript/lib/modular/snapshot.d.ts +30 -0
  199. package/dist/typescript/lib/modular/snapshot.d.ts.map +1 -0
  200. package/dist/typescript/lib/modular.d.ts +69 -0
  201. package/dist/typescript/lib/modular.d.ts.map +1 -0
  202. package/dist/typescript/lib/namespaced.d.ts +13 -0
  203. package/dist/typescript/lib/namespaced.d.ts.map +1 -0
  204. package/dist/typescript/lib/pipelines/expressions.d.ts +723 -0
  205. package/dist/typescript/lib/pipelines/expressions.d.ts.map +1 -0
  206. package/dist/typescript/lib/pipelines/index.d.ts +31 -0
  207. package/dist/typescript/lib/pipelines/index.d.ts.map +1 -0
  208. package/dist/typescript/lib/pipelines/pipeline-result.d.ts +30 -0
  209. package/dist/typescript/lib/pipelines/pipeline-result.d.ts.map +1 -0
  210. package/dist/typescript/lib/pipelines/pipeline-source.d.ts +64 -0
  211. package/dist/typescript/lib/pipelines/pipeline-source.d.ts.map +1 -0
  212. package/dist/typescript/lib/pipelines/pipeline.d.ts +61 -0
  213. package/dist/typescript/lib/pipelines/pipeline.d.ts.map +1 -0
  214. package/dist/typescript/lib/pipelines/pipeline_impl.d.ts +21 -0
  215. package/dist/typescript/lib/pipelines/pipeline_impl.d.ts.map +1 -0
  216. package/dist/typescript/lib/pipelines/pipeline_options.d.ts +17 -0
  217. package/dist/typescript/lib/pipelines/pipeline_options.d.ts.map +1 -0
  218. package/dist/typescript/lib/pipelines/pipeline_runtime.d.ts +10 -0
  219. package/dist/typescript/lib/pipelines/pipeline_runtime.d.ts.map +1 -0
  220. package/dist/typescript/lib/pipelines/pipeline_support.d.ts +7 -0
  221. package/dist/typescript/lib/pipelines/pipeline_support.d.ts.map +1 -0
  222. package/dist/typescript/lib/pipelines/pipeline_validate.d.ts +9 -0
  223. package/dist/typescript/lib/pipelines/pipeline_validate.d.ts.map +1 -0
  224. package/dist/typescript/lib/pipelines/stage_options.d.ts +326 -0
  225. package/dist/typescript/lib/pipelines/stage_options.d.ts.map +1 -0
  226. package/dist/typescript/lib/pipelines/types.d.ts +10 -0
  227. package/dist/typescript/lib/pipelines/types.d.ts.map +1 -0
  228. package/dist/typescript/lib/types/firestore.d.ts +263 -0
  229. package/dist/typescript/lib/types/firestore.d.ts.map +1 -0
  230. package/dist/typescript/lib/types/internal.d.ts +483 -0
  231. package/dist/typescript/lib/types/internal.d.ts.map +1 -0
  232. package/dist/typescript/lib/types/namespaced.d.ts +2285 -0
  233. package/dist/typescript/lib/types/namespaced.d.ts.map +1 -0
  234. package/dist/typescript/lib/utils/index.d.ts +15 -0
  235. package/dist/typescript/lib/utils/index.d.ts.map +1 -0
  236. package/dist/typescript/lib/utils/serialize.d.ts +17 -0
  237. package/dist/typescript/lib/utils/serialize.d.ts.map +1 -0
  238. package/dist/typescript/lib/utils/typemap.d.ts +3 -0
  239. package/dist/typescript/lib/utils/typemap.d.ts.map +1 -0
  240. package/dist/typescript/lib/version.d.ts +2 -0
  241. package/dist/typescript/lib/version.d.ts.map +1 -0
  242. package/dist/typescript/lib/web/RNFBFirestoreModule.android.d.ts +3 -0
  243. package/dist/typescript/lib/web/RNFBFirestoreModule.android.d.ts.map +1 -0
  244. package/dist/typescript/lib/web/RNFBFirestoreModule.d.ts +75 -0
  245. package/dist/typescript/lib/web/RNFBFirestoreModule.d.ts.map +1 -0
  246. package/dist/typescript/lib/web/RNFBFirestoreModule.ios.d.ts +3 -0
  247. package/dist/typescript/lib/web/RNFBFirestoreModule.ios.d.ts.map +1 -0
  248. package/dist/typescript/lib/web/convert.d.ts +14 -0
  249. package/dist/typescript/lib/web/convert.d.ts.map +1 -0
  250. package/dist/typescript/lib/web/pipelines/pipeline.d.ts +4 -0
  251. package/dist/typescript/lib/web/pipelines/pipeline.d.ts.map +1 -0
  252. package/dist/typescript/lib/web/pipelines/pipeline_bridge_factory.d.ts +5 -0
  253. package/dist/typescript/lib/web/pipelines/pipeline_bridge_factory.d.ts.map +1 -0
  254. package/dist/typescript/lib/web/pipelines/pipeline_node_builder.d.ts +5 -0
  255. package/dist/typescript/lib/web/pipelines/pipeline_node_builder.d.ts.map +1 -0
  256. package/dist/typescript/lib/web/pipelines/pipeline_parser.d.ts +3 -0
  257. package/dist/typescript/lib/web/pipelines/pipeline_parser.d.ts.map +1 -0
  258. package/dist/typescript/lib/web/pipelines/pipeline_snapshot_serializer.d.ts +4 -0
  259. package/dist/typescript/lib/web/pipelines/pipeline_snapshot_serializer.d.ts.map +1 -0
  260. package/dist/typescript/lib/web/query.d.ts +23 -0
  261. package/dist/typescript/lib/web/query.d.ts.map +1 -0
  262. package/dist/typescript/package.json +1 -0
  263. package/ios/RNFBFirestore/RNFBFirestoreCollectionModule.m +52 -2
  264. package/ios/RNFBFirestore/RNFBFirestorePipelineBridgeFactory.swift +384 -0
  265. package/ios/RNFBFirestore/RNFBFirestorePipelineCallHandler.swift +86 -0
  266. package/ios/RNFBFirestore/RNFBFirestorePipelineNodeBuilder.swift +1500 -0
  267. package/ios/RNFBFirestore/RNFBFirestorePipelineParser.swift +1352 -0
  268. package/ios/RNFBFirestore/RNFBFirestorePipelineSnapshotSerializer.swift +98 -0
  269. package/lib/{FirestoreFieldPath.js → FieldPath.ts} +10 -12
  270. package/lib/{FirestoreFieldValue.js → FieldValue.ts} +22 -19
  271. package/lib/FirestoreAggregate.ts +124 -0
  272. package/lib/FirestoreBlob.ts +73 -0
  273. package/lib/FirestoreCollectionReference.ts +99 -0
  274. package/lib/FirestoreDocumentChange.ts +71 -0
  275. package/lib/FirestoreDocumentReference.ts +310 -0
  276. package/lib/FirestoreDocumentSnapshot.ts +149 -0
  277. package/lib/FirestoreFilter.ts +232 -0
  278. package/lib/{FirestoreGeoPoint.js → FirestoreGeoPoint.ts} +48 -8
  279. package/lib/FirestorePath.ts +54 -0
  280. package/lib/FirestorePersistentCacheIndexManager.ts +46 -0
  281. package/lib/{FirestoreQuery.js → FirestoreQuery.ts} +208 -100
  282. package/lib/FirestoreQueryModifiers.ts +411 -0
  283. package/lib/{FirestoreQuerySnapshot.js → FirestoreQuerySnapshot.ts} +61 -32
  284. package/lib/{FirestoreSnapshotMetadata.js → FirestoreSnapshotMetadata.ts} +8 -6
  285. package/lib/{FirestoreStatics.js → FirestoreStatics.ts} +18 -11
  286. package/lib/FirestoreTimestamp.ts +161 -0
  287. package/lib/{FirestoreTransaction.js → FirestoreTransaction.ts} +64 -27
  288. package/lib/{FirestoreTransactionHandler.js → FirestoreTransactionHandler.ts} +54 -75
  289. package/lib/{FirestoreVectorValue.js → FirestoreVectorValue.ts} +36 -15
  290. package/lib/{FirestoreWriteBatch.js → FirestoreWriteBatch.ts} +45 -21
  291. package/lib/LoadBundleTask.ts +85 -0
  292. package/lib/index.ts +71 -0
  293. package/lib/modular/Bytes.ts +81 -0
  294. package/lib/modular/FieldPath.ts +24 -0
  295. package/lib/modular/FieldValue.ts +40 -0
  296. package/lib/modular/GeoPoint.ts +20 -0
  297. package/lib/modular/Timestamp.ts +20 -0
  298. package/lib/modular/VectorValue.ts +24 -0
  299. package/lib/modular/query.ts +368 -0
  300. package/lib/modular/snapshot.ts +137 -0
  301. package/lib/modular.ts +552 -0
  302. package/lib/{index.js → namespaced.ts} +170 -80
  303. package/lib/pipelines/expressions.ts +2321 -0
  304. package/lib/pipelines/index.ts +203 -0
  305. package/lib/pipelines/pipeline-result.ts +78 -0
  306. package/lib/pipelines/pipeline-source.ts +83 -0
  307. package/lib/pipelines/pipeline.ts +99 -0
  308. package/lib/pipelines/pipeline_impl.ts +46 -0
  309. package/lib/pipelines/pipeline_options.ts +32 -0
  310. package/lib/pipelines/pipeline_runtime.ts +863 -0
  311. package/lib/pipelines/pipeline_support.ts +134 -0
  312. package/lib/pipelines/pipeline_validate.ts +242 -0
  313. package/lib/pipelines/stage_options.ts +376 -0
  314. package/lib/pipelines/types.ts +26 -0
  315. package/lib/types/firestore.ts +477 -0
  316. package/lib/types/internal.ts +747 -0
  317. package/lib/{index.d.ts → types/namespaced.ts} +280 -79
  318. package/lib/utils/index.ts +244 -0
  319. package/lib/utils/serialize.ts +314 -0
  320. package/lib/utils/typemap.ts +65 -0
  321. package/lib/version.ts +2 -0
  322. package/lib/web/{RNFBFirestoreModule.js → RNFBFirestoreModule.ts} +222 -234
  323. package/lib/web/convert.ts +287 -0
  324. package/lib/web/pipelines/pipeline.ts +47 -0
  325. package/lib/web/pipelines/pipeline_bridge_factory.ts +377 -0
  326. package/lib/web/pipelines/pipeline_node_builder.ts +413 -0
  327. package/lib/web/pipelines/pipeline_parser.ts +23 -0
  328. package/lib/web/pipelines/pipeline_snapshot_serializer.ts +133 -0
  329. package/lib/web/query.ts +150 -0
  330. package/package.json +46 -7
  331. package/tsconfig.json +35 -0
  332. package/lib/FirestoreBlob.js +0 -107
  333. package/lib/FirestoreCollectionReference.js +0 -70
  334. package/lib/FirestoreDocumentReference.js +0 -222
  335. package/lib/FirestoreDocumentSnapshot.js +0 -132
  336. package/lib/FirestoreFilter.js +0 -156
  337. package/lib/modular/Bytes.d.ts +0 -11
  338. package/lib/modular/Bytes.js +0 -62
  339. package/lib/modular/FieldPath.d.ts +0 -20
  340. package/lib/modular/FieldPath.js +0 -7
  341. package/lib/modular/FieldValue.d.ts +0 -67
  342. package/lib/modular/FieldValue.js +0 -41
  343. package/lib/modular/GeoPoint.d.ts +0 -17
  344. package/lib/modular/GeoPoint.js +0 -3
  345. package/lib/modular/Timestamp.d.ts +0 -85
  346. package/lib/modular/Timestamp.js +0 -3
  347. package/lib/modular/VectorValue.d.ts +0 -30
  348. package/lib/modular/VectorValue.js +0 -11
  349. package/lib/modular/index.d.ts +0 -788
  350. package/lib/modular/index.js +0 -410
  351. package/lib/modular/query.d.ts +0 -370
  352. package/lib/modular/query.js +0 -233
  353. package/lib/modular/snapshot.d.ts +0 -256
  354. package/lib/modular/snapshot.js +0 -33
  355. package/lib/modular/utils/observer.js +0 -16
  356. package/lib/version.js +0 -2
  357. package/lib/web/query.js +0 -112
  358. /package/lib/web/{RNFBFirestoreModule.android.js → RNFBFirestoreModule.android.ts} +0 -0
  359. /package/lib/web/{RNFBFirestoreModule.ios.js → RNFBFirestoreModule.ios.ts} +0 -0
@@ -0,0 +1,413 @@
1
+ /*
2
+ * Copyright (c) 2016-present Invertase Limited & Contributors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this library except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ *
16
+ */
17
+
18
+ import * as firebaseFirestorePipelines from '@react-native-firebase/app/dist/module/internal/web/firebaseFirestorePipelines';
19
+ import type {
20
+ AggregateFunction,
21
+ AliasedAggregate,
22
+ AliasedExpression,
23
+ Expression,
24
+ Ordering,
25
+ Pipeline as WebSdkPipeline,
26
+ PipelineSource as WebSdkPipelineSource,
27
+ } from '@react-native-firebase/app/dist/module/internal/web/firebaseFirestorePipelines';
28
+
29
+ export type WebPipelineInstance = WebSdkPipeline & Record<string, unknown>;
30
+ export type WebPipelineSource = WebSdkPipelineSource<WebPipelineInstance> & Record<string, unknown>;
31
+
32
+ type PipelineHelperFn = (...args: unknown[]) => unknown;
33
+ type AliasedValue = { as: (name: string) => unknown };
34
+
35
+ const WEB_PIPELINE_HELPER_ALIASES: Record<string, string> = {
36
+ lower: 'toLower',
37
+ upper: 'toUpper',
38
+ };
39
+
40
+ function isRecord(value: unknown): value is Record<string, unknown> {
41
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
42
+ }
43
+
44
+ function getPipelineHelper(name: string): PipelineHelperFn {
45
+ const helperModule = firebaseFirestorePipelines as Record<string, unknown>;
46
+ const helper = helperModule[name] ?? helperModule[WEB_PIPELINE_HELPER_ALIASES[name] ?? ''];
47
+ if (typeof helper !== 'function') {
48
+ throw new Error(
49
+ `pipelineExecute() cannot rebuild "${name}" because the web helper is missing.`,
50
+ );
51
+ }
52
+ return helper as PipelineHelperFn;
53
+ }
54
+
55
+ function isExpressionNode(value: Record<string, unknown>): boolean {
56
+ return (
57
+ value.__kind === 'expression' ||
58
+ value.exprType === 'Field' ||
59
+ value.exprType === 'Constant' ||
60
+ value.exprType === 'Function'
61
+ );
62
+ }
63
+
64
+ function isFlatAliasedFieldNode(value: Record<string, unknown>): boolean {
65
+ const alias = value.alias ?? value.as;
66
+ return (
67
+ typeof value.path === 'string' &&
68
+ value.path.length > 0 &&
69
+ typeof alias === 'string' &&
70
+ alias.length > 0
71
+ );
72
+ }
73
+
74
+ function isAliasedExpressionNode(value: Record<string, unknown>): boolean {
75
+ const alias = value.alias ?? value.as;
76
+ return (
77
+ typeof alias === 'string' &&
78
+ alias.length > 0 &&
79
+ Object.prototype.hasOwnProperty.call(value, 'expr')
80
+ );
81
+ }
82
+
83
+ function isAliasedAggregateNode(value: Record<string, unknown>): boolean {
84
+ return (
85
+ typeof value.alias === 'string' &&
86
+ value.alias.length > 0 &&
87
+ Object.prototype.hasOwnProperty.call(value, 'aggregate')
88
+ );
89
+ }
90
+
91
+ type ReviveMode = 'pipeline' | 'helper';
92
+
93
+ type ReviveWorkFrame =
94
+ | {
95
+ kind: 'evaluate';
96
+ mode: ReviveMode;
97
+ value: unknown;
98
+ resolve: (result: unknown) => void;
99
+ }
100
+ | {
101
+ kind: 'finalize';
102
+ run: () => void;
103
+ };
104
+
105
+ function rebuildFlatAliasedField(value: Record<string, unknown>): unknown {
106
+ const alias = (value.alias ?? value.as) as string;
107
+ const field = getPipelineHelper('field')(value.path) as Expression & Partial<AliasedValue>;
108
+ const asFn = field.as;
109
+ if (typeof asFn !== 'function') {
110
+ throw new Error('pipelineExecute() failed to rebuild flat aliased field for web SDK.');
111
+ }
112
+ return asFn.call(field, alias);
113
+ }
114
+
115
+ function applyAlias(
116
+ revivedValue: unknown,
117
+ alias: string,
118
+ nodeKey: 'expr' | 'aggregate',
119
+ ): AliasedExpression | AliasedAggregate {
120
+ if (
121
+ !revivedValue ||
122
+ (typeof revivedValue !== 'object' && typeof revivedValue !== 'function') ||
123
+ !('as' in revivedValue)
124
+ ) {
125
+ throw new Error(`pipelineExecute() failed to rebuild aliased ${nodeKey}: invalid value.`);
126
+ }
127
+
128
+ return (revivedValue as AliasedValue).as(alias) as AliasedExpression | AliasedAggregate;
129
+ }
130
+
131
+ function rebuildExpressionNode(
132
+ stack: ReviveWorkFrame[],
133
+ node: Record<string, unknown>,
134
+ mode: ReviveMode,
135
+ resolve: (result: unknown) => void,
136
+ ): void {
137
+ if (node.exprType === 'Field' || typeof node.path === 'string') {
138
+ resolve(getPipelineHelper('field')(node.path) as Expression);
139
+ return;
140
+ }
141
+
142
+ if (node.exprType === 'Constant' || Object.prototype.hasOwnProperty.call(node, 'value')) {
143
+ if (mode === 'helper') {
144
+ stack.push({
145
+ kind: 'evaluate',
146
+ mode,
147
+ value: node.value,
148
+ resolve,
149
+ });
150
+ return;
151
+ }
152
+
153
+ let revivedValue: unknown;
154
+ stack.push({
155
+ kind: 'finalize',
156
+ run: () => {
157
+ resolve(getPipelineHelper('constant')(revivedValue) as Expression);
158
+ },
159
+ });
160
+ stack.push({
161
+ kind: 'evaluate',
162
+ mode,
163
+ value: node.value,
164
+ resolve: result => {
165
+ revivedValue = result;
166
+ },
167
+ });
168
+ return;
169
+ }
170
+
171
+ if (typeof node.name === 'string') {
172
+ const helperName = node.name;
173
+ const args = Array.isArray(node.args) ? node.args : [];
174
+ const revivedArgs = new Array(args.length);
175
+ const argsMode = helperName === 'conditional' ? 'pipeline' : 'helper';
176
+
177
+ stack.push({
178
+ kind: 'finalize',
179
+ run: () => {
180
+ if (helperName === 'array') {
181
+ resolve(getPipelineHelper(helperName)(revivedArgs) as Expression);
182
+ return;
183
+ }
184
+ resolve(getPipelineHelper(helperName)(...revivedArgs) as Expression);
185
+ },
186
+ });
187
+
188
+ for (let i = args.length - 1; i >= 0; i--) {
189
+ stack.push({
190
+ kind: 'evaluate',
191
+ mode: argsMode,
192
+ value: args[i],
193
+ resolve: result => {
194
+ revivedArgs[i] = result;
195
+ },
196
+ });
197
+ }
198
+ return;
199
+ }
200
+
201
+ throw new Error('pipelineExecute() failed to rebuild a serialized expression node for web SDK.');
202
+ }
203
+
204
+ function rebuildAggregateNode(
205
+ stack: ReviveWorkFrame[],
206
+ node: Record<string, unknown>,
207
+ resolve: (result: unknown) => void,
208
+ ): void {
209
+ if (typeof node.kind !== 'string') {
210
+ throw new Error('pipelineExecute() failed to rebuild aggregate node: missing aggregate kind.');
211
+ }
212
+
213
+ const helperName = node.kind;
214
+ const args = Array.isArray(node.args) ? node.args : [];
215
+ const revivedArgs = new Array(args.length);
216
+
217
+ stack.push({
218
+ kind: 'finalize',
219
+ run: () => {
220
+ resolve(getPipelineHelper(helperName)(...revivedArgs) as AggregateFunction);
221
+ },
222
+ });
223
+
224
+ for (let i = args.length - 1; i >= 0; i--) {
225
+ stack.push({
226
+ kind: 'evaluate',
227
+ mode: 'helper',
228
+ value: args[i],
229
+ resolve: result => {
230
+ revivedArgs[i] = result;
231
+ },
232
+ });
233
+ }
234
+ }
235
+
236
+ function rebuildOrderingNode(
237
+ stack: ReviveWorkFrame[],
238
+ node: Record<string, unknown>,
239
+ resolve: (result: unknown) => void,
240
+ ): void {
241
+ if (!Object.prototype.hasOwnProperty.call(node, 'expr')) {
242
+ throw new Error('pipelineExecute() failed to rebuild ordering node: missing expr.');
243
+ }
244
+
245
+ const direction = node.direction === 'descending' ? 'descending' : 'ascending';
246
+ let revivedExpr: unknown;
247
+
248
+ stack.push({
249
+ kind: 'finalize',
250
+ run: () => {
251
+ resolve(getPipelineHelper(direction)(revivedExpr) as Ordering);
252
+ },
253
+ });
254
+ stack.push({
255
+ kind: 'evaluate',
256
+ mode: 'pipeline',
257
+ value: node.expr,
258
+ resolve: result => {
259
+ revivedExpr = result;
260
+ },
261
+ });
262
+ }
263
+
264
+ function rebuildAliasedNode(
265
+ stack: ReviveWorkFrame[],
266
+ node: Record<string, unknown>,
267
+ nodeKey: 'expr' | 'aggregate',
268
+ resolve: (result: unknown) => void,
269
+ ): void {
270
+ const alias = typeof node.alias === 'string' ? node.alias : undefined;
271
+ if (!alias) {
272
+ throw new Error(`pipelineExecute() failed to rebuild aliased node: missing ${nodeKey} alias.`);
273
+ }
274
+
275
+ let revivedValue: unknown;
276
+ stack.push({
277
+ kind: 'finalize',
278
+ run: () => {
279
+ resolve(applyAlias(revivedValue, alias, nodeKey));
280
+ },
281
+ });
282
+ stack.push({
283
+ kind: 'evaluate',
284
+ mode: 'pipeline',
285
+ value: node[nodeKey],
286
+ resolve: result => {
287
+ revivedValue = result;
288
+ },
289
+ });
290
+ }
291
+
292
+ function reviveValueWithMode(value: unknown, mode: ReviveMode): unknown {
293
+ let finalValue: unknown;
294
+ const stack: ReviveWorkFrame[] = [
295
+ {
296
+ kind: 'evaluate',
297
+ mode,
298
+ value,
299
+ resolve: result => {
300
+ finalValue = result;
301
+ },
302
+ },
303
+ ];
304
+
305
+ while (stack.length > 0) {
306
+ const frame = stack.pop()!;
307
+
308
+ if (frame.kind === 'finalize') {
309
+ frame.run();
310
+ continue;
311
+ }
312
+
313
+ const currentValue = frame.value;
314
+ if (Array.isArray(currentValue)) {
315
+ const revived = new Array(currentValue.length);
316
+ frame.resolve(revived);
317
+ for (let i = currentValue.length - 1; i >= 0; i--) {
318
+ stack.push({
319
+ kind: 'evaluate',
320
+ mode: frame.mode,
321
+ value: currentValue[i],
322
+ resolve: result => {
323
+ revived[i] = result;
324
+ },
325
+ });
326
+ }
327
+ continue;
328
+ }
329
+
330
+ if (!isRecord(currentValue)) {
331
+ frame.resolve(currentValue);
332
+ continue;
333
+ }
334
+
335
+ if (frame.mode === 'helper') {
336
+ if (
337
+ isFlatAliasedFieldNode(currentValue) ||
338
+ isAliasedExpressionNode(currentValue) ||
339
+ isAliasedAggregateNode(currentValue) ||
340
+ currentValue.__kind === 'aggregate' ||
341
+ currentValue.__kind === 'ordering'
342
+ ) {
343
+ stack.push({
344
+ kind: 'evaluate',
345
+ mode: 'pipeline',
346
+ value: currentValue,
347
+ resolve: frame.resolve,
348
+ });
349
+ continue;
350
+ }
351
+
352
+ if (isExpressionNode(currentValue)) {
353
+ rebuildExpressionNode(stack, currentValue, frame.mode, frame.resolve);
354
+ continue;
355
+ }
356
+ } else {
357
+ if (isFlatAliasedFieldNode(currentValue)) {
358
+ frame.resolve(rebuildFlatAliasedField(currentValue));
359
+ continue;
360
+ }
361
+
362
+ if (isAliasedExpressionNode(currentValue)) {
363
+ rebuildAliasedNode(stack, currentValue, 'expr', frame.resolve);
364
+ continue;
365
+ }
366
+
367
+ if (isAliasedAggregateNode(currentValue)) {
368
+ rebuildAliasedNode(stack, currentValue, 'aggregate', frame.resolve);
369
+ continue;
370
+ }
371
+
372
+ switch (currentValue.__kind) {
373
+ case 'expression':
374
+ rebuildExpressionNode(stack, currentValue, frame.mode, frame.resolve);
375
+ continue;
376
+ case 'aggregate':
377
+ rebuildAggregateNode(stack, currentValue, frame.resolve);
378
+ continue;
379
+ case 'ordering':
380
+ rebuildOrderingNode(stack, currentValue, frame.resolve);
381
+ continue;
382
+ case 'aliasedExpression':
383
+ rebuildAliasedNode(stack, currentValue, 'expr', frame.resolve);
384
+ continue;
385
+ case 'aliasedAggregate':
386
+ rebuildAliasedNode(stack, currentValue, 'aggregate', frame.resolve);
387
+ continue;
388
+ default:
389
+ }
390
+ }
391
+
392
+ const revived: Record<string, unknown> = {};
393
+ frame.resolve(revived);
394
+ const entries = Object.entries(currentValue);
395
+ for (let i = entries.length - 1; i >= 0; i--) {
396
+ const [key, entry] = entries[i]!;
397
+ stack.push({
398
+ kind: 'evaluate',
399
+ mode: frame.mode,
400
+ value: entry,
401
+ resolve: result => {
402
+ revived[key] = result;
403
+ },
404
+ });
405
+ }
406
+ }
407
+
408
+ return finalValue;
409
+ }
410
+
411
+ export function revivePipelineValue(value: unknown): unknown {
412
+ return reviveValueWithMode(value, 'pipeline');
413
+ }
@@ -0,0 +1,23 @@
1
+ /*
2
+ * Copyright (c) 2016-present Invertase Limited & Contributors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ *
16
+ */
17
+
18
+ export type { ValidatedPipelineExecuteRequest as WebParsedPipelineRequest } from '../../pipelines/pipeline_validate';
19
+ export {
20
+ validateExecuteOptions,
21
+ validatePipelineExecuteRequest as parseWebSdkPipelineRequest,
22
+ validateSerializedPipeline,
23
+ } from '../../pipelines/pipeline_validate';
@@ -0,0 +1,133 @@
1
+ /*
2
+ * Copyright (c) 2016-present Invertase Limited & Contributors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this library except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ *
16
+ */
17
+
18
+ import type {
19
+ FirestorePipelineResultInternal,
20
+ FirestorePipelineSnapshotInternal,
21
+ FirestorePipelineTimestampInternal,
22
+ } from '../../types/internal';
23
+ import type { WebParsedPipelineRequest } from './pipeline_parser';
24
+ import { objectToWriteable } from '../convert';
25
+
26
+ const METADATA_FALLBACK_STAGES = new Set(['select', 'addFields', 'removeFields']);
27
+
28
+ interface PipelineExecutionMetadata {
29
+ sourceDocumentPaths: string[];
30
+ }
31
+
32
+ function isRecord(value: unknown): value is Record<string, unknown> {
33
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
34
+ }
35
+
36
+ function serializeTimestamp(value: unknown): FirestorePipelineTimestampInternal | undefined {
37
+ if (!value) {
38
+ return undefined;
39
+ }
40
+
41
+ if (typeof value === 'number') {
42
+ return value;
43
+ }
44
+
45
+ if (isRecord(value)) {
46
+ if (typeof value.seconds === 'number' && typeof value.nanoseconds === 'number') {
47
+ return {
48
+ seconds: value.seconds,
49
+ nanoseconds: value.nanoseconds,
50
+ };
51
+ }
52
+
53
+ if (typeof value.toMillis === 'function') {
54
+ return (value.toMillis as () => number)();
55
+ }
56
+ }
57
+
58
+ return undefined;
59
+ }
60
+
61
+ function buildExecutionMetadata(request: WebParsedPipelineRequest): PipelineExecutionMetadata {
62
+ if (
63
+ request.pipeline.source.source === 'documents' &&
64
+ request.pipeline.source.documents.length > 0 &&
65
+ request.pipeline.stages.every(stage => METADATA_FALLBACK_STAGES.has(stage.stage))
66
+ ) {
67
+ return {
68
+ sourceDocumentPaths: request.pipeline.source.documents,
69
+ };
70
+ }
71
+
72
+ return {
73
+ sourceDocumentPaths: [],
74
+ };
75
+ }
76
+
77
+ function getFallbackPath(
78
+ metadata: PipelineExecutionMetadata,
79
+ index: number,
80
+ resultCount: number,
81
+ ): string | undefined {
82
+ if (
83
+ metadata.sourceDocumentPaths.length === 0 ||
84
+ metadata.sourceDocumentPaths.length !== resultCount ||
85
+ index < 0 ||
86
+ index >= metadata.sourceDocumentPaths.length
87
+ ) {
88
+ return undefined;
89
+ }
90
+
91
+ return metadata.sourceDocumentPaths[index];
92
+ }
93
+
94
+ function serializePipelineResult(
95
+ result: unknown,
96
+ fallbackPath?: string,
97
+ ): FirestorePipelineResultInternal {
98
+ const resultRecord = isRecord(result) ? result : {};
99
+ const ref = isRecord(resultRecord.ref) ? resultRecord.ref : undefined;
100
+ const path = typeof ref?.path === 'string' ? ref.path : fallbackPath;
101
+ const rawData = typeof resultRecord.data === 'function' ? resultRecord.data() : resultRecord.data;
102
+ const idFromPath = path ? path.split('/').pop() : undefined;
103
+
104
+ return {
105
+ data: isRecord(rawData) ? objectToWriteable(rawData) : undefined,
106
+ path,
107
+ id: typeof resultRecord.id === 'string' ? resultRecord.id : idFromPath,
108
+ createTime: serializeTimestamp(resultRecord.createTime),
109
+ updateTime: serializeTimestamp(resultRecord.updateTime),
110
+ };
111
+ }
112
+
113
+ export function serializeWebSdkPipelineSnapshot(
114
+ rawSnapshot: unknown,
115
+ request: WebParsedPipelineRequest,
116
+ ): FirestorePipelineSnapshotInternal {
117
+ const metadata = buildExecutionMetadata(request);
118
+ const snapshotRecord = isRecord(rawSnapshot) ? rawSnapshot : {};
119
+ const rawResults = Array.isArray(snapshotRecord.results) ? snapshotRecord.results : [];
120
+ const results = rawResults.map((result, index) =>
121
+ serializePipelineResult(result, getFallbackPath(metadata, index, rawResults.length)),
122
+ );
123
+
124
+ const executionTime = serializeTimestamp(snapshotRecord.executionTime);
125
+ if (!executionTime) {
126
+ throw new Error('pipelineExecute() expected the web SDK snapshot to include executionTime.');
127
+ }
128
+
129
+ return {
130
+ results,
131
+ executionTime,
132
+ };
133
+ }