diff --git a/CHANGELOG.md b/CHANGELOG.md index 28f0fdb00..89127238e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ + +# [7.0.2](https://github.com/angular/angularfire2/compare/7.0.1...7.0.2) (2021-08-30) + +### Bug fixes + +* **types:** `firebase/*` types were not being reexported from the `@angular/fire/*` modules (modular) + # [7.0.1](https://github.com/angular/angularfire2/compare/7.0.0...7.0.1) (2021-08-30) diff --git a/package.json b/package.json index 9a9d74b30..bba449c20 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@angular/fire", - "version": "7.0.1", + "version": "7.0.2", "description": "The official Angular library for Firebase.", "private": true, "scripts": { @@ -93,6 +93,7 @@ "codelyzer": "^6.0.0", "concurrently": "^2.2.0", "conventional-changelog-cli": "^1.2.0", + "file-loader": "^6.2.0", "firebase-functions-test": "^0.2.2", "globalthis": "^1.0.1", "gzip-size": "^5.1.1", diff --git a/sample-compat/firestore-protos.ts b/sample-compat/firestore-protos.ts deleted file mode 100644 index 3ce361529..000000000 --- a/sample-compat/firestore-protos.ts +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - path: './node_modules/@firebase/firestore/dist/src/protos', - filter: /\.proto$/, - pathTransform: (path: string) => { - const name = path.split('./node_modules/@firebase/firestore/dist/')[1]; - return `file-loader?name=${name}!${path}`; - } -}; diff --git a/sample-compat/server.ts b/sample-compat/server.ts index beeeab584..35eabbb26 100644 --- a/sample-compat/server.ts +++ b/sample-compat/server.ts @@ -14,8 +14,7 @@ global['XMLHttpRequest'] = require('xhr2'); global['WebSocket'] = require('ws'); /* tslint:enable:no-string-literal */ -// include the protos required to bundle firestore -// import 'dir-loader!./firestore-protos'; +import '@angular/fire/firestore-protos'; // The Express app is exported so that it can be used by serverless Functions. export function app() { diff --git a/sample-compat/src/app/app.module.ts b/sample-compat/src/app/app.module.ts index c3de9f881..c76f1fade 100644 --- a/sample-compat/src/app/app.module.ts +++ b/sample-compat/src/app/app.module.ts @@ -88,7 +88,7 @@ import { UpboatsComponent } from './upboats/upboats.component'; { provide: REMOTE_CONFIG_DEFAULTS, useValue: { background_color: 'red' } }, { provide: USE_DEVICE_LANGUAGE, useValue: true }, { provide: VAPID_KEY, useValue: environment.vapidKey }, - { provide: SERVICE_WORKER, useFactory: () => typeof navigator !== 'undefined' && navigator.serviceWorker?.register('firebase-messaging-sw.js') || undefined }, + { provide: SERVICE_WORKER, useFactory: () => typeof navigator !== 'undefined' && navigator.serviceWorker?.register('firebase-messaging-sw.js', { scope: '__' }) || undefined }, { provide: APP_VERSION, useValue: '0.0.0' }, { provide: APP_NAME, useValue: 'Angular' }, ], diff --git a/sample-compat/src/firebase-messaging-sw.js b/sample-compat/src/firebase-messaging-sw.js index 38b880c69..4b4c1306d 100644 --- a/sample-compat/src/firebase-messaging-sw.js +++ b/sample-compat/src/firebase-messaging-sw.js @@ -1,5 +1,5 @@ -importScripts('https://www.gstatic.com/firebasejs/9.0.0-20217250818/firebase-app-compat.js'); -importScripts('https://www.gstatic.com/firebasejs/9.0.0-20217250818/firebase-messaging-compat.js'); +importScripts('https://www.gstatic.com/firebasejs/9.0.1/firebase-app-compat.js'); +importScripts('https://www.gstatic.com/firebasejs/9.0.1/firebase-messaging-compat.js'); firebase.initializeApp({ apiKey: 'AIzaSyA7CNE9aHbcSEbt9y03QReJ-Xr0nwKg7Yg', diff --git a/sample-compat/tsconfig.server.json b/sample-compat/tsconfig.server.json index 4b6cf6c42..4383fc80f 100644 --- a/sample-compat/tsconfig.server.json +++ b/sample-compat/tsconfig.server.json @@ -10,8 +10,7 @@ }, "files": [ "src/main.server.ts", - "server.ts", - "firestore-protos.ts" + "server.ts" ], "angularCompilerOptions": { "entryModule": "./src/app/app.server.module#AppServerModule" diff --git a/sample-compat/yarn.lock b/sample-compat/yarn.lock index b83a89406..0435ab970 100644 --- a/sample-compat/yarn.lock +++ b/sample-compat/yarn.lock @@ -235,7 +235,7 @@ tslib "^2.2.0" "@angular/fire@../dist/packages-dist": - version "7.0.0" + version "7.0.1" dependencies: tslib "^2.0.0" @@ -1556,10 +1556,10 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz#90420f9f9c6d3987f176a19a7d8e764271a2f55d" integrity sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g== -"@firebase/analytics-compat@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@firebase/analytics-compat/-/analytics-compat-0.1.0.tgz#48f0c3b5557541dd0f1a463ffd1d807454ae1b8e" - integrity sha512-oaf1FEF7cKci5tO7f52dH63/ZwkBqbdSLLpgo6kyoYoYDuY+on4yAc1CIHh3sNj/L8T4Ni81IQvVs9lE/9oOpg== +"@firebase/analytics-compat@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@firebase/analytics-compat/-/analytics-compat-0.1.1.tgz#77a3e5d28f15df303c3836db4740a43955fcfcac" + integrity sha512-pMTrA8cxMXFRv7bwZEXXz0NCepnyH2Jay/32RZ7xAufij2VJhF5S1BtfCO0wuri3FB94rlM8SmSEbwxxHcAtVg== dependencies: "@firebase/analytics" "0.7.0" "@firebase/analytics-types" "0.7.0" @@ -1583,10 +1583,10 @@ "@firebase/util" "1.3.0" tslib "^2.1.0" -"@firebase/app-check-compat@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@firebase/app-check-compat/-/app-check-compat-0.1.0.tgz#5bf12e5cd82f76cac2eabe51345d1fed9664ed48" - integrity sha512-T1M2d1oroaHUa448fgx3BdfWg4WXP64yybIWxvmVBuh7YnyMuegJK1sS9zipKBKLkstcQK8vivXYh3+/AnbGFw== +"@firebase/app-check-compat@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@firebase/app-check-compat/-/app-check-compat-0.1.1.tgz#84c7ef29bb683fd3dea66a66f82b799474c904ee" + integrity sha512-XTV5Ns0Lpwn5GgXV5T0soOkoOGACaw9xiNvAXcISQYFBIse0k7fKo8V5J9VUS1ppzGpyTRCg0m9efz4CNrwPyQ== dependencies: "@firebase/app-check" "0.4.0" "@firebase/component" "0.5.6" @@ -1609,10 +1609,10 @@ "@firebase/util" "1.3.0" tslib "^2.1.0" -"@firebase/app-compat@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@firebase/app-compat/-/app-compat-0.1.0.tgz#101070141198304a50ec546b7626870c7759166b" - integrity sha512-jnAeFM1ihY5klqg2dvdA4EOk7co8ffSHUj/efqaSwTrMkKTcG/WZKF9WAuXdl+5jEu1BhsGGHveWzGliTFH5Hg== +"@firebase/app-compat@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@firebase/app-compat/-/app-compat-0.1.1.tgz#47d5f5ac350f59ea4b721f17e01b1e46a1a3154a" + integrity sha512-AoUO7PnQlDPyMAvAE972kBhrwXRZRLGdHM8obyIeTzPNqIiEoULD4Rdq5TBB4UmV2HYAlYdrS+dk4nuWx67w6A== dependencies: "@firebase/app" "0.7.0" "@firebase/component" "0.5.6" @@ -1640,12 +1640,12 @@ "@firebase/util" "1.3.0" tslib "^2.1.0" -"@firebase/auth-compat@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@firebase/auth-compat/-/auth-compat-0.1.0.tgz#e5dc6bb6ac89ea21f85c4153eb1cf8a7d69deaa8" - integrity sha512-OfAt3c5ham07xvmYyJp02v8mUa+HaSEwilvgD2M1JaWqLAtqH66bdBhLBE9N0pq8xtRdXZIF1vSd20a0ulQfQg== +"@firebase/auth-compat@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@firebase/auth-compat/-/auth-compat-0.1.1.tgz#9baf7b50395ea29a8c3bd20d1c1a3d3cf9004534" + integrity sha512-wEGEV+SluDt/SRyLJRG+s32EDHsyahlkp7kXTcRLUs5KGHmK0T0wNrWxdN5eeR4wR/tlrasPNveUeQDyoJVQzw== dependencies: - "@firebase/auth" "0.17.0" + "@firebase/auth" "0.17.1" "@firebase/auth-types" "0.11.0" "@firebase/component" "0.5.6" "@firebase/util" "1.3.0" @@ -1668,10 +1668,10 @@ resolved "https://registry.yarnpkg.com/@firebase/auth-types/-/auth-types-0.11.0.tgz#b9c73c60ca07945b3bbd7a097633e5f78fa9e886" integrity sha512-q7Bt6cx+ySj9elQHTsKulwk3+qDezhzRBFC9zlQ1BjgMueUOnGMcvqmU0zuKlQ4RhLSH7MNAdBV2znVaoN3Vxw== -"@firebase/auth@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@firebase/auth/-/auth-0.17.0.tgz#e1395779293e1869fabefd07e078242c773b5fcb" - integrity sha512-4zOGTLGzMjBX96KEyBNYpjOD87c2efCZvUjaJ53QslleW9Xp8kSsSHLRhr8hOkcRXO17CmBKSRx/LnG2vTZWQQ== +"@firebase/auth@0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@firebase/auth/-/auth-0.17.1.tgz#4c3dd24ca5a9c47c5e97a9fd1bd4129c46154764" + integrity sha512-+YQM0svb10Q1LwoTj+/unrdY/F/C89bgsjlanY14k2124fiOYVZv0M19t5i7nZx8VnsrgzkFaDfKahdcDxjdpA== dependencies: "@firebase/component" "0.5.6" "@firebase/logger" "0.2.6" @@ -1748,13 +1748,13 @@ faye-websocket "0.11.3" tslib "^1.11.1" -"@firebase/firestore-compat@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@firebase/firestore-compat/-/firestore-compat-0.1.0.tgz#9faa1c10a76d67f812dd48469693e8f6bafca3ab" - integrity sha512-25r1jGpnnx7vXSPVLmHNkuz+EGpZDU5Luro5/MFCMmoV4a+Rmg2n9FRlxRyPn4XOCkc5nrBpT6ESAKAPSNHcpw== +"@firebase/firestore-compat@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@firebase/firestore-compat/-/firestore-compat-0.1.1.tgz#a990cd4b0aef5e0a18972de71d18c35065099f19" + integrity sha512-Ag95WVTSh5Q+GK3egd9HBvXerO/lrRulTO67ryYp4EPyoI/ZmnIoMhYgnOXvb1jCH0Ae01XoSxgU2M2SRvph/Q== dependencies: "@firebase/component" "0.5.6" - "@firebase/firestore" "3.0.0" + "@firebase/firestore" "3.0.1" "@firebase/firestore-types" "2.5.0" "@firebase/util" "1.3.0" tslib "^2.1.0" @@ -1764,10 +1764,10 @@ resolved "https://registry.yarnpkg.com/@firebase/firestore-types/-/firestore-types-2.5.0.tgz#16fca40b6980fdb000de86042d7a96635f2bcdd7" integrity sha512-I6c2m1zUhZ5SH0cWPmINabDyH5w0PPFHk2UHsjBpKdZllzJZ2TwTkXbDtpHUZNmnc/zAa0WNMNMvcvbb/xJLKA== -"@firebase/firestore@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-3.0.0.tgz#f7b8cc3d8d28b85a901fd66df13f4d61dcc33190" - integrity sha512-rbs5EbU/01f7NKHDtedBowpBlqnkVnQlpIuSX5wwGMiPgH8f9pMhh59JMk0cTaSqsJXsq3KvafWAD9SqWIqe2w== +"@firebase/firestore@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-3.0.1.tgz#0152c6a767e116382fb28a0e62b6ea7fa331cc20" + integrity sha512-HDnmweq9GOrk4AtCyQ50FBj/cRowb7IXeTGOx6/MSGYCodKv+9axviKqKPYlWH7cbyrw2Jf3GJTUdkVghMhn+w== dependencies: "@firebase/component" "0.5.6" "@firebase/logger" "0.2.6" @@ -1778,10 +1778,10 @@ node-fetch "2.6.1" tslib "^2.1.0" -"@firebase/functions-compat@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@firebase/functions-compat/-/functions-compat-0.1.0.tgz#53e2b3b9590b04628e9537806196d91deb3e6f3f" - integrity sha512-uNwHdGYqgIXzF7aTZBeUe00K/sadRg5EeSDuJ6VNo3Gh3ZceX4eRnL5p7l2bEJBh8hBl0brb82+TRYjGHtjtFQ== +"@firebase/functions-compat@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@firebase/functions-compat/-/functions-compat-0.1.1.tgz#b1afb89750ec4d1b9a1a9a188f20c30b75aa4a93" + integrity sha512-HELDScvKEP/tM6eW52u+5ilqweCB/cB8ONiQ0aHw2Hjdm20DQ/VsII2JEtbhnFQfuODdugvWLkWV0RPWTFwYqA== dependencies: "@firebase/component" "0.5.6" "@firebase/functions" "0.7.0" @@ -1914,13 +1914,13 @@ "@firebase/util" "1.3.0" tslib "^2.1.0" -"@firebase/storage-compat@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@firebase/storage-compat/-/storage-compat-0.1.0.tgz#b8080e3250b19ad6d98a5ade65f1a03aab73f2b8" - integrity sha512-DJstR2vidnyNSRp14LQhd9QO0PxhMm/xsXrPQ2IEmQ7EWDT4rxGd+pkqXTG6IO+k9ZKMc0BnWIYwlMqkGEJoDg== +"@firebase/storage-compat@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@firebase/storage-compat/-/storage-compat-0.1.1.tgz#9192cd26595a2a09ebef1bbd3da1b63f4716da37" + integrity sha512-W2ke6KcnrEY1zvlEZ8GOVt8wgUbIhW3ZCBUYMdpsLKB/uFmn/zgdiba+ojwerqlOH5zUe4CSULqBE1hXDm1pMw== dependencies: "@firebase/component" "0.5.6" - "@firebase/storage" "0.8.0" + "@firebase/storage" "0.8.1" "@firebase/storage-types" "0.6.0" "@firebase/util" "1.3.0" tslib "^2.1.0" @@ -1930,10 +1930,10 @@ resolved "https://registry.yarnpkg.com/@firebase/storage-types/-/storage-types-0.6.0.tgz#0b1af64a2965af46fca138e5b70700e9b7e6312a" integrity sha512-1LpWhcCb1ftpkP/akhzjzeFxgVefs6eMD2QeKiJJUGH1qOiows2w5o0sKCUSQrvrRQS1lz3SFGvNR1Ck/gqxeA== -"@firebase/storage@0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@firebase/storage/-/storage-0.8.0.tgz#2766a18a8a9684082d745ab1a93a3c88061169b1" - integrity sha512-D0HH+y3DLH0+8eOt6h19RffFMpdzPNr7Yv7XpeeM3+VLE4TbQnDie/OAQWOuWLrYoW7MsPQnLkx+zDb3DxOXxw== +"@firebase/storage@0.8.1": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@firebase/storage/-/storage-0.8.1.tgz#38959b5011df90de4041dbe7277093e010169eba" + integrity sha512-kq6biRi86JUNU3ZQc7UrUYJ+QmPmayER68sXtHmn8Kxw7p/V5MchTPVpE8iFAN5a5PhGTPKSD4cuNyUPU9C0Fg== dependencies: "@firebase/component" "0.5.6" "@firebase/util" "1.3.0" @@ -2484,11 +2484,16 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.9.tgz#04afc9a25c6ff93da14deabd65dc44485b53c8d6" integrity sha512-JsoLXFppG62tWTklIoO4knA+oDTYsmqWxHRvd4lpmfQRNhX6osheUOWETP2jMoV/2bEHuMra8Pp3Dmo/stBFcw== -"@types/node@>=10.0.0", "@types/node@>=12.12.47", "@types/node@>=13.7.0": +"@types/node@>=10.0.0": version "16.6.2" resolved "https://registry.yarnpkg.com/@types/node/-/node-16.6.2.tgz#331b7b9f8621c638284787c5559423822fdffc50" integrity sha512-LSw8TZt12ZudbpHc6EkIyDM3nHVWKYrAvGy6EAJfNfjusbwnThqjqxUKKRwuV3iWYeW/LYMzNgaq3MaLffQ2xA== +"@types/node@>=12.12.47", "@types/node@>=13.7.0": + version "16.7.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.7.8.tgz#2448be5f24fe6b77114632b6350fcd219334651e" + integrity sha512-8upnoQU0OPzbIkm+ZMM0zCeFCkw2s3mS0IWdx0+AAaWqm4fkBb0UJp8Edl7FVKRamYbpJC/aVsHpKWBIbiC7Zg== + "@types/node@^13.7.0": version "13.13.32" resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.32.tgz#f0edd0fb57b3c9f6e64a0b3ddb1e0f729b6f71ce" @@ -3257,9 +3262,9 @@ backo2@1.0.2: integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-arraybuffer@0.1.4: version "0.1.4" @@ -6003,25 +6008,25 @@ firebase-tools@^8.16.1: ws "^7.2.3" firebase@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/firebase/-/firebase-9.0.0.tgz#00bfa03a3eb99bde43a472a8861aa808068153bb" - integrity sha512-atgnuvELhU9D5w9moChnyCb6GRbOCqk54/kHN0J4kdLJBncpcb2culIJ7nlSHILMcW9MNMiNKDJ07RwXVyqFFA== + version "9.0.1" + resolved "https://registry.yarnpkg.com/firebase/-/firebase-9.0.1.tgz#6bc5f9d7bdcd864ef98f2219fa0cd240f2e48b3c" + integrity sha512-RMpbXsVlxqMX+s/gYudnUZeSZXPiLCJMdaxbZ0WRiMjLuJc6ZkbpRy7yz7rZQpL0wRD6gN4K5C+JaKEQtN3jAQ== dependencies: "@firebase/analytics" "0.7.0" - "@firebase/analytics-compat" "0.1.0" + "@firebase/analytics-compat" "0.1.1" "@firebase/app" "0.7.0" "@firebase/app-check" "0.4.0" - "@firebase/app-check-compat" "0.1.0" - "@firebase/app-compat" "0.1.0" + "@firebase/app-check-compat" "0.1.1" + "@firebase/app-compat" "0.1.1" "@firebase/app-types" "0.7.0" - "@firebase/auth" "0.17.0" - "@firebase/auth-compat" "0.1.0" + "@firebase/auth" "0.17.1" + "@firebase/auth-compat" "0.1.1" "@firebase/database" "0.12.0" "@firebase/database-compat" "0.1.0" - "@firebase/firestore" "3.0.0" - "@firebase/firestore-compat" "0.1.0" + "@firebase/firestore" "3.0.1" + "@firebase/firestore-compat" "0.1.1" "@firebase/functions" "0.7.0" - "@firebase/functions-compat" "0.1.0" + "@firebase/functions-compat" "0.1.1" "@firebase/installations" "0.5.0" "@firebase/messaging" "0.9.0" "@firebase/messaging-compat" "0.1.0" @@ -6030,8 +6035,8 @@ firebase@^9.0.0: "@firebase/polyfill" "0.3.36" "@firebase/remote-config" "0.2.0" "@firebase/remote-config-compat" "0.1.0" - "@firebase/storage" "0.8.0" - "@firebase/storage-compat" "0.1.0" + "@firebase/storage" "0.8.1" + "@firebase/storage-compat" "0.1.1" "@firebase/util" "1.3.0" first-input-delay@^0.1.3: @@ -6384,7 +6389,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@7.1.7, glob@^7.1.7: +glob@7.1.7, glob@^7.1.3, glob@^7.1.7: version "7.1.7" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== @@ -6396,7 +6401,7 @@ glob@7.1.7, glob@^7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.4, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -6775,9 +6780,9 @@ http-errors@~1.6.2: statuses ">= 1.4.0 < 2" http-parser-js@>=0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" - integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== + version "0.5.3" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" + integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: version "4.0.1" @@ -7856,10 +7861,10 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -jszip@^3.5.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.6.0.tgz#839b72812e3f97819cc13ac4134ffced95dd6af9" - integrity sha512-jgnQoG9LKnWO3mnVNBnfhkh0QknICd1FGSrXcgrl67zioyJ4wgx25o9ZqwNtrROSflGBCGYnJfjrIyRIby1OoQ== +jszip@^3.5.0, jszip@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.7.1.tgz#bd63401221c15625a1228c556ca8a68da6fda3d9" + integrity sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg== dependencies: lie "~3.3.0" pako "~1.0.2" @@ -11081,14 +11086,14 @@ selenium-webdriver@4.0.0-beta.1: ws "^7.3.1" selenium-webdriver@^4.0.0-beta.2: - version "4.0.0-beta.3" - resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.0.0-beta.3.tgz#8c29512a27ca9c1f95a96a9a8f488304c894390e" - integrity sha512-R0mGHpQkSKgIWiPgcKDcckh4A6aaK0KTyWxs5ieuiI7zsXQ+Kb6neph+dNoeqq3jSBGyv3ONo2w3oohoL4D/Rg== + version "4.0.0-beta.4" + resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.0.0-beta.4.tgz#db4fc7505a515ea3b4a95ded031b738a1544eddd" + integrity sha512-+s/CIYkWzmnC9WASBxxVj7Lm0dcyl6OaFxwIJaFCT5WCuACiimEEr4lUnOOFP/QlKfkDQ56m+aRczaq2EvJEJg== dependencies: - jszip "^3.5.0" - rimraf "^2.7.1" + jszip "^3.6.0" + rimraf "^3.0.2" tmp "^0.2.1" - ws "^7.3.1" + ws ">=7.4.6" selfsigned@^1.10.8: version "1.10.8" @@ -11756,7 +11761,7 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: +string-width@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== @@ -11765,6 +11770,15 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + string.prototype.trimend@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" @@ -13050,6 +13064,11 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" +ws@>=7.4.6: + version "8.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.1.tgz#bdd92b3c56fdb47d2379b5ae534281922cc5bd12" + integrity sha512-XkgWpJU3sHU7gX8f13NqTn6KQ85bd1WU7noBHTT8fSohx7OS1TPY8k+cyRPCzFkia7C4mM229yeHr1qK9sM4JQ== + ws@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" @@ -13063,9 +13082,9 @@ ws@^7.2.3: integrity sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ== ws@^7.3.1: - version "7.4.5" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1" - integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g== + version "7.5.4" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.4.tgz#56bfa20b167427e138a7795de68d134fe92e21f9" + integrity sha512-zP9z6GXm6zC27YtspwH99T3qTG7bBFv2VIkeHstMLrLlDJuzA7tQ5ls3OJ1hOGGCzTQPniNJoHXIAOS0Jljohg== ws@^7.4.5, ws@^7.4.6: version "7.5.3" @@ -13123,9 +13142,9 @@ y18n@^4.0.0: integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== y18n@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" - integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: version "3.1.1" @@ -13164,9 +13183,9 @@ yargs-parser@^18.1.2: decamelize "^1.2.0" yargs-parser@^20.2.2: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== yargs@16.2.0, yargs@^16.1.1: version "16.2.0" diff --git a/sample/package.json b/sample/package.json index 56f9bb318..70e2ee539 100644 --- a/sample/package.json +++ b/sample/package.json @@ -49,6 +49,7 @@ "@types/express": "^4.17.0", "@types/jasmine": "~3.6.0", "@types/node": "^12.11.1", + "file-loader": "^6.2.0", "firebase-tools": "^9.0.0", "fuzzy": "^0.1.3", "inquirer": "^6.2.2", @@ -71,4 +72,4 @@ "resolutions": { "webpack": "^5.35.0" } -} \ No newline at end of file +} diff --git a/sample/server.ts b/sample/server.ts index f1a01f926..b2e702815 100644 --- a/sample/server.ts +++ b/sample/server.ts @@ -8,16 +8,14 @@ import { AppServerModule } from './src/main.server'; import { APP_BASE_HREF } from '@angular/common'; import { existsSync } from 'fs'; -// Polyfills -require('cross-fetch/polyfill'); - - // Polyfill XMLHttpRequest and WS for Firebase /* tslint:disable:no-string-literal */ global['XMLHttpRequest'] = require('xhr2'); global['WebSocket'] = require('ws'); /* tslint:enable:no-string-literal */ +import '@angular/fire/firestore-protos'; + // The Express app is exported so that it can be used by serverless Functions. export function app(): express.Express { const server = express(); diff --git a/sample/src/app/app-routing.module.ts b/sample/src/app/app-routing.module.ts index 3c102f997..0f80e9e81 100644 --- a/sample/src/app/app-routing.module.ts +++ b/sample/src/app/app-routing.module.ts @@ -1,7 +1,10 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; +import { HomeComponent } from './home/home.component'; -const routes: Routes = []; +const routes: Routes = [ + { path: '', component: HomeComponent, outlet: 'primary', pathMatch: 'prefix' }, +]; @NgModule({ imports: [RouterModule.forRoot(routes, { diff --git a/sample/src/app/app.browser.module.ts b/sample/src/app/app.browser.module.ts index 85b54b1fe..6de7ba64e 100644 --- a/sample/src/app/app.browser.module.ts +++ b/sample/src/app/app.browser.module.ts @@ -8,10 +8,12 @@ import { AppModule } from './app.module'; import { AppComponent } from './app.component'; import { ServiceWorkerModule } from '@angular/service-worker'; import { environment } from '../environments/environment'; +import { BrowserTransferStateModule } from '@angular/platform-browser'; @NgModule({ imports: [ AppModule, + BrowserTransferStateModule, provideRemoteConfig(() => getRemoteConfig()), provideAnalytics(() => getAnalytics()), provideMessaging(() => getMessaging()), diff --git a/sample/src/app/app.component.ts b/sample/src/app/app.component.ts index 40402c8ce..4d7cf30b3 100644 --- a/sample/src/app/app.component.ts +++ b/sample/src/app/app.component.ts @@ -1,41 +1,18 @@ -import { ApplicationRef, Component, Optional } from '@angular/core'; -import { Auth, authState } from '@angular/fire/auth'; -import { Firestore, getDoc, doc, DocumentSnapshot } from '@angular/fire/firestore'; -import { DocumentData } from 'rxfire/firestore/lite/interfaces'; +import { ApplicationRef, Component } from '@angular/core'; import { distinctUntilChanged } from 'rxjs/operators'; -import { Messaging, onMessage } from '@angular/fire/messaging'; -import { getToken } from '@angular/fire/messaging'; - -import { environment } from '../environments/environment'; @Component({ selector: 'app-root', template: ` -
{{ (myDocData | async)?.data() | json }}
`, styles: [] }) export class AppComponent { - myDocData: Promise>; title = 'sample'; constructor( appRef: ApplicationRef, - auth: Auth, - firestore: Firestore, - @Optional() messaging: Messaging, ) { - authState(auth).subscribe(it => console.log('authState', it)); appRef.isStable.pipe(distinctUntilChanged()).subscribe(it => console.log('isStable', it)); - this.myDocData = getDoc(doc(firestore, 'animals/NJdGQCv1P92SWsp4nSE7')); - if (messaging) { - navigator.serviceWorker.register('firebase-messaging-sw.js', { type: 'module' }).then(serviceWorkerRegistration => { - getToken(messaging, { - serviceWorkerRegistration, - vapidKey: environment.vapidKey, - }).then(it => console.log(it)); - }); - onMessage(messaging, it => console.log('onMessage', it)); - } } } diff --git a/sample/src/app/app.module.ts b/sample/src/app/app.module.ts index 138710653..9b12aec9d 100644 --- a/sample/src/app/app.module.ts +++ b/sample/src/app/app.module.ts @@ -1,6 +1,6 @@ import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; -import { provideFirebaseApp, initializeApp, getApp } from '@angular/fire/app'; +import { provideFirebaseApp, initializeApp } from '@angular/fire/app'; import { provideAuth, getAuth, connectAuthEmulator } from '@angular/fire/auth'; import { getStorage, provideStorage, connectStorageEmulator } from '@angular/fire/storage'; import { getDatabase, provideDatabase, connectDatabaseEmulator } from '@angular/fire/database'; @@ -11,11 +11,28 @@ import { FunctionsModule } from '@angular/fire/functions'; import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; import { environment } from '../environments/environment'; - +import { HomeComponent } from './home/home.component'; +import { UpboatsComponent } from './upboats/upboats.component'; +import { AuthComponent } from './auth/auth.component'; +import { FirestoreComponent } from './firestore/firestore.component'; +import { DatabaseComponent } from './database/database.component'; +import { FunctionsComponent } from './functions/functions.component'; +import { MessagingComponent } from './messaging/messaging.component'; +import { RemoteConfigComponent } from './remote-config/remote-config.component'; +import { StorageComponent } from './storage/storage.component'; @NgModule({ declarations: [ AppComponent, + HomeComponent, + UpboatsComponent, + AuthComponent, + FirestoreComponent, + DatabaseComponent, + FunctionsComponent, + MessagingComponent, + RemoteConfigComponent, + StorageComponent, ], imports: [ BrowserModule.withServerTransition({ appId: 'serverApp' }), @@ -45,16 +62,7 @@ import { environment } from '../environments/environment'; return database; }), provideStorage(() => { - // While I've provided two instances this should be the default, since it - // uses the default app - const storage = getStorage(getApp(), 'another-bucket'); - if (environment.useEmulators) { - connectStorageEmulator(storage, 'localhost', 9199); - } - return storage; - }), - provideStorage(() => { - const storage = getStorage(getApp('second')); + const storage = getStorage(); if (environment.useEmulators) { connectStorageEmulator(storage, 'localhost', 9199); } diff --git a/sample/src/app/app.server.module.ts b/sample/src/app/app.server.module.ts index 795380cd2..502232c39 100644 --- a/sample/src/app/app.server.module.ts +++ b/sample/src/app/app.server.module.ts @@ -1,5 +1,5 @@ import { NgModule } from '@angular/core'; -import { ServerModule } from '@angular/platform-server'; +import { ServerModule, ServerTransferStateModule } from '@angular/platform-server'; import { AppModule } from './app.module'; import { AppComponent } from './app.component'; @@ -8,6 +8,7 @@ import { AppComponent } from './app.component'; imports: [ AppModule, ServerModule, + ServerTransferStateModule, ], bootstrap: [AppComponent], }) diff --git a/sample/src/app/auth/GoogleAuthProvider.ts b/sample/src/app/auth/GoogleAuthProvider.ts new file mode 100644 index 000000000..eaf88edad --- /dev/null +++ b/sample/src/app/auth/GoogleAuthProvider.ts @@ -0,0 +1 @@ +export { GoogleAuthProvider, signInWithPopup } from '@angular/fire/auth'; diff --git a/sample/src/app/auth/auth.component.spec.ts b/sample/src/app/auth/auth.component.spec.ts new file mode 100644 index 000000000..9fafff4d5 --- /dev/null +++ b/sample/src/app/auth/auth.component.spec.ts @@ -0,0 +1,25 @@ +import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AuthComponent } from './auth.component'; + +describe('AuthComponent', () => { + let component: AuthComponent; + let fixture: ComponentFixture; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [ AuthComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(AuthComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/sample/src/app/auth/auth.component.ts b/sample/src/app/auth/auth.component.ts new file mode 100644 index 000000000..c84affac7 --- /dev/null +++ b/sample/src/app/auth/auth.component.ts @@ -0,0 +1,61 @@ +import { Component, OnInit, OnDestroy, PLATFORM_ID } from '@angular/core'; +import { Auth, authState, signInAnonymously, signOut, User } from '@angular/fire/auth'; +import { Observable, Subscription } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { traceUntilFirst } from '@angular/fire/performance'; +import { Inject } from '@angular/core'; + +@Component({ + selector: 'app-auth', + template: ` +

