diff --git a/README.md b/README.md index 2d7ae5eb..c2df8bbb 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ yarn add react-firehooks ## Compatibility -- [firebase](https://www.npmjs.com/package/firebase): 9.11.0 or later +- [firebase](https://www.npmjs.com/package/firebase): 10.5.0 or later - [react](https://www.npmjs.com/package/react): 16.8.0 or later ## Usage diff --git a/docs/firestore.md b/docs/firestore.md index b49aa8d8..6825f9f8 100644 --- a/docs/firestore.md +++ b/docs/firestore.md @@ -4,6 +4,25 @@ import { ... } from 'react-firehooks/firestore'; ``` +#### useAggregateFromServer + +Returns aggregate of a Firestore Query. Does not update the result once initially calculated. + +```javascript +const [data, loading, error] = useAggregateFromServer(query, aggregateSpec); +``` + +Params: + +- `query`: Firestore query the aggregate is calculated for +- `aggregateSpec`: Aggregate specification + +Returns: + +- `value`: Aggregate of the Firestore query; `undefined` if the aggregate is currently being calculated, or an error occurred +- `loading`: `true` while calculating the aggregate; `false` if the aggregate was calculated successfully or an error occurred +- `error`: `undefined` if no error occurred + ## useCountFromServer Returns the number of documents in the result set of of a Firestore Query. Does not update the count once initially calculated. diff --git a/migrations/v4.md b/migrations/v4.md new file mode 100644 index 00000000..bf554656 --- /dev/null +++ b/migrations/v4.md @@ -0,0 +1,5 @@ +# Migrate from v3 to v4 + +## Peer dependency + +This library now requires firebase 10.5.0 or later diff --git a/package-lock.json b/package-lock.json index 3fda12b9..bf2cc1c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "eslint-plugin-prettier": "5.0.0", "eslint-plugin-react": "7.33.2", "eslint-plugin-react-hooks": "4.6.0", - "firebase": "9.11.0", + "firebase": "10.5.0", "happy-dom": "12.2.2", "husky": "8.0.3", "lint-staged": "14.0.1", @@ -37,7 +37,7 @@ "vitest": "0.34.6" }, "peerDependencies": { - "firebase": "^9.11.0 || ^10.0.0", + "firebase": "^10.5.0", "react": ">=16.8.0" } }, @@ -623,15 +623,15 @@ } }, "node_modules/@firebase/analytics": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.8.1.tgz", - "integrity": "sha512-br/PBwPAuVdmuxt6k9S6Wtyvgh5YC4vPsY4zv/AtzrgIiXhlJKi28If9Pfh0z9W0dLuqTLSVI0MNzUV/hH5oTA==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.0.tgz", + "integrity": "sha512-Locv8gAqx0e+GX/0SI3dzmBY5e9kjVDtD+3zCFLJ0tH2hJwuCAiL+5WkHuxKj92rqQj/rvkBUCfA1ewlX2hehg==", "dev": true, "dependencies": { - "@firebase/component": "0.5.18", - "@firebase/installations": "0.5.13", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/installations": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" }, "peerDependencies": { @@ -639,15 +639,15 @@ } }, "node_modules/@firebase/analytics-compat": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.1.14.tgz", - "integrity": "sha512-HNuXTm+EYSf0T9N69UMmy9eVUipxxV8BhkCDPOdmUaa4syO4CtYk5qZt2k1qLygJI9wVFdiZeTU00FAgWK1/6A==", + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.6.tgz", + "integrity": "sha512-4MqpVLFkGK7NJf/5wPEEP7ePBJatwYpyjgJ+wQHQGHfzaCDgntOnl9rL2vbVGGKCnRqWtZDIWhctB86UWXaX2Q==", "dev": true, "dependencies": { - "@firebase/analytics": "0.8.1", - "@firebase/analytics-types": "0.7.0", - "@firebase/component": "0.5.18", - "@firebase/util": "1.7.0", + "@firebase/analytics": "0.10.0", + "@firebase/analytics-types": "0.8.0", + "@firebase/component": "0.6.4", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" }, "peerDependencies": { @@ -655,33 +655,33 @@ } }, "node_modules/@firebase/analytics-types": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.7.0.tgz", - "integrity": "sha512-DNE2Waiwy5+zZnCfintkDtBfaW6MjIG883474v6Z0K1XZIvl76cLND4iv0YUb48leyF+PJK1KO2XrgHb/KpmhQ==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.8.0.tgz", + "integrity": "sha512-iRP+QKI2+oz3UAh4nPEq14CsEjrjD6a5+fuypjScisAh9kXKFvdJOZJDwk7kikLvWVLGEs9+kIUS4LPQV7VZVw==", "dev": true }, "node_modules/@firebase/app": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.8.0.tgz", - "integrity": "sha512-9kZjhIDv4u4PlrCgcQVBA2u8BZHrP8rUWDltmCUi9BLHv0tltfxLMZODV5LeuAfCJKVp2dbIrpGHPxAaLLl/ww==", + "version": "0.9.20", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.9.20.tgz", + "integrity": "sha512-cMTDHr+1GfYyHBSLLvvTE8ywlDCKk/E8cUZmfv0ODmUBB1vXgrICShj7yH9UYf6m7l6pxad8T+qI/oAoAkCp2Q==", "dev": true, "dependencies": { - "@firebase/component": "0.5.18", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.7.0", - "idb": "7.0.1", + "@firebase/component": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", + "idb": "7.1.1", "tslib": "^2.1.0" } }, "node_modules/@firebase/app-check": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.5.13.tgz", - "integrity": "sha512-+1E2aDvd7vo4QidEyQFZaHur4r8oaHXZZ/SqykK2bcHBF3ihimJgrGBbtvOdUzrR0MOCZx9a18nXAJqevi/+Ow==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.8.0.tgz", + "integrity": "sha512-dRDnhkcaC2FspMiRK/Vbp+PfsOAEP6ZElGm9iGFJ9fDqHoPs0HOPn7dwpJ51lCFi1+2/7n5pRPGhqF/F03I97g==", "dev": true, "dependencies": { - "@firebase/component": "0.5.18", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" }, "peerDependencies": { @@ -689,16 +689,16 @@ } }, "node_modules/@firebase/app-check-compat": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.2.13.tgz", - "integrity": "sha512-vVj6hcdwAOyR4GWrASyki9HhC8mIDN4hta7k/WC0k4UeWCjthfSgR+8Ce7HHp8h4fB5LhVFgFC8QI07sZ2O7jA==", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.3.7.tgz", + "integrity": "sha512-cW682AxsyP1G+Z0/P7pO/WT2CzYlNxoNe5QejVarW2o5ZxeWSSPAiVEwpEpQR/bUlUmdeWThYTMvBWaopdBsqw==", "dev": true, "dependencies": { - "@firebase/app-check": "0.5.13", - "@firebase/app-check-types": "0.4.0", - "@firebase/component": "0.5.18", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.7.0", + "@firebase/app-check": "0.8.0", + "@firebase/app-check-types": "0.5.0", + "@firebase/component": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" }, "peerDependencies": { @@ -706,65 +706,69 @@ } }, "node_modules/@firebase/app-check-interop-types": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.1.0.tgz", - "integrity": "sha512-uZfn9s4uuRsaX5Lwx+gFP3B6YsyOKUE+Rqa6z9ojT4VSRAsZFko9FRn6OxQUA1z5t5d08fY4pf+/+Dkd5wbdbA==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.0.tgz", + "integrity": "sha512-xAxHPZPIgFXnI+vb4sbBjZcde7ZluzPPaSK7Lx3/nmuVk4TjZvnL8ONnkd4ERQKL8WePQySU+pRcWkh8rDf5Sg==", "dev": true }, "node_modules/@firebase/app-check-types": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.4.0.tgz", - "integrity": "sha512-SsWafqMABIOu7zLgWbmwvHGOeQQVQlwm42kwwubsmfLmL4Sf5uGpBfDhQ0CAkpi7bkJ/NwNFKafNDL9prRNP0Q==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.5.0.tgz", + "integrity": "sha512-uwSUj32Mlubybw7tedRzR24RP8M8JUVR3NPiMk3/Z4bCmgEKTlQBwMXrehDAZ2wF+TsBq0SN1c6ema71U/JPyQ==", "dev": true }, "node_modules/@firebase/app-compat": { - "version": "0.1.35", - "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.1.35.tgz", - "integrity": "sha512-6ax9yXCPEBSREHxo+nCpSgSg01mGTvR4I7u/EHqVNNqG8uEWog7sUan3Y3vr3q3zH8t5BkXDGejOH9atF+XnAQ==", + "version": "0.2.20", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.20.tgz", + "integrity": "sha512-FXgdjgwUruLMZMh0HDwLmbcu2ImckT10HPdXZyzIJoaor9OenoTQO2RLk2xvvOL/JJnszN6kmv56c+8qA4KFXQ==", "dev": true, "dependencies": { - "@firebase/app": "0.8.0", - "@firebase/component": "0.5.18", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.7.0", + "@firebase/app": "0.9.20", + "@firebase/component": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" } }, "node_modules/@firebase/app-types": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.8.0.tgz", - "integrity": "sha512-Lec3VVquUwXPn2UReGSsfTxuMBVRmzGIwA/CJnF0LQuPgv9kOmXk9mVqsDMfHxHtqjai0n6wWHR2TqjdVV/bYA==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.0.tgz", + "integrity": "sha512-AeweANOIo0Mb8GiYm3xhTEBVCmPwTYAu9Hcd2qSkLuga/6+j9b1Jskl5bpiSQWy9eJ/j5pavxj6eYogmnuzm+Q==", "dev": true }, "node_modules/@firebase/auth": { - "version": "0.20.8", - "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.20.8.tgz", - "integrity": "sha512-ss0Uyp5sLrGRR/8bbkZTod5gmdgltqvcxQySAKYGbsyBq4j+RTjZzVqUHZHFY7f8NLm2Bz4hO1dZRaIUYW8zLw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.3.0.tgz", + "integrity": "sha512-vjK4CHbY9aWdiVOrKi6mpa8z6uxeaf7LB/MZTHuZOiGHMcUoTGB6TeMbRShyqk1uaMrxhhZ5Ar/dR0965E1qyA==", "dev": true, "dependencies": { - "@firebase/component": "0.5.18", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", "node-fetch": "2.6.7", - "selenium-webdriver": "4.1.2", "tslib": "^2.1.0" }, "peerDependencies": { - "@firebase/app": "0.x" + "@firebase/app": "0.x", + "@react-native-async-storage/async-storage": "^1.18.1" + }, + "peerDependenciesMeta": { + "@react-native-async-storage/async-storage": { + "optional": true + } } }, "node_modules/@firebase/auth-compat": { - "version": "0.2.21", - "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.2.21.tgz", - "integrity": "sha512-etu40X/AdVWys/RvTZ0lHCmglGT3vEos+LS3O5u+L7vLOJ0LsiV8i9bFBPCv9aZcqK/R7cs9bGLQdZB9QwimVQ==", + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.4.6.tgz", + "integrity": "sha512-pKp1d4fSf+yoy1EBjTx9ISxlunqhW0vTICk0ByZ3e+Lp6ZIXThfUy4F1hAJlEafD/arM0oepRiAh7LXS1xn/BA==", "dev": true, "dependencies": { - "@firebase/auth": "0.20.8", - "@firebase/auth-types": "0.11.0", - "@firebase/component": "0.5.18", - "@firebase/util": "1.7.0", + "@firebase/auth": "1.3.0", + "@firebase/auth-types": "0.12.0", + "@firebase/component": "0.6.4", + "@firebase/util": "1.9.3", "node-fetch": "2.6.7", - "selenium-webdriver": "4.1.2", "tslib": "^2.1.0" }, "peerDependencies": { @@ -772,19 +776,15 @@ } }, "node_modules/@firebase/auth-interop-types": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.6.tgz", - "integrity": "sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g==", - "dev": true, - "peerDependencies": { - "@firebase/app-types": "0.x", - "@firebase/util": "1.x" - } + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.1.tgz", + "integrity": "sha512-VOaGzKp65MY6P5FI84TfYKBXEPi6LmOCSMMzys6o2BN2LOsqy7pCuZCup7NYnfbk5OkkQKzvIfHOzTm0UDpkyg==", + "dev": true }, "node_modules/@firebase/auth-types": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.11.0.tgz", - "integrity": "sha512-q7Bt6cx+ySj9elQHTsKulwk3+qDezhzRBFC9zlQ1BjgMueUOnGMcvqmU0zuKlQ4RhLSH7MNAdBV2znVaoN3Vxw==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.12.0.tgz", + "integrity": "sha512-pPwaZt+SPOshK8xNoiQlK5XIrS97kFYc3Rc7xmy373QsOJ9MmqXxLaYssP5Kcds4wd2qK//amx/c+A8O2fVeZA==", "dev": true, "peerDependencies": { "@firebase/app-types": "0.x", @@ -792,65 +792,65 @@ } }, "node_modules/@firebase/component": { - "version": "0.5.18", - "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.5.18.tgz", - "integrity": "sha512-worbz6idNWud/Sfpp3Lf9BE9tM8GRHhuQ4Hsqnva6ECdSRKYt8RRPg3UUSwDGa4iFpPo+gF/jKfydYN676+JmQ==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.4.tgz", + "integrity": "sha512-rLMyrXuO9jcAUCaQXCMjCMUsWrba5fzHlNK24xz5j2W6A/SRmK8mZJ/hn7V0fViLbxC0lPMtrK1eYzk6Fg03jA==", "dev": true, "dependencies": { - "@firebase/util": "1.7.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" } }, "node_modules/@firebase/database": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.13.7.tgz", - "integrity": "sha512-j72yRxwGMcRnB+KwmyQYpPJHb5oNgbTS17ecAm8cX1GEyRohbZiE9GljbMaoOxSz/r8XuVfe748gEk5HFSEtSA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.0.1.tgz", + "integrity": "sha512-VAhF7gYwunW4Lw/+RQZvW8dlsf2r0YYqV9W0Gi2Mz8+0TGg1mBJWoUtsHfOr8kPJXhcLsC4eP/z3x6L/Fvjk/A==", "dev": true, "dependencies": { - "@firebase/auth-interop-types": "0.1.6", - "@firebase/component": "0.5.18", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.7.0", + "@firebase/auth-interop-types": "0.2.1", + "@firebase/component": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", "faye-websocket": "0.11.4", "tslib": "^2.1.0" } }, "node_modules/@firebase/database-compat": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-0.2.7.tgz", - "integrity": "sha512-D9nTb8RNb3RbsKtwUFDykIeUbuBgVSDKE+b6dCgVi9PS7sNATdZPpKGjxLIAxCggyRTgfMj5pr0S5fhrMedRNw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-1.0.1.tgz", + "integrity": "sha512-ky82yLIboLxtAIWyW/52a6HLMVTzD2kpZlEilVDok73pNPLjkJYowj8iaIWK5nTy7+6Gxt7d00zfjL6zckGdXQ==", "dev": true, "dependencies": { - "@firebase/component": "0.5.18", - "@firebase/database": "0.13.7", - "@firebase/database-types": "0.9.14", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/database": "1.0.1", + "@firebase/database-types": "1.0.0", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" } }, "node_modules/@firebase/database-types": { - "version": "0.9.14", - "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.9.14.tgz", - "integrity": "sha512-utMsusFMr5HuyiKxFyeOXU4hvC7hdJFTiyUWTQpLFODRwhtoPE539Y1I3r/LJhSPyt8dtds2GSjnvIbCvDezLQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.0.tgz", + "integrity": "sha512-SjnXStoE0Q56HcFgNQ+9SsmJc0c8TqGARdI/T44KXy+Ets3r6x/ivhQozT66bMnCEjJRywYoxNurRTMlZF8VNg==", "dev": true, "dependencies": { - "@firebase/app-types": "0.8.0", - "@firebase/util": "1.7.0" + "@firebase/app-types": "0.9.0", + "@firebase/util": "1.9.3" } }, "node_modules/@firebase/firestore": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-3.6.0.tgz", - "integrity": "sha512-vGeC2nXx/Ca+HsFhBLzz3jX1v571AZtNGf7AX0lMXeL+t0awWsAdq0ahkNRMjejhK5zVa68H/zg2RCO7fg8JiA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.3.0.tgz", + "integrity": "sha512-FwSMCxGdUuA9Su74I9himAKJogzjU41IBjjnNf0+5smORMKtWlNeeXqMpljrhZubj5V+GmWyExf5UD3y1in6FA==", "dev": true, "dependencies": { - "@firebase/component": "0.5.18", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.7.0", - "@firebase/webchannel-wrapper": "0.7.0", - "@grpc/grpc-js": "^1.3.2", - "@grpc/proto-loader": "^0.6.13", + "@firebase/component": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", + "@firebase/webchannel-wrapper": "0.10.3", + "@grpc/grpc-js": "~1.9.0", + "@grpc/proto-loader": "^0.7.8", "node-fetch": "2.6.7", "tslib": "^2.1.0" }, @@ -862,15 +862,15 @@ } }, "node_modules/@firebase/firestore-compat": { - "version": "0.1.26", - "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.1.26.tgz", - "integrity": "sha512-e0cIToek3tmbzd1UK7fFii6Fo+s2QoJt4Q9ZKxP6cBaMowZoWxZs8/cE7TPsnpgrx5BNc1DjLdpUh0vAuk+q4Q==", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.19.tgz", + "integrity": "sha512-hRcW9oTyluap8Qko/yqtgk4O/BJmR4FxkvF+P6LVvoqtspKLfQL70jJvzr1gYCCXn2OY8XUI7Q9BVdsTzEEONA==", "dev": true, "dependencies": { - "@firebase/component": "0.5.18", - "@firebase/firestore": "3.6.0", - "@firebase/firestore-types": "2.5.0", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/firestore": "4.3.0", + "@firebase/firestore-types": "3.0.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" }, "peerDependencies": { @@ -878,9 +878,9 @@ } }, "node_modules/@firebase/firestore-types": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-2.5.0.tgz", - "integrity": "sha512-I6c2m1zUhZ5SH0cWPmINabDyH5w0PPFHk2UHsjBpKdZllzJZ2TwTkXbDtpHUZNmnc/zAa0WNMNMvcvbb/xJLKA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-3.0.0.tgz", + "integrity": "sha512-Meg4cIezHo9zLamw0ymFYBD4SMjLb+ZXIbuN7T7ddXN6MGoICmOTq3/ltdCGoDCS2u+H1XJs2u/cYp75jsX9Qw==", "dev": true, "peerDependencies": { "@firebase/app-types": "0.x", @@ -888,16 +888,16 @@ } }, "node_modules/@firebase/functions": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.8.5.tgz", - "integrity": "sha512-oI4ipogH6x+2euHGs+l+cZmRwg8psYxblbO5YebB7nh+x2UcFE4+4uDUXQc7XQrT4b1uDbrW343BU46RKFtwWg==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.10.0.tgz", + "integrity": "sha512-2U+fMNxTYhtwSpkkR6WbBcuNMOVaI7MaH3cZ6UAeNfj7AgEwHwMIFLPpC13YNZhno219F0lfxzTAA0N62ndWzA==", "dev": true, "dependencies": { - "@firebase/app-check-interop-types": "0.1.0", - "@firebase/auth-interop-types": "0.1.6", - "@firebase/component": "0.5.18", - "@firebase/messaging-interop-types": "0.1.0", - "@firebase/util": "1.7.0", + "@firebase/app-check-interop-types": "0.3.0", + "@firebase/auth-interop-types": "0.2.1", + "@firebase/component": "0.6.4", + "@firebase/messaging-interop-types": "0.2.0", + "@firebase/util": "1.9.3", "node-fetch": "2.6.7", "tslib": "^2.1.0" }, @@ -906,15 +906,15 @@ } }, "node_modules/@firebase/functions-compat": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.2.5.tgz", - "integrity": "sha512-r9lUxkBNmfulLfujdO7W2AAyH1I3QQBvrRlNoub8TNU+2UbqAfFde7yV0DhOCGhr75zp4ZVv71Zw6wIgwC0G1Q==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.3.5.tgz", + "integrity": "sha512-uD4jwgwVqdWf6uc3NRKF8cSZ0JwGqSlyhPgackyUPe+GAtnERpS4+Vr66g0b3Gge0ezG4iyHo/EXW/Hjx7QhHw==", "dev": true, "dependencies": { - "@firebase/component": "0.5.18", - "@firebase/functions": "0.8.5", - "@firebase/functions-types": "0.5.0", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/functions": "0.10.0", + "@firebase/functions-types": "0.6.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" }, "peerDependencies": { @@ -922,19 +922,19 @@ } }, "node_modules/@firebase/functions-types": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.5.0.tgz", - "integrity": "sha512-qza0M5EwX+Ocrl1cYI14zoipUX4gI/Shwqv0C1nB864INAD42Dgv4v94BCyxGHBg2kzlWy8PNafdP7zPO8aJQA==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.6.0.tgz", + "integrity": "sha512-hfEw5VJtgWXIRf92ImLkgENqpL6IWpYaXVYiRkFY1jJ9+6tIhWM7IzzwbevwIIud/jaxKVdRzD7QBWfPmkwCYw==", "dev": true }, "node_modules/@firebase/installations": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.5.13.tgz", - "integrity": "sha512-T3+RIeqMA1vpnSOK/1wckpSSk3zbLNQgDWoiymwvK/FxjPFHO/LY1W0guqTmiYgK0stdLIHXh7syli5HboO47g==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.4.tgz", + "integrity": "sha512-u5y88rtsp7NYkCHC3ElbFBrPtieUybZluXyzl7+4BsIz4sqb4vSAuwHEUgCgCeaQhvsnxDEU6icly8U9zsJigA==", "dev": true, "dependencies": { - "@firebase/component": "0.5.18", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/util": "1.9.3", "idb": "7.0.1", "tslib": "^2.1.0" }, @@ -943,15 +943,15 @@ } }, "node_modules/@firebase/installations-compat": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.1.13.tgz", - "integrity": "sha512-JDdne03YV4VfIyGkmlg8ltSHS0hOzQXLkn2gDzvKsyvke0EAUI9HLHUDQAOKVpyn7LsDwFTub5QcrR0owG8b+Q==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.4.tgz", + "integrity": "sha512-LI9dYjp0aT9Njkn9U4JRrDqQ6KXeAmFbRC0E7jI7+hxl5YmRWysq5qgQl22hcWpTk+cm3es66d/apoDU/A9n6Q==", "dev": true, "dependencies": { - "@firebase/component": "0.5.18", - "@firebase/installations": "0.5.13", - "@firebase/installations-types": "0.4.0", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/installations": "0.6.4", + "@firebase/installations-types": "0.5.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" }, "peerDependencies": { @@ -959,33 +959,39 @@ } }, "node_modules/@firebase/installations-types": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.4.0.tgz", - "integrity": "sha512-nXxWKQDvBGctuvsizbUEJKfxXU9WAaDhon+j0jpjIfOJkvkj3YHqlLB/HeYjpUn85Pb22BjplpTnDn4Gm9pc3A==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.5.0.tgz", + "integrity": "sha512-9DP+RGfzoI2jH7gY4SlzqvZ+hr7gYzPODrbzVD82Y12kScZ6ZpRg/i3j6rleto8vTFC8n6Len4560FnV1w2IRg==", "dev": true, "peerDependencies": { "@firebase/app-types": "0.x" } }, + "node_modules/@firebase/installations/node_modules/idb": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.0.1.tgz", + "integrity": "sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg==", + "dev": true + }, "node_modules/@firebase/logger": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.3.3.tgz", - "integrity": "sha512-POTJl07jOKTOevLXrTvJD/VZ0M6PnJXflbAh5J9VGkmtXPXNG6MdZ9fmRgqYhXKTaDId6AQenQ262uwgpdtO0Q==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", "dev": true, "dependencies": { "tslib": "^2.1.0" } }, "node_modules/@firebase/messaging": { - "version": "0.9.17", - "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.9.17.tgz", - "integrity": "sha512-oyjPT1lutJqiivl3UxkJeLrNbOkakFKMUYYviEPEL1PAU+yfKWp7IbRaZPZy4Av+i0sSdLDyB8H803B6tZ+C0Q==", + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.4.tgz", + "integrity": "sha512-6JLZct6zUaex4g7HI3QbzeUrg9xcnmDAPTWpkoMpd/GoSVWH98zDoWXMGrcvHeCAIsLpFMe4MPoZkJbrPhaASw==", "dev": true, "dependencies": { - "@firebase/component": "0.5.18", - "@firebase/installations": "0.5.13", - "@firebase/messaging-interop-types": "0.1.0", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/installations": "0.6.4", + "@firebase/messaging-interop-types": "0.2.0", + "@firebase/util": "1.9.3", "idb": "7.0.1", "tslib": "^2.1.0" }, @@ -994,14 +1000,14 @@ } }, "node_modules/@firebase/messaging-compat": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.1.17.tgz", - "integrity": "sha512-WRaWizUMurqDQkCHzkW2XJkJl6BqSLhrCoCcClyIdC4XEolAgIo9X4Jy2Jd7HiX6SUSPgwEv0u93MnuIS9JWGw==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.4.tgz", + "integrity": "sha512-lyFjeUhIsPRYDPNIkYX1LcZMpoVbBWXX4rPl7c/rqc7G+EUea7IEtSt4MxTvh6fDfPuzLn7+FZADfscC+tNMfg==", "dev": true, "dependencies": { - "@firebase/component": "0.5.18", - "@firebase/messaging": "0.9.17", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/messaging": "0.12.4", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" }, "peerDependencies": { @@ -1009,21 +1015,27 @@ } }, "node_modules/@firebase/messaging-interop-types": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.1.0.tgz", - "integrity": "sha512-DbvUl/rXAZpQeKBnwz0NYY5OCqr2nFA0Bj28Fmr3NXGqR4PAkfTOHuQlVtLO1Nudo3q0HxAYLa68ZDAcuv2uKQ==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.0.tgz", + "integrity": "sha512-ujA8dcRuVeBixGR9CtegfpU4YmZf3Lt7QYkcj693FFannwNuZgfAYaTmbJ40dtjB81SAu6tbFPL9YLNT15KmOQ==", + "dev": true + }, + "node_modules/@firebase/messaging/node_modules/idb": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.0.1.tgz", + "integrity": "sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg==", "dev": true }, "node_modules/@firebase/performance": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.5.13.tgz", - "integrity": "sha512-k35iR9LcRUsuyEa4sXzBaVKMaFGgDgI3fjHtcmfjspeSywTigbCWxGoN551uk+udAkC0ENnODGm6t/T/ie4HaQ==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.6.4.tgz", + "integrity": "sha512-HfTn/bd8mfy/61vEqaBelNiNnvAbUtME2S25A67Nb34zVuCSCRIX4SseXY6zBnOFj3oLisaEqhVcJmVPAej67g==", "dev": true, "dependencies": { - "@firebase/component": "0.5.18", - "@firebase/installations": "0.5.13", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/installations": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" }, "peerDependencies": { @@ -1031,16 +1043,16 @@ } }, "node_modules/@firebase/performance-compat": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.1.13.tgz", - "integrity": "sha512-Den0APOV7bqnQxLuAhzo4dIkojbKR30/Q+8qeDrbdMHZL50wkZm09/OGqXoViCTy8zHDaau+Wp78z0qMqwUFxg==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.4.tgz", + "integrity": "sha512-nnHUb8uP9G8islzcld/k6Bg5RhX62VpbAb/Anj7IXs/hp32Eb2LqFPZK4sy3pKkBUO5wcrlRWQa6wKOxqlUqsg==", "dev": true, "dependencies": { - "@firebase/component": "0.5.18", - "@firebase/logger": "0.3.3", - "@firebase/performance": "0.5.13", - "@firebase/performance-types": "0.1.0", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/performance": "0.6.4", + "@firebase/performance-types": "0.2.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" }, "peerDependencies": { @@ -1048,21 +1060,21 @@ } }, "node_modules/@firebase/performance-types": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.1.0.tgz", - "integrity": "sha512-6p1HxrH0mpx+622Ql6fcxFxfkYSBpE3LSuwM7iTtYU2nw91Hj6THC8Bc8z4nboIq7WvgsT/kOTYVVZzCSlXl8w==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.2.0.tgz", + "integrity": "sha512-kYrbr8e/CYr1KLrLYZZt2noNnf+pRwDq2KK9Au9jHrBMnb0/C9X9yWSXmZkFt4UIdsQknBq8uBB7fsybZdOBTA==", "dev": true }, "node_modules/@firebase/remote-config": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.3.12.tgz", - "integrity": "sha512-Vhsr6H/onMOiNnEcEBfcv1qadtMtaIwI2oDAP4bbqmCp84XtbizUqY0Y0psOAjKArAbkoqc/33cngRl093YOIQ==", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.4.4.tgz", + "integrity": "sha512-x1ioTHGX8ZwDSTOVp8PBLv2/wfwKzb4pxi0gFezS5GCJwbLlloUH4YYZHHS83IPxnua8b6l0IXUaWd0RgbWwzQ==", "dev": true, "dependencies": { - "@firebase/component": "0.5.18", - "@firebase/installations": "0.5.13", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/installations": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" }, "peerDependencies": { @@ -1070,16 +1082,16 @@ } }, "node_modules/@firebase/remote-config-compat": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.1.13.tgz", - "integrity": "sha512-7bvcMosoS9fTXV305Cx62cyDFFk/CkToIrOR3tTKYr5cG/OKhrk0S/z9Wk6rowhgKHkg2SSZr5Difrj3vQPXDQ==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.4.tgz", + "integrity": "sha512-FKiki53jZirrDFkBHglB3C07j5wBpitAaj8kLME6g8Mx+aq7u9P7qfmuSRytiOItADhWUj7O1JIv7n9q87SuwA==", "dev": true, "dependencies": { - "@firebase/component": "0.5.18", - "@firebase/logger": "0.3.3", - "@firebase/remote-config": "0.3.12", - "@firebase/remote-config-types": "0.2.0", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/remote-config": "0.4.4", + "@firebase/remote-config-types": "0.3.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" }, "peerDependencies": { @@ -1087,19 +1099,19 @@ } }, "node_modules/@firebase/remote-config-types": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.2.0.tgz", - "integrity": "sha512-hqK5sCPeZvcHQ1D6VjJZdW6EexLTXNMJfPdTwbD8NrXUw6UjWC4KWhLK/TSlL0QPsQtcKRkaaoP+9QCgKfMFPw==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.3.0.tgz", + "integrity": "sha512-RtEH4vdcbXZuZWRZbIRmQVBNsE7VDQpet2qFvq6vwKLBIQRQR5Kh58M4ok3A3US8Sr3rubYnaGqZSurCwI8uMA==", "dev": true }, "node_modules/@firebase/storage": { - "version": "0.9.10", - "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.9.10.tgz", - "integrity": "sha512-GXJSP/VqWNGi3gD8d59y5Ls4iW/jkX4CKuI4T6oST6eNnLrJcx68JbeOSv+37c9eBVT1d8O7LFX3oeKVWBhvRg==", + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.11.2.tgz", + "integrity": "sha512-CtvoFaBI4hGXlXbaCHf8humajkbXhs39Nbh6MbNxtwJiCqxPy9iH3D3CCfXAvP0QvAAwmJUTK3+z9a++Kc4nkA==", "dev": true, "dependencies": { - "@firebase/component": "0.5.18", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/util": "1.9.3", "node-fetch": "2.6.7", "tslib": "^2.1.0" }, @@ -1108,15 +1120,15 @@ } }, "node_modules/@firebase/storage-compat": { - "version": "0.1.18", - "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.1.18.tgz", - "integrity": "sha512-ULHyM0vXX/vM/tZhYJQbkk5mnv/eQPTs9KAnIdJh7o7Hj6cvNg0Hq8x9Y/QtqLZBfnm9ATszvD41mqLD4LzrGQ==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.3.2.tgz", + "integrity": "sha512-wvsXlLa9DVOMQJckbDNhXKKxRNNewyUhhbXev3t8kSgoCotd1v3MmqhKKz93ePhDnhHnDs7bYHy+Qa8dRY6BXw==", "dev": true, "dependencies": { - "@firebase/component": "0.5.18", - "@firebase/storage": "0.9.10", - "@firebase/storage-types": "0.6.0", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/storage": "0.11.2", + "@firebase/storage-types": "0.8.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" }, "peerDependencies": { @@ -1124,9 +1136,9 @@ } }, "node_modules/@firebase/storage-types": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.6.0.tgz", - "integrity": "sha512-1LpWhcCb1ftpkP/akhzjzeFxgVefs6eMD2QeKiJJUGH1qOiows2w5o0sKCUSQrvrRQS1lz3SFGvNR1Ck/gqxeA==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.8.0.tgz", + "integrity": "sha512-isRHcGrTs9kITJC0AVehHfpraWFui39MPaU7Eo8QfWlqW7YPymBmRgjDrlOgFdURh6Cdeg07zmkLP5tzTKRSpg==", "dev": true, "peerDependencies": { "@firebase/app-types": "0.x", @@ -1134,93 +1146,43 @@ } }, "node_modules/@firebase/util": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.7.0.tgz", - "integrity": "sha512-n5g1WWd+E5IYQwtKxmTJDlhfT762mk/d7yigeh8QaS46cnvngwguOhNwlS8fniEJ7pAgyZ9v05OQMKdfMnws6g==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.3.tgz", + "integrity": "sha512-DY02CRhOZwpzO36fHpuVysz6JZrscPiBXD0fXp6qSrL9oNOx5KWICKdR95C0lSITzxp0TZosVyHqzatE8JbcjA==", "dev": true, "dependencies": { "tslib": "^2.1.0" } }, "node_modules/@firebase/webchannel-wrapper": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.7.0.tgz", - "integrity": "sha512-4ACd/c6ushrLuhn0+yjB9hznhnsc2IML6pf0Ulb1Q7w8SvR1jNGPu/Y7i4kvOm6R+WJkMHwyy5z3i3gN+Tawug==", + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.10.3.tgz", + "integrity": "sha512-+ZplYUN3HOpgCfgInqgdDAbkGGVzES1cs32JJpeqoh87SkRobGXElJx+1GZSaDqzFL+bYiX18qEcBK76mYs8uA==", "dev": true }, "node_modules/@grpc/grpc-js": { - "version": "1.8.11", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.11.tgz", - "integrity": "sha512-f/xC+6Z2QKsRJ+VSSFlt4hA5KSRm+PKvMWV8kMPkMgGlFidR6PeIkXrOasIY2roe+WROM6GFQLlgDKfeEZo2YQ==", + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.5.tgz", + "integrity": "sha512-iouYNlPxRAwZ2XboDT+OfRKHuaKHiqjB5VFYZ0NFrHkbEF+AV3muIUY9olQsp8uxU4VvRCMiRk9ftzFDGb61aw==", "dev": true, "dependencies": { - "@grpc/proto-loader": "^0.7.0", + "@grpc/proto-loader": "^0.7.8", "@types/node": ">=12.12.47" }, "engines": { "node": "^8.13.0 || >=10.10.0" } }, - "node_modules/@grpc/grpc-js/node_modules/@grpc/proto-loader": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.5.tgz", - "integrity": "sha512-mfcTuMbFowq1wh/Rn5KQl6qb95M21Prej3bewD9dUQMurYGVckGO/Pbe2Ocwto6sD05b/mxZLspvqwx60xO2Rg==", - "dev": true, - "dependencies": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^7.0.0", - "yargs": "^16.2.0" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@grpc/grpc-js/node_modules/protobufjs": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz", - "integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@grpc/grpc-js/node_modules/protobufjs/node_modules/long": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", - "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==", - "dev": true - }, "node_modules/@grpc/proto-loader": { - "version": "0.6.13", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz", - "integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==", + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.10.tgz", + "integrity": "sha512-CAqDfoaQ8ykFd9zqBDn4k6iWT9loLAlc2ETmDFS9JCD70gDcnA4L3AFEo2iV7KyAtAAHFW9ftq1Fz+Vsgq80RQ==", "dev": true, "dependencies": { - "@types/long": "^4.0.1", "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^6.11.3", - "yargs": "^16.2.0" + "long": "^5.0.0", + "protobufjs": "^7.2.4", + "yargs": "^17.7.2" }, "bin": { "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" @@ -2329,12 +2291,6 @@ "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", "dev": true }, - "node_modules/@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", - "dev": true - }, "node_modules/@types/node": { "version": "14.14.37", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.37.tgz", @@ -3427,14 +3383,17 @@ } }, "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/color-convert": { @@ -5098,37 +5057,37 @@ } }, "node_modules/firebase": { - "version": "9.11.0", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-9.11.0.tgz", - "integrity": "sha512-AOPj3FmpweMulG3A1901hOhbCoW22IHQuRfst0Tew9Xc8Ldq75uILu0MnmCYdMVGitF7uTFVOFeyhWyGvMxpKw==", - "dev": true, - "dependencies": { - "@firebase/analytics": "0.8.1", - "@firebase/analytics-compat": "0.1.14", - "@firebase/app": "0.8.0", - "@firebase/app-check": "0.5.13", - "@firebase/app-check-compat": "0.2.13", - "@firebase/app-compat": "0.1.35", - "@firebase/app-types": "0.8.0", - "@firebase/auth": "0.20.8", - "@firebase/auth-compat": "0.2.21", - "@firebase/database": "0.13.7", - "@firebase/database-compat": "0.2.7", - "@firebase/firestore": "3.6.0", - "@firebase/firestore-compat": "0.1.26", - "@firebase/functions": "0.8.5", - "@firebase/functions-compat": "0.2.5", - "@firebase/installations": "0.5.13", - "@firebase/installations-compat": "0.1.13", - "@firebase/messaging": "0.9.17", - "@firebase/messaging-compat": "0.1.17", - "@firebase/performance": "0.5.13", - "@firebase/performance-compat": "0.1.13", - "@firebase/remote-config": "0.3.12", - "@firebase/remote-config-compat": "0.1.13", - "@firebase/storage": "0.9.10", - "@firebase/storage-compat": "0.1.18", - "@firebase/util": "1.7.0" + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-10.5.0.tgz", + "integrity": "sha512-ROwoOFQa7tZret/giHtVJH4YCRLCuKpN386mxzXd0likAVmv+38YGkJiqfkmZju7dIQ+QJOvBScXVf27Kvob0g==", + "dev": true, + "dependencies": { + "@firebase/analytics": "0.10.0", + "@firebase/analytics-compat": "0.2.6", + "@firebase/app": "0.9.20", + "@firebase/app-check": "0.8.0", + "@firebase/app-check-compat": "0.3.7", + "@firebase/app-compat": "0.2.20", + "@firebase/app-types": "0.9.0", + "@firebase/auth": "1.3.0", + "@firebase/auth-compat": "0.4.6", + "@firebase/database": "1.0.1", + "@firebase/database-compat": "1.0.1", + "@firebase/firestore": "4.3.0", + "@firebase/firestore-compat": "0.3.19", + "@firebase/functions": "0.10.0", + "@firebase/functions-compat": "0.3.5", + "@firebase/installations": "0.6.4", + "@firebase/installations-compat": "0.2.4", + "@firebase/messaging": "0.12.4", + "@firebase/messaging-compat": "0.2.4", + "@firebase/performance": "0.6.4", + "@firebase/performance-compat": "0.2.4", + "@firebase/remote-config": "0.4.4", + "@firebase/remote-config-compat": "0.2.4", + "@firebase/storage": "0.11.2", + "@firebase/storage-compat": "0.3.2", + "@firebase/util": "1.9.3" } }, "node_modules/flat-cache": { @@ -5750,9 +5709,9 @@ } }, "node_modules/idb": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.0.1.tgz", - "integrity": "sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", "dev": true }, "node_modules/ignore": { @@ -5764,12 +5723,6 @@ "node": ">= 4" } }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "dev": true - }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -6648,18 +6601,6 @@ "node": ">=4.0" } }, - "node_modules/jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "dev": true, - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - } - }, "node_modules/keyv": { "version": "4.5.3", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", @@ -6684,15 +6625,6 @@ "node": ">= 0.8.0" } }, - "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dev": true, - "dependencies": { - "immediate": "~3.0.5" - } - }, "node_modules/lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", @@ -7178,9 +7110,9 @@ } }, "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", "dev": true }, "node_modules/loose-envify": { @@ -11299,12 +11231,6 @@ "node": ">=8" } }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -11683,9 +11609,9 @@ "dev": true }, "node_modules/protobufjs": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", - "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", + "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -11699,13 +11625,11 @@ "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", "@types/node": ">=13.7.0", - "long": "^4.0.0" + "long": "^5.0.0" }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" + "engines": { + "node": ">=12.0.0" } }, "node_modules/psl": { @@ -12279,20 +12203,6 @@ "loose-envify": "^1.1.0" } }, - "node_modules/selenium-webdriver": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.1.2.tgz", - "integrity": "sha512-e4Ap8vQvhipgBB8Ry9zBiKGkU6kHKyNnWiavGGLKkrdW81Zv7NVMtFOL/j3yX0G8QScM7XIXijKssNd4EUxSOw==", - "dev": true, - "dependencies": { - "jszip": "^3.6.0", - "tmp": "^0.2.1", - "ws": ">=7.4.6" - }, - "engines": { - "node": ">= 10.15.0" - } - }, "node_modules/semantic-release": { "version": "22.0.5", "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-22.0.5.tgz", @@ -12366,20 +12276,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/semantic-release/node_modules/escape-string-regexp": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", @@ -12577,33 +12473,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/semantic-release/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -12655,12 +12524,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -13323,33 +13186,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/tmp/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -14153,6 +13989,8 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-8.9.0.tgz", "integrity": "sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==", "dev": true, + "optional": true, + "peer": true, "engines": { "node": ">=10.0.0" }, @@ -14222,30 +14060,30 @@ } }, "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "dependencies": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yocto-queue": { @@ -14590,518 +14428,487 @@ "dev": true }, "@firebase/analytics": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.8.1.tgz", - "integrity": "sha512-br/PBwPAuVdmuxt6k9S6Wtyvgh5YC4vPsY4zv/AtzrgIiXhlJKi28If9Pfh0z9W0dLuqTLSVI0MNzUV/hH5oTA==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.0.tgz", + "integrity": "sha512-Locv8gAqx0e+GX/0SI3dzmBY5e9kjVDtD+3zCFLJ0tH2hJwuCAiL+5WkHuxKj92rqQj/rvkBUCfA1ewlX2hehg==", "dev": true, "requires": { - "@firebase/component": "0.5.18", - "@firebase/installations": "0.5.13", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/installations": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" } }, "@firebase/analytics-compat": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.1.14.tgz", - "integrity": "sha512-HNuXTm+EYSf0T9N69UMmy9eVUipxxV8BhkCDPOdmUaa4syO4CtYk5qZt2k1qLygJI9wVFdiZeTU00FAgWK1/6A==", + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.6.tgz", + "integrity": "sha512-4MqpVLFkGK7NJf/5wPEEP7ePBJatwYpyjgJ+wQHQGHfzaCDgntOnl9rL2vbVGGKCnRqWtZDIWhctB86UWXaX2Q==", "dev": true, "requires": { - "@firebase/analytics": "0.8.1", - "@firebase/analytics-types": "0.7.0", - "@firebase/component": "0.5.18", - "@firebase/util": "1.7.0", + "@firebase/analytics": "0.10.0", + "@firebase/analytics-types": "0.8.0", + "@firebase/component": "0.6.4", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" } }, "@firebase/analytics-types": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.7.0.tgz", - "integrity": "sha512-DNE2Waiwy5+zZnCfintkDtBfaW6MjIG883474v6Z0K1XZIvl76cLND4iv0YUb48leyF+PJK1KO2XrgHb/KpmhQ==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.8.0.tgz", + "integrity": "sha512-iRP+QKI2+oz3UAh4nPEq14CsEjrjD6a5+fuypjScisAh9kXKFvdJOZJDwk7kikLvWVLGEs9+kIUS4LPQV7VZVw==", "dev": true }, "@firebase/app": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.8.0.tgz", - "integrity": "sha512-9kZjhIDv4u4PlrCgcQVBA2u8BZHrP8rUWDltmCUi9BLHv0tltfxLMZODV5LeuAfCJKVp2dbIrpGHPxAaLLl/ww==", + "version": "0.9.20", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.9.20.tgz", + "integrity": "sha512-cMTDHr+1GfYyHBSLLvvTE8ywlDCKk/E8cUZmfv0ODmUBB1vXgrICShj7yH9UYf6m7l6pxad8T+qI/oAoAkCp2Q==", "dev": true, "requires": { - "@firebase/component": "0.5.18", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.7.0", - "idb": "7.0.1", + "@firebase/component": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", + "idb": "7.1.1", "tslib": "^2.1.0" } }, "@firebase/app-check": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.5.13.tgz", - "integrity": "sha512-+1E2aDvd7vo4QidEyQFZaHur4r8oaHXZZ/SqykK2bcHBF3ihimJgrGBbtvOdUzrR0MOCZx9a18nXAJqevi/+Ow==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.8.0.tgz", + "integrity": "sha512-dRDnhkcaC2FspMiRK/Vbp+PfsOAEP6ZElGm9iGFJ9fDqHoPs0HOPn7dwpJ51lCFi1+2/7n5pRPGhqF/F03I97g==", "dev": true, "requires": { - "@firebase/component": "0.5.18", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" } }, "@firebase/app-check-compat": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.2.13.tgz", - "integrity": "sha512-vVj6hcdwAOyR4GWrASyki9HhC8mIDN4hta7k/WC0k4UeWCjthfSgR+8Ce7HHp8h4fB5LhVFgFC8QI07sZ2O7jA==", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.3.7.tgz", + "integrity": "sha512-cW682AxsyP1G+Z0/P7pO/WT2CzYlNxoNe5QejVarW2o5ZxeWSSPAiVEwpEpQR/bUlUmdeWThYTMvBWaopdBsqw==", "dev": true, "requires": { - "@firebase/app-check": "0.5.13", - "@firebase/app-check-types": "0.4.0", - "@firebase/component": "0.5.18", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.7.0", + "@firebase/app-check": "0.8.0", + "@firebase/app-check-types": "0.5.0", + "@firebase/component": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" } }, "@firebase/app-check-interop-types": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.1.0.tgz", - "integrity": "sha512-uZfn9s4uuRsaX5Lwx+gFP3B6YsyOKUE+Rqa6z9ojT4VSRAsZFko9FRn6OxQUA1z5t5d08fY4pf+/+Dkd5wbdbA==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.0.tgz", + "integrity": "sha512-xAxHPZPIgFXnI+vb4sbBjZcde7ZluzPPaSK7Lx3/nmuVk4TjZvnL8ONnkd4ERQKL8WePQySU+pRcWkh8rDf5Sg==", "dev": true }, "@firebase/app-check-types": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.4.0.tgz", - "integrity": "sha512-SsWafqMABIOu7zLgWbmwvHGOeQQVQlwm42kwwubsmfLmL4Sf5uGpBfDhQ0CAkpi7bkJ/NwNFKafNDL9prRNP0Q==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.5.0.tgz", + "integrity": "sha512-uwSUj32Mlubybw7tedRzR24RP8M8JUVR3NPiMk3/Z4bCmgEKTlQBwMXrehDAZ2wF+TsBq0SN1c6ema71U/JPyQ==", "dev": true }, "@firebase/app-compat": { - "version": "0.1.35", - "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.1.35.tgz", - "integrity": "sha512-6ax9yXCPEBSREHxo+nCpSgSg01mGTvR4I7u/EHqVNNqG8uEWog7sUan3Y3vr3q3zH8t5BkXDGejOH9atF+XnAQ==", + "version": "0.2.20", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.20.tgz", + "integrity": "sha512-FXgdjgwUruLMZMh0HDwLmbcu2ImckT10HPdXZyzIJoaor9OenoTQO2RLk2xvvOL/JJnszN6kmv56c+8qA4KFXQ==", "dev": true, "requires": { - "@firebase/app": "0.8.0", - "@firebase/component": "0.5.18", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.7.0", + "@firebase/app": "0.9.20", + "@firebase/component": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" } }, "@firebase/app-types": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.8.0.tgz", - "integrity": "sha512-Lec3VVquUwXPn2UReGSsfTxuMBVRmzGIwA/CJnF0LQuPgv9kOmXk9mVqsDMfHxHtqjai0n6wWHR2TqjdVV/bYA==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.0.tgz", + "integrity": "sha512-AeweANOIo0Mb8GiYm3xhTEBVCmPwTYAu9Hcd2qSkLuga/6+j9b1Jskl5bpiSQWy9eJ/j5pavxj6eYogmnuzm+Q==", "dev": true }, "@firebase/auth": { - "version": "0.20.8", - "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.20.8.tgz", - "integrity": "sha512-ss0Uyp5sLrGRR/8bbkZTod5gmdgltqvcxQySAKYGbsyBq4j+RTjZzVqUHZHFY7f8NLm2Bz4hO1dZRaIUYW8zLw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.3.0.tgz", + "integrity": "sha512-vjK4CHbY9aWdiVOrKi6mpa8z6uxeaf7LB/MZTHuZOiGHMcUoTGB6TeMbRShyqk1uaMrxhhZ5Ar/dR0965E1qyA==", "dev": true, "requires": { - "@firebase/component": "0.5.18", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", "node-fetch": "2.6.7", - "selenium-webdriver": "4.1.2", "tslib": "^2.1.0" } }, "@firebase/auth-compat": { - "version": "0.2.21", - "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.2.21.tgz", - "integrity": "sha512-etu40X/AdVWys/RvTZ0lHCmglGT3vEos+LS3O5u+L7vLOJ0LsiV8i9bFBPCv9aZcqK/R7cs9bGLQdZB9QwimVQ==", + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.4.6.tgz", + "integrity": "sha512-pKp1d4fSf+yoy1EBjTx9ISxlunqhW0vTICk0ByZ3e+Lp6ZIXThfUy4F1hAJlEafD/arM0oepRiAh7LXS1xn/BA==", "dev": true, "requires": { - "@firebase/auth": "0.20.8", - "@firebase/auth-types": "0.11.0", - "@firebase/component": "0.5.18", - "@firebase/util": "1.7.0", + "@firebase/auth": "1.3.0", + "@firebase/auth-types": "0.12.0", + "@firebase/component": "0.6.4", + "@firebase/util": "1.9.3", "node-fetch": "2.6.7", - "selenium-webdriver": "4.1.2", "tslib": "^2.1.0" } }, "@firebase/auth-interop-types": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.6.tgz", - "integrity": "sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g==", - "dev": true, - "requires": {} + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.1.tgz", + "integrity": "sha512-VOaGzKp65MY6P5FI84TfYKBXEPi6LmOCSMMzys6o2BN2LOsqy7pCuZCup7NYnfbk5OkkQKzvIfHOzTm0UDpkyg==", + "dev": true }, "@firebase/auth-types": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.11.0.tgz", - "integrity": "sha512-q7Bt6cx+ySj9elQHTsKulwk3+qDezhzRBFC9zlQ1BjgMueUOnGMcvqmU0zuKlQ4RhLSH7MNAdBV2znVaoN3Vxw==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.12.0.tgz", + "integrity": "sha512-pPwaZt+SPOshK8xNoiQlK5XIrS97kFYc3Rc7xmy373QsOJ9MmqXxLaYssP5Kcds4wd2qK//amx/c+A8O2fVeZA==", "dev": true, "requires": {} }, "@firebase/component": { - "version": "0.5.18", - "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.5.18.tgz", - "integrity": "sha512-worbz6idNWud/Sfpp3Lf9BE9tM8GRHhuQ4Hsqnva6ECdSRKYt8RRPg3UUSwDGa4iFpPo+gF/jKfydYN676+JmQ==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.4.tgz", + "integrity": "sha512-rLMyrXuO9jcAUCaQXCMjCMUsWrba5fzHlNK24xz5j2W6A/SRmK8mZJ/hn7V0fViLbxC0lPMtrK1eYzk6Fg03jA==", "dev": true, "requires": { - "@firebase/util": "1.7.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" } }, "@firebase/database": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.13.7.tgz", - "integrity": "sha512-j72yRxwGMcRnB+KwmyQYpPJHb5oNgbTS17ecAm8cX1GEyRohbZiE9GljbMaoOxSz/r8XuVfe748gEk5HFSEtSA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.0.1.tgz", + "integrity": "sha512-VAhF7gYwunW4Lw/+RQZvW8dlsf2r0YYqV9W0Gi2Mz8+0TGg1mBJWoUtsHfOr8kPJXhcLsC4eP/z3x6L/Fvjk/A==", "dev": true, "requires": { - "@firebase/auth-interop-types": "0.1.6", - "@firebase/component": "0.5.18", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.7.0", + "@firebase/auth-interop-types": "0.2.1", + "@firebase/component": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", "faye-websocket": "0.11.4", "tslib": "^2.1.0" } }, "@firebase/database-compat": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-0.2.7.tgz", - "integrity": "sha512-D9nTb8RNb3RbsKtwUFDykIeUbuBgVSDKE+b6dCgVi9PS7sNATdZPpKGjxLIAxCggyRTgfMj5pr0S5fhrMedRNw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-1.0.1.tgz", + "integrity": "sha512-ky82yLIboLxtAIWyW/52a6HLMVTzD2kpZlEilVDok73pNPLjkJYowj8iaIWK5nTy7+6Gxt7d00zfjL6zckGdXQ==", "dev": true, "requires": { - "@firebase/component": "0.5.18", - "@firebase/database": "0.13.7", - "@firebase/database-types": "0.9.14", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/database": "1.0.1", + "@firebase/database-types": "1.0.0", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" } }, "@firebase/database-types": { - "version": "0.9.14", - "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.9.14.tgz", - "integrity": "sha512-utMsusFMr5HuyiKxFyeOXU4hvC7hdJFTiyUWTQpLFODRwhtoPE539Y1I3r/LJhSPyt8dtds2GSjnvIbCvDezLQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.0.tgz", + "integrity": "sha512-SjnXStoE0Q56HcFgNQ+9SsmJc0c8TqGARdI/T44KXy+Ets3r6x/ivhQozT66bMnCEjJRywYoxNurRTMlZF8VNg==", "dev": true, "requires": { - "@firebase/app-types": "0.8.0", - "@firebase/util": "1.7.0" + "@firebase/app-types": "0.9.0", + "@firebase/util": "1.9.3" } }, "@firebase/firestore": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-3.6.0.tgz", - "integrity": "sha512-vGeC2nXx/Ca+HsFhBLzz3jX1v571AZtNGf7AX0lMXeL+t0awWsAdq0ahkNRMjejhK5zVa68H/zg2RCO7fg8JiA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.3.0.tgz", + "integrity": "sha512-FwSMCxGdUuA9Su74I9himAKJogzjU41IBjjnNf0+5smORMKtWlNeeXqMpljrhZubj5V+GmWyExf5UD3y1in6FA==", "dev": true, "requires": { - "@firebase/component": "0.5.18", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.7.0", - "@firebase/webchannel-wrapper": "0.7.0", - "@grpc/grpc-js": "^1.3.2", - "@grpc/proto-loader": "^0.6.13", + "@firebase/component": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", + "@firebase/webchannel-wrapper": "0.10.3", + "@grpc/grpc-js": "~1.9.0", + "@grpc/proto-loader": "^0.7.8", "node-fetch": "2.6.7", "tslib": "^2.1.0" } }, "@firebase/firestore-compat": { - "version": "0.1.26", - "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.1.26.tgz", - "integrity": "sha512-e0cIToek3tmbzd1UK7fFii6Fo+s2QoJt4Q9ZKxP6cBaMowZoWxZs8/cE7TPsnpgrx5BNc1DjLdpUh0vAuk+q4Q==", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.19.tgz", + "integrity": "sha512-hRcW9oTyluap8Qko/yqtgk4O/BJmR4FxkvF+P6LVvoqtspKLfQL70jJvzr1gYCCXn2OY8XUI7Q9BVdsTzEEONA==", "dev": true, "requires": { - "@firebase/component": "0.5.18", - "@firebase/firestore": "3.6.0", - "@firebase/firestore-types": "2.5.0", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/firestore": "4.3.0", + "@firebase/firestore-types": "3.0.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" } }, "@firebase/firestore-types": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-2.5.0.tgz", - "integrity": "sha512-I6c2m1zUhZ5SH0cWPmINabDyH5w0PPFHk2UHsjBpKdZllzJZ2TwTkXbDtpHUZNmnc/zAa0WNMNMvcvbb/xJLKA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-3.0.0.tgz", + "integrity": "sha512-Meg4cIezHo9zLamw0ymFYBD4SMjLb+ZXIbuN7T7ddXN6MGoICmOTq3/ltdCGoDCS2u+H1XJs2u/cYp75jsX9Qw==", "dev": true, "requires": {} }, "@firebase/functions": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.8.5.tgz", - "integrity": "sha512-oI4ipogH6x+2euHGs+l+cZmRwg8psYxblbO5YebB7nh+x2UcFE4+4uDUXQc7XQrT4b1uDbrW343BU46RKFtwWg==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.10.0.tgz", + "integrity": "sha512-2U+fMNxTYhtwSpkkR6WbBcuNMOVaI7MaH3cZ6UAeNfj7AgEwHwMIFLPpC13YNZhno219F0lfxzTAA0N62ndWzA==", "dev": true, "requires": { - "@firebase/app-check-interop-types": "0.1.0", - "@firebase/auth-interop-types": "0.1.6", - "@firebase/component": "0.5.18", - "@firebase/messaging-interop-types": "0.1.0", - "@firebase/util": "1.7.0", + "@firebase/app-check-interop-types": "0.3.0", + "@firebase/auth-interop-types": "0.2.1", + "@firebase/component": "0.6.4", + "@firebase/messaging-interop-types": "0.2.0", + "@firebase/util": "1.9.3", "node-fetch": "2.6.7", "tslib": "^2.1.0" } }, "@firebase/functions-compat": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.2.5.tgz", - "integrity": "sha512-r9lUxkBNmfulLfujdO7W2AAyH1I3QQBvrRlNoub8TNU+2UbqAfFde7yV0DhOCGhr75zp4ZVv71Zw6wIgwC0G1Q==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.3.5.tgz", + "integrity": "sha512-uD4jwgwVqdWf6uc3NRKF8cSZ0JwGqSlyhPgackyUPe+GAtnERpS4+Vr66g0b3Gge0ezG4iyHo/EXW/Hjx7QhHw==", "dev": true, "requires": { - "@firebase/component": "0.5.18", - "@firebase/functions": "0.8.5", - "@firebase/functions-types": "0.5.0", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/functions": "0.10.0", + "@firebase/functions-types": "0.6.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" } }, "@firebase/functions-types": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.5.0.tgz", - "integrity": "sha512-qza0M5EwX+Ocrl1cYI14zoipUX4gI/Shwqv0C1nB864INAD42Dgv4v94BCyxGHBg2kzlWy8PNafdP7zPO8aJQA==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.6.0.tgz", + "integrity": "sha512-hfEw5VJtgWXIRf92ImLkgENqpL6IWpYaXVYiRkFY1jJ9+6tIhWM7IzzwbevwIIud/jaxKVdRzD7QBWfPmkwCYw==", "dev": true }, "@firebase/installations": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.5.13.tgz", - "integrity": "sha512-T3+RIeqMA1vpnSOK/1wckpSSk3zbLNQgDWoiymwvK/FxjPFHO/LY1W0guqTmiYgK0stdLIHXh7syli5HboO47g==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.4.tgz", + "integrity": "sha512-u5y88rtsp7NYkCHC3ElbFBrPtieUybZluXyzl7+4BsIz4sqb4vSAuwHEUgCgCeaQhvsnxDEU6icly8U9zsJigA==", "dev": true, "requires": { - "@firebase/component": "0.5.18", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/util": "1.9.3", "idb": "7.0.1", "tslib": "^2.1.0" + }, + "dependencies": { + "idb": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.0.1.tgz", + "integrity": "sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg==", + "dev": true + } } }, "@firebase/installations-compat": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.1.13.tgz", - "integrity": "sha512-JDdne03YV4VfIyGkmlg8ltSHS0hOzQXLkn2gDzvKsyvke0EAUI9HLHUDQAOKVpyn7LsDwFTub5QcrR0owG8b+Q==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.4.tgz", + "integrity": "sha512-LI9dYjp0aT9Njkn9U4JRrDqQ6KXeAmFbRC0E7jI7+hxl5YmRWysq5qgQl22hcWpTk+cm3es66d/apoDU/A9n6Q==", "dev": true, "requires": { - "@firebase/component": "0.5.18", - "@firebase/installations": "0.5.13", - "@firebase/installations-types": "0.4.0", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/installations": "0.6.4", + "@firebase/installations-types": "0.5.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" } }, "@firebase/installations-types": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.4.0.tgz", - "integrity": "sha512-nXxWKQDvBGctuvsizbUEJKfxXU9WAaDhon+j0jpjIfOJkvkj3YHqlLB/HeYjpUn85Pb22BjplpTnDn4Gm9pc3A==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.5.0.tgz", + "integrity": "sha512-9DP+RGfzoI2jH7gY4SlzqvZ+hr7gYzPODrbzVD82Y12kScZ6ZpRg/i3j6rleto8vTFC8n6Len4560FnV1w2IRg==", "dev": true, "requires": {} }, "@firebase/logger": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.3.3.tgz", - "integrity": "sha512-POTJl07jOKTOevLXrTvJD/VZ0M6PnJXflbAh5J9VGkmtXPXNG6MdZ9fmRgqYhXKTaDId6AQenQ262uwgpdtO0Q==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", "dev": true, "requires": { "tslib": "^2.1.0" } }, "@firebase/messaging": { - "version": "0.9.17", - "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.9.17.tgz", - "integrity": "sha512-oyjPT1lutJqiivl3UxkJeLrNbOkakFKMUYYviEPEL1PAU+yfKWp7IbRaZPZy4Av+i0sSdLDyB8H803B6tZ+C0Q==", + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.4.tgz", + "integrity": "sha512-6JLZct6zUaex4g7HI3QbzeUrg9xcnmDAPTWpkoMpd/GoSVWH98zDoWXMGrcvHeCAIsLpFMe4MPoZkJbrPhaASw==", "dev": true, "requires": { - "@firebase/component": "0.5.18", - "@firebase/installations": "0.5.13", - "@firebase/messaging-interop-types": "0.1.0", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/installations": "0.6.4", + "@firebase/messaging-interop-types": "0.2.0", + "@firebase/util": "1.9.3", "idb": "7.0.1", "tslib": "^2.1.0" + }, + "dependencies": { + "idb": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.0.1.tgz", + "integrity": "sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg==", + "dev": true + } } }, "@firebase/messaging-compat": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.1.17.tgz", - "integrity": "sha512-WRaWizUMurqDQkCHzkW2XJkJl6BqSLhrCoCcClyIdC4XEolAgIo9X4Jy2Jd7HiX6SUSPgwEv0u93MnuIS9JWGw==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.4.tgz", + "integrity": "sha512-lyFjeUhIsPRYDPNIkYX1LcZMpoVbBWXX4rPl7c/rqc7G+EUea7IEtSt4MxTvh6fDfPuzLn7+FZADfscC+tNMfg==", "dev": true, "requires": { - "@firebase/component": "0.5.18", - "@firebase/messaging": "0.9.17", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/messaging": "0.12.4", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" } }, "@firebase/messaging-interop-types": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.1.0.tgz", - "integrity": "sha512-DbvUl/rXAZpQeKBnwz0NYY5OCqr2nFA0Bj28Fmr3NXGqR4PAkfTOHuQlVtLO1Nudo3q0HxAYLa68ZDAcuv2uKQ==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.0.tgz", + "integrity": "sha512-ujA8dcRuVeBixGR9CtegfpU4YmZf3Lt7QYkcj693FFannwNuZgfAYaTmbJ40dtjB81SAu6tbFPL9YLNT15KmOQ==", "dev": true }, "@firebase/performance": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.5.13.tgz", - "integrity": "sha512-k35iR9LcRUsuyEa4sXzBaVKMaFGgDgI3fjHtcmfjspeSywTigbCWxGoN551uk+udAkC0ENnODGm6t/T/ie4HaQ==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.6.4.tgz", + "integrity": "sha512-HfTn/bd8mfy/61vEqaBelNiNnvAbUtME2S25A67Nb34zVuCSCRIX4SseXY6zBnOFj3oLisaEqhVcJmVPAej67g==", "dev": true, "requires": { - "@firebase/component": "0.5.18", - "@firebase/installations": "0.5.13", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/installations": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" } }, "@firebase/performance-compat": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.1.13.tgz", - "integrity": "sha512-Den0APOV7bqnQxLuAhzo4dIkojbKR30/Q+8qeDrbdMHZL50wkZm09/OGqXoViCTy8zHDaau+Wp78z0qMqwUFxg==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.4.tgz", + "integrity": "sha512-nnHUb8uP9G8islzcld/k6Bg5RhX62VpbAb/Anj7IXs/hp32Eb2LqFPZK4sy3pKkBUO5wcrlRWQa6wKOxqlUqsg==", "dev": true, "requires": { - "@firebase/component": "0.5.18", - "@firebase/logger": "0.3.3", - "@firebase/performance": "0.5.13", - "@firebase/performance-types": "0.1.0", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/performance": "0.6.4", + "@firebase/performance-types": "0.2.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" } }, "@firebase/performance-types": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.1.0.tgz", - "integrity": "sha512-6p1HxrH0mpx+622Ql6fcxFxfkYSBpE3LSuwM7iTtYU2nw91Hj6THC8Bc8z4nboIq7WvgsT/kOTYVVZzCSlXl8w==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.2.0.tgz", + "integrity": "sha512-kYrbr8e/CYr1KLrLYZZt2noNnf+pRwDq2KK9Au9jHrBMnb0/C9X9yWSXmZkFt4UIdsQknBq8uBB7fsybZdOBTA==", "dev": true }, "@firebase/remote-config": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.3.12.tgz", - "integrity": "sha512-Vhsr6H/onMOiNnEcEBfcv1qadtMtaIwI2oDAP4bbqmCp84XtbizUqY0Y0psOAjKArAbkoqc/33cngRl093YOIQ==", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.4.4.tgz", + "integrity": "sha512-x1ioTHGX8ZwDSTOVp8PBLv2/wfwKzb4pxi0gFezS5GCJwbLlloUH4YYZHHS83IPxnua8b6l0IXUaWd0RgbWwzQ==", "dev": true, "requires": { - "@firebase/component": "0.5.18", - "@firebase/installations": "0.5.13", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/installations": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" } }, "@firebase/remote-config-compat": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.1.13.tgz", - "integrity": "sha512-7bvcMosoS9fTXV305Cx62cyDFFk/CkToIrOR3tTKYr5cG/OKhrk0S/z9Wk6rowhgKHkg2SSZr5Difrj3vQPXDQ==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.4.tgz", + "integrity": "sha512-FKiki53jZirrDFkBHglB3C07j5wBpitAaj8kLME6g8Mx+aq7u9P7qfmuSRytiOItADhWUj7O1JIv7n9q87SuwA==", "dev": true, "requires": { - "@firebase/component": "0.5.18", - "@firebase/logger": "0.3.3", - "@firebase/remote-config": "0.3.12", - "@firebase/remote-config-types": "0.2.0", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/logger": "0.4.0", + "@firebase/remote-config": "0.4.4", + "@firebase/remote-config-types": "0.3.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" } }, "@firebase/remote-config-types": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.2.0.tgz", - "integrity": "sha512-hqK5sCPeZvcHQ1D6VjJZdW6EexLTXNMJfPdTwbD8NrXUw6UjWC4KWhLK/TSlL0QPsQtcKRkaaoP+9QCgKfMFPw==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.3.0.tgz", + "integrity": "sha512-RtEH4vdcbXZuZWRZbIRmQVBNsE7VDQpet2qFvq6vwKLBIQRQR5Kh58M4ok3A3US8Sr3rubYnaGqZSurCwI8uMA==", "dev": true }, "@firebase/storage": { - "version": "0.9.10", - "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.9.10.tgz", - "integrity": "sha512-GXJSP/VqWNGi3gD8d59y5Ls4iW/jkX4CKuI4T6oST6eNnLrJcx68JbeOSv+37c9eBVT1d8O7LFX3oeKVWBhvRg==", + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.11.2.tgz", + "integrity": "sha512-CtvoFaBI4hGXlXbaCHf8humajkbXhs39Nbh6MbNxtwJiCqxPy9iH3D3CCfXAvP0QvAAwmJUTK3+z9a++Kc4nkA==", "dev": true, "requires": { - "@firebase/component": "0.5.18", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/util": "1.9.3", "node-fetch": "2.6.7", "tslib": "^2.1.0" } }, "@firebase/storage-compat": { - "version": "0.1.18", - "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.1.18.tgz", - "integrity": "sha512-ULHyM0vXX/vM/tZhYJQbkk5mnv/eQPTs9KAnIdJh7o7Hj6cvNg0Hq8x9Y/QtqLZBfnm9ATszvD41mqLD4LzrGQ==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.3.2.tgz", + "integrity": "sha512-wvsXlLa9DVOMQJckbDNhXKKxRNNewyUhhbXev3t8kSgoCotd1v3MmqhKKz93ePhDnhHnDs7bYHy+Qa8dRY6BXw==", "dev": true, "requires": { - "@firebase/component": "0.5.18", - "@firebase/storage": "0.9.10", - "@firebase/storage-types": "0.6.0", - "@firebase/util": "1.7.0", + "@firebase/component": "0.6.4", + "@firebase/storage": "0.11.2", + "@firebase/storage-types": "0.8.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" } }, "@firebase/storage-types": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.6.0.tgz", - "integrity": "sha512-1LpWhcCb1ftpkP/akhzjzeFxgVefs6eMD2QeKiJJUGH1qOiows2w5o0sKCUSQrvrRQS1lz3SFGvNR1Ck/gqxeA==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.8.0.tgz", + "integrity": "sha512-isRHcGrTs9kITJC0AVehHfpraWFui39MPaU7Eo8QfWlqW7YPymBmRgjDrlOgFdURh6Cdeg07zmkLP5tzTKRSpg==", "dev": true, "requires": {} }, "@firebase/util": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.7.0.tgz", - "integrity": "sha512-n5g1WWd+E5IYQwtKxmTJDlhfT762mk/d7yigeh8QaS46cnvngwguOhNwlS8fniEJ7pAgyZ9v05OQMKdfMnws6g==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.3.tgz", + "integrity": "sha512-DY02CRhOZwpzO36fHpuVysz6JZrscPiBXD0fXp6qSrL9oNOx5KWICKdR95C0lSITzxp0TZosVyHqzatE8JbcjA==", "dev": true, "requires": { "tslib": "^2.1.0" } }, "@firebase/webchannel-wrapper": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.7.0.tgz", - "integrity": "sha512-4ACd/c6ushrLuhn0+yjB9hznhnsc2IML6pf0Ulb1Q7w8SvR1jNGPu/Y7i4kvOm6R+WJkMHwyy5z3i3gN+Tawug==", + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.10.3.tgz", + "integrity": "sha512-+ZplYUN3HOpgCfgInqgdDAbkGGVzES1cs32JJpeqoh87SkRobGXElJx+1GZSaDqzFL+bYiX18qEcBK76mYs8uA==", "dev": true }, "@grpc/grpc-js": { - "version": "1.8.11", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.11.tgz", - "integrity": "sha512-f/xC+6Z2QKsRJ+VSSFlt4hA5KSRm+PKvMWV8kMPkMgGlFidR6PeIkXrOasIY2roe+WROM6GFQLlgDKfeEZo2YQ==", + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.5.tgz", + "integrity": "sha512-iouYNlPxRAwZ2XboDT+OfRKHuaKHiqjB5VFYZ0NFrHkbEF+AV3muIUY9olQsp8uxU4VvRCMiRk9ftzFDGb61aw==", "dev": true, "requires": { - "@grpc/proto-loader": "^0.7.0", + "@grpc/proto-loader": "^0.7.8", "@types/node": ">=12.12.47" - }, - "dependencies": { - "@grpc/proto-loader": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.5.tgz", - "integrity": "sha512-mfcTuMbFowq1wh/Rn5KQl6qb95M21Prej3bewD9dUQMurYGVckGO/Pbe2Ocwto6sD05b/mxZLspvqwx60xO2Rg==", - "dev": true, - "requires": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^7.0.0", - "yargs": "^16.2.0" - } - }, - "protobufjs": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz", - "integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==", - "dev": true, - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "dependencies": { - "long": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", - "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==", - "dev": true - } - } - } } }, "@grpc/proto-loader": { - "version": "0.6.13", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz", - "integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==", + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.10.tgz", + "integrity": "sha512-CAqDfoaQ8ykFd9zqBDn4k6iWT9loLAlc2ETmDFS9JCD70gDcnA4L3AFEo2iV7KyAtAAHFW9ftq1Fz+Vsgq80RQ==", "dev": true, "requires": { - "@types/long": "^4.0.1", "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^6.11.3", - "yargs": "^16.2.0" + "long": "^5.0.0", + "protobufjs": "^7.2.4", + "yargs": "^17.7.2" } }, "@humanwhocodes/config-array": { @@ -15905,12 +15712,6 @@ "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", "dev": true }, - "@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", - "dev": true - }, "@types/node": { "version": "14.14.37", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.37.tgz", @@ -16696,13 +16497,13 @@ } }, "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "requires": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, @@ -17927,37 +17728,37 @@ } }, "firebase": { - "version": "9.11.0", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-9.11.0.tgz", - "integrity": "sha512-AOPj3FmpweMulG3A1901hOhbCoW22IHQuRfst0Tew9Xc8Ldq75uILu0MnmCYdMVGitF7uTFVOFeyhWyGvMxpKw==", - "dev": true, - "requires": { - "@firebase/analytics": "0.8.1", - "@firebase/analytics-compat": "0.1.14", - "@firebase/app": "0.8.0", - "@firebase/app-check": "0.5.13", - "@firebase/app-check-compat": "0.2.13", - "@firebase/app-compat": "0.1.35", - "@firebase/app-types": "0.8.0", - "@firebase/auth": "0.20.8", - "@firebase/auth-compat": "0.2.21", - "@firebase/database": "0.13.7", - "@firebase/database-compat": "0.2.7", - "@firebase/firestore": "3.6.0", - "@firebase/firestore-compat": "0.1.26", - "@firebase/functions": "0.8.5", - "@firebase/functions-compat": "0.2.5", - "@firebase/installations": "0.5.13", - "@firebase/installations-compat": "0.1.13", - "@firebase/messaging": "0.9.17", - "@firebase/messaging-compat": "0.1.17", - "@firebase/performance": "0.5.13", - "@firebase/performance-compat": "0.1.13", - "@firebase/remote-config": "0.3.12", - "@firebase/remote-config-compat": "0.1.13", - "@firebase/storage": "0.9.10", - "@firebase/storage-compat": "0.1.18", - "@firebase/util": "1.7.0" + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-10.5.0.tgz", + "integrity": "sha512-ROwoOFQa7tZret/giHtVJH4YCRLCuKpN386mxzXd0likAVmv+38YGkJiqfkmZju7dIQ+QJOvBScXVf27Kvob0g==", + "dev": true, + "requires": { + "@firebase/analytics": "0.10.0", + "@firebase/analytics-compat": "0.2.6", + "@firebase/app": "0.9.20", + "@firebase/app-check": "0.8.0", + "@firebase/app-check-compat": "0.3.7", + "@firebase/app-compat": "0.2.20", + "@firebase/app-types": "0.9.0", + "@firebase/auth": "1.3.0", + "@firebase/auth-compat": "0.4.6", + "@firebase/database": "1.0.1", + "@firebase/database-compat": "1.0.1", + "@firebase/firestore": "4.3.0", + "@firebase/firestore-compat": "0.3.19", + "@firebase/functions": "0.10.0", + "@firebase/functions-compat": "0.3.5", + "@firebase/installations": "0.6.4", + "@firebase/installations-compat": "0.2.4", + "@firebase/messaging": "0.12.4", + "@firebase/messaging-compat": "0.2.4", + "@firebase/performance": "0.6.4", + "@firebase/performance-compat": "0.2.4", + "@firebase/remote-config": "0.4.4", + "@firebase/remote-config-compat": "0.2.4", + "@firebase/storage": "0.11.2", + "@firebase/storage-compat": "0.3.2", + "@firebase/util": "1.9.3" } }, "flat-cache": { @@ -18415,9 +18216,9 @@ } }, "idb": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.0.1.tgz", - "integrity": "sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", "dev": true }, "ignore": { @@ -18426,12 +18227,6 @@ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "dev": true - }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -19053,18 +18848,6 @@ "object.values": "^1.1.6" } }, - "jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "dev": true, - "requires": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - } - }, "keyv": { "version": "4.5.3", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", @@ -19086,15 +18869,6 @@ "type-check": "~0.3.2" } }, - "lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dev": true, - "requires": { - "immediate": "~3.0.5" - } - }, "lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", @@ -19427,9 +19201,9 @@ } }, "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", "dev": true }, "loose-envify": { @@ -22212,12 +21986,6 @@ "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", "dev": true }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -22491,9 +22259,9 @@ "dev": true }, "protobufjs": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", - "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", + "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", "dev": true, "requires": { "@protobufjs/aspromise": "^1.1.2", @@ -22506,9 +22274,8 @@ "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", "@types/node": ">=13.7.0", - "long": "^4.0.0" + "long": "^5.0.0" } }, "psl": { @@ -22926,17 +22693,6 @@ "loose-envify": "^1.1.0" } }, - "selenium-webdriver": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.1.2.tgz", - "integrity": "sha512-e4Ap8vQvhipgBB8Ry9zBiKGkU6kHKyNnWiavGGLKkrdW81Zv7NVMtFOL/j3yX0G8QScM7XIXijKssNd4EUxSOw==", - "dev": true, - "requires": { - "jszip": "^3.6.0", - "tmp": "^0.2.1", - "ws": ">=7.4.6" - } - }, "semantic-release": { "version": "22.0.5", "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-22.0.5.tgz", @@ -22992,17 +22748,6 @@ "escape-string-regexp": "5.0.0" } }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, "escape-string-regexp": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", @@ -23114,27 +22859,6 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true - }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true } } }, @@ -23170,12 +22894,6 @@ "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", "dev": true }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -23677,26 +23395,6 @@ "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", "dev": true }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -24243,6 +23941,8 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-8.9.0.tgz", "integrity": "sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==", "dev": true, + "optional": true, + "peer": true, "requires": {} }, "xml-name-validator": { @@ -24286,24 +23986,24 @@ "dev": true }, "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "requires": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.1.1" } }, "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true }, "yocto-queue": { diff --git a/package.json b/package.json index 79404fc6..0a32e07e 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "eslint-plugin-prettier": "5.0.0", "eslint-plugin-react": "7.33.2", "eslint-plugin-react-hooks": "4.6.0", - "firebase": "9.11.0", + "firebase": "10.5.0", "happy-dom": "12.2.2", "husky": "8.0.3", "lint-staged": "14.0.1", @@ -91,7 +91,7 @@ "lint-staged": "lint-staged" }, "peerDependencies": { - "firebase": "^9.11.0 || ^10.0.0", + "firebase": "^10.5.0", "react": ">=16.8.0" }, "lint-staged": { diff --git a/src/firestore/index.ts b/src/firestore/index.ts index dc4d0362..42865c71 100644 --- a/src/firestore/index.ts +++ b/src/firestore/index.ts @@ -1,4 +1,5 @@ export * from "./types.js"; +export * from "./useAggregateFromServer.js"; export * from "./useCountFromServer.js"; export * from "./useDocument.js"; export * from "./useDocumentData.js"; diff --git a/src/firestore/internal.ts b/src/firestore/internal.ts index 7987e378..8c3fba3e 100644 --- a/src/firestore/internal.ts +++ b/src/firestore/internal.ts @@ -1,4 +1,6 @@ import { + aggregateFieldEqual, + AggregateSpec, DocumentData, DocumentReference, DocumentSnapshot, @@ -18,10 +20,10 @@ import type { Source } from "./types.js"; /** * @internal */ -export async function getDocFromSource( - reference: DocumentReference, +export async function getDocFromSource( + reference: DocumentReference, source: Source, -): Promise> { +): Promise> { switch (source) { case "cache": return await getDocFromCache(reference); @@ -35,10 +37,10 @@ export async function getDocFromSource( - query: Query, +export async function getDocsFromSource( + query: Query, source: Source, -): Promise> { +): Promise> { switch (source) { case "cache": return await getDocsFromCache(query); @@ -52,9 +54,9 @@ export async function getDocsFromSource( - a: DocumentReference | undefined, - b: DocumentReference | undefined, +export function isDocRefEqual( + a: DocumentReference | undefined, + b: DocumentReference | undefined, ): boolean { const areBothUndefined = a === undefined && b === undefined; const areSameRef = a !== undefined && b !== undefined && refEqual(a, b); @@ -64,8 +66,22 @@ export function isDocRefEqual( /** * @internal */ -export function isQueryEqual(a: Query | undefined, b: Query | undefined): boolean { +export function isQueryEqual( + a: Query | undefined, + b: Query | undefined, +): boolean { const areBothUndefined = a === undefined && b === undefined; const areSameRef = a !== undefined && b !== undefined && queryEqual(a, b); return areBothUndefined || areSameRef; } + +/** + * @internal + */ +export function isAggregateSpecEqual(a: T, b: T): boolean { + if (Object.keys(a).length === Object.keys(b).length) { + return false; + } + + return Object.entries(a).every(([key, value]) => aggregateFieldEqual(value, b[key])); +} diff --git a/src/firestore/useAggregateFromServer.ts b/src/firestore/useAggregateFromServer.ts new file mode 100644 index 00000000..63c61887 --- /dev/null +++ b/src/firestore/useAggregateFromServer.ts @@ -0,0 +1,57 @@ +import type { AggregateSpec, AggregateSpecData, FirestoreError, Query } from "firebase/firestore"; +import { getAggregateFromServer } from "firebase/firestore"; +import type { ValueHookResult } from "../common/types.js"; +import { useGet } from "../internal/useGet.js"; +import { isAggregateSpecEqual, isQueryEqual } from "./internal.js"; + +export type UseAggregateFromServerResult = ValueHookResult, FirestoreError>; + +interface Reference { + query: Query; + aggregateSpec: T; +} + +// eslint-disable-next-line jsdoc/require-param, jsdoc/require-returns +/** + * @internal + */ +async function getData({ query, aggregateSpec }: Reference): Promise> { + const snap = await getAggregateFromServer(query, aggregateSpec); + return snap.data(); +} + +// eslint-disable-next-line jsdoc/require-param, jsdoc/require-returns +/** + * @internal + */ +function isEqual>( + a: TReference | undefined, + b: TReference | undefined, +): boolean { + if (a === undefined && b === undefined) { + return true; + } + + const areSameRef = + a !== undefined && + b !== undefined && + isQueryEqual(a.query, b.query) && + isAggregateSpecEqual(a.aggregateSpec, a.aggregateSpec); + return areSameRef; +} + +/** + * Returns aggregate of a Firestore Query. Does not update the result once initially calculated. + * @param query Firestore query the aggregate is calculated for + * @param aggregateSpec Aggregate specification + * @returns Size of the result set, loading state, and error + * - value: Aggregate of the Firestore query; `undefined` if the aggregate is currently being calculated, or an error occurred + * - loading: `true` while calculating the aggregate; `false` if the aggregate was calculated successfully or an error occurred + * - error: `undefined` if no error occurred + */ +export function useAggregateFromServer( + query: Query | undefined | null, + aggregateSpec: T, +): UseAggregateFromServerResult { + return useGet(query ? { query, aggregateSpec } : undefined, getData, isEqual); +} diff --git a/src/firestore/useDocument.ts b/src/firestore/useDocument.ts index a2ecbb2a..c3a0b9b3 100644 --- a/src/firestore/useDocument.ts +++ b/src/firestore/useDocument.ts @@ -12,10 +12,7 @@ import { useListen, UseListenOnChange } from "../internal/useListen.js"; import { LoadingState } from "../internal/useLoadingValue.js"; import { isDocRefEqual } from "./internal.js"; -export type UseDocumentResult = ValueHookResult< - DocumentSnapshot, - FirestoreError ->; +export type UseDocumentResult = ValueHookResult, FirestoreError>; /** * Options to configure the subscription @@ -26,7 +23,8 @@ export interface UseDocumentOptions { /** * Returns and updates a DocumentSnapshot of a Firestore DocumentReference - * @template Value Type of the document data + * @template AppModelType Shape of the data after it was converted from firestore + * @template DbModelType Shape of the data in firestore * @param reference Firestore DocumentReference that will be subscribed to * @param options Options to configure the subscription * @returns Document snapshot, loading state, and error @@ -34,16 +32,20 @@ export interface UseDocumentOptions { * - loading: `true` while fetching the document; `false` if the document was fetched successfully or an error occurred * - error: `undefined` if no error occurred */ -export function useDocument( - reference: DocumentReference | undefined | null, +export function useDocument( + reference: DocumentReference | undefined | null, options?: UseDocumentOptions, -): UseDocumentResult { +): UseDocumentResult { const { snapshotListenOptions } = options ?? {}; const { includeMetadataChanges } = snapshotListenOptions ?? {}; - const onChange: UseListenOnChange, FirestoreError, DocumentReference> = useCallback( + const onChange: UseListenOnChange< + DocumentSnapshot, + FirestoreError, + DocumentReference + > = useCallback( (stableRef, next, error) => - onSnapshot( + onSnapshot( stableRef, { includeMetadataChanges }, { diff --git a/src/firestore/useDocumentData.ts b/src/firestore/useDocumentData.ts index a8b041db..b104981e 100644 --- a/src/firestore/useDocumentData.ts +++ b/src/firestore/useDocumentData.ts @@ -12,20 +12,21 @@ import { useListen, UseListenOnChange } from "../internal/useListen.js"; import { LoadingState } from "../internal/useLoadingValue.js"; import { isDocRefEqual } from "./internal.js"; -export type UseDocumentDataResult = ValueHookResult; +export type UseDocumentDataResult = ValueHookResult; /** * Options to configure the subscription */ -export interface UseDocumentDataOptions { +export interface UseDocumentDataOptions { snapshotListenOptions?: SnapshotListenOptions; snapshotOptions?: SnapshotOptions; - initialValue?: Value; + initialValue?: AppModelType; } /** * Returns and updates the data of a Firestore DocumentReference - * @template Value Type of the document data + * @template AppModelType Shape of the data after it was converted from firestore + * @template DbModelType Shape of the data in firestore * @param reference Firestore DocumentReference that will be subscribed to * @param options Options to configure the subscription * `initialValue`: Value that is returned while the document is being fetched. @@ -34,17 +35,21 @@ export interface UseDocumentDataOptions( - reference: DocumentReference | undefined | null, - options?: UseDocumentDataOptions, -): UseDocumentDataResult { +export function useDocumentData( + reference: DocumentReference | undefined | null, + options?: UseDocumentDataOptions, +): UseDocumentDataResult { const { snapshotListenOptions, snapshotOptions } = options ?? {}; const { includeMetadataChanges } = snapshotListenOptions ?? {}; const { serverTimestamps } = snapshotOptions ?? {}; - const onChange: UseListenOnChange> = useCallback( + const onChange: UseListenOnChange< + AppModelType, + FirestoreError, + DocumentReference + > = useCallback( (stableRef, next, error) => - onSnapshot( + onSnapshot( stableRef, { includeMetadataChanges }, { diff --git a/src/firestore/useDocumentDataOnce.ts b/src/firestore/useDocumentDataOnce.ts index 62302f59..63460efb 100644 --- a/src/firestore/useDocumentDataOnce.ts +++ b/src/firestore/useDocumentDataOnce.ts @@ -5,7 +5,7 @@ import { useGet } from "../internal/useGet.js"; import { getDocFromSource, isDocRefEqual } from "./internal.js"; import type { Source } from "./types.js"; -export type UseDocumentDataOnceResult = ValueHookResult; +export type UseDocumentDataOnceResult = ValueHookResult; /** * Options to configure how the document is fetched @@ -17,7 +17,8 @@ export interface UseDocumentDataOnceOptions { /** * Returns the data of a Firestore DocumentReference - * @template Value Type of the document data + * @template AppModelType Shape of the data after it was converted from firestore + * @template DbModelType Shape of the data in firestore * @param reference Firestore DocumentReference that will be subscribed to * @param options Options to configure how the document is fetched * @returns Document data, loading state, and error @@ -25,15 +26,15 @@ export interface UseDocumentDataOnceOptions { * - loading: `true` while fetching the document; `false` if the document was fetched successfully or an error occurred * - error: `undefined` if no error occurred */ -export function useDocumentDataOnce( - reference: DocumentReference | undefined | null, +export function useDocumentDataOnce( + reference: DocumentReference | undefined | null, options?: UseDocumentDataOnceOptions, -): UseDocumentDataOnceResult { +): UseDocumentDataOnceResult { const { source = "default", snapshotOptions } = options ?? {}; const { serverTimestamps } = snapshotOptions ?? {}; const getData = useCallback( - async (stableRef: DocumentReference) => { + async (stableRef: DocumentReference) => { const snap = await getDocFromSource(stableRef, source); return snap.data({ serverTimestamps }); }, diff --git a/src/firestore/useDocumentOnce.ts b/src/firestore/useDocumentOnce.ts index ce34af04..1d517763 100644 --- a/src/firestore/useDocumentOnce.ts +++ b/src/firestore/useDocumentOnce.ts @@ -5,8 +5,8 @@ import { useGet } from "../internal/useGet.js"; import { getDocFromSource, isDocRefEqual } from "./internal.js"; import type { Source } from "./types.js"; -export type UseDocumentOnceResult = ValueHookResult< - DocumentSnapshot, +export type UseDocumentOnceResult = ValueHookResult< + DocumentSnapshot, FirestoreError >; @@ -19,7 +19,8 @@ export interface UseDocumentOnceOptions { /** * Returns the DocumentSnapshot of a Firestore DocumentReference. Does not update the DocumentSnapshot once initially fetched - * @template Value Type of the document data + * @template AppModelType Shape of the data after it was converted from firestore + * @template DbModelType Shape of the data in firestore * @param reference Firestore DocumentReference that will be fetched * @param options Options to configure how the document is fetched * @returns DocumentSnapshot, loading state, and error @@ -27,13 +28,16 @@ export interface UseDocumentOnceOptions { * - loading: `true` while fetching the document; `false` if the document was fetched successfully or an error occurred * - error: `undefined` if no error occurred */ -export function useDocumentOnce( - reference: DocumentReference | undefined | null, +export function useDocumentOnce( + reference: DocumentReference | undefined | null, options?: UseDocumentOnceOptions, -): UseDocumentOnceResult { +): UseDocumentOnceResult { const { source = "default" } = options ?? {}; - const getData = useCallback((stableRef: DocumentReference) => getDocFromSource(stableRef, source), [source]); + const getData = useCallback( + (stableRef: DocumentReference) => getDocFromSource(stableRef, source), + [source], + ); return useGet(reference ?? undefined, getData, isDocRefEqual); } diff --git a/src/firestore/useQueries.ts b/src/firestore/useQueries.ts index 04ad61f1..a21ae810 100644 --- a/src/firestore/useQueries.ts +++ b/src/firestore/useQueries.ts @@ -4,9 +4,9 @@ import { ValueHookResult } from "../common/types.js"; import { useMultiListen, UseMultiListenChange } from "../internal/useMultiListen.js"; import { isQueryEqual } from "./internal.js"; -export type UseQueriesResult = ReadonlyArray> = { - [Index in keyof Values]: ValueHookResult, FirestoreError>; -} & { length: Values["length"] }; +export type UseQueriesResult = ReadonlyArray> = { + [Index in keyof AppModelTypes]: ValueHookResult, FirestoreError>; +} & { length: AppModelTypes["length"] }; /** * Options to configure the subscription @@ -17,7 +17,8 @@ export interface UseQueriesOptions { /** * Returns and updates a QuerySnapshot of multiple Firestore queries - * @template Values Tuple of types of the collection data + * @template AppModelTypes Tuple of shapes of the data after it was converted from firestore + * @template DbModelTypes Tuple of shapes of the data in firestore * @param queries Firestore queries that will be subscribed to * @param options Options to configure the subscription * @returns Array with tuple for each query: @@ -25,14 +26,21 @@ export interface UseQueriesOptions { * - loading: `true` while fetching the query; `false` if the query was fetched successfully or an error occurred * - error: `undefined` if no error occurred */ -export function useQueries = ReadonlyArray>( - queries: { [Index in keyof Values]: Query }, +export function useQuerie< + AppModelTypes extends ReadonlyArray = ReadonlyArray, + DbModelTypes extends ReadonlyArray = ReadonlyArray, +>( + queries: { [Index in keyof AppModelTypes]: Query }, options?: UseQueriesOptions, -): UseQueriesResult { +): UseQueriesResult { const { snapshotListenOptions } = options ?? {}; const { includeMetadataChanges } = snapshotListenOptions ?? {}; - const onChange: UseMultiListenChange, FirestoreError, Query> = useCallback( + const onChange: UseMultiListenChange< + QuerySnapshot, + FirestoreError, + Query + > = useCallback( (query, next, error) => onSnapshot( query, diff --git a/src/firestore/useQueriesData.ts b/src/firestore/useQueriesData.ts index cef71c66..ceed1748 100644 --- a/src/firestore/useQueriesData.ts +++ b/src/firestore/useQueriesData.ts @@ -4,9 +4,9 @@ import { ValueHookResult } from "../common/types.js"; import { useMultiListen, UseMultiListenChange } from "../internal/useMultiListen.js"; import { isQueryEqual } from "./internal.js"; -export type UseQueriesDataResult = ReadonlyArray> = { - [Index in keyof Values]: ValueHookResult; -} & { length: Values["length"] }; +export type UseQueriesDataResult = ReadonlyArray> = { + [Index in keyof AppModelTypes]: ValueHookResult; +} & { length: AppModelTypes["length"] }; /** * Options to configure the subscription @@ -18,7 +18,8 @@ export interface UseQueriesDataOptions { /** * Returns and updates a the document data of multiple Firestore queries - * @template Values Tuple of types of the collection data + * @template AppModelTypes Tuple of shapes of the data after it was converted from firestore + * @template DbModelTypes Tuple of shapes of the data in firestore * @param queries Firestore queries that will be subscribed to * @param options Options to configure the subscription * @returns Array with tuple for each query: @@ -26,15 +27,22 @@ export interface UseQueriesDataOptions { * - loading: `true` while fetching the query; `false` if the query was fetched successfully or an error occurred * - error: `undefined` if no error occurred */ -export function useQueriesData = ReadonlyArray>( - queries: { [Index in keyof Values]: Query }, +export function useQueriesData< + AppModelTypes extends ReadonlyArray = ReadonlyArray, + DbModelTypes extends ReadonlyArray = ReadonlyArray, +>( + queries: { [Index in keyof AppModelTypes]: Query }, options?: UseQueriesDataOptions, -): UseQueriesDataResult { +): UseQueriesDataResult { const { snapshotListenOptions, snapshotOptions } = options ?? {}; const { includeMetadataChanges } = snapshotListenOptions ?? {}; const { serverTimestamps } = snapshotOptions ?? {}; - const onChange: UseMultiListenChange> = useCallback( + const onChange: UseMultiListenChange< + AppModelTypes[number], + FirestoreError, + Query + > = useCallback( (query, next, error) => onSnapshot( query, diff --git a/src/firestore/useQueriesDataOnce.ts b/src/firestore/useQueriesDataOnce.ts index 52a2f59b..cb20e4db 100644 --- a/src/firestore/useQueriesDataOnce.ts +++ b/src/firestore/useQueriesDataOnce.ts @@ -5,9 +5,9 @@ import { useMultiGet } from "../internal/useMultiGet.js"; import { getDocsFromSource, isQueryEqual } from "./internal.js"; import type { Source } from "./types.js"; -export type UseQueriesDataOnceResult = ReadonlyArray> = { - [Index in keyof Values]: ValueHookResult; -} & { length: Values["length"] }; +export type UseQueriesDataOnceResult = ReadonlyArray> = { + [Index in keyof AppModelTypes]: ValueHookResult; +} & { length: AppModelTypes["length"] }; /** * Options to configure the subscription @@ -19,7 +19,8 @@ export interface UseQueriesDataOnceOptions { /** * Returns the data of multiple Firestore queries. Does not update the data once initially fetched - * @template Values Tuple of types of the collection data + * @template AppModelTypes Tuple of shapes of the data after it was converted from firestore + * @template DbModelTypes Tuple of shapes of the data in firestore * @param queries Firestore queries that will be fetched * @param options Options to configure how the queries are fetched * @returns Array with tuple for each query: @@ -27,15 +28,18 @@ export interface UseQueriesDataOnceOptions { * - loading: `true` while fetching the query; `false` if the query was fetched successfully or an error occurred * - error: `undefined` if no error occurred */ -export function useQueriesDataOnce = ReadonlyArray>( - queries: { [Index in keyof Values]: Query }, +export function useQueriesDataOnce< + AppModelTypes extends ReadonlyArray = ReadonlyArray, + DbModelTypes extends ReadonlyArray = ReadonlyArray, +>( + queries: { [Index in keyof AppModelTypes]: Query }, options?: UseQueriesDataOnceOptions, -): UseQueriesDataOnceResult { +): UseQueriesDataOnceResult { const { source = "default", snapshotOptions } = options ?? {}; const { serverTimestamps } = snapshotOptions ?? {}; const getData = useCallback( - async (stableQuery: Query) => { + async (stableQuery: Query) => { const snap = await getDocsFromSource(stableQuery, source); return snap.docs.map((doc) => doc.data({ serverTimestamps })); }, diff --git a/src/firestore/useQueriesOnce.ts b/src/firestore/useQueriesOnce.ts index 7e9c29df..fa2335d6 100644 --- a/src/firestore/useQueriesOnce.ts +++ b/src/firestore/useQueriesOnce.ts @@ -5,9 +5,9 @@ import { useMultiGet } from "../internal/useMultiGet.js"; import { getDocsFromSource, isQueryEqual } from "./internal.js"; import type { Source } from "./types.js"; -export type UseQueriesOnceResult = ReadonlyArray> = { - [Index in keyof Values]: ValueHookResult; -} & { length: Values["length"] }; +export type UseQueriesOnceResult = ReadonlyArray> = { + [Index in keyof AppModelTypes]: ValueHookResult; +} & { length: AppModelTypes["length"] }; /** * Options to configure the subscription @@ -19,7 +19,8 @@ export interface UseQueriesOnceOptions { /** * Returns the QuerySnapshot of multiple Firestore queries. Does not update the data once initially fetched - * @template Values Tuple of types of the collection data + * @template AppModelTypes Tuple of shapes of the data after it was converted from firestore + * @template DbModelTypes Tuple of shapes of the data in firestore * @param queries Firestore queries that will be fetched * @param options Options to configure how the queries are fetched * @returns Array with tuple for each query: @@ -27,14 +28,17 @@ export interface UseQueriesOnceOptions { * - loading: `true` while fetching the query; `false` if the query was fetched successfully or an error occurred * - error: `undefined` if no error occurred */ -export function useQueriesOnce = ReadonlyArray>( - queries: { [Index in keyof Values]: Query }, +export function useQueriesOnce< + AppModelTypes extends ReadonlyArray = ReadonlyArray, + DbModelTypes extends ReadonlyArray = ReadonlyArray, +>( + queries: { [Index in keyof AppModelTypes]: Query }, options?: UseQueriesOnceOptions, -): UseQueriesOnceResult { +): UseQueriesOnceResult { const { source = "default" } = options ?? {}; const getData = useCallback( - async (stableQuery: Query) => getDocsFromSource(stableQuery, source), + async (stableQuery: Query) => getDocsFromSource(stableQuery, source), [source], ); diff --git a/src/firestore/useQuery.ts b/src/firestore/useQuery.ts index becd5774..d60659fa 100644 --- a/src/firestore/useQuery.ts +++ b/src/firestore/useQuery.ts @@ -5,10 +5,7 @@ import { useListen, UseListenOnChange } from "../internal/useListen.js"; import { LoadingState } from "../internal/useLoadingValue.js"; import { isQueryEqual } from "./internal.js"; -export type UseQueryResult = ValueHookResult< - QuerySnapshot, - FirestoreError ->; +export type UseQueryResult = ValueHookResult, FirestoreError>; /** * Options to configure the subscription @@ -19,7 +16,8 @@ export interface UseQueryOptions { /** * Returns and updates a QuerySnapshot of a Firestore Query - * @template Value Type of the collection data + * @template AppModelType Shape of the data after it was converted from firestore + * @template DbModelType Shape of the data in firestore * @param query Firestore query that will be subscribed to * @param options Options to configure the subscription * @returns QuerySnapshot, loading, and error @@ -27,16 +25,20 @@ export interface UseQueryOptions { * - loading: `true` while fetching the query; `false` if the query was fetched successfully or an error occurred * - error: `undefined` if no error occurred */ -export function useQuery( - query: Query | undefined | null, +export function useQuery( + query: Query | undefined | null, options?: UseQueryOptions, -): UseQueryResult { +): UseQueryResult { const { snapshotListenOptions } = options ?? {}; const { includeMetadataChanges } = snapshotListenOptions ?? {}; - const onChange: UseListenOnChange, FirestoreError, Query> = useCallback( + const onChange: UseListenOnChange< + QuerySnapshot, + FirestoreError, + Query + > = useCallback( (stableQuery, next, error) => - onSnapshot( + onSnapshot( stableQuery, { includeMetadataChanges }, { diff --git a/src/firestore/useQueryData.ts b/src/firestore/useQueryData.ts index 2ad3a81d..957f624a 100644 --- a/src/firestore/useQueryData.ts +++ b/src/firestore/useQueryData.ts @@ -5,20 +5,21 @@ import { useListen, UseListenOnChange } from "../internal/useListen.js"; import { LoadingState } from "../internal/useLoadingValue.js"; import { isQueryEqual } from "./internal.js"; -export type UseQueryDataResult = ValueHookResult; +export type UseQueryDataResult = ValueHookResult; /** * Options to configure the subscription */ -export interface UseQueryDataOptions { +export interface UseQueryDataOptions { snapshotListenOptions?: SnapshotListenOptions; snapshotOptions?: SnapshotOptions; - initialValue?: Value[]; + initialValue?: AppModelType[]; } /** * Returns and updates a the document data of a Firestore Query - * @template Value Type of the collection data + * @template AppModelType Shape of the data after it was converted from firestore + * @template DbModelType Shape of the data in firestore * @param query Firestore query that will be subscribed to * @param options Options to configure the subscription * `initialValue`: Value that is returned while the query is being fetched. @@ -27,17 +28,17 @@ export interface UseQueryDataOptions * - loading: `true` while fetching the query; `false` if the query was fetched successfully or an error occurred * - error: `undefined` if no error occurred */ -export function useQueryData( - query: Query | undefined | null, - options?: UseQueryDataOptions, -): UseQueryDataResult { +export function useQueryData( + query: Query | undefined | null, + options?: UseQueryDataOptions, +): UseQueryDataResult { const { snapshotListenOptions, snapshotOptions } = options ?? {}; const { includeMetadataChanges } = snapshotListenOptions ?? {}; const { serverTimestamps } = snapshotOptions ?? {}; - const onChange: UseListenOnChange> = useCallback( + const onChange: UseListenOnChange> = useCallback( (stableQuery, next, error) => - onSnapshot( + onSnapshot( stableQuery, { includeMetadataChanges }, { diff --git a/src/firestore/useQueryDataOnce.ts b/src/firestore/useQueryDataOnce.ts index f337d380..f0924204 100644 --- a/src/firestore/useQueryDataOnce.ts +++ b/src/firestore/useQueryDataOnce.ts @@ -5,7 +5,7 @@ import { useGet } from "../internal/useGet.js"; import { getDocsFromSource, isQueryEqual } from "./internal.js"; import type { Source } from "./types.js"; -export type UseQueryDataOnceResult = ValueHookResult; +export type UseQueryDataOnceResult = ValueHookResult; /** * Options to configure the subscription @@ -17,7 +17,8 @@ export interface UseQueryDataOnceOptions { /** * Returns the data of a Firestore Query. Does not update the data once initially fetched - * @template Value Type of the collection data + * @template AppModelType Shape of the data after it was converted from firestore + * @template DbModelType Shape of the data in firestore * @param query Firestore query that will be fetched * @param options Options to configure how the query is fetched * @returns Query data, loading state, and error @@ -25,15 +26,15 @@ export interface UseQueryDataOnceOptions { * - loading: `true` while fetching the query; `false` if the query was fetched successfully or an error occurred * - error: `undefined` if no error occurred */ -export function useQueryDataOnce( - query: Query | undefined | null, +export function useQueryDataOnce( + query: Query | undefined | null, options?: UseQueryDataOnceOptions, -): UseQueryDataOnceResult { +): UseQueryDataOnceResult { const { source = "default", snapshotOptions } = options ?? {}; const { serverTimestamps } = snapshotOptions ?? {}; const getData = useCallback( - async (stableQuery: Query) => { + async (stableQuery: Query) => { const snap = await getDocsFromSource(stableQuery, source); return snap.docs.map((doc) => doc.data({ serverTimestamps })); }, diff --git a/src/firestore/useQueryOnce.ts b/src/firestore/useQueryOnce.ts index 0239ca68..7d65b573 100644 --- a/src/firestore/useQueryOnce.ts +++ b/src/firestore/useQueryOnce.ts @@ -5,10 +5,7 @@ import { useGet } from "../internal/useGet.js"; import { getDocsFromSource, isQueryEqual } from "./internal.js"; import type { Source } from "./types.js"; -export type UseQueryOnceResult = ValueHookResult< - QuerySnapshot, - FirestoreError ->; +export type UseQueryOnceResult = ValueHookResult, FirestoreError>; /** * Options to configure how the query is fetched @@ -19,7 +16,8 @@ export interface UseQueryOnceOptions { /** * Returns the QuerySnapshot of a Firestore query. Does not update the QuerySnapshot once initially fetched - * @template Value Type of the collection data + * @template AppModelType Shape of the data after it was converted from firestore + * @template DbModelType Shape of the data in firestore * @param query Firestore query that will be fetched * @param options Options to configure how the query is fetched * @returns QuerySnapshot, loading state, and error @@ -27,13 +25,16 @@ export interface UseQueryOnceOptions { * - loading: `true` while fetching the query; `false` if the query was fetched successfully or an error occurred * - error: `undefined` if no error occurred */ -export function useQueryOnce( - query: Query | undefined | null, +export function useQueryOnce( + query: Query | undefined | null, options?: UseQueryOnceOptions, -): UseQueryOnceResult { +): UseQueryOnceResult { const { source = "default" } = options ?? {}; - const getData = useCallback(async (stableQuery: Query) => getDocsFromSource(stableQuery, source), [source]); + const getData = useCallback( + async (stableQuery: Query) => getDocsFromSource(stableQuery, source), + [source], + ); return useGet(query ?? undefined, getData, isQueryEqual); }