@angular/fire 7.6.0 → 16.0.0-canary.596e208

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 (466) hide show
  1. package/analytics/is-analytics-supported-factory.d.ts +4 -0
  2. package/app-check/app-check.d.ts +0 -6
  3. package/app-check/app-check.module.d.ts +0 -1
  4. package/app-check/public_api.d.ts +2 -1
  5. package/auth-guard/auth-guard.d.ts +4 -4
  6. package/compat/auth/auth.d.ts +1 -1
  7. package/compat/auth-guard/auth-guard.d.ts +6 -4
  8. package/compat/database/interfaces.d.ts +12 -12
  9. package/compat/firestore/interfaces.d.ts +17 -17
  10. package/compat/proxy.d.ts +8 -8
  11. package/compat/remote-config/interfaces.d.ts +1 -1
  12. package/compat/storage/interfaces.d.ts +8 -8
  13. package/compat/storage/pipes/storageUrl.pipe.d.ts +1 -1
  14. package/core.d.ts +8 -12
  15. package/esm2022/analytics/analytics.module.mjs +94 -0
  16. package/esm2022/analytics/is-analytics-supported-factory.mjs +16 -0
  17. package/esm2022/analytics/overrides.mjs +3 -0
  18. package/esm2022/analytics/screen-tracking.service.mjs +147 -0
  19. package/esm2022/analytics/user-tracking.service.mjs +44 -0
  20. package/esm2022/app/app.module.mjs +84 -0
  21. package/esm2022/app-check/app-check.mjs +10 -0
  22. package/esm2022/app-check/app-check.module.mjs +79 -0
  23. package/esm2022/app-check/public_api.mjs +5 -0
  24. package/esm2022/auth/auth.module.mjs +71 -0
  25. package/esm2022/auth-guard/auth-guard.mjs +51 -0
  26. package/{esm2015/auth-guard/auth-guard.module.js → esm2022/auth-guard/auth-guard.module.mjs} +5 -5
  27. package/esm2022/compat/analytics/analytics.mjs +161 -0
  28. package/{esm2015/compat/analytics/analytics.module.js → esm2022/compat/analytics/analytics.module.mjs} +5 -5
  29. package/esm2022/compat/analytics/screen-tracking.service.mjs +49 -0
  30. package/esm2022/compat/analytics/user-tracking.service.mjs +53 -0
  31. package/esm2022/compat/auth/auth.mjs +161 -0
  32. package/{esm2015/compat/auth/auth.module.js → esm2022/compat/auth/auth.module.mjs} +5 -5
  33. package/{esm2015/compat/auth/public_api.js → esm2022/compat/auth/public_api.mjs} +1 -1
  34. package/esm2022/compat/auth-guard/auth-guard.mjs +51 -0
  35. package/{esm2015/compat/auth-guard/auth-guard.module.js → esm2022/compat/auth-guard/auth-guard.module.mjs} +5 -5
  36. package/{esm2015/compat/cache.js → esm2022/compat/cache.mjs} +3 -3
  37. package/esm2022/compat/database/database.mjs +119 -0
  38. package/{esm2015/compat/database/database.module.js → esm2022/compat/database/database.module.mjs} +5 -5
  39. package/esm2022/compat/database/list/create-reference.mjs +44 -0
  40. package/{esm2015/compat/firebase.app.module.js → esm2022/compat/firebase.app.module.mjs} +11 -11
  41. package/esm2022/compat/firestore/collection/changes.mjs +108 -0
  42. package/esm2022/compat/firestore/collection/collection.mjs +123 -0
  43. package/esm2022/compat/firestore/collection-group/collection-group.mjs +86 -0
  44. package/esm2022/compat/firestore/document/document.mjs +87 -0
  45. package/esm2022/compat/firestore/firestore.mjs +257 -0
  46. package/{esm2015/compat/firestore/firestore.module.js → esm2022/compat/firestore/firestore.module.mjs} +5 -5
  47. package/esm2022/compat/firestore/interfaces.mjs +2 -0
  48. package/esm2022/compat/firestore/observable/fromRef.mjs +40 -0
  49. package/esm2022/compat/functions/functions.mjs +69 -0
  50. package/{esm2015/compat/functions/functions.module.js → esm2022/compat/functions/functions.module.mjs} +5 -5
  51. package/{esm2015/compat/functions/public_api.js → esm2022/compat/functions/public_api.mjs} +1 -1
  52. package/esm2022/compat/messaging/messaging.mjs +80 -0
  53. package/{esm2015/compat/messaging/messaging.module.js → esm2022/compat/messaging/messaging.module.mjs} +5 -5
  54. package/{esm2015/compat/performance/performance.js → esm2022/compat/performance/performance.mjs} +7 -6
  55. package/{esm2015/compat/performance/performance.module.js → esm2022/compat/performance/performance.module.mjs} +5 -5
  56. package/esm2022/compat/performance/performance.service.mjs +27 -0
  57. package/esm2022/compat/proxy.mjs +59 -0
  58. package/esm2022/compat/remote-config/remote-config.mjs +207 -0
  59. package/{esm2015/compat/remote-config/remote-config.module.js → esm2022/compat/remote-config/remote-config.module.mjs} +5 -5
  60. package/esm2022/compat/storage/pipes/storageUrl.pipe.mjs +58 -0
  61. package/esm2022/compat/storage/storage.mjs +95 -0
  62. package/{esm2015/compat/storage/storage.module.js → esm2022/compat/storage/storage.module.mjs} +5 -5
  63. package/esm2022/core.mjs +45 -0
  64. package/esm2022/database/database.module.mjs +74 -0
  65. package/esm2022/firestore/firestore.module.mjs +74 -0
  66. package/esm2022/firestore/lite/lite.module.mjs +73 -0
  67. package/esm2022/firestore/rxfire.mjs +15 -0
  68. package/esm2022/functions/functions.module.mjs +74 -0
  69. package/esm2022/messaging/is-messaging-supported-factory.mjs +16 -0
  70. package/esm2022/messaging/messaging.module.mjs +86 -0
  71. package/esm2022/messaging/overrides.mjs +3 -0
  72. package/{esm2015/performance/performance.module.js → esm2022/performance/performance.module.mjs} +8 -8
  73. package/esm2022/remote-config/is-remote-config-supported-factory.mjs +16 -0
  74. package/esm2022/remote-config/overrides.mjs +3 -0
  75. package/esm2022/remote-config/remote-config.module.mjs +86 -0
  76. package/esm2022/storage/storage.module.mjs +74 -0
  77. package/esm2022/zones.mjs +196 -0
  78. package/{fesm2015/angular-fire-analytics.js → fesm2022/angular-fire-analytics.mjs} +61 -38
  79. package/fesm2022/angular-fire-analytics.mjs.map +1 -0
  80. package/{fesm2015/angular-fire-app-check.js → fesm2022/angular-fire-app-check.mjs} +15 -22
  81. package/fesm2022/angular-fire-app-check.mjs.map +1 -0
  82. package/{fesm2015/angular-fire-app.js → fesm2022/angular-fire-app.mjs} +8 -8
  83. package/fesm2022/angular-fire-app.mjs.map +1 -0
  84. package/{fesm2015/angular-fire-auth-guard.js → fesm2022/angular-fire-auth-guard.mjs} +25 -23
  85. package/fesm2022/angular-fire-auth-guard.mjs.map +1 -0
  86. package/{fesm2015/angular-fire-auth.js → fesm2022/angular-fire-auth.mjs} +10 -11
  87. package/fesm2022/angular-fire-auth.mjs.map +1 -0
  88. package/{fesm2015/angular-fire-compat-analytics.js → fesm2022/angular-fire-compat-analytics.mjs} +28 -28
  89. package/fesm2022/angular-fire-compat-analytics.mjs.map +1 -0
  90. package/{fesm2015/angular-fire-compat-auth-guard.js → fesm2022/angular-fire-compat-auth-guard.mjs} +25 -23
  91. package/fesm2022/angular-fire-compat-auth-guard.mjs.map +1 -0
  92. package/{fesm2015/angular-fire-compat-auth.js → fesm2022/angular-fire-compat-auth.mjs} +32 -10
  93. package/fesm2022/angular-fire-compat-auth.mjs.map +1 -0
  94. package/{fesm2015/angular-fire-compat-database.js → fesm2022/angular-fire-compat-database.mjs} +17 -12
  95. package/fesm2022/angular-fire-compat-database.mjs.map +1 -0
  96. package/{fesm2015/angular-fire-compat-firestore.js → fesm2022/angular-fire-compat-firestore.mjs} +37 -16
  97. package/fesm2022/angular-fire-compat-firestore.mjs.map +1 -0
  98. package/{fesm2015/angular-fire-compat-functions.js → fesm2022/angular-fire-compat-functions.mjs} +10 -9
  99. package/fesm2022/angular-fire-compat-functions.mjs.map +1 -0
  100. package/{fesm2015/angular-fire-compat-messaging.js → fesm2022/angular-fire-compat-messaging.mjs} +20 -15
  101. package/fesm2022/angular-fire-compat-messaging.mjs.map +1 -0
  102. package/{fesm2015/angular-fire-compat-performance.js → fesm2022/angular-fire-compat-performance.mjs} +16 -15
  103. package/fesm2022/angular-fire-compat-performance.mjs.map +1 -0
  104. package/{fesm2015/angular-fire-compat-remote-config.js → fesm2022/angular-fire-compat-remote-config.mjs} +33 -19
  105. package/fesm2022/angular-fire-compat-remote-config.mjs.map +1 -0
  106. package/{fesm2015/angular-fire-compat-storage.js → fesm2022/angular-fire-compat-storage.mjs} +23 -18
  107. package/fesm2022/angular-fire-compat-storage.mjs.map +1 -0
  108. package/{fesm2015/angular-fire-compat.js → fesm2022/angular-fire-compat.mjs} +15 -17
  109. package/fesm2022/angular-fire-compat.mjs.map +1 -0
  110. package/{fesm2015/angular-fire-database.js → fesm2022/angular-fire-database.mjs} +10 -11
  111. package/fesm2022/angular-fire-database.mjs.map +1 -0
  112. package/{fesm2015/angular-fire-firestore-lite.js → fesm2022/angular-fire-firestore-lite.mjs} +10 -11
  113. package/fesm2022/angular-fire-firestore-lite.mjs.map +1 -0
  114. package/{fesm2015/angular-fire-firestore.js → fesm2022/angular-fire-firestore.mjs} +14 -13
  115. package/fesm2022/angular-fire-firestore.mjs.map +1 -0
  116. package/{fesm2015/angular-fire-functions.js → fesm2022/angular-fire-functions.mjs} +10 -11
  117. package/fesm2022/angular-fire-functions.mjs.map +1 -0
  118. package/{fesm2015/angular-fire-messaging.js → fesm2022/angular-fire-messaging.mjs} +33 -19
  119. package/fesm2022/angular-fire-messaging.mjs.map +1 -0
  120. package/{fesm2015/angular-fire-performance.js → fesm2022/angular-fire-performance.mjs} +8 -8
  121. package/fesm2022/angular-fire-performance.mjs.map +1 -0
  122. package/{fesm2015/angular-fire-remote-config.js → fesm2022/angular-fire-remote-config.mjs} +34 -20
  123. package/fesm2022/angular-fire-remote-config.mjs.map +1 -0
  124. package/{fesm2015/angular-fire-storage.js → fesm2022/angular-fire-storage.mjs} +10 -11
  125. package/fesm2022/angular-fire-storage.mjs.map +1 -0
  126. package/{fesm2015/angular-fire.js → fesm2022/angular-fire.mjs} +31 -52
  127. package/fesm2022/angular-fire.mjs.map +1 -0
  128. package/firestore/rxfire.d.ts +3 -1
  129. package/messaging/is-messaging-supported-factory.d.ts +4 -0
  130. package/package.json +159 -9
  131. package/publish.sh +1 -0
  132. package/remote-config/is-remote-config-supported-factory.d.ts +4 -0
  133. package/schematics/add/index.js +1 -1
  134. package/schematics/common.js +8 -4
  135. package/schematics/deploy/actions.js +59 -59
  136. package/schematics/deploy/builder.js +5 -5
  137. package/schematics/firebaseTools.js +9 -5
  138. package/schematics/setup/index.js +24 -23
  139. package/schematics/setup/prompts.js +20 -15
  140. package/schematics/update/v7/index.js +5 -5
  141. package/schematics/utils.js +30 -30
  142. package/README.md +0 -216
  143. package/analytics/package.json +0 -11
  144. package/app/package.json +0 -11
  145. package/app-check/package.json +0 -11
  146. package/auth/package.json +0 -11
  147. package/auth-guard/package.json +0 -11
  148. package/bundles/angular-fire-analytics.umd.js +0 -673
  149. package/bundles/angular-fire-analytics.umd.js.map +0 -1
  150. package/bundles/angular-fire-app-check.umd.js +0 -465
  151. package/bundles/angular-fire-app-check.umd.js.map +0 -1
  152. package/bundles/angular-fire-app.umd.js +0 -477
  153. package/bundles/angular-fire-app.umd.js.map +0 -1
  154. package/bundles/angular-fire-auth-guard.umd.js +0 -109
  155. package/bundles/angular-fire-auth-guard.umd.js.map +0 -1
  156. package/bundles/angular-fire-auth.umd.js +0 -557
  157. package/bundles/angular-fire-auth.umd.js.map +0 -1
  158. package/bundles/angular-fire-compat-analytics.umd.js +0 -672
  159. package/bundles/angular-fire-compat-analytics.umd.js.map +0 -1
  160. package/bundles/angular-fire-compat-auth-guard.umd.js +0 -112
  161. package/bundles/angular-fire-compat-auth-guard.umd.js.map +0 -1
  162. package/bundles/angular-fire-compat-auth.umd.js +0 -559
  163. package/bundles/angular-fire-compat-auth.umd.js.map +0 -1
  164. package/bundles/angular-fire-compat-database.umd.js +0 -799
  165. package/bundles/angular-fire-compat-database.umd.js.map +0 -1
  166. package/bundles/angular-fire-compat-firestore.umd.js +0 -1073
  167. package/bundles/angular-fire-compat-firestore.umd.js.map +0 -1
  168. package/bundles/angular-fire-compat-functions.umd.js +0 -443
  169. package/bundles/angular-fire-compat-functions.umd.js.map +0 -1
  170. package/bundles/angular-fire-compat-messaging.umd.js +0 -465
  171. package/bundles/angular-fire-compat-messaging.umd.js.map +0 -1
  172. package/bundles/angular-fire-compat-performance.umd.js +0 -212
  173. package/bundles/angular-fire-compat-performance.umd.js.map +0 -1
  174. package/bundles/angular-fire-compat-remote-config.umd.js +0 -605
  175. package/bundles/angular-fire-compat-remote-config.umd.js.map +0 -1
  176. package/bundles/angular-fire-compat-storage.umd.js +0 -598
  177. package/bundles/angular-fire-compat-storage.umd.js.map +0 -1
  178. package/bundles/angular-fire-compat.umd.js +0 -535
  179. package/bundles/angular-fire-compat.umd.js.map +0 -1
  180. package/bundles/angular-fire-database.umd.js +0 -557
  181. package/bundles/angular-fire-database.umd.js.map +0 -1
  182. package/bundles/angular-fire-firestore-lite.umd.js +0 -531
  183. package/bundles/angular-fire-firestore-lite.umd.js.map +0 -1
  184. package/bundles/angular-fire-firestore.umd.js +0 -565
  185. package/bundles/angular-fire-firestore.umd.js.map +0 -1
  186. package/bundles/angular-fire-functions.umd.js +0 -461
  187. package/bundles/angular-fire-functions.umd.js.map +0 -1
  188. package/bundles/angular-fire-messaging.umd.js +0 -473
  189. package/bundles/angular-fire-messaging.umd.js.map +0 -1
  190. package/bundles/angular-fire-performance.umd.js +0 -473
  191. package/bundles/angular-fire-performance.umd.js.map +0 -1
  192. package/bundles/angular-fire-remote-config.umd.js +0 -499
  193. package/bundles/angular-fire-remote-config.umd.js.map +0 -1
  194. package/bundles/angular-fire-storage.umd.js +0 -485
  195. package/bundles/angular-fire-storage.umd.js.map +0 -1
  196. package/bundles/angular-fire.umd.js +0 -308
  197. package/bundles/angular-fire.umd.js.map +0 -1
  198. package/compat/analytics/package.json +0 -11
  199. package/compat/auth/package.json +0 -11
  200. package/compat/auth-guard/package.json +0 -11
  201. package/compat/database/package.json +0 -11
  202. package/compat/firestore/package.json +0 -11
  203. package/compat/functions/package.json +0 -11
  204. package/compat/messaging/package.json +0 -11
  205. package/compat/package.json +0 -11
  206. package/compat/performance/package.json +0 -11
  207. package/compat/remote-config/package.json +0 -11
  208. package/compat/storage/package.json +0 -11
  209. package/database/package.json +0 -11
  210. package/docs/analytics.md +0 -67
  211. package/docs/app-check.md +0 -53
  212. package/docs/auth.md +0 -165
  213. package/docs/compat/analytics/getting-started.md +0 -137
  214. package/docs/compat/auth/getting-started.md +0 -162
  215. package/docs/compat/auth/router-guards.md +0 -104
  216. package/docs/compat/emulators/emulators.md +0 -134
  217. package/docs/compat/firestore/collections.md +0 -326
  218. package/docs/compat/firestore/documents.md +0 -115
  219. package/docs/compat/firestore/offline-data.md +0 -39
  220. package/docs/compat/firestore/querying-collections.md +0 -204
  221. package/docs/compat/functions/functions.md +0 -166
  222. package/docs/compat/messaging/messaging.md +0 -232
  223. package/docs/compat/performance/getting-started.md +0 -132
  224. package/docs/compat/remote-config/getting-started.md +0 -134
  225. package/docs/compat/rtdb/lists.md +0 -257
  226. package/docs/compat/rtdb/objects.md +0 -182
  227. package/docs/compat/rtdb/querying-lists.md +0 -155
  228. package/docs/compat/storage/storage.md +0 -257
  229. package/docs/compat.md +0 -70
  230. package/docs/database.md +0 -175
  231. package/docs/deploy/getting-started.md +0 -204
  232. package/docs/firebase.json +0 -16
  233. package/docs/firestore.md +0 -148
  234. package/docs/functions.md +0 -52
  235. package/docs/images/analytics-illo_1x.png +0 -0
  236. package/docs/images/auth-illo_1x.png +0 -0
  237. package/docs/images/cloud-messaging-illo_1x.png +0 -0
  238. package/docs/images/database-illo_1x.png +0 -0
  239. package/docs/images/firestore-illo_1x.png +0 -0
  240. package/docs/images/functions-illo_1x.png +0 -0
  241. package/docs/images/hosting-illo_1x.png +0 -0
  242. package/docs/images/performance-illo_1x.png +0 -0
  243. package/docs/images/reCAPTCHA-logo@1x.png +0 -0
  244. package/docs/images/remote-config-illo_1x.png +0 -0
  245. package/docs/images/storage-illo_1x.png +0 -0
  246. package/docs/install-and-setup.md +0 -114
  247. package/docs/install-angular-cli-windows10.md +0 -82
  248. package/docs/messaging.md +0 -25
  249. package/docs/performance.md +0 -57
  250. package/docs/remote-config.md +0 -53
  251. package/docs/storage.md +0 -90
  252. package/docs/universal/cloud-functions.md +0 -75
  253. package/docs/universal/getting-started.md +0 -153
  254. package/docs/universal/prerendering.md +0 -72
  255. package/docs/version-4-upgrade.md +0 -119
  256. package/docs/version-5-upgrade.md +0 -82
  257. package/docs/version-6-upgrade.md +0 -16
  258. package/docs/version-7-upgrade.md +0 -298
  259. package/esm2015/analytics/analytics.module.js +0 -93
  260. package/esm2015/analytics/overrides.js +0 -3
  261. package/esm2015/analytics/screen-tracking.service.js +0 -139
  262. package/esm2015/analytics/user-tracking.service.js +0 -43
  263. package/esm2015/app/app.module.js +0 -84
  264. package/esm2015/app-check/app-check.js +0 -16
  265. package/esm2015/app-check/app-check.module.js +0 -81
  266. package/esm2015/app-check/public_api.js +0 -4
  267. package/esm2015/auth/auth.module.js +0 -71
  268. package/esm2015/auth-guard/auth-guard.js +0 -49
  269. package/esm2015/compat/analytics/analytics.js +0 -163
  270. package/esm2015/compat/analytics/screen-tracking.service.js +0 -49
  271. package/esm2015/compat/analytics/user-tracking.service.js +0 -52
  272. package/esm2015/compat/auth/auth.js +0 -139
  273. package/esm2015/compat/auth-guard/auth-guard.js +0 -49
  274. package/esm2015/compat/database/database.js +0 -117
  275. package/esm2015/compat/database/list/create-reference.js +0 -41
  276. package/esm2015/compat/firestore/collection/changes.js +0 -107
  277. package/esm2015/compat/firestore/collection/collection.js +0 -117
  278. package/esm2015/compat/firestore/collection-group/collection-group.js +0 -81
  279. package/esm2015/compat/firestore/document/document.js +0 -82
  280. package/esm2015/compat/firestore/firestore.js +0 -254
  281. package/esm2015/compat/firestore/interfaces.js +0 -2
  282. package/esm2015/compat/firestore/observable/fromRef.js +0 -39
  283. package/esm2015/compat/functions/functions.js +0 -68
  284. package/esm2015/compat/messaging/messaging.js +0 -75
  285. package/esm2015/compat/performance/performance.service.js +0 -27
  286. package/esm2015/compat/proxy.js +0 -61
  287. package/esm2015/compat/remote-config/remote-config.js +0 -193
  288. package/esm2015/compat/storage/pipes/storageUrl.pipe.js +0 -54
  289. package/esm2015/compat/storage/storage.js +0 -94
  290. package/esm2015/core.js +0 -79
  291. package/esm2015/database/database.module.js +0 -74
  292. package/esm2015/firestore/firestore.module.js +0 -74
  293. package/esm2015/firestore/lite/lite.module.js +0 -74
  294. package/esm2015/firestore/rxfire.js +0 -13
  295. package/esm2015/functions/functions.module.js +0 -74
  296. package/esm2015/messaging/messaging.module.js +0 -85
  297. package/esm2015/messaging/overrides.js +0 -3
  298. package/esm2015/remote-config/overrides.js +0 -3
  299. package/esm2015/remote-config/remote-config.module.js +0 -85
  300. package/esm2015/storage/storage.module.js +0 -74
  301. package/esm2015/zones.js +0 -183
  302. package/fesm2015/angular-fire-analytics.js.map +0 -1
  303. package/fesm2015/angular-fire-app-check.js.map +0 -1
  304. package/fesm2015/angular-fire-app.js.map +0 -1
  305. package/fesm2015/angular-fire-auth-guard.js.map +0 -1
  306. package/fesm2015/angular-fire-auth.js.map +0 -1
  307. package/fesm2015/angular-fire-compat-analytics.js.map +0 -1
  308. package/fesm2015/angular-fire-compat-auth-guard.js.map +0 -1
  309. package/fesm2015/angular-fire-compat-auth.js.map +0 -1
  310. package/fesm2015/angular-fire-compat-database.js.map +0 -1
  311. package/fesm2015/angular-fire-compat-firestore.js.map +0 -1
  312. package/fesm2015/angular-fire-compat-functions.js.map +0 -1
  313. package/fesm2015/angular-fire-compat-messaging.js.map +0 -1
  314. package/fesm2015/angular-fire-compat-performance.js.map +0 -1
  315. package/fesm2015/angular-fire-compat-remote-config.js.map +0 -1
  316. package/fesm2015/angular-fire-compat-storage.js.map +0 -1
  317. package/fesm2015/angular-fire-compat.js.map +0 -1
  318. package/fesm2015/angular-fire-database.js.map +0 -1
  319. package/fesm2015/angular-fire-firestore-lite.js.map +0 -1
  320. package/fesm2015/angular-fire-firestore.js.map +0 -1
  321. package/fesm2015/angular-fire-functions.js.map +0 -1
  322. package/fesm2015/angular-fire-messaging.js.map +0 -1
  323. package/fesm2015/angular-fire-performance.js.map +0 -1
  324. package/fesm2015/angular-fire-remote-config.js.map +0 -1
  325. package/fesm2015/angular-fire-storage.js.map +0 -1
  326. package/fesm2015/angular-fire.js.map +0 -1
  327. package/firestore/lite/package.json +0 -11
  328. package/firestore/package.json +0 -11
  329. package/firestore-protos.js +0 -4
  330. package/functions/package.json +0 -11
  331. package/messaging/package.json +0 -11
  332. package/performance/package.json +0 -11
  333. package/remote-config/package.json +0 -11
  334. package/schematics/add/schema.json +0 -16
  335. package/schematics/builders.json +0 -10
  336. package/schematics/collection.json +0 -15
  337. package/schematics/deploy/schema.json +0 -119
  338. package/schematics/migration.json +0 -15
  339. package/schematics/setup/schema.json +0 -16
  340. package/storage/package.json +0 -11
  341. /package/analytics/{angular-fire-analytics.d.ts → index.d.ts} +0 -0
  342. /package/app/{angular-fire-app.d.ts → index.d.ts} +0 -0
  343. /package/app-check/{angular-fire-app-check.d.ts → index.d.ts} +0 -0
  344. /package/auth/{angular-fire-auth.d.ts → index.d.ts} +0 -0
  345. /package/auth-guard/{angular-fire-auth-guard.d.ts → index.d.ts} +0 -0
  346. /package/compat/analytics/{angular-fire-compat-analytics.d.ts → index.d.ts} +0 -0
  347. /package/compat/auth/{angular-fire-compat-auth.d.ts → index.d.ts} +0 -0
  348. /package/compat/auth-guard/{angular-fire-compat-auth-guard.d.ts → index.d.ts} +0 -0
  349. /package/compat/database/{angular-fire-compat-database.d.ts → index.d.ts} +0 -0
  350. /package/compat/firestore/{angular-fire-compat-firestore.d.ts → index.d.ts} +0 -0
  351. /package/compat/functions/{angular-fire-compat-functions.d.ts → index.d.ts} +0 -0
  352. /package/compat/{angular-fire-compat.d.ts → index.d.ts} +0 -0
  353. /package/compat/messaging/{angular-fire-compat-messaging.d.ts → index.d.ts} +0 -0
  354. /package/compat/performance/{angular-fire-compat-performance.d.ts → index.d.ts} +0 -0
  355. /package/compat/remote-config/{angular-fire-compat-remote-config.d.ts → index.d.ts} +0 -0
  356. /package/compat/storage/{angular-fire-compat-storage.d.ts → index.d.ts} +0 -0
  357. /package/database/{angular-fire-database.d.ts → index.d.ts} +0 -0
  358. /package/{esm2015/analytics/analytics.js → esm2022/analytics/analytics.mjs} +0 -0
  359. /package/{esm2015/analytics/angular-fire-analytics.js → esm2022/analytics/angular-fire-analytics.mjs} +0 -0
  360. /package/{esm2015/analytics/firebase.js → esm2022/analytics/firebase.mjs} +0 -0
  361. /package/{esm2015/analytics/public_api.js → esm2022/analytics/public_api.mjs} +0 -0
  362. /package/{esm2015/angular-fire.js → esm2022/angular-fire.mjs} +0 -0
  363. /package/{esm2015/app/angular-fire-app.js → esm2022/app/angular-fire-app.mjs} +0 -0
  364. /package/{esm2015/app/app.js → esm2022/app/app.mjs} +0 -0
  365. /package/{esm2015/app/firebase.js → esm2022/app/firebase.mjs} +0 -0
  366. /package/{esm2015/app/public_api.js → esm2022/app/public_api.mjs} +0 -0
  367. /package/{esm2015/app-check/angular-fire-app-check.js → esm2022/app-check/angular-fire-app-check.mjs} +0 -0
  368. /package/{esm2015/app-check/firebase.js → esm2022/app-check/firebase.mjs} +0 -0
  369. /package/{esm2015/auth/angular-fire-auth.js → esm2022/auth/angular-fire-auth.mjs} +0 -0
  370. /package/{esm2015/auth/auth.js → esm2022/auth/auth.mjs} +0 -0
  371. /package/{esm2015/auth/firebase.js → esm2022/auth/firebase.mjs} +0 -0
  372. /package/{esm2015/auth/public_api.js → esm2022/auth/public_api.mjs} +0 -0
  373. /package/{esm2015/auth/rxfire.js → esm2022/auth/rxfire.mjs} +0 -0
  374. /package/{esm2015/auth-guard/angular-fire-auth-guard.js → esm2022/auth-guard/angular-fire-auth-guard.mjs} +0 -0
  375. /package/{esm2015/auth-guard/public_api.js → esm2022/auth-guard/public_api.mjs} +0 -0
  376. /package/{esm2015/compat/analytics/angular-fire-compat-analytics.js → esm2022/compat/analytics/angular-fire-compat-analytics.mjs} +0 -0
  377. /package/{esm2015/compat/analytics/base.js → esm2022/compat/analytics/base.mjs} +0 -0
  378. /package/{esm2015/compat/analytics/public_api.js → esm2022/compat/analytics/public_api.mjs} +0 -0
  379. /package/{esm2015/compat/angular-fire-compat.js → esm2022/compat/angular-fire-compat.mjs} +0 -0
  380. /package/{esm2015/compat/auth/angular-fire-compat-auth.js → esm2022/compat/auth/angular-fire-compat-auth.mjs} +0 -0
  381. /package/{esm2015/compat/auth/base.js → esm2022/compat/auth/base.mjs} +0 -0
  382. /package/{esm2015/compat/auth-guard/angular-fire-compat-auth-guard.js → esm2022/compat/auth-guard/angular-fire-compat-auth-guard.mjs} +0 -0
  383. /package/{esm2015/compat/auth-guard/public_api.js → esm2022/compat/auth-guard/public_api.mjs} +0 -0
  384. /package/{esm2015/compat/database/angular-fire-compat-database.js → esm2022/compat/database/angular-fire-compat-database.mjs} +0 -0
  385. /package/{esm2015/compat/database/interfaces.js → esm2022/compat/database/interfaces.mjs} +0 -0
  386. /package/{esm2015/compat/database/list/audit-trail.js → esm2022/compat/database/list/audit-trail.mjs} +0 -0
  387. /package/{esm2015/compat/database/list/changes.js → esm2022/compat/database/list/changes.mjs} +0 -0
  388. /package/{esm2015/compat/database/list/data-operation.js → esm2022/compat/database/list/data-operation.mjs} +0 -0
  389. /package/{esm2015/compat/database/list/remove.js → esm2022/compat/database/list/remove.mjs} +0 -0
  390. /package/{esm2015/compat/database/list/snapshot-changes.js → esm2022/compat/database/list/snapshot-changes.mjs} +0 -0
  391. /package/{esm2015/compat/database/list/state-changes.js → esm2022/compat/database/list/state-changes.mjs} +0 -0
  392. /package/{esm2015/compat/database/list/utils.js → esm2022/compat/database/list/utils.mjs} +0 -0
  393. /package/{esm2015/compat/database/object/create-reference.js → esm2022/compat/database/object/create-reference.mjs} +0 -0
  394. /package/{esm2015/compat/database/object/snapshot-changes.js → esm2022/compat/database/object/snapshot-changes.mjs} +0 -0
  395. /package/{esm2015/compat/database/observable/fromRef.js → esm2022/compat/database/observable/fromRef.mjs} +0 -0
  396. /package/{esm2015/compat/database/public_api.js → esm2022/compat/database/public_api.mjs} +0 -0
  397. /package/{esm2015/compat/database/utils.js → esm2022/compat/database/utils.mjs} +0 -0
  398. /package/{esm2015/compat/firebase.app.js → esm2022/compat/firebase.app.mjs} +0 -0
  399. /package/{esm2015/compat/firestore/angular-fire-compat-firestore.js → esm2022/compat/firestore/angular-fire-compat-firestore.mjs} +0 -0
  400. /package/{esm2015/compat/firestore/public_api.js → esm2022/compat/firestore/public_api.mjs} +0 -0
  401. /package/{esm2015/compat/functions/angular-fire-compat-functions.js → esm2022/compat/functions/angular-fire-compat-functions.mjs} +0 -0
  402. /package/{esm2015/compat/functions/base.js → esm2022/compat/functions/base.mjs} +0 -0
  403. /package/{esm2015/compat/messaging/angular-fire-compat-messaging.js → esm2022/compat/messaging/angular-fire-compat-messaging.mjs} +0 -0
  404. /package/{esm2015/compat/messaging/base.js → esm2022/compat/messaging/base.mjs} +0 -0
  405. /package/{esm2015/compat/messaging/public_api.js → esm2022/compat/messaging/public_api.mjs} +0 -0
  406. /package/{esm2015/compat/performance/angular-fire-compat-performance.js → esm2022/compat/performance/angular-fire-compat-performance.mjs} +0 -0
  407. /package/{esm2015/compat/performance/base.js → esm2022/compat/performance/base.mjs} +0 -0
  408. /package/{esm2015/compat/performance/public_api.js → esm2022/compat/performance/public_api.mjs} +0 -0
  409. /package/{esm2015/compat/public_api.js → esm2022/compat/public_api.mjs} +0 -0
  410. /package/{esm2015/compat/remote-config/angular-fire-compat-remote-config.js → esm2022/compat/remote-config/angular-fire-compat-remote-config.mjs} +0 -0
  411. /package/{esm2015/compat/remote-config/base.js → esm2022/compat/remote-config/base.mjs} +0 -0
  412. /package/{esm2015/compat/remote-config/interfaces.js → esm2022/compat/remote-config/interfaces.mjs} +0 -0
  413. /package/{esm2015/compat/remote-config/public_api.js → esm2022/compat/remote-config/public_api.mjs} +0 -0
  414. /package/{esm2015/compat/storage/angular-fire-compat-storage.js → esm2022/compat/storage/angular-fire-compat-storage.mjs} +0 -0
  415. /package/{esm2015/compat/storage/interfaces.js → esm2022/compat/storage/interfaces.mjs} +0 -0
  416. /package/{esm2015/compat/storage/observable/fromTask.js → esm2022/compat/storage/observable/fromTask.mjs} +0 -0
  417. /package/{esm2015/compat/storage/public_api.js → esm2022/compat/storage/public_api.mjs} +0 -0
  418. /package/{esm2015/compat/storage/ref.js → esm2022/compat/storage/ref.mjs} +0 -0
  419. /package/{esm2015/compat/storage/task.js → esm2022/compat/storage/task.mjs} +0 -0
  420. /package/{esm2015/database/angular-fire-database.js → esm2022/database/angular-fire-database.mjs} +0 -0
  421. /package/{esm2015/database/database.js → esm2022/database/database.mjs} +0 -0
  422. /package/{esm2015/database/firebase.js → esm2022/database/firebase.mjs} +0 -0
  423. /package/{esm2015/database/public_api.js → esm2022/database/public_api.mjs} +0 -0
  424. /package/{esm2015/database/rxfire.js → esm2022/database/rxfire.mjs} +0 -0
  425. /package/{esm2015/firestore/angular-fire-firestore.js → esm2022/firestore/angular-fire-firestore.mjs} +0 -0
  426. /package/{esm2015/firestore/firebase.js → esm2022/firestore/firebase.mjs} +0 -0
  427. /package/{esm2015/firestore/firestore.js → esm2022/firestore/firestore.mjs} +0 -0
  428. /package/{esm2015/firestore/lite/angular-fire-firestore-lite.js → esm2022/firestore/lite/angular-fire-firestore-lite.mjs} +0 -0
  429. /package/{esm2015/firestore/lite/firebase.js → esm2022/firestore/lite/firebase.mjs} +0 -0
  430. /package/{esm2015/firestore/lite/lite.js → esm2022/firestore/lite/lite.mjs} +0 -0
  431. /package/{esm2015/firestore/lite/public_api.js → esm2022/firestore/lite/public_api.mjs} +0 -0
  432. /package/{esm2015/firestore/lite/rxfire.js → esm2022/firestore/lite/rxfire.mjs} +0 -0
  433. /package/{esm2015/firestore/public_api.js → esm2022/firestore/public_api.mjs} +0 -0
  434. /package/{esm2015/functions/angular-fire-functions.js → esm2022/functions/angular-fire-functions.mjs} +0 -0
  435. /package/{esm2015/functions/firebase.js → esm2022/functions/firebase.mjs} +0 -0
  436. /package/{esm2015/functions/functions.js → esm2022/functions/functions.mjs} +0 -0
  437. /package/{esm2015/functions/public_api.js → esm2022/functions/public_api.mjs} +0 -0
  438. /package/{esm2015/functions/rxfire.js → esm2022/functions/rxfire.mjs} +0 -0
  439. /package/{esm2015/messaging/angular-fire-messaging.js → esm2022/messaging/angular-fire-messaging.mjs} +0 -0
  440. /package/{esm2015/messaging/firebase.js → esm2022/messaging/firebase.mjs} +0 -0
  441. /package/{esm2015/messaging/messaging.js → esm2022/messaging/messaging.mjs} +0 -0
  442. /package/{esm2015/messaging/public_api.js → esm2022/messaging/public_api.mjs} +0 -0
  443. /package/{esm2015/performance/angular-fire-performance.js → esm2022/performance/angular-fire-performance.mjs} +0 -0
  444. /package/{esm2015/performance/firebase.js → esm2022/performance/firebase.mjs} +0 -0
  445. /package/{esm2015/performance/performance.js → esm2022/performance/performance.mjs} +0 -0
  446. /package/{esm2015/performance/public_api.js → esm2022/performance/public_api.mjs} +0 -0
  447. /package/{esm2015/performance/rxfire.js → esm2022/performance/rxfire.mjs} +0 -0
  448. /package/{esm2015/public_api.js → esm2022/public_api.mjs} +0 -0
  449. /package/{esm2015/remote-config/angular-fire-remote-config.js → esm2022/remote-config/angular-fire-remote-config.mjs} +0 -0
  450. /package/{esm2015/remote-config/firebase.js → esm2022/remote-config/firebase.mjs} +0 -0
  451. /package/{esm2015/remote-config/public_api.js → esm2022/remote-config/public_api.mjs} +0 -0
  452. /package/{esm2015/remote-config/remote-config.js → esm2022/remote-config/remote-config.mjs} +0 -0
  453. /package/{esm2015/remote-config/rxfire.js → esm2022/remote-config/rxfire.mjs} +0 -0
  454. /package/{esm2015/storage/angular-fire-storage.js → esm2022/storage/angular-fire-storage.mjs} +0 -0
  455. /package/{esm2015/storage/firebase.js → esm2022/storage/firebase.mjs} +0 -0
  456. /package/{esm2015/storage/public_api.js → esm2022/storage/public_api.mjs} +0 -0
  457. /package/{esm2015/storage/rxfire.js → esm2022/storage/rxfire.mjs} +0 -0
  458. /package/{esm2015/storage/storage.js → esm2022/storage/storage.mjs} +0 -0
  459. /package/firestore/{angular-fire-firestore.d.ts → index.d.ts} +0 -0
  460. /package/firestore/lite/{angular-fire-firestore-lite.d.ts → index.d.ts} +0 -0
  461. /package/functions/{angular-fire-functions.d.ts → index.d.ts} +0 -0
  462. /package/{angular-fire.d.ts → index.d.ts} +0 -0
  463. /package/messaging/{angular-fire-messaging.d.ts → index.d.ts} +0 -0
  464. /package/performance/{angular-fire-performance.d.ts → index.d.ts} +0 -0
  465. /package/remote-config/{angular-fire-remote-config.d.ts → index.d.ts} +0 -0
  466. /package/storage/{angular-fire-storage.d.ts → index.d.ts} +0 -0