+ Auth! + {{ (user | async)?.uid | json }} + + + +

+ `, + styles: [] +}) +export class AuthComponent implements OnInit, OnDestroy { + + private readonly userDisposable: Subscription|undefined; + public readonly user: Observable; + + showLoginButton = false; + showLogoutButton = false; + + constructor(public readonly auth: Auth, @Inject(PLATFORM_ID) platformId: object) { + this.user = authState(this.auth); + this.userDisposable = authState(this.auth).pipe( + traceUntilFirst('auth'), + map(u => !!u) + ).subscribe(isLoggedIn => { + this.showLoginButton = !isLoggedIn; + this.showLogoutButton = isLoggedIn; + }); + } + + ngOnInit(): void { } + + ngOnDestroy(): void { + if (this.userDisposable) { + this.userDisposable.unsubscribe(); + } + } + + async login() { + const { GoogleAuthProvider, signInWithPopup } = await import('./GoogleAuthProvider'); + return await signInWithPopup(this.auth, new GoogleAuthProvider()); + } + + async loginAnonymously() { + return await signInAnonymously(this.auth); + } + + async logout() { + return await signOut(this.auth); + } + +} diff --git a/sample/src/app/database/database.component.spec.ts b/sample/src/app/database/database.component.spec.ts new file mode 100644 index 000000000..ee3fd7f5c --- /dev/null +++ b/sample/src/app/database/database.component.spec.ts @@ -0,0 +1,25 @@ +import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DatabaseComponent } from './database.component'; + +describe('DatabaseComponent', () => { + let component: DatabaseComponent; + let fixture: ComponentFixture; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [ DatabaseComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(DatabaseComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/sample/src/app/database/database.component.ts b/sample/src/app/database/database.component.ts new file mode 100644 index 000000000..ae9a3ec95 --- /dev/null +++ b/sample/src/app/database/database.component.ts @@ -0,0 +1,40 @@ +import { Component, Inject, OnInit, PLATFORM_ID } from '@angular/core'; +import { Database, ref, objectVal } from '@angular/fire/database'; +import { EMPTY, Observable } from 'rxjs'; +import { makeStateKey, TransferState } from '@angular/platform-browser'; +import { startWith, tap } from 'rxjs/operators'; +import { traceUntilFirst } from '@angular/fire/performance'; +import { isPlatformServer } from '@angular/common'; + +@Component({ + selector: 'app-database', + template: ` +

