From a3c347a9e1ffa9d2a40bcf3ec186850b9aee0d53 Mon Sep 17 00:00:00 2001 From: Bryn Ryans Date: Mon, 18 Apr 2022 15:59:11 +0000 Subject: [PATCH] feat: firestore demo --- package.json | 1 + react/typescript/firestore/.gitignore | 6 + react/typescript/firestore/.prettierrc.json | 5 + react/typescript/firestore/README.md | 114 ++++ react/typescript/firestore/babel.config.js | 68 ++ react/typescript/firestore/jest.config.js | 59 ++ react/typescript/firestore/manifest.lkml | 10 + react/typescript/firestore/package.json | 178 +++++ react/typescript/firestore/src/App.tsx | 47 ++ .../firestore/src/Firestore.spec.tsx | 40 ++ react/typescript/firestore/src/Firestore.tsx | 106 +++ react/typescript/firestore/src/Movies.tsx | 41 ++ .../src/__mocks__/render_with_extension.tsx | 121 ++++ react/typescript/firestore/src/index.tsx | 34 + react/typescript/firestore/tsconfig.json | 29 + react/typescript/firestore/webpack.config.js | 70 ++ react/typescript/firestore/webpack.develop.js | 56 ++ react/typescript/firestore/webpack.prod.js | 33 + yarn.lock | 645 +++++++++++++++++- 19 files changed, 1649 insertions(+), 14 deletions(-) create mode 100644 react/typescript/firestore/.gitignore create mode 100644 react/typescript/firestore/.prettierrc.json create mode 100644 react/typescript/firestore/README.md create mode 100644 react/typescript/firestore/babel.config.js create mode 100644 react/typescript/firestore/jest.config.js create mode 100644 react/typescript/firestore/manifest.lkml create mode 100644 react/typescript/firestore/package.json create mode 100644 react/typescript/firestore/src/App.tsx create mode 100644 react/typescript/firestore/src/Firestore.spec.tsx create mode 100644 react/typescript/firestore/src/Firestore.tsx create mode 100644 react/typescript/firestore/src/Movies.tsx create mode 100644 react/typescript/firestore/src/__mocks__/render_with_extension.tsx create mode 100644 react/typescript/firestore/src/index.tsx create mode 100644 react/typescript/firestore/tsconfig.json create mode 100644 react/typescript/firestore/webpack.config.js create mode 100644 react/typescript/firestore/webpack.develop.js create mode 100644 react/typescript/firestore/webpack.prod.js 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"