diff --git a/package.json b/package.json
index b3bb500..da8a000 100644
--- a/package.json
+++ b/package.json
@@ -36,6 +36,7 @@
"dev:kitchensink": "cd react/typescript/kitchensink && yarn develop",
"dev:looks-query": "cd react/typescript/looks-query-redux && yarn develop",
"dev:looks-query-redux": "cd react/typescript/looks-query-redux && yarn develop",
+ "dev:firestore": "cd react/typescript/firestore && yarn develop",
"dev:counter": "cd vanilla/counter && yarn develop",
"dev:counter-ts": "cd vanilla/counter-ts && yarn develop"
},
diff --git a/react/typescript/firestore/.gitignore b/react/typescript/firestore/.gitignore
new file mode 100644
index 0000000..047009b
--- /dev/null
+++ b/react/typescript/firestore/.gitignore
@@ -0,0 +1,6 @@
+node_modules
+dist
+.cache
+.vscode
+.env
+.eslintcache
diff --git a/react/typescript/firestore/.prettierrc.json b/react/typescript/firestore/.prettierrc.json
new file mode 100644
index 0000000..36301bc
--- /dev/null
+++ b/react/typescript/firestore/.prettierrc.json
@@ -0,0 +1,5 @@
+{
+ "semi": false,
+ "singleQuote": true,
+ "trailingComma": "es5"
+}
diff --git a/react/typescript/firestore/README.md b/react/typescript/firestore/README.md
new file mode 100644
index 0000000..625381d
--- /dev/null
+++ b/react/typescript/firestore/README.md
@@ -0,0 +1,114 @@
+# Looker Extension Firestore Demo (React & Typescript)
+
+This repository demonstrate using firestore in a Looker extension using Typescript.
+
+It uses [React](https://reactjs.org/) and [Typescript](https://typescriptlang.org) for writing your extension, the [React Extension SDK](https://github.com/looker-open-source/sdk-codegen/tree/main/packages/extension-sdk-react) for interacting with Looker, [Looker Components](https://components.looker.com) for UI, and [Webpack](https://webpack.js.org/) for building your code.
+
+## Getting Started for Development
+
+1. Clone or download a copy of this template to your development machine, if you haven't already cloned the entire repo.
+
+ ```
+ # cd ~/ Optional, your user directory is usually a good place to git clone to.
+ git clone git@github.com:looker-open-source/extension-examples.git
+ ```
+
+2. Navigate (`cd`) to the template directory on your system
+
+ ```
+ cd extension-examples/react/typescript/firestore
+ ```
+
+3. Install the dependencies with [Yarn](https://yarnpkg.com/).
+
+ ```
+ yarn install
+ ```
+
+ > You may need to update your Node version or use a [Node version manager](https://github.com/nvm-sh/nvm) to change your Node version.
+
+4) Start the development server
+
+ ```
+ yarn develop
+ ```
+
+ The extension is now running and serving the JavaScript locally at https://localhost:8080/bundle.js.
+
+5) Log in to Looker and create a new project.
+
+ This is found under **Develop** => **Manage LookML Projects** => **New LookML Project**.
+
+ Select "Blank Project" as your "Starting Point". This will create a new project with no files.
+
+ 1. The extension folder has a `manifest.lkml` file.
+
+ Either drag & upload this file into your Looker project, or create a `manifest.lkml` with the same content. Change the `id`, `label`, or `url` as needed.
+
+ ```
+ project_name: "firestore"
+ application: firestore {
+ label: "Firestore Example"
+ url: "https://localhost:8080/bundle.js"
+ entitlements: {
+ core_api_methods: ["me"]
+ }
+ }
+ ```
+
+6. Create a `model` LookML file in your project. The name doesn't matter but the convention is to name it the same as the project— in this case, helloworld-js.
+
+- Add a connection in this model.
+- [Configure the model you created](https://docs.looker.com/data-modeling/getting-started/create-projects#configuring_a_model) so that it has access to the selected connection.
+ We do this because Looker permissions data access via models— In order to grant / limit access to an extension, it must be associated with a model.
+
+7. Connect the project to Git. This can be done in multiple ways:
+
+- Create a new repository on GitHub or a similar service, and follow the instructions to [connect your project to Git](https://docs.looker.com/data-modeling/getting-started/setting-up-git-connection)
+- A simpler but less powerful approach is to set up git with the "Bare" repository option which does not require connecting to an external Git Service.
+
+8. Commit the changes and deploy them to production through the Project UI.
+
+9. Reload the page and click the `Browse` dropdown menu. You will see the extension in the list.
+
+- The extension will load the JavaScript from the `url` provided in the `application` definition. By default, this is http://localhost:8080/bundle.js. If you change the port your server runs on in the package.json, you will need to also update it in the manifest.lkml.
+- Refreshing the extension page will bring in any new code changes from the extension template, although some changes will hot reload.
+
+## Extension Entitlements
+
+Entitlements are defined in the project manifest file for the extension.
+
+Resources required by the extension (Looker API methods for example) must be defined in entitlements. This extension uses the `me` api method, as such it is defined in the entitlements.
+
+## Deployment
+
+The process above describes how to run the extension for development. Once you're done developing and ready to deploy, the production version of the extension may be deployed as follows:
+
+1. In the extension project directory build the extension by running `yarn build`.
+2. Drag and drop the generated `dist/bundle.js` file into the Looker project interface
+3. Modify the `manifest.lkml` to use `file` instead of `url`:
+
+ ```
+ project_name: "firestore"
+ application: firestore {
+ label: "Firestore Example"
+ file: "bundle.js"
+ entitlements: {
+ core_api_methods: ["me"]
+ }
+ }
+ ```
+
+## Notes
+
+- Webpack's module splitting is not currently supported.
+- This template uses Looker's [component library](https://components.looker.com) and [styled components](https://styled-components.com/). Neither of these libraries are required, and you may remove and replace them with a component library of your own choice or simply build your UI from scratch.
+
+## Related Projects
+
+- [Looker Extension SDK React](https://github.com/looker-open-source/sdk-codegen/tree/main/packages/extension-sdk-react)
+- [Looker Extension SDK](https://github.com/looker-open-source/sdk-codegen/tree/main/packages/extension-sdk)
+- [Looker SDK](https://github.com/looker-open-source/sdk-codegen/tree/main/packages/sdk)
+- [Looker Embed SDK](https://github.com/looker-open-source/embed-sdk)
+- [Looker Components](https://components.looker.com/)
+- [Styled components](https://www.styled-components.com/docs)
diff --git a/react/typescript/firestore/babel.config.js b/react/typescript/firestore/babel.config.js
new file mode 100644
index 0000000..961dd13
--- /dev/null
+++ b/react/typescript/firestore/babel.config.js
@@ -0,0 +1,68 @@
+/*
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2022 Looker Data Sciences, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+module.exports = (api) => {
+ api.cache(true)
+
+ return {
+ presets: [
+ [
+ '@babel/env',
+ {
+ targets: {
+ esmodules: true,
+ },
+ modules: false,
+ },
+ ],
+ [
+ '@babel/preset-react',
+ {
+ development: process.env.BABEL_ENV !== 'build',
+ },
+ ],
+ '@babel/preset-typescript',
+ ],
+ env: {
+ build: {
+ ignore: [
+ '**/*.d.ts',
+ '**/*.test.js',
+ '**/*.test.jsx',
+ '**/*.test.ts',
+ '**/*.test.tsx',
+ '__snapshots__',
+ '__tests__',
+ ],
+ },
+ },
+ ignore: ['node_modules'],
+ plugins: [
+ '@babel/plugin-proposal-class-properties',
+ '@babel/plugin-proposal-object-rest-spread',
+ '@babel/plugin-transform-runtime',
+ 'babel-plugin-styled-components',
+ ],
+ }
+}
diff --git a/react/typescript/firestore/jest.config.js b/react/typescript/firestore/jest.config.js
new file mode 100644
index 0000000..6773349
--- /dev/null
+++ b/react/typescript/firestore/jest.config.js
@@ -0,0 +1,59 @@
+/*
+
+ MIT License
+
+ Copyright (c) 2021 Looker Data Sciences, Inc.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+
+ */
+
+const excludeNodeModuleExcept = require('babel-loader-exclude-node-modules-except')
+
+// Our own modules are built as esm to allow for tree shaking.
+const ownModules = [
+ '@looker/components-test-utils',
+ '@looker/components',
+ '@looker/icons',
+ '@looker/design-tokens',
+]
+
+const excludeNodeModulesExceptRegExp = excludeNodeModuleExcept([...ownModules])
+
+module.exports = {
+ automock: false,
+ moduleDirectories: ['./node_modules', './packages'],
+ moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx', 'json', 'node'],
+ moduleNameMapper: {},
+ restoreMocks: true,
+ testMatch: ['**/?(*.)(spec|test).(ts|js)?(x)'],
+ transform: {
+ '^.+\\.(js|jsx|ts|tsx)$': 'ts-jest',
+ },
+ transformIgnorePatterns: [
+ excludeNodeModulesExceptRegExp.toString().slice(1, -2),
+ ],
+ testPathIgnorePatterns: [],
+ globals: {
+ 'ts-jest': {
+ isolatedModules: true,
+ diagnostics: false,
+ },
+ },
+}
diff --git a/react/typescript/firestore/manifest.lkml b/react/typescript/firestore/manifest.lkml
new file mode 100644
index 0000000..d26b722
--- /dev/null
+++ b/react/typescript/firestore/manifest.lkml
@@ -0,0 +1,10 @@
+project_name: "firestore"
+
+application: firestore {
+ label: "Filestore Example"
+ url: "https://localhost:8080/bundle.js"
+ # file: "bundle.js
+ entitlements: {
+ core_api_methods: ["me"]
+ }
+}
\ No newline at end of file
diff --git a/react/typescript/firestore/package.json b/react/typescript/firestore/package.json
new file mode 100644
index 0000000..7adbb75
--- /dev/null
+++ b/react/typescript/firestore/package.json
@@ -0,0 +1,178 @@
+{
+ "name": "demo-firestore",
+ "version": "1.1.0",
+ "description": "Looker Extension SDK Firestore Demo",
+ "main": "dist/bundle.js",
+ "scripts": {
+ "analyze": "export ANALYZE_MODE=static && yarn build",
+ "build": "export BABEL_ENV=build && webpack --config webpack.prod.js",
+ "clean": "rm -rf dist && rm -f .eslintcache",
+ "develop": "webpack serve --hot --https --port 8080 --config webpack.develop.js",
+ "prebuild": "yarn clean",
+ "tsc": "tsc",
+ "lint:es": "eslint 'src/**/*.ts{,x}' --cache",
+ "lint:es:fix": "eslint 'src/**/*.ts{,x}' --cache --fix",
+ "test": "jest"
+ },
+ "author": "Looker",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "dependencies": {
+ "@looker/components": "^3.0.1",
+ "@looker/components-date": "^2.4.1",
+ "@looker/components-providers": "^1.5.19",
+ "@looker/design-tokens": "^2.7.1",
+ "@looker/embed-sdk": "^1.6.1",
+ "@looker/extension-sdk": "^22.2.0",
+ "@looker/extension-sdk-react": "^22.2.0",
+ "@looker/icons": "1.5.13",
+ "@looker/sdk": "^22.2.0",
+ "@looker/sdk-rtl": "^21.3.2",
+ "@styled-icons/material": "^10.28.0",
+ "@styled-icons/material-outlined": "^10.34.0",
+ "@styled-icons/material-rounded": "^10.34.0",
+ "date-fns": "^2.12.0",
+ "firebase": "^9.6.11",
+ "lodash": "^4.17.21",
+ "react": "^16.14.0",
+ "react-dom": "^16.14.0",
+ "react-is": "^16.13.1",
+ "react-router-dom": "^5.3.0",
+ "reactfire": "^4.2.1",
+ "semver": "^7.3.4",
+ "styled-components": "^5.3.1"
+ },
+ "devDependencies": {
+ "@babel/cli": "^7.16.0",
+ "@babel/core": "^7.16.0",
+ "@babel/plugin-proposal-class-properties": "^7.13.0",
+ "@babel/plugin-proposal-object-rest-spread": "^7.13.8",
+ "@babel/plugin-transform-react-jsx": "^7.13.12",
+ "@babel/plugin-transform-runtime": "^7.16.4",
+ "@babel/preset-env": "^7.16.4",
+ "@babel/preset-react": "^7.16.0",
+ "@babel/preset-typescript": "^7.16.0",
+ "@babel/runtime": "^7.12.5",
+ "@looker/components-test-utils": "^1.1.5",
+ "@looker/eslint-config-oss": "^1.7.14",
+ "@looker/prettier-config": "^0.10.4",
+ "@testing-library/jest-dom": "^5.11.6",
+ "@testing-library/react": "^11.2.2",
+ "@testing-library/user-event": "^12.6.0",
+ "@types/lodash": "^4.14.165",
+ "@types/node": "^14.14.12",
+ "@types/react": "^16.14.2",
+ "@types/react-dom": "^16.9.10",
+ "@types/react-router-dom": "^5.1.5",
+ "@types/readable-stream": "^2.3.5",
+ "@types/semver": "^7.3.1",
+ "@types/styled-components": "^5.1.13",
+ "@types/styled-system": "^5.1.13",
+ "babel-loader": "^8.2.2",
+ "babel-loader-exclude-node-modules-except": "^1.1.2",
+ "babel-preset-nano-react-app": "^0.1.0",
+ "eslint": "^7.32.0",
+ "eslint-import-resolver-typescript": "^2.0.0",
+ "eslint-import-resolver-webpack": "^0.12.1",
+ "eslint-plugin-header": "^3.1.1",
+ "eslint-plugin-import": "^2.25.3",
+ "eslint-plugin-mdx": "^1.16.0",
+ "eslint-plugin-prettier": "^4.0.0",
+ "jest": "^26.6.3",
+ "jest-junit": "^12.1.0",
+ "jest-styled-components": "^7.0.3",
+ "minimist": "^1.2.2",
+ "nodemon": "^2.0.6",
+ "npm-run-all": "^4.1.5",
+ "prettier": "^2.2.1",
+ "react-hot-loader": "^4.12.20",
+ "react-test-renderer": "^17.0.1",
+ "ts-jest": "^26.5.5",
+ "typescript": "^4.5.2",
+ "webpack": "^5.67.0",
+ "webpack-bundle-analyzer": "^4.5.0",
+ "webpack-cli": "^4.9.1",
+ "webpack-dev-server": "^4.7.4"
+ },
+ "babel": {
+ "presets": [
+ "nano-react-app"
+ ],
+ "plugins": [
+ [
+ "@babel/plugin-proposal-class-properties"
+ ],
+ [
+ "@babel/plugin-transform-react-jsx",
+ {
+ "pragmaFrag": "React.Fragment"
+ }
+ ]
+ ]
+ },
+ "eslintConfig": {
+ "extends": [
+ "@looker/eslint-config-oss"
+ ],
+ "rules": {
+ "@typescript-eslint/no-explicit-any": "off",
+ "camelcase": "off",
+ "@typescript-eslint/interface-name-prefix": "off",
+ "@typescript-eslint/no-unused-vars": [
+ "warn",
+ {
+ "args": "all",
+ "argsIgnorePattern": "^_"
+ }
+ ],
+ "sort-keys-fix/sort-keys-fix": "off",
+ "no-useless-constructor": "off",
+ "@typescript-eslint/no-empty-interface": "off",
+ "import/default": "off",
+ "sort-keys": "off",
+ "spaced-comment": [
+ "error",
+ "always",
+ {
+ "markers": [
+ "#region",
+ "#endregion"
+ ]
+ }
+ ],
+ "no-use-before-define": "off",
+ "no-console": 0
+ },
+ "settings": {
+ "import/resolver": {
+ "typescript": {
+ "project": "./tsconfig.json"
+ }
+ },
+ "import/external-module-folders": [
+ "node_modules",
+ "packages"
+ ]
+ },
+ "overrides": [
+ {
+ "files": [
+ "*.js"
+ ],
+ "rules": {
+ "@typescript-eslint/no-var-requires": "off"
+ }
+ }
+ ]
+ },
+ "prettier": "@looker/prettier-config",
+ "prettierConfig": {
+ "overrides": {
+ "rules": {
+ "trailingComma": "all"
+ }
+ }
+ }
+}
diff --git a/react/typescript/firestore/src/App.tsx b/react/typescript/firestore/src/App.tsx
new file mode 100644
index 0000000..c2ca2c9
--- /dev/null
+++ b/react/typescript/firestore/src/App.tsx
@@ -0,0 +1,47 @@
+/*
+
+ MIT License
+
+ Copyright (c) 2022 Looker Data Sciences, Inc.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+
+ */
+import React from 'react'
+import { ComponentsProvider } from '@looker/components'
+import { ExtensionProvider2 } from '@looker/extension-sdk-react'
+import { hot } from 'react-hot-loader/root'
+import { FirebaseAppProvider } from 'reactfire'
+
+import { Firestore } from './Firestore'
+import { Looker40SDK } from '@looker/sdk'
+
+const firebaseConfig = {
+ // See .env for code
+}
+
+export const App = hot(() => (
+
+
+
+
+
+
+
+))
diff --git a/react/typescript/firestore/src/Firestore.spec.tsx b/react/typescript/firestore/src/Firestore.spec.tsx
new file mode 100644
index 0000000..3af8fc1
--- /dev/null
+++ b/react/typescript/firestore/src/Firestore.spec.tsx
@@ -0,0 +1,40 @@
+/*
+
+ MIT License
+
+ Copyright (c) 2022 Looker Data Sciences, Inc.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+
+ */
+import React from 'react'
+import { screen } from '@testing-library/react'
+import { renderWithExtensionContext } from './__mocks__/render_with_extension'
+import { Firestore } from './Firestore'
+
+describe('Firestore', () => {
+ test('it renders', async () => {
+ const ok = (result: { display_name: string }) => result
+ const me = () => ({
+ display_name: "Rosie O'Grady",
+ })
+ renderWithExtensionContext(, {}, { core40SDK: { me, ok } })
+ await screen.findByText("Hello, Rosie O'Grady")
+ })
+})
diff --git a/react/typescript/firestore/src/Firestore.tsx b/react/typescript/firestore/src/Firestore.tsx
new file mode 100644
index 0000000..84a6592
--- /dev/null
+++ b/react/typescript/firestore/src/Firestore.tsx
@@ -0,0 +1,106 @@
+/*
+
+ MIT License
+
+ Copyright (c) 2022 Looker Data Sciences, Inc.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+
+ */
+import React, { useContext, useEffect, useState } from 'react'
+import { getFirestore } from 'firebase/firestore'
+import {
+ getAuth,
+ signInWithCredential,
+ GoogleAuthProvider,
+} from 'firebase/auth'
+import { FirestoreProvider, useFirebaseApp } from 'reactfire'
+import { SpaceVertical, Text } from '@looker/components'
+import { ExtensionContext2 } from '@looker/extension-sdk-react'
+import { Movies } from './Movies'
+
+export const Firestore: React.FC = () => {
+ const firebaseApp = useFirebaseApp()
+ const firebaseAuth = getAuth(firebaseApp)
+ const firestoreInstance = getFirestore(firebaseApp)
+ const { coreSDK, extensionSDK } = useContext(ExtensionContext2)
+ const [message, setMessage] = useState('')
+
+ useEffect(() => {
+ const getAccessToken = async () => {
+ try {
+ let clientId = extensionSDK.createSecretKeyTag('looker_client_id')
+ let clientSecret = extensionSDK.createSecretKeyTag(
+ 'looker_client_secret'
+ )
+ // see .env for shortcut setup
+ const requestBody = {
+ client_id: clientId,
+ client_secret: clientSecret,
+ scope:
+ 'https://www.googleapis.com/auth/datastore https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/firebase.database',
+ }
+ const response = await extensionSDK.serverProxy(
+ `http://localhost:8081/access_token`,
+ {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify(requestBody),
+ }
+ )
+ const { access_token, expiry_date } = response.body
+ const credential = GoogleAuthProvider.credential(null, access_token)
+ console.log({ credential })
+ console.log({ response })
+ console.log({ firebaseAuth })
+ console.log({ access_token, expiry_date, body: response.body })
+ const userCredential = await signInWithCredential(
+ firebaseAuth,
+ credential
+ )
+ console.log({ userCredential })
+ } catch (error: any) {
+ console.error(error)
+ }
+ }
+
+ const getMe = async () => {
+ try {
+ const me = await coreSDK.ok(coreSDK.me())
+ setMessage(`Hello, ${me.display_name}`)
+ } catch (error) {
+ console.error(error)
+ setMessage('An error occurred while getting information about me!')
+ }
+ }
+ getMe()
+ getAccessToken()
+ }, [coreSDK])
+
+ return (
+
+
+ {message}
+
+
+
+ )
+}
diff --git a/react/typescript/firestore/src/Movies.tsx b/react/typescript/firestore/src/Movies.tsx
new file mode 100644
index 0000000..85261cb
--- /dev/null
+++ b/react/typescript/firestore/src/Movies.tsx
@@ -0,0 +1,41 @@
+/*
+
+ MIT License
+
+ Copyright (c) 2022 Looker Data Sciences, Inc.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+
+ */
+import React from 'react'
+import { doc } from 'firebase/firestore'
+import { useFirestoreDocData, useFirestore } from 'reactfire'
+import { SpaceVertical, Text } from '@looker/components'
+
+export const Movies: React.FC = () => {
+ const moviedDbRef = doc(useFirestore(), 'movie_db', 'RdejB0hfC40XMKepWLdS')
+ const { status, data } = useFirestoreDocData(moviedDbRef)
+
+ return (
+
+ {status}
+ {JSON.stringify(data || {})}
+
+ )
+}
diff --git a/react/typescript/firestore/src/__mocks__/render_with_extension.tsx b/react/typescript/firestore/src/__mocks__/render_with_extension.tsx
new file mode 100644
index 0000000..2439bff
--- /dev/null
+++ b/react/typescript/firestore/src/__mocks__/render_with_extension.tsx
@@ -0,0 +1,121 @@
+/*
+
+ MIT License
+
+ Copyright (c) 2022 Looker Data Sciences, Inc.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+
+ */
+
+import type { ReactNode } from 'react'
+import React from 'react'
+import { renderWithTheme } from '@looker/components-test-utils'
+import type { RenderResult } from '@testing-library/react'
+import type {
+ ExtensionContextData2,
+ ExtensionContextData,
+} from '@looker/extension-sdk-react'
+import {
+ ExtensionContext2,
+ ExtensionContext,
+} from '@looker/extension-sdk-react'
+import type { ExtensionHostApi, ExtensionSDK } from '@looker/extension-sdk'
+import { registerHostApi } from '@looker/extension-sdk'
+import { MemoryRouter } from 'react-router-dom'
+
+const getExtensionSDK = (extensionSDKOverride: Partial) => {
+ const extensionSDK = {
+ lookerHostData: {},
+ error: () => {
+ // noop
+ },
+ ...extensionSDKOverride,
+ } as ExtensionHostApi
+ registerHostApi(extensionSDK)
+ return extensionSDK
+}
+
+const getExtensionContext2 = (
+ extensionSDKOverride: Partial,
+ contextOverride: Partial>
+): ExtensionContextData2 =>
+ ({
+ extensionSDK: getExtensionSDK(extensionSDKOverride),
+ coreSDK: {},
+ route: '',
+ ...contextOverride,
+ } as ExtensionContextData2)
+
+const withExtensionContext2 = (
+ component: ReactNode,
+ extensionSDKOverride: Partial,
+ contextOverride: Partial>
+) => (
+
+
+ {component}
+
+
+)
+
+export const renderWithExtensionContext2 = (
+ component: ReactNode,
+ extensionSDKOverride = {},
+ contextOverride = {}
+): RenderResult =>
+ renderWithTheme(
+ withExtensionContext2(component, extensionSDKOverride, contextOverride)
+ )
+
+const getExtensionContext = (
+ extensionSDKOverride: Partial,
+ contextOverride: Partial
+): ExtensionContextData =>
+ ({
+ extensionSDK: getExtensionSDK(extensionSDKOverride),
+ coreSDK: {},
+ route: '',
+ ...contextOverride,
+ } as ExtensionContextData)
+
+const withExtensionContext = (
+ component: ReactNode,
+ extensionSDKOverride: Partial,
+ contextOverride: Partial
+) => (
+
+
+ {component}
+
+
+)
+
+export const renderWithExtensionContext = (
+ component: ReactNode,
+ extensionSDKOverride = {},
+ contextOverride = {}
+): RenderResult =>
+ renderWithTheme(
+ withExtensionContext(component, extensionSDKOverride, contextOverride)
+ )
diff --git a/react/typescript/firestore/src/index.tsx b/react/typescript/firestore/src/index.tsx
new file mode 100644
index 0000000..4488f65
--- /dev/null
+++ b/react/typescript/firestore/src/index.tsx
@@ -0,0 +1,34 @@
+/*
+
+ MIT License
+
+ Copyright (c) 2022 Looker Data Sciences, Inc.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+
+ */
+import React from 'react'
+import ReactDOM from 'react-dom'
+import { App } from './App'
+
+window.addEventListener('DOMContentLoaded', (_) => {
+ const root = document.createElement('div')
+ document.body.appendChild(root)
+ ReactDOM.render(, root)
+})
diff --git a/react/typescript/firestore/tsconfig.json b/react/typescript/firestore/tsconfig.json
new file mode 100644
index 0000000..ffab5c1
--- /dev/null
+++ b/react/typescript/firestore/tsconfig.json
@@ -0,0 +1,29 @@
+{
+ "compilerOptions": {
+ "allowJs": true,
+ "esModuleInterop": true,
+ "noEmit": true,
+ "lib": ["ES2019", "dom"],
+ "module": "commonjs",
+ "target": "ES2019",
+ "jsx": "react",
+ "allowSyntheticDefaultImports": true,
+ "moduleResolution": "node",
+ "removeComments": true,
+ "resolveJsonModule": true,
+ "sourceMap": true,
+ "strict": true,
+ "forceConsistentCasingInFileNames": true,
+ "noImplicitAny": true,
+ "noImplicitThis": true,
+ "noImplicitReturns": true,
+ "strictNullChecks": true,
+ "preserveConstEnums": true,
+ "noFallthroughCasesInSwitch": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "skipLibCheck": true,
+ "suppressImplicitAnyIndexErrors": true
+ },
+ "exclude": ["node_modules"]
+}
diff --git a/react/typescript/firestore/webpack.config.js b/react/typescript/firestore/webpack.config.js
new file mode 100644
index 0000000..bda60ca
--- /dev/null
+++ b/react/typescript/firestore/webpack.config.js
@@ -0,0 +1,70 @@
+/*
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2019 Looker Data Sciences, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+const fs = require("fs");
+const path = require("path");
+
+const BundleAnalyzerPlugin = require("webpack-bundle-analyzer")
+ .BundleAnalyzerPlugin;
+if (!process.env.POSTS_SERVER_URL) {
+ // webpack 5 is stricter about environment variables. The POSTS_SERVER_URL
+ // environment variable was not mentioned in the README so default it for
+ // those developers who may have created a .env file without the variable.
+ process.env.POSTS_SERVER_URL = "http://127.0.0.1:3000";
+}
+
+const PATHS = {
+ app: path.join(__dirname, "src/index.tsx"),
+};
+
+module.exports = {
+ entry: {
+ app: PATHS.app,
+ },
+ output: {
+ path: __dirname + "/dist",
+ filename: "bundle.js",
+ },
+ module: {
+ rules: [
+ {
+ test: /\.(js|jsx|ts|tsx)$/,
+ loader: "babel-loader",
+ exclude: /node_modules/,
+ include: /src/,
+ sideEffects: false,
+ },
+ ],
+ },
+ resolve: {
+ extensions: [".tsx", ".ts", ".js"],
+ fallback: { buffer: false },
+ },
+ devtool: "source-map",
+ plugins: [
+ new BundleAnalyzerPlugin({
+ analyzerMode: process.env.ANALYZE_MODE || "disabled",
+ }),
+ ],
+};
diff --git a/react/typescript/firestore/webpack.develop.js b/react/typescript/firestore/webpack.develop.js
new file mode 100644
index 0000000..6b9e66a
--- /dev/null
+++ b/react/typescript/firestore/webpack.develop.js
@@ -0,0 +1,56 @@
+/*
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2022 Looker Data Sciences, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+const commonConfig = require('./webpack.config')
+
+module.exports = {
+ ...commonConfig,
+ output: {
+ ...commonConfig.output,
+ publicPath: 'http://localhost:8080/',
+ },
+ mode: 'development',
+ module: {
+ rules: [
+ ...commonConfig.module.rules,
+ {
+ test: /\.(js|jsx|ts|tsx)?$/,
+ use: 'react-hot-loader/webpack',
+ include: /node_modules/,
+ },
+ ],
+ },
+ devServer: {
+ webSocketServer: 'sockjs',
+ host: 'localhost',
+ allowedHosts: 'all',
+ headers: {
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, PATCH, OPTIONS',
+ 'Access-Control-Allow-Headers':
+ 'X-Requested-With, content-type, Authorization',
+ },
+ },
+ plugins: [...commonConfig.plugins],
+}
diff --git a/react/typescript/firestore/webpack.prod.js b/react/typescript/firestore/webpack.prod.js
new file mode 100644
index 0000000..77e4a31
--- /dev/null
+++ b/react/typescript/firestore/webpack.prod.js
@@ -0,0 +1,33 @@
+/*
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2022 Looker Data Sciences, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+const commonConfig = require('./webpack.config')
+
+module.exports = {
+ ...commonConfig,
+ mode: 'production',
+ optimization: {
+ chunkIds: 'named',
+ },
+}
diff --git a/yarn.lock b/yarn.lock
index d27275b..2cb379a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1133,11 +1133,394 @@
minimatch "^3.0.4"
strip-json-comments "^3.1.1"
+"@firebase/analytics-compat@0.1.9":
+ version "0.1.9"
+ resolved "https://registry.yarnpkg.com/@firebase/analytics-compat/-/analytics-compat-0.1.9.tgz#d4a724f78a7333abe8ee8b00f4a4d8b8c392b46c"
+ integrity sha512-HYKMAZvfU589WVvK5XKY9Pl+axXFISabouAFw2VHpJm/TO1mAXAy0+eIjqQ3j8z3L1OEfCeOV/oY9eh8rpJZ5w==
+ dependencies:
+ "@firebase/analytics" "0.7.8"
+ "@firebase/analytics-types" "0.7.0"
+ "@firebase/component" "0.5.13"
+ "@firebase/util" "1.5.2"
+ tslib "^2.1.0"
+
+"@firebase/analytics-types@0.7.0":
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/@firebase/analytics-types/-/analytics-types-0.7.0.tgz#91960e7c87ce8bf18cf8dd9e55ccbf5dc3989b5d"
+ integrity sha512-DNE2Waiwy5+zZnCfintkDtBfaW6MjIG883474v6Z0K1XZIvl76cLND4iv0YUb48leyF+PJK1KO2XrgHb/KpmhQ==
+
+"@firebase/analytics@0.7.8":
+ version "0.7.8"
+ resolved "https://registry.yarnpkg.com/@firebase/analytics/-/analytics-0.7.8.tgz#8f163437adb9b6b3f866e3744410aae931b97453"
+ integrity sha512-W38Zy/jf64LKpPi+mGNNETIjz4eq/YXBE0Uu2bzstqUwlhvFn1WlRBK4vzgtZMRaGW04CQp9FXYv6ZTRo/Xbyw==
+ dependencies:
+ "@firebase/component" "0.5.13"
+ "@firebase/installations" "0.5.8"
+ "@firebase/logger" "0.3.2"
+ "@firebase/util" "1.5.2"
+ tslib "^2.1.0"
+
+"@firebase/app-check-compat@0.2.6":
+ version "0.2.6"
+ resolved "https://registry.yarnpkg.com/@firebase/app-check-compat/-/app-check-compat-0.2.6.tgz#34c4bd20d385909789a83c40815925176cc15fb1"
+ integrity sha512-DBzLHg/uuoNhDdwPEj8zQcqPaZSBFn8I0hATKyoX6SiAQKCi+4ugqeyQ6qGCyDpfNOyxL4PPxPMisXRhPzV2jw==
+ dependencies:
+ "@firebase/app-check" "0.5.6"
+ "@firebase/app-check-types" "0.4.0"
+ "@firebase/component" "0.5.13"
+ "@firebase/logger" "0.3.2"
+ "@firebase/util" "1.5.2"
+ tslib "^2.1.0"
+
+"@firebase/app-check-interop-types@0.1.0":
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/@firebase/app-check-interop-types/-/app-check-interop-types-0.1.0.tgz#83afd9d41f99166c2bdb2d824e5032e9edd8fe53"
+ integrity sha512-uZfn9s4uuRsaX5Lwx+gFP3B6YsyOKUE+Rqa6z9ojT4VSRAsZFko9FRn6OxQUA1z5t5d08fY4pf+/+Dkd5wbdbA==
+
+"@firebase/app-check-types@0.4.0":
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/@firebase/app-check-types/-/app-check-types-0.4.0.tgz#7007a9d1d720db20bcf466fe6785c96feaa0a82d"
+ integrity sha512-SsWafqMABIOu7zLgWbmwvHGOeQQVQlwm42kwwubsmfLmL4Sf5uGpBfDhQ0CAkpi7bkJ/NwNFKafNDL9prRNP0Q==
+
+"@firebase/app-check@0.5.6":
+ version "0.5.6"
+ resolved "https://registry.yarnpkg.com/@firebase/app-check/-/app-check-0.5.6.tgz#e3b6d4d352875078ee32757d0adb125f3cc13a26"
+ integrity sha512-wdR/DCSdSDM0ka4nvMlGSiaknFxJO/gBuwn7G0iHO2vwj/2oSqjyG+QdJnoiIe1P1vOdqGNLxb1j10LPkR3TQQ==
+ dependencies:
+ "@firebase/component" "0.5.13"
+ "@firebase/logger" "0.3.2"
+ "@firebase/util" "1.5.2"
+ tslib "^2.1.0"
+
+"@firebase/app-compat@0.1.22":
+ version "0.1.22"
+ resolved "https://registry.yarnpkg.com/@firebase/app-compat/-/app-compat-0.1.22.tgz#7190c50f3fd5d794e508bfcebe42a9b159f73890"
+ integrity sha512-InzQWdIKXsioZb6Ll/uynvopFbq9k3Qpi3gEUq+f8q0yr8/KQVuH2lIDmN70z11LRKXlsziU49qRwtV9tcEYhA==
+ dependencies:
+ "@firebase/app" "0.7.21"
+ "@firebase/component" "0.5.13"
+ "@firebase/logger" "0.3.2"
+ "@firebase/util" "1.5.2"
+ tslib "^2.1.0"
+
+"@firebase/app-types@0.7.0":
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.7.0.tgz#c9e16d1b8bed1a991840b8d2a725fb58d0b5899f"
+ integrity sha512-6fbHQwDv2jp/v6bXhBw2eSRbNBpxHcd1NBF864UksSMVIqIyri9qpJB1Mn6sGZE+bnDsSQBC5j2TbMxYsJQkQg==
+
+"@firebase/app@0.7.21":
+ version "0.7.21"
+ resolved "https://registry.yarnpkg.com/@firebase/app/-/app-0.7.21.tgz#c31077bd4c61f130eb00b6546835ed9cf8da69ab"
+ integrity sha512-b1COyw4HwajJ4zQCtL7w+d4GCQDmEaVO957eLLlBwz4QuDlx3eQIirpQhzkkPH17BJFZ6x0qyYEt6Wbhakn0kg==
+ dependencies:
+ "@firebase/component" "0.5.13"
+ "@firebase/logger" "0.3.2"
+ "@firebase/util" "1.5.2"
+ tslib "^2.1.0"
+
+"@firebase/auth-compat@0.2.12":
+ version "0.2.12"
+ resolved "https://registry.yarnpkg.com/@firebase/auth-compat/-/auth-compat-0.2.12.tgz#a13bd42c4ee36ddbf764ae24958cf4c64ddba5b5"
+ integrity sha512-LKeKylktRj03xgW5ilSOW1c4AsMig15ogf5hDKa820t6Bp6MNabj8yq2TV0/Q4SP4Ox/yrTISJGVvk+TJuBecQ==
+ dependencies:
+ "@firebase/auth" "0.19.12"
+ "@firebase/auth-types" "0.11.0"
+ "@firebase/component" "0.5.13"
+ "@firebase/util" "1.5.2"
+ node-fetch "2.6.7"
+ selenium-webdriver "^4.0.0-beta.2"
+ tslib "^2.1.0"
+
+"@firebase/auth-interop-types@0.1.6":
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/@firebase/auth-interop-types/-/auth-interop-types-0.1.6.tgz#5ce13fc1c527ad36f1bb1322c4492680a6cf4964"
+ integrity sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g==
+
+"@firebase/auth-types@0.11.0":
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/@firebase/auth-types/-/auth-types-0.11.0.tgz#b9c73c60ca07945b3bbd7a097633e5f78fa9e886"
+ integrity sha512-q7Bt6cx+ySj9elQHTsKulwk3+qDezhzRBFC9zlQ1BjgMueUOnGMcvqmU0zuKlQ4RhLSH7MNAdBV2znVaoN3Vxw==
+
+"@firebase/auth@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.yarnpkg.com/@firebase/auth/-/auth-0.19.12.tgz#df201b456bfb2c846b22513fc5798476e0730adc"
+ integrity sha512-39/eJBmq5Ne+HoCJuQXlhaOH2e8qySxYUa5Z25mhcam8nmAMrBh7Ph1yZjUeSfLsSJiSXANMHK5dnVE+1TROXw==
+ dependencies:
+ "@firebase/component" "0.5.13"
+ "@firebase/logger" "0.3.2"
+ "@firebase/util" "1.5.2"
+ node-fetch "2.6.7"
+ selenium-webdriver "4.0.0-rc-1"
+ tslib "^2.1.0"
+
+"@firebase/component@0.5.13":
+ version "0.5.13"
+ resolved "https://registry.yarnpkg.com/@firebase/component/-/component-0.5.13.tgz#65a382e83bddd109380c9aa1f280791b1b4567c4"
+ integrity sha512-hxhJtpD8Ppf/VU2Rlos6KFCEV77TGIGD5bJlkPK1+B/WUe0mC6dTjW7KhZtXTc+qRBp9nFHWcsIORnT8liHP9w==
+ dependencies:
+ "@firebase/util" "1.5.2"
+ tslib "^2.1.0"
+
+"@firebase/database-compat@0.1.8":
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/@firebase/database-compat/-/database-compat-0.1.8.tgz#ab627f2bdbe94367f515d5bded880c86886bbd28"
+ integrity sha512-dhXr5CSieBuKNdU96HgeewMQCT9EgOIkfF1GNy+iRrdl7BWLxmlKuvLfK319rmIytSs/vnCzcD9uqyxTeU/A3A==
+ dependencies:
+ "@firebase/component" "0.5.13"
+ "@firebase/database" "0.12.8"
+ "@firebase/database-types" "0.9.7"
+ "@firebase/logger" "0.3.2"
+ "@firebase/util" "1.5.2"
+ tslib "^2.1.0"
+
+"@firebase/database-types@0.9.7":
+ version "0.9.7"
+ resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-0.9.7.tgz#c5ee0ea9bb2703a13c1c47fe880fc577d5ce7f33"
+ integrity sha512-EFhgL89Fz6DY3kkB8TzdHvdu8XaqqvzcF2DLVOXEnQ3Ms7L755p5EO42LfxXoJqb9jKFvgLpFmKicyJG25WFWw==
+ dependencies:
+ "@firebase/app-types" "0.7.0"
+ "@firebase/util" "1.5.2"
+
+"@firebase/database@0.12.8":
+ version "0.12.8"
+ resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.12.8.tgz#11a1b6752ba0614892af15c71958e00ce16f5824"
+ integrity sha512-JBQVfFLzfhxlQbl4OU6ov9fdsddkytBQdtSSR49cz48homj38ccltAhK6seum+BI7f28cV2LFHF9672lcN+qxA==
+ dependencies:
+ "@firebase/auth-interop-types" "0.1.6"
+ "@firebase/component" "0.5.13"
+ "@firebase/logger" "0.3.2"
+ "@firebase/util" "1.5.2"
+ faye-websocket "0.11.4"
+ tslib "^2.1.0"
+
+"@firebase/firestore-compat@0.1.17":
+ version "0.1.17"
+ resolved "https://registry.yarnpkg.com/@firebase/firestore-compat/-/firestore-compat-0.1.17.tgz#8851d52717ac468b242fd9752706c2be12d15c30"
+ integrity sha512-hTLgq2WXUE6bb3/IqYlwY0Q6FdbZB2JwDoZHexIQmK69XuuK3j+JbE/NixV3mBo232tNSU+QeamfbAd6A1Agfw==
+ dependencies:
+ "@firebase/component" "0.5.13"
+ "@firebase/firestore" "3.4.8"
+ "@firebase/firestore-types" "2.5.0"
+ "@firebase/util" "1.5.2"
+ tslib "^2.1.0"
+
+"@firebase/firestore-types@2.5.0":
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/@firebase/firestore-types/-/firestore-types-2.5.0.tgz#16fca40b6980fdb000de86042d7a96635f2bcdd7"
+ integrity sha512-I6c2m1zUhZ5SH0cWPmINabDyH5w0PPFHk2UHsjBpKdZllzJZ2TwTkXbDtpHUZNmnc/zAa0WNMNMvcvbb/xJLKA==
+
+"@firebase/firestore@3.4.8":
+ version "3.4.8"
+ resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-3.4.8.tgz#ca7395c81929c79e30a28ff5d19a567713e27f77"
+ integrity sha512-qjrI22TrqSGsOVBkYpRcpY48eSFj+hvleWEaFn3bDxy+QNUiZS08cicSlBOxdosKi5LRMQVGyHKcqHExup02+A==
+ dependencies:
+ "@firebase/component" "0.5.13"
+ "@firebase/logger" "0.3.2"
+ "@firebase/util" "1.5.2"
+ "@firebase/webchannel-wrapper" "0.6.1"
+ "@grpc/grpc-js" "^1.3.2"
+ "@grpc/proto-loader" "^0.6.0"
+ node-fetch "2.6.7"
+ tslib "^2.1.0"
+
+"@firebase/functions-compat@0.1.12":
+ version "0.1.12"
+ resolved "https://registry.yarnpkg.com/@firebase/functions-compat/-/functions-compat-0.1.12.tgz#b1e53630bf56816355f775216f34e24a2371ca8b"
+ integrity sha512-pKianAWF9vv3u9DazbRExYQFjEu/b9gxTWVCPjq+FiLK39xULT01dZz4Zrr2KzFnb54wHHbRmU1BAWNAkQTmmQ==
+ dependencies:
+ "@firebase/component" "0.5.13"
+ "@firebase/functions" "0.7.11"
+ "@firebase/functions-types" "0.5.0"
+ "@firebase/util" "1.5.2"
+ tslib "^2.1.0"
+
+"@firebase/functions-types@0.5.0":
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/@firebase/functions-types/-/functions-types-0.5.0.tgz#b50ba95ccce9e96f7cda453228ffe1684645625b"
+ integrity sha512-qza0M5EwX+Ocrl1cYI14zoipUX4gI/Shwqv0C1nB864INAD42Dgv4v94BCyxGHBg2kzlWy8PNafdP7zPO8aJQA==
+
+"@firebase/functions@0.7.11":
+ version "0.7.11"
+ resolved "https://registry.yarnpkg.com/@firebase/functions/-/functions-0.7.11.tgz#ab65a20503d7a4bfeb4bc571c976cc37dc781184"
+ integrity sha512-o9pmN1TWHDEpmB6IYbqeIIG6Wllcfw6jSNm8UZYnOYM8oDay1FW6OeN/fA0GlGmwF4cPdxA3oKXbLn3ObYFxXQ==
+ dependencies:
+ "@firebase/app-check-interop-types" "0.1.0"
+ "@firebase/auth-interop-types" "0.1.6"
+ "@firebase/component" "0.5.13"
+ "@firebase/messaging-interop-types" "0.1.0"
+ "@firebase/util" "1.5.2"
+ node-fetch "2.6.7"
+ tslib "^2.1.0"
+
+"@firebase/installations@0.5.8":
+ version "0.5.8"
+ resolved "https://registry.yarnpkg.com/@firebase/installations/-/installations-0.5.8.tgz#7a12c4367bc932303d4651f46196262e38aaae58"
+ integrity sha512-u/lAOVhgYFg1e38rNrVzFrWxdKzTOIromx574Hi2AccFA230hSlXFY7pRaCpgs11VDzmpt4lhhOrQOX7886cKw==
+ dependencies:
+ "@firebase/component" "0.5.13"
+ "@firebase/util" "1.5.2"
+ tslib "^2.1.0"
+
+"@firebase/logger@0.3.2":
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/@firebase/logger/-/logger-0.3.2.tgz#5046ffa8295c577846d54b6ca95645a03809800e"
+ integrity sha512-lzLrcJp9QBWpo40OcOM9B8QEtBw2Fk1zOZQdvv+rWS6gKmhQBCEMc4SMABQfWdjsylBcDfniD1Q+fUX1dcBTXA==
+ dependencies:
+ tslib "^2.1.0"
+
+"@firebase/messaging-compat@0.1.12":
+ version "0.1.12"
+ resolved "https://registry.yarnpkg.com/@firebase/messaging-compat/-/messaging-compat-0.1.12.tgz#239c1148f1cd5bf507613c431ff6fe7fc096ab3c"
+ integrity sha512-Cfv4ZQaxiMx4DcpDkFX1yKHFGQtnyMA6pcLplcC3uHkSVCyNRW6pFYSoO0/Uae03ixxIYNwle1ZVaVUZ2L5ddA==
+ dependencies:
+ "@firebase/component" "0.5.13"
+ "@firebase/messaging" "0.9.12"
+ "@firebase/util" "1.5.2"
+ tslib "^2.1.0"
+
+"@firebase/messaging-interop-types@0.1.0":
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/@firebase/messaging-interop-types/-/messaging-interop-types-0.1.0.tgz#bdac02dd31edd5cb9eec37b1db698ea5e2c1a631"
+ integrity sha512-DbvUl/rXAZpQeKBnwz0NYY5OCqr2nFA0Bj28Fmr3NXGqR4PAkfTOHuQlVtLO1Nudo3q0HxAYLa68ZDAcuv2uKQ==
+
+"@firebase/messaging@0.9.12":
+ version "0.9.12"
+ resolved "https://registry.yarnpkg.com/@firebase/messaging/-/messaging-0.9.12.tgz#8ef7a76de17921eac68e79952006604d01dda138"
+ integrity sha512-qfLW7SZRZVKscI1GSyWc3WPtjAUDUk3gcEfPkdz9fzzQwj98V8xF++g4wL+9cuEuRzYf8ki2kCN/aqKRYUrxag==
+ dependencies:
+ "@firebase/component" "0.5.13"
+ "@firebase/installations" "0.5.8"
+ "@firebase/messaging-interop-types" "0.1.0"
+ "@firebase/util" "1.5.2"
+ tslib "^2.1.0"
+
+"@firebase/performance-compat@0.1.8":
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/@firebase/performance-compat/-/performance-compat-0.1.8.tgz#9a22286ee20b421b871ac2534223e01327df689a"
+ integrity sha512-lMLKFcOB99+tb6dVHJlJ8s19JFjxqpAqPGXCG8evTODPUW3BluBbfG4YS7JRESVA7wc/6kkuQIOx9q7l+bBZtQ==
+ dependencies:
+ "@firebase/component" "0.5.13"
+ "@firebase/logger" "0.3.2"
+ "@firebase/performance" "0.5.8"
+ "@firebase/performance-types" "0.1.0"
+ "@firebase/util" "1.5.2"
+ tslib "^2.1.0"
+
+"@firebase/performance-types@0.1.0":
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/@firebase/performance-types/-/performance-types-0.1.0.tgz#5e6efa9dc81860aee2cb7121b39ae8fa137e69fc"
+ integrity sha512-6p1HxrH0mpx+622Ql6fcxFxfkYSBpE3LSuwM7iTtYU2nw91Hj6THC8Bc8z4nboIq7WvgsT/kOTYVVZzCSlXl8w==
+
+"@firebase/performance@0.5.8":
+ version "0.5.8"
+ resolved "https://registry.yarnpkg.com/@firebase/performance/-/performance-0.5.8.tgz#c7e1c73122975d3364203829839a78d9371d9530"
+ integrity sha512-IN5MWdGRn0jglSdv1UHEDMklm1SOfF1IZ1pGNxVyO5CpF3a08I54I60fuwEfMUcsU6OAfzMl3zI+bnW5IgKdPg==
+ dependencies:
+ "@firebase/component" "0.5.13"
+ "@firebase/installations" "0.5.8"
+ "@firebase/logger" "0.3.2"
+ "@firebase/util" "1.5.2"
+ tslib "^2.1.0"
+
+"@firebase/polyfill@0.3.36":
+ version "0.3.36"
+ resolved "https://registry.yarnpkg.com/@firebase/polyfill/-/polyfill-0.3.36.tgz#c057cce6748170f36966b555749472b25efdb145"
+ integrity sha512-zMM9oSJgY6cT2jx3Ce9LYqb0eIpDE52meIzd/oe/y70F+v9u1LDqk5kUF5mf16zovGBWMNFmgzlsh6Wj0OsFtg==
+ dependencies:
+ core-js "3.6.5"
+ promise-polyfill "8.1.3"
+ whatwg-fetch "2.0.4"
+
+"@firebase/remote-config-compat@0.1.8":
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/@firebase/remote-config-compat/-/remote-config-compat-0.1.8.tgz#25c079fa8737d824add05337049dca17e078358f"
+ integrity sha512-lU9t7PMVpgE6q1vG8AuFenFhfUnx0H+eeiIQTi4dtuLDMx9BsI14c9VuiVjRIi7xC2DCDRNQCRL1kRD8bzgJNg==
+ dependencies:
+ "@firebase/component" "0.5.13"
+ "@firebase/logger" "0.3.2"
+ "@firebase/remote-config" "0.3.7"
+ "@firebase/remote-config-types" "0.2.0"
+ "@firebase/util" "1.5.2"
+ tslib "^2.1.0"
+
+"@firebase/remote-config-types@0.2.0":
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/@firebase/remote-config-types/-/remote-config-types-0.2.0.tgz#1e2759fc01f20b58c564db42196f075844c3d1fd"
+ integrity sha512-hqK5sCPeZvcHQ1D6VjJZdW6EexLTXNMJfPdTwbD8NrXUw6UjWC4KWhLK/TSlL0QPsQtcKRkaaoP+9QCgKfMFPw==
+
+"@firebase/remote-config@0.3.7":
+ version "0.3.7"
+ resolved "https://registry.yarnpkg.com/@firebase/remote-config/-/remote-config-0.3.7.tgz#743fcb00501b9eca24728cf4caabea974ba3396b"
+ integrity sha512-gQaGzQCBOkS35b/aXC5Y9/zsPenqs6+axnChYYyfU7CqMG5FGfNbVi2rezYwB4G3+fH4rGO1s6xqcI535Fvy/A==
+ dependencies:
+ "@firebase/component" "0.5.13"
+ "@firebase/installations" "0.5.8"
+ "@firebase/logger" "0.3.2"
+ "@firebase/util" "1.5.2"
+ tslib "^2.1.0"
+
+"@firebase/storage-compat@0.1.13":
+ version "0.1.13"
+ resolved "https://registry.yarnpkg.com/@firebase/storage-compat/-/storage-compat-0.1.13.tgz#e7a985ee01336df40682add37a2d0055e83c9a3a"
+ integrity sha512-MdubKh+xe3Xpi34WaXBKtim8H2aauO5sqqmATTc2WgSmSAqTmNSjQfNqIdf139Mp9ZCnpZAxiwiwzQtfckLYWg==
+ dependencies:
+ "@firebase/component" "0.5.13"
+ "@firebase/storage" "0.9.5"
+ "@firebase/storage-types" "0.6.0"
+ "@firebase/util" "1.5.2"
+ tslib "^2.1.0"
+
+"@firebase/storage-types@0.6.0":
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/@firebase/storage-types/-/storage-types-0.6.0.tgz#0b1af64a2965af46fca138e5b70700e9b7e6312a"
+ integrity sha512-1LpWhcCb1ftpkP/akhzjzeFxgVefs6eMD2QeKiJJUGH1qOiows2w5o0sKCUSQrvrRQS1lz3SFGvNR1Ck/gqxeA==
+
+"@firebase/storage@0.9.5":
+ version "0.9.5"
+ resolved "https://registry.yarnpkg.com/@firebase/storage/-/storage-0.9.5.tgz#f74c905c7fbc40c1fef02c9191d2bffcf2898b4e"
+ integrity sha512-+nCDNIT2pNovlHnLOQPofn8jdOyJ4akUWPGn4ydAoFrfVt1/lINx5Qe+jS3/tKLROfYabqBYxfFUjHQKZBYwvg==
+ dependencies:
+ "@firebase/component" "0.5.13"
+ "@firebase/util" "1.5.2"
+ node-fetch "2.6.7"
+ tslib "^2.1.0"
+
+"@firebase/util@1.5.2":
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/@firebase/util/-/util-1.5.2.tgz#bdd2bc11c956a8a6a0fa25fbd752a13e033558bc"
+ integrity sha512-YvBH2UxFcdWG2HdFnhxZptPl2eVFlpOyTH66iDo13JPEYraWzWToZ5AMTtkyRHVmu7sssUpQlU9igy1KET7TOw==
+ dependencies:
+ tslib "^2.1.0"
+
+"@firebase/webchannel-wrapper@0.6.1":
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.6.1.tgz#0c74724ba6e9ea6ad25a391eab60a79eaba4c556"
+ integrity sha512-9FqhNjKQWpQ3fGnSOCovHOm+yhhiorKEqYLAfd525jWavunDJcx8rOW6i6ozAh+FbwcYMkL7b+3j4UR/30MpoQ==
+
"@gar/promisify@^1.0.1":
version "1.1.3"
resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6"
integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==
+"@grpc/grpc-js@^1.3.2":
+ version "1.6.5"
+ resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.6.5.tgz#b93095ba87d6b7399f423231f64e9f05e23cd535"
+ integrity sha512-h0KSwgLiF5rmSAU6qnzK1aoD1MNqOw9HJK96N8VW3dR5FHMpq+0JNdLQFP//NcaIWVB7I7vkHl4JmU9hUw82Aw==
+ dependencies:
+ "@grpc/proto-loader" "^0.6.4"
+ "@types/node" ">=12.12.47"
+
+"@grpc/proto-loader@^0.6.0", "@grpc/proto-loader@^0.6.4":
+ version "0.6.9"
+ resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.6.9.tgz#4014eef366da733f8e04a9ddd7376fe8a58547b7"
+ integrity sha512-UlcCS8VbsU9d3XTXGiEVFonN7hXk+oMXZtoHHG2oSA1/GcDP1q6OUgs20PzHDGizzyi8ufGSUDlk3O2NyY7leg==
+ dependencies:
+ "@types/long" "^4.0.1"
+ lodash.camelcase "^4.3.0"
+ long "^4.0.0"
+ protobufjs "^6.10.0"
+ yargs "^16.2.0"
+
"@humanwhocodes/config-array@^0.5.0":
version "0.5.0"
resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9"
@@ -2443,6 +2826,59 @@
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.2.tgz#830beaec4b4091a9e9398ac50f865ddea52186b9"
integrity sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA==
+"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf"
+ integrity sha1-m4sMxmPWaafY9vXQiToU00jzD78=
+
+"@protobufjs/base64@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735"
+ integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==
+
+"@protobufjs/codegen@^2.0.4":
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb"
+ integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==
+
+"@protobufjs/eventemitter@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70"
+ integrity sha1-NVy8mLr61ZePntCV85diHx0Ga3A=
+
+"@protobufjs/fetch@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45"
+ integrity sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=
+ dependencies:
+ "@protobufjs/aspromise" "^1.1.1"
+ "@protobufjs/inquire" "^1.1.0"
+
+"@protobufjs/float@^1.0.2":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1"
+ integrity sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=
+
+"@protobufjs/inquire@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089"
+ integrity sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=
+
+"@protobufjs/path@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d"
+ integrity sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=
+
+"@protobufjs/pool@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54"
+ integrity sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=
+
+"@protobufjs/utf8@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570"
+ integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=
+
"@redux-saga/core@^1.1.3":
version "1.1.3"
resolved "https://registry.yarnpkg.com/@redux-saga/core/-/core-1.1.3.tgz#3085097b57a4ea8db5528d58673f20ce0950f6a4"
@@ -2898,6 +3334,11 @@
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.178.tgz#341f6d2247db528d4a13ddbb374bcdc80406f4f8"
integrity sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==
+"@types/long@^4.0.1":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9"
+ integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==
+
"@types/mdast@^3.0.0":
version "3.0.10"
resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.10.tgz#4724244a82a4598884cbbe9bcfd73dff927ee8af"
@@ -2925,6 +3366,11 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.19.tgz#726171367f404bfbe8512ba608a09ebad810c7e6"
integrity sha512-PfeQhvcMR4cPFVuYfBN4ifG7p9c+Dlh3yUZR6k+5yQK7wX3gDgVxBly4/WkBRs9x4dmcy1TVl08SY67wwtEvmA==
+"@types/node@>=12.12.47", "@types/node@>=13.7.0":
+ version "17.0.24"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.24.tgz#20ba1bf69c1b4ab405c7a01e950c4f446b05029f"
+ integrity sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==
+
"@types/node@^14.14.12":
version "14.18.12"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.12.tgz#0d4557fd3b94497d793efd4e7d92df2f83b4ef24"
@@ -3548,11 +3994,26 @@ ansi-html-community@^0.0.8:
resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41"
integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==
-ansi-regex@5.0.1, ansi-regex@^2.0.0, ansi-regex@^4.1.0, ansi-regex@^5.0.0, ansi-regex@^5.0.1, ansi-regex@^6.0.1:
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+ integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+
+ansi-regex@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed"
+ integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==
+
+ansi-regex@^5.0.0, ansi-regex@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+ansi-regex@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
+ integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
+
ansi-styles@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
@@ -4875,6 +5336,11 @@ core-js-pure@^3.20.2:
resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.21.1.tgz#8c4d1e78839f5f46208de7230cebfb72bc3bdb51"
integrity sha512-12VZfFIu+wyVbBebyHmRTuEE/tZrB4tJToWcwAMcsp3h4+sHR+fMJWbKpYiCRWlhFBq+KNyO8rIV9rTkeVmznQ==
+core-js@3.6.5:
+ version "3.6.5"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a"
+ integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==
+
core-js@^3.6.4:
version "3.21.1"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.21.1.tgz#f2e0ddc1fc43da6f904706e8e955bc19d06a0d94"
@@ -6316,7 +6782,7 @@ fastq@^1.6.0:
dependencies:
reusify "^1.0.4"
-faye-websocket@^0.11.3:
+faye-websocket@0.11.4, faye-websocket@^0.11.3:
version "0.11.4"
resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da"
integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==
@@ -6408,6 +6874,38 @@ find-up@^4.0.0, find-up@^4.1.0:
locate-path "^5.0.0"
path-exists "^4.0.0"
+firebase@^9.6.11:
+ version "9.6.11"
+ resolved "https://registry.yarnpkg.com/firebase/-/firebase-9.6.11.tgz#ec198b3bd646d0028b5d6240261cd89b200a590d"
+ integrity sha512-Zdmag/wGNkA4IAek+2yQoWrF2vyqIowu+2eOcSaE6jE2hDZYA3nHNutsQ+jquSxE3SeJk3Dh1OEsffqgunBy/w==
+ dependencies:
+ "@firebase/analytics" "0.7.8"
+ "@firebase/analytics-compat" "0.1.9"
+ "@firebase/app" "0.7.21"
+ "@firebase/app-check" "0.5.6"
+ "@firebase/app-check-compat" "0.2.6"
+ "@firebase/app-compat" "0.1.22"
+ "@firebase/app-types" "0.7.0"
+ "@firebase/auth" "0.19.12"
+ "@firebase/auth-compat" "0.2.12"
+ "@firebase/database" "0.12.8"
+ "@firebase/database-compat" "0.1.8"
+ "@firebase/firestore" "3.4.8"
+ "@firebase/firestore-compat" "0.1.17"
+ "@firebase/functions" "0.7.11"
+ "@firebase/functions-compat" "0.1.12"
+ "@firebase/installations" "0.5.8"
+ "@firebase/messaging" "0.9.12"
+ "@firebase/messaging-compat" "0.1.12"
+ "@firebase/performance" "0.5.8"
+ "@firebase/performance-compat" "0.1.8"
+ "@firebase/polyfill" "0.3.36"
+ "@firebase/remote-config" "0.3.7"
+ "@firebase/remote-config-compat" "0.1.8"
+ "@firebase/storage" "0.9.5"
+ "@firebase/storage-compat" "0.1.13"
+ "@firebase/util" "1.5.2"
+
flat-cache@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
@@ -7126,6 +7624,11 @@ ignore@^5.1.1, ignore@^5.1.8, ignore@^5.2.0:
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==
+immediate@~3.0.5:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
+ integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=
+
import-fresh@^3.0.0, import-fresh@^3.2.1:
version "3.3.0"
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
@@ -8352,6 +8855,16 @@ jsprim@^1.2.2:
array-includes "^3.1.3"
object.assign "^4.1.2"
+jszip@^3.6.0:
+ version "3.9.1"
+ resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.9.1.tgz#784e87f328450d1e8151003a9c67733e2b901051"
+ integrity sha512-H9A60xPqJ1CuC4Ka6qxzXZeU8aNmgOeP5IFqwJbQQwtu2EUYxota3LdsiZWplF7Wgd9tkAd0mdu36nceSaPuYw==
+ dependencies:
+ lie "~3.3.0"
+ pako "~1.0.2"
+ readable-stream "~2.3.6"
+ set-immediate-shim "~1.0.1"
+
jwa@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a"
@@ -8478,6 +8991,13 @@ libnpmpublish@^4.0.0:
semver "^7.1.3"
ssri "^8.0.1"
+lie@~3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a"
+ integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==
+ dependencies:
+ immediate "~3.0.5"
+
lines-and-columns@^1.1.6:
version "1.2.4"
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
@@ -8542,6 +9062,11 @@ lodash._reinterpolate@^3.0.0:
resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=
+lodash.camelcase@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
+ integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY=
+
lodash.debounce@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
@@ -8617,6 +9142,11 @@ lodash@4, lodash@4.x, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+long@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
+ integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==
+
longest-streak@^2.0.1:
version "2.0.4"
resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4"
@@ -9252,7 +9782,7 @@ nice-try@^1.0.4:
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
-node-fetch@^2.6.1, node-fetch@^2.6.7:
+node-fetch@2.6.7, node-fetch@^2.6.1, node-fetch@^2.6.7:
version "2.6.7"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
@@ -9907,7 +10437,7 @@ pacote@^11.2.6:
ssri "^8.0.1"
tar "^6.1.0"
-pako@~1.0.5:
+pako@~1.0.2, pako@~1.0.5:
version "1.0.11"
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
@@ -10221,6 +10751,11 @@ promise-inflight@^1.0.1:
resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
+promise-polyfill@8.1.3:
+ version "8.1.3"
+ resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.1.3.tgz#8c99b3cf53f3a91c68226ffde7bde81d7f904116"
+ integrity sha512-MG5r82wBzh7pSKDRa9y+vllNHz3e3d4CNj1PQE4BQYxLme0gKYYBm9YENq+UkEikyZ0XbiGWxYlVw3Rl9O/U8g==
+
promise-retry@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22"
@@ -10265,6 +10800,25 @@ proto-list@~1.2.1:
resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=
+protobufjs@^6.10.0:
+ version "6.11.2"
+ resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.2.tgz#de39fabd4ed32beaa08e9bb1e30d08544c1edf8b"
+ integrity sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==
+ 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/long" "^4.0.1"
+ "@types/node" ">=13.7.0"
+ long "^4.0.0"
+
protocols@^1.1.0, protocols@^1.4.0:
version "1.4.8"
resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.8.tgz#48eea2d8f58d9644a4a32caae5d5db290a075ce8"
@@ -10595,6 +11149,14 @@ react@^16.14.0:
object-assign "^4.1.1"
prop-types "^15.6.2"
+reactfire@^4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/reactfire/-/reactfire-4.2.1.tgz#48bbd2408247e930658bff58d94863b759381d9a"
+ integrity sha512-wWATeAPnGmp44rkG+0F2788HnVNgsk0H1vYimeNnNa/RouzkOn58vJmYgKyQhWAOmZl9Smkx9bDsFlt3PevN0w==
+ dependencies:
+ rxfire "^6.0.2"
+ rxjs "^6.6.3 || ^7.0.1"
+
read-cmd-shim@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz#4a50a71d6f0965364938e9038476f7eede3928d9"
@@ -11126,6 +11688,13 @@ run-parallel@^1.1.9:
dependencies:
queue-microtask "^1.2.2"
+rxfire@^6.0.2:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/rxfire/-/rxfire-6.0.3.tgz#556a08e5276563c867daeb8c670f59363d212365"
+ integrity sha512-77nkyffHh7jgfi1YA/N9RI+kWxYpgKk6GRML1lyersvaqbJt4hkvWwk1rWib9Rb5Lr5mT+Ha45lu7nM79sJCZA==
+ dependencies:
+ tslib "^1.9.0 || ~2.1.0"
+
rxjs@^6.6.0:
version "6.6.7"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9"
@@ -11133,6 +11702,13 @@ rxjs@^6.6.0:
dependencies:
tslib "^1.9.0"
+"rxjs@^6.6.3 || ^7.0.1":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f"
+ integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==
+ dependencies:
+ tslib "^2.1.0"
+
safe-buffer@*, safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
@@ -11226,6 +11802,25 @@ select-hose@^2.0.0:
resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=
+selenium-webdriver@4.0.0-rc-1:
+ version "4.0.0-rc-1"
+ resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.0.0-rc-1.tgz#b1e7e5821298c8a071e988518dd6b759f0c41281"
+ integrity sha512-bcrwFPRax8fifRP60p7xkWDGSJJoMkPAzufMlk5K2NyLPht/YZzR2WcIk1+3gR8VOCLlst1P2PI+MXACaFzpIw==
+ dependencies:
+ jszip "^3.6.0"
+ rimraf "^3.0.2"
+ tmp "^0.2.1"
+ ws ">=7.4.6"
+
+selenium-webdriver@^4.0.0-beta.2:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.1.1.tgz#da083177d811f36614950e809e2982570f67d02e"
+ integrity sha512-Fr9e9LC6zvD6/j7NO8M1M/NVxFX67abHcxDJoP5w2KN/Xb1SyYLjMVPGgD14U2TOiKe4XKHf42OmFw9g2JgCBQ==
+ dependencies:
+ jszip "^3.6.0"
+ tmp "^0.2.1"
+ ws ">=7.4.6"
+
selfsigned@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.0.0.tgz#e927cd5377cbb0a1075302cff8df1042cc2bce5b"
@@ -11326,6 +11921,11 @@ set-blocking@^2.0.0, set-blocking@~2.0.0:
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+set-immediate-shim@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
+ integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=
+
set-value@^2.0.0, set-value@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
@@ -12181,6 +12781,13 @@ tmp@^0.0.33:
dependencies:
os-tmpdir "~1.0.2"
+tmp@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14"
+ integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==
+ dependencies:
+ rimraf "^3.0.0"
+
tmpl@1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
@@ -12289,10 +12896,10 @@ trim-trailing-lines@^1.0.0:
resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0"
integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==
-trim@0.0.1, "trim@>= 0.0.3":
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/trim/-/trim-1.0.1.tgz#68e78f6178ccab9687a610752f4f5e5a7022ee8c"
- integrity sha512-3JVP2YVqITUisXblCDq/Bi4P9457G/sdEamInkyvCsjbTcXLXIiG7XCb4kGMFWh6JGXesS3TKxOPtrncN/xe8w==
+trim@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd"
+ integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0=
trough@^1.0.0:
version "1.0.5"
@@ -12342,7 +12949,12 @@ tslib@^1.8.1, tslib@^1.9.0:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
-tslib@^2.3.1:
+"tslib@^1.9.0 || ~2.1.0":
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a"
+ integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==
+
+tslib@^2.1.0, tslib@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==
@@ -13058,6 +13670,11 @@ whatwg-encoding@^1.0.5:
dependencies:
iconv-lite "0.4.24"
+whatwg-fetch@2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f"
+ integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==
+
whatwg-mimetype@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
@@ -13214,16 +13831,16 @@ write-pkg@^4.0.0:
type-fest "^0.4.1"
write-json-file "^3.2.0"
+ws@>=7.4.6, ws@^8.4.2:
+ version "8.5.0"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f"
+ integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==
+
ws@^7.3.1, ws@^7.4.6:
version "7.5.7"
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67"
integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==
-ws@^8.4.2:
- version "8.5.0"
- resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f"
- integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==
-
xdg-basedir@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"