+ Database! + {{ testObjectValue$ | async | json }} +

+ `, + styles: [] +}) +export class DatabaseComponent implements OnInit { + + public readonly testObjectValue$: Observable; + + constructor(state: TransferState, database: Database, @Inject(PLATFORM_ID) platformId: object) { + if (isPlatformServer(platformId)) { + this.testObjectValue$ = EMPTY; + } else { + const doc = ref(database, 'test'); + const key = makeStateKey(doc.ref.toString()); + const existing = state.get(key, undefined); + this.testObjectValue$ = objectVal(doc).pipe( + traceUntilFirst('database'), + existing ? startWith(existing) : tap(it => state.set(key, it)) + ); + } + } + + ngOnInit(): void { + } + +} diff --git a/sample/src/app/firestore/firestore.component.spec.ts b/sample/src/app/firestore/firestore.component.spec.ts new file mode 100644 index 000000000..99accc6ae --- /dev/null +++ b/sample/src/app/firestore/firestore.component.spec.ts @@ -0,0 +1,25 @@ +import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { FirestoreComponent } from './firestore.component'; + +describe('FirestoreComponent', () => { + let component: FirestoreComponent; + let fixture: ComponentFixture; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [ FirestoreComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(FirestoreComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/sample/src/app/firestore/firestore.component.ts b/sample/src/app/firestore/firestore.component.ts new file mode 100644 index 000000000..e2ff083d5 --- /dev/null +++ b/sample/src/app/firestore/firestore.component.ts @@ -0,0 +1,33 @@ +import { Component, OnInit } from '@angular/core'; +import { Firestore, doc, docData } from '@angular/fire/firestore'; +import { Observable } from 'rxjs'; +import { startWith, tap } from 'rxjs/operators'; +import { makeStateKey, TransferState } from '@angular/platform-browser'; +import { traceUntilFirst } from '@angular/fire/performance'; + +@Component({ + selector: 'app-firestore', + template: `