@@ -0,0 +1,4 @@
1
+ export declare const isAnalyticsSupportedFactory: {
2
+ async: () => any;
3
+ sync: () => any;
4
+ };
@@ -1,13 +1,7 @@
1
1
  import { AppCheck as FirebaseAppCheck } from 'firebase/app-check';
2
- export declare const APP_CHECK_PROVIDER_NAME = "app-check";
3
2
  export interface AppCheck extends FirebaseAppCheck {
4
3
  }
5
4
  export declare class AppCheck {
6
5
  constructor(appCheck: FirebaseAppCheck);
7
6
  }
8
- export interface AppCheckInstances extends Array<FirebaseAppCheck> {
9
- }
10
- export declare class AppCheckInstances {
11
- constructor();
12
- }
13
7
  export declare const appCheckInstance$: import("rxjs").Observable<FirebaseAppCheck>;
@@ -4,7 +4,6 @@ import { AppCheck } from './app-check';
4
4
  import { FirebaseApp } from '@angular/fire/app';
5
5
  import * as i0 from "@angular/core";
6
6
  export declare const PROVIDED_APP_CHECK_INSTANCES: InjectionToken<AppCheck[]>;
7
- export declare const APP_CHECK_NAMESPACE_SYMBOL: unique symbol;
8
7
  export declare function defaultAppCheckInstanceFactory(provided: FirebaseAppCheck[] | undefined, defaultApp: FirebaseApp): AppCheck;
