@angular/fire 7.6.1 → 16.0.0-canary.2d48ab0

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 (479) hide show
  1. package/README.md +11 -4
  2. package/analytics/analytics.module.d.ts +2 -2
  3. package/analytics/firebase.d.ts +4 -1
  4. package/analytics/is-analytics-supported-factory.d.ts +4 -0
  5. package/analytics/screen-tracking.service.d.ts +3 -3
  6. package/app-check/app-check.d.ts +0 -6
  7. package/app-check/app-check.module.d.ts +3 -4
  8. package/app-check/firebase.d.ts +2 -1
  9. package/app-check/public_api.d.ts +2 -1
  10. package/auth/auth.module.d.ts +2 -2
  11. package/auth/firebase.d.ts +3 -1
  12. package/auth-guard/auth-guard.d.ts +6 -6
  13. package/compat/analytics/analytics.d.ts +1 -3
  14. package/compat/analytics/analytics.module.d.ts +1 -1
  15. package/compat/analytics/screen-tracking.service.d.ts +1 -1
  16. package/compat/analytics/user-tracking.service.d.ts +1 -1
  17. package/compat/auth/auth.d.ts +4 -4
  18. package/compat/auth-guard/auth-guard.d.ts +8 -6
  19. package/compat/database/database.d.ts +4 -4
  20. package/compat/database/interfaces.d.ts +14 -14
  21. package/compat/database/list/audit-trail.d.ts +1 -1
  22. package/compat/database/list/create-reference.d.ts +1 -1
  23. package/compat/database/list/data-operation.d.ts +1 -1
  24. package/compat/database/list/state-changes.d.ts +1 -1
  25. package/compat/database/object/create-reference.d.ts +1 -1
  26. package/compat/database/observable/fromRef.d.ts +1 -1
  27. package/compat/database/utils.d.ts +1 -1
  28. package/compat/firebase.app.module.d.ts +1 -1
  29. package/compat/firestore/collection/collection.d.ts +2 -2
  30. package/compat/firestore/collection-group/collection-group.d.ts +2 -2
  31. package/compat/firestore/document/document.d.ts +4 -4
  32. package/compat/firestore/firestore.d.ts +7 -7
  33. package/compat/firestore/interfaces.d.ts +19 -19
  34. package/compat/functions/functions.d.ts +3 -3
  35. package/compat/messaging/messaging.d.ts +2 -2
  36. package/compat/performance/performance.d.ts +2 -2
  37. package/compat/proxy.d.ts +8 -8
  38. package/compat/remote-config/interfaces.d.ts +1 -1
  39. package/compat/remote-config/remote-config.d.ts +15 -49
  40. package/compat/storage/interfaces.d.ts +8 -8
  41. package/compat/storage/observable/fromTask.d.ts +1 -2
  42. package/compat/storage/pipes/storageUrl.pipe.d.ts +1 -1
  43. package/compat/storage/ref.d.ts +1 -1
  44. package/compat/storage/storage.d.ts +3 -3
  45. package/compat/storage/task.d.ts +1 -1
  46. package/core.d.ts +8 -12
  47. package/database/database.module.d.ts +2 -2
  48. package/docs/app-check.md +1 -1
  49. package/docs/auth.md +6 -6
  50. package/docs/database.md +1 -1
  51. package/docs/deploy/getting-started.md +2 -2
  52. package/docs/firestore.md +1 -1
  53. package/docs/install-and-setup.md +1 -1
  54. package/docs/install-firebase-tools.md +78 -0
  55. package/docs/universal/cloud-functions.md +27 -6
  56. package/docs/universal/getting-started.md +9 -134
  57. package/{esm2015/analytics/analytics.js → esm2022/analytics/analytics.mjs} +1 -1
  58. package/esm2022/analytics/analytics.module.mjs +94 -0
  59. package/esm2022/analytics/firebase.mjs +17 -0
  60. package/esm2022/analytics/is-analytics-supported-factory.mjs +16 -0
  61. package/esm2022/analytics/overrides.mjs +3 -0
  62. package/esm2022/analytics/screen-tracking.service.mjs +148 -0
  63. package/esm2022/analytics/user-tracking.service.mjs +44 -0
  64. package/{esm2015/app/app.js → esm2022/app/app.mjs} +1 -1
  65. package/esm2022/app/app.module.mjs +85 -0
  66. package/esm2022/app-check/app-check.mjs +10 -0
  67. package/esm2022/app-check/app-check.module.mjs +78 -0
  68. package/esm2022/app-check/firebase.mjs +10 -0
  69. package/esm2022/app-check/public_api.mjs +5 -0
  70. package/{esm2015/auth/auth.js → esm2022/auth/auth.mjs} +1 -1
  71. package/esm2022/auth/auth.module.mjs +71 -0
  72. package/esm2022/auth/firebase.mjs +58 -0
  73. package/esm2022/auth-guard/auth-guard.mjs +53 -0
  74. package/{esm2015/auth-guard/auth-guard.module.js → esm2022/auth-guard/auth-guard.module.mjs} +7 -7
  75. package/esm2022/compat/analytics/analytics.mjs +160 -0
  76. package/esm2022/compat/analytics/analytics.module.mjs +35 -0
  77. package/esm2022/compat/analytics/screen-tracking.service.mjs +49 -0
  78. package/esm2022/compat/analytics/user-tracking.service.mjs +53 -0
  79. package/esm2022/compat/auth/auth.mjs +161 -0
  80. package/{esm2015/compat/auth/auth.module.js → esm2022/compat/auth/auth.module.mjs} +7 -7
  81. package/{esm2015/compat/auth/public_api.js → esm2022/compat/auth/public_api.mjs} +1 -1
  82. package/esm2022/compat/auth-guard/auth-guard.mjs +53 -0
  83. package/{esm2015/compat/auth-guard/auth-guard.module.js → esm2022/compat/auth-guard/auth-guard.module.mjs} +7 -7
  84. package/{esm2015/compat/cache.js → esm2022/compat/cache.mjs} +4 -3
  85. package/esm2022/compat/database/database.mjs +119 -0
  86. package/{esm2015/compat/database/database.module.js → esm2022/compat/database/database.module.mjs} +7 -7
  87. package/esm2022/compat/database/interfaces.mjs +2 -0
  88. package/{esm2015/compat/database/list/audit-trail.js → esm2022/compat/database/list/audit-trail.mjs} +3 -3
  89. package/esm2022/compat/database/list/changes.mjs +85 -0
  90. package/esm2022/compat/database/list/create-reference.mjs +44 -0
  91. package/{esm2015/compat/database/list/data-operation.js → esm2022/compat/database/list/data-operation.mjs} +1 -1
  92. package/{esm2015/compat/database/list/snapshot-changes.js → esm2022/compat/database/list/snapshot-changes.mjs} +1 -1
  93. package/{esm2015/compat/database/list/state-changes.js → esm2022/compat/database/list/state-changes.mjs} +2 -2
  94. package/{esm2015/compat/database/object/create-reference.js → esm2022/compat/database/object/create-reference.mjs} +2 -2
  95. package/{esm2015/compat/database/object/snapshot-changes.js → esm2022/compat/database/object/snapshot-changes.mjs} +1 -1
  96. package/esm2022/compat/database/observable/fromRef.mjs +48 -0
  97. package/{esm2015/compat/database/utils.js → esm2022/compat/database/utils.mjs} +1 -1
  98. package/{esm2015/compat/firebase.app.js → esm2022/compat/firebase.app.mjs} +1 -1
  99. package/esm2022/compat/firebase.app.module.mjs +71 -0
  100. package/esm2022/compat/firestore/collection/changes.mjs +108 -0
  101. package/esm2022/compat/firestore/collection/collection.mjs +123 -0
  102. package/esm2022/compat/firestore/collection-group/collection-group.mjs +86 -0
  103. package/esm2022/compat/firestore/document/document.mjs +87 -0
  104. package/esm2022/compat/firestore/firestore.mjs +257 -0
  105. package/{esm2015/compat/firestore/firestore.module.js → esm2022/compat/firestore/firestore.module.mjs} +7 -7
  106. package/esm2022/compat/firestore/interfaces.mjs +2 -0
  107. package/esm2022/compat/firestore/observable/fromRef.mjs +40 -0
  108. package/esm2022/compat/functions/functions.mjs +69 -0
  109. package/{esm2015/compat/functions/functions.module.js → esm2022/compat/functions/functions.module.mjs} +7 -7
  110. package/{esm2015/compat/functions/public_api.js → esm2022/compat/functions/public_api.mjs} +1 -1
  111. package/esm2022/compat/messaging/messaging.mjs +81 -0
  112. package/{esm2015/compat/messaging/messaging.module.js → esm2022/compat/messaging/messaging.module.mjs} +7 -7
  113. package/esm2022/compat/performance/performance.mjs +105 -0
  114. package/esm2022/compat/performance/performance.module.mjs +27 -0
  115. package/esm2022/compat/performance/performance.service.mjs +28 -0
  116. package/esm2022/compat/proxy.mjs +58 -0
  117. package/esm2022/compat/remote-config/remote-config.mjs +206 -0
  118. package/{esm2015/compat/remote-config/remote-config.module.js → esm2022/compat/remote-config/remote-config.module.mjs} +7 -7
  119. package/esm2022/compat/storage/observable/fromTask.mjs +36 -0
  120. package/esm2022/compat/storage/pipes/storageUrl.pipe.mjs +58 -0
  121. package/{esm2015/compat/storage/ref.js → esm2022/compat/storage/ref.mjs} +3 -3
  122. package/esm2022/compat/storage/storage.mjs +95 -0
  123. package/esm2022/compat/storage/storage.module.mjs +22 -0
  124. package/{esm2015/compat/storage/task.js → esm2022/compat/storage/task.mjs} +2 -2
  125. package/esm2022/core.mjs +43 -0
  126. package/{esm2015/database/database.js → esm2022/database/database.mjs} +1 -1
  127. package/esm2022/database/database.module.mjs +74 -0
  128. package/esm2022/firestore/firebase.mjs +73 -0
  129. package/{esm2015/firestore/firestore.js → esm2022/firestore/firestore.mjs} +1 -1
  130. package/esm2022/firestore/firestore.module.mjs +74 -0
  131. package/esm2022/firestore/lite/firebase.mjs +48 -0
  132. package/{esm2015/firestore/lite/lite.js → esm2022/firestore/lite/lite.mjs} +1 -1
  133. package/esm2022/firestore/lite/lite.module.mjs +73 -0
  134. package/esm2022/firestore/lite/rxfire.mjs +12 -0
  135. package/esm2022/firestore/rxfire.mjs +15 -0
  136. package/{esm2015/functions/functions.js → esm2022/functions/functions.mjs} +1 -1
  137. package/esm2022/functions/functions.module.mjs +74 -0
  138. package/esm2022/messaging/is-messaging-supported-factory.mjs +16 -0
  139. package/{esm2015/messaging/messaging.js → esm2022/messaging/messaging.mjs} +1 -1
  140. package/esm2022/messaging/messaging.module.mjs +86 -0
  141. package/esm2022/messaging/overrides.mjs +3 -0
  142. package/{esm2015/performance/performance.js → esm2022/performance/performance.mjs} +1 -1
  143. package/esm2022/performance/performance.module.mjs +81 -0
  144. package/esm2022/remote-config/is-remote-config-supported-factory.mjs +16 -0
  145. package/esm2022/remote-config/overrides.mjs +3 -0
  146. package/{esm2015/remote-config/remote-config.js → esm2022/remote-config/remote-config.mjs} +1 -1
  147. package/esm2022/remote-config/remote-config.module.mjs +86 -0
  148. package/{esm2015/storage/storage.js → esm2022/storage/storage.mjs} +1 -1
  149. package/esm2022/storage/storage.module.mjs +74 -0
  150. package/esm2022/zones.mjs +194 -0
  151. package/{fesm2015/angular-fire-analytics.js → fesm2022/angular-fire-analytics.mjs} +68 -41
  152. package/fesm2022/angular-fire-analytics.mjs.map +1 -0
  153. package/{fesm2015/angular-fire-app-check.js → fesm2022/angular-fire-app-check.mjs} +18 -25
  154. package/fesm2022/angular-fire-app-check.mjs.map +1 -0
  155. package/{fesm2015/angular-fire-app.js → fesm2022/angular-fire-app.mjs} +10 -9
  156. package/fesm2022/angular-fire-app.mjs.map +1 -0
  157. package/{fesm2015/angular-fire-auth-guard.js → fesm2022/angular-fire-auth-guard.mjs} +31 -27
  158. package/fesm2022/angular-fire-auth-guard.mjs.map +1 -0
  159. package/{fesm2015/angular-fire-auth.js → fesm2022/angular-fire-auth.mjs} +14 -13
  160. package/fesm2022/angular-fire-auth.mjs.map +1 -0
  161. package/{fesm2015/angular-fire-compat-analytics.js → fesm2022/angular-fire-compat-analytics.mjs} +43 -41
  162. package/fesm2022/angular-fire-compat-analytics.mjs.map +1 -0
  163. package/{fesm2015/angular-fire-compat-auth-guard.js → fesm2022/angular-fire-compat-auth-guard.mjs} +30 -26
  164. package/fesm2022/angular-fire-compat-auth-guard.mjs.map +1 -0
  165. package/{fesm2015/angular-fire-compat-auth.js → fesm2022/angular-fire-compat-auth.mjs} +38 -16
  166. package/fesm2022/angular-fire-compat-auth.mjs.map +1 -0
  167. package/{fesm2015/angular-fire-compat-database.js → fesm2022/angular-fire-compat-database.mjs} +138 -132
  168. package/fesm2022/angular-fire-compat-database.mjs.map +1 -0
  169. package/{fesm2015/angular-fire-compat-firestore.js → fesm2022/angular-fire-compat-firestore.mjs} +119 -98
  170. package/fesm2022/angular-fire-compat-firestore.mjs.map +1 -0
  171. package/{fesm2015/angular-fire-compat-functions.js → fesm2022/angular-fire-compat-functions.mjs} +13 -12
  172. package/fesm2022/angular-fire-compat-functions.mjs.map +1 -0
  173. package/{fesm2015/angular-fire-compat-messaging.js → fesm2022/angular-fire-compat-messaging.mjs} +25 -19
  174. package/fesm2022/angular-fire-compat-messaging.mjs.map +1 -0
  175. package/{fesm2015/angular-fire-compat-performance.js → fesm2022/angular-fire-compat-performance.mjs} +29 -34
  176. package/fesm2022/angular-fire-compat-performance.mjs.map +1 -0
  177. package/{fesm2015/angular-fire-compat-remote-config.js → fesm2022/angular-fire-compat-remote-config.mjs} +35 -22
  178. package/fesm2022/angular-fire-compat-remote-config.mjs.map +1 -0
  179. package/{fesm2015/angular-fire-compat-storage.js → fesm2022/angular-fire-compat-storage.mjs} +30 -23
  180. package/fesm2022/angular-fire-compat-storage.mjs.map +1 -0
  181. package/{fesm2015/angular-fire-compat.js → fesm2022/angular-fire-compat.mjs} +25 -25
  182. package/fesm2022/angular-fire-compat.mjs.map +1 -0
  183. package/{fesm2015/angular-fire-database.js → fesm2022/angular-fire-database.mjs} +11 -12
  184. package/fesm2022/angular-fire-database.mjs.map +1 -0
  185. package/{fesm2015/angular-fire-firestore-lite.js → fesm2022/angular-fire-firestore-lite.mjs} +25 -15
  186. package/fesm2022/angular-fire-firestore-lite.mjs.map +1 -0
  187. package/fesm2022/angular-fire-firestore.mjs +180 -0
  188. package/fesm2022/angular-fire-firestore.mjs.map +1 -0
  189. package/{fesm2015/angular-fire-functions.js → fesm2022/angular-fire-functions.mjs} +12 -13
  190. package/fesm2022/angular-fire-functions.mjs.map +1 -0
  191. package/{fesm2015/angular-fire-messaging.js → fesm2022/angular-fire-messaging.mjs} +33 -19
  192. package/fesm2022/angular-fire-messaging.mjs.map +1 -0
  193. package/{fesm2015/angular-fire-performance.js → fesm2022/angular-fire-performance.mjs} +11 -11
  194. package/fesm2022/angular-fire-performance.mjs.map +1 -0
  195. package/{fesm2015/angular-fire-remote-config.js → fesm2022/angular-fire-remote-config.mjs} +34 -20
  196. package/fesm2022/angular-fire-remote-config.mjs.map +1 -0
  197. package/{fesm2015/angular-fire-storage.js → fesm2022/angular-fire-storage.mjs} +10 -11
  198. package/fesm2022/angular-fire-storage.mjs.map +1 -0
  199. package/{fesm2015/angular-fire.js → fesm2022/angular-fire.mjs} +33 -58
  200. package/fesm2022/angular-fire.mjs.map +1 -0
  201. package/firestore/firebase.d.ts +21 -1
  202. package/firestore/firestore.module.d.ts +2 -2
  203. package/firestore/lite/firebase.d.ts +10 -1
  204. package/firestore/lite/lite.module.d.ts +2 -2
  205. package/firestore/lite/rxfire.d.ts +3 -1
  206. package/firestore/rxfire.d.ts +3 -1
  207. package/functions/functions.module.d.ts +2 -2
  208. package/messaging/is-messaging-supported-factory.d.ts +4 -0
  209. package/messaging/messaging.module.d.ts +2 -2
  210. package/package.json +168 -17
  211. package/performance/performance.module.d.ts +2 -2
  212. package/remote-config/is-remote-config-supported-factory.d.ts +4 -0
  213. package/remote-config/remote-config.module.d.ts +2 -2
  214. package/schematics/add/index.js +2 -2
  215. package/schematics/common.js +9 -5
  216. package/schematics/deploy/actions.js +69 -69
  217. package/schematics/deploy/builder.js +7 -7
  218. package/schematics/firebaseTools.js +9 -5
  219. package/schematics/setup/index.js +27 -27
  220. package/schematics/setup/prompts.js +22 -18
  221. package/schematics/update/index.js +1 -1
  222. package/schematics/update/v7/index.js +7 -7
  223. package/schematics/utils.js +34 -34
  224. package/storage/storage.module.d.ts +2 -2
  225. package/analytics/package.json +0 -11
  226. package/app/package.json +0 -11
  227. package/app-check/package.json +0 -11
  228. package/auth/package.json +0 -11
  229. package/auth-guard/package.json +0 -11
  230. package/bundles/angular-fire-analytics.umd.js +0 -673
  231. package/bundles/angular-fire-analytics.umd.js.map +0 -1
  232. package/bundles/angular-fire-app-check.umd.js +0 -465
  233. package/bundles/angular-fire-app-check.umd.js.map +0 -1
  234. package/bundles/angular-fire-app.umd.js +0 -477
  235. package/bundles/angular-fire-app.umd.js.map +0 -1
  236. package/bundles/angular-fire-auth-guard.umd.js +0 -109
  237. package/bundles/angular-fire-auth-guard.umd.js.map +0 -1
  238. package/bundles/angular-fire-auth.umd.js +0 -557
  239. package/bundles/angular-fire-auth.umd.js.map +0 -1
  240. package/bundles/angular-fire-compat-analytics.umd.js +0 -672
  241. package/bundles/angular-fire-compat-analytics.umd.js.map +0 -1
  242. package/bundles/angular-fire-compat-auth-guard.umd.js +0 -112
  243. package/bundles/angular-fire-compat-auth-guard.umd.js.map +0 -1
  244. package/bundles/angular-fire-compat-auth.umd.js +0 -559
  245. package/bundles/angular-fire-compat-auth.umd.js.map +0 -1
  246. package/bundles/angular-fire-compat-database.umd.js +0 -799
  247. package/bundles/angular-fire-compat-database.umd.js.map +0 -1
  248. package/bundles/angular-fire-compat-firestore.umd.js +0 -1073
  249. package/bundles/angular-fire-compat-firestore.umd.js.map +0 -1
  250. package/bundles/angular-fire-compat-functions.umd.js +0 -443
  251. package/bundles/angular-fire-compat-functions.umd.js.map +0 -1
  252. package/bundles/angular-fire-compat-messaging.umd.js +0 -465
  253. package/bundles/angular-fire-compat-messaging.umd.js.map +0 -1
  254. package/bundles/angular-fire-compat-performance.umd.js +0 -212
  255. package/bundles/angular-fire-compat-performance.umd.js.map +0 -1
  256. package/bundles/angular-fire-compat-remote-config.umd.js +0 -605
  257. package/bundles/angular-fire-compat-remote-config.umd.js.map +0 -1
  258. package/bundles/angular-fire-compat-storage.umd.js +0 -598
  259. package/bundles/angular-fire-compat-storage.umd.js.map +0 -1
  260. package/bundles/angular-fire-compat.umd.js +0 -535
  261. package/bundles/angular-fire-compat.umd.js.map +0 -1
  262. package/bundles/angular-fire-database.umd.js +0 -557
  263. package/bundles/angular-fire-database.umd.js.map +0 -1
  264. package/bundles/angular-fire-firestore-lite.umd.js +0 -531
  265. package/bundles/angular-fire-firestore-lite.umd.js.map +0 -1
  266. package/bundles/angular-fire-firestore.umd.js +0 -565
  267. package/bundles/angular-fire-firestore.umd.js.map +0 -1
  268. package/bundles/angular-fire-functions.umd.js +0 -461
  269. package/bundles/angular-fire-functions.umd.js.map +0 -1
  270. package/bundles/angular-fire-messaging.umd.js +0 -473
  271. package/bundles/angular-fire-messaging.umd.js.map +0 -1
  272. package/bundles/angular-fire-performance.umd.js +0 -473
  273. package/bundles/angular-fire-performance.umd.js.map +0 -1
  274. package/bundles/angular-fire-remote-config.umd.js +0 -499
  275. package/bundles/angular-fire-remote-config.umd.js.map +0 -1
  276. package/bundles/angular-fire-storage.umd.js +0 -485
  277. package/bundles/angular-fire-storage.umd.js.map +0 -1
  278. package/bundles/angular-fire.umd.js +0 -308
  279. package/bundles/angular-fire.umd.js.map +0 -1
  280. package/compat/analytics/package.json +0 -11
  281. package/compat/auth/package.json +0 -11
  282. package/compat/auth-guard/package.json +0 -11
  283. package/compat/database/package.json +0 -11
  284. package/compat/firestore/package.json +0 -11
  285. package/compat/functions/package.json +0 -11
  286. package/compat/messaging/package.json +0 -11
  287. package/compat/package.json +0 -11
  288. package/compat/performance/package.json +0 -11
  289. package/compat/remote-config/package.json +0 -11
  290. package/compat/storage/package.json +0 -11
  291. package/database/package.json +0 -11
  292. package/esm2015/analytics/analytics.module.js +0 -93
  293. package/esm2015/analytics/firebase.js +0 -14
  294. package/esm2015/analytics/overrides.js +0 -3
  295. package/esm2015/analytics/screen-tracking.service.js +0 -139
  296. package/esm2015/analytics/user-tracking.service.js +0 -43
  297. package/esm2015/app/app.module.js +0 -84
  298. package/esm2015/app-check/app-check.js +0 -16
  299. package/esm2015/app-check/app-check.module.js +0 -81
  300. package/esm2015/app-check/firebase.js +0 -9
  301. package/esm2015/app-check/public_api.js +0 -4
  302. package/esm2015/auth/auth.module.js +0 -71
  303. package/esm2015/auth/firebase.js +0 -56
  304. package/esm2015/auth-guard/auth-guard.js +0 -49
  305. package/esm2015/compat/analytics/analytics.js +0 -163
  306. package/esm2015/compat/analytics/analytics.module.js +0 -32
  307. package/esm2015/compat/analytics/screen-tracking.service.js +0 -49
  308. package/esm2015/compat/analytics/user-tracking.service.js +0 -52
  309. package/esm2015/compat/auth/auth.js +0 -139
  310. package/esm2015/compat/auth-guard/auth-guard.js +0 -49
  311. package/esm2015/compat/database/database.js +0 -117
  312. package/esm2015/compat/database/interfaces.js +0 -2
  313. package/esm2015/compat/database/list/changes.js +0 -85
  314. package/esm2015/compat/database/list/create-reference.js +0 -41
  315. package/esm2015/compat/database/observable/fromRef.js +0 -47
  316. package/esm2015/compat/firebase.app.module.js +0 -69
  317. package/esm2015/compat/firestore/collection/changes.js +0 -107
  318. package/esm2015/compat/firestore/collection/collection.js +0 -117
  319. package/esm2015/compat/firestore/collection-group/collection-group.js +0 -81
  320. package/esm2015/compat/firestore/document/document.js +0 -82
  321. package/esm2015/compat/firestore/firestore.js +0 -254
  322. package/esm2015/compat/firestore/interfaces.js +0 -2
  323. package/esm2015/compat/firestore/observable/fromRef.js +0 -39
  324. package/esm2015/compat/functions/functions.js +0 -68
  325. package/esm2015/compat/messaging/messaging.js +0 -75
  326. package/esm2015/compat/performance/performance.js +0 -110
  327. package/esm2015/compat/performance/performance.module.js +0 -28
  328. package/esm2015/compat/performance/performance.service.js +0 -27
  329. package/esm2015/compat/proxy.js +0 -61
  330. package/esm2015/compat/remote-config/remote-config.js +0 -193
  331. package/esm2015/compat/storage/observable/fromTask.js +0 -34
  332. package/esm2015/compat/storage/pipes/storageUrl.pipe.js +0 -54
  333. package/esm2015/compat/storage/storage.js +0 -94
  334. package/esm2015/compat/storage/storage.module.js +0 -22
  335. package/esm2015/core.js +0 -79
  336. package/esm2015/database/database.module.js +0 -74
  337. package/esm2015/firestore/firebase.js +0 -53
  338. package/esm2015/firestore/firestore.module.js +0 -74
  339. package/esm2015/firestore/lite/firebase.js +0 -39
  340. package/esm2015/firestore/lite/lite.module.js +0 -74
  341. package/esm2015/firestore/lite/rxfire.js +0 -10
  342. package/esm2015/firestore/rxfire.js +0 -13
  343. package/esm2015/functions/functions.module.js +0 -74
  344. package/esm2015/messaging/messaging.module.js +0 -85
  345. package/esm2015/messaging/overrides.js +0 -3
  346. package/esm2015/performance/performance.module.js +0 -81
  347. package/esm2015/remote-config/overrides.js +0 -3
  348. package/esm2015/remote-config/remote-config.module.js +0 -85
  349. package/esm2015/storage/storage.module.js +0 -74
  350. package/esm2015/zones.js +0 -183
  351. package/fesm2015/angular-fire-analytics.js.map +0 -1
  352. package/fesm2015/angular-fire-app-check.js.map +0 -1
  353. package/fesm2015/angular-fire-app.js.map +0 -1
  354. package/fesm2015/angular-fire-auth-guard.js.map +0 -1
  355. package/fesm2015/angular-fire-auth.js.map +0 -1
  356. package/fesm2015/angular-fire-compat-analytics.js.map +0 -1
  357. package/fesm2015/angular-fire-compat-auth-guard.js.map +0 -1
  358. package/fesm2015/angular-fire-compat-auth.js.map +0 -1
  359. package/fesm2015/angular-fire-compat-database.js.map +0 -1
  360. package/fesm2015/angular-fire-compat-firestore.js.map +0 -1
  361. package/fesm2015/angular-fire-compat-functions.js.map +0 -1
  362. package/fesm2015/angular-fire-compat-messaging.js.map +0 -1
  363. package/fesm2015/angular-fire-compat-performance.js.map +0 -1
  364. package/fesm2015/angular-fire-compat-remote-config.js.map +0 -1
  365. package/fesm2015/angular-fire-compat-storage.js.map +0 -1
  366. package/fesm2015/angular-fire-compat.js.map +0 -1
  367. package/fesm2015/angular-fire-database.js.map +0 -1
  368. package/fesm2015/angular-fire-firestore-lite.js.map +0 -1
  369. package/fesm2015/angular-fire-firestore.js +0 -159
  370. package/fesm2015/angular-fire-firestore.js.map +0 -1
  371. package/fesm2015/angular-fire-functions.js.map +0 -1
  372. package/fesm2015/angular-fire-messaging.js.map +0 -1
  373. package/fesm2015/angular-fire-performance.js.map +0 -1
  374. package/fesm2015/angular-fire-remote-config.js.map +0 -1
  375. package/fesm2015/angular-fire-storage.js.map +0 -1
  376. package/fesm2015/angular-fire.js.map +0 -1
  377. package/firestore/lite/package.json +0 -11
  378. package/firestore/package.json +0 -11
  379. package/firestore-protos.js +0 -4
  380. package/functions/package.json +0 -11
  381. package/messaging/package.json +0 -11
  382. package/performance/package.json +0 -11
  383. package/remote-config/package.json +0 -11
  384. package/storage/package.json +0 -11
  385. /package/analytics/{angular-fire-analytics.d.ts → index.d.ts} +0 -0
  386. /package/app/{angular-fire-app.d.ts → index.d.ts} +0 -0
  387. /package/app-check/{angular-fire-app-check.d.ts → index.d.ts} +0 -0
  388. /package/auth/{angular-fire-auth.d.ts → index.d.ts} +0 -0
  389. /package/auth-guard/{angular-fire-auth-guard.d.ts → index.d.ts} +0 -0
  390. /package/compat/analytics/{angular-fire-compat-analytics.d.ts → index.d.ts} +0 -0
  391. /package/compat/auth/{angular-fire-compat-auth.d.ts → index.d.ts} +0 -0
  392. /package/compat/auth-guard/{angular-fire-compat-auth-guard.d.ts → index.d.ts} +0 -0
  393. /package/compat/database/{angular-fire-compat-database.d.ts → index.d.ts} +0 -0
  394. /package/compat/firestore/{angular-fire-compat-firestore.d.ts → index.d.ts} +0 -0
  395. /package/compat/functions/{angular-fire-compat-functions.d.ts → index.d.ts} +0 -0
  396. /package/compat/{angular-fire-compat.d.ts → index.d.ts} +0 -0
  397. /package/compat/messaging/{angular-fire-compat-messaging.d.ts → index.d.ts} +0 -0
  398. /package/compat/performance/{angular-fire-compat-performance.d.ts → index.d.ts} +0 -0
  399. /package/compat/remote-config/{angular-fire-compat-remote-config.d.ts → index.d.ts} +0 -0
  400. /package/compat/storage/{angular-fire-compat-storage.d.ts → index.d.ts} +0 -0
  401. /package/database/{angular-fire-database.d.ts → index.d.ts} +0 -0
  402. /package/{esm2015/analytics/angular-fire-analytics.js → esm2022/analytics/angular-fire-analytics.mjs} +0 -0
  403. /package/{esm2015/analytics/public_api.js → esm2022/analytics/public_api.mjs} +0 -0
  404. /package/{esm2015/angular-fire.js → esm2022/angular-fire.mjs} +0 -0
  405. /package/{esm2015/app/angular-fire-app.js → esm2022/app/angular-fire-app.mjs} +0 -0
  406. /package/{esm2015/app/firebase.js → esm2022/app/firebase.mjs} +0 -0
  407. /package/{esm2015/app/public_api.js → esm2022/app/public_api.mjs} +0 -0
  408. /package/{esm2015/app-check/angular-fire-app-check.js → esm2022/app-check/angular-fire-app-check.mjs} +0 -0
  409. /package/{esm2015/auth/angular-fire-auth.js → esm2022/auth/angular-fire-auth.mjs} +0 -0
  410. /package/{esm2015/auth/public_api.js → esm2022/auth/public_api.mjs} +0 -0
  411. /package/{esm2015/auth/rxfire.js → esm2022/auth/rxfire.mjs} +0 -0
  412. /package/{esm2015/auth-guard/angular-fire-auth-guard.js → esm2022/auth-guard/angular-fire-auth-guard.mjs} +0 -0
  413. /package/{esm2015/auth-guard/public_api.js → esm2022/auth-guard/public_api.mjs} +0 -0
  414. /package/{esm2015/compat/analytics/angular-fire-compat-analytics.js → esm2022/compat/analytics/angular-fire-compat-analytics.mjs} +0 -0
  415. /package/{esm2015/compat/analytics/base.js → esm2022/compat/analytics/base.mjs} +0 -0
  416. /package/{esm2015/compat/analytics/public_api.js → esm2022/compat/analytics/public_api.mjs} +0 -0
  417. /package/{esm2015/compat/angular-fire-compat.js → esm2022/compat/angular-fire-compat.mjs} +0 -0
  418. /package/{esm2015/compat/auth/angular-fire-compat-auth.js → esm2022/compat/auth/angular-fire-compat-auth.mjs} +0 -0
  419. /package/{esm2015/compat/auth/base.js → esm2022/compat/auth/base.mjs} +0 -0
  420. /package/{esm2015/compat/auth-guard/angular-fire-compat-auth-guard.js → esm2022/compat/auth-guard/angular-fire-compat-auth-guard.mjs} +0 -0
  421. /package/{esm2015/compat/auth-guard/public_api.js → esm2022/compat/auth-guard/public_api.mjs} +0 -0
  422. /package/{esm2015/compat/database/angular-fire-compat-database.js → esm2022/compat/database/angular-fire-compat-database.mjs} +0 -0
  423. /package/{esm2015/compat/database/list/remove.js → esm2022/compat/database/list/remove.mjs} +0 -0
  424. /package/{esm2015/compat/database/list/utils.js → esm2022/compat/database/list/utils.mjs} +0 -0
  425. /package/{esm2015/compat/database/public_api.js → esm2022/compat/database/public_api.mjs} +0 -0
  426. /package/{esm2015/compat/firestore/angular-fire-compat-firestore.js → esm2022/compat/firestore/angular-fire-compat-firestore.mjs} +0 -0
  427. /package/{esm2015/compat/firestore/public_api.js → esm2022/compat/firestore/public_api.mjs} +0 -0
  428. /package/{esm2015/compat/functions/angular-fire-compat-functions.js → esm2022/compat/functions/angular-fire-compat-functions.mjs} +0 -0
  429. /package/{esm2015/compat/functions/base.js → esm2022/compat/functions/base.mjs} +0 -0
  430. /package/{esm2015/compat/messaging/angular-fire-compat-messaging.js → esm2022/compat/messaging/angular-fire-compat-messaging.mjs} +0 -0
  431. /package/{esm2015/compat/messaging/base.js → esm2022/compat/messaging/base.mjs} +0 -0
  432. /package/{esm2015/compat/messaging/public_api.js → esm2022/compat/messaging/public_api.mjs} +0 -0
  433. /package/{esm2015/compat/performance/angular-fire-compat-performance.js → esm2022/compat/performance/angular-fire-compat-performance.mjs} +0 -0
  434. /package/{esm2015/compat/performance/base.js → esm2022/compat/performance/base.mjs} +0 -0
  435. /package/{esm2015/compat/performance/public_api.js → esm2022/compat/performance/public_api.mjs} +0 -0
  436. /package/{esm2015/compat/public_api.js → esm2022/compat/public_api.mjs} +0 -0
  437. /package/{esm2015/compat/remote-config/angular-fire-compat-remote-config.js → esm2022/compat/remote-config/angular-fire-compat-remote-config.mjs} +0 -0
  438. /package/{esm2015/compat/remote-config/base.js → esm2022/compat/remote-config/base.mjs} +0 -0
  439. /package/{esm2015/compat/remote-config/interfaces.js → esm2022/compat/remote-config/interfaces.mjs} +0 -0
  440. /package/{esm2015/compat/remote-config/public_api.js → esm2022/compat/remote-config/public_api.mjs} +0 -0
  441. /package/{esm2015/compat/storage/angular-fire-compat-storage.js → esm2022/compat/storage/angular-fire-compat-storage.mjs} +0 -0
  442. /package/{esm2015/compat/storage/interfaces.js → esm2022/compat/storage/interfaces.mjs} +0 -0
  443. /package/{esm2015/compat/storage/public_api.js → esm2022/compat/storage/public_api.mjs} +0 -0
  444. /package/{esm2015/database/angular-fire-database.js → esm2022/database/angular-fire-database.mjs} +0 -0
  445. /package/{esm2015/database/firebase.js → esm2022/database/firebase.mjs} +0 -0
  446. /package/{esm2015/database/public_api.js → esm2022/database/public_api.mjs} +0 -0
  447. /package/{esm2015/database/rxfire.js → esm2022/database/rxfire.mjs} +0 -0
  448. /package/{esm2015/firestore/angular-fire-firestore.js → esm2022/firestore/angular-fire-firestore.mjs} +0 -0
  449. /package/{esm2015/firestore/lite/angular-fire-firestore-lite.js → esm2022/firestore/lite/angular-fire-firestore-lite.mjs} +0 -0
  450. /package/{esm2015/firestore/lite/public_api.js → esm2022/firestore/lite/public_api.mjs} +0 -0
  451. /package/{esm2015/firestore/public_api.js → esm2022/firestore/public_api.mjs} +0 -0
  452. /package/{esm2015/functions/angular-fire-functions.js → esm2022/functions/angular-fire-functions.mjs} +0 -0
  453. /package/{esm2015/functions/firebase.js → esm2022/functions/firebase.mjs} +0 -0
  454. /package/{esm2015/functions/public_api.js → esm2022/functions/public_api.mjs} +0 -0
  455. /package/{esm2015/functions/rxfire.js → esm2022/functions/rxfire.mjs} +0 -0
  456. /package/{esm2015/messaging/angular-fire-messaging.js → esm2022/messaging/angular-fire-messaging.mjs} +0 -0
  457. /package/{esm2015/messaging/firebase.js → esm2022/messaging/firebase.mjs} +0 -0
  458. /package/{esm2015/messaging/public_api.js → esm2022/messaging/public_api.mjs} +0 -0
  459. /package/{esm2015/performance/angular-fire-performance.js → esm2022/performance/angular-fire-performance.mjs} +0 -0
  460. /package/{esm2015/performance/firebase.js → esm2022/performance/firebase.mjs} +0 -0
  461. /package/{esm2015/performance/public_api.js → esm2022/performance/public_api.mjs} +0 -0
  462. /package/{esm2015/performance/rxfire.js → esm2022/performance/rxfire.mjs} +0 -0
  463. /package/{esm2015/public_api.js → esm2022/public_api.mjs} +0 -0
  464. /package/{esm2015/remote-config/angular-fire-remote-config.js → esm2022/remote-config/angular-fire-remote-config.mjs} +0 -0
  465. /package/{esm2015/remote-config/firebase.js → esm2022/remote-config/firebase.mjs} +0 -0
  466. /package/{esm2015/remote-config/public_api.js → esm2022/remote-config/public_api.mjs} +0 -0
  467. /package/{esm2015/remote-config/rxfire.js → esm2022/remote-config/rxfire.mjs} +0 -0
  468. /package/{esm2015/storage/angular-fire-storage.js → esm2022/storage/angular-fire-storage.mjs} +0 -0
  469. /package/{esm2015/storage/firebase.js → esm2022/storage/firebase.mjs} +0 -0
  470. /package/{esm2015/storage/public_api.js → esm2022/storage/public_api.mjs} +0 -0
  471. /package/{esm2015/storage/rxfire.js → esm2022/storage/rxfire.mjs} +0 -0
  472. /package/firestore/{angular-fire-firestore.d.ts → index.d.ts} +0 -0
  473. /package/firestore/lite/{angular-fire-firestore-lite.d.ts → index.d.ts} +0 -0
  474. /package/functions/{angular-fire-functions.d.ts → index.d.ts} +0 -0
  475. /package/{angular-fire.d.ts → index.d.ts} +0 -0
  476. /package/messaging/{angular-fire-messaging.d.ts → index.d.ts} +0 -0
  477. /package/performance/{angular-fire-performance.d.ts → index.d.ts} +0 -0
  478. /package/remote-config/{angular-fire-remote-config.d.ts → index.d.ts} +0 -0
  479. /package/storage/{angular-fire-storage.d.ts → index.d.ts} +0 -0