+ Firestore! + {{ testDocValue$ | async | json }} +

`, + styles: [``] +}) +export class FirestoreComponent implements OnInit { + + public readonly testDocValue$: Observable; + + constructor(state: TransferState, firestore: Firestore) { + const ref = doc(firestore, 'test/1'); + const key = makeStateKey(ref.path); + const existing = state.get(key, undefined); + this.testDocValue$ = docData(ref).pipe( + traceUntilFirst('firestore'), + existing ? startWith(existing) : tap(it => state.set(key, it)) + ); + } + + ngOnInit(): void { + } + +} diff --git a/sample/src/app/firestore/getFirestore.ts b/sample/src/app/firestore/getFirestore.ts deleted file mode 100644 index 4c1c8b362..000000000 --- a/sample/src/app/firestore/getFirestore.ts +++ /dev/null @@ -1 +0,0 @@ -export { getFirestore } from '@angular/fire/firestore'; diff --git a/sample/src/app/firestore/index.ts b/sample/src/app/firestore/index.ts deleted file mode 100644 index e4d4b0ab5..000000000 --- a/sample/src/app/firestore/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Observable } from 'rxjs'; -import { shareReplay } from 'rxjs/operators'; - -export const initializeFirestore$ = new Observable(sub => { - import('./getFirestore').then(({getFirestore}) => { - sub.next(getFirestore()); - sub.complete(); - }); -}).pipe( - shareReplay({ refCount: false }) -); diff --git a/sample/src/app/functions/functions.component.spec.ts b/sample/src/app/functions/functions.component.spec.ts new file mode 100644 index 000000000..6d457fc9a --- /dev/null +++ b/sample/src/app/functions/functions.component.spec.ts @@ -0,0 +1,25 @@ +import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { FunctionsComponent } from './functions.component'; + +describe('FunctionsComponent', () => { + let component: FunctionsComponent; + let fixture: ComponentFixture; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [ FunctionsComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(FunctionsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/sample/src/app/functions/functions.component.ts b/sample/src/app/functions/functions.component.ts new file mode 100644 index 000000000..172e160fd --- /dev/null +++ b/sample/src/app/functions/functions.component.ts @@ -0,0 +1,30 @@ +import { Component, OnInit } from '@angular/core'; +import { Functions, httpsCallableData } from '@angular/fire/functions'; +import { EMPTY, Observable } from 'rxjs'; + +@Component({ + selector: 'app-functions', + template: ` +

+ Functions! + {{ response$ | async | json }} + +

+ `, + styles: [] +}) +export class FunctionsComponent implements OnInit { + + response$: Observable; + + constructor(public readonly functions: Functions) { + this.response$ = EMPTY; + } + + ngOnInit(): void {} + + request() { + this.response$ = httpsCallableData(this.functions, 'yada', { timeout: 3_000 })({}); + } + +} diff --git a/sample/src/app/home/home.component.ts b/sample/src/app/home/home.component.ts new file mode 100644 index 000000000..94ab646c1 --- /dev/null +++ b/sample/src/app/home/home.component.ts @@ -0,0 +1,23 @@ +import { Component } from '@angular/core'; +import { FirebaseApp } from '@angular/fire/app'; + +@Component({ + selector: 'app-home', + template: ` + Hello world! + {{ firebaseApp.name }} + + + + + + + + `, + styles: [``] +}) +export class HomeComponent { + constructor(public readonly firebaseApp: FirebaseApp) { + console.log(firebaseApp); + } +} diff --git a/sample/src/app/messaging/messaging.component.spec.ts b/sample/src/app/messaging/messaging.component.spec.ts new file mode 100644 index 000000000..3a8aa3ccd --- /dev/null +++ b/sample/src/app/messaging/messaging.component.spec.ts @@ -0,0 +1,25 @@ +import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { MessagingComponent } from './messaging.component'; + +describe('MessagingComponent', () => { + let component: MessagingComponent; + let fixture: ComponentFixture; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [ MessagingComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(MessagingComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/sample/src/app/messaging/messaging.component.ts b/sample/src/app/messaging/messaging.component.ts new file mode 100644 index 000000000..9e89780a9 --- /dev/null +++ b/sample/src/app/messaging/messaging.component.ts @@ -0,0 +1,45 @@ +import { Component, OnInit, Optional } from '@angular/core'; +import { Messaging, getToken, onMessage } from '@angular/fire/messaging'; +import { EMPTY, from, Observable } from 'rxjs'; +import { environment } from 'src/environments/environment'; + +@Component({ + selector: 'app-messaging', + template: ` +

+ Messaging! + {{ token$ | async | json }} + {{ message$ | async | json }} + +

+ `, + styles: [] +}) +export class MessagingComponent implements OnInit { + + token$: Observable = EMPTY; + message$: Observable = EMPTY; + showRequest = false; + + constructor(@Optional() private messaging: Messaging) { + if (messaging) { + this.token$ = from( + navigator.serviceWorker.register('firebase-messaging-sw.js', { type: 'module', scope: '__' }). + then(serviceWorkerRegistration => + getToken(messaging, { + serviceWorkerRegistration, + vapidKey: environment.vapidKey, + }) + )); + this.message$ = new Observable(sub => onMessage(messaging, it => sub.next(it))); + } + } + + ngOnInit(): void { + } + + request() { + Notification.requestPermission(); + } + +} diff --git a/sample/src/app/remote-config/remote-config.component.spec.ts b/sample/src/app/remote-config/remote-config.component.spec.ts new file mode 100644 index 000000000..cdcba329b --- /dev/null +++ b/sample/src/app/remote-config/remote-config.component.spec.ts @@ -0,0 +1,25 @@ +import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { RemoteConfigComponent } from './remote-config.component'; + +describe('RemoteConfigComponent', () => { + let component: RemoteConfigComponent; + let fixture: ComponentFixture; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [ RemoteConfigComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(RemoteConfigComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/sample/src/app/remote-config/remote-config.component.ts b/sample/src/app/remote-config/remote-config.component.ts new file mode 100644 index 000000000..8c8bdbac9 --- /dev/null +++ b/sample/src/app/remote-config/remote-config.component.ts @@ -0,0 +1,27 @@ +import { Component, OnInit } from '@angular/core'; +import { RemoteConfig, getAllChanges } from '@angular/fire/remote-config'; +import { traceUntilFirst } from '@angular/fire/performance'; +import { Observable } from 'rxjs'; + +@Component({ + selector: 'app-remote-config', + template: ` +

+ Remote Config! + {{ change$ | async | json }} +

+ `, + styles: [] +}) +export class RemoteConfigComponent implements OnInit { + + readonly change$: Observable; + + constructor(public readonly remoteConfig: RemoteConfig) { + this.change$ = getAllChanges(this.remoteConfig).pipe(traceUntilFirst('remote-config')); + } + + ngOnInit(): void { + } + +} diff --git a/sample/src/app/storage/storage.component.spec.ts b/sample/src/app/storage/storage.component.spec.ts new file mode 100644 index 000000000..d48eb7c7e --- /dev/null +++ b/sample/src/app/storage/storage.component.spec.ts @@ -0,0 +1,25 @@ +import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { StorageComponent } from './storage.component'; + +describe('StorageComponent', () => { + let component: StorageComponent; + let fixture: ComponentFixture; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [ StorageComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(StorageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/sample/src/app/storage/storage.component.ts b/sample/src/app/storage/storage.component.ts new file mode 100644 index 000000000..8804a4b5b --- /dev/null +++ b/sample/src/app/storage/storage.component.ts @@ -0,0 +1,39 @@ +import { Component, OnInit } from '@angular/core'; +import { Storage, ref, getDownloadURL } from '@angular/fire/storage'; +import { from, Observable, of } from 'rxjs'; +import { startWith, tap } from 'rxjs/operators'; +import { makeStateKey, TransferState } from '@angular/platform-browser'; +import { traceUntilFirst } from '@angular/fire/performance'; + +const TRANSPARENT_PNG + = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII='; + +@Component({ + selector: 'app-storage', + template: ` +