9
8
  export declare function appCheckInstanceFactory(fn: (injector: Injector) => FirebaseAppCheck): (zone: NgZone, injector: Injector, platformId: Object) => AppCheck;
10
9
  export declare class AppCheckModule {
@@ -1,3 +1,4 @@
1
- export { AppCheck, AppCheckInstances, appCheckInstance$ } from './app-check';
1
+ export { AppCheck, appCheckInstance$ } from './app-check';
2
+ export { ɵAppCheckInstances as AppCheckInstances } from '@angular/fire';
2
3
  export { provideAppCheck, AppCheckModule } from './app-check.module';
3
4
  export * from './firebase';
@@ -3,8 +3,8 @@ import { Observable, UnaryFunction } from 'rxjs';
3
3
  import { Auth } from '@angular/fire/auth';
4
4
  import { User } from 'firebase/auth';
5
5
  import * as i0 from "@angular/core";
6
- export declare type AuthPipeGenerator = (next: ActivatedRouteSnapshot, state: RouterStateSnapshot) => AuthPipe;
7
- export declare type AuthPipe = UnaryFunction<Observable<User | null>, Observable<boolean | string | any[]>>;
6
+ export type AuthPipeGenerator = (next: ActivatedRouteSnapshot, state: RouterStateSnapshot) => AuthPipe;
7
+ export type AuthPipe = UnaryFunction<Observable<User | null>, Observable<boolean | string | any[]>>;
8
8
  export declare const loggedIn: AuthPipe;
9
9
  export declare class AuthGuard implements CanActivate {
10
10
  private router;
@@ -21,9 +21,9 @@ export declare const canActivate: (pipe: AuthPipeGenerator) => {
21
21
  };
22
22
  };
23
23
  export declare const isNotAnonymous: AuthPipe;
24
- export declare const idTokenResult: import("rxjs").OperatorFunction<User, any>;
24
+ export declare const idTokenResult: import("rxjs").OperatorFunction<User, import("@firebase/auth").IdTokenResult>;
25
25
  export declare const emailVerified: AuthPipe;
26
- export declare const customClaims: UnaryFunction<Observable<User>, Observable<any>>;
26
+ export declare const customClaims: UnaryFunction<Observable<User>, Observable<any[] | import("@firebase/auth").ParsedToken>>;
27
27
  export declare const hasCustomClaim: (claim: string) => AuthPipe;
28
28
  export declare const redirectUnauthorizedTo: (redirect: string | any[]) => AuthPipe;
29
29
  export declare const redirectLoggedInTo: (redirect: string | any[]) => AuthPipe;
@@ -9,7 +9,7 @@ import { AppCheckInstances } from '@angular/fire/app-check';
9
9
  import * as i0 from "@angular/core";
10
10
  export interface AngularFireAuth extends ɵPromiseProxy<firebase.auth.Auth> {
11
11
  }
12
- declare type UseEmulatorArguments = Parameters<firebase.auth.Auth['useEmulator']>;
12
+ type UseEmulatorArguments = Parameters<firebase.auth.Auth['useEmulator']>;
13
13
  export declare const USE_EMULATOR: InjectionToken<[url: string]>;
14
14
  export declare const SETTINGS: InjectionToken<firebase.auth.AuthSettings>;
15
15
  export declare const TENANT_ID: InjectionToken<string>;
@@ -3,8 +3,8 @@ import { Observable, UnaryFunction } from 'rxjs';
3
3
  import firebase from 'firebase/compat/app';
4
4
  import { AngularFireAuth } from '@angular/fire/compat/auth';
5
5
  import * as i0 from "@angular/core";
6
- export declare type AuthPipeGenerator = (next: ActivatedRouteSnapshot, state: RouterStateSnapshot) => AuthPipe;
7
- export declare type AuthPipe = UnaryFunction<Observable<firebase.User | null>, Observable<boolean | string | any[]>>;
6
+ export type AuthPipeGenerator = (next: ActivatedRouteSnapshot, state: RouterStateSnapshot) => AuthPipe;
7
+ export type AuthPipe = UnaryFunction<Observable<firebase.User | null>, Observable<boolean | string | any[]>>;
8
8
  export declare const loggedIn: AuthPipe;
9
9
  export declare class AngularFireAuthGuard implements CanActivate {
10
10
  private router;
@@ -21,9 +21,11 @@ export declare const canActivate: (pipe: AuthPipeGenerator) => {
21
21
  };
22
22
  };
23
23
  export declare const isNotAnonymous: AuthPipe;
24
- export declare const idTokenResult: import("rxjs").OperatorFunction<firebase.User, any>;
24
+ export declare const idTokenResult: import("rxjs").OperatorFunction<firebase.User, firebase.auth.IdTokenResult>;
25
25
  export declare const emailVerified: AuthPipe;
26
- export declare const customClaims: UnaryFunction<Observable<firebase.User>, Observable<any>>;
26
+ export declare const customClaims: UnaryFunction<Observable<firebase.User>, Observable<any[] | {
27
+ [key: string]: any;
28
+ }>>;
27
29
  export declare const hasCustomClaim: (claim: string) => AuthPipe;
28
30
  export declare const redirectUnauthorizedTo: (redirect: string | any[]) => AuthPipe;
29
31
  export declare const redirectLoggedInTo: (redirect: string | any[]) => AuthPipe;
@@ -1,6 +1,6 @@
1
1
  import { Observable } from 'rxjs';
2
2
  import firebase from 'firebase/compat/app';
3
- export declare type FirebaseOperation = string | firebase.database.Reference | firebase.database.DataSnapshot;
3
+ export type FirebaseOperation = string | firebase.database.Reference | firebase.database.DataSnapshot;
4
4
  export interface AngularFireList<T> {
5
5
  query: DatabaseQuery;
6
6
  valueChanges(events?: ChildEvent[], options?: {}): Observable<T[]>;
@@ -31,9 +31,9 @@ export interface FirebaseOperationCases {
31
31
  snapshotCase?: () => Promise<void>;
32
32
  unwrappedSnapshotCase?: () => Promise<void>;
33
33
  }
34
- export declare type QueryFn = (ref: DatabaseReference) => DatabaseQuery;
35
- export declare type ChildEvent = 'child_added' | 'child_removed' | 'child_changed' | 'child_moved';
36
- export declare type ListenEvent = 'value' | ChildEvent;
34
+ export type QueryFn = (ref: DatabaseReference) => DatabaseQuery;
35
+ export type ChildEvent = 'child_added' | 'child_removed' | 'child_changed' | 'child_moved';
36
+ export type ListenEvent = 'value' | ChildEvent;
37
37
  export interface Action<T> {
38
38
  type: ListenEvent;
39
39
  payload: T;
@@ -42,8 +42,8 @@ export interface AngularFireAction<T> extends Action<T> {
42
42
  prevKey: string | null | undefined;
43
43
  key: string | null;
44
44
  }
45
- export declare type SnapshotAction<T> = AngularFireAction<DatabaseSnapshot<T>>;
46
- export declare type Primitive = number | string | boolean;
45
+ export type SnapshotAction<T> = AngularFireAction<DatabaseSnapshot<T>>;
46
+ export type Primitive = number | string | boolean;
47
47
  export interface DatabaseSnapshotExists<T> extends firebase.database.DataSnapshot {
48
48
  exists(): true;
49
49
  val(): T;
@@ -54,9 +54,9 @@ export interface DatabaseSnapshotDoesNotExist<T> extends firebase.database.DataS
54
54
  val(): null;
55
55
  forEach(action: (a: DatabaseSnapshot<T>) => boolean): boolean;
56
56
  }
57
- export declare type DatabaseSnapshot<T> = DatabaseSnapshotExists<T> | DatabaseSnapshotDoesNotExist<T>;
58
- export declare type DatabaseReference = firebase.database.Reference;
59
- export declare type DatabaseQuery = firebase.database.Query;
60
- export declare type DataSnapshot = firebase.database.DataSnapshot;
61
- export declare type QueryReference = DatabaseReference | DatabaseQuery;
62
- export declare type PathReference = QueryReference | string;
57
+ export type DatabaseSnapshot<T> = DatabaseSnapshotExists<T> | DatabaseSnapshotDoesNotExist<T>;
58
+ export type DatabaseReference = firebase.database.Reference;
59
+ export type DatabaseQuery = firebase.database.Query;
60
+ export type DataSnapshot = firebase.database.DataSnapshot;
61
+ export type QueryReference = DatabaseReference | DatabaseQuery;
62
+ export type PathReference = QueryReference | string;
@@ -1,16 +1,16 @@
1
1
  import { Subscriber } from 'rxjs';
2
2
  import firebase from 'firebase/compat/app';
3
- export declare type Settings = firebase.firestore.Settings;
4
- export declare type CollectionReference<T = DocumentData> = firebase.firestore.CollectionReference<T>;
5
- export declare type DocumentReference<T = DocumentData> = firebase.firestore.DocumentReference<T>;
6
- export declare type PersistenceSettings = firebase.firestore.PersistenceSettings;
7
- export declare type DocumentChangeType = firebase.firestore.DocumentChangeType;
8
- export declare type SnapshotOptions = firebase.firestore.SnapshotOptions;
9
- export declare type FieldPath = firebase.firestore.FieldPath;
10
- export declare type Query<T = DocumentData> = firebase.firestore.Query<T>;
11
- export declare type SetOptions = firebase.firestore.SetOptions;
12
- export declare type DocumentData = firebase.firestore.DocumentData;
13
- export interface DocumentSnapshotExists<T> extends firebase.firestore.DocumentSnapshot {
3
+ export type Settings = firebase.firestore.Settings;
4
+ export type CollectionReference<T = DocumentData> = firebase.firestore.CollectionReference<T>;
5
+ export type DocumentReference<T = DocumentData> = firebase.firestore.DocumentReference<T>;
6
+ export type PersistenceSettings = firebase.firestore.PersistenceSettings;
7
+ export type DocumentChangeType = firebase.firestore.DocumentChangeType;
8
+ export type SnapshotOptions = firebase.firestore.SnapshotOptions;
9
+ export type FieldPath = firebase.firestore.FieldPath;
10
+ export type Query<T = DocumentData> = firebase.firestore.Query<T>;
11
+ export type SetOptions = firebase.firestore.SetOptions;
12
+ export type DocumentData = firebase.firestore.DocumentData;
13
+ export interface DocumentSnapshotExists<T> extends firebase.firestore.DocumentSnapshot<T> {
14
14
  readonly exists: true;
15
15
  data(options?: SnapshotOptions): T;
16
16
  }
@@ -19,14 +19,14 @@ export interface DocumentSnapshotDoesNotExist extends firebase.firestore.Documen
19
19
  data(options?: SnapshotOptions): undefined;
20
20
  get(fieldPath: string | FieldPath, options?: SnapshotOptions): undefined;
21
21
  }
22
- export declare type DocumentSnapshot<T> = DocumentSnapshotExists<T> | DocumentSnapshotDoesNotExist;
23
- export interface QueryDocumentSnapshot<T> extends firebase.firestore.QueryDocumentSnapshot {
22
+ export type DocumentSnapshot<T> = DocumentSnapshotExists<T> | DocumentSnapshotDoesNotExist;
23
+ export interface QueryDocumentSnapshot<T> extends firebase.firestore.QueryDocumentSnapshot<T> {
24
24
  data(options?: SnapshotOptions): T;
25
25
  }
26
- export interface QuerySnapshot<T> extends firebase.firestore.QuerySnapshot {
26
+ export interface QuerySnapshot<T> extends firebase.firestore.QuerySnapshot<T> {
27
27
  readonly docs: QueryDocumentSnapshot<T>[];
28
28
  }
29
- export interface DocumentChange<T> extends firebase.firestore.DocumentChange {
29
+ export interface DocumentChange<T> extends firebase.firestore.DocumentChange<T> {
30
30
  readonly doc: QueryDocumentSnapshot<T>;
31
31
  }
32
32
  export interface DocumentChangeAction<T> {
@@ -40,8 +40,8 @@ export interface Action<T> {
40
40
  export interface Reference<T> {
41
41
  onSnapshot: (options: firebase.firestore.SnapshotListenOptions, sub: Subscriber<any>) => any;
42
42
  }
43
- export declare type QueryFn<T = DocumentData> = (ref: CollectionReference<T>) => Query<T>;
44
- export declare type QueryGroupFn<T = DocumentData> = (query: Query<T>) => Query<T>;
43
+ export type QueryFn<T = DocumentData> = (ref: CollectionReference<T>) => Query<T>;
44
+ export type QueryGroupFn<T = DocumentData> = (query: Query<T>) => Query<T>;
45
45
  /**
46
46
  * A structure that provides an association between a reference
47
47
  * and a query on that reference. Note: Performing operations
package/compat/proxy.d.ts CHANGED
@@ -1,21 +1,21 @@
1
1
  import { NgZone } from '@angular/core';
2
2
  import { Observable } from 'rxjs';
3
- declare type MyFunction = (...args: any[]) => any;
4
- declare type FunctionPropertyNames<T> = {
3
+ type MyFunction = (...args: any[]) => any;
4
+ type FunctionPropertyNames<T> = {
5
5
  [K in keyof T]: T[K] extends MyFunction ? K : never;
6
6
  }[keyof T];
7
- declare type ReturnTypeOrNever<T> = T extends MyFunction ? ReturnType<T> : never;
8
- declare type ParametersOrNever<T> = T extends MyFunction ? Parameters<T> : never;
9
- declare type PromiseReturningFunctionPropertyNames<T> = {
7
+ type ReturnTypeOrNever<T> = T extends MyFunction ? ReturnType<T> : never;
8
+ type ParametersOrNever<T> = T extends MyFunction ? Parameters<T> : never;
9
+ type PromiseReturningFunctionPropertyNames<T> = {
10
10
  [K in FunctionPropertyNames<T>]: ReturnTypeOrNever<T[K]> extends Promise<any> ? K : never;
11
11
  }[FunctionPropertyNames<T>];
12
- declare type NonPromiseReturningFunctionPropertyNames<T> = {
12
+ type NonPromiseReturningFunctionPropertyNames<T> = {
13
13
  [K in FunctionPropertyNames<T>]: ReturnTypeOrNever<T[K]> extends Promise<any> ? never : K;
14
14
  }[FunctionPropertyNames<T>];
15
- declare type NonFunctionPropertyNames<T> = {
15
+ type NonFunctionPropertyNames<T> = {
16
16
  [K in keyof T]: T[K] extends MyFunction ? never : K;
17
17
  }[keyof T];
18
- export declare type ɵPromiseProxy<T> = {
18
+ export type ɵPromiseProxy<T> = {
19
19
  [K in NonFunctionPropertyNames<T>]: Promise<T[K]>;
20
20
  } & {
21
21
  [K in NonPromiseReturningFunctionPropertyNames<T>]: (...args: ParametersOrNever<T[K]>) => Promise<ReturnTypeOrNever<T[K]>>;
@@ -1,2 +1,2 @@
1
1
  import firebase from 'firebase/compat/app';
2
- export declare type Settings = firebase.remoteConfig.Settings;
2
+ export type Settings = firebase.remoteConfig.Settings;
@@ -1,9 +1,9 @@
1
1
  import firebase from 'firebase/compat/app';
2
- export declare type UploadTask = firebase.storage.UploadTask;
3
- export declare type UploadTaskSnapshot = firebase.storage.UploadTaskSnapshot;
4
- export declare type UploadMetadata = firebase.storage.UploadMetadata;
5
- export declare type SettableMetadata = firebase.storage.SettableMetadata;
6
- export declare type Reference = firebase.storage.Reference;
7
- export declare type StringFormat = firebase.storage.StringFormat;
8
- export declare type ListResult = firebase.storage.ListResult;
9
- export declare type ListOptions = firebase.storage.ListOptions;
2
+ export type UploadTask = firebase.storage.UploadTask;
3
+ export type UploadTaskSnapshot = firebase.storage.UploadTaskSnapshot;
4
+ export type UploadMetadata = firebase.storage.UploadMetadata;
5
+ export type SettableMetadata = firebase.storage.SettableMetadata;
6
+ export type Reference = firebase.storage.Reference;
7
+ export type StringFormat = firebase.storage.StringFormat;
8
+ export type ListResult = firebase.storage.ListResult;
9
+ export type ListOptions = firebase.storage.ListOptions;
@@ -13,7 +13,7 @@ export declare class GetDownloadURLPipe implements PipeTransform, OnDestroy {
13
13
  transform(path: string): any;
14
14
  ngOnDestroy(): void;
15
15
  static ɵfac: i0.ɵɵFactoryDeclaration<GetDownloadURLPipe, [null, null, { optional: true; }]>;
16
- static ɵpipe: i0.ɵɵPipeDeclaration<GetDownloadURLPipe, "getDownloadURL">;
16
+ static ɵpipe: i0.ɵɵPipeDeclaration<GetDownloadURLPipe, "getDownloadURL", false>;
17
17
  }
18
18
  export declare class GetDownloadURLPipeModule {
19
19
  static ɵfac: i0.ɵɵFactoryDeclaration<GetDownloadURLPipeModule, never>;
package/core.d.ts CHANGED
@@ -1,17 +1,13 @@
1
1
  import { Version } from '@angular/core';
2
2
  import { FirebaseApp } from 'firebase/app';
3
+ import type { AppCheck } from 'firebase/app-check';
3
4
  export declare const VERSION: Version;
4
- export declare const ɵisMessagingSupportedFactory: {
5
- async: () => any;
6
- sync: () => any;
7
- };
8
- export declare const ɵisRemoteConfigSupportedFactory: {
9
- async: () => any;
10
- sync: () => any;
11
- };
12
- export declare const ɵisAnalyticsSupportedFactory: {
13
- async: () => any;
14
- sync: () => any;
15
- };
5
+ export declare const ɵisSupportedError: (module: string) => string;
16
6
  export declare function ɵgetDefaultInstanceOf<T = unknown>(identifier: string, provided: T[] | undefined, defaultApp: FirebaseApp): T | undefined;
17
7
  export declare const ɵgetAllInstancesOf: <T = unknown>(identifier: string, app?: FirebaseApp) => T[];
8
+ export interface ɵAppCheckInstances extends Array<AppCheck> {
9
+ }
10
+ export declare class ɵAppCheckInstances {
11
+ constructor();
12
+ }
13
+ export declare const ɵAPP_CHECK_PROVIDER_NAME = "app-check";
@@ -0,0 +1,94 @@
1
+ import { NgModule, Optional, NgZone, InjectionToken, APP_INITIALIZER, Injector } from '@angular/core';
2
+ import { ɵgetDefaultInstanceOf, ɵAngularFireSchedulers, VERSION } from '@angular/fire';
3
+ import { Analytics, ANALYTICS_PROVIDER_NAME, AnalyticsInstances } from './analytics';
4
+ import { FirebaseApps, FirebaseApp } from '@angular/fire/app';
5
+ import { registerVersion } from 'firebase/app';
6
+ import { ScreenTrackingService } from './screen-tracking.service';
7
+ import { UserTrackingService } from './user-tracking.service';
8
+ import { isAnalyticsSupportedFactory } from './is-analytics-supported-factory';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "./screen-tracking.service";
11
+ import * as i2 from "./user-tracking.service";
12
+ export const PROVIDED_ANALYTICS_INSTANCES = new InjectionToken('angularfire2.analytics-instances');
13
+ export function defaultAnalyticsInstanceFactory(provided, defaultApp) {
14
+ if (!isAnalyticsSupportedFactory.sync()) {
15
+ return null;
16
+ }
17
+ const defaultAnalytics = ɵgetDefaultInstanceOf(ANALYTICS_PROVIDER_NAME, provided, defaultApp);
18
+ return defaultAnalytics && new Analytics(defaultAnalytics);
19
+ }
20
+ export function analyticsInstanceFactory(fn) {
21
+ return (zone, injector) => {
22
+ if (!isAnalyticsSupportedFactory.sync()) {
23
+ return null;
24
+ }
25
+ const analytics = zone.runOutsideAngular(() => fn(injector));
26
+ return new Analytics(analytics);
27
+ };
28
+ }
29
+ const ANALYTICS_INSTANCES_PROVIDER = {
30
+ provide: AnalyticsInstances,
31
+ deps: [
32
+ [new Optional(), PROVIDED_ANALYTICS_INSTANCES],
33
+ ]
34
+ };
35
+ const DEFAULT_ANALYTICS_INSTANCE_PROVIDER = {
36
+ provide: Analytics,
37
+ useFactory: defaultAnalyticsInstanceFactory,
38
+ deps: [
39
+ [new Optional(), PROVIDED_ANALYTICS_INSTANCES],
40
+ FirebaseApp,
41
+ ]
42
+ };
43
+ export class AnalyticsModule {
44
+ constructor(_screenTrackingService, _userTrackingService) {
45
+ registerVersion('angularfire', VERSION.full, 'analytics');
46
+ }
47
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: AnalyticsModule, deps: [{ token: i1.ScreenTrackingService, optional: true }, { token: i2.UserTrackingService, optional: true }], target: i0.ɵɵFactoryTarget.NgModule });
48
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.3", ngImport: i0, type: AnalyticsModule });
49
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: AnalyticsModule, providers: [
50
+ DEFAULT_ANALYTICS_INSTANCE_PROVIDER,
51
+ ANALYTICS_INSTANCES_PROVIDER,
52
+ {
53
+ provide: APP_INITIALIZER,
54
+ useValue: isAnalyticsSupportedFactory.async,
55
+ multi: true,
56
+ }
57
+ ] });
58
+ }
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: AnalyticsModule, decorators: [{
60
+ type: NgModule,
61
+ args: [{
62
+ providers: [
63
+ DEFAULT_ANALYTICS_INSTANCE_PROVIDER,
64
+ ANALYTICS_INSTANCES_PROVIDER,
65
+ {
66
+ provide: APP_INITIALIZER,
67
+ useValue: isAnalyticsSupportedFactory.async,
68
+ multi: true,
69
+ }
70
+ ]
71
+ }]
72
+ }], ctorParameters: function () { return [{ type: i1.ScreenTrackingService, decorators: [{
73
+ type: Optional
74
+ }] }, { type: i2.UserTrackingService, decorators: [{
75
+ type: Optional
76
+ }] }]; } });
77
+ export function provideAnalytics(fn, ...deps) {
78
+ return {
79
+ ngModule: AnalyticsModule,
80
+ providers: [{
81
+ provide: PROVIDED_ANALYTICS_INSTANCES,
82
+ useFactory: analyticsInstanceFactory(fn),
83
+ multi: true,
84
+ deps: [
85
+ NgZone,
86
+ Injector,
87
+ ɵAngularFireSchedulers,
88
+ FirebaseApps,
89
+ ...deps,
90
+ ]
91
+ }]
92
+ };
93
+ }
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hbmFseXRpY3MvYW5hbHl0aWNzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUF1QixlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFFLFNBQVMsRUFBRSx1QkFBdUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyRixPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7QUFFL0UsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxjQUFjLENBQWMsa0NBQWtDLENBQUMsQ0FBQztBQUVoSCxNQUFNLFVBQVUsK0JBQStCLENBQUMsUUFBdUMsRUFBRSxVQUF1QjtJQUM5RyxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFBRSxPQUFPLElBQUksQ0FBQztLQUFFO0lBQ3pELE1BQU0sZ0JBQWdCLEdBQUcscUJBQXFCLENBQW9CLHVCQUF1QixFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNqSCxPQUFPLGdCQUFnQixJQUFJLElBQUksU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVELE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxFQUE2QztJQUNwRixPQUFPLENBQUMsSUFBWSxFQUFFLFFBQWtCLEVBQUUsRUFBRTtRQUMxQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFBRSxPQUFPLElBQUksQ0FBQztTQUFFO1FBQ3pELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUM3RCxPQUFPLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLDRCQUE0QixHQUFHO0lBQ25DLE9BQU8sRUFBRSxrQkFBa0I7SUFDM0IsSUFBSSxFQUFFO1FBQ0osQ0FBQyxJQUFJLFFBQVEsRUFBRSxFQUFFLDRCQUE0QixDQUFFO0tBQ2hEO0NBQ0YsQ0FBQztBQUVGLE1BQU0sbUNBQW1DLEdBQUc7SUFDMUMsT0FBTyxFQUFFLFNBQVM7SUFDbEIsVUFBVSxFQUFFLCtCQUErQjtJQUMzQyxJQUFJLEVBQUU7UUFDSixDQUFDLElBQUksUUFBUSxFQUFFLEVBQUUsNEJBQTRCLENBQUU7UUFDL0MsV0FBVztLQUNaO0NBQ0YsQ0FBQztBQWFGLE1BQU0sT0FBTyxlQUFlO0lBQzFCLFlBQ2Msc0JBQTZDLEVBQzdDLG9CQUF5QztRQUVyRCxlQUFlLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDNUQsQ0FBQzt1R0FOVSxlQUFlO3dHQUFmLGVBQWU7d0dBQWYsZUFBZSxhQVZmO1lBQ1QsbUNBQW1DO1lBQ25DLDRCQUE0QjtZQUM1QjtnQkFDRSxPQUFPLEVBQUUsZUFBZTtnQkFDeEIsUUFBUSxFQUFFLDJCQUEyQixDQUFDLEtBQUs7Z0JBQzNDLEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRjs7MkZBRVUsZUFBZTtrQkFYM0IsUUFBUTttQkFBQztvQkFDUixTQUFTLEVBQUU7d0JBQ1QsbUNBQW1DO3dCQUNuQyw0QkFBNEI7d0JBQzVCOzRCQUNFLE9BQU8sRUFBRSxlQUFlOzRCQUN4QixRQUFRLEVBQUUsMkJBQTJCLENBQUMsS0FBSzs0QkFDM0MsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUJBQ0Y7OzBCQUdJLFFBQVE7OzBCQUNSLFFBQVE7O0FBTWIsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEVBQTZDLEVBQUUsR0FBRyxJQUFXO0lBQzVGLE9BQU87UUFDTCxRQUFRLEVBQUUsZUFBZTtRQUN6QixTQUFTLEVBQUUsQ0FBQztnQkFDVixPQUFPLEVBQUUsNEJBQTRCO2dCQUNyQyxVQUFVLEVBQUUsd0JBQXdCLENBQUMsRUFBRSxDQUFDO2dCQUN4QyxLQUFLLEVBQUUsSUFBSTtnQkFDWCxJQUFJLEVBQUU7b0JBQ0osTUFBTTtvQkFDTixRQUFRO29CQUNSLHNCQUFzQjtvQkFDdEIsWUFBWTtvQkFDWixHQUFHLElBQUk7aUJBQ1I7YUFDRixDQUFDO0tBQ0gsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSwgT3B0aW9uYWwsIE5nWm9uZSwgSW5qZWN0aW9uVG9rZW4sIE1vZHVsZVdpdGhQcm92aWRlcnMsIEFQUF9JTklUSUFMSVpFUiwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFuYWx5dGljcyBhcyBGaXJlYmFzZUFuYWx5dGljcyB9IGZyb20gJ2ZpcmViYXNlL2FuYWx5dGljcyc7XG5pbXBvcnQgeyDJtWdldERlZmF1bHRJbnN0YW5jZU9mLCDJtUFuZ3VsYXJGaXJlU2NoZWR1bGVycywgVkVSU0lPTiB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUnO1xuaW1wb3J0IHsgQW5hbHl0aWNzLCBBTkFMWVRJQ1NfUFJPVklERVJfTkFNRSwgQW5hbHl0aWNzSW5zdGFuY2VzIH0gZnJvbSAnLi9hbmFseXRpY3MnO1xuaW1wb3J0IHsgRmlyZWJhc2VBcHBzLCBGaXJlYmFzZUFwcCB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvYXBwJztcbmltcG9ydCB7IHJlZ2lzdGVyVmVyc2lvbiB9IGZyb20gJ2ZpcmViYXNlL2FwcCc7XG5pbXBvcnQgeyBTY3JlZW5UcmFja2luZ1NlcnZpY2UgfSBmcm9tICcuL3NjcmVlbi10cmFja2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJUcmFja2luZ1NlcnZpY2UgfSBmcm9tICcuL3VzZXItdHJhY2tpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBpc0FuYWx5dGljc1N1cHBvcnRlZEZhY3RvcnkgfSBmcm9tICcuL2lzLWFuYWx5dGljcy1zdXBwb3J0ZWQtZmFjdG9yeSc7XG5cbmV4cG9ydCBjb25zdCBQUk9WSURFRF9BTkFMWVRJQ1NfSU5TVEFOQ0VTID0gbmV3IEluamVjdGlvblRva2VuPEFuYWx5dGljc1tdPignYW5ndWxhcmZpcmUyLmFuYWx5dGljcy1pbnN0YW5jZXMnKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRBbmFseXRpY3NJbnN0YW5jZUZhY3RvcnkocHJvdmlkZWQ6IEZpcmViYXNlQW5hbHl0aWNzW118dW5kZWZpbmVkLCBkZWZhdWx0QXBwOiBGaXJlYmFzZUFwcCkge1xuICBpZiAoIWlzQW5hbHl0aWNzU3VwcG9ydGVkRmFjdG9yeS5zeW5jKCkpIHsgcmV0dXJuIG51bGw7IH1cbiAgY29uc3QgZGVmYXVsdEFuYWx5dGljcyA9IMm1Z2V0RGVmYXVsdEluc3RhbmNlT2Y8RmlyZWJhc2VBbmFseXRpY3M+KEFOQUxZVElDU19QUk9WSURFUl9OQU1FLCBwcm92aWRlZCwgZGVmYXVsdEFwcCk7XG4gIHJldHVybiBkZWZhdWx0QW5hbHl0aWNzICYmIG5ldyBBbmFseXRpY3MoZGVmYXVsdEFuYWx5dGljcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbmFseXRpY3NJbnN0YW5jZUZhY3RvcnkoZm46IChpbmplY3RvcjogSW5qZWN0b3IpID0+IEZpcmViYXNlQW5hbHl0aWNzKSB7XG4gIHJldHVybiAoem9uZTogTmdab25lLCBpbmplY3RvcjogSW5qZWN0b3IpID0+IHtcbiAgICBpZiAoIWlzQW5hbHl0aWNzU3VwcG9ydGVkRmFjdG9yeS5zeW5jKCkpIHsgcmV0dXJuIG51bGw7IH1cbiAgICBjb25zdCBhbmFseXRpY3MgPSB6b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IGZuKGluamVjdG9yKSk7XG4gICAgcmV0dXJuIG5ldyBBbmFseXRpY3MoYW5hbHl0aWNzKTtcbiAgfTtcbn1cblxuY29uc3QgQU5BTFlUSUNTX0lOU1RBTkNFU19QUk9WSURFUiA9IHtcbiAgcHJvdmlkZTogQW5hbHl0aWNzSW5zdGFuY2VzLFxuICBkZXBzOiBbXG4gICAgW25ldyBPcHRpb25hbCgpLCBQUk9WSURFRF9BTkFMWVRJQ1NfSU5TVEFOQ0VTIF0sXG4gIF1cbn07XG5cbmNvbnN0IERFRkFVTFRfQU5BTFlUSUNTX0lOU1RBTkNFX1BST1ZJREVSID0ge1xuICBwcm92aWRlOiBBbmFseXRpY3MsXG4gIHVzZUZhY3Rvcnk6IGRlZmF1bHRBbmFseXRpY3NJbnN0YW5jZUZhY3RvcnksXG4gIGRlcHM6IFtcbiAgICBbbmV3IE9wdGlvbmFsKCksIFBST1ZJREVEX0FOQUxZVElDU19JTlNUQU5DRVMgXSxcbiAgICBGaXJlYmFzZUFwcCxcbiAgXVxufTtcblxuQE5nTW9kdWxlKHtcbiAgcHJvdmlkZXJzOiBbXG4gICAgREVGQVVMVF9BTkFMWVRJQ1NfSU5TVEFOQ0VfUFJPVklERVIsXG4gICAgQU5BTFlUSUNTX0lOU1RBTkNFU19QUk9WSURFUixcbiAgICB7XG4gICAgICBwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsXG4gICAgICB1c2VWYWx1ZTogaXNBbmFseXRpY3NTdXBwb3J0ZWRGYWN0b3J5LmFzeW5jLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEFuYWx5dGljc01vZHVsZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIF9zY3JlZW5UcmFja2luZ1NlcnZpY2U6IFNjcmVlblRyYWNraW5nU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBfdXNlclRyYWNraW5nU2VydmljZTogVXNlclRyYWNraW5nU2VydmljZSxcbiAgKSB7XG4gICAgcmVnaXN0ZXJWZXJzaW9uKCdhbmd1bGFyZmlyZScsIFZFUlNJT04uZnVsbCwgJ2FuYWx5dGljcycpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQW5hbHl0aWNzKGZuOiAoaW5qZWN0b3I6IEluamVjdG9yKSA9PiBGaXJlYmFzZUFuYWx5dGljcywgLi4uZGVwczogYW55W10pOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEFuYWx5dGljc01vZHVsZT4ge1xuICByZXR1cm4ge1xuICAgIG5nTW9kdWxlOiBBbmFseXRpY3NNb2R1bGUsXG4gICAgcHJvdmlkZXJzOiBbe1xuICAgICAgcHJvdmlkZTogUFJPVklERURfQU5BTFlUSUNTX0lOU1RBTkNFUyxcbiAgICAgIHVzZUZhY3Rvcnk6IGFuYWx5dGljc0luc3RhbmNlRmFjdG9yeShmbiksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIGRlcHM6IFtcbiAgICAgICAgTmdab25lLFxuICAgICAgICBJbmplY3RvcixcbiAgICAgICAgybVBbmd1bGFyRmlyZVNjaGVkdWxlcnMsXG4gICAgICAgIEZpcmViYXNlQXBwcyxcbiAgICAgICAgLi4uZGVwcyxcbiAgICAgIF1cbiAgICB9XVxuICB9O1xufVxuIl19
@@ -0,0 +1,16 @@
1
+ import { ɵisSupportedError } from '@angular/fire';
2
+ import { isSupported } from 'firebase/analytics';
3
+ const isAnalyticsSupportedValueSymbol = '__angularfire_symbol__analyticsIsSupportedValue';
4
+ const isAnalyticsSupportedPromiseSymbol = '__angularfire_symbol__analyticsIsSupported';
5
+ globalThis[isAnalyticsSupportedPromiseSymbol] ||= isSupported().then(it => globalThis[isAnalyticsSupportedValueSymbol] = it).catch(() => globalThis[isAnalyticsSupportedValueSymbol] = false);
6
+ export const isAnalyticsSupportedFactory = {
7
+ async: () => globalThis[isAnalyticsSupportedPromiseSymbol],
8
+ sync: () => {
9
+ const ret = globalThis[isAnalyticsSupportedValueSymbol];
10
+ if (ret === undefined) {
11
+ throw new Error(ɵisSupportedError('Analytics'));
12
+ }
13
+ return ret;
14
+ }
15
+ };
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtYW5hbHl0aWNzLXN1cHBvcnRlZC1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FuYWx5dGljcy9pcy1hbmFseXRpY3Mtc3VwcG9ydGVkLWZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVqRCxNQUFNLCtCQUErQixHQUFHLGlEQUFpRCxDQUFDO0FBQzFGLE1BQU0saUNBQWlDLEdBQUcsNENBQTRDLENBQUM7QUFFdkYsVUFBVSxDQUFDLGlDQUFpQyxDQUFDLEtBQUssV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQ3hFLFVBQVUsQ0FBQywrQkFBK0IsQ0FBQyxHQUFHLEVBQUUsQ0FDakQsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQ1gsVUFBVSxDQUFDLCtCQUErQixDQUFDLEdBQUcsS0FBSyxDQUNwRCxDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUc7SUFDekMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxpQ0FBaUMsQ0FBQztJQUMxRCxJQUFJLEVBQUUsR0FBRyxFQUFFO1FBQ1QsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDeEQsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1NBQUU7UUFDM0UsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IMm1aXNTdXBwb3J0ZWRFcnJvciB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUnO1xuaW1wb3J0IHsgaXNTdXBwb3J0ZWQgfSBmcm9tICdmaXJlYmFzZS9hbmFseXRpY3MnO1xuXG5jb25zdCBpc0FuYWx5dGljc1N1cHBvcnRlZFZhbHVlU3ltYm9sID0gJ19fYW5ndWxhcmZpcmVfc3ltYm9sX19hbmFseXRpY3NJc1N1cHBvcnRlZFZhbHVlJztcbmNvbnN0IGlzQW5hbHl0aWNzU3VwcG9ydGVkUHJvbWlzZVN5bWJvbCA9ICdfX2FuZ3VsYXJmaXJlX3N5bWJvbF9fYW5hbHl0aWNzSXNTdXBwb3J0ZWQnO1xuXG5nbG9iYWxUaGlzW2lzQW5hbHl0aWNzU3VwcG9ydGVkUHJvbWlzZVN5bWJvbF0gfHw9IGlzU3VwcG9ydGVkKCkudGhlbihpdCA9PlxuICBnbG9iYWxUaGlzW2lzQW5hbHl0aWNzU3VwcG9ydGVkVmFsdWVTeW1ib2xdID0gaXRcbikuY2F0Y2goKCkgPT5cbiAgZ2xvYmFsVGhpc1tpc0FuYWx5dGljc1N1cHBvcnRlZFZhbHVlU3ltYm9sXSA9IGZhbHNlXG4pO1xuZXhwb3J0IGNvbnN0IGlzQW5hbHl0aWNzU3VwcG9ydGVkRmFjdG9yeSA9IHtcbiAgYXN5bmM6ICgpID0+IGdsb2JhbFRoaXNbaXNBbmFseXRpY3NTdXBwb3J0ZWRQcm9taXNlU3ltYm9sXSxcbiAgc3luYzogKCkgPT4ge1xuICAgIGNvbnN0IHJldCA9IGdsb2JhbFRoaXNbaXNBbmFseXRpY3NTdXBwb3J0ZWRWYWx1ZVN5bWJvbF07XG4gICAgaWYgKHJldCA9PT0gdW5kZWZpbmVkKSB7IHRocm93IG5ldyBFcnJvcijJtWlzU3VwcG9ydGVkRXJyb3IoJ0FuYWx5dGljcycpKTsgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cbn07XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import { isAnalyticsSupportedFactory } from './is-analytics-supported-factory';
2
+ export const isSupported = isAnalyticsSupportedFactory.async;
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcnJpZGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FuYWx5dGljcy9vdmVycmlkZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFL0UsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLDJCQUEyQixDQUFDLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzQW5hbHl0aWNzU3VwcG9ydGVkRmFjdG9yeSB9IGZyb20gJy4vaXMtYW5hbHl0aWNzLXN1cHBvcnRlZC1mYWN0b3J5JztcblxuZXhwb3J0IGNvbnN0IGlzU3VwcG9ydGVkID0gaXNBbmFseXRpY3NTdXBwb3J0ZWRGYWN0b3J5LmFzeW5jO1xuXG4iXX0=
@@ -0,0 +1,147 @@
1
+ import { ComponentFactoryResolver, Injectable, NgZone, Optional, Injector } from '@angular/core';
2
+ import { of } from 'rxjs';
3
+ import { distinctUntilChanged, filter, groupBy, map, mergeMap, pairwise, startWith, switchMap } from 'rxjs/operators';
4
+ import { ActivationEnd, Router, ɵEmptyOutletComponent } from '@angular/router';
5
+ import { Title } from '@angular/platform-browser';
6
+ import { VERSION } from '@angular/fire';
7
+ import { registerVersion } from 'firebase/app';
8
+ import { Analytics } from './analytics';
9
+ import { logEvent, isSupported } from './firebase';
10
+ import { UserTrackingService } from './user-tracking.service';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@angular/router";
13
+ import * as i2 from "@angular/platform-browser";
14
+ import * as i3 from "./user-tracking.service";
15
+ const FIREBASE_EVENT_ORIGIN_KEY = 'firebase_event_origin';
16
+ const FIREBASE_PREVIOUS_SCREEN_CLASS_KEY = 'firebase_previous_class';
17
+ const FIREBASE_PREVIOUS_SCREEN_INSTANCE_ID_KEY = 'firebase_previous_id';
18
+ const FIREBASE_PREVIOUS_SCREEN_NAME_KEY = 'firebase_previous_screen';
19
+ const FIREBASE_SCREEN_CLASS_KEY = 'firebase_screen_class';
20
+ const FIREBASE_SCREEN_INSTANCE_ID_KEY = 'firebase_screen_id';
21
+ const FIREBASE_SCREEN_NAME_KEY = 'firebase_screen';
22
+ const OUTLET_KEY = 'outlet';
23
+ const PAGE_PATH_KEY = 'page_path';
24
+ const PAGE_TITLE_KEY = 'page_title';
25
+ const SCREEN_CLASS_KEY = 'screen_class';
26
+ const SCREEN_NAME_KEY = 'screen_name';
27
+ const SCREEN_VIEW_EVENT = 'screen_view';
28
+ const EVENT_ORIGIN_AUTO = 'auto';
29
+ const SCREEN_INSTANCE_DELIMITER = '#';
30
+ // this is an INT64 in iOS/Android but use INT32 cause javascript
31
+ let nextScreenInstanceID = Math.floor(Math.random() * (2 ** 32 - 1)) - 2 ** 31;
32
+ const knownScreenInstanceIDs = {};
33
+ const getScreenInstanceID = (params) => {
34
+ // unique the screen class against the outlet name
35
+ const screenInstanceKey = [
36
+ params[SCREEN_CLASS_KEY],
37
+ params[OUTLET_KEY]
38
+ ].join(SCREEN_INSTANCE_DELIMITER);
39
+ if (knownScreenInstanceIDs.hasOwnProperty(screenInstanceKey)) {
40
+ return knownScreenInstanceIDs[screenInstanceKey];
41
+ }
42
+ else {
43
+ const ret = nextScreenInstanceID++;
44
+ knownScreenInstanceIDs[screenInstanceKey] = ret;
45
+ return ret;
46
+ }
47
+ };
48
+ export const ɵscreenViewEvent = (router, title, componentFactoryResolver) => {
49
+ const activationEndEvents = router.events.pipe(filter(e => e instanceof ActivationEnd));
50
+ return activationEndEvents.pipe(switchMap(activationEnd => {
51
+ // router parseUrl is having trouble with outlets when they're empty
52
+ // e.g, /asdf/1(bob://sally:asdf), so put another slash in when empty
53
+ const urlTree = router.parseUrl(router.url.replace(/(?:\().+(?:\))/g, a => a.replace('://', ':///')));
54
+ const pagePath = urlTree.root.children[activationEnd.snapshot.outlet]?.toString() || '';
55
+ const actualSnapshot = router.routerState.root.children.map(it => it).find(it => it.outlet === activationEnd.snapshot.outlet);
56
+ if (!actualSnapshot) {
57
+ return of(null);
58
+ }
59
+ let actualDeep = actualSnapshot;
60
+ while (actualDeep.firstChild) {
61
+ actualDeep = actualDeep.firstChild;
62
+ }
63
+ const screenName = actualDeep.pathFromRoot.map(s => s.routeConfig?.path).filter(it => it).join('/') || '/';
64
+ const params = {
65
+ [SCREEN_NAME_KEY]: screenName,
66
+ [PAGE_PATH_KEY]: `/${pagePath}`,
67
+ [FIREBASE_EVENT_ORIGIN_KEY]: EVENT_ORIGIN_AUTO,
68
+ [FIREBASE_SCREEN_NAME_KEY]: screenName,
69
+ [OUTLET_KEY]: activationEnd.snapshot.outlet
70
+ };
71
+ if (title) {
72
+ params[PAGE_TITLE_KEY] = title.getTitle();
73
+ }
74
+ let component = actualSnapshot.component;
75
+ if (component) {
76
+ if (component === ɵEmptyOutletComponent) {
77
+ let deepSnapshot = activationEnd.snapshot;
78
+ // TODO when might there be mutple children, different outlets? explore
79
+ while (deepSnapshot.firstChild) {
80
+ deepSnapshot = deepSnapshot.firstChild;
81
+ }
82
+ component = deepSnapshot.component;
83
+ }
84
+ }
85
+ else {
86
+ component = activationEnd.snapshot.component;
87
+ }
88
+ if (typeof component === 'string') {
89
+ return of({ ...params, [SCREEN_CLASS_KEY]: component });
90
+ }
91
+ else if (component) {
92
+ const componentFactory = componentFactoryResolver.resolveComponentFactory(component);
93
+ return of({ ...params, [SCREEN_CLASS_KEY]: componentFactory.selector });
94
+ }
95
+ // lazy loads cause extra activations, ignore
96
+ return of(null);
97
+ }), filter(it => !!it), map(params => ({
98
+ [FIREBASE_SCREEN_CLASS_KEY]: params[SCREEN_CLASS_KEY],
99
+ [FIREBASE_SCREEN_INSTANCE_ID_KEY]: getScreenInstanceID(params),
100
+ ...params
101
+ })), groupBy(it => it[OUTLET_KEY]), mergeMap(it => it.pipe(distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)), startWith(undefined), pairwise(), map(([prior, current]) => prior ? {
102
+ [FIREBASE_PREVIOUS_SCREEN_CLASS_KEY]: prior[SCREEN_CLASS_KEY],
103
+ [FIREBASE_PREVIOUS_SCREEN_NAME_KEY]: prior[SCREEN_NAME_KEY],
104
+ [FIREBASE_PREVIOUS_SCREEN_INSTANCE_ID_KEY]: prior[FIREBASE_SCREEN_INSTANCE_ID_KEY],
105
+ ...current
106
+ } : current))));
107
+ };
108
+ export class ScreenTrackingService {
109
+ disposable;
110
+ constructor(router, title, componentFactoryResolver, zone, userTrackingService, injector) {
111
+ registerVersion('angularfire', VERSION.full, 'screen-tracking');
112
+ // The APP_INITIALIZER that is making isSupported() sync for the sake of convenient DI
113
+ // may not be done when services are initialized. Guard the functionality by first ensuring
114
+ // that the (global) promise has resolved, then get Analytics from the injector.
115
+ isSupported().then(() => {
116
+ const analytics = injector.get(Analytics);
117
+ if (!router || !analytics) {
118
+ return;
119
+ }
120
+ zone.runOutsideAngular(() => {
121
+ this.disposable = ɵscreenViewEvent(router, title, componentFactoryResolver).pipe(switchMap(async (params) => {
122
+ if (userTrackingService) {
123
+ await userTrackingService.initialized;
124
+ }
125
+ return logEvent(analytics, SCREEN_VIEW_EVENT, params);
126
+ })).subscribe();
127
+ });
128
+ });
129
+ }
130
+ ngOnDestroy() {
131
+ if (this.disposable) {
132
+ this.disposable.unsubscribe();
133
+ }
134
+ }
135
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: ScreenTrackingService, deps: [{ token: i1.Router, optional: true }, { token: i2.Title, optional: true }, { token: i0.ComponentFactoryResolver }, { token: i0.NgZone }, { token: i3.UserTrackingService, optional: true }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
136
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: ScreenTrackingService });
137
+ }
138
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: ScreenTrackingService, decorators: [{
139
+ type: Injectable
140
+ }], ctorParameters: function () { return [{ type: i1.Router, decorators: [{
141
+ type: Optional
142
+ }] }, { type: i2.Title, decorators: [{
143
+ type: Optional
144
+ }] }, { type: i0.ComponentFactoryResolver }, { type: i0.NgZone }, { type: i3.UserTrackingService, decorators: [{
145
+ type: Optional
146
+ }] }, { type: i0.Injector }]; } });
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyZWVuLXRyYWNraW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYW5hbHl0aWNzL3NjcmVlbi10cmFja2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFhLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLEVBQUUsRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0UsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7OztBQUU5RCxNQUFNLHlCQUF5QixHQUFHLHVCQUF1QixDQUFDO0FBQzFELE1BQU0sa0NBQWtDLEdBQUcseUJBQXlCLENBQUM7QUFDckUsTUFBTSx3Q0FBd0MsR0FBRyxzQkFBc0IsQ0FBQztBQUN4RSxNQUFNLGlDQUFpQyxHQUFHLDBCQUEwQixDQUFDO0FBQ3JFLE1BQU0seUJBQXlCLEdBQUcsdUJBQXVCLENBQUM7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O1lBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQy9CO0lBQ0gsQ0FBQzt1R0FsQ1UscUJBQXFCOzJHQUFyQixxQkFBcUI7OzJGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVU7OzBCQU1OLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUdSLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIEluamVjdGFibGUsIE5nWm9uZSwgT25EZXN0cm95LCBPcHRpb25hbCwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG9mLCBTdWJzY3JpcHRpb24sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGdyb3VwQnksIG1hcCwgbWVyZ2VNYXAsIHBhaXJ3aXNlLCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFjdGl2YXRpb25FbmQsIFJvdXRlciwgybVFbXB0eU91dGxldENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUnO1xuaW1wb3J0IHsgcmVnaXN0ZXJWZXJzaW9uIH0gZnJvbSAnZmlyZWJhc2UvYXBwJztcblxuaW1wb3J0IHsgQW5hbHl0aWNzIH0gZnJvbSAnLi9hbmFseXRpY3MnO1xuaW1wb3J0IHsgbG9nRXZlbnQsIGlzU3VwcG9ydGVkIH0gZnJvbSAnLi9maXJlYmFzZSc7XG5pbXBvcnQgeyBVc2VyVHJhY2tpbmdTZXJ2aWNlIH0gZnJvbSAnLi91c2VyLXRyYWNraW5nLnNlcnZpY2UnO1xuXG5jb25zdCBGSVJFQkFTRV9FVkVOVF9PUklHSU5fS0VZID0gJ2ZpcmViYXNlX2V2ZW50X29yaWdpbic7XG5jb25zdCBGSVJFQkFTRV9QUkVWSU9VU19TQ1JFRU5fQ0xBU1NfS0VZID0gJ2ZpcmViYXNlX3ByZXZpb3VzX2NsYXNzJztcbmNvbnN0IEZJUkVCQVNFX1BSRVZJT1VTX1NDUkVFTl9JTlNUQU5DRV9JRF9LRVkgPSAnZmlyZWJhc2VfcHJldmlvdXNfaWQnO1xuY29uc3QgRklSRUJBU0VfUFJFVklPVVNfU0NSRUVOX05BTUVfS0VZID0gJ2ZpcmViYXNlX3ByZXZpb3VzX3NjcmVlbic7XG5jb25zdCBGSVJFQkFTRV9TQ1JFRU5fQ0xBU1NfS0VZID0gJ2ZpcmViYXNlX3NjcmVlbl9jbGFzcyc7XG5jb25zdCBGSVJFQkFTRV9TQ1JFRU5fSU5TVEFOQ0VfSURfS0VZID0gJ2ZpcmViYXNlX3NjcmVlbl9pZCc7XG5jb25zdCBGSVJFQkFTRV9TQ1JFRU5fTkFNRV9LRVkgPSAnZmlyZWJhc2Vfc2NyZWVuJztcbmNvbnN0IE9VVExFVF9LRVkgPSAnb3V0bGV0JztcbmNvbnN0IFBBR0VfUEFUSF9LRVkgPSAncGFnZV9wYXRoJztcbmNvbnN0IFBBR0VfVElUTEVfS0VZID0gJ3BhZ2VfdGl0bGUnO1xuY29uc3QgU0NSRUVOX0NMQVNTX0tFWSA9ICdzY3JlZW5fY2xhc3MnO1xuY29uc3QgU0NSRUVOX05BTUVfS0VZID0gJ3NjcmVlbl9uYW1lJztcbmNvbnN0IFNDUkVFTl9WSUVXX0VWRU5UID0gJ3NjcmVlbl92aWV3JztcbmNvbnN0IEVWRU5UX09SSUdJTl9BVVRPID0gJ2F1dG8nO1xuY29uc3QgU0NSRUVOX0lOU1RBTkNFX0RFTElNSVRFUiA9ICcjJztcblxuLy8gdGhpcyBpcyBhbiBJTlQ2NCBpbiBpT1MvQW5kcm9pZCBidXQgdXNlIElOVDMyIGNhdXNlIGphdmFzY3JpcHRcbmxldCBuZXh0U2NyZWVuSW5zdGFuY2VJRCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqICgyICoqIDMyIC0gMSkpIC0gMiAqKiAzMTtcblxuY29uc3Qga25vd25TY3JlZW5JbnN0YW5jZUlEczogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuXG5jb25zdCBnZXRTY3JlZW5JbnN0YW5jZUlEID0gKHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkgPT4ge1xuICAvLyB1bmlxdWUgdGhlIHNjcmVlbiBjbGFzcyBhZ2FpbnN0IHRoZSBvdXRsZXQgbmFtZVxuICBjb25zdCBzY3JlZW5JbnN0YW5jZUtleSA9IFtcbiAgICBwYXJhbXNbU0NSRUVOX0NMQVNTX0tFWV0sXG4gICAgcGFyYW1zW09VVExFVF9LRVldXG4gIF0uam9pbihTQ1JFRU5fSU5TVEFOQ0VfREVMSU1JVEVSKTtcbiAgaWYgKGtub3duU2NyZWVuSW5zdGFuY2VJRHMuaGFzT3duUHJvcGVydHkoc2NyZWVuSW5zdGFuY2VLZXkpKSB7XG4gICAgcmV0dXJuIGtub3duU2NyZWVuSW5zdGFuY2VJRHNbc2NyZWVuSW5zdGFuY2VLZXldO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHJldCA9IG5leHRTY3JlZW5JbnN0YW5jZUlEKys7XG4gICAga25vd25TY3JlZW5JbnN0YW5jZUlEc1tzY3JlZW5JbnN0YW5jZUtleV0gPSByZXQ7XG4gICAgcmV0dXJuIHJldDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IMm1c2NyZWVuVmlld0V2ZW50ID0gKFxuICByb3V0ZXI6IFJvdXRlcixcbiAgdGl0bGU6IFRpdGxlfG51bGwsXG4gIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuKTogT2JzZXJ2YWJsZTx7XG4gIFtTQ1JFRU5fTkFNRV9LRVldOiBzdHJpbmcsXG4gIFtQQUdFX1BBVEhfS0VZXTogc3RyaW5nLFxuICBbRklSRUJBU0VfRVZFTlRfT1JJR0lOX0tFWV06ICdhdXRvJyxcbiAgW0ZJUkVCQVNFX1NDUkVFTl9OQU1FX0tFWV06IHN0cmluZyxcbiAgW09VVExFVF9LRVldOiBzdHJpbmcsXG4gIFtQQUdFX1RJVExFX0tFWV0/OiBzdHJpbmcsXG4gIFtTQ1JFRU5fQ0xBU1NfS0VZXTogc3RyaW5nLFxuICBbRklSRUJBU0VfU0NSRUVOX0NMQVNTX0tFWV06IHN0cmluZyxcbiAgW0ZJUkVCQVNFX1NDUkVFTl9JTlNUQU5DRV9JRF9LRVldOiBudW1iZXIsXG4gIFtGSVJFQkFTRV9QUkVWSU9VU19TQ1JFRU5fQ0xBU1NfS0VZXTogc3RyaW5nLFxuICBbRklSRUJBU0VfUFJFVklPVVNfU0NSRUVOX05BTUVfS0VZXTogc3RyaW5nLFxuICBbRklSRUJBU0VfUFJFVklPVVNfU0NSRUVOX0lOU1RBTkNFX0lEX0tFWV06IG51bWJlcixcbn0+ID0+IHtcbiAgY29uc3QgYWN0aXZhdGlvbkVuZEV2ZW50cyA9IHJvdXRlci5ldmVudHMucGlwZShmaWx0ZXI8QWN0aXZhdGlvbkVuZD4oZSA9PiBlIGluc3RhbmNlb2YgQWN0aXZhdGlvbkVuZCkpO1xuICByZXR1cm4gYWN0aXZhdGlvbkVuZEV2ZW50cy5waXBlKFxuICAgIHN3aXRjaE1hcDxBY3RpdmF0aW9uRW5kLCBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIGFueT58bnVsbD4+KGFjdGl2YXRpb25FbmQgPT4ge1xuICAgICAgLy8gcm91dGVyIHBhcnNlVXJsIGlzIGhhdmluZyB0cm91YmxlIHdpdGggb3V0bGV0cyB3aGVuIHRoZXkncmUgZW1wdHlcbiAgICAgIC8vIGUuZywgL2FzZGYvMShib2I6Ly9zYWxseTphc2RmKSwgc28gcHV0IGFub3RoZXIgc2xhc2ggaW4gd2hlbiBlbXB0eVxuICAgICAgY29uc3QgdXJsVHJlZSA9IHJvdXRlci5wYXJzZVVybChyb3V0ZXIudXJsLnJlcGxhY2UoLyg/OlxcKCkuKyg/OlxcKSkvZywgYSA9PiBhLnJlcGxhY2UoJzovLycsICc6Ly8vJykpKTtcbiAgICAgIGNvbnN0IHBhZ2VQYXRoID0gdXJsVHJlZS5yb290LmNoaWxkcmVuW2FjdGl2YXRpb25FbmQuc25hcHNob3Qub3V0bGV0XT8udG9TdHJpbmcoKSB8fCAnJztcbiAgICAgIGNvbnN0IGFjdHVhbFNuYXBzaG90ID0gcm91dGVyLnJvdXRlclN0YXRlLnJvb3QuY2hpbGRyZW4ubWFwKGl0ID0+IGl0KS5maW5kKGl0ID0+IGl0Lm91dGxldCA9PT0gYWN0aXZhdGlvbkVuZC5zbmFwc2hvdC5vdXRsZXQpO1xuXG4gICAgICBpZiAoIWFjdHVhbFNuYXBzaG90KSB7XG4gICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGFjdHVhbERlZXAgPSBhY3R1YWxTbmFwc2hvdDtcbiAgICAgIHdoaWxlIChhY3R1YWxEZWVwLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgYWN0dWFsRGVlcCA9IGFjdHVhbERlZXAuZmlyc3RDaGlsZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNjcmVlbk5hbWUgPSBhY3R1YWxEZWVwLnBhdGhGcm9tUm9vdC5tYXAocyA9PiBzLnJvdXRlQ29uZmlnPy5wYXRoKS5maWx0ZXIoaXQgPT4gaXQpLmpvaW4oJy8nKSB8fCAnLyc7XG5cbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgW1NDUkVFTl9OQU1FX0tFWV06IHNjcmVlbk5hbWUsXG4gICAgICAgIFtQQUdFX1BBVEhfS0VZXTogYC8ke3BhZ2VQYXRofWAsXG4gICAgICAgIFtGSVJFQkFTRV9FVkVOVF9PUklHSU5fS0VZXTogRVZFTlRfT1JJR0lOX0FVVE8sXG4gICAgICAgIFtGSVJFQkFTRV9TQ1JFRU5fTkFNRV9LRVldOiBzY3JlZW5OYW1lLFxuICAgICAgICBbT1VUTEVUX0tFWV06IGFjdGl2YXRpb25FbmQuc25hcHNob3Qub3V0bGV0XG4gICAgICB9O1xuICAgICAgaWYgKHRpdGxlKSB7XG4gICAgICAgIHBhcmFtc1tQQUdFX1RJVExFX0tFWV0gPSB0aXRsZS5nZXRUaXRsZSgpO1xuICAgICAgfVxuXG4gICAgICBsZXQgY29tcG9uZW50ID0gYWN0dWFsU25hcHNob3QuY29tcG9uZW50O1xuICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICBpZiAoY29tcG9uZW50ID09PSDJtUVtcHR5T3V0bGV0Q29tcG9uZW50KSB7XG4gICAgICAgICAgbGV0IGRlZXBTbmFwc2hvdCA9IGFjdGl2YXRpb25FbmQuc25hcHNob3Q7XG4gICAgICAgICAgLy8gVE9ETyB3aGVuIG1pZ2h0IHRoZXJlIGJlIG11dHBsZSBjaGlsZHJlbiwgZGlmZmVyZW50IG91dGxldHM/IGV4cGxvcmVcbiAgICAgICAgICB3aGlsZSAoZGVlcFNuYXBzaG90LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgIGRlZXBTbmFwc2hvdCA9IGRlZXBTbmFwc2hvdC5maXJzdENoaWxkO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb21wb25lbnQgPSBkZWVwU25hcHNob3QuY29tcG9uZW50O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wb25lbnQgPSBhY3RpdmF0aW9uRW5kLnNuYXBzaG90LmNvbXBvbmVudDtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBvZih7IC4uLnBhcmFtcywgW1NDUkVFTl9DTEFTU19LRVldOiBjb21wb25lbnQgfSk7XG4gICAgICB9IGVsc2UgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5ID0gY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudCk7XG4gICAgICAgIHJldHVybiBvZih7IC4uLnBhcmFtcywgW1NDUkVFTl9DTEFTU19LRVldOiBjb21wb25lbnRGYWN0b3J5LnNlbGVjdG9yIH0pO1xuICAgICAgfVxuICAgICAgLy8gbGF6eSBsb2FkcyBjYXVzZSBleHRyYSBhY3RpdmF0aW9ucywgaWdub3JlXG4gICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgfSksXG4gICAgZmlsdGVyKGl0ID0+ICEhaXQpLFxuICAgIG1hcChwYXJhbXMgPT4gKHtcbiAgICAgIFtGSVJFQkFTRV9TQ1JFRU5fQ0xBU1NfS0VZXTogcGFyYW1zW1NDUkVFTl9DTEFTU19LRVldLFxuICAgICAgW0ZJUkVCQVNFX1NDUkVFTl9JTlNUQU5DRV9JRF9LRVldOiBnZXRTY3JlZW5JbnN0YW5jZUlEKHBhcmFtcyksXG4gICAgICAuLi5wYXJhbXNcbiAgICB9KSksXG4gICAgZ3JvdXBCeShpdCA9PiBpdFtPVVRMRVRfS0VZXSksXG4gICAgbWVyZ2VNYXAoaXQgPT4gaXQucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBKU09OLnN0cmluZ2lmeShhKSA9PT0gSlNPTi5zdHJpbmdpZnkoYikpLFxuICAgICAgc3RhcnRXaXRoPGFueSwgYW55Pih1bmRlZmluZWQpLFxuICAgICAgcGFpcndpc2UoKSxcbiAgICAgIG1hcCgoW3ByaW9yLCBjdXJyZW50XSkgPT5cbiAgICAgICAgcHJpb3IgPyB7XG4gICAgICAgICAgW0ZJUkVCQVNFX1BSRVZJT1VTX1NDUkVFTl9DTEFTU19LRVldOiBwcmlvcltTQ1JFRU5fQ0xBU1NfS0VZXSxcbiAgICAgICAgICBbRklSRUJBU0VfUFJFVklPVVNfU0NSRUVOX05BTUVfS0VZXTogcHJpb3JbU0NSRUVOX05BTUVfS0VZXSxcbiAgICAgICAgICBbRklSRUJBU0VfUFJFVklPVVNfU0NSRUVOX0lOU1RBTkNFX0lEX0tFWV06IHByaW9yW0ZJUkVCQVNFX1NDUkVFTl9JTlNUQU5DRV9JRF9LRVldLFxuICAgICAgICAgIC4uLmN1cnJlbnRcbiAgICAgICAgfSA6IGN1cnJlbnRcbiAgICAgICksXG4gICAgKSlcbiAgKTtcbn07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTY3JlZW5UcmFja2luZ1NlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIHByaXZhdGUgZGlzcG9zYWJsZTogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIHJvdXRlcjogUm91dGVyLFxuICAgIEBPcHRpb25hbCgpIHRpdGxlOiBUaXRsZSxcbiAgICBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICB6b25lOiBOZ1pvbmUsXG4gICAgQE9wdGlvbmFsKCkgdXNlclRyYWNraW5nU2VydmljZTogVXNlclRyYWNraW5nU2VydmljZSxcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICkge1xuICAgIHJlZ2lzdGVyVmVyc2lvbignYW5ndWxhcmZpcmUnLCBWRVJTSU9OLmZ1bGwsICdzY3JlZW4tdHJhY2tpbmcnKTtcbiAgICAvLyBUaGUgQVBQX0lOSVRJQUxJWkVSIHRoYXQgaXMgbWFraW5nIGlzU3VwcG9ydGVkKCkgc3luYyBmb3IgdGhlIHNha2Ugb2YgY29udmVuaWVudCBESVxuICAgIC8vIG1heSBub3QgYmUgZG9uZSB3aGVuIHNlcnZpY2VzIGFyZSBpbml0aWFsaXplZC4gR3VhcmQgdGhlIGZ1bmN0aW9uYWxpdHkgYnkgZmlyc3QgZW5zdXJpbmdcbiAgICAvLyB0aGF0IHRoZSAoZ2xvYmFsKSBwcm9taXNlIGhhcyByZXNvbHZlZCwgdGhlbiBnZXQgQW5hbHl0aWNzIGZyb20gdGhlIGluamVjdG9yLlxuICAgIGlzU3VwcG9ydGVkKCkudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBhbmFseXRpY3MgPSBpbmplY3Rvci5nZXQoQW5hbHl0aWNzKTtcbiAgICAgIGlmICghcm91dGVyIHx8ICFhbmFseXRpY3MpIHsgcmV0dXJuOyB9XG4gICAgICB6b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgdGhpcy5kaXNwb3NhYmxlID0gybVzY3JlZW5WaWV3RXZlbnQocm91dGVyLCB0aXRsZSwgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKS5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcChhc3luYyBwYXJhbXMgPT4ge1xuICAgICAgICAgICAgaWYgKHVzZXJUcmFja2luZ1NlcnZpY2UpIHsgYXdhaXQgdXNlclRyYWNraW5nU2VydmljZS5pbml0aWFsaXplZDsgfVxuICAgICAgICAgICAgcmV0dXJuIGxvZ0V2ZW50KGFuYWx5dGljcywgU0NSRUVOX1ZJRVdfRVZFTlQsIHBhcmFtcyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKS5zdWJzY3JpYmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuZGlzcG9zYWJsZSkge1xuICAgICAgdGhpcy5kaXNwb3NhYmxlLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbn1cbiJdfQ==