@@ -0,0 +1,123 @@
1
+ import { keepUnstableUntilFirst } from '@angular/fire';
2
+ import { from } from 'rxjs';
3
+ import { filter, map, pairwise, scan, startWith } from 'rxjs/operators';
4
+ import { AngularFirestoreDocument } from '../document/document';
5
+ import { fromCollectionRef } from '../observable/fromRef';
6
+ import { docChanges, sortedChanges } from './changes';
7
+ export function validateEventsArray(events) {
8
+ if (!events || events.length === 0) {
9
+ events = ['added', 'removed', 'modified'];
10
+ }
11
+ return events;
12
+ }
13
+ /**
14
+ * AngularFirestoreCollection service
15
+ *
16
+ * This class creates a reference to a Firestore Collection. A reference and a query are provided in
17
+ * in the constructor. The query can be the unqueried reference if no query is desired.The class
18
+ * is generic which gives you type safety for data update methods and data streaming.
19
+ *
20
+ * This class uses Symbol.observable to transform into Observable using Observable.from().
21
+ *
22
+ * This class is rarely used directly and should be created from the AngularFirestore service.
23
+ *
24
+ * Example:
25
+ *
26
+ * const collectionRef = firebase.firestore.collection('stocks');
27
+ * const query = collectionRef.where('price', '>', '0.01');
28
+ * const fakeStock = new AngularFirestoreCollection<Stock>(collectionRef, query);
29
+ *
30
+ * // NOTE!: the updates are performed on the reference not the query
31
+ * await fakeStock.add({ name: 'FAKE', price: 0.01 });
32
+ *
33
+ * // Subscribe to changes as snapshots. This provides you data updates as well as delta updates.
34
+ * fakeStock.valueChanges().subscribe(value => console.log(value));
35
+ */
36
+ export class AngularFirestoreCollection {
37
+ ref;
38
+ query;
39
+ afs;
40
+ /**
41
+ * The constructor takes in a CollectionReference and Query to provide wrapper methods
42
+ * for data operations and data streaming.
43
+ *
44
+ * Note: Data operation methods are done on the reference not the query. This means
45
+ * when you update data it is not updating data to the window of your query unless
46
+ * the data fits the criteria of the query. See the AssociatedRefence type for details
47
+ * on this implication.
48
+ */
49
+ constructor(ref, query, afs) {
50
+ this.ref = ref;
51
+ this.query = query;
52
+ this.afs = afs;
53
+ }
54
+ /**
55
+ * Listen to the latest change in the stream. This method returns changes
56
+ * as they occur and they are not sorted by query order. This allows you to construct
57
+ * your own data structure.
58
+ */
59
+ stateChanges(events) {
60
+ let source = docChanges(this.query, this.afs.schedulers.outsideAngular);
61
+ if (events && events.length > 0) {
62
+ source = source.pipe(map(actions => actions.filter(change => events.indexOf(change.type) > -1)));
63
+ }
64
+ return source.pipe(
65
+ // We want to filter out empty arrays, but always emit at first, so the developer knows
66
+ // that the collection has been resolve; even if it's empty
67
+ startWith(undefined), pairwise(), filter(([prior, current]) => current.length > 0 || !prior), map(([, current]) => current), keepUnstableUntilFirst);
68
+ }
69
+ /**
70
+ * Create a stream of changes as they occur it time. This method is similar to stateChanges()
71
+ * but it collects each event in an array over time.
72
+ */
73
+ auditTrail(events) {
74
+ return this.stateChanges(events).pipe(scan((current, action) => [...current, ...action], []));
75
+ }
76
+ /**
77
+ * Create a stream of synchronized changes. This method keeps the local array in sorted
78
+ * query order.
79
+ */
80
+ snapshotChanges(events) {
81
+ const validatedEvents = validateEventsArray(events);
82
+ const scheduledSortedChanges$ = sortedChanges(this.query, validatedEvents, this.afs.schedulers.outsideAngular);
83
+ return scheduledSortedChanges$.pipe(keepUnstableUntilFirst);
84
+ }
85
+ valueChanges(options = {}) {
86
+ return fromCollectionRef(this.query, this.afs.schedulers.outsideAngular)
87
+ .pipe(map(actions => actions.payload.docs.map(a => {
88
+ if (options.idField) {
89
+ return {
90
+ ...a.data(),
91
+ ...{ [options.idField]: a.id }
92
+ };
93
+ }
94
+ else {
95
+ return a.data();
96
+ }
97
+ })), keepUnstableUntilFirst);
98
+ }
99
+ /**
100
+ * Retrieve the results of the query once.
101
+ */
102
+ get(options) {
103
+ return from(this.query.get(options)).pipe(keepUnstableUntilFirst);
104
+ }
105
+ /**
106
+ * Add data to a collection reference.
107
+ *
108
+ * Note: Data operation methods are done on the reference not the query. This means
109
+ * when you update data it is not updating data to the window of your query unless
110
+ * the data fits the criteria of the query.
111
+ */
112
+ add(data) {
113
+ return this.ref.add(data);
114
+ }
115
+ /**
116
+ * Create a reference to a single document in a collection.
117
+ */
118
+ doc(path) {
119
+ // TODO is there a better way to solve this type issue
120
+ return new AngularFirestoreDocument(this.ref.doc(path), this.afs);
121
+ }
122
+ }
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wYXQvZmlyZXN0b3JlL2NvbGxlY3Rpb24vY29sbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkQsT0FBTyxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4QyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBSXRELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxNQUE2QjtJQUMvRCxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ2xDLE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7S0FDM0M7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFNLE9BQU8sMEJBQTBCO0lBV25CO0lBQ0M7SUFDQTtJQVpuQjs7Ozs7Ozs7T0FRRztJQUNILFlBQ2tCLEdBQTJCLEVBQzFCLEtBQWUsRUFDZixHQUFxQjtRQUZ0QixRQUFHLEdBQUgsR0FBRyxDQUF3QjtRQUMxQixVQUFLLEdBQUwsS0FBSyxDQUFVO1FBQ2YsUUFBRyxHQUFILEdBQUcsQ0FBa0I7SUFBSSxDQUFDO0lBRTdDOzs7O09BSUc7SUFDSCxZQUFZLENBQUMsTUFBNkI7UUFDeEMs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RUQ7O09BRUc7SUFDSCxHQUFHLENBQVMsSUFBYTtRQUN2QixzREFBc0Q7UUFDdEQsT0FBTyxJQUFJLHdCQUF3QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBUSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzRSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBrZWVwVW5zdGFibGVVbnRpbEZpcnN0IH0gZnJvbSAnQGFuZ3VsYXIvZmlyZSc7XG5pbXBvcnQgZmlyZWJhc2UgZnJvbSAnZmlyZWJhc2UvY29tcGF0L2FwcCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgcGFpcndpc2UsIHNjYW4sIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFuZ3VsYXJGaXJlc3RvcmVEb2N1bWVudCB9IGZyb20gJy4uL2RvY3VtZW50L2RvY3VtZW50JztcbmltcG9ydCB7IEFuZ3VsYXJGaXJlc3RvcmUgfSBmcm9tICcuLi9maXJlc3RvcmUnO1xuaW1wb3J0IHsgQ29sbGVjdGlvblJlZmVyZW5jZSwgRG9jdW1lbnRDaGFuZ2VBY3Rpb24sIERvY3VtZW50Q2hhbmdlVHlwZSwgRG9jdW1lbnREYXRhLCBEb2N1bWVudFJlZmVyZW5jZSwgUXVlcnkgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGZyb21Db2xsZWN0aW9uUmVmIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9mcm9tUmVmJztcbmltcG9ydCB7IGRvY0NoYW5nZXMsIHNvcnRlZENoYW5nZXMgfSBmcm9tICcuL2NoYW5nZXMnO1xuXG50eXBlIERvY3VtZW50Q2hhbmdlVHVwbGU8VD4gPSBbRG9jdW1lbnRDaGFuZ2VBY3Rpb248VD5bXSwgRG9jdW1lbnRDaGFuZ2VBY3Rpb248VD5bXV07XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUV2ZW50c0FycmF5KGV2ZW50cz86IERvY3VtZW50Q2hhbmdlVHlwZVtdKSB7XG4gIGlmICghZXZlbnRzIHx8IGV2ZW50cy5sZW5ndGggPT09IDApIHtcbiAgICBldmVudHMgPSBbJ2FkZGVkJywgJ3JlbW92ZWQnLCAnbW9kaWZpZWQnXTtcbiAgfVxuICByZXR1cm4gZXZlbnRzO1xufVxuXG4vKipcbiAqIEFuZ3VsYXJGaXJlc3RvcmVDb2xsZWN0aW9uIHNlcnZpY2VcbiAqXG4gKiBUaGlzIGNsYXNzIGNyZWF0ZXMgYSByZWZlcmVuY2UgdG8gYSBGaXJlc3RvcmUgQ29sbGVjdGlvbi4gQSByZWZlcmVuY2UgYW5kIGEgcXVlcnkgYXJlIHByb3ZpZGVkIGluXG4gKiBpbiB0aGUgY29uc3RydWN0b3IuIFRoZSBxdWVyeSBjYW4gYmUgdGhlIHVucXVlcmllZCByZWZlcmVuY2UgaWYgbm8gcXVlcnkgaXMgZGVzaXJlZC5UaGUgY2xhc3NcbiAqIGlzIGdlbmVyaWMgd2hpY2ggZ2l2ZXMgeW91IHR5cGUgc2FmZXR5IGZvciBkYXRhIHVwZGF0ZSBtZXRob2RzIGFuZCBkYXRhIHN0cmVhbWluZy5cbiAqXG4gKiBUaGlzIGNsYXNzIHVzZXMgU3ltYm9sLm9ic2VydmFibGUgdG8gdHJhbnNmb3JtIGludG8gT2JzZXJ2YWJsZSB1c2luZyBPYnNlcnZhYmxlLmZyb20oKS5cbiAqXG4gKiBUaGlzIGNsYXNzIGlzIHJhcmVseSB1c2VkIGRpcmVjdGx5IGFuZCBzaG91bGQgYmUgY3JlYXRlZCBmcm9tIHRoZSBBbmd1bGFyRmlyZXN0b3JlIHNlcnZpY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBjb25zdCBjb2xsZWN0aW9uUmVmID0gZmlyZWJhc2UuZmlyZXN0b3JlLmNvbGxlY3Rpb24oJ3N0b2NrcycpO1xuICogY29uc3QgcXVlcnkgPSBjb2xsZWN0aW9uUmVmLndoZXJlKCdwcmljZScsICc+JywgJzAuMDEnKTtcbiAqIGNvbnN0IGZha2VTdG9jayA9IG5ldyBBbmd1bGFyRmlyZXN0b3JlQ29sbGVjdGlvbjxTdG9jaz4oY29sbGVjdGlvblJlZiwgcXVlcnkpO1xuICpcbiAqIC8vIE5PVEUhOiB0aGUgdXBkYXRlcyBhcmUgcGVyZm9ybWVkIG9uIHRoZSByZWZlcmVuY2Ugbm90IHRoZSBxdWVyeVxuICogYXdhaXQgZmFrZVN0b2NrLmFkZCh7IG5hbWU6ICdGQUtFJywgcHJpY2U6IDAuMDEgfSk7XG4gKlxuICogLy8gU3Vic2NyaWJlIHRvIGNoYW5nZXMgYXMgc25hcHNob3RzLiBUaGlzIHByb3ZpZGVzIHlvdSBkYXRhIHVwZGF0ZXMgYXMgd2VsbCBhcyBkZWx0YSB1cGRhdGVzLlxuICogZmFrZVN0b2NrLnZhbHVlQ2hhbmdlcygpLnN1YnNjcmliZSh2YWx1ZSA9PiBjb25zb2xlLmxvZyh2YWx1ZSkpO1xuICovXG5leHBvcnQgY2xhc3MgQW5ndWxhckZpcmVzdG9yZUNvbGxlY3Rpb248VCA9IERvY3VtZW50RGF0YT4ge1xuICAvKipcbiAgICogVGhlIGNvbnN0cnVjdG9yIHRha2VzIGluIGEgQ29sbGVjdGlvblJlZmVyZW5jZSBhbmQgUXVlcnkgdG8gcHJvdmlkZSB3cmFwcGVyIG1ldGhvZHNcbiAgICogZm9yIGRhdGEgb3BlcmF0aW9ucyBhbmQgZGF0YSBzdHJlYW1pbmcuXG4gICAqXG4gICAqIE5vdGU6IERhdGEgb3BlcmF0aW9uIG1ldGhvZHMgYXJlIGRvbmUgb24gdGhlIHJlZmVyZW5jZSBub3QgdGhlIHF1ZXJ5LiBUaGlzIG1lYW5zXG4gICAqIHdoZW4geW91IHVwZGF0ZSBkYXRhIGl0IGlzIG5vdCB1cGRhdGluZyBkYXRhIHRvIHRoZSB3aW5kb3cgb2YgeW91ciBxdWVyeSB1bmxlc3NcbiAgICogdGhlIGRhdGEgZml0cyB0aGUgY3JpdGVyaWEgb2YgdGhlIHF1ZXJ5LiBTZWUgdGhlIEFzc29jaWF0ZWRSZWZlbmNlIHR5cGUgZm9yIGRldGFpbHNcbiAgICogb24gdGhpcyBpbXBsaWNhdGlvbi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSByZWY6IENvbGxlY3Rpb25SZWZlcmVuY2U8VD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBxdWVyeTogUXVlcnk8VD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBhZnM6IEFuZ3VsYXJGaXJlc3RvcmUpIHsgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gdGhlIGxhdGVzdCBjaGFuZ2UgaW4gdGhlIHN0cmVhbS4gVGhpcyBtZXRob2QgcmV0dXJucyBjaGFuZ2VzXG4gICAqIGFzIHRoZXkgb2NjdXIgYW5kIHRoZXkgYXJlIG5vdCBzb3J0ZWQgYnkgcXVlcnkgb3JkZXIuIFRoaXMgYWxsb3dzIHlvdSB0byBjb25zdHJ1Y3RcbiAgICogeW91ciBvd24gZGF0YSBzdHJ1Y3R1cmUuXG4gICAqL1xuICBzdGF0ZUNoYW5nZXMoZXZlbnRzPzogRG9jdW1lbnRDaGFuZ2VUeXBlW10pOiBPYnNlcnZhYmxlPERvY3VtZW50Q2hhbmdlQWN0aW9uPFQ+W10+IHtcbiAgICBsZXQgc291cmNlID0gZG9jQ2hhbmdlczxUPih0aGlzLnF1ZXJ5LCB0aGlzLmFmcy5zY2hlZHVsZXJzLm91dHNpZGVBbmd1bGFyKTtcbiAgICBpZiAoZXZlbnRzICYmIGV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICBzb3VyY2UgPSBzb3VyY2UucGlwZShcbiAgICAgICAgbWFwKGFjdGlvbnMgPT4gYWN0aW9ucy5maWx0ZXIoY2hhbmdlID0+IGV2ZW50cy5pbmRleE9mKGNoYW5nZS50eXBlKSA+IC0xKSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2UucGlwZShcbiAgICAgIC8vIFdlIHdhbnQgdG8gZmlsdGVyIG91dCBlbXB0eSBhcnJheXMsIGJ1dCBhbHdheXMgZW1pdCBhdCBmaXJzdCwgc28gdGhlIGRldmVsb3BlciBrbm93c1xuICAgICAgLy8gdGhhdCB0aGUgY29sbGVjdGlvbiBoYXMgYmVlbiByZXNvbHZlOyBldmVuIGlmIGl0J3MgZW1wdHlcbiAgICAgIHN0YXJ0V2l0aDxEb2N1bWVudENoYW5nZUFjdGlvbjxUPltdLCB1bmRlZmluZWQ+KHVuZGVmaW5lZCksXG4gICAgICBwYWlyd2lzZSgpLFxuICAgICAgZmlsdGVyKChbcHJpb3IsIGN1cnJlbnRdOiBEb2N1bWVudENoYW5nZVR1cGxlPFQ+KSA9PiBjdXJyZW50Lmxlbmd0aCA+IDAgfHwgIXByaW9yKSxcbiAgICAgIG1hcCgoWywgY3VycmVudF0pID0+IGN1cnJlbnQpLFxuICAgICAga2VlcFVuc3RhYmxlVW50aWxGaXJzdFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgc3RyZWFtIG9mIGNoYW5nZXMgYXMgdGhleSBvY2N1ciBpdCB0aW1lLiBUaGlzIG1ldGhvZCBpcyBzaW1pbGFyIHRvIHN0YXRlQ2hhbmdlcygpXG4gICAqIGJ1dCBpdCBjb2xsZWN0cyBlYWNoIGV2ZW50IGluIGFuIGFycmF5IG92ZXIgdGltZS5cbiAgICovXG4gIGF1ZGl0VHJhaWwoZXZlbnRzPzogRG9jdW1lbnRDaGFuZ2VUeXBlW10pOiBPYnNlcnZhYmxlPERvY3VtZW50Q2hhbmdlQWN0aW9uPFQ+W10+IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZUNoYW5nZXMoZXZlbnRzKS5waXBlKHNjYW4oKGN1cnJlbnQsIGFjdGlvbikgPT4gWy4uLmN1cnJlbnQsIC4uLmFjdGlvbl0sIFtdKSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgc3RyZWFtIG9mIHN5bmNocm9uaXplZCBjaGFuZ2VzLiBUaGlzIG1ldGhvZCBrZWVwcyB0aGUgbG9jYWwgYXJyYXkgaW4gc29ydGVkXG4gICAqIHF1ZXJ5IG9yZGVyLlxuICAgKi9cbiAgc25hcHNob3RDaGFuZ2VzKGV2ZW50cz86IERvY3VtZW50Q2hhbmdlVHlwZVtdKTogT2JzZXJ2YWJsZTxEb2N1bWVudENoYW5nZUFjdGlvbjxUPltdPiB7XG4gICAgY29uc3QgdmFsaWRhdGVkRXZlbnRzID0gdmFsaWRhdGVFdmVudHNBcnJheShldmVudHMpO1xuICAgIGNvbnN0IHNjaGVkdWxlZFNvcnRlZENoYW5nZXMkID0gc29ydGVkQ2hhbmdlczxUPih0aGlzLnF1ZXJ5LCB2YWxpZGF0ZWRFdmVudHMsIHRoaXMuYWZzLnNjaGVkdWxlcnMub3V0c2lkZUFuZ3VsYXIpO1xuICAgIHJldHVybiBzY2hlZHVsZWRTb3J0ZWRDaGFuZ2VzJC5waXBlKFxuICAgICAga2VlcFVuc3RhYmxlVW50aWxGaXJzdFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIHRvIGFsbCBkb2N1bWVudHMgaW4gdGhlIGNvbGxlY3Rpb24gYW5kIGl0cyBwb3NzaWJsZSBxdWVyeSBhcyBhbiBPYnNlcnZhYmxlLlxuICAgKlxuICAgKiBJZiB0aGUgYGlkRmllbGRgIG9wdGlvbiBpcyBwcm92aWRlZCwgZG9jdW1lbnQgSURzIGFyZSBpbmNsdWRlZCBhbmQgbWFwcGVkIHRvIHRoZVxuICAgKiBwcm92aWRlZCBgaWRGaWVsZGAgcHJvcGVydHkgbmFtZS5cbiAgICovXG4gIHZhbHVlQ2hhbmdlcygpOiBPYnNlcnZhYmxlPFRbXT47XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eS1wYXR0ZXJuXG4gIHZhbHVlQ2hhbmdlcyh7fSk6IE9ic2VydmFibGU8VFtdPjtcbiAgdmFsdWVDaGFuZ2VzPEsgZXh0ZW5kcyBzdHJpbmc+KG9wdGlvbnM6IHtpZEZpZWxkOiBLfSk6IE9ic2VydmFibGU8KFQgJiB7IFtUIGluIEtdOiBzdHJpbmcgfSlbXT47XG4gIHZhbHVlQ2hhbmdlczxLIGV4dGVuZHMgc3RyaW5nPihvcHRpb25zOiB7aWRGaWVsZD86IEt9ID0ge30pOiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIHJldHVybiBmcm9tQ29sbGVjdGlvblJlZjxUPih0aGlzLnF1ZXJ5LCB0aGlzLmFmcy5zY2hlZHVsZXJzLm91dHNpZGVBbmd1bGFyKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChhY3Rpb25zID0+IGFjdGlvbnMucGF5bG9hZC5kb2NzLm1hcChhID0+IHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5pZEZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5hLmRhdGEoKSBhcyBhbnksXG4gICAgICAgICAgICAgIC4uLnsgW29wdGlvbnMuaWRGaWVsZF06IGEuaWQgfVxuICAgICAgICAgICAgfSBhcyBUICYgeyBbVCBpbiBLXTogc3RyaW5nIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhLmRhdGEoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKSxcbiAgICAgICAga2VlcFVuc3RhYmxlVW50aWxGaXJzdFxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgcmVzdWx0cyBvZiB0aGUgcXVlcnkgb25jZS5cbiAgICovXG4gIGdldChvcHRpb25zPzogZmlyZWJhc2UuZmlyZXN0b3JlLkdldE9wdGlvbnMpIHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLnF1ZXJ5LmdldChvcHRpb25zKSkucGlwZShcbiAgICAgIGtlZXBVbnN0YWJsZVVudGlsRmlyc3QsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgZGF0YSB0byBhIGNvbGxlY3Rpb24gcmVmZXJlbmNlLlxuICAgKlxuICAgKiBOb3RlOiBEYXRhIG9wZXJhdGlvbiBtZXRob2RzIGFyZSBkb25lIG9uIHRoZSByZWZlcmVuY2Ugbm90IHRoZSBxdWVyeS4gVGhpcyBtZWFuc1xuICAgKiB3aGVuIHlvdSB1cGRhdGUgZGF0YSBpdCBpcyBub3QgdXBkYXRpbmcgZGF0YSB0byB0aGUgd2luZG93IG9mIHlvdXIgcXVlcnkgdW5sZXNzXG4gICAqIHRoZSBkYXRhIGZpdHMgdGhlIGNyaXRlcmlhIG9mIHRoZSBxdWVyeS5cbiAgICovXG4gIGFkZChkYXRhOiBUKTogUHJvbWlzZTxEb2N1bWVudFJlZmVyZW5jZTxUPj4ge1xuICAgIHJldHVybiB0aGlzLnJlZi5hZGQoZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgcmVmZXJlbmNlIHRvIGEgc2luZ2xlIGRvY3VtZW50IGluIGEgY29sbGVjdGlvbi5cbiAgICovXG4gIGRvYzxUMiA9IFQ+KHBhdGg/OiBzdHJpbmcpOiBBbmd1bGFyRmlyZXN0b3JlRG9jdW1lbnQ8VDI+IHtcbiAgICAvLyBUT0RPIGlzIHRoZXJlIGEgYmV0dGVyIHdheSB0byBzb2x2ZSB0aGlzIHR5cGUgaXNzdWVcbiAgICByZXR1cm4gbmV3IEFuZ3VsYXJGaXJlc3RvcmVEb2N1bWVudCh0aGlzLnJlZi5kb2MocGF0aCkgYXMgYW55LCB0aGlzLmFmcyk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,86 @@
1
+ import { keepUnstableUntilFirst } from '@angular/fire';
2
+ import { from } from 'rxjs';
3
+ import { filter, map, scan } from 'rxjs/operators';
4
+ import { docChanges, sortedChanges } from '../collection/changes';
5
+ import { validateEventsArray } from '../collection/collection';
6
+ import { fromCollectionRef } from '../observable/fromRef';
7
+ /**
8
+ * AngularFirestoreCollectionGroup service
9
+ *
10
+ * This class holds a reference to a Firestore Collection Group Query.
11
+ *
12
+ * This class uses Symbol.observable to transform into Observable using Observable.from().
13
+ *
14
+ * This class is rarely used directly and should be created from the AngularFirestore service.
15
+ *
16
+ * Example:
17
+ *
18
+ * const collectionGroup = firebase.firestore.collectionGroup('stocks');
19
+ * const query = collectionRef.where('price', '>', '0.01');
20
+ * const fakeStock = new AngularFirestoreCollectionGroup<Stock>(query, afs);
21
+ *
22
+ * // Subscribe to changes as snapshots. This provides you data updates as well as delta updates.
23
+ * fakeStock.valueChanges().subscribe(value => console.log(value));
24
+ */
25
+ export class AngularFirestoreCollectionGroup {
26
+ query;
27
+ afs;
28
+ /**
29
+ * The constructor takes in a CollectionGroupQuery to provide wrapper methods
30
+ * for data operations and data streaming.
31
+ */
32
+ constructor(query, afs) {
33
+ this.query = query;
34
+ this.afs = afs;
35
+ }
36
+ /**
37
+ * Listen to the latest change in the stream. This method returns changes
38
+ * as they occur and they are not sorted by query order. This allows you to construct
39
+ * your own data structure.
40
+ */
41
+ stateChanges(events) {
42
+ if (!events || events.length === 0) {
43
+ return docChanges(this.query, this.afs.schedulers.outsideAngular).pipe(keepUnstableUntilFirst);
44
+ }
45
+ return docChanges(this.query, this.afs.schedulers.outsideAngular)
46
+ .pipe(map(actions => actions.filter(change => events.indexOf(change.type) > -1)), filter(changes => changes.length > 0), keepUnstableUntilFirst);
47
+ }
48
+ /**
49
+ * Create a stream of changes as they occur it time. This method is similar to stateChanges()
50
+ * but it collects each event in an array over time.
51
+ */
52
+ auditTrail(events) {
53
+ return this.stateChanges(events).pipe(scan((current, action) => [...current, ...action], []));
54
+ }
55
+ /**
56
+ * Create a stream of synchronized changes. This method keeps the local array in sorted
57
+ * query order.
58
+ */
59
+ snapshotChanges(events) {
60
+ const validatedEvents = validateEventsArray(events);
61
+ const scheduledSortedChanges$ = sortedChanges(this.query, validatedEvents, this.afs.schedulers.outsideAngular);
62
+ return scheduledSortedChanges$.pipe(keepUnstableUntilFirst);
63
+ }
64
+ valueChanges(options = {}) {
65
+ const fromCollectionRefScheduled$ = fromCollectionRef(this.query, this.afs.schedulers.outsideAngular);
66
+ return fromCollectionRefScheduled$
67
+ .pipe(map(actions => actions.payload.docs.map(a => {
68
+ if (options.idField) {
69
+ return {
70
+ [options.idField]: a.id,
71
+ ...a.data()
72
+ };
73
+ }
74
+ else {
75
+ return a.data();
76
+ }
77
+ })), keepUnstableUntilFirst);
78
+ }
79
+ /**
80
+ * Retrieve the results of the query once.
81
+ */
82
+ get(options) {
83
+ return from(this.query.get(options)).pipe(keepUnstableUntilFirst);
84
+ }
85
+ }
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1ncm91cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wYXQvZmlyZXN0b3JlL2NvbGxlY3Rpb24tZ3JvdXAvY29sbGVjdGlvbi1ncm91cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkQsT0FBTyxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4QyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRy9ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFEOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sT0FBTywrQkFBK0I7SUFNdkI7SUFDQTtJQU5uQjs7O09BR0c7SUFDSCxZQUNtQixLQUFlLEVBQ2YsR0FBcUI7UUFEckIsVUFBSyxHQUFMLEtBQUssQ0FBVTtRQUNmLFFBQUcsR0FBSCxHQUFHLENBQWtCO0lBQUksQ0FBQztJQUU3Qzs7OztPQUlHO0lBQ0gsWUFBWSxDQUFDLE1BQTZCO1FBQ3hDLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDbEMsT0FBTyxVQUFVLENBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQ3ZFLHNCQUFzQixDQUN2QixDQUFDO1NBQ0g7UUFDRCxPQUFPLFVBQVUsQ0FBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQzthQUNqRSxJQUFJLENBQ0gsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDMUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUUsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFDdEMsc0JBQXNCLENBQ3ZCLENBQUM7SUFDTixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVSxDQUFDLE1BQTZCO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUVEOzs7T0FHRztJQUNILGVBQWUsQ0FBQyxNQUE2QjtRQUMzQyxNQUFNLGVBQWUsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwRCxNQUFNLHVCQUF1QixHQUFHLGFBQWEsQ0FBSSxJQUFJLENBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNsSCxPQUFPLHVCQUF1QixDQUFDLElBQUksQ0FDakMsc0JBQXNCLENBQ3ZCLENBQUM7SUFDSixDQUFDO0lBWUQsWUFBWSxDQUFtQixVQUF5QixFQUFFO1FBQ3hELE1BQU0sMkJBQTJCLEdBQUcsaUJBQWlCLENBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6RyxPQUFPLDJCQUEyQjthQUMvQixJQUFJLENBQ0gsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzFDLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRTtnQkFDbkIsT0FBTztvQkFDTCxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtvQkFDdkIsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFO2lCQUNnQixDQUFDO2FBQy9CO2lCQUFNO2dCQUNMLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ2pCO1FBQ0gsQ0FBQyxDQUFDLENBQUMsRUFDSCxzQkFBc0IsQ0FDdkIsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNILEdBQUcsQ0FBQyxPQUF1QztRQUN6QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDdkMsc0JBQXNCLENBQ3ZCLENBQUM7SUFDSixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBrZWVwVW5zdGFibGVVbnRpbEZpcnN0IH0gZnJvbSAnQGFuZ3VsYXIvZmlyZSc7XG5pbXBvcnQgZmlyZWJhc2UgZnJvbSAnZmlyZWJhc2UvY29tcGF0L2FwcCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgc2NhbiB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGRvY0NoYW5nZXMsIHNvcnRlZENoYW5nZXMgfSBmcm9tICcuLi9jb2xsZWN0aW9uL2NoYW5nZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVFdmVudHNBcnJheSB9IGZyb20gJy4uL2NvbGxlY3Rpb24vY29sbGVjdGlvbic7XG5pbXBvcnQgeyBBbmd1bGFyRmlyZXN0b3JlIH0gZnJvbSAnLi4vZmlyZXN0b3JlJztcbmltcG9ydCB7IERvY3VtZW50Q2hhbmdlQWN0aW9uLCBEb2N1bWVudENoYW5nZVR5cGUsIERvY3VtZW50RGF0YSwgUXVlcnkgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGZyb21Db2xsZWN0aW9uUmVmIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9mcm9tUmVmJztcblxuLyoqXG4gKiBBbmd1bGFyRmlyZXN0b3JlQ29sbGVjdGlvbkdyb3VwIHNlcnZpY2VcbiAqXG4gKiBUaGlzIGNsYXNzIGhvbGRzIGEgcmVmZXJlbmNlIHRvIGEgRmlyZXN0b3JlIENvbGxlY3Rpb24gR3JvdXAgUXVlcnkuXG4gKlxuICogVGhpcyBjbGFzcyB1c2VzIFN5bWJvbC5vYnNlcnZhYmxlIHRvIHRyYW5zZm9ybSBpbnRvIE9ic2VydmFibGUgdXNpbmcgT2JzZXJ2YWJsZS5mcm9tKCkuXG4gKlxuICogVGhpcyBjbGFzcyBpcyByYXJlbHkgdXNlZCBkaXJlY3RseSBhbmQgc2hvdWxkIGJlIGNyZWF0ZWQgZnJvbSB0aGUgQW5ndWxhckZpcmVzdG9yZSBzZXJ2aWNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogY29uc3QgY29sbGVjdGlvbkdyb3VwID0gZmlyZWJhc2UuZmlyZXN0b3JlLmNvbGxlY3Rpb25Hcm91cCgnc3RvY2tzJyk7XG4gKiBjb25zdCBxdWVyeSA9IGNvbGxlY3Rpb25SZWYud2hlcmUoJ3ByaWNlJywgJz4nLCAnMC4wMScpO1xuICogY29uc3QgZmFrZVN0b2NrID0gbmV3IEFuZ3VsYXJGaXJlc3RvcmVDb2xsZWN0aW9uR3JvdXA8U3RvY2s+KHF1ZXJ5LCBhZnMpO1xuICpcbiAqIC8vIFN1YnNjcmliZSB0byBjaGFuZ2VzIGFzIHNuYXBzaG90cy4gVGhpcyBwcm92aWRlcyB5b3UgZGF0YSB1cGRhdGVzIGFzIHdlbGwgYXMgZGVsdGEgdXBkYXRlcy5cbiAqIGZha2VTdG9jay52YWx1ZUNoYW5nZXMoKS5zdWJzY3JpYmUodmFsdWUgPT4gY29uc29sZS5sb2codmFsdWUpKTtcbiAqL1xuZXhwb3J0IGNsYXNzIEFuZ3VsYXJGaXJlc3RvcmVDb2xsZWN0aW9uR3JvdXA8VCA9IERvY3VtZW50RGF0YT4ge1xuICAvKipcbiAgICogVGhlIGNvbnN0cnVjdG9yIHRha2VzIGluIGEgQ29sbGVjdGlvbkdyb3VwUXVlcnkgdG8gcHJvdmlkZSB3cmFwcGVyIG1ldGhvZHNcbiAgICogZm9yIGRhdGEgb3BlcmF0aW9ucyBhbmQgZGF0YSBzdHJlYW1pbmcuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHF1ZXJ5OiBRdWVyeTxUPixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFmczogQW5ndWxhckZpcmVzdG9yZSkgeyB9XG5cbiAgLyoqXG4gICAqIExpc3RlbiB0byB0aGUgbGF0ZXN0IGNoYW5nZSBpbiB0aGUgc3RyZWFtLiBUaGlzIG1ldGhvZCByZXR1cm5zIGNoYW5nZXNcbiAgICogYXMgdGhleSBvY2N1ciBhbmQgdGhleSBhcmUgbm90IHNvcnRlZCBieSBxdWVyeSBvcmRlci4gVGhpcyBhbGxvd3MgeW91IHRvIGNvbnN0cnVjdFxuICAgKiB5b3VyIG93biBkYXRhIHN0cnVjdHVyZS5cbiAgICovXG4gIHN0YXRlQ2hhbmdlcyhldmVudHM/OiBEb2N1bWVudENoYW5nZVR5cGVbXSk6IE9ic2VydmFibGU8RG9jdW1lbnRDaGFuZ2VBY3Rpb248VD5bXT4ge1xuICAgIGlmICghZXZlbnRzIHx8IGV2ZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBkb2NDaGFuZ2VzPFQ+KHRoaXMucXVlcnksIHRoaXMuYWZzLnNjaGVkdWxlcnMub3V0c2lkZUFuZ3VsYXIpLnBpcGUoXG4gICAgICAgIGtlZXBVbnN0YWJsZVVudGlsRmlyc3RcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBkb2NDaGFuZ2VzPFQ+KHRoaXMucXVlcnksIHRoaXMuYWZzLnNjaGVkdWxlcnMub3V0c2lkZUFuZ3VsYXIpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKGFjdGlvbnMgPT4gYWN0aW9ucy5maWx0ZXIoY2hhbmdlID0+IGV2ZW50cy5pbmRleE9mKGNoYW5nZS50eXBlKSA+IC0xKSksXG4gICAgICAgIGZpbHRlcihjaGFuZ2VzID0+ICBjaGFuZ2VzLmxlbmd0aCA+IDApLFxuICAgICAgICBrZWVwVW5zdGFibGVVbnRpbEZpcnN0XG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHN0cmVhbSBvZiBjaGFuZ2VzIGFzIHRoZXkgb2NjdXIgaXQgdGltZS4gVGhpcyBtZXRob2QgaXMgc2ltaWxhciB0byBzdGF0ZUNoYW5nZXMoKVxuICAgKiBidXQgaXQgY29sbGVjdHMgZWFjaCBldmVudCBpbiBhbiBhcnJheSBvdmVyIHRpbWUuXG4gICAqL1xuICBhdWRpdFRyYWlsKGV2ZW50cz86IERvY3VtZW50Q2hhbmdlVHlwZVtdKTogT2JzZXJ2YWJsZTxEb2N1bWVudENoYW5nZUFjdGlvbjxUPltdPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVDaGFuZ2VzKGV2ZW50cykucGlwZShzY2FuKChjdXJyZW50LCBhY3Rpb24pID0+IFsuLi5jdXJyZW50LCAuLi5hY3Rpb25dLCBbXSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHN0cmVhbSBvZiBzeW5jaHJvbml6ZWQgY2hhbmdlcy4gVGhpcyBtZXRob2Qga2VlcHMgdGhlIGxvY2FsIGFycmF5IGluIHNvcnRlZFxuICAgKiBxdWVyeSBvcmRlci5cbiAgICovXG4gIHNuYXBzaG90Q2hhbmdlcyhldmVudHM/OiBEb2N1bWVudENoYW5nZVR5cGVbXSk6IE9ic2VydmFibGU8RG9jdW1lbnRDaGFuZ2VBY3Rpb248VD5bXT4ge1xuICAgIGNvbnN0IHZhbGlkYXRlZEV2ZW50cyA9IHZhbGlkYXRlRXZlbnRzQXJyYXkoZXZlbnRzKTtcbiAgICBjb25zdCBzY2hlZHVsZWRTb3J0ZWRDaGFuZ2VzJCA9IHNvcnRlZENoYW5nZXM8VD4odGhpcy5xdWVyeSwgdmFsaWRhdGVkRXZlbnRzLCB0aGlzLmFmcy5zY2hlZHVsZXJzLm91dHNpZGVBbmd1bGFyKTtcbiAgICByZXR1cm4gc2NoZWR1bGVkU29ydGVkQ2hhbmdlcyQucGlwZShcbiAgICAgIGtlZXBVbnN0YWJsZVVudGlsRmlyc3RcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbiB0byBhbGwgZG9jdW1lbnRzIGluIHRoZSBjb2xsZWN0aW9uIGFuZCBpdHMgcG9zc2libGUgcXVlcnkgYXMgYW4gT2JzZXJ2YWJsZS5cbiAgICpcbiAgICogSWYgdGhlIGBpZEZpZWxkYCBvcHRpb24gaXMgcHJvdmlkZWQsIGRvY3VtZW50IElEcyBhcmUgaW5jbHVkZWQgYW5kIG1hcHBlZCB0byB0aGVcbiAgICogcHJvdmlkZWQgYGlkRmllbGRgIHByb3BlcnR5IG5hbWUuXG4gICAqL1xuICB2YWx1ZUNoYW5nZXMoKTogT2JzZXJ2YWJsZTxUW10+O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHktcGF0dGVyblxuICB2YWx1ZUNoYW5nZXMoe30pOiBPYnNlcnZhYmxlPFRbXT47XG4gIHZhbHVlQ2hhbmdlczxLIGV4dGVuZHMgc3RyaW5nPihvcHRpb25zOiB7aWRGaWVsZDogS30pOiBPYnNlcnZhYmxlPChUICYgeyBbVCBpbiBLXTogc3RyaW5nIH0pW10+O1xuICB2YWx1ZUNoYW5nZXM8SyBleHRlbmRzIHN0cmluZz4ob3B0aW9uczoge2lkRmllbGQ/OiBLfSA9IHt9KTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICBjb25zdCBmcm9tQ29sbGVjdGlvblJlZlNjaGVkdWxlZCQgPSBmcm9tQ29sbGVjdGlvblJlZjxUPih0aGlzLnF1ZXJ5LCB0aGlzLmFmcy5zY2hlZHVsZXJzLm91dHNpZGVBbmd1bGFyKTtcbiAgICByZXR1cm4gZnJvbUNvbGxlY3Rpb25SZWZTY2hlZHVsZWQkXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKGFjdGlvbnMgPT4gYWN0aW9ucy5wYXlsb2FkLmRvY3MubWFwKGEgPT4ge1xuICAgICAgICAgIGlmIChvcHRpb25zLmlkRmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIFtvcHRpb25zLmlkRmllbGRdOiBhLmlkLFxuICAgICAgICAgICAgICAuLi5hLmRhdGEoKVxuICAgICAgICAgICAgfSBhcyBUICYgeyBbVCBpbiBLXTogc3RyaW5nIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhLmRhdGEoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKSxcbiAgICAgICAga2VlcFVuc3RhYmxlVW50aWxGaXJzdFxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgcmVzdWx0cyBvZiB0aGUgcXVlcnkgb25jZS5cbiAgICovXG4gIGdldChvcHRpb25zPzogZmlyZWJhc2UuZmlyZXN0b3JlLkdldE9wdGlvbnMpIHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLnF1ZXJ5LmdldChvcHRpb25zKSkucGlwZShcbiAgICAgIGtlZXBVbnN0YWJsZVVudGlsRmlyc3RcbiAgICApO1xuICB9XG5cbn1cbiJdfQ==
@@ -0,0 +1,87 @@
1
+ import { keepUnstableUntilFirst } from '@angular/fire';
2
+ import { from } from 'rxjs';
3
+ import { map } from 'rxjs/operators';
4
+ import { AngularFirestoreCollection } from '../collection/collection';
5
+ import { associateQuery } from '../firestore';
6
+ import { fromDocRef } from '../observable/fromRef';
7
+ /**
8
+ * AngularFirestoreDocument service
9
+ *
10
+ * This class creates a reference to a Firestore Document. A reference is provided in
11
+ * in the constructor. The class is generic which gives you type safety for data update
12
+ * methods and data streaming.
13
+ *
14
+ * This class uses Symbol.observable to transform into Observable using Observable.from().
15
+ *
16
+ * This class is rarely used directly and should be created from the AngularFirestore service.
17
+ *
18
+ * Example:
19
+ *
20
+ * const fakeStock = new AngularFirestoreDocument<Stock>(doc('stocks/FAKE'));
21
+ * await fakeStock.set({ name: 'FAKE', price: 0.01 });
22
+ * fakeStock.valueChanges().map(snap => {
23
+ * if(snap.exists) return snap.data();
24
+ * return null;
25
+ * }).subscribe(value => console.log(value));
26
+ * // OR! Transform using Observable.from() and the data is unwrapped for you
27
+ * Observable.from(fakeStock).subscribe(value => console.log(value));
28
+ */
29
+ export class AngularFirestoreDocument {
30
+ ref;
31
+ afs;
32
+ /**
33
+ * The constructor takes in a DocumentReference to provide wrapper methods
34
+ * for data operations, data streaming, and Symbol.observable.
35
+ */
36
+ constructor(ref, afs) {
37
+ this.ref = ref;
38
+ this.afs = afs;
39
+ }
40
+ /**
41
+ * Create or overwrite a single document.
42
+ */
43
+ set(data, options) {
44
+ return this.ref.set(data, options);
45
+ }
46
+ /**
47
+ * Update some fields of a document without overwriting the entire document.
48
+ */
49
+ update(data) {
50
+ return this.ref.update(data);
51
+ }
52
+ /**
53
+ * Delete a document.
54
+ */
55
+ delete() {
56
+ return this.ref.delete();
57
+ }
58
+ /**
59
+ * Create a reference to a sub-collection given a path and an optional query
60
+ * function.
61
+ */
62
+ collection(path, queryFn) {
63
+ const collectionRef = this.ref.collection(path);
64
+ const { ref, query } = associateQuery(collectionRef, queryFn);
65
+ return new AngularFirestoreCollection(ref, query, this.afs);
66
+ }
67
+ /**
68
+ * Listen to snapshot updates from the document.
69
+ */
70
+ snapshotChanges() {
71
+ const scheduledFromDocRef$ = fromDocRef(this.ref, this.afs.schedulers.outsideAngular);
72
+ return scheduledFromDocRef$.pipe(keepUnstableUntilFirst);
73
+ }
74
+ valueChanges(options = {}) {
75
+ return this.snapshotChanges().pipe(map(({ payload }) => options.idField ? {
76
+ ...payload.data(),
77
+ ...{ [options.idField]: payload.id }
78
+ } : payload.data()));
79
+ }
80
+ /**
81
+ * Retrieve the document once.
82
+ */
83
+ get(options) {
84
+ return from(this.ref.get(options)).pipe(keepUnstableUntilFirst);
85
+ }
86
+ }
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29tcGF0L2ZpcmVzdG9yZS9kb2N1bWVudC9kb2N1bWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkQsT0FBTyxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEUsT0FBTyxFQUFvQixjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRW5EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFNLE9BQU8sd0JBQXdCO0lBTWhCO0lBQW1DO0lBSnREOzs7T0FHRztJQUNILFlBQW1CLEdBQXlCLEVBQVUsR0FBcUI7UUFBeEQsUUFBRyxHQUFILEdBQUcsQ0FBc0I7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFrQjtJQUFJLENBQUM7SUFFaEY7O09BRUc7SUFDSCxHQUFHLENBQUMsSUFBTyxFQUFFLE9BQW9CO1FBQy9CLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxJQUFnQjtRQUNyQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILFVBQVUsQ0FBbUIsSUFBWSxFQUFFLE9BQWlCO1FBQzFELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBOEMsQ0FBQztRQUM3RixNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLGNBQWMsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUQsT0FBTyxJQUFJLDBCQUEwQixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWU7UUFDYixNQUFNLG9CQUFvQixHQUFHLFVBQVUsQ0FBSSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3pGLE9BQU8sb0JBQW9CLENBQUMsSUFBSSxDQUM5QixzQkFBc0IsQ0FDdkIsQ0FBQztJQUNKLENBQUM7SUFVRCxZQUFZLENBQW1CLFVBQTJCLEVBQUU7UUFDMUQsT0FBTyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsSUFBSSxDQUNoQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FDbEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDaEIsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQ2pCLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFO1NBQ1QsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUMvQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxHQUFHLENBQUMsT0FBdUM7UUFDekMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3JDLHNCQUFzQixDQUN2QixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsga2VlcFVuc3RhYmxlVW50aWxGaXJzdCB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUnO1xuaW1wb3J0IGZpcmViYXNlIGZyb20gJ2ZpcmViYXNlL2NvbXBhdC9hcHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQW5ndWxhckZpcmVzdG9yZUNvbGxlY3Rpb24gfSBmcm9tICcuLi9jb2xsZWN0aW9uL2NvbGxlY3Rpb24nO1xuaW1wb3J0IHsgQW5ndWxhckZpcmVzdG9yZSwgYXNzb2NpYXRlUXVlcnkgfSBmcm9tICcuLi9maXJlc3RvcmUnO1xuaW1wb3J0IHsgQWN0aW9uLCBEb2N1bWVudERhdGEsIERvY3VtZW50UmVmZXJlbmNlLCBEb2N1bWVudFNuYXBzaG90LCBRdWVyeUZuLCBTZXRPcHRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBmcm9tRG9jUmVmIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9mcm9tUmVmJztcblxuLyoqXG4gKiBBbmd1bGFyRmlyZXN0b3JlRG9jdW1lbnQgc2VydmljZVxuICpcbiAqIFRoaXMgY2xhc3MgY3JlYXRlcyBhIHJlZmVyZW5jZSB0byBhIEZpcmVzdG9yZSBEb2N1bWVudC4gQSByZWZlcmVuY2UgaXMgcHJvdmlkZWQgaW5cbiAqIGluIHRoZSBjb25zdHJ1Y3Rvci4gVGhlIGNsYXNzIGlzIGdlbmVyaWMgd2hpY2ggZ2l2ZXMgeW91IHR5cGUgc2FmZXR5IGZvciBkYXRhIHVwZGF0ZVxuICogbWV0aG9kcyBhbmQgZGF0YSBzdHJlYW1pbmcuXG4gKlxuICogVGhpcyBjbGFzcyB1c2VzIFN5bWJvbC5vYnNlcnZhYmxlIHRvIHRyYW5zZm9ybSBpbnRvIE9ic2VydmFibGUgdXNpbmcgT2JzZXJ2YWJsZS5mcm9tKCkuXG4gKlxuICogVGhpcyBjbGFzcyBpcyByYXJlbHkgdXNlZCBkaXJlY3RseSBhbmQgc2hvdWxkIGJlIGNyZWF0ZWQgZnJvbSB0aGUgQW5ndWxhckZpcmVzdG9yZSBzZXJ2aWNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogY29uc3QgZmFrZVN0b2NrID0gbmV3IEFuZ3VsYXJGaXJlc3RvcmVEb2N1bWVudDxTdG9jaz4oZG9jKCdzdG9ja3MvRkFLRScpKTtcbiAqIGF3YWl0IGZha2VTdG9jay5zZXQoeyBuYW1lOiAnRkFLRScsIHByaWNlOiAwLjAxIH0pO1xuICogZmFrZVN0b2NrLnZhbHVlQ2hhbmdlcygpLm1hcChzbmFwID0+IHtcbiAqICAgaWYoc25hcC5leGlzdHMpIHJldHVybiBzbmFwLmRhdGEoKTtcbiAqICAgcmV0dXJuIG51bGw7XG4gKiB9KS5zdWJzY3JpYmUodmFsdWUgPT4gY29uc29sZS5sb2codmFsdWUpKTtcbiAqIC8vIE9SISBUcmFuc2Zvcm0gdXNpbmcgT2JzZXJ2YWJsZS5mcm9tKCkgYW5kIHRoZSBkYXRhIGlzIHVud3JhcHBlZCBmb3IgeW91XG4gKiBPYnNlcnZhYmxlLmZyb20oZmFrZVN0b2NrKS5zdWJzY3JpYmUodmFsdWUgPT4gY29uc29sZS5sb2codmFsdWUpKTtcbiAqL1xuZXhwb3J0IGNsYXNzIEFuZ3VsYXJGaXJlc3RvcmVEb2N1bWVudDxUID0gRG9jdW1lbnREYXRhPiB7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25zdHJ1Y3RvciB0YWtlcyBpbiBhIERvY3VtZW50UmVmZXJlbmNlIHRvIHByb3ZpZGUgd3JhcHBlciBtZXRob2RzXG4gICAqIGZvciBkYXRhIG9wZXJhdGlvbnMsIGRhdGEgc3RyZWFtaW5nLCBhbmQgU3ltYm9sLm9ic2VydmFibGUuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVmOiBEb2N1bWVudFJlZmVyZW5jZTxUPiwgcHJpdmF0ZSBhZnM6IEFuZ3VsYXJGaXJlc3RvcmUpIHsgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgb3Igb3ZlcndyaXRlIGEgc2luZ2xlIGRvY3VtZW50LlxuICAgKi9cbiAgc2V0KGRhdGE6IFQsIG9wdGlvbnM/OiBTZXRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMucmVmLnNldChkYXRhLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgc29tZSBmaWVsZHMgb2YgYSBkb2N1bWVudCB3aXRob3V0IG92ZXJ3cml0aW5nIHRoZSBlbnRpcmUgZG9jdW1lbnQuXG4gICAqL1xuICB1cGRhdGUoZGF0YTogUGFydGlhbDxUPik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnJlZi51cGRhdGUoZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGEgZG9jdW1lbnQuXG4gICAqL1xuICBkZWxldGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMucmVmLmRlbGV0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHJlZmVyZW5jZSB0byBhIHN1Yi1jb2xsZWN0aW9uIGdpdmVuIGEgcGF0aCBhbmQgYW4gb3B0aW9uYWwgcXVlcnlcbiAgICogZnVuY3Rpb24uXG4gICAqL1xuICBjb2xsZWN0aW9uPFIgPSBEb2N1bWVudERhdGE+KHBhdGg6IHN0cmluZywgcXVlcnlGbj86IFF1ZXJ5Rm4pOiBBbmd1bGFyRmlyZXN0b3JlQ29sbGVjdGlvbjxSPiB7XG4gICAgY29uc3QgY29sbGVjdGlvblJlZiA9IHRoaXMucmVmLmNvbGxlY3Rpb24ocGF0aCkgYXMgZmlyZWJhc2UuZmlyZXN0b3JlLkNvbGxlY3Rpb25SZWZlcmVuY2U8Uj47XG4gICAgY29uc3QgeyByZWYsIHF1ZXJ5IH0gPSBhc3NvY2lhdGVRdWVyeShjb2xsZWN0aW9uUmVmLCBxdWVyeUZuKTtcbiAgICByZXR1cm4gbmV3IEFuZ3VsYXJGaXJlc3RvcmVDb2xsZWN0aW9uKHJlZiwgcXVlcnksIHRoaXMuYWZzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gc25hcHNob3QgdXBkYXRlcyBmcm9tIHRoZSBkb2N1bWVudC5cbiAgICovXG4gIHNuYXBzaG90Q2hhbmdlcygpOiBPYnNlcnZhYmxlPEFjdGlvbjxEb2N1bWVudFNuYXBzaG90PFQ+Pj4ge1xuICAgIGNvbnN0IHNjaGVkdWxlZEZyb21Eb2NSZWYkID0gZnJvbURvY1JlZjxUPih0aGlzLnJlZiwgdGhpcy5hZnMuc2NoZWR1bGVycy5vdXRzaWRlQW5ndWxhcik7XG4gICAgcmV0dXJuIHNjaGVkdWxlZEZyb21Eb2NSZWYkLnBpcGUoXG4gICAgICBrZWVwVW5zdGFibGVVbnRpbEZpcnN0XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gdW53cmFwcGVkIHNuYXBzaG90IHVwZGF0ZXMgZnJvbSB0aGUgZG9jdW1lbnQuXG4gICAqXG4gICAqIElmIHRoZSBgaWRGaWVsZGAgb3B0aW9uIGlzIHByb3ZpZGVkLCBkb2N1bWVudCBJRHMgYXJlIGluY2x1ZGVkIGFuZCBtYXBwZWQgdG8gdGhlXG4gICAqIHByb3ZpZGVkIGBpZEZpZWxkYCBwcm9wZXJ0eSBuYW1lLlxuICAgKi9cbiAgdmFsdWVDaGFuZ2VzKG9wdGlvbnM/OiB1bmtub3duKTogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPjtcbiAgdmFsdWVDaGFuZ2VzPEsgZXh0ZW5kcyBzdHJpbmc+KG9wdGlvbnM6IHsgaWRGaWVsZDogSyB9KTogT2JzZXJ2YWJsZTwoVCAmIHsgW1QgaW4gS106IHN0cmluZyB9KSB8IHVuZGVmaW5lZD47XG4gIHZhbHVlQ2hhbmdlczxLIGV4dGVuZHMgc3RyaW5nPihvcHRpb25zOiB7IGlkRmllbGQ/OiBLIH0gPSB7fSk6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLnNuYXBzaG90Q2hhbmdlcygpLnBpcGUoXG4gICAgICBtYXAoKHsgcGF5bG9hZCB9KSA9PlxuICAgICAgICBvcHRpb25zLmlkRmllbGQgPyB7XG4gICAgICAgICAgLi4ucGF5bG9hZC5kYXRhKCksXG4gICAgICAgICAgLi4ueyBbb3B0aW9ucy5pZEZpZWxkXTogcGF5bG9hZC5pZCB9XG4gICAgICAgIH0gYXMgVCAmIHsgW1QgaW4gS106IHN0cmluZyB9IDogcGF5bG9hZC5kYXRhKClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBkb2N1bWVudCBvbmNlLlxuICAgKi9cbiAgZ2V0KG9wdGlvbnM/OiBmaXJlYmFzZS5maXJlc3RvcmUuR2V0T3B0aW9ucykge1xuICAgIHJldHVybiBmcm9tKHRoaXMucmVmLmdldChvcHRpb25zKSkucGlwZShcbiAgICAgIGtlZXBVbnN0YWJsZVVudGlsRmlyc3QsXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,257 @@
1
+ import { isPlatformServer } from '@angular/common';
2
+ import { Inject, Injectable, InjectionToken, NgZone, Optional, PLATFORM_ID } from '@angular/core';
3
+ import { ɵAngularFireSchedulers } from '@angular/fire';
4
+ import { AppCheckInstances } from '@angular/fire/app-check';
5
+ import { FIREBASE_APP_NAME, FIREBASE_OPTIONS, ɵcacheInstance, ɵfirebaseAppFactory } from '@angular/fire/compat';
6
+ import { SETTINGS as AUTH_SETTINGS, AngularFireAuth, LANGUAGE_CODE, PERSISTENCE, TENANT_ID, USE_EMULATOR as USE_AUTH_EMULATOR, USE_DEVICE_LANGUAGE, ɵauthFactory, } from '@angular/fire/compat/auth';
7
+ import { from, of } from 'rxjs';
8
+ import { AngularFirestoreCollection } from './collection/collection';
9
+ import { AngularFirestoreCollectionGroup } from './collection-group/collection-group';
10
+ import { AngularFirestoreDocument } from './document/document';
11
+ import 'firebase/compat/auth';
12
+ import 'firebase/compat/firestore';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "@angular/fire";
15
+ import * as i2 from "@angular/fire/compat/auth";
16
+ import * as i3 from "@angular/fire/app-check";
17
+ /**
18
+ * The value of this token determines whether or not the firestore will have persistance enabled
19
+ */
20
+ export const ENABLE_PERSISTENCE = new InjectionToken('angularfire2.enableFirestorePersistence');
21
+ export const PERSISTENCE_SETTINGS = new InjectionToken('angularfire2.firestore.persistenceSettings');
22
+ export const SETTINGS = new InjectionToken('angularfire2.firestore.settings');
23
+ export const USE_EMULATOR = new InjectionToken('angularfire2.firestore.use-emulator');
24
+ /**
25
+ * A utility methods for associating a collection reference with
26
+ * a query.
27
+ *
28
+ * @param collectionRef - A collection reference to query
29
+ * @param queryFn - The callback to create a query
30
+ *
31
+ * Example:
32
+ * const { query, ref } = associateQuery(docRef.collection('items'), ref => {
33
+ * return ref.where('age', '<', 200);
34
+ * });
35
+ */
36
+ export function associateQuery(collectionRef, queryFn = ref => ref) {
37
+ const query = queryFn(collectionRef);
38
+ const ref = collectionRef;
39
+ return { query, ref };
40
+ }
41
+ /**
42
+ * AngularFirestore Service
43
+ *
44
+ * This service is the main entry point for this feature module. It provides
45
+ * an API for creating Collection and Reference services. These services can
46
+ * then be used to do data updates and observable streams of the data.
47
+ *
48
+ * Example:
49
+ *
50
+ * import { Component } from '@angular/core';
51
+ * import { AngularFirestore, AngularFirestoreCollection, AngularFirestoreDocument } from '@angular/fire/firestore';
52
+ * import { Observable } from 'rxjs/Observable';
53
+ * import { from } from 'rxjs/observable';
54
+ *
55
+ * @Component({
56
+ * selector: 'app-my-component',
57
+ * template: `
58
+ * <h2>Items for {{ (profile | async)?.name }}
59
+ * <ul>
60
+ * <li *ngFor="let item of items | async">{{ item.name }}</li>
61
+ * </ul>
62
+ * <div class="control-input">
63
+ * <input type="text" #itemname />
64
+ * <button (click)="addItem(itemname.value)">Add Item</button>
65
+ * </div>
66
+ * `
67
+ * })
68
+ * export class MyComponent implements OnInit {
69
+ *
70
+ * // services for data operations and data streaming
71
+ * private readonly itemsRef: AngularFirestoreCollection<Item>;
72
+ * private readonly profileRef: AngularFirestoreDocument<Profile>;
73
+ *
74
+ * // observables for template
75
+ * items: Observable<Item[]>;
76
+ * profile: Observable<Profile>;
77
+ *
78
+ * // inject main service
79
+ * constructor(private readonly afs: AngularFirestore) {}
80
+ *
81
+ * ngOnInit() {
82
+ * this.itemsRef = afs.collection('items', ref => ref.where('user', '==', 'davideast').limit(10));
83
+ * this.items = this.itemsRef.valueChanges().map(snap => snap.docs.map(data => doc.data()));
84
+ * // this.items = from(this.itemsRef); // you can also do this with no mapping
85
+ *
86
+ * this.profileRef = afs.doc('users/davideast');
87
+ * this.profile = this.profileRef.valueChanges();
88
+ * }
89
+ *
90
+ * addItem(name: string) {
91
+ * const user = 'davideast';
92
+ * this.itemsRef.add({ name, user });
93
+ * }
94
+ * }
95
+ */
96
+ export class AngularFirestore {
97
+ schedulers;
98
+ firestore;
99
+ persistenceEnabled$;
100
+ /**
101
+ * Each Feature of AngularFire has a FirebaseApp injected. This way we
102
+ * don't rely on the main Firebase App instance and we can create named
103
+ * apps and use multiple apps.
104
+ */
105
+ constructor(options, name, shouldEnablePersistence, settings,
106
+ // eslint-disable-next-line @typescript-eslint/ban-types
107
+ platformId, zone, schedulers, persistenceSettings, _useEmulator, auth, useAuthEmulator, authSettings, // can't use firebase.auth.AuthSettings here
108
+ tenantId, languageCode, useDeviceLanguage, persistence, _appCheckInstances) {
109
+ this.schedulers = schedulers;
110
+ const app = ɵfirebaseAppFactory(options, zone, name);
111
+ const useEmulator = _useEmulator;
112
+ if (auth) {
113
+ ɵauthFactory(app, zone, useAuthEmulator, tenantId, languageCode, useDeviceLanguage, authSettings, persistence);
114
+ }
115
+ [this.firestore, this.persistenceEnabled$] = ɵcacheInstance(`${app.name}.firestore`, 'AngularFirestore', app.name, () => {
116
+ const firestore = zone.runOutsideAngular(() => app.firestore());
117
+ if (settings) {
118
+ firestore.settings(settings);
119
+ }
120
+ if (useEmulator) {
121
+ firestore.useEmulator(...useEmulator);
122
+ }
123
+ if (shouldEnablePersistence && !isPlatformServer(platformId)) {
124
+ // We need to try/catch here because not all enablePersistence() failures are caught
125
+ // https://github.com/firebase/firebase-js-sdk/issues/608
126
+ const enablePersistence = () => {
127
+ try {
128
+ return from(firestore.enablePersistence(persistenceSettings || undefined).then(() => true, () => false));
129
+ }
130
+ catch (e) {
131
+ if (typeof console !== 'undefined') {
132
+ console.warn(e);
133
+ }
134
+ return of(false);
135
+ }
136
+ };
137
+ return [firestore, zone.runOutsideAngular(enablePersistence)];
138
+ }
139
+ else {
140
+ return [firestore, of(false)];
141
+ }
142
+ }, [settings, useEmulator, shouldEnablePersistence]);
143
+ }
144
+ collection(pathOrRef, queryFn) {
145
+ let collectionRef;
146
+ if (typeof pathOrRef === 'string') {
147
+ collectionRef = this.firestore.collection(pathOrRef);
148
+ }
149
+ else {
150
+ collectionRef = pathOrRef;
151
+ }
152
+ const { ref, query } = associateQuery(collectionRef, queryFn);
153
+ const refInZone = this.schedulers.ngZone.run(() => ref);
154
+ return new AngularFirestoreCollection(refInZone, query, this);
155
+ }
156
+ /**
157
+ * Create a reference to a Firestore Collection Group based on a collectionId
158
+ * and an optional query function to narrow the result
159
+ * set.
160
+ */
161
+ collectionGroup(collectionId, queryGroupFn) {
162
+ const queryFn = queryGroupFn || (ref => ref);
163
+ const collectionGroup = this.firestore.collectionGroup(collectionId);
164
+ return new AngularFirestoreCollectionGroup(queryFn(collectionGroup), this);
165
+ }
166
+ doc(pathOrRef) {
167
+ let ref;
168
+ if (typeof pathOrRef === 'string') {
169
+ ref = this.firestore.doc(pathOrRef);
170
+ }
171
+ else {
172
+ ref = pathOrRef;
173
+ }
174
+ const refInZone = this.schedulers.ngZone.run(() => ref);
175
+ return new AngularFirestoreDocument(refInZone, this);
176
+ }
177
+ /**
178
+ * Returns a generated Firestore Document Id.
179
+ */
180
+ createId() {
181
+ return this.firestore.collection('_').doc().id;
182
+ }
183
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: AngularFirestore, deps: [{ token: FIREBASE_OPTIONS }, { token: FIREBASE_APP_NAME, optional: true }, { token: ENABLE_PERSISTENCE, optional: true }, { token: SETTINGS, optional: true }, { token: PLATFORM_ID }, { token: i0.NgZone }, { token: i1.ɵAngularFireSchedulers }, { token: PERSISTENCE_SETTINGS, optional: true }, { token: USE_EMULATOR, optional: true }, { token: i2.AngularFireAuth, optional: true }, { token: USE_AUTH_EMULATOR, optional: true }, { token: AUTH_SETTINGS, optional: true }, { token: TENANT_ID, optional: true }, { token: LANGUAGE_CODE, optional: true }, { token: USE_DEVICE_LANGUAGE, optional: true }, { token: PERSISTENCE, optional: true }, { token: i3.AppCheckInstances, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
184
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: AngularFirestore, providedIn: 'any' });
185
+ }
186
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: AngularFirestore, decorators: [{
187
+ type: Injectable,
188
+ args: [{
189
+ providedIn: 'any'
190
+ }]
191
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
192
+ type: Inject,
193
+ args: [FIREBASE_OPTIONS]
194
+ }] }, { type: undefined, decorators: [{
195
+ type: Optional
196
+ }, {
197
+ type: Inject,
198
+ args: [FIREBASE_APP_NAME]
199
+ }] }, { type: undefined, decorators: [{
200
+ type: Optional
201
+ }, {
202
+ type: Inject,
203
+ args: [ENABLE_PERSISTENCE]
204
+ }] }, { type: undefined, decorators: [{
205
+ type: Optional
206
+ }, {
207
+ type: Inject,
208
+ args: [SETTINGS]
209
+ }] }, { type: Object, decorators: [{
210
+ type: Inject,
211
+ args: [PLATFORM_ID]
212
+ }] }, { type: i0.NgZone }, { type: i1.ɵAngularFireSchedulers }, { type: undefined, decorators: [{
213
+ type: Optional
214
+ }, {
215
+ type: Inject,
216
+ args: [PERSISTENCE_SETTINGS]
217
+ }] }, { type: undefined, decorators: [{
218
+ type: Optional
219
+ }, {
220
+ type: Inject,
221
+ args: [USE_EMULATOR]
222
+ }] }, { type: i2.AngularFireAuth, decorators: [{
223
+ type: Optional
224
+ }] }, { type: undefined, decorators: [{
225
+ type: Optional
226
+ }, {
227
+ type: Inject,
228
+ args: [USE_AUTH_EMULATOR]
229
+ }] }, { type: undefined, decorators: [{
230
+ type: Optional
231
+ }, {
232
+ type: Inject,
233
+ args: [AUTH_SETTINGS]
234
+ }] }, { type: undefined, decorators: [{
235
+ type: Optional
236
+ }, {
237
+ type: Inject,
238
+ args: [TENANT_ID]
239
+ }] }, { type: undefined, decorators: [{
240
+ type: Optional
241
+ }, {
242
+ type: Inject,
243
+ args: [LANGUAGE_CODE]
244
+ }] }, { type: undefined, decorators: [{
245
+ type: Optional
246
+ }, {
247
+ type: Inject,
248
+ args: [USE_DEVICE_LANGUAGE]
249
+ }] }, { type: undefined, decorators: [{
250
+ type: Optional
251
+ }, {
252
+ type: Inject,
253
+ args: [PERSISTENCE]
254
+ }] }, { type: i3.AppCheckInstances, decorators: [{
255
+ type: Optional
256
+ }] }]; } });
257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBhdC9maXJlc3RvcmUvZmlyZXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hILE9BQU8sRUFDTCxRQUFRLElBQUksYUFBYSxFQUN6QixlQUFlLEVBQ2YsYUFBYSxFQUNiLFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxJQUFJLGlCQUFpQixFQUNqQyxtQkFBbUIsRUFDbkIsWUFBWSxHQUNiLE1BQU0sMkJBQTJCLENBQUM7QUFHbkMsT0FBTyxFQUFjLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckUsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFXL0QsT0FBTyxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLDJCQUEyQixDQUFDOzs7OztBQUVuQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksY0FBYyxDQUFVLHlDQUF5QyxDQUFDLENBQUM7QUFDekcsTUFB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UTs7MEJBRTNCLE1BQU07MkJBQUMsV0FBVzs7MEJBR2xCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsb0JBQW9COzswQkFDdkMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxZQUFZOzswQkFDL0IsUUFBUTs7MEJBQ1IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUNwQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGFBQWE7OzBCQUNoQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLFNBQVM7OzBCQUM1QixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGFBQWE7OzBCQUNoQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLG1CQUFtQjs7MEJBQ3RDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsV0FBVzs7MEJBQzlCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYXRmb3JtU2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE5nWm9uZSwgT3B0aW9uYWwsIFBMQVRGT1JNX0lEIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyDJtUFuZ3VsYXJGaXJlU2NoZWR1bGVycyB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUnO1xuaW1wb3J0IHsgQXBwQ2hlY2tJbnN0YW5jZXMgfSBmcm9tICdAYW5ndWxhci9maXJlL2FwcC1jaGVjayc7XG5pbXBvcnQgeyBGSVJFQkFTRV9BUFBfTkFNRSwgRklSRUJBU0VfT1BUSU9OUywgybVjYWNoZUluc3RhbmNlLCDJtWZpcmViYXNlQXBwRmFjdG9yeSB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvY29tcGF0JztcbmltcG9ydCB7XG4gIFNFVFRJTkdTIGFzIEFVVEhfU0VUVElOR1MsXG4gIEFuZ3VsYXJGaXJlQXV0aCxcbiAgTEFOR1VBR0VfQ09ERSxcbiAgUEVSU0lTVEVOQ0UsXG4gIFRFTkFOVF9JRCxcbiAgVVNFX0VNVUxBVE9SIGFzIFVTRV9BVVRIX0VNVUxBVE9SLFxuICBVU0VfREVWSUNFX0xBTkdVQUdFLFxuICDJtWF1dGhGYWN0b3J5LFxufSBmcm9tICdAYW5ndWxhci9maXJlL2NvbXBhdC9hdXRoJztcbmltcG9ydCB7IEZpcmViYXNlT3B0aW9ucyB9IGZyb20gJ2ZpcmViYXNlL2FwcCc7XG5pbXBvcnQgZmlyZWJhc2UgZnJvbSAnZmlyZWJhc2UvY29tcGF0L2FwcCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQW5ndWxhckZpcmVzdG9yZUNvbGxlY3Rpb24gfSBmcm9tICcuL2NvbGxlY3Rpb24vY29sbGVjdGlvbic7XG5pbXBvcnQgeyBBbmd1bGFyRmlyZXN0b3JlQ29sbGVjdGlvbkdyb3VwIH0gZnJvbSAnLi9jb2xsZWN0aW9uLWdyb3VwL2NvbGxlY3Rpb24tZ3JvdXAnO1xuaW1wb3J0IHsgQW5ndWxhckZpcmVzdG9yZURvY3VtZW50IH0gZnJvbSAnLi9kb2N1bWVudC9kb2N1bWVudCc7XG5pbXBvcnQge1xuICBBc3NvY2lhdGVkUmVmZXJlbmNlLFxuICBDb2xsZWN0aW9uUmVmZXJlbmNlLFxuICBEb2N1bWVudFJlZmVyZW5jZSxcbiAgUGVyc2lzdGVuY2VTZXR0aW5ncyxcbiAgUXVlcnksXG4gIFF1ZXJ5Rm4sXG4gIFF1ZXJ5R3JvdXBGbixcbiAgU2V0dGluZ3Ncbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCAnZmlyZWJhc2UvY29tcGF0L2F1dGgnO1xuaW1wb3J0ICdmaXJlYmFzZS9jb21wYXQvZmlyZXN0b3JlJztcblxuLyoqXG4gKiBUaGUgdmFsdWUgb2YgdGhpcyB0b2tlbiBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZSBmaXJlc3RvcmUgd2lsbCBoYXZlIHBlcnNpc3RhbmNlIGVuYWJsZWRcbiAqL1xuZXhwb3J0IGNvbnN0IEVOQUJMRV9QRVJTSVNURU5DRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxib29sZWFuPignYW5ndWxhcmZpcmUyLmVuYWJsZUZpcmVzdG9yZVBlcnNpc3RlbmNlJyk7XG5leHBvcnQgY29uc3QgUEVSU0lTVEVOQ0VfU0VUVElOR1MgPSBuZXcgSW5qZWN0aW9uVG9rZW48UGVyc2lzdGVuY2VTZXR0aW5ncyB8IHVuZGVmaW5lZD4oJ2FuZ3VsYXJmaXJlMi5maXJlc3RvcmUucGVyc2lzdGVuY2VTZXR0aW5ncycpO1xuZXhwb3J0IGNvbnN0IFNFVFRJTkdTID0gbmV3IEluamVjdGlvblRva2VuPFNldHRpbmdzPignYW5ndWxhcmZpcmUyLmZpcmVzdG9yZS5zZXR0aW5ncycpO1xuXG50eXBlIFVzZUVtdWxhdG9yQXJndW1lbnRzID0gUGFyYW1ldGVyczxmaXJlYmFzZS5maXJlc3RvcmUuRmlyZXN0b3JlWyd1c2VFbXVsYXRvciddPjtcbmV4cG9ydCBjb25zdCBVU0VfRU1VTEFUT1IgPSBuZXcgSW5qZWN0aW9uVG9rZW48VXNlRW11bGF0b3JBcmd1bWVudHM+KCdhbmd1bGFyZmlyZTIuZmlyZXN0b3JlLnVzZS1lbXVsYXRvcicpO1xuXG4vKipcbiAqIEEgdXRpbGl0eSBtZXRob2RzIGZvciBhc3NvY2lhdGluZyBhIGNvbGxlY3Rpb24gcmVmZXJlbmNlIHdpdGhcbiAqIGEgcXVlcnkuXG4gKlxuICogQHBhcmFtIGNvbGxlY3Rpb25SZWYgLSBBIGNvbGxlY3Rpb24gcmVmZXJlbmNlIHRvIHF1ZXJ5XG4gKiBAcGFyYW0gcXVlcnlGbiAtIFRoZSBjYWxsYmFjayB0byBjcmVhdGUgYSBxdWVyeVxuICpcbiAqIEV4YW1wbGU6XG4gKiBjb25zdCB7IHF1ZXJ5LCByZWYgfSA9IGFzc29jaWF0ZVF1ZXJ5KGRvY1JlZi5jb2xsZWN0aW9uKCdpdGVtcycpLCByZWYgPT4ge1xuICogIHJldHVybiByZWYud2hlcmUoJ2FnZScsICc8JywgMjAwKTtcbiAqIH0pO1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzb2NpYXRlUXVlcnk8VD4oY29sbGVjdGlvblJlZjogQ29sbGVjdGlvblJlZmVyZW5jZTxUPiwgcXVlcnlGbiA9IHJlZiA9PiByZWYpOiBBc3NvY2lhdGVkUmVmZXJlbmNlPFQ+IHtcbiAgY29uc3QgcXVlcnkgPSBxdWVyeUZuKGNvbGxlY3Rpb25SZWYpO1xuICBjb25zdCByZWYgPSBjb2xsZWN0aW9uUmVmO1xuICByZXR1cm4geyBxdWVyeSwgcmVmIH07XG59XG5cbi8qKlxuICogQW5ndWxhckZpcmVzdG9yZSBTZXJ2aWNlXG4gKlxuICogVGhpcyBzZXJ2aWNlIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGlzIGZlYXR1cmUgbW9kdWxlLiBJdCBwcm92aWRlc1xuICogYW4gQVBJIGZvciBjcmVhdGluZyBDb2xsZWN0aW9uIGFuZCBSZWZlcmVuY2Ugc2VydmljZXMuIFRoZXNlIHNlcnZpY2VzIGNhblxuICogdGhlbiBiZSB1c2VkIHRvIGRvIGRhdGEgdXBkYXRlcyBhbmQgb2JzZXJ2YWJsZSBzdHJlYW1zIG9mIHRoZSBkYXRhLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKiBpbXBvcnQgeyBBbmd1bGFyRmlyZXN0b3JlLCBBbmd1bGFyRmlyZXN0b3JlQ29sbGVjdGlvbiwgQW5ndWxhckZpcmVzdG9yZURvY3VtZW50IH0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9maXJlc3RvcmUnO1xuICogaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMvT2JzZXJ2YWJsZSc7XG4gKiBpbXBvcnQgeyBmcm9tIH0gZnJvbSAncnhqcy9vYnNlcnZhYmxlJztcbiAqXG4gKiBAQ29tcG9uZW50KHtcbiAqICAgc2VsZWN0b3I6ICdhcHAtbXktY29tcG9uZW50JyxcbiAqICAgdGVtcGxhdGU6IGBcbiAqICAgIDxoMj5JdGVtcyBmb3Ige3sgKHByb2ZpbGUgfCBhc3luYyk/Lm5hbWUgfX1cbiAqICAgIDx1bD5cbiAqICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtcyB8IGFzeW5jXCI+e3sgaXRlbS5uYW1lIH19PC9saT5cbiAqICAgIDwvdWw+XG4gKiAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1pbnB1dFwiPlxuICogICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgI2l0ZW1uYW1lIC8+XG4gKiAgICAgICA8YnV0dG9uIChjbGljayk9XCJhZGRJdGVtKGl0ZW1uYW1lLnZhbHVlKVwiPkFkZCBJdGVtPC9idXR0b24+XG4gKiAgICA8L2Rpdj5cbiAqICAgYFxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBNeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gKlxuICogICAvLyBzZXJ2aWNlcyBmb3IgZGF0YSBvcGVyYXRpb25zIGFuZCBkYXRhIHN0cmVhbWluZ1xuICogICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1zUmVmOiBBbmd1bGFyRmlyZXN0b3JlQ29sbGVjdGlvbjxJdGVtPjtcbiAqICAgcHJpdmF0ZSByZWFkb25seSBwcm9maWxlUmVmOiBBbmd1bGFyRmlyZXN0b3JlRG9jdW1lbnQ8UHJvZmlsZT47XG4gKlxuICogICAvLyBvYnNlcnZhYmxlcyBmb3IgdGVtcGxhdGVcbiAqICAgaXRlbXM6IE9ic2VydmFibGU8SXRlbVtdPjtcbiAqICAgcHJvZmlsZTogT2JzZXJ2YWJsZTxQcm9maWxlPjtcbiAqXG4gKiAgIC8vIGluamVjdCBtYWluIHNlcnZpY2VcbiAqICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhZnM6IEFuZ3VsYXJGaXJlc3RvcmUpIHt9XG4gKlxuICogICBuZ09uSW5pdCgpIHtcbiAqICAgICB0aGlzLml0ZW1zUmVmID0gYWZzLmNvbGxlY3Rpb24oJ2l0ZW1zJywgcmVmID0+IHJlZi53aGVyZSgndXNlcicsICc9PScsICdkYXZpZGVhc3QnKS5saW1pdCgxMCkpO1xuICogICAgIHRoaXMuaXRlbXMgPSB0aGlzLml0ZW1zUmVmLnZhbHVlQ2hhbmdlcygpLm1hcChzbmFwID0+IHNuYXAuZG9jcy5tYXAoZGF0YSA9PiBkb2MuZGF0YSgpKSk7XG4gKiAgICAgLy8gdGhpcy5pdGVtcyA9IGZyb20odGhpcy5pdGVtc1JlZik7IC8vIHlvdSBjYW4gYWxzbyBkbyB0aGlzIHdpdGggbm8gbWFwcGluZ1xuICpcbiAqICAgICB0aGlzLnByb2ZpbGVSZWYgPSBhZnMuZG9jKCd1c2Vycy9kYXZpZGVhc3QnKTtcbiAqICAgICB0aGlzLnByb2ZpbGUgPSB0aGlzLnByb2ZpbGVSZWYudmFsdWVDaGFuZ2VzKCk7XG4gKiAgIH1cbiAqXG4gKiAgIGFkZEl0ZW0obmFtZTogc3RyaW5nKSB7XG4gKiAgICAgY29uc3QgdXNlciA9ICdkYXZpZGVhc3QnO1xuICogICAgIHRoaXMuaXRlbXNSZWYuYWRkKHsgbmFtZSwgdXNlciB9KTtcbiAqICAgfVxuICogfVxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdhbnknXG59KVxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJGaXJlc3RvcmUge1xuICBwdWJsaWMgcmVhZG9ubHkgZmlyZXN0b3JlOiBmaXJlYmFzZS5maXJlc3RvcmUuRmlyZXN0b3JlO1xuICBwdWJsaWMgcmVhZG9ubHkgcGVyc2lzdGVuY2VFbmFibGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICAvKipcbiAgICogRWFjaCBGZWF0dXJlIG9mIEFuZ3VsYXJGaXJlIGhhcyBhIEZpcmViYXNlQXBwIGluamVjdGVkLiBUaGlzIHdheSB3ZVxuICAgKiBkb24ndCByZWx5IG9uIHRoZSBtYWluIEZpcmViYXNlIEFwcCBpbnN0YW5jZSBhbmQgd2UgY2FuIGNyZWF0ZSBuYW1lZFxuICAgKiBhcHBzIGFuZCB1c2UgbXVsdGlwbGUgYXBwcy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoRklSRUJBU0VfT1BUSU9OUykgb3B0aW9uczogRmlyZWJhc2VPcHRpb25zLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRklSRUJBU0VfQVBQX05BTUUpIG5hbWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChFTkFCTEVfUEVSU0lTVEVOQ0UpIHNob3VsZEVuYWJsZVBlcnNpc3RlbmNlOiBib29sZWFuIHwgbnVsbCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFNFVFRJTkdTKSBzZXR0aW5nczogU2V0dGluZ3MgfCBudWxsLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcGxhdGZvcm1JZDogT2JqZWN0LFxuICAgIHpvbmU6IE5nWm9uZSxcbiAgICBwdWJsaWMgc2NoZWR1bGVyczogybVBbmd1bGFyRmlyZVNjaGVkdWxlcnMsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChQRVJTSVNURU5DRV9TRVRUSU5HUykgcGVyc2lzdGVuY2VTZXR0aW5nczogUGVyc2lzdGVuY2VTZXR0aW5ncyB8IG51bGwsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChVU0VfRU1VTEFUT1IpIF91c2VFbXVsYXRvcjogYW55LFxuICAgIEBPcHRpb25hbCgpIGF1dGg6IEFuZ3VsYXJGaXJlQXV0aCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFVTRV9BVVRIX0VNVUxBVE9SKSB1c2VBdXRoRW11bGF0b3I6IGFueSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFVVEhfU0VUVElOR1MpIGF1dGhTZXR0aW5nczogYW55LCAvLyBjYW4ndCB1c2UgZmlyZWJhc2UuYXV0aC5BdXRoU2V0dGluZ3MgaGVyZVxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoVEVOQU5UX0lEKSB0ZW5hbnRJZDogc3RyaW5nIHwgbnVsbCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KExBTkdVQUdFX0NPREUpIGxhbmd1YWdlQ29kZTogc3RyaW5nIHwgbnVsbCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFVTRV9ERVZJQ0VfTEFOR1VBR0UpIHVzZURldmljZUxhbmd1YWdlOiBib29sZWFuIHwgbnVsbCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFBFUlNJU1RFTkNFKSBwZXJzaXN0ZW5jZTogc3RyaW5nIHwgbnVsbCxcbiAgICBAT3B0aW9uYWwoKSBfYXBwQ2hlY2tJbnN0YW5jZXM6IEFwcENoZWNrSW5zdGFuY2VzLFxuICApIHtcbiAgICBjb25zdCBhcHAgPSDJtWZpcmViYXNlQXBwRmFjdG9yeShvcHRpb25zLCB6b25lLCBuYW1lKTtcbiAgICBjb25zdCB1c2VFbXVsYXRvcjogVXNlRW11bGF0b3JBcmd1bWVudHMgfCBudWxsID0gX3VzZUVtdWxhdG9yO1xuXG4gICAgaWYgKGF1dGgpIHtcbiAgICAgIMm1YXV0aEZhY3RvcnkoYXBwLCB6b25lLCB1c2VBdXRoRW11bGF0b3IsIHRlbmFudElkLCBsYW5ndWFnZUNvZGUsIHVzZURldmljZUxhbmd1YWdlLCBhdXRoU2V0dGluZ3MsIHBlcnNpc3RlbmNlKTtcbiAgICB9XG5cbiAgICBbdGhpcy5maXJlc3RvcmUsIHRoaXMucGVyc2lzdGVuY2VFbmFibGVkJF0gPSDJtWNhY2hlSW5zdGFuY2UoYCR7YXBwLm5hbWV9LmZpcmVzdG9yZWAsICdBbmd1bGFyRmlyZXN0b3JlJywgYXBwLm5hbWUsICgpID0+IHtcbiAgICAgIGNvbnN0IGZpcmVzdG9yZSA9IHpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gYXBwLmZpcmVzdG9yZSgpKTtcbiAgICAgIGlmIChzZXR0aW5ncykge1xuICAgICAgICBmaXJlc3RvcmUuc2V0dGluZ3Moc2V0dGluZ3MpO1xuICAgICAgfVxuICAgICAgaWYgKHVzZUVtdWxhdG9yKSB7XG4gICAgICAgIGZpcmVzdG9yZS51c2VFbXVsYXRvciguLi51c2VFbXVsYXRvcik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRFbmFibGVQZXJzaXN0ZW5jZSAmJiAhaXNQbGF0Zm9ybVNlcnZlcihwbGF0Zm9ybUlkKSkge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIHRyeS9jYXRjaCBoZXJlIGJlY2F1c2Ugbm90IGFsbCBlbmFibGVQZXJzaXN0ZW5jZSgpIGZhaWx1cmVzIGFyZSBjYXVnaHRcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlL2ZpcmViYXNlLWpzLXNkay9pc3N1ZXMvNjA4XG4gICAgICAgIGNvbnN0IGVuYWJsZVBlcnNpc3RlbmNlID0gKCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbShmaXJlc3RvcmUuZW5hYmxlUGVyc2lzdGVuY2UocGVyc2lzdGVuY2VTZXR0aW5ncyB8fCB1bmRlZmluZWQpLnRoZW4oKCkgPT4gdHJ1ZSwgKCkgPT4gZmFsc2UpKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7IGNvbnNvbGUud2FybihlKTsgfVxuICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBbZmlyZXN0b3JlLCB6b25lLnJ1bk91dHNpZGVBbmd1bGFyKGVuYWJsZVBlcnNpc3RlbmNlKV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW2ZpcmVzdG9yZSwgb2YoZmFsc2UpXTtcbiAgICAgIH1cblxuICAgIH0sIFtzZXR0aW5ncywgdXNlRW11bGF0b3IsIHNob3VsZEVuYWJsZVBlcnNpc3RlbmNlXSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgcmVmZXJlbmNlIHRvIGEgRmlyZXN0b3JlIENvbGxlY3Rpb24gYmFzZWQgb24gYSBwYXRoIG9yXG4gICAqIENvbGxlY3Rpb25SZWZlcmVuY2UgYW5kIGFuIG9wdGlvbmFsIHF1ZXJ5IGZ1bmN0aW9uIHRvIG5hcnJvdyB0aGUgcmVzdWx0XG4gICAqIHNldC5cbiAgICovXG4gIGNvbGxlY3Rpb248VD4ocGF0aDogc3RyaW5nLCBxdWVyeUZuPzogUXVlcnlGbik6IEFuZ3VsYXJGaXJlc3RvcmVDb2xsZWN0aW9uPFQ+O1xuICBjb2xsZWN0aW9uPFQ+KHJlZjogQ29sbGVjdGlvblJlZmVyZW5jZSwgcXVlcnlGbj86IFF1ZXJ5Rm4pOiBBbmd1bGFyRmlyZXN0b3JlQ29sbGVjdGlvbjxUPjtcbiAgY29sbGVjdGlvbjxUPihwYXRoT3JSZWY6IHN0cmluZyB8IENvbGxlY3Rpb25SZWZlcmVuY2U8VD4sIHF1ZXJ5Rm4/OiBRdWVyeUZuKTogQW5ndWxhckZpcmVzdG9yZUNvbGxlY3Rpb248VD4ge1xuICAgIGxldCBjb2xsZWN0aW9uUmVmOiBDb2xsZWN0aW9uUmVmZXJlbmNlPFQ+O1xuICAgIGlmICh0eXBlb2YgcGF0aE9yUmVmID09PSAnc3RyaW5nJykge1xuICAgICAgY29sbGVjdGlvblJlZiA9IHRoaXMuZmlyZXN0b3JlLmNvbGxlY3Rpb24ocGF0aE9yUmVmKSBhcyBmaXJlYmFzZS5maXJlc3RvcmUuQ29sbGVjdGlvblJlZmVyZW5jZTxUPjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29sbGVjdGlvblJlZiA9IHBhdGhPclJlZjtcbiAgICB9XG4gICAgY29uc3QgeyByZWYsIHF1ZXJ5IH0gPSBhc3NvY2lhdGVRdWVyeTxUPihjb2xsZWN0aW9uUmVmLCBxdWVyeUZuKTtcbiAgICBjb25zdCByZWZJblpvbmUgPSB0aGlzLnNjaGVkdWxlcnMubmdab25lLnJ1bigoKSA9PiByZWYpO1xuICAgIHJldHVybiBuZXcgQW5ndWxhckZpcmVzdG9yZUNvbGxlY3Rpb248VD4ocmVmSW5ab25lLCBxdWVyeSwgdGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgcmVmZXJlbmNlIHRvIGEgRmlyZXN0b3JlIENvbGxlY3Rpb24gR3JvdXAgYmFzZWQgb24gYSBjb2xsZWN0aW9uSWRcbiAgICogYW5kIGFuIG9wdGlvbmFsIHF1ZXJ5IGZ1bmN0aW9uIHRvIG5hcnJvdyB0aGUgcmVzdWx0XG4gICAqIHNldC5cbiAgICovXG4gIGNvbGxlY3Rpb25Hcm91cDxUPihjb2xsZWN0aW9uSWQ6IHN0cmluZywgcXVlcnlHcm91cEZuPzogUXVlcnlHcm91cEZuPFQ+KTogQW5ndWxhckZpcmVzdG9yZUNvbGxlY3Rpb25Hcm91cDxUPiB7XG4gICAgY29uc3QgcXVlcnlGbiA9IHF1ZXJ5R3JvdXBGbiB8fCAocmVmID0+IHJlZik7XG4gICAgY29uc3QgY29sbGVjdGlvbkdyb3VwOiBRdWVyeTxUPiA9IHRoaXMuZmlyZXN0b3JlLmNvbGxlY3Rpb25Hcm91cChjb2xsZWN0aW9uSWQpIGFzIGZpcmViYXNlLmZpcmVzdG9yZS5RdWVyeTxUPjtcbiAgICByZXR1cm4gbmV3IEFuZ3VsYXJGaXJlc3RvcmVDb2xsZWN0aW9uR3JvdXA8VD4ocXVlcnlGbihjb2xsZWN0aW9uR3JvdXApLCB0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSByZWZlcmVuY2UgdG8gYSBGaXJlc3RvcmUgRG9jdW1lbnQgYmFzZWQgb24gYSBwYXRoIG9yXG4gICAqIERvY3VtZW50UmVmZXJlbmNlLiBOb3RlIHRoYXQgZG9jdW1lbnRzIGFyZSBub3QgcXVlcnlhYmxlIGJlY2F1c2UgdGhleSBhcmVcbiAgICogc2ltcGx5IG9iamVjdHMuIEhvd2V2ZXIsIGRvY3VtZW50cyBoYXZlIHN1Yi1jb2xsZWN0aW9ucyB0aGF0IHJldHVybiBhXG4gICAqIENvbGxlY3Rpb24gcmVmZXJlbmNlIGFuZCBjYW4gYmUgcXVlcmllZC5cbiAgICovXG4gIGRvYzxUPihwYXRoOiBzdHJpbmcpOiBBbmd1bGFyRmlyZXN0b3JlRG9jdW1lbnQ8VD47XG4gIGRvYzxUPihyZWY6IERvY3VtZW50UmVmZXJlbmNlKTogQW5ndWxhckZpcmVzdG9yZURvY3VtZW50PFQ+O1xuICBkb2M8VD4ocGF0aE9yUmVmOiBzdHJpbmcgfCBEb2N1bWVudFJlZmVyZW5jZTxUPik6IEFuZ3VsYXJGaXJlc3RvcmVEb2N1bWVudDxUPiB7XG4gICAgbGV0IHJlZjogRG9jdW1lbnRSZWZlcmVuY2U8VD47XG4gICAgaWYgKHR5cGVvZiBwYXRoT3JSZWYgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZWYgPSB0aGlzLmZpcmVzdG9yZS5kb2MocGF0aE9yUmVmKSBhcyBmaXJlYmFzZS5maXJlc3RvcmUuRG9jdW1lbnRSZWZlcmVuY2U8VD47XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZiA9IHBhdGhPclJlZjtcbiAgICB9XG4gICAgY29uc3QgcmVmSW5ab25lID0gdGhpcy5zY2hlZHVsZXJzLm5nWm9uZS5ydW4oKCkgPT4gcmVmKTtcbiAgICByZXR1cm4gbmV3IEFuZ3VsYXJGaXJlc3RvcmVEb2N1bWVudDxUPihyZWZJblpvbmUsIHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBnZW5lcmF0ZWQgRmlyZXN0b3JlIERvY3VtZW50IElkLlxuICAgKi9cbiAgY3JlYXRlSWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmlyZXN0b3JlLmNvbGxlY3Rpb24oJ18nKS5kb2MoKS5pZDtcbiAgfVxufVxuIl19