+ Storage! + +

+ `, + styles: [] +}) +export class StorageComponent implements OnInit { + + public readonly downloadUrl$: Observable; + + constructor(storage: Storage, state: TransferState) { + const icon = ref(storage, 'google-g.png'); + const key = makeStateKey('google-icon-url'); + const existing = state.get(key, undefined); + this.downloadUrl$ = existing ? of(existing) : from(getDownloadURL(icon)).pipe( + traceUntilFirst('storage'), + tap(it => state.set(key, it)), + startWith(TRANSPARENT_PNG) + ); + } + + ngOnInit(): void { + } + +} diff --git a/sample/src/app/upboats/upboats.component.spec.ts b/sample/src/app/upboats/upboats.component.spec.ts new file mode 100644 index 000000000..d18bb2c99 --- /dev/null +++ b/sample/src/app/upboats/upboats.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { UpboatsComponent } from './upboats.component'; + +describe('UpboatsComponent', () => { + let component: UpboatsComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ UpboatsComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(UpboatsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/sample/src/app/upboats/upboats.component.ts b/sample/src/app/upboats/upboats.component.ts new file mode 100644 index 000000000..554533490 --- /dev/null +++ b/sample/src/app/upboats/upboats.component.ts @@ -0,0 +1,77 @@ +import { Component, OnInit } from '@angular/core'; +import { Observable } from 'rxjs'; +import { map, startWith, tap } from 'rxjs/operators'; +import { + Firestore, collection, query, orderBy, fromRef, + doc, updateDoc, addDoc, increment, serverTimestamp +} from '@angular/fire/firestore'; +import { makeStateKey, TransferState } from '@angular/platform-browser'; +import { traceUntilFirst } from '@angular/fire/performance'; + +type Animal = { name: string, upboats: number, id: string, hasPendingWrites: boolean }; + +@Component({ + selector: 'app-upboats', + template: ` +
    +
  • + {{ animal.name }} + + {{ animal.upboats }} + + 🕒 +
  • +
+ + `, + styles: [] +}) +export class UpboatsComponent implements OnInit { + + public readonly animals: Observable; + + constructor(private firestore: Firestore, state: TransferState) { + const animalsCollection = collection(firestore, 'animals'); + const animalsQuery = query(animalsCollection, orderBy('upboats', 'desc'), orderBy('updatedAt', 'desc')); + const key = makeStateKey(animalsCollection.path); + const existing = state.get(key, undefined); + this.animals = fromRef(animalsQuery).pipe( + traceUntilFirst('animals'), + map(it => it.docs.map(change => ({ + ...change.data(), + id: change.id, + hasPendingWrites: change.metadata.hasPendingWrites + } as Animal))), + existing ? startWith(existing) : tap(it => state.set(key, it)) + ); + } + + ngOnInit(): void { + } + + async upboat(id: string) { + // TODO add rule + return await updateDoc(doc(this.firestore, `animals/${id}`), { + upboats: increment(1), + updatedAt: serverTimestamp(), + }); + } + + async downboat(id: string) { + // TODO add rule + return await updateDoc(doc(this.firestore, `animals/${id}`), { + upboats: increment(-1), + updatedAt: serverTimestamp(), + }); + } + + async newAnimal() { + // TODO add rule + return await addDoc(collection(this.firestore, 'animals'), { + name: prompt('Can haz name?'), + upboats: 1, + updatedAt: serverTimestamp(), + }); + } + +} diff --git a/sample/src/firebase-messaging-sw.js b/sample/src/firebase-messaging-sw.js index 3da79361f..5d3c59175 100644 --- a/sample/src/firebase-messaging-sw.js +++ b/sample/src/firebase-messaging-sw.js @@ -1,5 +1,5 @@ -import { initializeApp } from 'https://www.gstatic.com/firebasejs/9.0.0-2021724205917/firebase-app.js'; -import { getMessaging, onBackgroundMessage, isSupported } from 'https://www.gstatic.com/firebasejs/9.0.0-2021724205917/firebase-messaging-sw.js'; +import { initializeApp } from 'https://www.gstatic.com/firebasejs/9.0.1/firebase-app.js'; +import { getMessaging, onBackgroundMessage, isSupported } from 'https://www.gstatic.com/firebasejs/9.0.1/firebase-messaging-sw.js'; const app = initializeApp({ apiKey: 'AIzaSyA7CNE9aHbcSEbt9y03QReJ-Xr0nwKg7Yg', diff --git a/sample/yarn.lock b/sample/yarn.lock index db17923f6..8fc7dbe89 100644 --- a/sample/yarn.lock +++ b/sample/yarn.lock @@ -249,7 +249,7 @@ tslib "^2.2.0" "@angular/fire@../dist/packages-dist": - version "7.0.0" + version "7.0.1" dependencies: tslib "^2.0.0" @@ -1396,10 +1396,10 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz#90420f9f9c6d3987f176a19a7d8e764271a2f55d" integrity sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g== -"@firebase/analytics-compat@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@firebase/analytics-compat/-/analytics-compat-0.1.0.tgz#48f0c3b5557541dd0f1a463ffd1d807454ae1b8e" - integrity sha512-oaf1FEF7cKci5tO7f52dH63/ZwkBqbdSLLpgo6kyoYoYDuY+on4yAc1CIHh3sNj/L8T4Ni81IQvVs9lE/9oOpg== +"@firebase/analytics-compat@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@firebase/analytics-compat/-/analytics-compat-0.1.1.tgz#77a3e5d28f15df303c3836db4740a43955fcfcac" + integrity sha512-pMTrA8cxMXFRv7bwZEXXz0NCepnyH2Jay/32RZ7xAufij2VJhF5S1BtfCO0wuri3FB94rlM8SmSEbwxxHcAtVg== dependencies: "@firebase/analytics" "0.7.0" "@firebase/analytics-types" "0.7.0" @@ -1423,10 +1423,10 @@ "@firebase/util" "1.3.0" tslib "^2.1.0" -"@firebase/app-check-compat@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@firebase/app-check-compat/-/app-check-compat-0.1.0.tgz#5bf12e5cd82f76cac2eabe51345d1fed9664ed48" - integrity sha512-T1M2d1oroaHUa448fgx3BdfWg4WXP64yybIWxvmVBuh7YnyMuegJK1sS9zipKBKLkstcQK8vivXYh3+/AnbGFw== +"@firebase/app-check-compat@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@firebase/app-check-compat/-/app-check-compat-0.1.1.tgz#84c7ef29bb683fd3dea66a66f82b799474c904ee" + integrity sha512-XTV5Ns0Lpwn5GgXV5T0soOkoOGACaw9xiNvAXcISQYFBIse0k7fKo8V5J9VUS1ppzGpyTRCg0m9efz4CNrwPyQ== dependencies: "@firebase/app-check" "0.4.0" "@firebase/component" "0.5.6" @@ -1449,10 +1449,10 @@ "@firebase/util" "1.3.0" tslib "^2.1.0" -"@firebase/app-compat@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@firebase/app-compat/-/app-compat-0.1.0.tgz#101070141198304a50ec546b7626870c7759166b" - integrity sha512-jnAeFM1ihY5klqg2dvdA4EOk7co8ffSHUj/efqaSwTrMkKTcG/WZKF9WAuXdl+5jEu1BhsGGHveWzGliTFH5Hg== +"@firebase/app-compat@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@firebase/app-compat/-/app-compat-0.1.1.tgz#47d5f5ac350f59ea4b721f17e01b1e46a1a3154a" + integrity sha512-AoUO7PnQlDPyMAvAE972kBhrwXRZRLGdHM8obyIeTzPNqIiEoULD4Rdq5TBB4UmV2HYAlYdrS+dk4nuWx67w6A== dependencies: "@firebase/app" "0.7.0" "@firebase/component" "0.5.6" @@ -1475,12 +1475,12 @@ "@firebase/util" "1.3.0" tslib "^2.1.0" -"@firebase/auth-compat@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@firebase/auth-compat/-/auth-compat-0.1.0.tgz#e5dc6bb6ac89ea21f85c4153eb1cf8a7d69deaa8" - integrity sha512-OfAt3c5ham07xvmYyJp02v8mUa+HaSEwilvgD2M1JaWqLAtqH66bdBhLBE9N0pq8xtRdXZIF1vSd20a0ulQfQg== +"@firebase/auth-compat@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@firebase/auth-compat/-/auth-compat-0.1.1.tgz#9baf7b50395ea29a8c3bd20d1c1a3d3cf9004534" + integrity sha512-wEGEV+SluDt/SRyLJRG+s32EDHsyahlkp7kXTcRLUs5KGHmK0T0wNrWxdN5eeR4wR/tlrasPNveUeQDyoJVQzw== dependencies: - "@firebase/auth" "0.17.0" + "@firebase/auth" "0.17.1" "@firebase/auth-types" "0.11.0" "@firebase/component" "0.5.6" "@firebase/util" "1.3.0" @@ -1498,10 +1498,10 @@ resolved "https://registry.yarnpkg.com/@firebase/auth-types/-/auth-types-0.11.0.tgz#b9c73c60ca07945b3bbd7a097633e5f78fa9e886" integrity sha512-q7Bt6cx+ySj9elQHTsKulwk3+qDezhzRBFC9zlQ1BjgMueUOnGMcvqmU0zuKlQ4RhLSH7MNAdBV2znVaoN3Vxw== -"@firebase/auth@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@firebase/auth/-/auth-0.17.0.tgz#e1395779293e1869fabefd07e078242c773b5fcb" - integrity sha512-4zOGTLGzMjBX96KEyBNYpjOD87c2efCZvUjaJ53QslleW9Xp8kSsSHLRhr8hOkcRXO17CmBKSRx/LnG2vTZWQQ== +"@firebase/auth@0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@firebase/auth/-/auth-0.17.1.tgz#4c3dd24ca5a9c47c5e97a9fd1bd4129c46154764" + integrity sha512-+YQM0svb10Q1LwoTj+/unrdY/F/C89bgsjlanY14k2124fiOYVZv0M19t5i7nZx8VnsrgzkFaDfKahdcDxjdpA== dependencies: "@firebase/component" "0.5.6" "@firebase/logger" "0.2.6" @@ -1550,13 +1550,13 @@ faye-websocket "0.11.3" tslib "^2.1.0" -"@firebase/firestore-compat@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@firebase/firestore-compat/-/firestore-compat-0.1.0.tgz#9faa1c10a76d67f812dd48469693e8f6bafca3ab" - integrity sha512-25r1jGpnnx7vXSPVLmHNkuz+EGpZDU5Luro5/MFCMmoV4a+Rmg2n9FRlxRyPn4XOCkc5nrBpT6ESAKAPSNHcpw== +"@firebase/firestore-compat@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@firebase/firestore-compat/-/firestore-compat-0.1.1.tgz#a990cd4b0aef5e0a18972de71d18c35065099f19" + integrity sha512-Ag95WVTSh5Q+GK3egd9HBvXerO/lrRulTO67ryYp4EPyoI/ZmnIoMhYgnOXvb1jCH0Ae01XoSxgU2M2SRvph/Q== dependencies: "@firebase/component" "0.5.6" - "@firebase/firestore" "3.0.0" + "@firebase/firestore" "3.0.1" "@firebase/firestore-types" "2.5.0" "@firebase/util" "1.3.0" tslib "^2.1.0" @@ -1566,10 +1566,10 @@ resolved "https://registry.yarnpkg.com/@firebase/firestore-types/-/firestore-types-2.5.0.tgz#16fca40b6980fdb000de86042d7a96635f2bcdd7" integrity sha512-I6c2m1zUhZ5SH0cWPmINabDyH5w0PPFHk2UHsjBpKdZllzJZ2TwTkXbDtpHUZNmnc/zAa0WNMNMvcvbb/xJLKA== -"@firebase/firestore@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-3.0.0.tgz#f7b8cc3d8d28b85a901fd66df13f4d61dcc33190" - integrity sha512-rbs5EbU/01f7NKHDtedBowpBlqnkVnQlpIuSX5wwGMiPgH8f9pMhh59JMk0cTaSqsJXsq3KvafWAD9SqWIqe2w== +"@firebase/firestore@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-3.0.1.tgz#0152c6a767e116382fb28a0e62b6ea7fa331cc20" + integrity sha512-HDnmweq9GOrk4AtCyQ50FBj/cRowb7IXeTGOx6/MSGYCodKv+9axviKqKPYlWH7cbyrw2Jf3GJTUdkVghMhn+w== dependencies: "@firebase/component" "0.5.6" "@firebase/logger" "0.2.6" @@ -1580,10 +1580,10 @@ node-fetch "2.6.1" tslib "^2.1.0" -"@firebase/functions-compat@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@firebase/functions-compat/-/functions-compat-0.1.0.tgz#53e2b3b9590b04628e9537806196d91deb3e6f3f" - integrity sha512-uNwHdGYqgIXzF7aTZBeUe00K/sadRg5EeSDuJ6VNo3Gh3ZceX4eRnL5p7l2bEJBh8hBl0brb82+TRYjGHtjtFQ== +"@firebase/functions-compat@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@firebase/functions-compat/-/functions-compat-0.1.1.tgz#b1afb89750ec4d1b9a1a9a188f20c30b75aa4a93" + integrity sha512-HELDScvKEP/tM6eW52u+5ilqweCB/cB8ONiQ0aHw2Hjdm20DQ/VsII2JEtbhnFQfuODdugvWLkWV0RPWTFwYqA== dependencies: "@firebase/component" "0.5.6" "@firebase/functions" "0.7.0" @@ -1716,13 +1716,13 @@ "@firebase/util" "1.3.0" tslib "^2.1.0" -"@firebase/storage-compat@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@firebase/storage-compat/-/storage-compat-0.1.0.tgz#b8080e3250b19ad6d98a5ade65f1a03aab73f2b8" - integrity sha512-DJstR2vidnyNSRp14LQhd9QO0PxhMm/xsXrPQ2IEmQ7EWDT4rxGd+pkqXTG6IO+k9ZKMc0BnWIYwlMqkGEJoDg== +"@firebase/storage-compat@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@firebase/storage-compat/-/storage-compat-0.1.1.tgz#9192cd26595a2a09ebef1bbd3da1b63f4716da37" + integrity sha512-W2ke6KcnrEY1zvlEZ8GOVt8wgUbIhW3ZCBUYMdpsLKB/uFmn/zgdiba+ojwerqlOH5zUe4CSULqBE1hXDm1pMw== dependencies: "@firebase/component" "0.5.6" - "@firebase/storage" "0.8.0" + "@firebase/storage" "0.8.1" "@firebase/storage-types" "0.6.0" "@firebase/util" "1.3.0" tslib "^2.1.0" @@ -1732,10 +1732,10 @@ resolved "https://registry.yarnpkg.com/@firebase/storage-types/-/storage-types-0.6.0.tgz#0b1af64a2965af46fca138e5b70700e9b7e6312a" integrity sha512-1LpWhcCb1ftpkP/akhzjzeFxgVefs6eMD2QeKiJJUGH1qOiows2w5o0sKCUSQrvrRQS1lz3SFGvNR1Ck/gqxeA== -"@firebase/storage@0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@firebase/storage/-/storage-0.8.0.tgz#2766a18a8a9684082d745ab1a93a3c88061169b1" - integrity sha512-D0HH+y3DLH0+8eOt6h19RffFMpdzPNr7Yv7XpeeM3+VLE4TbQnDie/OAQWOuWLrYoW7MsPQnLkx+zDb3DxOXxw== +"@firebase/storage@0.8.1": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@firebase/storage/-/storage-0.8.1.tgz#38959b5011df90de4041dbe7277093e010169eba" + integrity sha512-kq6biRi86JUNU3ZQc7UrUYJ+QmPmayER68sXtHmn8Kxw7p/V5MchTPVpE8iFAN5a5PhGTPKSD4cuNyUPU9C0Fg== dependencies: "@firebase/component" "0.5.6" "@firebase/util" "1.3.0" @@ -1798,14 +1798,7 @@ lodash.snakecase "^4.1.1" p-defer "^3.0.0" -"@grpc/grpc-js@^1.3.2": - version "1.3.6" - resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.3.6.tgz#6e2d17610c2c8df0f6ceab0e1968f563df74b173" - integrity sha512-v7+LQFbqZKmd/Tvf5/j1Xlbq6jXL/4d+gUtm2TNX4QiEC3ELWADmGr2dGlUyLl6aKTuYfsN72vAsO5zmavYkEg== - dependencies: - "@types/node" ">=12.12.47" - -"@grpc/grpc-js@~1.3.0": +"@grpc/grpc-js@^1.3.2", "@grpc/grpc-js@~1.3.0": version "1.3.7" resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.3.7.tgz#58b687aff93b743aafde237fd2ee9a3259d7f2d8" integrity sha512-CKQVuwuSPh40tgOkR7c0ZisxYRiN05PcKPW72mQL5y++qd7CwBRoaJZvU5xfXnCJDFBmS3qZGQ71Frx6Ofo2XA== @@ -2237,11 +2230,16 @@ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== -"@types/node@*", "@types/node@>=10.0.0", "@types/node@>=12.12.47", "@types/node@>=13.7.0": +"@types/node@*", "@types/node@>=10.0.0": version "16.4.3" resolved "https://registry.yarnpkg.com/@types/node/-/node-16.4.3.tgz#c01c1a215721f6dec71b47d88b4687463601ba48" integrity sha512-GKM4FLMkWDc0sfx7tXqPWkM6NBow1kge0fgQh0bOnlqo4iT1kvTvMEKE0c1RtUGnbLlGRXiAA8SumE//90uKAg== +"@types/node@>=12.12.47", "@types/node@>=13.7.0": + version "16.7.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.7.8.tgz#2448be5f24fe6b77114632b6350fcd219334651e" + integrity sha512-8upnoQU0OPzbIkm+ZMM0zCeFCkw2s3mS0IWdx0+AAaWqm4fkBb0UJp8Edl7FVKRamYbpJC/aVsHpKWBIbiC7Zg== + "@types/node@^12.11.1": version "12.20.17" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.17.tgz#ffd44c2801fc527a6fe6e86bc9b900261df1c87e" @@ -5381,6 +5379,14 @@ figures@^3.0.0, figures@^3.2.0: dependencies: escape-string-regexp "^1.0.5" +file-loader@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" + integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" @@ -5533,25 +5539,25 @@ firebase-tools@^9.0.0: ws "^7.2.3" firebase@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/firebase/-/firebase-9.0.0.tgz#00bfa03a3eb99bde43a472a8861aa808068153bb" - integrity sha512-atgnuvELhU9D5w9moChnyCb6GRbOCqk54/kHN0J4kdLJBncpcb2culIJ7nlSHILMcW9MNMiNKDJ07RwXVyqFFA== + version "9.0.1" + resolved "https://registry.yarnpkg.com/firebase/-/firebase-9.0.1.tgz#6bc5f9d7bdcd864ef98f2219fa0cd240f2e48b3c" + integrity sha512-RMpbXsVlxqMX+s/gYudnUZeSZXPiLCJMdaxbZ0WRiMjLuJc6ZkbpRy7yz7rZQpL0wRD6gN4K5C+JaKEQtN3jAQ== dependencies: "@firebase/analytics" "0.7.0" - "@firebase/analytics-compat" "0.1.0" + "@firebase/analytics-compat" "0.1.1" "@firebase/app" "0.7.0" "@firebase/app-check" "0.4.0" - "@firebase/app-check-compat" "0.1.0" - "@firebase/app-compat" "0.1.0" + "@firebase/app-check-compat" "0.1.1" + "@firebase/app-compat" "0.1.1" "@firebase/app-types" "0.7.0" - "@firebase/auth" "0.17.0" - "@firebase/auth-compat" "0.1.0" + "@firebase/auth" "0.17.1" + "@firebase/auth-compat" "0.1.1" "@firebase/database" "0.12.0" "@firebase/database-compat" "0.1.0" - "@firebase/firestore" "3.0.0" - "@firebase/firestore-compat" "0.1.0" + "@firebase/firestore" "3.0.1" + "@firebase/firestore-compat" "0.1.1" "@firebase/functions" "0.7.0" - "@firebase/functions-compat" "0.1.0" + "@firebase/functions-compat" "0.1.1" "@firebase/installations" "0.5.0" "@firebase/messaging" "0.9.0" "@firebase/messaging-compat" "0.1.0" @@ -5560,8 +5566,8 @@ firebase@^9.0.0: "@firebase/polyfill" "0.3.36" "@firebase/remote-config" "0.2.0" "@firebase/remote-config-compat" "0.1.0" - "@firebase/storage" "0.8.0" - "@firebase/storage-compat" "0.1.0" + "@firebase/storage" "0.8.1" + "@firebase/storage-compat" "0.1.1" "@firebase/util" "1.3.0" flat-arguments@^1.0.0: @@ -5877,7 +5883,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@7.1.7, glob@^7.1.7: +glob@7.1.7, glob@^7.1.3, glob@^7.1.7: version "7.1.7" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== @@ -5889,7 +5895,7 @@ glob@7.1.7, glob@^7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.4, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -6258,9 +6264,9 @@ http-errors@~1.6.2: statuses ">= 1.4.0 < 2" http-parser-js@>=0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" - integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== + version "0.5.3" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" + integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: version "4.0.1" @@ -7308,9 +7314,9 @@ jsprim@^1.2.2: verror "1.10.0" jszip@^3.5.0, jszip@^3.6.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.7.0.tgz#9b8b995a4e7c9024653ce743e902076a82fdf4e6" - integrity sha512-Y2OlFIzrDOPWUnpU0LORIcDn2xN7rC9yKffFM/7pGhQuhO+SUhfm2trkJ/S5amjFvem0Y+1EALz/MEPkvHXVNw== + version "3.7.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.7.1.tgz#bd63401221c15625a1228c556ca8a68da6fda3d9" + integrity sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg== dependencies: lie "~3.3.0" pako "~1.0.2" @@ -12416,10 +12422,10 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -ws@>=7.4.6, ws@^7.3.1, ws@^7.4.5, ws@^7.4.6: - version "7.5.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" - integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== +ws@>=7.4.6: + version "8.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.1.tgz#bdd92b3c56fdb47d2379b5ae534281922cc5bd12" + integrity sha512-XkgWpJU3sHU7gX8f13NqTn6KQ85bd1WU7noBHTT8fSohx7OS1TPY8k+cyRPCzFkia7C4mM229yeHr1qK9sM4JQ== ws@^6.2.1: version "6.2.2" @@ -12433,6 +12439,16 @@ ws@^7.2.3: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.0.tgz#a5dd76a24197940d4a8bb9e0e152bb4503764da7" integrity sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ== +ws@^7.3.1: + version "7.5.4" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.4.tgz#56bfa20b167427e138a7795de68d134fe92e21f9" + integrity sha512-zP9z6GXm6zC27YtspwH99T3qTG7bBFv2VIkeHstMLrLlDJuzA7tQ5ls3OJ1hOGGCzTQPniNJoHXIAOS0Jljohg== + +ws@^7.4.5, ws@^7.4.6: + version "7.5.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" + integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== + ws@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.0.tgz#0b738cd484bfc9303421914b11bb4011e07615bb" diff --git a/src/compat/firestore/firestore.ts b/src/compat/firestore/firestore.ts index 382334bd8..7364330b4 100644 --- a/src/compat/firestore/firestore.ts +++ b/src/compat/firestore/firestore.ts @@ -155,7 +155,7 @@ export class AngularFirestore { ) { const app = ɵfirebaseAppFactory(options, zone, name); const useEmulator: UseEmulatorArguments | null = _useEmulator; - + if (auth) { ɵauthFactory(app, zone, useAuthEmulator, tenantId, languageCode, useDeviceLanguage, authSettings, persistence); } diff --git a/tools/build.ts b/tools/build.ts index 4f85864d2..b3c4633de 100644 --- a/tools/build.ts +++ b/tools/build.ts @@ -5,6 +5,7 @@ import { file as gzipSizeFile } from 'gzip-size'; import { dirname, join } from 'path'; import { keys as tsKeys } from 'ts-transformer-keys'; import firebase from 'firebase/compat/app'; +import * as glob from 'glob'; // TODO infer these from the package.json const MODULES = [ @@ -41,12 +42,13 @@ function zoneWrapExports() { }); const zoneWrapped = toBeExported.filter(([, , zoneWrap]) => zoneWrap); const rawExport = toBeExported.filter(([, , zoneWrap]) => !zoneWrap); - await writeFile(`./src/${module}/${name}.ts`, `// DO NOT MODIFY, this file is autogenerated by tools/build.ts${zoneWrapped.length > 0 ? ` -import { ɵzoneWrap } from '@angular/fire'; + await writeFile(`./src/${module}/${name}.ts`, `// DO NOT MODIFY, this file is autogenerated by tools/build.ts +${path.startsWith('firebase/') ? `export * from '${path}';\n` : ''}${ +zoneWrapped.length > 0 ? `import { ɵzoneWrap } from '@angular/fire'; import { ${zoneWrapped.map(([importName]) => `${importName} as _${importName}`).join(',\n ')} } from '${path}'; -` : ''}${rawExport.length > 0 ? ` +` : ''}${!path.startsWith('firebase/') && rawExport.length > 0 ? ` export { ${rawExport.map(([importName, exportName]) => `${importName}${exportName === importName ? '' : `as ${exportName}`}`).join(',\n ')} } from '${path}'; @@ -103,6 +105,19 @@ ${zoneWrapped.map(([importName, exportName]) => `export const ${exportName} = ɵ ]); } +function webpackFirestoreProtos() { + return new Promise((resolve, reject) => { + glob('./node_modules/@firebase/firestore/dist/src/protos/**/*.proto', {}, async (err, files) => { + if (err) { reject(err); } + const fileLoader = files.map(path => + `require('file-loader?name=${path.replace('./node_modules/@firebase/firestore/dist/', '')}!${path.replace('./node_modules/', '../../')}');` + ).join('\n'); + await writeFile('./dist/packages-dist/firestore-protos.js', fileLoader); + resolve(); + }); + }); +} + function proxyPolyfillCompat() { const defaultObject = { 'compat/analytics': tsKeys(), @@ -206,6 +221,7 @@ async function buildLibrary() { compileSchematics(), replacePackageCoreVersion(), fixImportForLazyModules(), + webpackFirestoreProtos(), ]); } diff --git a/yarn.lock b/yarn.lock index fa5085679..41a239974 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1415,10 +1415,10 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz#90420f9f9c6d3987f176a19a7d8e764271a2f55d" integrity sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g== -"@firebase/analytics-compat@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@firebase/analytics-compat/-/analytics-compat-0.1.0.tgz#48f0c3b5557541dd0f1a463ffd1d807454ae1b8e" - integrity sha512-oaf1FEF7cKci5tO7f52dH63/ZwkBqbdSLLpgo6kyoYoYDuY+on4yAc1CIHh3sNj/L8T4Ni81IQvVs9lE/9oOpg== +"@firebase/analytics-compat@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@firebase/analytics-compat/-/analytics-compat-0.1.1.tgz#77a3e5d28f15df303c3836db4740a43955fcfcac" + integrity sha512-pMTrA8cxMXFRv7bwZEXXz0NCepnyH2Jay/32RZ7xAufij2VJhF5S1BtfCO0wuri3FB94rlM8SmSEbwxxHcAtVg== dependencies: "@firebase/analytics" "0.7.0" "@firebase/analytics-types" "0.7.0" @@ -1442,10 +1442,10 @@ "@firebase/util" "1.3.0" tslib "^2.1.0" -"@firebase/app-check-compat@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@firebase/app-check-compat/-/app-check-compat-0.1.0.tgz#5bf12e5cd82f76cac2eabe51345d1fed9664ed48" - integrity sha512-T1M2d1oroaHUa448fgx3BdfWg4WXP64yybIWxvmVBuh7YnyMuegJK1sS9zipKBKLkstcQK8vivXYh3+/AnbGFw== +"@firebase/app-check-compat@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@firebase/app-check-compat/-/app-check-compat-0.1.1.tgz#84c7ef29bb683fd3dea66a66f82b799474c904ee" + integrity sha512-XTV5Ns0Lpwn5GgXV5T0soOkoOGACaw9xiNvAXcISQYFBIse0k7fKo8V5J9VUS1ppzGpyTRCg0m9efz4CNrwPyQ== dependencies: "@firebase/app-check" "0.4.0" "@firebase/component" "0.5.6" @@ -1468,10 +1468,10 @@ "@firebase/util" "1.3.0" tslib "^2.1.0" -"@firebase/app-compat@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@firebase/app-compat/-/app-compat-0.1.0.tgz#101070141198304a50ec546b7626870c7759166b" - integrity sha512-jnAeFM1ihY5klqg2dvdA4EOk7co8ffSHUj/efqaSwTrMkKTcG/WZKF9WAuXdl+5jEu1BhsGGHveWzGliTFH5Hg== +"@firebase/app-compat@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@firebase/app-compat/-/app-compat-0.1.1.tgz#47d5f5ac350f59ea4b721f17e01b1e46a1a3154a" + integrity sha512-AoUO7PnQlDPyMAvAE972kBhrwXRZRLGdHM8obyIeTzPNqIiEoULD4Rdq5TBB4UmV2HYAlYdrS+dk4nuWx67w6A== dependencies: "@firebase/app" "0.7.0" "@firebase/component" "0.5.6" @@ -1499,12 +1499,12 @@ "@firebase/util" "1.3.0" tslib "^2.1.0" -"@firebase/auth-compat@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@firebase/auth-compat/-/auth-compat-0.1.0.tgz#e5dc6bb6ac89ea21f85c4153eb1cf8a7d69deaa8" - integrity sha512-OfAt3c5ham07xvmYyJp02v8mUa+HaSEwilvgD2M1JaWqLAtqH66bdBhLBE9N0pq8xtRdXZIF1vSd20a0ulQfQg== +"@firebase/auth-compat@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@firebase/auth-compat/-/auth-compat-0.1.1.tgz#9baf7b50395ea29a8c3bd20d1c1a3d3cf9004534" + integrity sha512-wEGEV+SluDt/SRyLJRG+s32EDHsyahlkp7kXTcRLUs5KGHmK0T0wNrWxdN5eeR4wR/tlrasPNveUeQDyoJVQzw== dependencies: - "@firebase/auth" "0.17.0" + "@firebase/auth" "0.17.1" "@firebase/auth-types" "0.11.0" "@firebase/component" "0.5.6" "@firebase/util" "1.3.0" @@ -1527,10 +1527,10 @@ resolved "https://registry.yarnpkg.com/@firebase/auth-types/-/auth-types-0.11.0.tgz#b9c73c60ca07945b3bbd7a097633e5f78fa9e886" integrity sha512-q7Bt6cx+ySj9elQHTsKulwk3+qDezhzRBFC9zlQ1BjgMueUOnGMcvqmU0zuKlQ4RhLSH7MNAdBV2znVaoN3Vxw== -"@firebase/auth@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@firebase/auth/-/auth-0.17.0.tgz#e1395779293e1869fabefd07e078242c773b5fcb" - integrity sha512-4zOGTLGzMjBX96KEyBNYpjOD87c2efCZvUjaJ53QslleW9Xp8kSsSHLRhr8hOkcRXO17CmBKSRx/LnG2vTZWQQ== +"@firebase/auth@0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@firebase/auth/-/auth-0.17.1.tgz#4c3dd24ca5a9c47c5e97a9fd1bd4129c46154764" + integrity sha512-+YQM0svb10Q1LwoTj+/unrdY/F/C89bgsjlanY14k2124fiOYVZv0M19t5i7nZx8VnsrgzkFaDfKahdcDxjdpA== dependencies: "@firebase/component" "0.5.6" "@firebase/logger" "0.2.6" @@ -1607,13 +1607,13 @@ faye-websocket "0.11.3" tslib "^1.11.1" -"@firebase/firestore-compat@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@firebase/firestore-compat/-/firestore-compat-0.1.0.tgz#9faa1c10a76d67f812dd48469693e8f6bafca3ab" - integrity sha512-25r1jGpnnx7vXSPVLmHNkuz+EGpZDU5Luro5/MFCMmoV4a+Rmg2n9FRlxRyPn4XOCkc5nrBpT6ESAKAPSNHcpw== +"@firebase/firestore-compat@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@firebase/firestore-compat/-/firestore-compat-0.1.1.tgz#a990cd4b0aef5e0a18972de71d18c35065099f19" + integrity sha512-Ag95WVTSh5Q+GK3egd9HBvXerO/lrRulTO67ryYp4EPyoI/ZmnIoMhYgnOXvb1jCH0Ae01XoSxgU2M2SRvph/Q== dependencies: "@firebase/component" "0.5.6" - "@firebase/firestore" "3.0.0" + "@firebase/firestore" "3.0.1" "@firebase/firestore-types" "2.5.0" "@firebase/util" "1.3.0" tslib "^2.1.0" @@ -1623,10 +1623,10 @@ resolved "https://registry.yarnpkg.com/@firebase/firestore-types/-/firestore-types-2.5.0.tgz#16fca40b6980fdb000de86042d7a96635f2bcdd7" integrity sha512-I6c2m1zUhZ5SH0cWPmINabDyH5w0PPFHk2UHsjBpKdZllzJZ2TwTkXbDtpHUZNmnc/zAa0WNMNMvcvbb/xJLKA== -"@firebase/firestore@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-3.0.0.tgz#f7b8cc3d8d28b85a901fd66df13f4d61dcc33190" - integrity sha512-rbs5EbU/01f7NKHDtedBowpBlqnkVnQlpIuSX5wwGMiPgH8f9pMhh59JMk0cTaSqsJXsq3KvafWAD9SqWIqe2w== +"@firebase/firestore@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-3.0.1.tgz#0152c6a767e116382fb28a0e62b6ea7fa331cc20" + integrity sha512-HDnmweq9GOrk4AtCyQ50FBj/cRowb7IXeTGOx6/MSGYCodKv+9axviKqKPYlWH7cbyrw2Jf3GJTUdkVghMhn+w== dependencies: "@firebase/component" "0.5.6" "@firebase/logger" "0.2.6" @@ -1637,10 +1637,10 @@ node-fetch "2.6.1" tslib "^2.1.0" -"@firebase/functions-compat@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@firebase/functions-compat/-/functions-compat-0.1.0.tgz#53e2b3b9590b04628e9537806196d91deb3e6f3f" - integrity sha512-uNwHdGYqgIXzF7aTZBeUe00K/sadRg5EeSDuJ6VNo3Gh3ZceX4eRnL5p7l2bEJBh8hBl0brb82+TRYjGHtjtFQ== +"@firebase/functions-compat@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@firebase/functions-compat/-/functions-compat-0.1.1.tgz#b1afb89750ec4d1b9a1a9a188f20c30b75aa4a93" + integrity sha512-HELDScvKEP/tM6eW52u+5ilqweCB/cB8ONiQ0aHw2Hjdm20DQ/VsII2JEtbhnFQfuODdugvWLkWV0RPWTFwYqA== dependencies: "@firebase/component" "0.5.6" "@firebase/functions" "0.7.0" @@ -1773,13 +1773,13 @@ "@firebase/util" "1.3.0" tslib "^2.1.0" -"@firebase/storage-compat@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@firebase/storage-compat/-/storage-compat-0.1.0.tgz#b8080e3250b19ad6d98a5ade65f1a03aab73f2b8" - integrity sha512-DJstR2vidnyNSRp14LQhd9QO0PxhMm/xsXrPQ2IEmQ7EWDT4rxGd+pkqXTG6IO+k9ZKMc0BnWIYwlMqkGEJoDg== +"@firebase/storage-compat@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@firebase/storage-compat/-/storage-compat-0.1.1.tgz#9192cd26595a2a09ebef1bbd3da1b63f4716da37" + integrity sha512-W2ke6KcnrEY1zvlEZ8GOVt8wgUbIhW3ZCBUYMdpsLKB/uFmn/zgdiba+ojwerqlOH5zUe4CSULqBE1hXDm1pMw== dependencies: "@firebase/component" "0.5.6" - "@firebase/storage" "0.8.0" + "@firebase/storage" "0.8.1" "@firebase/storage-types" "0.6.0" "@firebase/util" "1.3.0" tslib "^2.1.0" @@ -1789,10 +1789,10 @@ resolved "https://registry.yarnpkg.com/@firebase/storage-types/-/storage-types-0.6.0.tgz#0b1af64a2965af46fca138e5b70700e9b7e6312a" integrity sha512-1LpWhcCb1ftpkP/akhzjzeFxgVefs6eMD2QeKiJJUGH1qOiows2w5o0sKCUSQrvrRQS1lz3SFGvNR1Ck/gqxeA== -"@firebase/storage@0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@firebase/storage/-/storage-0.8.0.tgz#2766a18a8a9684082d745ab1a93a3c88061169b1" - integrity sha512-D0HH+y3DLH0+8eOt6h19RffFMpdzPNr7Yv7XpeeM3+VLE4TbQnDie/OAQWOuWLrYoW7MsPQnLkx+zDb3DxOXxw== +"@firebase/storage@0.8.1": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@firebase/storage/-/storage-0.8.1.tgz#38959b5011df90de4041dbe7277093e010169eba" + integrity sha512-kq6biRi86JUNU3ZQc7UrUYJ+QmPmayER68sXtHmn8Kxw7p/V5MchTPVpE8iFAN5a5PhGTPKSD4cuNyUPU9C0Fg== dependencies: "@firebase/component" "0.5.6" "@firebase/util" "1.3.0" @@ -1935,9 +1935,9 @@ xdg-basedir "^4.0.0" "@grpc/grpc-js@^1.3.2": - version "1.3.6" - resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.3.6.tgz#6e2d17610c2c8df0f6ceab0e1968f563df74b173" - integrity sha512-v7+LQFbqZKmd/Tvf5/j1Xlbq6jXL/4d+gUtm2TNX4QiEC3ELWADmGr2dGlUyLl6aKTuYfsN72vAsO5zmavYkEg== + version "1.3.7" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.3.7.tgz#58b687aff93b743aafde237fd2ee9a3259d7f2d8" + integrity sha512-CKQVuwuSPh40tgOkR7c0ZisxYRiN05PcKPW72mQL5y++qd7CwBRoaJZvU5xfXnCJDFBmS3qZGQ71Frx6Ofo2XA== dependencies: "@types/node" ">=12.12.47" @@ -2418,7 +2418,7 @@ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== -"@types/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0": +"@types/node@*": version "15.3.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-15.3.0.tgz#d6fed7d6bc6854306da3dea1af9f874b00783e26" integrity sha512-8/bnjSZD86ZfpBsDlCIkNXIvm+h6wi9g7IqL+kmFkQ+Wvu3JrasgLElfiPgoo8V8vVfnEi0QVS12gbl94h9YsQ== @@ -2428,6 +2428,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.118.tgz#8014a9b1dee0b72b4d7cd142563f1af21241c3a2" integrity sha512-N33cKXGSqhOYaPiT4xUGsYlPPDwFtQM/6QxJxuMXA/7BcySW+lkn2yigWP7vfs4daiL/7NJNU6DMCqg5N4B+xQ== +"@types/node@>=12.12.47", "@types/node@>=13.7.0": + version "16.7.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.7.8.tgz#2448be5f24fe6b77114632b6350fcd219334651e" + integrity sha512-8upnoQU0OPzbIkm+ZMM0zCeFCkw2s3mS0IWdx0+AAaWqm4fkBb0UJp8Edl7FVKRamYbpJC/aVsHpKWBIbiC7Zg== + "@types/node@^12.6.2 < 12.12.42": version "12.12.41" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.41.tgz#cf48562b53ab6cf85d28dde95f1d06815af275c8" @@ -6255,6 +6260,14 @@ figures@^3.0.0, figures@^3.2.0: dependencies: escape-string-regexp "^1.0.5" +file-loader@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" + integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" @@ -6456,25 +6469,25 @@ firebase-tools@^9.0.0: ws "^7.2.3" firebase@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/firebase/-/firebase-9.0.0.tgz#00bfa03a3eb99bde43a472a8861aa808068153bb" - integrity sha512-atgnuvELhU9D5w9moChnyCb6GRbOCqk54/kHN0J4kdLJBncpcb2culIJ7nlSHILMcW9MNMiNKDJ07RwXVyqFFA== + version "9.0.1" + resolved "https://registry.yarnpkg.com/firebase/-/firebase-9.0.1.tgz#6bc5f9d7bdcd864ef98f2219fa0cd240f2e48b3c" + integrity sha512-RMpbXsVlxqMX+s/gYudnUZeSZXPiLCJMdaxbZ0WRiMjLuJc6ZkbpRy7yz7rZQpL0wRD6gN4K5C+JaKEQtN3jAQ== dependencies: "@firebase/analytics" "0.7.0" - "@firebase/analytics-compat" "0.1.0" + "@firebase/analytics-compat" "0.1.1" "@firebase/app" "0.7.0" "@firebase/app-check" "0.4.0" - "@firebase/app-check-compat" "0.1.0" - "@firebase/app-compat" "0.1.0" + "@firebase/app-check-compat" "0.1.1" + "@firebase/app-compat" "0.1.1" "@firebase/app-types" "0.7.0" - "@firebase/auth" "0.17.0" - "@firebase/auth-compat" "0.1.0" + "@firebase/auth" "0.17.1" + "@firebase/auth-compat" "0.1.1" "@firebase/database" "0.12.0" "@firebase/database-compat" "0.1.0" - "@firebase/firestore" "3.0.0" - "@firebase/firestore-compat" "0.1.0" + "@firebase/firestore" "3.0.1" + "@firebase/firestore-compat" "0.1.1" "@firebase/functions" "0.7.0" - "@firebase/functions-compat" "0.1.0" + "@firebase/functions-compat" "0.1.1" "@firebase/installations" "0.5.0" "@firebase/messaging" "0.9.0" "@firebase/messaging-compat" "0.1.0" @@ -6483,8 +6496,8 @@ firebase@^9.0.0: "@firebase/polyfill" "0.3.36" "@firebase/remote-config" "0.2.0" "@firebase/remote-config-compat" "0.1.0" - "@firebase/storage" "0.8.0" - "@firebase/storage-compat" "0.1.0" + "@firebase/storage" "0.8.1" + "@firebase/storage-compat" "0.1.1" "@firebase/util" "1.3.0" flat-arguments@^1.0.0: @@ -8591,9 +8604,9 @@ jszip@^3.1.3: set-immediate-shim "~1.0.1" jszip@^3.5.0, jszip@^3.6.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.7.0.tgz#9b8b995a4e7c9024653ce743e902076a82fdf4e6" - integrity sha512-Y2OlFIzrDOPWUnpU0LORIcDn2xN7rC9yKffFM/7pGhQuhO+SUhfm2trkJ/S5amjFvem0Y+1EALz/MEPkvHXVNw== + version "3.7.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.7.1.tgz#bd63401221c15625a1228c556ca8a68da6fda3d9" + integrity sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg== dependencies: lie "~3.3.0" pako "~1.0.2" @@ -14579,10 +14592,10 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -ws@>=7.4.6, ws@^7.3.1: - version "7.5.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" - integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== +ws@>=7.4.6: + version "8.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.1.tgz#bdd92b3c56fdb47d2379b5ae534281922cc5bd12" + integrity sha512-XkgWpJU3sHU7gX8f13NqTn6KQ85bd1WU7noBHTT8fSohx7OS1TPY8k+cyRPCzFkia7C4mM229yeHr1qK9sM4JQ== ws@^6.2.1: version "6.2.2" @@ -14596,6 +14609,11 @@ ws@^7.2.1, ws@^7.2.3, ws@~7.4.2: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1" integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g== +ws@^7.3.1: + version "7.5.4" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.4.tgz#56bfa20b167427e138a7795de68d134fe92e21f9" + integrity sha512-zP9z6GXm6zC27YtspwH99T3qTG7bBFv2VIkeHstMLrLlDJuzA7tQ5ls3OJ1hOGGCzTQPniNJoHXIAOS0Jljohg== + xdg-basedir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" @@ -14688,9 +14706,9 @@ yargs-parser@^18.1.2: decamelize "^1.2.0" yargs-parser@^20.2.2: - version "20.2.7" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" - integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== yargs@^13.3.2: version "13.3.2"