From 254adc1b6007262cd7d708ad1ded5490cfcdc4f3 Mon Sep 17 00:00:00 2001 From: Nandini Date: Wed, 31 Jan 2024 20:18:02 -0500 Subject: [PATCH] starter code setup --- .DS_Store | Bin 0 -> 6148 bytes backend/typescript/.dockerignore | 1 + backend/typescript/.eslintrc.js | 22 + backend/typescript/.prettierrc.js | 3 + backend/typescript/Dockerfile | 15 + backend/typescript/Procfile | 1 + backend/typescript/jest.config.ts | 189 + backend/typescript/middlewares/auth.ts | 78 + .../middlewares/validators/authValidators.ts | 45 + .../validators/entityValidators.ts | 45 + .../validators/simpleEntityValidators.ts | 34 + .../middlewares/validators/userValidators.ts | 47 + .../typescript/middlewares/validators/util.ts | 57 + backend/typescript/migrate.js | 4 + ...2022.01.10T17.43.07.create-entity-table.ts | 46 + .../2022.01.10T17.43.41.create-user-table.ts | 38 + backend/typescript/models/entity.model.ts | 25 + backend/typescript/models/index.ts | 13 + .../typescript/models/simpleEntity.model.ts | 21 + backend/typescript/models/user.model.ts | 17 + backend/typescript/nodemailer.config.ts | 14 + backend/typescript/nodemon.json | 4 + backend/typescript/package.json | 85 + backend/typescript/rest/authRoutes.ts | 117 + backend/typescript/rest/entityRoutes.ts | 137 + backend/typescript/rest/simpleEntityRoutes.ts | 104 + backend/typescript/rest/userRoutes.ts | 166 + backend/typescript/server.ts | 56 + .../__tests__/userService.test.ts | 65 + .../services/implementations/authService.ts | 234 + .../services/implementations/emailService.ts | 44 + .../services/implementations/entityService.ts | 189 + .../implementations/fileStorageService.ts | 97 + .../implementations/simpleEntityService.ts | 141 + .../services/implementations/userService.ts | 369 + .../services/interfaces/IEntityService.ts | 65 + .../services/interfaces/authService.ts | 87 + .../services/interfaces/emailService.ts | 12 + .../services/interfaces/fileStorageService.ts | 48 + .../interfaces/simpleEntityService.ts | 64 + .../services/interfaces/userService.ts | 96 + backend/typescript/swagger.yml | 809 + backend/typescript/testUtils/testDb.ts | 16 + backend/typescript/tsconfig.json | 77 + backend/typescript/types.ts | 37 + backend/typescript/umzug.ts | 27 + backend/typescript/utilities/CSVUtils.ts | 61 + backend/typescript/utilities/errorUtils.ts | 4 + .../utilities/firebaseRestClient.ts | 181 + backend/typescript/utilities/logger.ts | 51 + backend/typescript/utilities/responseUtil.ts | 20 + backend/typescript/yarn.lock | 7041 +++++++++ db-init/create-multiple-dbs.sh | 22 + docker-compose.yml | 57 + e2e-tests/cat.png | Bin 0 -> 524387 bytes e2e-tests/conftest.py | 95 + e2e-tests/dog.jpg | Bin 0 -> 127039 bytes e2e-tests/test_auth.py | 55 + e2e-tests/test_auth_gql.py | 89 + e2e-tests/test_entity.py | 121 + e2e-tests/test_entity_gql.py | 273 + e2e-tests/test_simple_entity.py | 81 + e2e-tests/test_simple_entity_gql.py | 150 + e2e-tests/test_user.py | 106 + e2e-tests/test_user_gql.py | 168 + frontend/.dockerignore | 1 + frontend/.env | 1 + frontend/.eslintrc.js | 36 + frontend/.firebaserc | 5 + frontend/.prettierrc.js | 3 + frontend/Dockerfile | 11 + frontend/README.md | 46 + frontend/firebase.json | 16 + frontend/package.json | 83 + frontend/public/favicon.ico | Bin 0 -> 3870 bytes frontend/public/index.html | 43 + frontend/public/logo192.png | Bin 0 -> 5347 bytes frontend/public/logo512.png | Bin 0 -> 9664 bytes frontend/public/manifest.json | 25 + frontend/public/robots.txt | 3 + frontend/src/APIClients/AuthAPIClient.ts | 119 + frontend/src/APIClients/BaseAPIClient.ts | 49 + frontend/src/APIClients/EntityAPIClient.ts | 121 + .../src/APIClients/SimpleEntityAPIClient.ts | 107 + frontend/src/App.tsx | 109 + frontend/src/components/auth/Login.tsx | 106 + frontend/src/components/auth/Logout.tsx | 24 + frontend/src/components/auth/PrivateRoute.tsx | 27 + .../components/auth/RefreshCredentials.tsx | 24 + .../src/components/auth/ResetPassword.tsx | 23 + frontend/src/components/auth/Signup.tsx | 80 + .../src/components/common/MainPageButton.tsx | 22 + .../common/__tests__/MainPageButton.spec.tsx | 15 + .../MainPageButton.spec.tsx.snap | 18 + frontend/src/components/crud/CreateForm.tsx | 105 + .../components/crud/DisplayTableContainer.tsx | 179 + .../crud/SimpleEntityCreateForm.tsx | 86 + .../SimpleEntityDisplayTableContainer.tsx | 147 + .../crud/SimpleEntityUpdateForm.tsx | 96 + frontend/src/components/crud/UpdateForm.tsx | 116 + frontend/src/components/pages/CreatePage.tsx | 15 + frontend/src/components/pages/Default.tsx | 74 + frontend/src/components/pages/DisplayPage.tsx | 15 + .../src/components/pages/EditTeamPage.tsx | 93 + .../pages/HooksDemo/EmojiSection.tsx | 56 + .../components/pages/HooksDemo/HooksDemo.tsx | 211 + .../src/components/pages/HooksDemo/emojis.ts | 67 + .../src/components/pages/HooksDemo/index.ts | 3 + .../src/components/pages/HooksDemo/styles.css | 71 + frontend/src/components/pages/NotFound.tsx | 11 + .../pages/SimpleEntityCreatePage.tsx | 15 + .../pages/SimpleEntityDisplayPage.tsx | 15 + .../pages/SimpleEntityUpdatePage.tsx | 15 + frontend/src/components/pages/UpdatePage.tsx | 15 + .../pages/__tests__/Default.test.tsx | 17 + frontend/src/constants/AuthConstants.ts | 3 + frontend/src/constants/Routes.ts | 21 + frontend/src/contexts/AuthContext.ts | 15 + frontend/src/contexts/SampleContext.ts | 13 + .../SampleContextDispatcherContext.ts | 8 + frontend/src/index.css | 13 + frontend/src/index.tsx | 18 + frontend/src/react-app-env.d.ts | 1 + frontend/src/reducers/SampleContextReducer.ts | 35 + frontend/src/reportWebVitals.ts | 15 + frontend/src/setupTests.ts | 5 + frontend/src/types/AuthTypes.ts | 13 + frontend/src/types/SampleContextTypes.ts | 24 + frontend/src/utils/CSVUtils.ts | 84 + frontend/src/utils/FileUtils.ts | 9 + frontend/src/utils/LocalStorageUtils.ts | 42 + frontend/src/utils/__tests__/CSVUtils.test.ts | 136 + .../utils/__tests__/LocalStorageUtils.test.ts | 59 + frontend/tsconfig.json | 26 + frontend/yarn.lock | 12548 ++++++++++++++++ hooks/post-merge | 21 + secret.config | 2 + setup.sh | 14 + update_secret_files.py | 56 + 139 files changed, 28156 insertions(+) create mode 100644 .DS_Store create mode 100644 backend/typescript/.dockerignore create mode 100644 backend/typescript/.eslintrc.js create mode 100644 backend/typescript/.prettierrc.js create mode 100644 backend/typescript/Dockerfile create mode 100644 backend/typescript/Procfile create mode 100644 backend/typescript/jest.config.ts create mode 100644 backend/typescript/middlewares/auth.ts create mode 100644 backend/typescript/middlewares/validators/authValidators.ts create mode 100644 backend/typescript/middlewares/validators/entityValidators.ts create mode 100644 backend/typescript/middlewares/validators/simpleEntityValidators.ts create mode 100644 backend/typescript/middlewares/validators/userValidators.ts create mode 100644 backend/typescript/middlewares/validators/util.ts create mode 100644 backend/typescript/migrate.js create mode 100644 backend/typescript/migrations/2022.01.10T17.43.07.create-entity-table.ts create mode 100644 backend/typescript/migrations/2022.01.10T17.43.41.create-user-table.ts create mode 100644 backend/typescript/models/entity.model.ts create mode 100644 backend/typescript/models/index.ts create mode 100644 backend/typescript/models/simpleEntity.model.ts create mode 100644 backend/typescript/models/user.model.ts create mode 100644 backend/typescript/nodemailer.config.ts create mode 100644 backend/typescript/nodemon.json create mode 100644 backend/typescript/package.json create mode 100644 backend/typescript/rest/authRoutes.ts create mode 100644 backend/typescript/rest/entityRoutes.ts create mode 100644 backend/typescript/rest/simpleEntityRoutes.ts create mode 100644 backend/typescript/rest/userRoutes.ts create mode 100644 backend/typescript/server.ts create mode 100644 backend/typescript/services/implementations/__tests__/userService.test.ts create mode 100644 backend/typescript/services/implementations/authService.ts create mode 100644 backend/typescript/services/implementations/emailService.ts create mode 100644 backend/typescript/services/implementations/entityService.ts create mode 100644 backend/typescript/services/implementations/fileStorageService.ts create mode 100644 backend/typescript/services/implementations/simpleEntityService.ts create mode 100644 backend/typescript/services/implementations/userService.ts create mode 100644 backend/typescript/services/interfaces/IEntityService.ts create mode 100644 backend/typescript/services/interfaces/authService.ts create mode 100644 backend/typescript/services/interfaces/emailService.ts create mode 100644 backend/typescript/services/interfaces/fileStorageService.ts create mode 100644 backend/typescript/services/interfaces/simpleEntityService.ts create mode 100644 backend/typescript/services/interfaces/userService.ts create mode 100644 backend/typescript/swagger.yml create mode 100644 backend/typescript/testUtils/testDb.ts create mode 100644 backend/typescript/tsconfig.json create mode 100644 backend/typescript/types.ts create mode 100644 backend/typescript/umzug.ts create mode 100644 backend/typescript/utilities/CSVUtils.ts create mode 100644 backend/typescript/utilities/errorUtils.ts create mode 100644 backend/typescript/utilities/firebaseRestClient.ts create mode 100644 backend/typescript/utilities/logger.ts create mode 100644 backend/typescript/utilities/responseUtil.ts create mode 100644 backend/typescript/yarn.lock create mode 100755 db-init/create-multiple-dbs.sh create mode 100644 docker-compose.yml create mode 100644 e2e-tests/cat.png create mode 100644 e2e-tests/conftest.py create mode 100644 e2e-tests/dog.jpg create mode 100644 e2e-tests/test_auth.py create mode 100644 e2e-tests/test_auth_gql.py create mode 100644 e2e-tests/test_entity.py create mode 100644 e2e-tests/test_entity_gql.py create mode 100644 e2e-tests/test_simple_entity.py create mode 100644 e2e-tests/test_simple_entity_gql.py create mode 100644 e2e-tests/test_user.py create mode 100644 e2e-tests/test_user_gql.py create mode 100644 frontend/.dockerignore create mode 100644 frontend/.env create mode 100644 frontend/.eslintrc.js create mode 100644 frontend/.firebaserc create mode 100644 frontend/.prettierrc.js create mode 100644 frontend/Dockerfile create mode 100644 frontend/README.md create mode 100644 frontend/firebase.json create mode 100644 frontend/package.json create mode 100644 frontend/public/favicon.ico create mode 100644 frontend/public/index.html create mode 100644 frontend/public/logo192.png create mode 100644 frontend/public/logo512.png create mode 100644 frontend/public/manifest.json create mode 100644 frontend/public/robots.txt create mode 100644 frontend/src/APIClients/AuthAPIClient.ts create mode 100644 frontend/src/APIClients/BaseAPIClient.ts create mode 100644 frontend/src/APIClients/EntityAPIClient.ts create mode 100644 frontend/src/APIClients/SimpleEntityAPIClient.ts create mode 100644 frontend/src/App.tsx create mode 100644 frontend/src/components/auth/Login.tsx create mode 100644 frontend/src/components/auth/Logout.tsx create mode 100644 frontend/src/components/auth/PrivateRoute.tsx create mode 100644 frontend/src/components/auth/RefreshCredentials.tsx create mode 100644 frontend/src/components/auth/ResetPassword.tsx create mode 100644 frontend/src/components/auth/Signup.tsx create mode 100644 frontend/src/components/common/MainPageButton.tsx create mode 100644 frontend/src/components/common/__tests__/MainPageButton.spec.tsx create mode 100644 frontend/src/components/common/__tests__/__snapshots__/MainPageButton.spec.tsx.snap create mode 100644 frontend/src/components/crud/CreateForm.tsx create mode 100644 frontend/src/components/crud/DisplayTableContainer.tsx create mode 100644 frontend/src/components/crud/SimpleEntityCreateForm.tsx create mode 100644 frontend/src/components/crud/SimpleEntityDisplayTableContainer.tsx create mode 100644 frontend/src/components/crud/SimpleEntityUpdateForm.tsx create mode 100644 frontend/src/components/crud/UpdateForm.tsx create mode 100644 frontend/src/components/pages/CreatePage.tsx create mode 100644 frontend/src/components/pages/Default.tsx create mode 100644 frontend/src/components/pages/DisplayPage.tsx create mode 100644 frontend/src/components/pages/EditTeamPage.tsx create mode 100644 frontend/src/components/pages/HooksDemo/EmojiSection.tsx create mode 100644 frontend/src/components/pages/HooksDemo/HooksDemo.tsx create mode 100644 frontend/src/components/pages/HooksDemo/emojis.ts create mode 100644 frontend/src/components/pages/HooksDemo/index.ts create mode 100644 frontend/src/components/pages/HooksDemo/styles.css create mode 100644 frontend/src/components/pages/NotFound.tsx create mode 100644 frontend/src/components/pages/SimpleEntityCreatePage.tsx create mode 100644 frontend/src/components/pages/SimpleEntityDisplayPage.tsx create mode 100644 frontend/src/components/pages/SimpleEntityUpdatePage.tsx create mode 100644 frontend/src/components/pages/UpdatePage.tsx create mode 100644 frontend/src/components/pages/__tests__/Default.test.tsx create mode 100644 frontend/src/constants/AuthConstants.ts create mode 100644 frontend/src/constants/Routes.ts create mode 100644 frontend/src/contexts/AuthContext.ts create mode 100644 frontend/src/contexts/SampleContext.ts create mode 100644 frontend/src/contexts/SampleContextDispatcherContext.ts create mode 100644 frontend/src/index.css create mode 100644 frontend/src/index.tsx create mode 100644 frontend/src/react-app-env.d.ts create mode 100644 frontend/src/reducers/SampleContextReducer.ts create mode 100644 frontend/src/reportWebVitals.ts create mode 100644 frontend/src/setupTests.ts create mode 100644 frontend/src/types/AuthTypes.ts create mode 100644 frontend/src/types/SampleContextTypes.ts create mode 100644 frontend/src/utils/CSVUtils.ts create mode 100644 frontend/src/utils/FileUtils.ts create mode 100644 frontend/src/utils/LocalStorageUtils.ts create mode 100644 frontend/src/utils/__tests__/CSVUtils.test.ts create mode 100644 frontend/src/utils/__tests__/LocalStorageUtils.test.ts create mode 100644 frontend/tsconfig.json create mode 100644 frontend/yarn.lock create mode 100644 hooks/post-merge create mode 100644 secret.config create mode 100755 setup.sh create mode 100644 update_secret_files.py diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..71c2deb93a7d0ea9894ffe621ed05481a99675b6 GIT binary patch literal 6148 zcmeHKOHKko5Phu}Kw~5>j2n~j08FAMm=L^x9spzpWx@!C&w|~oJd3x)SJfRNK@(=9 z##AL$uYa$)`-PsS0l3aGy8&7N8g#+hF~b)o{o*@z5L%ia(3$&;1Mat_;h}!1NKC8Cue(2WBDHLZ46w!OMSh*K4V)Q8ToDGJo`Bo{`Bw7 zJ|}w`=AJQ2%GwKF8RuM0j1_A|#hgttZ|Q9;80U=hiWwSs!i;N}Xok%_= z{{6pAvYIJi3j8YtT&?@i?Ql!sZr$0O+_e$CPZyJMrAMVOgzH!faur|F)z}wFftUm= SJ+g&ne*{zp3#P!2D)0d|V8Ipu literal 0 HcmV?d00001 diff --git a/backend/typescript/.dockerignore b/backend/typescript/.dockerignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/backend/typescript/.dockerignore @@ -0,0 +1 @@ +node_modules diff --git a/backend/typescript/.eslintrc.js b/backend/typescript/.eslintrc.js new file mode 100644 index 0000000..2c69e22 --- /dev/null +++ b/backend/typescript/.eslintrc.js @@ -0,0 +1,22 @@ +module.exports = { + root: true, + parser: "@typescript-eslint/parser", + parserOptions: { + ecmaVersion: 2020, + project: "./tsconfig.json", + sourceType: "module", + createDefaultProgram: true, + tsconfigRootDir: __dirname, + }, + extends: [ + "airbnb-typescript/base", + "prettier", + "plugin:prettier/recommended", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended", + ], + rules: { + "prettier/prettier": ["error", { endOfLine: "auto" }], + }, + ignorePatterns: ["build/*"], +}; diff --git a/backend/typescript/.prettierrc.js b/backend/typescript/.prettierrc.js new file mode 100644 index 0000000..b483f64 --- /dev/null +++ b/backend/typescript/.prettierrc.js @@ -0,0 +1,3 @@ +module.exports = { + trailingComma: "all", +}; diff --git a/backend/typescript/Dockerfile b/backend/typescript/Dockerfile new file mode 100644 index 0000000..720f95f --- /dev/null +++ b/backend/typescript/Dockerfile @@ -0,0 +1,15 @@ +FROM node:14.15.5-slim + +WORKDIR /app + +COPY package.json yarn.lock tsconfig.json ./ + +# libcurl3 is required for mongodb-memory-server, which is used for testing +RUN apt-get update && apt-get install -y libcurl3 + +RUN yarn install + +COPY . ./ + +EXPOSE 5000 +ENTRYPOINT ["yarn", "dev"] diff --git a/backend/typescript/Procfile b/backend/typescript/Procfile new file mode 100644 index 0000000..b7b816a --- /dev/null +++ b/backend/typescript/Procfile @@ -0,0 +1 @@ +web: node migrate up && node build/server.js diff --git a/backend/typescript/jest.config.ts b/backend/typescript/jest.config.ts new file mode 100644 index 0000000..0dbcd90 --- /dev/null +++ b/backend/typescript/jest.config.ts @@ -0,0 +1,189 @@ +/* + * For a detailed explanation regarding each configuration property and type check, visit: + * https://jestjs.io/docs/configuration + */ + +export default { + // All imported modules in your tests should be mocked automatically + // automock: false, + + // Stop running tests after `n` failures + // bail: 0, + + // The directory where Jest should store its cached dependency information + // cacheDirectory: "/private/var/folders/k2/ck3w088577zd4cwb6ctnwh8w0000gn/T/jest_dx", + + // Automatically clear mock calls and instances between every test + clearMocks: true, + + // Indicates whether the coverage information should be collected while executing the test + collectCoverage: false, + + // An array of glob patterns indicating a set of files for which coverage information should be collected + // collectCoverageFrom: undefined, + + // The directory where Jest should output its coverage files + // coverageDirectory: "coverage", + + // An array of regexp pattern strings used to skip coverage collection + // coveragePathIgnorePatterns: [ + // "/node_modules/" + // ], + + // Indicates which provider should be used to instrument code for coverage + // coverageProvider: "babel", + + // A list of reporter names that Jest uses when writing coverage reports + // coverageReporters: [ + // "json", + // "text", + // "lcov", + // "clover" + // ], + + // An object that configures minimum threshold enforcement for coverage results + // coverageThreshold: undefined, + + // A path to a custom dependency extractor + // dependencyExtractor: undefined, + + // Make calling deprecated APIs throw helpful error messages + // errorOnDeprecated: false, + + // Force coverage collection from ignored files using an array of glob patterns + // forceCoverageMatch: [], + + // A path to a module which exports an async function that is triggered once before all test suites + // globalSetup: undefined, + + // A path to a module which exports an async function that is triggered once after all test suites + // globalTeardown: undefined, + + // A set of global variables that need to be available in all test environments + // globals: {}, + + // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. + // maxWorkers: "50%", + + // An array of directory names to be searched recursively up from the requiring module's location + // moduleDirectories: [ + // "node_modules" + // ], + + // An array of file extensions your modules use + // moduleFileExtensions: [ + // "js", + // "jsx", + // "ts", + // "tsx", + // "json", + // "node" + // ], + + // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module + // moduleNameMapper: {}, + + // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader + // modulePathIgnorePatterns: [], + + // Activates notifications for test results + // notify: false, + + // An enum that specifies notification mode. Requires { notify: true } + // notifyMode: "failure-change", + + // A preset that is used as a base for Jest's configuration + // preset: undefined, + + // Run tests from one or more projects + // projects: undefined, + + // Use this configuration option to add custom reporters to Jest + // reporters: undefined, + + // Automatically reset mock state between every test + // resetMocks: false, + + // Reset the module registry before running each individual test + // resetModules: false, + + // A path to a custom resolver + // resolver: undefined, + + // Automatically restore mock state between every test + // restoreMocks: false, + + // The root directory that Jest should scan for tests and modules within + rootDir: "./", + + // A list of paths to directories that Jest should use to search for files in + // roots: ["services"], + + // Allows you to use a custom runner instead of Jest's default test runner + // runner: "jest-runner", + + // The paths to modules that run some code to configure or set up the testing environment before each test + // setupFiles: ["./testUtils/setup.ts"], + + // A list of paths to modules that run some code to configure or set up the testing framework before each test + // setupFilesAfterEnv: [], + + // The number of seconds after which a test is considered as slow and reported as such in the results. + // slowTestThreshold: 5, + + // A list of paths to snapshot serializer modules Jest should use for snapshot testing + // snapshotSerializers: [], + + // The test environment that will be used for testing + testEnvironment: "node", + + // Options that will be passed to the testEnvironment + // testEnvironmentOptions: {}, + + // Adds a location field to test results + // testLocationInResults: false, + + // The glob patterns Jest uses to detect test files + testMatch: ["**/__tests__/**/*.[jt]s?(x)", "**/?(*.)+(spec|test).[tj]s?(x)"], + + // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped + testPathIgnorePatterns: ["/build/", "/node_modules/"], + + // The regexp pattern or array of patterns that Jest uses to detect test files + // testRegex: [], + + // This option allows the use of a custom results processor + // testResultsProcessor: undefined, + + // This option allows use of a custom test runner + // testRunner: "jest-circus/runner", + + // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href + // testURL: "http://localhost", + + // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout" + // timers: "real", + + // A map from regular expressions to paths to transformers + transform: { + "^.+\\.(ts|tsx)$": "ts-jest", + }, + + // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation + // transformIgnorePatterns: [ + // "/node_modules/", + // "\\.pnp\\.[^\\/]+$" + // ], + + // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them + // unmockedModulePathPatterns: undefined, + + // Indicates whether each individual test should be reported during the run + // verbose: undefined, + + // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode + // watchPathIgnorePatterns: [], + + // Whether to use watchman for file crawling + // watchman: true, +}; diff --git a/backend/typescript/middlewares/auth.ts b/backend/typescript/middlewares/auth.ts new file mode 100644 index 0000000..8bca585 --- /dev/null +++ b/backend/typescript/middlewares/auth.ts @@ -0,0 +1,78 @@ +import { NextFunction, Request, Response } from "express"; + +import AuthService from "../services/implementations/authService"; +import UserService from "../services/implementations/userService"; +import IAuthService from "../services/interfaces/authService"; +import { Role } from "../types"; + +const authService: IAuthService = new AuthService(new UserService()); + +export const getAccessToken = (req: Request): string | null => { + const authHeaderParts = req.headers.authorization?.split(" "); + if ( + authHeaderParts && + authHeaderParts.length >= 2 && + authHeaderParts[0].toLowerCase() === "bearer" + ) { + return authHeaderParts[1]; + } + return null; +}; + +/* Determine if request is authorized based on accessToken validity and role of client */ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +export const isAuthorizedByRole = (roles: Set) => { + return async (req: Request, res: Response, next: NextFunction) => { + const accessToken = getAccessToken(req); + const authorized = + accessToken && (await authService.isAuthorizedByRole(accessToken, roles)); + if (!authorized) { + return res + .status(401) + .json({ error: "You are not authorized to make this request." }); + } + return next(); + }; +}; + +/* Determine if request for a user-specific resource is authorized based on accessToken + * validity and if the userId that the token was issued to matches the requested userId + * Note: userIdField is the name of the request parameter containing the requested userId */ +export const isAuthorizedByUserId = (userIdField: string) => { + return async (req: Request, res: Response, next: NextFunction) => { + const accessToken = getAccessToken(req); + const authorized = + accessToken && + (await authService.isAuthorizedByUserId( + accessToken, + req.params[userIdField], + )); + if (!authorized) { + return res + .status(401) + .json({ error: "You are not authorized to make this request." }); + } + return next(); + }; +}; + +/* Determine if request for a user-specific resource is authorized based on accessToken + * validity and if the email that the token was issued to matches the requested email + * Note: emailField is the name of the request parameter containing the requested email */ +export const isAuthorizedByEmail = (emailField: string) => { + return async (req: Request, res: Response, next: NextFunction) => { + const accessToken = getAccessToken(req); + const authorized = + accessToken && + (await authService.isAuthorizedByEmail( + accessToken, + req.params[emailField], + )); + if (!authorized) { + return res + .status(401) + .json({ error: "You are not authorized to make this request." }); + } + return next(); + }; +}; diff --git a/backend/typescript/middlewares/validators/authValidators.ts b/backend/typescript/middlewares/validators/authValidators.ts new file mode 100644 index 0000000..db911a6 --- /dev/null +++ b/backend/typescript/middlewares/validators/authValidators.ts @@ -0,0 +1,45 @@ +import { Request, Response, NextFunction } from "express"; +import { getApiValidationError, validatePrimitive } from "./util"; + +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +/* eslint-disable-next-line import/prefer-default-export */ +export const loginRequestValidator = async ( + req: Request, + res: Response, + next: NextFunction, +) => { + if (req.body.idToken) { + if (!validatePrimitive(req.body.idToken, "string")) { + return res.status(400).json(getApiValidationError("idToken", "string")); + } + } else { + if (!validatePrimitive(req.body.email, "string")) { + return res.status(400).send(getApiValidationError("email", "string")); + } + if (!validatePrimitive(req.body.password, "string")) { + return res.status(400).send(getApiValidationError("password", "string")); + } + } + return next(); +}; + +export const registerRequestValidator = async ( + req: Request, + res: Response, + next: NextFunction, +) => { + if (!validatePrimitive(req.body.firstName, "string")) { + return res.status(400).send(getApiValidationError("firstName", "string")); + } + if (!validatePrimitive(req.body.lastName, "string")) { + return res.status(400).send(getApiValidationError("lastName", "string")); + } + if (!validatePrimitive(req.body.email, "string")) { + return res.status(400).send(getApiValidationError("email", "string")); + } + if (!validatePrimitive(req.body.password, "string")) { + return res.status(400).send(getApiValidationError("password", "string")); + } + + return next(); +}; diff --git a/backend/typescript/middlewares/validators/entityValidators.ts b/backend/typescript/middlewares/validators/entityValidators.ts new file mode 100644 index 0000000..c3ae641 --- /dev/null +++ b/backend/typescript/middlewares/validators/entityValidators.ts @@ -0,0 +1,45 @@ +import { Request, Response, NextFunction } from "express"; +import { + getApiValidationError, + getFileTypeValidationError, + validateArray, + validateFileType, + validatePrimitive, +} from "./util"; +import { getErrorMessage } from "../../utilities/errorUtils"; + +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +/* eslint-disable-next-line import/prefer-default-export */ +export const entityRequestDtoValidator = async ( + req: Request, + res: Response, + next: NextFunction, +) => { + let body; + try { + body = JSON.parse(req.body.body); + } catch (e: unknown) { + return res.status(400).send(getErrorMessage(e)); + } + if (!validatePrimitive(body.stringField, "string")) { + return res.status(400).send(getApiValidationError("stringField", "string")); + } + if (!validatePrimitive(body.intField, "integer")) { + return res.status(400).send(getApiValidationError("intField", "integer")); + } + if (!validatePrimitive(body.enumField, "string")) { + return res.status(400).send(getApiValidationError("enumField", "string")); + } + if (!validateArray(body.stringArrayField, "string")) { + return res + .status(400) + .send(getApiValidationError("stringArrayField", "string", true)); + } + if (!validatePrimitive(body.boolField, "boolean")) { + return res.status(400).send(getApiValidationError("boolField", "boolean")); + } + if (req.file && !validateFileType(req.file.mimetype)) { + return res.status(400).send(getFileTypeValidationError(req.file.mimetype)); + } + return next(); +}; diff --git a/backend/typescript/middlewares/validators/simpleEntityValidators.ts b/backend/typescript/middlewares/validators/simpleEntityValidators.ts new file mode 100644 index 0000000..f89c4bc --- /dev/null +++ b/backend/typescript/middlewares/validators/simpleEntityValidators.ts @@ -0,0 +1,34 @@ +import { Request, Response, NextFunction } from "express"; +import { + getApiValidationError, + validateArray, + validatePrimitive, +} from "./util"; + +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +/* eslint-disable-next-line import/prefer-default-export */ +export const simpleEntityRequestDtoValidator = async ( + req: Request, + res: Response, + next: NextFunction, +) => { + const { body } = req; + if (!validatePrimitive(body.stringField, "string")) { + return res.status(400).send(getApiValidationError("stringField", "string")); + } + if (!validatePrimitive(body.intField, "integer")) { + return res.status(400).send(getApiValidationError("intField", "integer")); + } + if (!validatePrimitive(body.enumField, "string")) { + return res.status(400).send(getApiValidationError("enumField", "string")); + } + if (!validateArray(body.stringArrayField, "string")) { + return res + .status(400) + .send(getApiValidationError("stringArrayField", "string", true)); + } + if (!validatePrimitive(body.boolField, "boolean")) { + return res.status(400).send(getApiValidationError("boolField", "boolean")); + } + return next(); +}; diff --git a/backend/typescript/middlewares/validators/userValidators.ts b/backend/typescript/middlewares/validators/userValidators.ts new file mode 100644 index 0000000..f703e99 --- /dev/null +++ b/backend/typescript/middlewares/validators/userValidators.ts @@ -0,0 +1,47 @@ +import { Request, Response, NextFunction } from "express"; +import { getApiValidationError, validatePrimitive } from "./util"; + +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +export const createUserDtoValidator = async ( + req: Request, + res: Response, + next: NextFunction, +) => { + if (!validatePrimitive(req.body.firstName, "string")) { + return res.status(400).send(getApiValidationError("firstName", "string")); + } + if (!validatePrimitive(req.body.lastName, "string")) { + return res.status(400).send(getApiValidationError("lastName", "string")); + } + if (!validatePrimitive(req.body.email, "string")) { + return res.status(400).send(getApiValidationError("email", "string")); + } + if (!validatePrimitive(req.body.role, "string")) { + return res.status(400).send(getApiValidationError("role", "string")); + } + if (!validatePrimitive(req.body.password, "string")) { + return res.status(400).send(getApiValidationError("password", "string")); + } + + return next(); +}; + +export const updateUserDtoValidator = async ( + req: Request, + res: Response, + next: NextFunction, +) => { + if (!validatePrimitive(req.body.firstName, "string")) { + return res.status(400).send(getApiValidationError("firstName", "string")); + } + if (!validatePrimitive(req.body.lastName, "string")) { + return res.status(400).send(getApiValidationError("lastName", "string")); + } + if (!validatePrimitive(req.body.email, "string")) { + return res.status(400).send(getApiValidationError("email", "string")); + } + if (!validatePrimitive(req.body.role, "string")) { + return res.status(400).send(getApiValidationError("role", "string")); + } + return next(); +}; diff --git a/backend/typescript/middlewares/validators/util.ts b/backend/typescript/middlewares/validators/util.ts new file mode 100644 index 0000000..1007161 --- /dev/null +++ b/backend/typescript/middlewares/validators/util.ts @@ -0,0 +1,57 @@ +type Type = "string" | "integer" | "boolean"; + +const allowableContentTypes = new Set([ + "text/plain", + "application/pdf", + "image/png", + "image/jpeg", + "image/gif", +]); + +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +/* eslint-disable @typescript-eslint/no-explicit-any */ +export const validatePrimitive = (value: any, type: Type): boolean => { + if (value === undefined || value === null) return false; + + switch (type) { + case "string": { + return typeof value === "string"; + } + case "boolean": { + return typeof value === "boolean"; + } + case "integer": { + return typeof value === "number" && Number.isInteger(value); + } + default: { + return false; + } + } +}; + +export const validateArray = (value: any, type: Type): boolean => { + return ( + value !== undefined && + value !== null && + typeof value === "object" && + Array.isArray(value) && + value.every((item) => validatePrimitive(item, type)) + ); +}; + +export const validateFileType = (mimetype: string): boolean => { + return allowableContentTypes.has(mimetype); +}; + +export const getApiValidationError = ( + fieldName: string, + type: Type, + isArray = false, +): string => { + return `The ${fieldName} is not a ${type}${isArray ? " Array" : ""}`; +}; + +export const getFileTypeValidationError = (mimetype: string): string => { + const allowableContentTypesString = [...allowableContentTypes].join(", "); + return `The file type ${mimetype} is not one of ${allowableContentTypesString}`; +}; diff --git a/backend/typescript/migrate.js b/backend/typescript/migrate.js new file mode 100644 index 0000000..02a1f8a --- /dev/null +++ b/backend/typescript/migrate.js @@ -0,0 +1,4 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +require("ts-node/register"); + +require("./umzug").migrator.runAsCLI(); diff --git a/backend/typescript/migrations/2022.01.10T17.43.07.create-entity-table.ts b/backend/typescript/migrations/2022.01.10T17.43.07.create-entity-table.ts new file mode 100644 index 0000000..7f4d37f --- /dev/null +++ b/backend/typescript/migrations/2022.01.10T17.43.07.create-entity-table.ts @@ -0,0 +1,46 @@ +import { DataType } from "sequelize-typescript"; + +import { Migration } from "../umzug"; + +const TABLE_NAME = "entities"; + +export const up: Migration = async ({ context: sequelize }) => { + await sequelize.getQueryInterface().createTable(TABLE_NAME, { + id: { + type: DataType.INTEGER, + allowNull: false, + primaryKey: true, + autoIncrement: true, + }, + string_field: { + type: DataType.STRING, + allowNull: false, + }, + int_field: { + type: DataType.INTEGER, + allowNull: false, + }, + enum_field: { + type: DataType.ENUM("A", "B", "C", "D"), + allowNull: false, + }, + string_array_field: { + type: DataType.ARRAY(DataType.STRING), + allowNull: false, + }, + bool_field: { + type: DataType.BOOLEAN, + allowNull: false, + }, + file_name: { + type: DataType.STRING, + allowNull: false, + }, + createdAt: DataType.DATE, + updatedAt: DataType.DATE, + }); +}; + +export const down: Migration = async ({ context: sequelize }) => { + await sequelize.getQueryInterface().dropTable(TABLE_NAME); +}; diff --git a/backend/typescript/migrations/2022.01.10T17.43.41.create-user-table.ts b/backend/typescript/migrations/2022.01.10T17.43.41.create-user-table.ts new file mode 100644 index 0000000..4e7e8d0 --- /dev/null +++ b/backend/typescript/migrations/2022.01.10T17.43.41.create-user-table.ts @@ -0,0 +1,38 @@ +import { DataType } from "sequelize-typescript"; + +import { Migration } from "../umzug"; + +const TABLE_NAME = "users"; + +export const up: Migration = async ({ context: sequelize }) => { + await sequelize.getQueryInterface().createTable(TABLE_NAME, { + id: { + type: DataType.INTEGER, + allowNull: false, + primaryKey: true, + autoIncrement: true, + }, + first_name: { + type: DataType.STRING, + allowNull: false, + }, + last_name: { + type: DataType.STRING, + allowNull: false, + }, + auth_id: { + type: DataType.STRING, + allowNull: false, + }, + role: { + type: DataType.ENUM("User", "Admin"), + allowNull: false, + }, + createdAt: DataType.DATE, + updatedAt: DataType.DATE, + }); +}; + +export const down: Migration = async ({ context: sequelize }) => { + await sequelize.getQueryInterface().dropTable(TABLE_NAME); +}; diff --git a/backend/typescript/models/entity.model.ts b/backend/typescript/models/entity.model.ts new file mode 100644 index 0000000..e8eca3d --- /dev/null +++ b/backend/typescript/models/entity.model.ts @@ -0,0 +1,25 @@ +import { Column, Model, Table, DataType } from "sequelize-typescript"; + +import { Letters } from "../types"; + +@Table({ tableName: "entities" }) +export default class Entity extends Model { + @Column + string_field!: string; + + @Column + int_field!: number; + + @Column({ type: DataType.ENUM("A", "B", "C", "D") }) + enum_field!: Letters; + + @Column({ type: DataType.ARRAY(DataType.STRING) }) + string_array_field!: string[]; + + @Column + bool_field!: boolean; + + @Column + file_name!: string; +} + diff --git a/backend/typescript/models/index.ts b/backend/typescript/models/index.ts new file mode 100644 index 0000000..0ca9ed2 --- /dev/null +++ b/backend/typescript/models/index.ts @@ -0,0 +1,13 @@ +import * as path from "path"; +import { Sequelize } from "sequelize-typescript"; + +const DATABASE_URL = + process.env.NODE_ENV === "production" + ? /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */ + process.env.DATABASE_URL! + : `postgres://${process.env.POSTGRES_USER}:${process.env.POSTGRES_PASSWORD}@${process.env.DB_HOST}:5432/${process.env.POSTGRES_DB_DEV}`; + +/* eslint-disable-next-line import/prefer-default-export */ +export const sequelize = new Sequelize(DATABASE_URL, { + models: [path.join(__dirname, "/*.model.ts")], +}); diff --git a/backend/typescript/models/simpleEntity.model.ts b/backend/typescript/models/simpleEntity.model.ts new file mode 100644 index 0000000..a0169aa --- /dev/null +++ b/backend/typescript/models/simpleEntity.model.ts @@ -0,0 +1,21 @@ +import { Column, Model, Table, DataType } from "sequelize-typescript"; + +import { Letters } from "../types"; + +@Table({ tableName: "simple_entities" }) +export default class SimpleEntity extends Model { + @Column + string_field!: string; + + @Column + int_field!: number; + + @Column({ type: DataType.ENUM("A", "B", "C", "D") }) + enum_field!: Letters; + + @Column({ type: DataType.ARRAY(DataType.STRING) }) + string_array_field!: string[]; + + @Column + bool_field!: boolean; +} diff --git a/backend/typescript/models/user.model.ts b/backend/typescript/models/user.model.ts new file mode 100644 index 0000000..0678c18 --- /dev/null +++ b/backend/typescript/models/user.model.ts @@ -0,0 +1,17 @@ +import { Column, DataType, Model, Table } from "sequelize-typescript"; +import { Role } from "../types"; + +@Table({ tableName: "users" }) +export default class User extends Model { + @Column({ type: DataType.STRING }) + first_name!: string; + + @Column({ type: DataType.STRING }) + last_name!: string; + + @Column({ type: DataType.STRING }) + auth_id!: string; + + @Column({ type: DataType.ENUM("User", "Admin") }) + role!: Role; +} diff --git a/backend/typescript/nodemailer.config.ts b/backend/typescript/nodemailer.config.ts new file mode 100644 index 0000000..35ddd37 --- /dev/null +++ b/backend/typescript/nodemailer.config.ts @@ -0,0 +1,14 @@ +import { NodemailerConfig } from "./types"; + +const config: NodemailerConfig = { + service: "gmail", + auth: { + type: "OAuth2", + user: process.env.MAILER_USER ?? "", + clientId: process.env.MAILER_CLIENT_ID ?? "", + clientSecret: process.env.MAILER_CLIENT_SECRET ?? "", + refreshToken: process.env.MAILER_REFRESH_TOKEN ?? "", + }, +}; + +export default config; diff --git a/backend/typescript/nodemon.json b/backend/typescript/nodemon.json new file mode 100644 index 0000000..e985682 --- /dev/null +++ b/backend/typescript/nodemon.json @@ -0,0 +1,4 @@ +{ + "ext": "ts,js,json", + "exec": "ts-node -r dotenv/config server" +} diff --git a/backend/typescript/package.json b/backend/typescript/package.json new file mode 100644 index 0000000..fbb1954 --- /dev/null +++ b/backend/typescript/package.json @@ -0,0 +1,85 @@ +{ + "name": "typescript-backend", + "version": "1.0.0", + "description": "", + "main": "server.ts", + "scripts": { + "test": "jest --runInBand --forceExit --detectOpenHandles", + "dev": "nodemon -L", + "lint": "eslint . --ext .ts,.js", + "fix": "eslint . --ext .ts,.js --fix", + "postinstall": "tsc" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "@types/graphql-upload": "^8.0.6", + "@types/json2csv": "^5.0.3", + "@types/multer": "^1.4.6", + "@types/swagger-ui-express": "^4.1.2", + "@types/uuid": "^8.3.1", + "@types/yamljs": "^0.2.31", + "apollo-server": "^2.22.2", + "apollo-server-express": "^2.22.2", + "cookie-parser": "^1.4.5", + "cors": "^2.8.5", + "dotenv": "^8.2.0", + "express": "^4.17.1", + "firebase-admin": "^9.5.0", + "graphql": "^15.5.0", + "graphql-middleware": "^6.0.6", + "graphql-upload": "^12.0.0", + "json2csv": "^5.0.6", + "lodash": "^4.17.21", + "mongoose": "^5.12.12", + "multer": "^1.4.2", + "node-fetch": "^2.6.1", + "nodemailer": "^6.5.0", + "pg": "^8.5.1", + "reflect-metadata": "^0.1.13", + "sequelize": "^6.5.0", + "sequelize-typescript": "^2.1.0", + "swagger-ui-express": "^4.1.6", + "ts-node": "^10.0.0", + "umzug": "^3.0.0-beta.16", + "uuid": "^8.3.2", + "winston": "^3.3.3", + "yamljs": "^0.3.0" + }, + "devDependencies": { + "@types/cookie-parser": "^1.4.2", + "@types/cors": "^2.8.10", + "@types/dotenv": "^8.2.0", + "@types/express": "^4.17.11", + "@types/jest": "^26.0.23", + "@types/lodash": "^4.14.168", + "@types/mongoose": "^5.10.3", + "@types/node": "^14.14.31", + "@types/node-fetch": "^2.5.8", + "@types/nodemailer": "^6.4.1", + "@types/pg": "^7.14.10", + "@types/umzug": "^2.3.0", + "@types/validator": "^13.1.3", + "@typescript-eslint/eslint-plugin": "^4.4.1", + "@typescript-eslint/parser": "^4.15.2", + "eslint": "^7.20.0", + "eslint-config-airbnb-typescript": "^12.3.1", + "eslint-config-prettier": "^8.0.0", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-prettier": "^3.3.1", + "jest": "^27.0.4", + "mongodb-memory-server": "^6.9.6", + "nodemon": "^2.0.7", + "prettier": "^2.2.1", + "ts-jest": "^27.0.3", + "typescript": "^4.1.5" + }, + "resolutions": { + "fs-capacitor": "^6.2.0", + "graphql-upload": "^11.0.0" + }, + "engines": { + "node": "14.15.5" + } +} diff --git a/backend/typescript/rest/authRoutes.ts b/backend/typescript/rest/authRoutes.ts new file mode 100644 index 0000000..ca25325 --- /dev/null +++ b/backend/typescript/rest/authRoutes.ts @@ -0,0 +1,117 @@ +import { CookieOptions, Router } from "express"; + +import { isAuthorizedByEmail, isAuthorizedByUserId } from "../middlewares/auth"; +import { + loginRequestValidator, + registerRequestValidator, +} from "../middlewares/validators/authValidators"; +import nodemailerConfig from "../nodemailer.config"; +import AuthService from "../services/implementations/authService"; +import EmailService from "../services/implementations/emailService"; +import UserService from "../services/implementations/userService"; +import IAuthService from "../services/interfaces/authService"; +import IEmailService from "../services/interfaces/emailService"; +import IUserService from "../services/interfaces/userService"; +import { getErrorMessage } from "../utilities/errorUtils"; + +const authRouter: Router = Router(); +const userService: IUserService = new UserService(); +const emailService: IEmailService = new EmailService(nodemailerConfig); +const authService: IAuthService = new AuthService(userService, emailService); + +const cookieOptions: CookieOptions = { + httpOnly: true, + sameSite: process.env.PREVIEW_DEPLOY ? "none" : "strict", + secure: process.env.NODE_ENV === "production", +}; + +/* Returns access token and user info in response body and sets refreshToken as an httpOnly cookie */ +authRouter.post("/login", loginRequestValidator, async (req, res) => { + try { + const authDTO = req.body.idToken + ? // OAuth + await authService.generateTokenOAuth(req.body.idToken) + : await authService.generateToken(req.body.email, req.body.password); + + const { refreshToken, ...rest } = authDTO; + + res + .cookie("refreshToken", refreshToken, cookieOptions) + .status(200) + .json(rest); + } catch (error: unknown) { + res.status(500).json({ error: getErrorMessage(error) }); + } +}); + +/* Register a user, returns access token and user info in response body and sets refreshToken as an httpOnly cookie */ +authRouter.post("/register", registerRequestValidator, async (req, res) => { + try { + await userService.createUser({ + firstName: req.body.firstName, + lastName: req.body.lastName, + email: req.body.email, + role: "User", + password: req.body.password, + }); + + const authDTO = await authService.generateToken( + req.body.email, + req.body.password, + ); + const { refreshToken, ...rest } = authDTO; + + await authService.sendEmailVerificationLink(req.body.email); + + res + .cookie("refreshToken", refreshToken, cookieOptions) + .status(200) + .json(rest); + } catch (error: unknown) { + res.status(500).json({ error: getErrorMessage(error) }); + } +}); + +/* Returns access token in response body and sets refreshToken as an httpOnly cookie */ +authRouter.post("/refresh", async (req, res) => { + try { + const token = await authService.renewToken(req.cookies.refreshToken); + + res + .cookie("refreshToken", token.refreshToken, cookieOptions) + .status(200) + .json({ accessToken: token.accessToken }); + } catch (error: unknown) { + res.status(500).json({ error: getErrorMessage(error) }); + } +}); + +/* Revokes all of the specified user's refresh tokens */ +authRouter.post( + "/logout/:userId", + isAuthorizedByUserId("userId"), + async (req, res) => { + try { + await authService.revokeTokens(req.params.userId); + res.status(204).send(); + } catch (error: unknown) { + res.status(500).json({ error: getErrorMessage(error) }); + } + }, +); + +/* Emails a password reset link to the user with the specified email */ +authRouter.post( + "/resetPassword/:email", + isAuthorizedByEmail("email"), + async (req, res) => { + try { + await authService.resetPassword(req.params.email); + res.status(204).send(); + } catch (error: unknown) { + res.status(500).json({ error: getErrorMessage(error) }); + } + }, +); + +export default authRouter; diff --git a/backend/typescript/rest/entityRoutes.ts b/backend/typescript/rest/entityRoutes.ts new file mode 100644 index 0000000..c36f444 --- /dev/null +++ b/backend/typescript/rest/entityRoutes.ts @@ -0,0 +1,137 @@ +import { Router } from "express"; +import fs from "fs"; +import multer from "multer"; +import { isAuthorizedByRole } from "../middlewares/auth"; +import { entityRequestDtoValidator } from "../middlewares/validators/entityValidators"; +import EntityService from "../services/implementations/entityService"; +import FileStorageService from "../services/implementations/fileStorageService"; +import IFileStorageService from "../services/interfaces/fileStorageService"; +import { + EntityResponseDTO, + IEntityService, +} from "../services/interfaces/IEntityService"; +import { getErrorMessage } from "../utilities/errorUtils"; +import { sendResponseByMimeType } from "../utilities/responseUtil"; + +const upload = multer({ dest: "uploads/" }); + +const entityRouter: Router = Router(); +entityRouter.use(isAuthorizedByRole(new Set(["User", "Admin"]))); + +const defaultBucket = process.env.FIREBASE_STORAGE_DEFAULT_BUCKET || ""; +const fileStorageService: IFileStorageService = new FileStorageService( + defaultBucket, +); +const entityService: IEntityService = new EntityService(fileStorageService); + +/* Create entity */ +entityRouter.post( + "/", + upload.single("file"), + entityRequestDtoValidator, + async (req, res) => { + try { + const body = JSON.parse(req.body.body); + const newEntity = await entityService.createEntity({ + stringField: body.stringField, + intField: body.intField, + enumField: body.enumField, + stringArrayField: body.stringArrayField, + boolField: body.boolField, + filePath: req.file?.path, + fileContentType: req.file?.mimetype, + }); + if (req.file?.path) { + fs.unlinkSync(req.file.path); + } + res.status(201).json(newEntity); + } catch (e: unknown) { + res.status(500).send(getErrorMessage(e)); + } + }, +); + +/* Get all entities */ +entityRouter.get("/", async (req, res) => { + const contentType = req.headers["content-type"]; + try { + const entities = await entityService.getEntities(); + await sendResponseByMimeType( + res, + 200, + contentType, + entities, + ); + } catch (e: unknown) { + await sendResponseByMimeType(res, 500, contentType, [ + { + error: getErrorMessage(e), + }, + ]); + } +}); + +/* Get entity by id */ +entityRouter.get("/:id", async (req, res) => { + const { id } = req.params; + + try { + const entity = await entityService.getEntity(id); + res.status(200).json(entity); + } catch (e: unknown) { + res.status(500).send(getErrorMessage(e)); + } +}); + +/* Update entity by id */ +entityRouter.put( + "/:id", + upload.single("file"), + entityRequestDtoValidator, + async (req, res) => { + const { id } = req.params; + try { + const body = JSON.parse(req.body.body); + const entity = await entityService.updateEntity(id, { + stringField: body.stringField, + intField: body.intField, + enumField: body.enumField, + stringArrayField: body.stringArrayField, + boolField: body.boolField, + filePath: req.file?.path, + fileContentType: req.file?.mimetype, + }); + if (req.file?.path) { + fs.unlinkSync(req.file.path); + } + res.status(200).json(entity); + } catch (e: unknown) { + res.status(500).send(getErrorMessage(e)); + } + }, +); + +/* Delete entity by id */ +entityRouter.delete("/:id", async (req, res) => { + const { id } = req.params; + + try { + const deletedId = await entityService.deleteEntity(id); + res.status(200).json({ id: deletedId }); + } catch (e: unknown) { + res.status(500).send(getErrorMessage(e)); + } +}); + +/* Get file associated with entity by fileUUID */ +entityRouter.get("/files/:fileUUID", async (req, res) => { + const { fileUUID } = req.params; + try { + const fileURL = await fileStorageService.getFile(fileUUID); + res.status(200).json({ fileURL }); + } catch (e: unknown) { + res.status(500).send(getErrorMessage(e)); + } +}); + +export default entityRouter; diff --git a/backend/typescript/rest/simpleEntityRoutes.ts b/backend/typescript/rest/simpleEntityRoutes.ts new file mode 100644 index 0000000..bf18598 --- /dev/null +++ b/backend/typescript/rest/simpleEntityRoutes.ts @@ -0,0 +1,104 @@ +import { Router } from "express"; +import { isAuthorizedByRole } from "../middlewares/auth"; +import { simpleEntityRequestDtoValidator } from "../middlewares/validators/simpleEntityValidators"; +import SimpleEntityService from "../services/implementations/simpleEntityService"; +import { + SimpleEntityResponseDTO, + ISimpleEntityService, +} from "../services/interfaces/simpleEntityService"; +import { getErrorMessage } from "../utilities/errorUtils"; +import { sendResponseByMimeType } from "../utilities/responseUtil"; + +const simpleEntityRouter: Router = Router(); +simpleEntityRouter.use(isAuthorizedByRole(new Set(["User", "Admin"]))); + +const simpleEntityService: ISimpleEntityService = new SimpleEntityService(); + +/* Create SimpleEntity */ +simpleEntityRouter.post( + "/", + simpleEntityRequestDtoValidator, + async (req, res) => { + try { + const { body } = req; + const newEntity = await simpleEntityService.createEntity({ + stringField: body.stringField, + intField: body.intField, + enumField: body.enumField, + stringArrayField: body.stringArrayField, + boolField: body.boolField, + }); + res.status(201).json(newEntity); + } catch (e: unknown) { + res.status(500).send(getErrorMessage(e)); + } + }, +); + +/* Get all SimpleEntities */ +simpleEntityRouter.get("/", async (req, res) => { + const contentType = req.headers["content-type"]; + try { + const entities = await simpleEntityService.getEntities(); + await sendResponseByMimeType( + res, + 200, + contentType, + entities, + ); + } catch (e: unknown) { + await sendResponseByMimeType(res, 500, contentType, [ + { + error: getErrorMessage(e), + }, + ]); + } +}); + +/* Get SimpleEntity by id */ +simpleEntityRouter.get("/:id", async (req, res) => { + const { id } = req.params; + + try { + const entity = await simpleEntityService.getEntity(id); + res.status(200).json(entity); + } catch (e: unknown) { + res.status(500).send(getErrorMessage(e)); + } +}); + +/* Update SimpleEntity by id */ +simpleEntityRouter.put( + "/:id", + simpleEntityRequestDtoValidator, + async (req, res) => { + const { id } = req.params; + try { + const { body } = req; + const entity = await simpleEntityService.updateEntity(id, { + stringField: body.stringField, + intField: body.intField, + enumField: body.enumField, + stringArrayField: body.stringArrayField, + boolField: body.boolField, + }); + res.status(200).json(entity); + } catch (e: unknown) { + res.status(500).send(getErrorMessage(e)); + } + }, +); + +/* Delete SimpleEntity by id */ +simpleEntityRouter.delete("/:id", async (req, res) => { + const { id } = req.params; + + try { + const deletedId = await simpleEntityService.deleteEntity(id); + res.status(200).json({ id: deletedId }); + } catch (e: unknown) { + res.status(500).send(getErrorMessage(e)); + } +}); + +export default simpleEntityRouter; diff --git a/backend/typescript/rest/userRoutes.ts b/backend/typescript/rest/userRoutes.ts new file mode 100644 index 0000000..c7ca41d --- /dev/null +++ b/backend/typescript/rest/userRoutes.ts @@ -0,0 +1,166 @@ +import { Router } from "express"; + +import { isAuthorizedByRole } from "../middlewares/auth"; +import { + createUserDtoValidator, + updateUserDtoValidator, +} from "../middlewares/validators/userValidators"; +import nodemailerConfig from "../nodemailer.config"; +import AuthService from "../services/implementations/authService"; +import EmailService from "../services/implementations/emailService"; +import UserService from "../services/implementations/userService"; +import IAuthService from "../services/interfaces/authService"; +import IEmailService from "../services/interfaces/emailService"; +import IUserService from "../services/interfaces/userService"; +import { UserDTO } from "../types"; +import { getErrorMessage } from "../utilities/errorUtils"; +import { sendResponseByMimeType } from "../utilities/responseUtil"; + +const userRouter: Router = Router(); +userRouter.use(isAuthorizedByRole(new Set(["Admin"]))); + +const userService: IUserService = new UserService(); +const emailService: IEmailService = new EmailService(nodemailerConfig); +const authService: IAuthService = new AuthService(userService, emailService); + +/* Get all users, optionally filter by a userId or email query parameter to retrieve a single user */ +userRouter.get("/", async (req, res) => { + const { userId, email } = req.query; + const contentType = req.headers["content-type"]; + + if (userId && email) { + await sendResponseByMimeType(res, 400, contentType, [ + { + error: "Cannot query by both userId and email.", + }, + ]); + return; + } + + if (!userId && !email) { + try { + const users = await userService.getUsers(); + await sendResponseByMimeType(res, 200, contentType, users); + } catch (error: unknown) { + await sendResponseByMimeType(res, 500, contentType, [ + { + error: getErrorMessage(error), + }, + ]); + } + return; + } + + if (userId) { + if (typeof userId !== "string") { + res + .status(400) + .json({ error: "userId query parameter must be a string." }); + } else { + try { + const user = await userService.getUserById(userId); + res.status(200).json(user); + } catch (error: unknown) { + res.status(500).json({ error: getErrorMessage(error) }); + } + } + return; + } + + if (email) { + if (typeof email !== "string") { + res + .status(400) + .json({ error: "email query parameter must be a string." }); + } else { + try { + const user = await userService.getUserByEmail(email); + res.status(200).json(user); + } catch (error: unknown) { + res.status(500).json({ error: getErrorMessage(error) }); + } + } + } +}); + +/* Create a user */ +userRouter.post("/", createUserDtoValidator, async (req, res) => { + try { + const newUser = await userService.createUser({ + firstName: req.body.firstName, + lastName: req.body.lastName, + email: req.body.email, + role: req.body.role, + password: req.body.password, + }); + + await authService.sendEmailVerificationLink(req.body.email); + + res.status(201).json(newUser); + } catch (error: unknown) { + res.status(500).json({ error: getErrorMessage(error) }); + } +}); + +/* Update the user with the specified userId */ +userRouter.put("/:userId", updateUserDtoValidator, async (req, res) => { + try { + const updatedUser = await userService.updateUserById(req.params.userId, { + firstName: req.body.firstName, + lastName: req.body.lastName, + email: req.body.email, + role: req.body.role, + }); + res.status(200).json(updatedUser); + } catch (error: unknown) { + res.status(500).json({ error: getErrorMessage(error) }); + } +}); + +/* Delete a user by userId or email, specified through a query parameter */ +userRouter.delete("/", async (req, res) => { + const { userId, email } = req.query; + + if (userId && email) { + res.status(400).json({ error: "Cannot delete by both userId and email." }); + return; + } + + if (userId) { + if (typeof userId !== "string") { + res + .status(400) + .json({ error: "userId query parameter must be a string." }); + } else { + try { + await userService.deleteUserById(userId); + res.status(204).send(); + } catch (error: unknown) { + res.status(500).json({ error: getErrorMessage(error) }); + } + } + return; + } + + if (email) { + if (typeof email !== "string") { + res + .status(400) + .json({ error: "email query parameter must be a string." }); + } else { + try { + await userService.deleteUserByEmail(email); + res.status(204).send(); + } catch (error: unknown) { + res.status(500).json({ error: getErrorMessage(error) }); + } + } + return; + } + + res + .status(400) + .json({ error: "Must supply one of userId or email as query parameter." }); +}); + +export default userRouter; diff --git a/backend/typescript/server.ts b/backend/typescript/server.ts new file mode 100644 index 0000000..4f4cb67 --- /dev/null +++ b/backend/typescript/server.ts @@ -0,0 +1,56 @@ +import cookieParser from "cookie-parser"; +import cors from "cors"; +import express from "express"; +import * as firebaseAdmin from "firebase-admin"; +import swaggerUi from "swagger-ui-express"; +import YAML from "yamljs"; + +import { sequelize } from "./models"; +import authRouter from "./rest/authRoutes"; +import entityRouter from "./rest/entityRoutes"; +import simpleEntityRouter from "./rest/simpleEntityRoutes"; +import userRouter from "./rest/userRoutes"; + +const CORS_ALLOW_LIST = [ + "http://localhost:3000", + "https://uw-blueprint-starter-code.firebaseapp.com", + "https://uw-blueprint-starter-code.web.app", + /^https:\/\/uw-blueprint-starter-code--pr.*\.web\.app$/, +]; + +const CORS_OPTIONS: cors.CorsOptions = { + origin: CORS_ALLOW_LIST, + credentials: true, +}; + +const swaggerDocument = YAML.load("swagger.yml"); + +const app = express(); +app.use(cookieParser()); +app.use(cors(CORS_OPTIONS)); +app.use(express.json()); +app.use(express.urlencoded({ extended: true })); + +app.use("/auth", authRouter); +app.use("/entities", entityRouter); +app.use("/simple-entities", simpleEntityRouter); +app.use("/users", userRouter); +app.use("/api-docs", swaggerUi.serve, swaggerUi.setup(swaggerDocument)); + +sequelize.authenticate(); + +firebaseAdmin.initializeApp({ + credential: firebaseAdmin.credential.cert({ + projectId: process.env.FIREBASE_PROJECT_ID, + privateKey: process.env.FIREBASE_SVC_ACCOUNT_PRIVATE_KEY?.replace( + /\\n/g, + "\n", + ), + clientEmail: process.env.FIREBASE_SVC_ACCOUNT_CLIENT_EMAIL, + }), +}); + +app.listen({ port: process.env.PORT || 5000 }, () => { + /* eslint-disable-next-line no-console */ + console.info(`Server is listening on port ${process.env.PORT || 5000}!`); +}); diff --git a/backend/typescript/services/implementations/__tests__/userService.test.ts b/backend/typescript/services/implementations/__tests__/userService.test.ts new file mode 100644 index 0000000..f096f89 --- /dev/null +++ b/backend/typescript/services/implementations/__tests__/userService.test.ts @@ -0,0 +1,65 @@ +import { snakeCase } from "lodash"; + +import UserModel from "../../../models/user.model"; +import UserService from "../userService"; + +import { UserDTO } from "../../../types"; + +import { testSql } from "../../../testUtils/testDb"; + +const testUsers = [ + { + firstName: "Peter", + lastName: "Pan", + authId: "123", + role: "Admin", + }, + { + firstName: "Wendy", + lastName: "Darling", + authId: "321", + role: "User", + }, +]; + +jest.mock("firebase-admin", () => { + const auth = jest.fn().mockReturnValue({ + getUser: jest.fn().mockReturnValue({ email: "test@test.com" }), + }); + return { auth }; +}); + + +describe("pg userService", () => { + let userService: UserService; + + beforeEach(async () => { + await testSql.sync({ force: true }); + userService = new UserService(); + }); + + afterAll(async () => { + await testSql.sync({ force: true }); + await testSql.close(); + }); + + it("getUsers", async () => { + const users = testUsers.map((user) => { + const userSnakeCase: Record = {}; + Object.entries(user).forEach(([key, value]) => { + userSnakeCase[snakeCase(key)] = value; + }); + return userSnakeCase; + }); + + await UserModel.bulkCreate(users); + + const res = await userService.getUsers(); + + res.forEach((user: UserDTO, i) => { + expect(user.firstName).toEqual(testUsers[i].firstName); + expect(user.lastName).toEqual(testUsers[i].lastName); + expect(user.role).toEqual(testUsers[i].role); + }); + }); +}); diff --git a/backend/typescript/services/implementations/authService.ts b/backend/typescript/services/implementations/authService.ts new file mode 100644 index 0000000..543a64c --- /dev/null +++ b/backend/typescript/services/implementations/authService.ts @@ -0,0 +1,234 @@ +import * as firebaseAdmin from "firebase-admin"; + +import IAuthService from "../interfaces/authService"; +import IEmailService from "../interfaces/emailService"; +import IUserService from "../interfaces/userService"; +import { AuthDTO, Role, Token } from "../../types"; +import { getErrorMessage } from "../../utilities/errorUtils"; +import FirebaseRestClient from "../../utilities/firebaseRestClient"; +import logger from "../../utilities/logger"; + +const Logger = logger(__filename); + +class AuthService implements IAuthService { + userService: IUserService; + + emailService: IEmailService | null; + + constructor( + userService: IUserService, + emailService: IEmailService | null = null, + ) { + this.userService = userService; + this.emailService = emailService; + } + + /* eslint-disable class-methods-use-this */ + async generateToken(email: string, password: string): Promise { + try { + const token = await FirebaseRestClient.signInWithPassword( + email, + password, + ); + const user = await this.userService.getUserByEmail(email); + return { ...token, ...user }; + } catch (error) { + Logger.error(`Failed to generate token for user with email ${email}`); + throw error; + } + } + + /* eslint-disable class-methods-use-this */ + async generateTokenOAuth(idToken: string): Promise { + try { + const googleUser = await FirebaseRestClient.signInWithGoogleOAuth( + idToken, + ); + // googleUser.idToken refers to the Firebase Auth access token for the user + const token = { + accessToken: googleUser.idToken, + refreshToken: googleUser.refreshToken, + }; + // If user already has a login with this email, just return the token + try { + // Note: an error message will be logged from UserService if this lookup fails. + // You may want to silence the logger for this special OAuth user lookup case + const user = await this.userService.getUserByEmail(googleUser.email); + return { ...token, ...user }; + /* eslint-disable-next-line no-empty */ + } catch (error) {} + + const user = await this.userService.createUser( + { + firstName: googleUser.firstName, + lastName: googleUser.lastName, + email: googleUser.email, + role: "User", + password: "", + }, + googleUser.localId, + "GOOGLE", + ); + + return { ...token, ...user }; + } catch (error) { + Logger.error(`Failed to generate token for user with OAuth ID token`); + throw error; + } + } + + async revokeTokens(userId: string): Promise { + try { + const authId = await this.userService.getAuthIdById(userId); + + await firebaseAdmin.auth().revokeRefreshTokens(authId); + } catch (error: unknown) { + const errorMessage = [ + "Failed to revoke refresh tokens of user with id", + `${userId}.`, + "Reason =", + getErrorMessage(error), + ]; + Logger.error(errorMessage.join(" ")); + + throw error; + } + } + + async renewToken(refreshToken: string): Promise { + try { + return await FirebaseRestClient.refreshToken(refreshToken); + } catch (error) { + Logger.error("Failed to refresh token"); + throw error; + } + } + + async resetPassword(email: string): Promise { + if (!this.emailService) { + const errorMessage = + "Attempted to call resetPassword but this instance of AuthService does not have an EmailService instance"; + Logger.error(errorMessage); + throw new Error(errorMessage); + } + + try { + const resetLink = await firebaseAdmin + .auth() + .generatePasswordResetLink(email); + const emailBody = ` + Hello, +

+ We have received a password reset request for your account. + Please click the following link to reset it. + This link is only valid for 1 hour. +

+ Reset Password`; + + this.emailService.sendEmail(email, "Your Password Reset Link", emailBody); + } catch (error) { + Logger.error( + `Failed to generate password reset link for user with email ${email}`, + ); + throw error; + } + } + + async sendEmailVerificationLink(email: string): Promise { + if (!this.emailService) { + const errorMessage = + "Attempted to call sendEmailVerificationLink but this instance of AuthService does not have an EmailService instance"; + Logger.error(errorMessage); + throw new Error(errorMessage); + } + + try { + const emailVerificationLink = await firebaseAdmin + .auth() + .generateEmailVerificationLink(email); + const emailBody = ` + Hello, +

+ Please click the following link to verify your email and activate your account. + This link is only valid for 1 hour. +

+ Verify email`; + + this.emailService.sendEmail(email, "Verify your email", emailBody); + } catch (error) { + Logger.error( + `Failed to generate email verification link for user with email ${email}`, + ); + throw error; + } + } + + async isAuthorizedByRole( + accessToken: string, + roles: Set, + ): Promise { + try { + const decodedIdToken: firebaseAdmin.auth.DecodedIdToken = await firebaseAdmin + .auth() + .verifyIdToken(accessToken, true); + const userRole = await this.userService.getUserRoleByAuthId( + decodedIdToken.uid, + ); + + const firebaseUser = await firebaseAdmin + .auth() + .getUser(decodedIdToken.uid); + + return firebaseUser.emailVerified && roles.has(userRole); + } catch (error) { + return false; + } + } + + async isAuthorizedByUserId( + accessToken: string, + requestedUserId: string, + ): Promise { + try { + const decodedIdToken: firebaseAdmin.auth.DecodedIdToken = await firebaseAdmin + .auth() + .verifyIdToken(accessToken, true); + const tokenUserId = await this.userService.getUserIdByAuthId( + decodedIdToken.uid, + ); + + const firebaseUser = await firebaseAdmin + .auth() + .getUser(decodedIdToken.uid); + + return ( + firebaseUser.emailVerified && String(tokenUserId) === requestedUserId + ); + } catch (error) { + return false; + } + } + + async isAuthorizedByEmail( + accessToken: string, + requestedEmail: string, + ): Promise { + try { + const decodedIdToken: firebaseAdmin.auth.DecodedIdToken = await firebaseAdmin + .auth() + .verifyIdToken(accessToken, true); + + const firebaseUser = await firebaseAdmin + .auth() + .getUser(decodedIdToken.uid); + + return ( + firebaseUser.emailVerified && decodedIdToken.email === requestedEmail + ); + } catch (error) { + return false; + } + } +} + +export default AuthService; diff --git a/backend/typescript/services/implementations/emailService.ts b/backend/typescript/services/implementations/emailService.ts new file mode 100644 index 0000000..d7eeaf4 --- /dev/null +++ b/backend/typescript/services/implementations/emailService.ts @@ -0,0 +1,44 @@ +import nodemailer, { Transporter } from "nodemailer"; +import IEmailService from "../interfaces/emailService"; +import { NodemailerConfig } from "../../types"; +import { getErrorMessage } from "../../utilities/errorUtils"; +import logger from "../../utilities/logger"; + +const Logger = logger(__filename); + +class EmailService implements IEmailService { + transporter: Transporter; + + sender: string; + + constructor(nodemailerConfig: NodemailerConfig, displayName?: string) { + this.transporter = nodemailer.createTransport(nodemailerConfig); + if (displayName) { + this.sender = `${displayName} <${nodemailerConfig.auth.user}>`; + } else { + this.sender = nodemailerConfig.auth.user; + } + } + + async sendEmail( + to: string, + subject: string, + htmlBody: string, + ): Promise { + const mailOptions = { + from: this.sender, + to, + subject, + html: htmlBody, + }; + + try { + return await this.transporter.sendMail(mailOptions); + } catch (error: unknown) { + Logger.error(`Failed to send email. Reason = ${getErrorMessage(error)}`); + throw error; + } + } +} + +export default EmailService; diff --git a/backend/typescript/services/implementations/entityService.ts b/backend/typescript/services/implementations/entityService.ts new file mode 100644 index 0000000..24f848c --- /dev/null +++ b/backend/typescript/services/implementations/entityService.ts @@ -0,0 +1,189 @@ +import { v4 as uuidv4 } from "uuid"; + +import PgEntity from "../../models/entity.model"; +import { + IEntityService, + EntityRequestDTO, + EntityResponseDTO, +} from "../interfaces/IEntityService"; +import IFileStorageService from "../interfaces/fileStorageService"; +import { getErrorMessage } from "../../utilities/errorUtils"; +import logger from "../../utilities/logger"; + +const Logger = logger(__filename); + +class EntityService implements IEntityService { + storageService: IFileStorageService; + + constructor(storageService: IFileStorageService) { + this.storageService = storageService; + } + + /* eslint-disable class-methods-use-this */ + async getEntity(id: string): Promise { + let entity: PgEntity | null; + try { + entity = await PgEntity.findByPk(id, { raw: true }); + if (!entity) { + throw new Error(`Entity id ${id} not found`); + } + } catch (error: unknown) { + Logger.error(`Failed to get entity. Reason = ${getErrorMessage(error)}`); + throw error; + } + + return { + id: String(entity.id), + stringField: entity.string_field, + intField: entity.int_field, + enumField: entity.enum_field, + stringArrayField: entity.string_array_field, + boolField: entity.bool_field, + fileName: entity.file_name, + }; + } + + async getEntities(): Promise { + try { + const entities: Array = await PgEntity.findAll({ raw: true }); + return entities.map((entity) => ({ + id: String(entity.id), + stringField: entity.string_field, + intField: entity.int_field, + enumField: entity.enum_field, + stringArrayField: entity.string_array_field, + boolField: entity.bool_field, + fileName: entity.file_name, + })); + } catch (error: unknown) { + Logger.error( + `Failed to get entities. Reason = ${getErrorMessage(error)}`, + ); + throw error; + } + } + + async createEntity(entity: EntityRequestDTO): Promise { + let newEntity: PgEntity | null; + const fileName = entity.filePath ? uuidv4() : ""; + try { + if (entity.filePath) { + await this.storageService.createFile( + fileName, + entity.filePath, + entity.fileContentType, + ); + } + newEntity = await PgEntity.create({ + string_field: entity.stringField, + int_field: entity.intField, + enum_field: entity.enumField, + string_array_field: entity.stringArrayField, + bool_field: entity.boolField, + file_name: fileName, + }); + } catch (error: unknown) { + Logger.error( + `Failed to create entity. Reason = ${getErrorMessage(error)}`, + ); + throw error; + } + return { + id: String(newEntity.id), + stringField: newEntity.string_field, + intField: newEntity.int_field, + enumField: newEntity.enum_field, + stringArrayField: newEntity.string_array_field, + boolField: newEntity.bool_field, + fileName, + }; + } + + async updateEntity( + id: string, + entity: EntityRequestDTO, + ): Promise { + let resultingEntity: PgEntity | null; + let updateResult: [number, PgEntity[]] | null; + let fileName = ""; + try { + const currentEntity = await PgEntity.findByPk(id, { + raw: true, + attributes: ["file_name"], + }); + const currentFileName = currentEntity?.file_name; + if (entity.filePath) { + fileName = currentFileName || uuidv4(); + if (currentFileName) { + await this.storageService.updateFile( + fileName, + entity.filePath, + entity.fileContentType, + ); + } else { + await this.storageService.createFile( + fileName, + entity.filePath, + entity.fileContentType, + ); + } + } else if (currentFileName) { + await this.storageService.deleteFile(currentFileName); + } + updateResult = await PgEntity.update( + { + string_field: entity.stringField, + int_field: entity.intField, + enum_field: entity.enumField, + string_array_field: entity.stringArrayField, + bool_field: entity.boolField, + file_name: fileName, + }, + { where: { id }, returning: true }, + ); + + if (!updateResult[0]) { + throw new Error(`Entity id ${id} not found`); + } + [, [resultingEntity]] = updateResult; + } catch (error: unknown) { + Logger.error( + `Failed to update entity. Reason = ${getErrorMessage(error)}`, + ); + throw error; + } + return { + id: String(resultingEntity.id), + stringField: resultingEntity.string_field, + intField: resultingEntity.int_field, + enumField: resultingEntity.enum_field, + stringArrayField: resultingEntity.string_array_field, + boolField: resultingEntity.bool_field, + fileName, + }; + } + + async deleteEntity(id: string): Promise { + try { + const entityToDelete = await PgEntity.findByPk(id, { raw: true }); + const deleteResult: number | null = await PgEntity.destroy({ + where: { id }, + }); + + if (!entityToDelete || !deleteResult) { + throw new Error(`Entity id ${id} not found`); + } + if (entityToDelete.file_name) { + await this.storageService.deleteFile(entityToDelete.file_name); + } + return id; + } catch (error: unknown) { + Logger.error( + `Failed to delete entity. Reason = ${getErrorMessage(error)}`, + ); + throw error; + } + } +} + +export default EntityService; diff --git a/backend/typescript/services/implementations/fileStorageService.ts b/backend/typescript/services/implementations/fileStorageService.ts new file mode 100644 index 0000000..296980e --- /dev/null +++ b/backend/typescript/services/implementations/fileStorageService.ts @@ -0,0 +1,97 @@ +import { storage } from "firebase-admin"; + +import IFileStorageService from "../interfaces/fileStorageService"; +import { getErrorMessage } from "../../utilities/errorUtils"; +import logger from "../../utilities/logger"; + +const Logger = logger(__filename); + +class FileStorageService implements IFileStorageService { + bucketName: string; + + constructor(bucketName: string) { + this.bucketName = bucketName; + } + + async getFile(fileName: string, expirationTimeMinutes = 60): Promise { + const bucket = storage().bucket(this.bucketName); + const expirationDate = new Date(); + expirationDate.setMinutes( + expirationDate.getMinutes() + expirationTimeMinutes, + ); + try { + const currentBlob = await bucket.file(fileName); + if (!(await currentBlob.exists())[0]) { + throw new Error(`File name ${fileName} does not exist`); + } + const res = await currentBlob.getSignedUrl({ + action: "read", + expires: expirationDate, + }); + return res[0]; + } catch (error: unknown) { + Logger.error( + `Failed to retrieve file. Reason = ${getErrorMessage(error)}`, + ); + throw error; + } + } + + async createFile( + fileName: string, + filePath: string, + contentType: string | null = null, + ): Promise { + try { + const bucket = storage().bucket(this.bucketName); + const currentBlob = await bucket.file(fileName); + if ((await currentBlob.exists())[0]) { + throw new Error(`File name ${fileName} already exists`); + } + await bucket.upload(filePath, { + destination: fileName, + metadata: { contentType }, + }); + } catch (error: unknown) { + Logger.error(`Failed to upload file. Reason = ${getErrorMessage(error)}`); + throw error; + } + } + + async updateFile( + fileName: string, + filePath: string, + contentType: string | null = null, + ): Promise { + try { + const bucket = storage().bucket(this.bucketName); + const currentBlob = await bucket.file(fileName); + if (!(await currentBlob.exists())[0]) { + throw new Error(`File name ${fileName} does not exist`); + } + await bucket.upload(filePath, { + destination: fileName, + metadata: { contentType }, + }); + } catch (error: unknown) { + Logger.error(`Failed to update file. Reason = ${getErrorMessage(error)}`); + throw error; + } + } + + async deleteFile(fileName: string): Promise { + try { + const bucket = storage().bucket(this.bucketName); + const currentBlob = await bucket.file(fileName); + if (!currentBlob) { + throw new Error(`File name ${fileName} does not exist`); + } + await currentBlob.delete(); + } catch (error: unknown) { + Logger.error(`Failed to delete file. Reason = ${getErrorMessage(error)}`); + throw error; + } + } +} + +export default FileStorageService; diff --git a/backend/typescript/services/implementations/simpleEntityService.ts b/backend/typescript/services/implementations/simpleEntityService.ts new file mode 100644 index 0000000..1b5ceb9 --- /dev/null +++ b/backend/typescript/services/implementations/simpleEntityService.ts @@ -0,0 +1,141 @@ +import PgSimpleEntity from "../../models/simpleEntity.model"; +import { + ISimpleEntityService, + SimpleEntityRequestDTO, + SimpleEntityResponseDTO, +} from "../interfaces/simpleEntityService"; +import { getErrorMessage } from "../../utilities/errorUtils"; +import logger from "../../utilities/logger"; + +const Logger = logger(__filename); + +class SimpleEntityService implements ISimpleEntityService { + /* eslint-disable class-methods-use-this */ + async getEntity(id: string): Promise { + let entity: PgSimpleEntity | null; + try { + entity = await PgSimpleEntity.findByPk(id, { raw: true }); + if (!entity) { + throw new Error(`Entity id ${id} not found`); + } + } catch (error: unknown) { + Logger.error(`Failed to get entity. Reason = ${getErrorMessage(error)}`); + throw error; + } + + return { + id: String(entity.id), + stringField: entity.string_field, + intField: entity.int_field, + enumField: entity.enum_field, + stringArrayField: entity.string_array_field, + boolField: entity.bool_field, + }; + } + + async getEntities(): Promise { + try { + const entities: Array = await PgSimpleEntity.findAll({ + raw: true, + }); + return entities.map((entity) => ({ + id: String(entity.id), + stringField: entity.string_field, + intField: entity.int_field, + enumField: entity.enum_field, + stringArrayField: entity.string_array_field, + boolField: entity.bool_field, + })); + } catch (error: unknown) { + Logger.error( + `Failed to get entities. Reason = ${getErrorMessage(error)}`, + ); + throw error; + } + } + + async createEntity( + entity: SimpleEntityRequestDTO, + ): Promise { + let newEntity: PgSimpleEntity | null; + try { + newEntity = await PgSimpleEntity.create({ + string_field: entity.stringField, + int_field: entity.intField, + enum_field: entity.enumField, + string_array_field: entity.stringArrayField, + bool_field: entity.boolField, + }); + } catch (error: unknown) { + Logger.error( + `Failed to create entity. Reason = ${getErrorMessage(error)}`, + ); + throw error; + } + return { + id: String(newEntity.id), + stringField: newEntity.string_field, + intField: newEntity.int_field, + enumField: newEntity.enum_field, + stringArrayField: newEntity.string_array_field, + boolField: newEntity.bool_field, + }; + } + + async updateEntity( + id: string, + entity: SimpleEntityRequestDTO, + ): Promise { + let resultingEntity: PgSimpleEntity | null; + let updateResult: [number, PgSimpleEntity[]] | null; + try { + updateResult = await PgSimpleEntity.update( + { + string_field: entity.stringField, + int_field: entity.intField, + enum_field: entity.enumField, + string_array_field: entity.stringArrayField, + bool_field: entity.boolField, + }, + { where: { id }, returning: true }, + ); + + if (!updateResult[0]) { + throw new Error(`Entity id ${id} not found`); + } + [, [resultingEntity]] = updateResult; + } catch (error: unknown) { + Logger.error( + `Failed to update entity. Reason = ${getErrorMessage(error)}`, + ); + throw error; + } + return { + id: String(resultingEntity.id), + stringField: resultingEntity.string_field, + intField: resultingEntity.int_field, + enumField: resultingEntity.enum_field, + stringArrayField: resultingEntity.string_array_field, + boolField: resultingEntity.bool_field, + }; + } + + async deleteEntity(id: string): Promise { + try { + const deleteResult: number | null = await PgSimpleEntity.destroy({ + where: { id }, + }); + if (!deleteResult) { + throw new Error(`Entity id ${id} not found`); + } + return id; + } catch (error: unknown) { + Logger.error( + `Failed to delete entity. Reason = ${getErrorMessage(error)}`, + ); + throw error; + } + } +} + +export default SimpleEntityService; diff --git a/backend/typescript/services/implementations/userService.ts b/backend/typescript/services/implementations/userService.ts new file mode 100644 index 0000000..79c8c11 --- /dev/null +++ b/backend/typescript/services/implementations/userService.ts @@ -0,0 +1,369 @@ +import * as firebaseAdmin from "firebase-admin"; +import IUserService from "../interfaces/userService"; +import { CreateUserDTO, Role, UpdateUserDTO, UserDTO } from "../../types"; +import { getErrorMessage } from "../../utilities/errorUtils"; +import logger from "../../utilities/logger"; +import User from "../../models/user.model"; + +const Logger = logger(__filename); + +class UserService implements IUserService { + /* eslint-disable class-methods-use-this */ + + async getUserById(userId: string): Promise { + let user: User | null; + let firebaseUser: firebaseAdmin.auth.UserRecord; + + try { + user = await User.findByPk(Number(userId)); + + if (!user) { + throw new Error(`userId ${userId} not found.`); + } + firebaseUser = await firebaseAdmin.auth().getUser(user.auth_id); + } catch (error: unknown) { + Logger.error(`Failed to get user. Reason = ${getErrorMessage(error)}`); + throw error; + } + + return { + id: String(user.id), + firstName: user.first_name, + lastName: user.last_name, + email: firebaseUser.email ?? "", + role: user.role, + }; + } + + async getUserByEmail(email: string): Promise { + let user: User | null; + let firebaseUser: firebaseAdmin.auth.UserRecord; + + try { + firebaseUser = await firebaseAdmin.auth().getUserByEmail(email); + user = await User.findOne({ + where: { auth_id: firebaseUser.uid }, + }); + + if (!user) { + throw new Error(`userId with authID ${firebaseUser.uid} not found.`); + } + } catch (error: unknown) { + Logger.error(`Failed to get user. Reason = ${getErrorMessage(error)}`); + throw error; + } + + return { + id: String(user.id), + firstName: user.first_name, + lastName: user.last_name, + email: firebaseUser.email ?? "", + role: user.role, + }; + } + + async getUserRoleByAuthId(authId: string): Promise { + try { + const user: User | null = await User.findOne({ + where: { auth_id: authId }, + }); + if (!user) { + throw new Error(`userId with authId ${authId} not found.`); + } + return user.role; + } catch (error: unknown) { + Logger.error( + `Failed to get user role. Reason = ${getErrorMessage(error)}`, + ); + throw error; + } + } + + async getUserIdByAuthId(authId: string): Promise { + try { + const user: User | null = await User.findOne({ + where: { auth_id: authId }, + }); + if (!user) { + throw new Error(`user with authId ${authId} not found.`); + } + return String(user.id); + } catch (error: unknown) { + Logger.error(`Failed to get user id. Reason = ${getErrorMessage(error)}`); + throw error; + } + } + + async getAuthIdById(userId: string): Promise { + try { + const user: User | null = await User.findByPk(Number(userId)); + if (!user) { + throw new Error(`userId ${userId} not found.`); + } + return user.auth_id; + } catch (error: unknown) { + Logger.error(`Failed to get authId. Reason = ${getErrorMessage(error)}`); + throw error; + } + } + + async getUsers(): Promise> { + let userDtos: Array = []; + try { + const users: Array = await User.findAll(); + + userDtos = await Promise.all( + users.map(async (user) => { + let firebaseUser: firebaseAdmin.auth.UserRecord; + + try { + firebaseUser = await firebaseAdmin.auth().getUser(user.auth_id); + } catch (error) { + Logger.error( + `user with authId ${user.auth_id} could not be fetched from Firebase`, + ); + throw error; + } + + return { + id: String(user.id), + firstName: user.first_name, + lastName: user.last_name, + email: firebaseUser.email ?? "", + role: user.role, + }; + }), + ); + } catch (error: unknown) { + Logger.error(`Failed to get users. Reason = ${getErrorMessage(error)}`); + throw error; + } + + return userDtos; + } + + async createUser( + user: CreateUserDTO, + authId?: string, + signUpMethod = "PASSWORD", + ): Promise { + let newUser: User; + let firebaseUser: firebaseAdmin.auth.UserRecord; + + try { + if (signUpMethod === "GOOGLE") { + /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */ + firebaseUser = await firebaseAdmin.auth().getUser(authId!); + } else { + // signUpMethod === PASSWORD + firebaseUser = await firebaseAdmin.auth().createUser({ + email: user.email, + password: user.password, + }); + } + + try { + newUser = await User.create({ + first_name: user.firstName, + last_name: user.lastName, + auth_id: firebaseUser.uid, + role: user.role, + }); + } catch (postgresError) { + try { + await firebaseAdmin.auth().deleteUser(firebaseUser.uid); + } catch (firebaseError: unknown) { + const errorMessage = [ + "Failed to rollback Firebase user creation after Postgres user creation failure. Reason =", + getErrorMessage(firebaseError), + "Orphaned authId (Firebase uid) =", + firebaseUser.uid, + ]; + Logger.error(errorMessage.join(" ")); + } + + throw postgresError; + } + } catch (error: unknown) { + Logger.error(`Failed to create user. Reason = ${getErrorMessage(error)}`); + throw error; + } + + return { + id: String(newUser.id), + firstName: newUser.first_name, + lastName: newUser.last_name, + email: firebaseUser.email ?? "", + role: newUser.role, + }; + } + + async updateUserById(userId: string, user: UpdateUserDTO): Promise { + let updatedFirebaseUser: firebaseAdmin.auth.UserRecord; + + try { + const updateResult = await User.update( + { + first_name: user.firstName, + last_name: user.lastName, + role: user.role, + }, + { + where: { id: userId }, + returning: true, + }, + ); + + // check number of rows affected + if (updateResult[0] < 1) { + throw new Error(`userId ${userId} not found.`); + } + + // the cast to "any" is needed due to a missing property in the Sequelize type definitions + // https://github.com/sequelize/sequelize/issues/9978#issuecomment-426342219 + /* eslint-disable-next-line no-underscore-dangle, @typescript-eslint/no-explicit-any */ + const oldUser: User = (updateResult[1][0] as any)._previousDataValues; + + try { + updatedFirebaseUser = await firebaseAdmin + .auth() + .updateUser(oldUser.auth_id, { email: user.email }); + } catch (error) { + // rollback Postgres user updates + try { + await User.update( + { + first_name: oldUser.first_name, + last_name: oldUser.last_name, + role: oldUser.role, + }, + { + where: { id: userId }, + }, + ); + } catch (postgresError: unknown) { + const errorMessage = [ + "Failed to rollback Postgres user update after Firebase user update failure. Reason =", + getErrorMessage(postgresError), + "Postgres user id with possibly inconsistent data =", + oldUser.id, + ]; + Logger.error(errorMessage.join(" ")); + } + + throw error; + } + } catch (error: unknown) { + Logger.error(`Failed to update user. Reason = ${getErrorMessage(error)}`); + throw error; + } + + return { + id: userId, + firstName: user.firstName, + lastName: user.lastName, + email: updatedFirebaseUser.email ?? "", + role: user.role, + }; + } + + async deleteUserById(userId: string): Promise { + try { + // Sequelize doesn't provide a way to atomically find, delete, and return deleted row + const deletedUser: User | null = await User.findByPk(Number(userId)); + + if (!deletedUser) { + throw new Error(`userid ${userId} not found.`); + } + + const numDestroyed: number = await User.destroy({ + where: { id: userId }, + }); + + if (numDestroyed <= 0) { + throw new Error(`userid ${userId} was not deleted in Postgres.`); + } + + try { + await firebaseAdmin.auth().deleteUser(deletedUser.auth_id); + } catch (error) { + // rollback user deletion in Postgres + try { + await User.create({ + first_name: deletedUser.first_name, + last_name: deletedUser.last_name, + auth_id: deletedUser.auth_id, + role: deletedUser.role, + }); + } catch (postgresError: unknown) { + const errorMessage = [ + "Failed to rollback Postgres user deletion after Firebase user deletion failure. Reason =", + getErrorMessage(postgresError), + "Firebase uid with non-existent Postgres record =", + deletedUser.auth_id, + ]; + Logger.error(errorMessage.join(" ")); + } + + throw error; + } + } catch (error: unknown) { + Logger.error(`Failed to delete user. Reason = ${getErrorMessage(error)}`); + throw error; + } + } + + async deleteUserByEmail(email: string): Promise { + try { + const firebaseUser: firebaseAdmin.auth.UserRecord = await firebaseAdmin + .auth() + .getUserByEmail(email); + const deletedUser: User | null = await User.findOne({ + where: { auth_id: firebaseUser.uid }, + }); + + if (!deletedUser) { + throw new Error(`userid ${firebaseUser.uid} not found.`); + } + + const numDestroyed: number = await User.destroy({ + where: { auth_id: firebaseUser.uid }, + }); + + if (numDestroyed <= 0) { + throw new Error( + `userid ${firebaseUser.uid} was not deleted in Postgres.`, + ); + } + + try { + await firebaseAdmin.auth().deleteUser(deletedUser.auth_id); + } catch (error) { + // rollback user deletion in Postgres + try { + await User.create({ + first_name: deletedUser.first_name, + last_name: deletedUser.last_name, + auth_id: deletedUser.auth_id, + role: deletedUser.role, + }); + } catch (postgresError: unknown) { + const errorMessage = [ + "Failed to rollback Postgres user deletion after Firebase user deletion failure. Reason =", + getErrorMessage(postgresError), + "Firebase uid with non-existent Postgres record =", + deletedUser.auth_id, + ]; + Logger.error(errorMessage.join(" ")); + } + + throw error; + } + } catch (error: unknown) { + Logger.error(`Failed to delete user. Reason = ${getErrorMessage(error)}`); + throw error; + } + } +} + +export default UserService; diff --git a/backend/typescript/services/interfaces/IEntityService.ts b/backend/typescript/services/interfaces/IEntityService.ts new file mode 100644 index 0000000..8057313 --- /dev/null +++ b/backend/typescript/services/interfaces/IEntityService.ts @@ -0,0 +1,65 @@ +export interface EntityRequestDTO { + stringField: string; + intField: number; + enumField: string; + stringArrayField: string[]; + boolField: boolean; + filePath?: string; + fileContentType?: string; +} + +export interface EntityResponseDTO { + id: string; + stringField: string; + intField: number; + enumField: string; + stringArrayField: string[]; + boolField: boolean; + fileName: string; +} + +export interface IEntityService { + /** + * retrieve the Entity with the given id + * @param id entity id + * @returns requested Entity + * @throws Error if retrieval fails + */ + getEntity(id: string): Promise; + + /** + * retrieve all Entities + * @param + * @returns returns array of Entities + * @throws Error if retrieval fails + */ + getEntities(): Promise; + + /** + * create an Entity with the fields given in the DTO, return created Entity + * @param entity new Entity + * @returns the created Entity + * @throws Error if creation fails + */ + createEntity(entity: EntityRequestDTO): Promise; + + /** + * update the Entity with the given id with fields in the DTO, return updated Entity + * @param id entity id + * @param entity Updated Entity + * @returns the updated Entity + * @throws Error if update fails + */ + updateEntity( + id: string, + entity: EntityRequestDTO, + ): Promise; + + /** + * delete the entity with the given id + * @param id entity id + * @returns id of the entity deleted + * @throws Error if deletion fails + */ + deleteEntity(id: string): Promise; +} diff --git a/backend/typescript/services/interfaces/authService.ts b/backend/typescript/services/interfaces/authService.ts new file mode 100644 index 0000000..85d4f36 --- /dev/null +++ b/backend/typescript/services/interfaces/authService.ts @@ -0,0 +1,87 @@ +import { AuthDTO, Role, Token } from "../../types"; + +interface IAuthService { + /** + * Generate a short-lived JWT access token and a long-lived refresh token + * when supplied user's email and password + * @param email user's email + * @param password user's password + * @returns AuthDTO object containing the access token, refresh token, and user info + * @throws Error if token generation fails + */ + generateToken(email: string, password: string): Promise; + + /** + * Generate a short-lived JWT access token and a long-lived refresh token + * when supplied OAuth ID token + * @param idToken user's ID token + * @returns AuthDTO object containing the access token, refresh token, and user info + * @throws Error if token generation fails + */ + generateTokenOAuth(idToken: string): Promise; + + /** + * Revoke all refresh tokens of a user + * @param userId userId of user whose refresh tokens are to be revoked + * @throws Error if token revocation fails + */ + revokeTokens(userId: string): Promise; + + /** + * Generate new access and refresh token pair using the provided refresh token + * @param refreshToken refresh token + * @returns Token object containing new access and refresh tokens + * @throws Error if token renewal fails + */ + renewToken(refreshToken: string): Promise; + + /** + * Generate a password reset link for the user with the given email and send + * the link to that email address + * @param email email of user requesting password reset + * @throws Error if unable to generate link or send email + */ + resetPassword(email: string): Promise; + + /** + * Generate an email verification link for the user with the given email and send + * the link to that email address + * @param email email of user that needs to be verified + * @throws Error if unable to generate link or send email + */ + sendEmailVerificationLink(email: string): Promise; + + /** + * Determine if the provided access token is valid and authorized for at least + * one of the specified roles + * @param accessToken user's access token + * @param roles roles to check for + * @returns true if token valid and authorized, false otherwise + */ + isAuthorizedByRole(accessToken: string, roles: Set): Promise; + + /** + * Determine if the provided access token is valid and issued to the requested user + * @param accessToken user's access token + * @param requestedUserId userId of requested user + * @returns true if token valid and authorized, false otherwise + */ + isAuthorizedByUserId( + accessToken: string, + requestedUserId: string, + ): Promise; + + /** + * Determine if the provided access token is valid and issued to the requested user + * with the specified email address + * @param accessToken user's access token + * @param requestedEmail email address of requested user + * @returns true if token valid and authorized, false otherwise + */ + isAuthorizedByEmail( + accessToken: string, + requestedEmail: string, + ): Promise; +} + +export default IAuthService; diff --git a/backend/typescript/services/interfaces/emailService.ts b/backend/typescript/services/interfaces/emailService.ts new file mode 100644 index 0000000..c56dca4 --- /dev/null +++ b/backend/typescript/services/interfaces/emailService.ts @@ -0,0 +1,12 @@ +interface IEmailService { + /** + * Send email + * @param to recipient's email + * @param subject email subject + * @param htmlBody email body as html + * @throws Error if email was not sent successfully + */ + sendEmail(to: string, subject: string, htmlBody: string): Promise; +} + +export default IEmailService; diff --git a/backend/typescript/services/interfaces/fileStorageService.ts b/backend/typescript/services/interfaces/fileStorageService.ts new file mode 100644 index 0000000..f9d56bc --- /dev/null +++ b/backend/typescript/services/interfaces/fileStorageService.ts @@ -0,0 +1,48 @@ +interface IFileStorageService { + /** + * Retrieves file + * @param fileName name of file + * @param expirationTimeMinutes expiration time in minutes for generated URL + * @returns Signed URL to file + * @throws Error if file is not retrieved + */ + getFile(fileName: string, expirationTimeMinutes?: number): Promise; + + /** + * Creates file + * @param fileName name of file + * @param filePath path of file + * @param contentType MIME type of file + * @throws Error if name of file already exists + * @throws Error if file is not uploaded + */ + createFile( + fileName: string, + filePath: string, + contentType?: string | null, + ): Promise; + + /** + * Updates file + * @param fileName name of file + * @param filePath path to file + * @param contentType MIME type of file + * @throws Error if name of file does not exist + * @throws Error if file is not updated + */ + updateFile( + fileName: string, + filePath: string, + contentType?: string | null, + ): Promise; + + /** + * Deletes file + * @param fileName name of file + * @throws Error if name of file does not exist + * @throws Error if file is not deleted + */ + deleteFile(fileName: string): Promise; +} + +export default IFileStorageService; diff --git a/backend/typescript/services/interfaces/simpleEntityService.ts b/backend/typescript/services/interfaces/simpleEntityService.ts new file mode 100644 index 0000000..41b33b3 --- /dev/null +++ b/backend/typescript/services/interfaces/simpleEntityService.ts @@ -0,0 +1,64 @@ +export interface SimpleEntityRequestDTO { + stringField: string; + intField: number; + enumField: string; + stringArrayField: string[]; + boolField: boolean; +} + +export interface SimpleEntityResponseDTO { + id: string; + stringField: string; + intField: number; + enumField: string; + stringArrayField: string[]; + boolField: boolean; +} + +export interface ISimpleEntityService { + /** + * retrieve the SimpleEntity with the given id + * @param id SimpleEntity id + * @returns requested SimpleEntity + * @throws Error if retrieval fails + */ + getEntity(id: string): Promise; + + /** + * retrieve all SimpleEntities + * @param + * @returns returns array of SimpleEntities + * @throws Error if retrieval fails + */ + getEntities(): Promise; + + /** + * create a SimpleEntity with the fields given in the DTO, return created SimpleEntity + * @param entity new SimpleEntity + * @returns the created SimpleEntity + * @throws Error if creation fails + */ + createEntity( + entity: SimpleEntityRequestDTO, + ): Promise; + + /** + * update the SimpleEntity with the given id with fields in the DTO, return updated SimpleEntity + * @param id SimpleEntity id + * @param entity Updated SimpleEntity + * @returns the updated SimpleEntity + * @throws Error if update fails + */ + updateEntity( + id: string, + entity: SimpleEntityRequestDTO, + ): Promise; + + /** + * delete the SimpleEntity with the given id + * @param id SimpleEntity id + * @returns id of the SimpleEntity deleted + * @throws Error if deletion fails + */ + deleteEntity(id: string): Promise; +} diff --git a/backend/typescript/services/interfaces/userService.ts b/backend/typescript/services/interfaces/userService.ts new file mode 100644 index 0000000..7b00d01 --- /dev/null +++ b/backend/typescript/services/interfaces/userService.ts @@ -0,0 +1,96 @@ +import { + CreateUserDTO, + Role, + SignUpMethod, + UpdateUserDTO, + UserDTO, +} from "../../types"; + +interface IUserService { + /** + * Get user associated with id + * @param id user's id + * @returns a UserDTO with user's information + * @throws Error if user retrieval fails + */ + getUserById(userId: string): Promise; + + /** + * Get user associated with email + * @param email user's email + * @returns a UserDTO with user's information + * @throws Error if user retrieval fails + */ + getUserByEmail(email: string): Promise; + + /** + * Get role of user associated with authId + * @param authId user's authId + * @returns role of the user + * @throws Error if user role retrieval fails + */ + getUserRoleByAuthId(authId: string): Promise; + + /** + * Get id of user associated with authId + * @param authId user's authId + * @returns id of the user + * @throws Error if user id retrieval fails + */ + getUserIdByAuthId(authId: string): Promise; + + /** + * Get authId of user associated with id + * @param userId user's id + * @returns user's authId + * @throws Error if user authId retrieval fails + */ + getAuthIdById(userId: string): Promise; + + /** + * Get all user information (possibly paginated in the future) + * @returns array of UserDTOs + * @throws Error if user retrieval fails + */ + getUsers(): Promise>; + + /** + * Create a user, email verification configurable + * @param user the user to be created + * @param authId the user's firebase auth id, optional + * @param signUpMethod the method user used to signup + * @returns a UserDTO with the created user's information + * @throws Error if user creation fails + */ + createUser( + user: CreateUserDTO, + authId?: string, + signUpMethod?: SignUpMethod, + ): Promise; + + /** + * Update a user. + * Note: the password cannot be updated using this method, use IAuthService.resetPassword instead + * @param userId user's id + * @param user the user to be updated + * @returns a UserDTO with the updated user's information + * @throws Error if user update fails + */ + updateUserById(userId: string, user: UpdateUserDTO): Promise; + + /** + * Delete a user by id + * @param userId user's userId + * @throws Error if user deletion fails + */ + deleteUserById(userId: string): Promise; + + /** + * Delete a user by email + * @param email user's email + * @throws Error if user deletion fails + */ + deleteUserByEmail(email: string): Promise; +} + +export default IUserService; diff --git a/backend/typescript/swagger.yml b/backend/typescript/swagger.yml new file mode 100644 index 0000000..45081ae --- /dev/null +++ b/backend/typescript/swagger.yml @@ -0,0 +1,809 @@ +openapi: 3.0.0 +info: + version: 1.0.0 + title: UW Blueprint Starter Code TypeScript API + description: An API for the TypeScript Backend of Starter Code + + +# Authentication +components: + securitySchemes: + bearerAuth: # arbitrary name for the security scheme + type: http + scheme: bearer + bearerFormat: JWT # optional, arbitrary value for documentation purposes + schemas: + PasswordLogin: + type: object + required: + - email, password + properties: + email: + type: string + password: + type: string + OAuthLogin: + type: object + required: + - idToken + properties: + idToken: + type: string + + +paths: + /entities: + get: + security: + - bearerAuth: [] + tags: + - Entity + description: Returns a list of entities + responses: + '200': + description: Successfully returned a list of entities + content: + application/json: + schema: + type: array + items: + type: object + required: + - intField, stringField, boolField, enumField, stringArrayField + properties: + intField: + type: integer + stringField: + type: string + stringArrayField: + type: array + items: + type: string + enumField: + type: string + enum: ["A", "B", "C", "D"] + boolField: + type: boolean + fileName: + type: string + '401': + description: Unauthorized + '500': + description: Invalid request + + + post: + security: + - bearerAuth: [] + tags: + - Entity + description: Create a new entity + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + body: + type: string + file: + type: string + format: binary + responses: + '201': + description: Successfully created a new entity + content: + application/json: + schema: + type: object + required: + - intField, stringField, boolField, enumField, stringArrayField + properties: + intField: + type: integer + stringField: + type: string + stringArrayField: + type: array + items: + type: string + enumField: + type: string + enum: ["A", "B", "C", "D"] + boolField: + type: boolean + fileName: + type: string + '401': + description: Unauthorized + '500': + description: Invalid request + + + /entities/{id}: + get: + security: + - bearerAuth: [] + parameters: + - in: path + name: id + required: true + schema: + # type: integer (postgres) + # minimum: 1 + type: string + description: The entity ID + tags: + - Entity + description: Returns an entity based on its ID + responses: + '200': + description: Successfully returns entity based on ID + content: + application/json: + schema: + type: object + required: + - intField, stringField, boolField, enumField, stringArrayField + properties: + intField: + type: integer + stringField: + type: string + stringArrayField: + type: array + items: + type: string + enumField: + type: string + enum: ["A", "B", "C", "D"] + boolField: + type: boolean + fileName: + type: string + '401': + description: Unauthorized + '500': + description: Invalid ID + + + put: + security: + - bearerAuth: [] + parameters: + - in: path + name: id + required: true + schema: + # type: integer (postgres) + # minimum: 1 + type: string + description: The entity ID + tags: + - Entity + description: Edit an entity based on its ID + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + body: + type: string + file: + type: string + format: binary + responses: + '200': + description: Successfully edited entity based on ID + '401': + description: Unauthorized + '500': + description: Invalid request + + + delete: + security: + - bearerAuth: [] + parameters: + - in: path + name: id + required: true + schema: + # type: integer (postgres) + # minimum: 1 + type: string + description: The entity ID + tags: + - Entity + description: Delete an entity based on its ID + responses: + '200': + description: Successfully deleted entity based on ID + '401': + description: Unauthorized + '500': + description: Invalid ID + + /entities/files/{fileName}: + get: + security: + - bearerAuth: [] + parameters: + - in: path + name: fileName + required: true + schema: + type: string + description: The name of the file (UUID) associated with an entity + tags: + - Entity + description: Returns a signed URL to the file associated with an entity + responses: + '200': + description: Successfully returns the signed URL of the file + content: + application/json: + schema: + type: object + required: + - fileURL + properties: + fileURL: + type: string + '401': + description: Unauthorized + '500': + description: Invalid fileName + + /simple-entities: + get: + security: + - bearerAuth: [] + tags: + - SimpleEntity + description: Returns a list of simple entities + responses: + '200': + description: Successfully returned a list of simple entities + content: + application/json: + schema: + type: array + items: + type: object + required: + - intField, stringField, boolField, enumField, stringArrayField + properties: + intField: + type: integer + stringField: + type: string + stringArrayField: + type: array + items: + type: string + enumField: + type: string + enum: ["A", "B", "C", "D"] + boolField: + type: boolean + '401': + description: Unauthorized + '500': + description: Invalid request + + + post: + security: + - bearerAuth: [] + tags: + - SimpleEntity + description: Create a new simple entity + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - intField, stringField, boolField, enumField, stringArrayField + properties: + intField: + type: integer + stringField: + type: string + stringArrayField: + type: array + items: + type: string + enumField: + type: string + enum: ["A", "B", "C", "D"] + boolField: + type: boolean + responses: + '201': + description: Successfully created a new simple entity + content: + application/json: + schema: + type: object + required: + - intField, stringField, boolField, enumField, stringArrayField + properties: + intField: + type: integer + stringField: + type: string + stringArrayField: + type: array + items: + type: string + enumField: + type: string + enum: ["A", "B", "C", "D"] + boolField: + type: boolean + '401': + description: Unauthorized + '500': + description: Invalid request + + + /simple-entities/{id}: + get: + security: + - bearerAuth: [] + parameters: + - in: path + name: id + required: true + schema: + # type: integer (postgres) + # minimum: 1 + type: string + description: The simple entity ID + tags: + - SimpleEntity + description: Returns a simple entity based on its ID + responses: + '200': + description: Successfully returns simple entity based on ID + content: + application/json: + schema: + type: object + required: + - intField, stringField, boolField, enumField, stringArrayField + properties: + intField: + type: integer + stringField: + type: string + stringArrayField: + type: array + items: + type: string + enumField: + type: string + enum: ["A", "B", "C", "D"] + boolField: + type: boolean + '401': + description: Unauthorized + '500': + description: Invalid ID + + + put: + security: + - bearerAuth: [] + parameters: + - in: path + name: id + required: true + schema: + # type: integer (postgres) + # minimum: 1 + type: string + description: The simple entity ID + tags: + - SimpleEntity + description: Edit a simple entity based on its ID + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - intField, stringField, boolField, enumField, stringArrayField + properties: + intField: + type: integer + stringField: + type: string + stringArrayField: + type: array + items: + type: string + enumField: + type: string + enum: ["A", "B", "C", "D"] + boolField: + type: boolean + responses: + '200': + description: Successfully edited simple entity based on ID + '401': + description: Unauthorized + '500': + description: Invalid request + + + delete: + security: + - bearerAuth: [] + parameters: + - in: path + name: id + required: true + schema: + # type: integer (postgres) + # minimum: 1 + type: string + description: The simple entity ID + tags: + - SimpleEntity + description: Delete a simple entity based on its ID + responses: + '200': + description: Successfully deleted simple entity based on ID + '401': + description: Unauthorized + '500': + description: Invalid ID + + /auth/login: + post: + tags: + - Auth + description: Login user. Supply either both email and password, or an Google OAuth idToken. + requestBody: + required: true + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/PasswordLogin' + - $ref: '#/components/schemas/OAuthLogin' + responses: + '200': + description: Returns access token in response body and sets refreshToken as an httpOnly cookie + content: + application/json: + schema: + type: object + properties: + accessToken: + type: string + id: + type: string + firstName: + type: string + lastName: + type: string + email: + type: string + role: + type: string + '500': + description: Invalid request + + /auth/register: + post: + tags: + - Auth + description: Register a new user + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - email, password, firstName, lastName + properties: + email: + type: string + password: + type: string + firstName: + type: string + lastName: + type: string + responses: + '200': + description: Returns access token in response body and sets refreshToken as an httpOnly cookie + content: + application/json: + schema: + type: object + properties: + accessToken: + type: string + id: + type: string + firstName: + type: string + lastName: + type: string + email: + type: string + role: + type: string + '500': + description: Invalid request + + + /auth/refresh: + post: + security: + - bearerAuth: [] + tags: + - Auth + description: Refresh auth credentials + responses: + '200': + description: Returns access token in response body and sets refreshToken as an httpOnly cookie + content: + application/json: + schema: + type: object + properties: + accessToken: + type: string + '401': + description: Unauthorized + '500': + description: Invalid request + + + /auth/logout/{userid}: + post: + security: + - bearerAuth: [] + parameters: + - in: path + name: userid + required: true + schema: + # type: integer (postgres) + # minimum: 1 + type: string + description: The user ID + tags: + - Auth + description: Logout as user + responses: + '204': + description: Revokes all of the specified user's refresh tokens + '401': + description: Unauthorized + '500': + description: Invalid request + + + /auth/resetPassword/{email}: + post: + security: + - bearerAuth: [] + parameters: + - in: path + name: email + required: true + schema: + type: string + tags: + - Auth + description: Triggers password reset for user with specified email (reset link will be emailed) + responses: + '204': + description: Successfully sent password reset email + '401': + description: Unauthorized + '500': + description: Invalid request + + + /users: + get: + security: + - bearerAuth: [] + parameters: + - in: query + name: userId + schema: + # type: integer (postgres) + # minimum: 1 + type: string + description: The user ID + - in: query + name: email + schema: + type: string + description: The user's email + tags: + - User + description: Get all users, optionally filter by a userId or email query parameter to retrieve a single user + responses: + '200': + description: Successfully returned a list of users, or a user filtered by id or email + content: + application/json: + schema: + type: array + items: + type: object + required: + - id, firstName, lastName, email, role + properties: + id: + type: string + firstName: + type: string + lastName: + type: string + email: + type: string + role: + type: string + '400': + description: Cannot query by both user and email + '401': + description: Unauthorized + '500': + description: Invalid request + + + post: + security: + - bearerAuth: [] + tags: + - User + description: Create new user + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - firstName, lastName, role, email + properties: + firstName: + type: string + lastName: + type: string + role: + type: string + enum: ["User", "Admin"] + email: + type: string + responses: + '201': + description: Successfully created a new user + content: + application/json: + schema: + type: object + required: + - id, firstName, lastName, email, role + properties: + id: + type: string + firstName: + type: string + lastName: + type: string + email: + type: string + role: + type: string + '401': + description: Unauthorized + '500': + description: Invalid request + + + delete: + security: + - bearerAuth: [] + parameters: + - in: query + name: userId + schema: + # type: integer (postgres) + # minimum: 1 + type: string + description: The user ID + - in: query + name: email + schema: + type: string + description: The user's email + tags: + - User + description: Deletes a user by userId or email, specified through a query parameter + responses: + '204': + description: Succesfully deleted user + '400': + description: Cannot query by both userId and email, invalid userId or email, userId or email is not a string, userId or email not supplied + '401': + description: Unauthorized + '500': + description: Invalid request + + + /users/{userId}: + put: + security: + - bearerAuth: [] + parameters: + - in: path + name: userId + required: true + schema: + # type: integer (postgres) + # minimum: 1 + type: string + description: The user ID + tags: + - User + description: Update the user with the specified userId + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - firstName, lastName, role, email + properties: + firstName: + type: string + lastName: + type: string + role: + type: string + enum: ["User", "Admin"] + email: + type: string + responses: + '200': + description: Successfully updated user + content: + application/json: + schema: + type: object + required: + - id, firstName, lastName, email, role + properties: + id: + type: string + firstName: + type: string + lastName: + type: string + email: + type: string + role: + type: string + '401': + description: Unauthorized + '500': + description: Invalid request diff --git a/backend/typescript/testUtils/testDb.ts b/backend/typescript/testUtils/testDb.ts new file mode 100644 index 0000000..fc504a8 --- /dev/null +++ b/backend/typescript/testUtils/testDb.ts @@ -0,0 +1,16 @@ +import { resolve } from "path"; + +import { Sequelize } from "sequelize-typescript"; + + +const DATABASE_URL = + process.env.NODE_ENV === "production" + ? /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */ + process.env.DATABASE_URL! + : `postgres://${process.env.POSTGRES_USER}:${process.env.POSTGRES_PASSWORD}@${process.env.DB_HOST}:5432/${process.env.POSTGRES_DB_TEST}`; + +/* eslint-disable-next-line import/prefer-default-export */ +export const testSql = new Sequelize(DATABASE_URL, { + models: [resolve(__dirname, "../models/*.model.ts")], + logging: false, +}); diff --git a/backend/typescript/tsconfig.json b/backend/typescript/tsconfig.json new file mode 100644 index 0000000..20fd8bc --- /dev/null +++ b/backend/typescript/tsconfig.json @@ -0,0 +1,77 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Basic Options */ + // "incremental": true, /* Enable incremental compilation */ + "target": "ES2020", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ + "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ + // "lib": [], /* Specify library files to be included in the compilation. */ + // "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ + // "declaration": true, /* Generates corresponding '.d.ts' file. */ + // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + // "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + "outDir": "./build", /* Redirect output structure to the directory. */ + // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + // "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ + + /* Module Resolution Options */ + // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + // "types": [], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + + /* Advanced Options */ + "skipLibCheck": true, /* Skip type checking of declaration files. */ + "forceConsistentCasingInFileNames": true, /* Disallow inconsistently-cased references to the same file. */ + + /* JSON Options */ + "resolveJsonModule": true + }, + "include": [ + "./**/*", + "*.json" + ] +} diff --git a/backend/typescript/types.ts b/backend/typescript/types.ts new file mode 100644 index 0000000..58de877 --- /dev/null +++ b/backend/typescript/types.ts @@ -0,0 +1,37 @@ +export type Role = "User" | "Admin"; + +export type Token = { + accessToken: string; + refreshToken: string; +}; + +export type UserDTO = { + id: string; + firstName: string; + lastName: string; + email: string; + role: Role; +}; + +export type CreateUserDTO = Omit & { password: string }; + +export type UpdateUserDTO = Omit; + +export type RegisterUserDTO = Omit; + +export type AuthDTO = Token & UserDTO; + +export type Letters = "A" | "B" | "C" | "D"; + +export type NodemailerConfig = { + service: "gmail"; + auth: { + type: "OAuth2"; + user: string; + clientId: string; + clientSecret: string; + refreshToken: string; + }; +}; + +export type SignUpMethod = "PASSWORD" | "GOOGLE"; diff --git a/backend/typescript/umzug.ts b/backend/typescript/umzug.ts new file mode 100644 index 0000000..077322d --- /dev/null +++ b/backend/typescript/umzug.ts @@ -0,0 +1,27 @@ +import * as path from "path"; + +import { Umzug, SequelizeStorage } from "umzug"; +import { Sequelize } from "sequelize-typescript"; + +const DATABASE_URL = + process.env.NODE_ENV === "production" + ? /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */ + process.env.DATABASE_URL! + : `postgres://${process.env.POSTGRES_USER}:${process.env.POSTGRES_PASSWORD}@${process.env.DB_HOST}:5432/${process.env.POSTGRES_DB_DEV}`; + +const sequelize = new Sequelize(DATABASE_URL, { + models: [path.join(__dirname, "/*.model.ts")], +}); + +export const migrator = new Umzug({ + migrations: { + glob: ["migrations/*.ts", { cwd: __dirname }], + }, + context: sequelize, + storage: new SequelizeStorage({ + sequelize, + }), + logger: console, +}); + +export type Migration = typeof migrator._types.migration; diff --git a/backend/typescript/utilities/CSVUtils.ts b/backend/typescript/utilities/CSVUtils.ts new file mode 100644 index 0000000..c88173e --- /dev/null +++ b/backend/typescript/utilities/CSVUtils.ts @@ -0,0 +1,61 @@ +import { parseAsync, transforms } from "json2csv"; +import { Readable, TransformOptions } from "stream"; + +type GenerateCSVParams = { + data: Readonly | ReadonlyArray | Readable; + fields?: string[]; + transformFunction?: (item: T) => Record; + flattenObjects?: boolean; + flattenArrays?: boolean; + pathsToUnwind?: string[]; + opts?: json2csv.Options; + transformOpts?: TransformOptions; +}; + +/** + * Generate a CSV from a JSON array/object or readable input stream. + * fields, transformFunction, flattenObjects, flattenArrays, and pathsToUnwind belong to json2csv.options but + * they are also provided as parameters here for convenience. + * For examples using each of these params, see the CSVUtils.test.ts file. + * @param data JSON array/object or stream to convert to a CSV string + * @param fields columns to include in the csv + * @param transformFunction function to transform fields of the object before converting to csv + * @param flattenObjects indicates whether each property of object fields should be split into a different column + * @param flattenArrays indicates whether each element of array fields should be split into a different column + * @param pathsToUnwind array fields that should be split into different rows + * @param opts options from json2csv to override or add additional options (https://mircozeiss.com/json2csv/#available-options) + * @param transformOpts transform options from stream module (https://nodejs.org/api/stream.html#stream_new_stream_transform_options) + * @returns CSV string + * @throws Error if JSON is not parsed properly + */ +/* eslint-disable-next-line import/prefer-default-export */ +export const generateCSV = async ({ + data, + fields, + transformFunction, + flattenObjects = false, + flattenArrays = false, + pathsToUnwind, + opts, + transformOpts, +}: GenerateCSVParams): Promise => { + const transformations = [ + transforms.flatten({ + objects: flattenObjects, + arrays: flattenArrays, + }), + ]; + if (transformFunction) { + transformations.push(transformFunction); + } + if (pathsToUnwind) { + transformations.push(transforms.unwind({ paths: pathsToUnwind })); + } + + const options = { + fields, + transforms: transformations, + ...opts, + }; + return parseAsync(data, options, transformOpts); +}; diff --git a/backend/typescript/utilities/errorUtils.ts b/backend/typescript/utilities/errorUtils.ts new file mode 100644 index 0000000..a5e59f0 --- /dev/null +++ b/backend/typescript/utilities/errorUtils.ts @@ -0,0 +1,4 @@ +/* eslint-disable-next-line import/prefer-default-export */ +export const getErrorMessage = (error: unknown): string => { + return error instanceof Error ? error.message : "Unknown error occurred."; +}; diff --git a/backend/typescript/utilities/firebaseRestClient.ts b/backend/typescript/utilities/firebaseRestClient.ts new file mode 100644 index 0000000..8afa69f --- /dev/null +++ b/backend/typescript/utilities/firebaseRestClient.ts @@ -0,0 +1,181 @@ +import fetch, { Response } from "node-fetch"; + +import { Token } from "../types"; +import logger from "./logger"; + +const Logger = logger(__filename); + +const FIREBASE_SIGN_IN_URL = + "https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword"; +const FIREBASE_REFRESH_TOKEN_URL = + "https://securetoken.googleapis.com/v1/token"; +const FIREBASE_OAUTH_SIGN_IN_URL = + "https://identitytoolkit.googleapis.com/v1/accounts:signInWithIdp"; + +type PasswordSignInResponse = { + idToken: string; + email: string; + refreshToken: string; + expiresIn: string; + localId: string; + registered: boolean; +}; + +type OAuthSignInResponse = { + federatedId: string; + providerId: string; + localId: string; + emailVerified: boolean; + email: string; + oauthIdToken: string; + oauthAccessToken: string; + oauthTokenSecret: string; + rawUserInfo: string; + firstName: string; + lastName: string; + fullName: string; + displayName: string; + photoUrl: string; + idToken: string; + refreshToken: string; + expiresIn: string; + needConfirmation: boolean; +}; + +type RefreshTokenResponse = { + expires_in: string; + token_type: string; + refresh_token: string; + id_token: string; + user_id: string; + project_id: string; +}; + +type RequestError = { + error: { + code: number; + message: string; + /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ + errors: any; + }; +}; + +const FirebaseRestClient = { + // Docs: https://firebase.google.com/docs/reference/rest/auth/#section-sign-in-email-password + signInWithPassword: async ( + email: string, + password: string, + ): Promise => { + const response: Response = await fetch( + `${FIREBASE_SIGN_IN_URL}?key=${process.env.FIREBASE_WEB_API_KEY}`, + { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + email, + password, + returnSecureToken: true, + }), + }, + ); + + const responseJson: + | PasswordSignInResponse + | RequestError = await response.json(); + + if (!response.ok) { + const errorMessage = [ + "Failed to sign-in via Firebase REST API, status code =", + `${response.status},`, + "error message =", + (responseJson as RequestError).error.message, + ]; + Logger.error(errorMessage.join(" ")); + + throw new Error("Failed to sign-in via Firebase REST API"); + } + + return { + accessToken: (responseJson as PasswordSignInResponse).idToken, + refreshToken: (responseJson as PasswordSignInResponse).refreshToken, + }; + }, + + // Docs: https://firebase.google.com/docs/reference/rest/auth/#section-sign-in-with-oauth-credential + signInWithGoogleOAuth: async ( + idToken: string, + ): Promise => { + const response: Response = await fetch( + `${FIREBASE_OAUTH_SIGN_IN_URL}?key=${process.env.FIREBASE_WEB_API_KEY}`, + { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + postBody: `id_token=${idToken}&providerId=google.com`, + requestUri: process.env.FIREBASE_REQUEST_URI, + returnIdpCredential: true, + returnSecureToken: true, + }), + }, + ); + + const responseJson: + | OAuthSignInResponse + | RequestError = await response.json(); + + if (!response.ok) { + const errorMessage = [ + "Failed to sign-in via Firebase REST API with OAuth, status code =", + `${response.status},`, + "error message =", + (responseJson as RequestError).error.message, + ]; + Logger.error(errorMessage.join(" ")); + + throw new Error("Failed to sign-in via Firebase REST API"); + } + + return responseJson as OAuthSignInResponse; + }, + + // Docs: https://firebase.google.com/docs/reference/rest/auth/#section-refresh-token + refreshToken: async (refreshToken: string): Promise => { + const response: Response = await fetch( + `${FIREBASE_REFRESH_TOKEN_URL}?key=${process.env.FIREBASE_WEB_API_KEY}`, + { + method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded", + }, + body: `grant_type=refresh_token&refresh_token=${refreshToken}`, + }, + ); + + const responseJson: + | RefreshTokenResponse + | RequestError = await response.json(); + + if (!response.ok) { + const errorMessage = [ + "Failed to refresh token via Firebase REST API, status code =", + `${response.status},`, + "error message =", + (responseJson as RequestError).error.message, + ]; + Logger.error(errorMessage.join(" ")); + + throw new Error("Failed to refresh token via Firebase REST API"); + } + + return { + accessToken: (responseJson as RefreshTokenResponse).id_token, + refreshToken: (responseJson as RefreshTokenResponse).refresh_token, + }; + }, +}; + +export default FirebaseRestClient; diff --git a/backend/typescript/utilities/logger.ts b/backend/typescript/utilities/logger.ts new file mode 100644 index 0000000..b8172b5 --- /dev/null +++ b/backend/typescript/utilities/logger.ts @@ -0,0 +1,51 @@ +import * as winston from "winston"; + +type Logger = { + error: (message: string) => void; + warn: (message: string) => void; + info: (message: string) => void; + http: (message: string) => void; + verbose: (message: string) => void; + debug: (message: string) => void; +}; + +const WinstonLogger: winston.Logger = winston.createLogger({ + level: "info", + format: winston.format.combine( + winston.format.timestamp(), + winston.format.json(), + ), + transports: [ + new winston.transports.File({ filename: "error.log", level: "error" }), + new winston.transports.File({ filename: "combined.log" }), + ], +}); + +if (process.env.NODE_ENV !== "production") { + WinstonLogger.add(new winston.transports.Console()); +} + +const logger = (fileName: string): Logger => { + return { + error: (message: string) => { + WinstonLogger.error(`[${fileName}] ${message}`); + }, + warn: (message: string) => { + WinstonLogger.warn(`[${fileName}] ${message}`); + }, + info: (message: string) => { + WinstonLogger.info(`[${fileName}] ${message}`); + }, + http: (message: string) => { + WinstonLogger.http(`[${fileName}] ${message}`); + }, + verbose: (message: string) => { + WinstonLogger.verbose(`[${fileName}] ${message}`); + }, + debug: (message: string) => { + WinstonLogger.debug(`[${fileName}] ${message}`); + }, + }; +}; + +export default logger; diff --git a/backend/typescript/utilities/responseUtil.ts b/backend/typescript/utilities/responseUtil.ts new file mode 100644 index 0000000..262f476 --- /dev/null +++ b/backend/typescript/utilities/responseUtil.ts @@ -0,0 +1,20 @@ +import { Response } from "express"; +import { Readable } from "stream"; +import { generateCSV } from "./CSVUtils"; + +/* eslint-disable-next-line import/prefer-default-export */ +export const sendResponseByMimeType = async ( + res: Response, + responseCode: number, + contentType: string | undefined, + rawData: Readonly | ReadonlyArray | Readable, +): Promise => { + if (contentType === "text/csv") { + const csvText = await generateCSV({ data: rawData }); + return res.status(responseCode).type("text/csv").send(csvText); + } + if (contentType === "application/json" || contentType === undefined) { + return res.status(responseCode).json(rawData); + } + return res.status(415).json(rawData); +}; diff --git a/backend/typescript/yarn.lock b/backend/typescript/yarn.lock new file mode 100644 index 0000000..f8d4985 --- /dev/null +++ b/backend/typescript/yarn.lock @@ -0,0 +1,7041 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@apollo/protobufjs@^1.0.3": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@apollo/protobufjs/-/protobufjs-1.0.5.tgz#a78b726147efc0795e74c8cb8a11aafc6e02f773" + integrity sha512-ZtyaBH1icCgqwIGb3zrtopV2D5Q8yxibkJzlaViM08eOhTQc7rACdYu0pfORFfhllvdMZ3aq69vifYHszY4gNA== + 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.0" + "@types/node" "^10.1.0" + long "^4.0.0" + +"@apollographql/apollo-tools@^0.4.3": + version "0.4.9" + resolved "https://registry.yarnpkg.com/@apollographql/apollo-tools/-/apollo-tools-0.4.9.tgz#6abeef4c4586aec8208f71254b329e48ab50c07e" + integrity sha512-M50pk8oo3CGTu4waGOklIX3YtTZoPfWG9K/G9WB8NpyQGA1OwYTiBFv94XqUtKElTDoFwoMXpMQd3Wy5dINvxA== + dependencies: + apollo-env "^0.6.6" + +"@apollographql/graphql-playground-html@1.6.27": + version "1.6.27" + resolved "https://registry.yarnpkg.com/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.27.tgz#bc9ab60e9445aa2a8813b4e94f152fa72b756335" + integrity sha512-tea2LweZvn6y6xFV11K0KC8ETjmm52mQrW+ezgB2O/aTQf8JGyFmMcRPFgUaQZeHbWdm8iisDC6EjOKsXu0nfw== + dependencies: + xss "^1.0.8" + +"@apollographql/graphql-upload-8-fork@^8.1.3": + version "8.1.3" + resolved "https://registry.yarnpkg.com/@apollographql/graphql-upload-8-fork/-/graphql-upload-8-fork-8.1.3.tgz#a0d4e0d5cec8e126d78bd915c264d6b90f5784bc" + integrity sha512-ssOPUT7euLqDXcdVv3Qs4LoL4BPtfermW1IOouaqEmj36TpHYDmYDIbKoSQxikd9vtMumFnP87OybH7sC9fJ6g== + dependencies: + "@types/express" "*" + "@types/fs-capacitor" "*" + "@types/koa" "*" + busboy "^0.3.1" + fs-capacitor "^2.0.4" + http-errors "^1.7.3" + object-path "^0.11.4" + +"@ardatan/aggregate-error@0.0.6": + version "0.0.6" + resolved "https://registry.yarnpkg.com/@ardatan/aggregate-error/-/aggregate-error-0.0.6.tgz#fe6924771ea40fc98dc7a7045c2e872dc8527609" + integrity sha512-vyrkEHG1jrukmzTPtyWB4NLPauUw5bQeg4uhn8f+1SSynmrOcyvlb1GKQjjgoBzElLdfXCRYX8UnBlhklOHYRQ== + dependencies: + tslib "~2.0.1" + +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/code-frame@^7.12.13", "@babel/code-frame@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" + integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== + dependencies: + "@babel/highlight" "^7.14.5" + +"@babel/compat-data@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" + integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== + +"@babel/core@^7.1.0", "@babel/core@^7.7.2", "@babel/core@^7.7.5": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.0.tgz#749e57c68778b73ad8082775561f67f5196aafa8" + integrity sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.15.0" + "@babel/helper-compilation-targets" "^7.15.0" + "@babel/helper-module-transforms" "^7.15.0" + "@babel/helpers" "^7.14.8" + "@babel/parser" "^7.15.0" + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.15.0" + "@babel/types" "^7.15.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/generator@^7.15.0", "@babel/generator@^7.7.2": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.0.tgz#a7d0c172e0d814974bad5aa77ace543b97917f15" + integrity sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ== + dependencies: + "@babel/types" "^7.15.0" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-compilation-targets@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz#973df8cbd025515f3ff25db0c05efc704fa79818" + integrity sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A== + dependencies: + "@babel/compat-data" "^7.15.0" + "@babel/helper-validator-option" "^7.14.5" + browserslist "^4.16.6" + semver "^6.3.0" + +"@babel/helper-function-name@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4" + integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ== + dependencies: + "@babel/helper-get-function-arity" "^7.14.5" + "@babel/template" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/helper-get-function-arity@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815" + integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-hoist-variables@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d" + integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-member-expression-to-functions@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz#0ddaf5299c8179f27f37327936553e9bba60990b" + integrity sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg== + dependencies: + "@babel/types" "^7.15.0" + +"@babel/helper-module-imports@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" + integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-module-transforms@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz#679275581ea056373eddbe360e1419ef23783b08" + integrity sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg== + dependencies: + "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-replace-supers" "^7.15.0" + "@babel/helper-simple-access" "^7.14.8" + "@babel/helper-split-export-declaration" "^7.14.5" + "@babel/helper-validator-identifier" "^7.14.9" + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.15.0" + "@babel/types" "^7.15.0" + +"@babel/helper-optimise-call-expression@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c" + integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" + integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== + +"@babel/helper-replace-supers@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz#ace07708f5bf746bf2e6ba99572cce79b5d4e7f4" + integrity sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.15.0" + "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/traverse" "^7.15.0" + "@babel/types" "^7.15.0" + +"@babel/helper-simple-access@^7.14.8": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz#82e1fec0644a7e775c74d305f212c39f8fe73924" + integrity sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg== + dependencies: + "@babel/types" "^7.14.8" + +"@babel/helper-split-export-declaration@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a" + integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== + +"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48" + integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g== + +"@babel/helper-validator-option@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" + integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== + +"@babel/helpers@^7.14.8": + version "7.15.3" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.3.tgz#c96838b752b95dcd525b4e741ed40bb1dc2a1357" + integrity sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g== + dependencies: + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.15.0" + "@babel/types" "^7.15.0" + +"@babel/highlight@^7.10.4": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.12.13.tgz#8ab538393e00370b26271b01fa08f7f27f2e795c" + integrity sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/highlight@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" + integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== + dependencies: + "@babel/helper-validator-identifier" "^7.14.5" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.5", "@babel/parser@^7.15.0", "@babel/parser@^7.7.2": + version "7.15.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.3.tgz#3416d9bea748052cfcb63dbcc27368105b1ed862" + integrity sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz#b82c6ce471b165b5ce420cf92914d6fb46225716" + integrity sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/template@^7.14.5", "@babel/template@^7.3.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" + integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/parser" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.15.0", "@babel/traverse@^7.7.2": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.0.tgz#4cca838fd1b2a03283c1f38e141f639d60b3fc98" + integrity sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.15.0" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-hoist-variables" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" + "@babel/parser" "^7.15.0" + "@babel/types" "^7.15.0" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.14.5", "@babel/types@^7.14.8", "@babel/types@^7.15.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.0.tgz#61af11f2286c4e9c69ca8deb5f4375a73c72dcbd" + integrity sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ== + dependencies: + "@babel/helper-validator-identifier" "^7.14.9" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@dabh/diagnostics@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.2.tgz#290d08f7b381b8f94607dc8f471a12c675f9db31" + integrity sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q== + dependencies: + colorspace "1.1.x" + enabled "2.0.x" + kuler "^2.0.0" + +"@eslint/eslintrc@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.3.0.tgz#d736d6963d7003b6514e6324bec9c602ac340318" + integrity sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + lodash "^4.17.20" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@firebase/app-types@0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.6.1.tgz#dcbd23030a71c0c74fc95d4a3f75ba81653850e9" + integrity sha512-L/ZnJRAq7F++utfuoTKX4CLBG5YR7tFO3PLzG1/oXXKEezJ0kRL3CMRoueBEmTCzVb/6SIs2Qlaw++uDgi5Xyg== + +"@firebase/auth-interop-types@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@firebase/auth-interop-types/-/auth-interop-types-0.1.5.tgz#9fc9bd7c879f16b8d1bb08373a0f48c3a8b74557" + integrity sha512-88h74TMQ6wXChPA6h9Q3E1Jg6TkTHep2+k63OWg3s0ozyGVMeY+TTOti7PFPzq5RhszQPQOoCi59es4MaRvgCw== + +"@firebase/component@0.1.21": + version "0.1.21" + resolved "https://registry.yarnpkg.com/@firebase/component/-/component-0.1.21.tgz#56062eb0d449dc1e7bbef3c084a9b5fa48c7c14d" + integrity sha512-kd5sVmCLB95EK81Pj+yDTea8pzN2qo/1yr0ua9yVi6UgMzm6zAeih73iVUkaat96MAHy26yosMufkvd3zC4IKg== + dependencies: + "@firebase/util" "0.3.4" + tslib "^1.11.1" + +"@firebase/database-types@0.6.1", "@firebase/database-types@^0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-0.6.1.tgz#cf1cfc03e617ed4c2561703781f85ba4c707ff65" + integrity sha512-JtL3FUbWG+bM59iYuphfx9WOu2Mzf0OZNaqWiQ7lJR8wBe7bS9rIm9jlBFtksB7xcya1lZSQPA/GAy2jIlMIkA== + dependencies: + "@firebase/app-types" "0.6.1" + +"@firebase/database@^0.8.1": + version "0.8.3" + resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.8.3.tgz#4e5efa8fc8df00d6febfd9c8d6d6e409596659f7" + integrity sha512-i29rr3kcPltIkA8La9M1lgsSxx9bfu5lCQ0T+tbJptZ3UpqpcL1NzCcZa24cJjiLgq3HQNPyLvUvCtcPSFDlRg== + dependencies: + "@firebase/auth-interop-types" "0.1.5" + "@firebase/component" "0.1.21" + "@firebase/database-types" "0.6.1" + "@firebase/logger" "0.2.6" + "@firebase/util" "0.3.4" + faye-websocket "0.11.3" + tslib "^1.11.1" + +"@firebase/logger@0.2.6": + version "0.2.6" + resolved "https://registry.yarnpkg.com/@firebase/logger/-/logger-0.2.6.tgz#3aa2ca4fe10327cabf7808bd3994e88db26d7989" + integrity sha512-KIxcUvW/cRGWlzK9Vd2KB864HlUnCfdTH0taHE0sXW5Xl7+W68suaeau1oKNEqmc3l45azkd4NzXTCWZRZdXrw== + +"@firebase/util@0.3.4": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@firebase/util/-/util-0.3.4.tgz#e389d0e0e2aac88a5235b06ba9431db999d4892b" + integrity sha512-VwjJUE2Vgr2UMfH63ZtIX9Hd7x+6gayi6RUXaTqEYxSbf/JmehLmAEYSuxS/NckfzAXWeGnKclvnXVibDgpjQQ== + dependencies: + tslib "^1.11.1" + +"@google-cloud/common@^3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-3.6.0.tgz#c2f6da5f79279a4a9ac7c71fc02d582beab98e8b" + integrity sha512-aHIFTqJZmeTNO9md8XxV+ywuvXF3xBm5WNmgWeeCK+XN5X+kGW0WEX94wGwj+/MdOnrVf4dL2RvSIt9J5yJG6Q== + dependencies: + "@google-cloud/projectify" "^2.0.0" + "@google-cloud/promisify" "^2.0.0" + arrify "^2.0.1" + duplexify "^4.1.1" + ent "^2.2.0" + extend "^3.0.2" + google-auth-library "^7.0.2" + retry-request "^4.1.1" + teeny-request "^7.0.0" + +"@google-cloud/firestore@^4.5.0": + version "4.9.7" + resolved "https://registry.yarnpkg.com/@google-cloud/firestore/-/firestore-4.9.7.tgz#8fb9080ba0f6e074013412835b60db926515d139" + integrity sha512-s5W6rRxD5y3Oe3KJUNztIy4eIi9dBwJU36jd/QM3L8frpCuSh1fn6z0BD8IAV0AirQAg6aOzSlcwAwd/yeXCkw== + dependencies: + fast-deep-equal "^3.1.1" + functional-red-black-tree "^1.0.1" + google-gax "^2.9.2" + protobufjs "^6.8.6" + +"@google-cloud/paginator@^3.0.0": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@google-cloud/paginator/-/paginator-3.0.5.tgz#9d6b96c421a89bd560c1bc2c197c7611ef21db6c" + integrity sha512-N4Uk4BT1YuskfRhKXBs0n9Lg2YTROZc6IMpkO/8DIHODtm5s3xY8K5vVBo23v/2XulY3azwITQlYWgT4GdLsUw== + dependencies: + arrify "^2.0.0" + extend "^3.0.2" + +"@google-cloud/projectify@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@google-cloud/projectify/-/projectify-2.0.1.tgz#13350ee609346435c795bbfe133a08dfeab78d65" + integrity sha512-ZDG38U/Yy6Zr21LaR3BTiiLtpJl6RkPS/JwoRT453G+6Q1DhlV0waNf8Lfu+YVYGIIxgKnLayJRfYlFJfiI8iQ== + +"@google-cloud/promisify@^2.0.0": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-2.0.3.tgz#f934b5cdc939e3c7039ff62b9caaf59a9d89e3a8" + integrity sha512-d4VSA86eL/AFTe5xtyZX+ePUjE8dIFu2T8zmdeNBSa5/kNgXPCx/o/wbFNHAGLJdGnk1vddRuMESD9HbOC8irw== + +"@google-cloud/storage@^5.3.0": + version "5.8.1" + resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-5.8.1.tgz#00e627723614bcf97e6e29f9a59ec39339171847" + integrity sha512-qP8gCJ2myyMN3JMJN12d82Oo8VBSDO8vO4/x56dtQZX9+WISqcagurntnJVyFX885tIOtS97bsyv8qR1xv6HMg== + dependencies: + "@google-cloud/common" "^3.6.0" + "@google-cloud/paginator" "^3.0.0" + "@google-cloud/promisify" "^2.0.0" + arrify "^2.0.0" + async-retry "^1.3.1" + compressible "^2.0.12" + date-and-time "^0.14.2" + duplexify "^4.0.0" + extend "^3.0.2" + gaxios "^4.0.0" + gcs-resumable-upload "^3.1.3" + get-stream "^6.0.0" + hash-stream-validation "^0.2.2" + mime "^2.2.0" + mime-types "^2.0.8" + onetime "^5.1.0" + p-limit "^3.0.1" + pumpify "^2.0.0" + snakeize "^0.1.0" + stream-events "^1.0.1" + xdg-basedir "^4.0.0" + +"@graphql-tools/batch-execute@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/batch-execute/-/batch-execute-7.1.0.tgz#89fde91ae27c717a5f9f2fff9de8cb6efb7df956" + integrity sha512-Yb4QRpHZqDk24+T4K3ARk/KFU26Dyl30XcbYeVvIrgIKcmeON/p3DfSeiB0+MaxYlsv+liQKvlxNbeC2hD31pA== + dependencies: + "@graphql-tools/utils" "^7.7.0" + dataloader "2.0.0" + is-promise "4.0.0" + tslib "~2.1.0" + +"@graphql-tools/delegate@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-7.1.1.tgz#492d7d481e46c56430af9d0f485ae65ab0bf4cae" + integrity sha512-+uV0KZPI070sEykf3uxy+AhirHOqZnqbVqTqcfhH8/97+vdoLPE5oVceCTvMQsC7bDapbcbNiwcpYd8T6OQ4KQ== + dependencies: + "@ardatan/aggregate-error" "0.0.6" + "@graphql-tools/batch-execute" "^7.1.0" + "@graphql-tools/schema" "^7.0.0" + "@graphql-tools/utils" "^7.7.1" + dataloader "2.0.0" + is-promise "4.0.0" + tslib "~2.1.0" + +"@graphql-tools/schema@^7.0.0", "@graphql-tools/schema@^7.1.3": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-7.1.3.tgz#d816400da51fbac1f0086e35540ab63b5e30e858" + integrity sha512-ZY76hmcJlF1iyg3Im0sQ3ASRkiShjgv102vLTVcH22lEGJeCaCyyS/GF1eUHom418S60bS8Th6+autRUxfBiBg== + dependencies: + "@graphql-tools/utils" "^7.1.2" + tslib "~2.1.0" + +"@graphql-tools/utils@^7.1.2", "@graphql-tools/utils@^7.7.0", "@graphql-tools/utils@^7.7.1": + version "7.7.1" + resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-7.7.1.tgz#81f32cb4819b34b3a378d51ab2cd60935977f0b4" + integrity sha512-SFT4/dTfrwWer1wSOLU+jqgv3oa/xTR8q+MiNbE9nCH2FXyMsqIOaXKm9wHfKIWFWHozqBdcnwFkQZrdD7H2TQ== + dependencies: + "@ardatan/aggregate-error" "0.0.6" + camel-case "4.1.2" + tslib "~2.1.0" + +"@grpc/grpc-js@~1.2.0": + version "1.2.10" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.2.10.tgz#f316d29a45fcc324e923d593cb849d292b1ed598" + integrity sha512-wj6GkNiorWYaPiIZ767xImmw7avMMVUweTvPFg4mJWOxz2180DKwfuxhJJZ7rpc1+7D3mX/v8vJdxTuIo71Ieg== + dependencies: + "@types/node" ">=12.12.47" + google-auth-library "^6.1.1" + semver "^6.2.0" + +"@grpc/proto-loader@^0.5.1": + version "0.5.6" + resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.5.6.tgz#1dea4b8a6412b05e2d58514d507137b63a52a98d" + integrity sha512-DT14xgw3PSzPxwS13auTEwxhMMOoz33DPUKNtmYK/QYbBSpLXJy78FGGs5yVoxVobEqPm4iW9MOIoz0A3bLTRQ== + dependencies: + lodash.camelcase "^4.3.0" + protobufjs "^6.8.6" + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.0.6.tgz#3eb72ea80897495c3d73dd97aab7f26770e2260f" + integrity sha512-fMlIBocSHPZ3JxgWiDNW/KPj6s+YRd0hicb33IrmelCcjXo/pXPwvuiKFmZz+XuqI/1u7nbUK10zSsWL/1aegg== + dependencies: + "@jest/types" "^27.0.6" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^27.0.6" + jest-util "^27.0.6" + slash "^3.0.0" + +"@jest/core@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.0.6.tgz#c5f642727a0b3bf0f37c4b46c675372d0978d4a1" + integrity sha512-SsYBm3yhqOn5ZLJCtccaBcvD/ccTLCeuDv8U41WJH/V1MW5eKUkeMHT9U+Pw/v1m1AIWlnIW/eM2XzQr0rEmow== + dependencies: + "@jest/console" "^27.0.6" + "@jest/reporters" "^27.0.6" + "@jest/test-result" "^27.0.6" + "@jest/transform" "^27.0.6" + "@jest/types" "^27.0.6" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.8.1" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-changed-files "^27.0.6" + jest-config "^27.0.6" + jest-haste-map "^27.0.6" + jest-message-util "^27.0.6" + jest-regex-util "^27.0.6" + jest-resolve "^27.0.6" + jest-resolve-dependencies "^27.0.6" + jest-runner "^27.0.6" + jest-runtime "^27.0.6" + jest-snapshot "^27.0.6" + jest-util "^27.0.6" + jest-validate "^27.0.6" + jest-watcher "^27.0.6" + micromatch "^4.0.4" + p-each-series "^2.1.0" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.0.6.tgz#ee293fe996db01d7d663b8108fa0e1ff436219d2" + integrity sha512-4XywtdhwZwCpPJ/qfAkqExRsERW+UaoSRStSHCCiQTUpoYdLukj+YJbQSFrZjhlUDRZeNiU9SFH0u7iNimdiIg== + dependencies: + "@jest/fake-timers" "^27.0.6" + "@jest/types" "^27.0.6" + "@types/node" "*" + jest-mock "^27.0.6" + +"@jest/fake-timers@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.0.6.tgz#cbad52f3fe6abe30e7acb8cd5fa3466b9588e3df" + integrity sha512-sqd+xTWtZ94l3yWDKnRTdvTeZ+A/V7SSKrxsrOKSqdyddb9CeNRF8fbhAU0D7ZJBpTTW2nbp6MftmKJDZfW2LQ== + dependencies: + "@jest/types" "^27.0.6" + "@sinonjs/fake-timers" "^7.0.2" + "@types/node" "*" + jest-message-util "^27.0.6" + jest-mock "^27.0.6" + jest-util "^27.0.6" + +"@jest/globals@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.0.6.tgz#48e3903f99a4650673d8657334d13c9caf0e8f82" + integrity sha512-DdTGCP606rh9bjkdQ7VvChV18iS7q0IMJVP1piwTWyWskol4iqcVwthZmoJEf7obE1nc34OpIyoVGPeqLC+ryw== + dependencies: + "@jest/environment" "^27.0.6" + "@jest/types" "^27.0.6" + expect "^27.0.6" + +"@jest/reporters@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.0.6.tgz#91e7f2d98c002ad5df94d5b5167c1eb0b9fd5b00" + integrity sha512-TIkBt09Cb2gptji3yJXb3EE+eVltW6BjO7frO7NEfjI9vSIYoISi5R3aI3KpEDXlB1xwB+97NXIqz84qYeYsfA== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^27.0.6" + "@jest/test-result" "^27.0.6" + "@jest/transform" "^27.0.6" + "@jest/types" "^27.0.6" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.4" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^4.0.3" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + jest-haste-map "^27.0.6" + jest-resolve "^27.0.6" + jest-util "^27.0.6" + jest-worker "^27.0.6" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^8.0.0" + +"@jest/source-map@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.0.6.tgz#be9e9b93565d49b0548b86e232092491fb60551f" + integrity sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.4" + source-map "^0.6.0" + +"@jest/test-result@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.0.6.tgz#3fa42015a14e4fdede6acd042ce98c7f36627051" + integrity sha512-ja/pBOMTufjX4JLEauLxE3LQBPaI2YjGFtXexRAjt1I/MbfNlMx0sytSX3tn5hSLzQsR3Qy2rd0hc1BWojtj9w== + dependencies: + "@jest/console" "^27.0.6" + "@jest/types" "^27.0.6" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.0.6.tgz#80a913ed7a1130545b1cd777ff2735dd3af5d34b" + integrity sha512-bISzNIApazYOlTHDum9PwW22NOyDa6VI31n6JucpjTVM0jD6JDgqEZ9+yn575nDdPF0+4csYDxNNW13NvFQGZA== + dependencies: + "@jest/test-result" "^27.0.6" + graceful-fs "^4.2.4" + jest-haste-map "^27.0.6" + jest-runtime "^27.0.6" + +"@jest/transform@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.0.6.tgz#189ad7107413208f7600f4719f81dd2f7278cc95" + integrity sha512-rj5Dw+mtIcntAUnMlW/Vju5mr73u8yg+irnHwzgtgoeI6cCPOvUwQ0D1uQtc/APmWgvRweEb1g05pkUpxH3iCA== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^27.0.6" + babel-plugin-istanbul "^6.0.0" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.4" + jest-haste-map "^27.0.6" + jest-regex-util "^27.0.6" + jest-util "^27.0.6" + micromatch "^4.0.4" + pirates "^4.0.1" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + +"@jest/types@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" + integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + +"@jest/types@^27.0.6": + version "27.0.6" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.0.6.tgz#9a992bc517e0c49f035938b8549719c2de40706b" + integrity sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^16.0.0" + chalk "^4.0.0" + +"@josephg/resolvable@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@josephg/resolvable/-/resolvable-1.0.0.tgz#cd75b09cfad18cd945de9221d403203aa07e3d0a" + integrity sha512-OfTtjoqB2doov5aTJxkyAMK8dXoo7CjCUQSYUEtiY34jbWduOGV7+168tmCT8COMsUEd5DMSFg/0iAOPCBTNAQ== + +"@nodelib/fs.scandir@2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" + integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== + dependencies: + "@nodelib/fs.stat" "2.0.4" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" + integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" + integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== + dependencies: + "@nodelib/fs.scandir" "2.1.4" + fastq "^1.6.0" + +"@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= + +"@rushstack/ts-command-line@^4.7.7": + version "4.7.10" + resolved "https://registry.yarnpkg.com/@rushstack/ts-command-line/-/ts-command-line-4.7.10.tgz#a2ec6efb1945b79b496671ce90eb1be4f1397d31" + integrity sha512-8t042g8eerypNOEcdpxwRA3uCmz0duMo21rG4Z2mdz7JxJeylDmzjlU3wDdef2t3P1Z61JCdZB6fbm1Mh0zi7w== + dependencies: + "@types/argparse" "1.0.38" + argparse "~1.0.9" + colors "~1.2.1" + string-argv "~0.3.1" + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@sinonjs/commons@^1.7.0": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^7.0.2": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz#2524eae70c4910edccf99b2f4e6efc5894aff7b5" + integrity sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@tsconfig/node10@^1.0.7": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.7.tgz#1eb1de36c73478a2479cc661ef5af1c16d86d606" + integrity sha512-aBvUmXLQbayM4w3A8TrjwrXs4DZ8iduJnuJLLRGdkWlyakCf1q6uHZJBzXoRA/huAEknG5tcUyQxN3A+In5euQ== + +"@tsconfig/node12@^1.0.7": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.7.tgz#677bd9117e8164dc319987dd6ff5fc1ba6fbf18b" + integrity sha512-dgasobK/Y0wVMswcipr3k0HpevxFJLijN03A8mYfEPvWvOs14v0ZlYTR4kIgMx8g4+fTyTFv8/jLCIfRqLDJ4A== + +"@tsconfig/node14@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.0.tgz#5bd046e508b1ee90bc091766758838741fdefd6e" + integrity sha512-RKkL8eTdPv6t5EHgFKIVQgsDapugbuOptNd9OOunN/HAkzmmTnZELx1kNCK0rSdUYGmiFMM3rRQMAWiyp023LQ== + +"@tsconfig/node16@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.1.tgz#a6ca6a9a0ff366af433f42f5f0e124794ff6b8f1" + integrity sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA== + +"@types/accepts@*", "@types/accepts@^1.3.5": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.5.tgz#c34bec115cfc746e04fe5a059df4ce7e7b391575" + integrity sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ== + dependencies: + "@types/node" "*" + +"@types/argparse@1.0.38": + version "1.0.38" + resolved "https://registry.yarnpkg.com/@types/argparse/-/argparse-1.0.38.tgz#a81fd8606d481f873a3800c6ebae4f1d768a56a9" + integrity sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA== + +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": + version "7.1.15" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.15.tgz#2ccfb1ad55a02c83f8e0ad327cbc332f55eb1024" + integrity sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.3.tgz#f456b4b2ce79137f768aa130d2423d2f0ccfaba5" + integrity sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" + integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== + dependencies: + "@babel/types" "^7.3.0" + +"@types/bluebird@*": + version "3.5.35" + resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.35.tgz#3964c48372bf62d60616d8673dd77a9719ebac9b" + integrity sha512-2WeeXK7BuQo7yPI4WGOBum90SzF/f8rqlvpaXx4rjeTmNssGRDHWf7fgDUH90xMB3sUOu716fUK5d+OVx0+ncQ== + +"@types/body-parser@*", "@types/body-parser@1.19.0": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" + integrity sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/bson@*": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@types/bson/-/bson-4.0.3.tgz#30889d2ffde6262abbe38659364c631454999fbf" + integrity sha512-mVRvYnTOZJz3ccpxhr3wgxVmSeiYinW+zlzQz3SXWaJmD1DuL05Jeq7nKw3SnbKmbleW5qrLG5vdyWe/A9sXhw== + dependencies: + "@types/node" "*" + +"@types/connect@*": + version "3.4.34" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.34.tgz#170a40223a6d666006d93ca128af2beb1d9b1901" + integrity sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ== + dependencies: + "@types/node" "*" + +"@types/content-disposition@*": + version "0.5.3" + resolved "https://registry.yarnpkg.com/@types/content-disposition/-/content-disposition-0.5.3.tgz#0aa116701955c2faa0717fc69cd1596095e49d96" + integrity sha512-P1bffQfhD3O4LW0ioENXUhZ9OIa0Zn+P7M+pWgkCKaT53wVLSq0mrKksCID/FGHpFhRSxRGhgrQmfhRuzwtKdg== + +"@types/continuation-local-storage@*": + version "3.2.3" + resolved "https://registry.yarnpkg.com/@types/continuation-local-storage/-/continuation-local-storage-3.2.3.tgz#e4d5b5fddae1a432b78d19d48875c7e297f566e2" + integrity sha512-4LYeWblV+6puK9tFGM7Zr4OLZkVXmaL7hUK6/wHwbfwM+q7v+HZyBWTXkNOiC9GqOxv7ehhi5TMCbebZWeVYtw== + dependencies: + "@types/node" "*" + +"@types/cookie-parser@^1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@types/cookie-parser/-/cookie-parser-1.4.2.tgz#e4d5c5ffda82b80672a88a4281aaceefb1bd9df5" + integrity sha512-uwcY8m6SDQqciHsqcKDGbo10GdasYsPCYkH3hVegj9qAah6pX5HivOnOuI3WYmyQMnOATV39zv/Ybs0bC/6iVg== + dependencies: + "@types/express" "*" + +"@types/cookies@*": + version "0.7.6" + resolved "https://registry.yarnpkg.com/@types/cookies/-/cookies-0.7.6.tgz#71212c5391a976d3bae57d4b09fac20fc6bda504" + integrity sha512-FK4U5Qyn7/Sc5ih233OuHO0qAkOpEcD/eG6584yEiLKizTFRny86qHLe/rej3HFQrkBuUjF4whFliAdODbVN/w== + dependencies: + "@types/connect" "*" + "@types/express" "*" + "@types/keygrip" "*" + "@types/node" "*" + +"@types/cors@2.8.8": + version "2.8.8" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.8.tgz#317a8d8561995c60e35b9e0fcaa8d36660c98092" + integrity sha512-fO3gf3DxU2Trcbr75O7obVndW/X5k8rJNZkLXlQWStTHhP71PkRqjwPIEI0yMnJdg9R9OasjU+Bsr+Hr1xy/0w== + dependencies: + "@types/express" "*" + +"@types/cors@^2.8.10": + version "2.8.10" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.10.tgz#61cc8469849e5bcdd0c7044122265c39cec10cf4" + integrity sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ== + +"@types/dotenv@^8.2.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@types/dotenv/-/dotenv-8.2.0.tgz#5cd64710c3c98e82d9d15844375a33bf1b45d053" + integrity sha512-ylSC9GhfRH7m1EUXBXofhgx4lUWmFeQDINW5oLuS+gxWdfUeW4zJdeVTYVkexEW+e2VUvlZR2kGnGGipAWR7kw== + dependencies: + dotenv "*" + +"@types/express-serve-static-core@4.17.19": + version "4.17.19" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.19.tgz#00acfc1632e729acac4f1530e9e16f6dd1508a1d" + integrity sha512-DJOSHzX7pCiSElWaGR8kCprwibCB/3yW6vcT8VG3P0SJjnv19gnWG/AZMfM60Xj/YJIp/YCaDHyvzsFVeniARA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express-serve-static-core@^4.17.18": + version "4.17.18" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.18.tgz#8371e260f40e0e1ca0c116a9afcd9426fa094c40" + integrity sha512-m4JTwx5RUBNZvky/JJ8swEJPKFd8si08pPF2PfizYjGZOKr/svUWPcoUmLow6MmPzhasphB7gSTINY67xn3JNA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@*", "@types/express@4.17.11", "@types/express@^4.17.11": + version "4.17.11" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.11.tgz#debe3caa6f8e5fcda96b47bd54e2f40c4ee59545" + integrity sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.18" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/fs-capacitor@*": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/fs-capacitor/-/fs-capacitor-2.0.0.tgz#17113e25817f584f58100fb7a08eed288b81956e" + integrity sha512-FKVPOCFbhCvZxpVAMhdBdTfVfXUpsh15wFHgqOKxh9N9vzWZVuWCSijZ5T4U34XYNnuj2oduh6xcs1i+LPI+BQ== + dependencies: + "@types/node" "*" + +"@types/graceful-fs@^4.1.2": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + dependencies: + "@types/node" "*" + +"@types/graphql-upload@^8.0.6": + version "8.0.6" + resolved "https://registry.yarnpkg.com/@types/graphql-upload/-/graphql-upload-8.0.6.tgz#6212b69fabb171389ca3c29e0a54b8c0d7b12301" + integrity sha512-PNFVwWMy1btDKN51ncAZbD2sTFdqGq416Tk/pUC/U5op97Vg0uw9/4psOPkDn+oEZMJjH0xMMFyJAH2lnoOxSA== + dependencies: + "@types/express" "*" + "@types/fs-capacitor" "*" + "@types/koa" "*" + graphql "^15.3.0" + +"@types/http-assert@*": + version "1.5.1" + resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.5.1.tgz#d775e93630c2469c2f980fc27e3143240335db3b" + integrity sha512-PGAK759pxyfXE78NbKxyfRcWYA/KwW17X290cNev/qAsn9eQIxkH4shoNBafH37wewhDG/0p1cHPbK6+SzZjWQ== + +"@types/http-errors@*": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-1.8.0.tgz#682477dbbbd07cd032731cb3b0e7eaee3d026b69" + integrity sha512-2aoSC4UUbHDj2uCsCxcG/vRMXey/m17bC7UwitVm5hn22nI8O8Y9iDpA76Orc+DWkQ4zZrOKEshCqR/jSuXAHA== + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" + integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^26.0.23": + version "26.0.24" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.24.tgz#943d11976b16739185913a1936e0de0c4a7d595a" + integrity sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w== + dependencies: + jest-diff "^26.0.0" + pretty-format "^26.0.0" + +"@types/json-schema@^7.0.3": + version "7.0.7" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" + integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== + +"@types/json2csv@^5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@types/json2csv/-/json2csv-5.0.3.tgz#759514772a90e35b08c10808dedeaf52248af418" + integrity sha512-ZJEv6SzhPhgpBpxZU4n/TZekbZqI4EcyXXRwms1lAITG2kIAtj85PfNYafUOY1zy8bWs5ujaub0GU4copaA0sw== + dependencies: + "@types/node" "*" + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + +"@types/keygrip@*": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.2.tgz#513abfd256d7ad0bf1ee1873606317b33b1b2a72" + integrity sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw== + +"@types/koa-compose@*": + version "3.2.5" + resolved "https://registry.yarnpkg.com/@types/koa-compose/-/koa-compose-3.2.5.tgz#85eb2e80ac50be95f37ccf8c407c09bbe3468e9d" + integrity sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ== + dependencies: + "@types/koa" "*" + +"@types/koa@*": + version "2.13.1" + resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.13.1.tgz#e29877a6b5ad3744ab1024f6ec75b8cbf6ec45db" + integrity sha512-Qbno7FWom9nNqu0yHZ6A0+RWt4mrYBhw3wpBAQ3+IuzGcLlfeYkzZrnMq5wsxulN2np8M4KKeUpTodsOsSad5Q== + dependencies: + "@types/accepts" "*" + "@types/content-disposition" "*" + "@types/cookies" "*" + "@types/http-assert" "*" + "@types/http-errors" "*" + "@types/keygrip" "*" + "@types/koa-compose" "*" + "@types/node" "*" + +"@types/lodash@*": + version "4.14.170" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.170.tgz#0d67711d4bf7f4ca5147e9091b847479b87925d6" + integrity sha512-bpcvu/MKHHeYX+qeEN8GE7DIravODWdACVA1ctevD8CN24RhPZIKMn9ntfAsrvLfSX3cR5RrBKAbYm9bGs0A+Q== + +"@types/lodash@^4.14.168": + version "4.14.168" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.168.tgz#fe24632e79b7ade3f132891afff86caa5e5ce008" + integrity sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q== + +"@types/long@^4.0.0", "@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/mime@^1": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" + integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== + +"@types/mongodb@*", "@types/mongodb@^3.5.27": + version "3.6.8" + resolved "https://registry.yarnpkg.com/@types/mongodb/-/mongodb-3.6.8.tgz#f80f0a3022c44d8db659a936434403ca3f4661df" + integrity sha512-8qNbL5/GFrljXc/QijcuQcUMYZ1iWNcqnJ6tneROwbfU0LsAjQ9bmq3aHi5lWXM4cyBPd2F/n9INAk/pZZttHw== + dependencies: + "@types/bson" "*" + "@types/node" "*" + +"@types/mongoose@^5.10.3": + version "5.10.3" + resolved "https://registry.yarnpkg.com/@types/mongoose/-/mongoose-5.10.3.tgz#3bc6787245aa8ebbff4ed61da18f4775e0ec52cd" + integrity sha512-VfdnaFImXEJZZiuL2ID/ysZs4inOIjxwrAnUgkr5eum2O2BLhFkiSI0i87AwignVva1qWTJ3H3DyM0Rf4USJ4A== + dependencies: + "@types/mongodb" "*" + "@types/node" "*" + +"@types/multer@^1.4.6": + version "1.4.6" + resolved "https://registry.yarnpkg.com/@types/multer/-/multer-1.4.6.tgz#411950b7a99ba0de6ee8f6e3713f4628980cdc73" + integrity sha512-F4EZ+KRrzdiSm3jSFj1GVUlw3zWXus5nXYBbrQW/0MGIUv9YHw1dM0cJOxq++v2+Gl4IBdSDvQ3YCORLdyCU+Q== + dependencies: + "@types/express" "*" + +"@types/node-fetch@2.5.7": + version "2.5.7" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.7.tgz#20a2afffa882ab04d44ca786449a276f9f6bbf3c" + integrity sha512-o2WVNf5UhWRkxlf6eq+jMZDu7kjgpgJfl4xVNlvryc95O/6F2ld8ztKX+qu+Rjyet93WAWm5LjeX9H5FGkODvw== + dependencies: + "@types/node" "*" + form-data "^3.0.0" + +"@types/node-fetch@^2.5.8": + version "2.5.8" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.8.tgz#e199c835d234c7eb0846f6618012e558544ee2fb" + integrity sha512-fbjI6ja0N5ZA8TV53RUqzsKNkl9fv8Oj3T7zxW7FGv1GSH7gwJaNF8dzCjrqKaxKeUpTz4yT1DaJFq/omNpGfw== + dependencies: + "@types/node" "*" + form-data "^3.0.0" + +"@types/node@*", "@types/node@^14.14.31": + version "14.14.31" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.31.tgz#72286bd33d137aa0d152d47ec7c1762563d34055" + integrity sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g== + +"@types/node@>=12.12.47": + version "14.14.33" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.33.tgz#9e4f8c64345522e4e8ce77b334a8aaa64e2b6c78" + integrity sha512-oJqcTrgPUF29oUP8AsUqbXGJNuPutsetaa9kTQAQce5Lx5dTYWV02ScBiT/k1BX/Z7pKeqedmvp39Wu4zR7N7g== + +"@types/node@^10.1.0": + version "10.17.56" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.56.tgz#010c9e047c3ff09ddcd11cbb6cf5912725cdc2b3" + integrity sha512-LuAa6t1t0Bfw4CuSR0UITsm1hP17YL+u82kfHGrHUWdhlBtH7sa7jGY5z7glGaIj/WDYDkRtgGd+KCjCzxBW1w== + +"@types/node@^10.10.0": + version "10.17.55" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.55.tgz#a147f282edec679b894d4694edb5abeb595fecbd" + integrity sha512-koZJ89uLZufDvToeWO5BrC4CR4OUfHnUz2qoPs/daQH6qq3IN62QFxCTZ+bKaCE0xaoCAJYE4AXre8AbghCrhg== + +"@types/node@^13.7.0": + version "13.13.46" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.46.tgz#5471e176f3fa15e018dea7992072bf8ca208a3a6" + integrity sha512-dqpbzK/KDsOlEt+oyB3rv+u1IxlLFziZu/Z0adfRKoelkr+sTd6QcgiQC+HWq/vkYkHwG5ot2LxgV05aAjnhcg== + +"@types/nodemailer@^6.4.1": + version "6.4.1" + resolved "https://registry.yarnpkg.com/@types/nodemailer/-/nodemailer-6.4.1.tgz#31f96f4410632f781d3613bd1f4293649e423f75" + integrity sha512-8081UY/0XTTDpuGqCnDc8IY+Q3DSg604wB3dBH0CaZlj4nZWHWuxtZ3NRZ9c9WUrz1Vfm6wioAUnqL3bsh49uQ== + dependencies: + "@types/node" "*" + +"@types/pg@^7.14.10": + version "7.14.10" + resolved "https://registry.yarnpkg.com/@types/pg/-/pg-7.14.10.tgz#95c01de1a54e45d78058b9b5b4c365102e4113f7" + integrity sha512-m6G0mrpj71YgVgHJF0cIHC3OZTKiQSUzTkMj869a+YWXF2tdbmO2PmIpNnDkiFPhHWcoGq2bk5P2e0CZX0F9Mg== + dependencies: + "@types/node" "*" + pg-protocol "^1.2.0" + pg-types "^2.2.0" + +"@types/prettier@^2.1.5": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.3.2.tgz#fc8c2825e4ed2142473b4a81064e6e081463d1b3" + integrity sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog== + +"@types/qs@*": + version "6.9.5" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.5.tgz#434711bdd49eb5ee69d90c1d67c354a9a8ecb18b" + integrity sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ== + +"@types/range-parser@*": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" + integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== + +"@types/sequelize@*": + version "4.28.9" + resolved "https://registry.yarnpkg.com/@types/sequelize/-/sequelize-4.28.9.tgz#64d0fad07de2f30ef11003a8c2ef5ac0321de115" + integrity sha512-QqYgkw/2fEc0FyEQejnxM7cHKB8XBV3Y69k7GSFOToQBOXos0PJVqNpgROXZddXIkl2d6zicYssHuy75ws84sw== + dependencies: + "@types/bluebird" "*" + "@types/continuation-local-storage" "*" + "@types/lodash" "*" + "@types/validator" "*" + +"@types/serve-static@*": + version "1.13.9" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.9.tgz#aacf28a85a05ee29a11fb7c3ead935ac56f33e4e" + integrity sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + +"@types/swagger-ui-express@^4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@types/swagger-ui-express/-/swagger-ui-express-4.1.2.tgz#cfc884904a104c3193f46f423d04ee0416be1ef4" + integrity sha512-t9teFTU8dKe69rX9EwL6OM2hbVquYdFM+sQ0REny4RalPlxAm+zyP04B12j4c7qEuDS6CnlwICywqWStPA3v4g== + dependencies: + "@types/express" "*" + "@types/serve-static" "*" + +"@types/tmp@^0.2.0": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.2.1.tgz#83ecf4ec22a8c218c71db25f316619fe5b986011" + integrity sha512-7cTXwKP/HLOPVgjg+YhBdQ7bMiobGMuoBmrGmqwIWJv8elC6t1DfVc/mn4fD9UE1IjhwmhaQ5pGVXkmXbH0rhg== + +"@types/umzug@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@types/umzug/-/umzug-2.3.0.tgz#74ede18cf837ed8daa257c2bcf5a54e351c2a551" + integrity sha512-DUwMKFa+QmApO7I5zhqpc12n9+Mqm006+PTPKrqoZ4F38rk2+iWl8K5IjVvWemERajtkfkiBkHtH/YkOPcBQjA== + dependencies: + "@types/mongodb" "*" + "@types/sequelize" "*" + +"@types/uuid@^8.3.1": + version "8.3.1" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.1.tgz#1a32969cf8f0364b3d8c8af9cc3555b7805df14f" + integrity sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg== + +"@types/validator@*", "@types/validator@^13.1.3": + version "13.1.3" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.1.3.tgz#366b394aa3fbeed2392bf0a20ded606fa4a3d35e" + integrity sha512-DaOWN1zf7j+8nHhqXhIgNmS+ltAC53NXqGxYuBhWqWgqolRhddKzfZU814lkHQSTG0IUfQxU7Cg0gb8fFWo2mA== + +"@types/verror@^1.10.4": + version "1.10.4" + resolved "https://registry.yarnpkg.com/@types/verror/-/verror-1.10.4.tgz#805c0612b3a0c124cf99f517364142946b74ba3b" + integrity sha512-OjJdqx6QlbyZw9LShPwRW+Kmiegeg3eWNI41MQQKaG3vjdU2L9SRElntM51HmHBY1cu7izxQJ1lMYioQh3XMBg== + +"@types/ws@^7.0.0": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.1.tgz#49eacb15a0534663d53a36fbf5b4d98f5ae9a73a" + integrity sha512-ISCK1iFnR+jYv7+jLNX0wDqesZ/5RAeY3wUx6QaphmocphU61h+b+PHjS18TF4WIPTu/MMzxIq2PHr32o2TS5Q== + dependencies: + "@types/node" "*" + +"@types/yamljs@^0.2.31": + version "0.2.31" + resolved "https://registry.yarnpkg.com/@types/yamljs/-/yamljs-0.2.31.tgz#b1a620b115c96db7b3bfdf0cf54aee0c57139245" + integrity sha512-QcJ5ZczaXAqbVD3o8mw/mEBhRvO5UAdTtbvgwL/OgoWubvNBh6/MxLBAigtcgIFaq3shon9m3POIxQaLQt4fxQ== + +"@types/yargs-parser@*": + version "20.2.1" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" + integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== + +"@types/yargs@^15.0.0": + version "15.0.14" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06" + integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ== + dependencies: + "@types/yargs-parser" "*" + +"@types/yargs@^16.0.0": + version "16.0.4" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" + integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^4.4.1": + version "4.15.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.2.tgz#981b26b4076c62a5a55873fbef3fe98f83360c61" + integrity sha512-uiQQeu9tWl3f1+oK0yoAv9lt/KXO24iafxgQTkIYO/kitruILGx3uH+QtIAHqxFV+yIsdnJH+alel9KuE3J15Q== + dependencies: + "@typescript-eslint/experimental-utils" "4.15.2" + "@typescript-eslint/scope-manager" "4.15.2" + debug "^4.1.1" + functional-red-black-tree "^1.0.1" + lodash "^4.17.15" + regexpp "^3.0.0" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/experimental-utils@4.15.2": + version "4.15.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.15.2.tgz#5efd12355bd5b535e1831282e6cf465b9a71cf36" + integrity sha512-Fxoshw8+R5X3/Vmqwsjc8nRO/7iTysRtDqx6rlfLZ7HbT8TZhPeQqbPjTyk2RheH3L8afumecTQnUc9EeXxohQ== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/scope-manager" "4.15.2" + "@typescript-eslint/types" "4.15.2" + "@typescript-eslint/typescript-estree" "4.15.2" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/parser@^4.15.2", "@typescript-eslint/parser@^4.4.1": + version "4.15.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.15.2.tgz#c804474321ef76a3955aec03664808f0d6e7872e" + integrity sha512-SHeF8xbsC6z2FKXsaTb1tBCf0QZsjJ94H6Bo51Y1aVEZ4XAefaw5ZAilMoDPlGghe+qtq7XdTiDlGfVTOmvA+Q== + dependencies: + "@typescript-eslint/scope-manager" "4.15.2" + "@typescript-eslint/types" "4.15.2" + "@typescript-eslint/typescript-estree" "4.15.2" + debug "^4.1.1" + +"@typescript-eslint/scope-manager@4.15.2": + version "4.15.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.15.2.tgz#5725bda656995960ae1d004bfd1cd70320f37f4f" + integrity sha512-Zm0tf/MSKuX6aeJmuXexgdVyxT9/oJJhaCkijv0DvJVT3ui4zY6XYd6iwIo/8GEZGy43cd7w1rFMiCLHbRzAPQ== + dependencies: + "@typescript-eslint/types" "4.15.2" + "@typescript-eslint/visitor-keys" "4.15.2" + +"@typescript-eslint/types@4.15.2": + version "4.15.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.15.2.tgz#04acf3a2dc8001a88985291744241e732ef22c60" + integrity sha512-r7lW7HFkAarfUylJ2tKndyO9njwSyoy6cpfDKWPX6/ctZA+QyaYscAHXVAfJqtnY6aaTwDYrOhp+ginlbc7HfQ== + +"@typescript-eslint/typescript-estree@4.15.2": + version "4.15.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.2.tgz#c2f7a1e94f3428d229d5ecff3ead6581ee9b62fa" + integrity sha512-cGR8C2g5SPtHTQvAymEODeqx90pJHadWsgTtx6GbnTWKqsg7yp6Eaya9nFzUd4KrKhxdYTTFBiYeTPQaz/l8bw== + dependencies: + "@typescript-eslint/types" "4.15.2" + "@typescript-eslint/visitor-keys" "4.15.2" + debug "^4.1.1" + globby "^11.0.1" + is-glob "^4.0.1" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/visitor-keys@4.15.2": + version "4.15.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.2.tgz#3d1c7979ce75bf6acf9691109bd0d6b5706192b9" + integrity sha512-TME1VgSb7wTwgENN5KVj4Nqg25hP8DisXxNBojM4Nn31rYaNDIocNm5cmjOFfh42n7NVERxWrDFoETO/76ePyg== + dependencies: + "@typescript-eslint/types" "4.15.2" + eslint-visitor-keys "^2.0.0" + +"@wry/equality@^0.1.2": + version "0.1.11" + resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.1.11.tgz#35cb156e4a96695aa81a9ecc4d03787bc17f1790" + integrity sha512-mwEVBDUVODlsQQ5dfuLUS5/Tf7jqUKyhKYHmVi4fPB6bDMOfWvUPJmKgS1Z7Za/sOI3vzWt4+O7yCiL/70MogA== + dependencies: + tslib "^1.9.3" + +abab@^2.0.3, abab@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +accepts@^1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + +acorn-jsx@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" + integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== + +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn@^7.1.1, acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.2.4: + version "8.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.4.1.tgz#56c36251fc7cabc7096adc18f05afe814321a28c" + integrity sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^7.0.2: + version "7.1.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.1.1.tgz#1e6b37a454021fa9941713f38b952fc1c8d32a84" + integrity sha512-ga/aqDYnUy/o7vbsRTFhhTsNeXiYb5JWDIcRIeZfwRNCefwjNTVYCGdGSUrEmiu3yDK3vFvNbgJxvrQW4JXrYQ== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-align@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" + integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== + dependencies: + string-width "^3.0.0" + +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +any-promise@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + +anymatch@^3.0.3: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +apollo-cache-control@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/apollo-cache-control/-/apollo-cache-control-0.12.0.tgz#45aea0a232d0704e33c2b1a3c428a5500b29818c" + integrity sha512-kClF5rfAm159Nboul1LxA+l58Tjz0M8L1GUknEMpZt0UHhILLAn3BfcG3ToX4TbNoR9M57kKMUcbPWLdy3Up7w== + dependencies: + apollo-server-env "^3.0.0" + apollo-server-plugin-base "^0.11.0" + +apollo-datasource@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/apollo-datasource/-/apollo-datasource-0.8.0.tgz#8cf9103e83558bd30b3b522cb8ec80725c3160ce" + integrity sha512-gXgsGVLuejLc138z/2jUjPAzadDQxWbcLJyBgaQsg5BaXJNkv5uW/NjiSPk00cK51hyZrb0Xx8a+L+wPk2qIBA== + dependencies: + apollo-server-caching "^0.6.0" + apollo-server-env "^3.0.0" + +apollo-env@^0.6.6: + version "0.6.6" + resolved "https://registry.yarnpkg.com/apollo-env/-/apollo-env-0.6.6.tgz#d7880805c4e96ee3d4142900a405176a04779438" + integrity sha512-hXI9PjJtzmD34XviBU+4sPMOxnifYrHVmxpjykqI/dUD2G3yTiuRaiQqwRwB2RCdwC1Ug/jBfoQ/NHDTnnjndQ== + dependencies: + "@types/node-fetch" "2.5.7" + core-js "^3.0.1" + node-fetch "^2.2.0" + sha.js "^2.4.11" + +apollo-graphql@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/apollo-graphql/-/apollo-graphql-0.6.1.tgz#d0bf0aff76f445de3da10e08f6974f1bf65f5753" + integrity sha512-ZRXAV+k+hboCVS+FW86FW/QgnDR7gm/xMUwJPGXEbV53OLGuQQdIT0NCYK7AzzVkCfsbb7NJ3mmEclkZY9uuxQ== + dependencies: + apollo-env "^0.6.6" + lodash.sortby "^4.7.0" + +apollo-link@^1.2.14: + version "1.2.14" + resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.14.tgz#3feda4b47f9ebba7f4160bef8b977ba725b684d9" + integrity sha512-p67CMEFP7kOG1JZ0ZkYZwRDa369w5PIjtMjvrQd/HnIV8FRsHRqLqK+oAZQnFa1DDdZtOtHTi+aMIW6EatC2jg== + dependencies: + apollo-utilities "^1.3.0" + ts-invariant "^0.4.0" + tslib "^1.9.3" + zen-observable-ts "^0.8.21" + +apollo-reporting-protobuf@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/apollo-reporting-protobuf/-/apollo-reporting-protobuf-0.6.2.tgz#5572866be9b77f133916532b10e15fbaa4158304" + integrity sha512-WJTJxLM+MRHNUxt1RTl4zD0HrLdH44F2mDzMweBj1yHL0kSt8I1WwoiF/wiGVSpnG48LZrBegCaOJeuVbJTbtw== + dependencies: + "@apollo/protobufjs" "^1.0.3" + +apollo-server-caching@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/apollo-server-caching/-/apollo-server-caching-0.6.0.tgz#3140a023ce0be8c43ba0b2f5be9cc5d15d1a32f6" + integrity sha512-SfjKaccrhRzUQ8TAke9FrYppp4pZV3Rp8KCs+4Ox3kGtbco68acRPJkiYYtSVc4idR8XNAUOOVfAEZVNHdZQKQ== + dependencies: + lru-cache "^6.0.0" + +apollo-server-core@^2.22.2: + version "2.22.2" + resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-2.22.2.tgz#daee67a17aa4f1bf0df3e448e237a37324906b5d" + integrity sha512-YPrhfN+I5vUerc4c0I6pd89fdqP5UNYCt/+MGv4bDA/a0kOCLvzylkQ3NlEepK1fewtqf4QO+S1LscC8vMmYdg== + dependencies: + "@apollographql/apollo-tools" "^0.4.3" + "@apollographql/graphql-playground-html" "1.6.27" + "@apollographql/graphql-upload-8-fork" "^8.1.3" + "@josephg/resolvable" "^1.0.0" + "@types/ws" "^7.0.0" + apollo-cache-control "^0.12.0" + apollo-datasource "^0.8.0" + apollo-graphql "^0.6.0" + apollo-reporting-protobuf "^0.6.2" + apollo-server-caching "^0.6.0" + apollo-server-env "^3.0.0" + apollo-server-errors "^2.4.2" + apollo-server-plugin-base "^0.11.0" + apollo-server-types "^0.7.0" + apollo-tracing "^0.13.0" + async-retry "^1.2.1" + fast-json-stable-stringify "^2.0.0" + graphql-extensions "^0.13.0" + graphql-tag "^2.11.0" + graphql-tools "^4.0.8" + loglevel "^1.6.7" + lru-cache "^6.0.0" + sha.js "^2.4.11" + subscriptions-transport-ws "^0.9.11" + uuid "^8.0.0" + ws "^6.0.0" + +apollo-server-env@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/apollo-server-env/-/apollo-server-env-3.0.0.tgz#0157c51f52b63aee39af190760acf789ffc744d9" + integrity sha512-tPSN+VttnPsoQAl/SBVUpGbLA97MXG990XIwq6YUnJyAixrrsjW1xYG7RlaOqetxm80y5mBZKLrRDiiSsW/vog== + dependencies: + node-fetch "^2.1.2" + util.promisify "^1.0.0" + +apollo-server-errors@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/apollo-server-errors/-/apollo-server-errors-2.4.2.tgz#1128738a1d14da989f58420896d70524784eabe5" + integrity sha512-FeGxW3Batn6sUtX3OVVUm7o56EgjxDlmgpTLNyWcLb0j6P8mw9oLNyAm3B+deHA4KNdNHO5BmHS2g1SJYjqPCQ== + +apollo-server-express@^2.22.2: + version "2.22.2" + resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-2.22.2.tgz#30ac15e0298d4d06188e6ae86284dad937139274" + integrity sha512-MRiWF/oT6toUz909iq1I08vKfRxaqRMKS/v9kzyEXcnuudUCQ5WnxrjZEh/iMEfr7RHSQ4STjY7E/ZooPnueqA== + dependencies: + "@apollographql/graphql-playground-html" "1.6.27" + "@types/accepts" "^1.3.5" + "@types/body-parser" "1.19.0" + "@types/cors" "2.8.8" + "@types/express" "4.17.11" + "@types/express-serve-static-core" "4.17.19" + accepts "^1.3.5" + apollo-server-core "^2.22.2" + apollo-server-types "^0.7.0" + body-parser "^1.18.3" + cors "^2.8.4" + express "^4.17.1" + graphql-subscriptions "^1.0.0" + graphql-tools "^4.0.8" + parseurl "^1.3.2" + subscriptions-transport-ws "^0.9.16" + type-is "^1.6.16" + +apollo-server-plugin-base@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/apollo-server-plugin-base/-/apollo-server-plugin-base-0.11.0.tgz#6ceeb4d5f643ed739fd00e8b26d9981186c200d0" + integrity sha512-Du68x0XCyQ6EWlgoL9Z+1s8fJfXgY131QbKP7ao617StQPzwB0aGCwxBDfcMt1A75VXf4TkvV1rdUH5YeJFlhQ== + dependencies: + apollo-server-types "^0.7.0" + +apollo-server-types@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/apollo-server-types/-/apollo-server-types-0.7.0.tgz#a9b62974ada5da5edb6157a41d8ddb993b57203a" + integrity sha512-pJ6ri2N4xJ+e2PUUPHeCNpMDzHUagJyn0DDZGQmXDz6aoMlSd4B2KUvK81hHyHkw3wHk9clgcpfM9hKqbfZweA== + dependencies: + apollo-reporting-protobuf "^0.6.2" + apollo-server-caching "^0.6.0" + apollo-server-env "^3.0.0" + +apollo-server@^2.22.2: + version "2.22.2" + resolved "https://registry.yarnpkg.com/apollo-server/-/apollo-server-2.22.2.tgz#77b1bfc8bc2f3b7468049dbe8c5b091460ba4ed5" + integrity sha512-Lt+7FxqweSMg2cn5HXksEhdZj1lOojJ+5RMNKys0hkKp9xP/qwHW7+NrFTcItRstHPz27filleAHjoziaWdpiA== + dependencies: + apollo-server-core "^2.22.2" + apollo-server-express "^2.22.2" + express "^4.0.0" + graphql-subscriptions "^1.0.0" + graphql-tools "^4.0.8" + stoppable "^1.1.0" + +apollo-tracing@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/apollo-tracing/-/apollo-tracing-0.13.0.tgz#8621b1ae351f862bb48b6de7a85696288977d148" + integrity sha512-28z4T+XfLQ6t696usU0nTFDxVN8BfF3o74d2p/zsT4eu1OuoyoDOEmVJqdInmVRpyTJK0tDEOjkIuDJJHZftog== + dependencies: + apollo-server-env "^3.0.0" + apollo-server-plugin-base "^0.11.0" + +apollo-utilities@^1.0.1, apollo-utilities@^1.3.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.3.4.tgz#6129e438e8be201b6c55b0f13ce49d2c7175c9cf" + integrity sha512-pk2hiWrCXMAy2fRPwEyhvka+mqwzeP60Jr1tRYi5xru+3ko94HI9o6lK0CT33/w4RDlxWchmdhDCrvdr+pHCig== + dependencies: + "@wry/equality" "^0.1.2" + fast-json-stable-stringify "^2.0.0" + ts-invariant "^0.4.0" + tslib "^1.10.0" + +append-field@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/append-field/-/append-field-1.0.0.tgz#1e3440e915f0b1203d23748e78edd7b9b5b43e56" + integrity sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY= + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7, argparse@~1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-includes@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" + integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + get-intrinsic "^1.1.1" + is-string "^1.0.5" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.flat@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" + integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + +arrify@^2.0.0, arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + +assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async-mutex@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.3.1.tgz#7033af665f1c7cebed8b878267a43ba9e77c5f67" + integrity sha512-vRfQwcqBnJTLzVQo72Sf7KIUbcSUP5hNchx6udI1U6LuPQpfePgdjJzlCe76yFZ8pxlLjn9lwcl/Ya0TSOv0Tw== + dependencies: + tslib "^2.1.0" + +async-retry@^1.2.1, async-retry@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.1.tgz#139f31f8ddce50c0870b0ba558a6079684aaed55" + integrity sha512-aiieFW/7h3hY0Bq5d+ktDBejxuwR78vRu9hDUdR8rNhSaQ29VzPL4AoIRG7D/c7tdenwOcKvgPM6tIxB3cB6HA== + dependencies: + retry "0.12.0" + +async@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" + integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +babel-jest@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.0.6.tgz#e99c6e0577da2655118e3608b68761a5a69bd0d8" + integrity sha512-iTJyYLNc4wRofASmofpOc5NK9QunwMk+TLFgGXsTFS8uEqmd8wdI7sga0FPe2oVH3b5Agt/EAK1QjPEuKL8VfA== + dependencies: + "@jest/transform" "^27.0.6" + "@jest/types" "^27.0.6" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.0.0" + babel-preset-jest "^27.0.6" + chalk "^4.0.0" + graceful-fs "^4.2.4" + slash "^3.0.0" + +babel-plugin-istanbul@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" + integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^4.0.0" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.6.tgz#f7c6b3d764af21cb4a2a1ab6870117dbde15b456" + integrity sha512-CewFeM9Vv2gM7Yr9n5eyyLVPRSiBnk6lKZRjgwYnGKSl9M14TMn2vkN02wTF04OGuSDLEzlWiMzvjXuW9mB6Gw== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.0.6.tgz#909ef08e9f24a4679768be2f60a3df0856843f9d" + integrity sha512-WObA0/Biw2LrVVwZkF/2GqbOdzhKD6Fkdwhoy9ASIrOWr/zodcSpQh72JOkEn6NWyjmnPDjNSqaGN4KnpKzhXw== + dependencies: + babel-plugin-jest-hoist "^27.0.6" + babel-preset-current-node-syntax "^1.0.0" + +backo2@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-js@^1.3.0, base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bignumber.js@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5" + integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bl@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/bl/-/bl-2.2.1.tgz#8c11a7b730655c5d56898cdc871224f40fd901d5" + integrity sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g== + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +bluebird@3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" + integrity sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA== + +body-parser@1.19.0, body-parser@^1.18.3: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +boxen@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" + integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^5.3.1" + chalk "^3.0.0" + cli-boxes "^2.2.0" + string-width "^4.1.0" + term-size "^2.1.0" + type-fest "^0.8.1" + widest-line "^3.1.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.1, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + +browserslist@^4.16.6: + version "4.16.8" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.8.tgz#cb868b0b554f137ba6e33de0ecff2eda403c4fb0" + integrity sha512-sc2m9ohR/49sWEbPj14ZSSZqp+kbi16aLao42Hmn3Z8FpjuMaq2xCA2l4zl9ITfyzvnvyE0hcg62YkIGKxgaNQ== + dependencies: + caniuse-lite "^1.0.30001251" + colorette "^1.3.0" + electron-to-chromium "^1.3.811" + escalade "^3.1.1" + node-releases "^1.1.75" + +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +bson@^1.1.4: + version "1.1.5" + resolved "https://registry.yarnpkg.com/bson/-/bson-1.1.5.tgz#2aaae98fcdf6750c0848b0cba1ddec3c73060a34" + integrity sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg== + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-writer@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04" + integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +busboy@^0.2.11: + version "0.2.14" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453" + integrity sha1-bCpiLvz0fFe7vh4qnDetNseSVFM= + dependencies: + dicer "0.2.5" + readable-stream "1.1.x" + +busboy@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b" + integrity sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw== + dependencies: + dicer "0.3.0" + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.1.0, camelcase@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + +caniuse-lite@^1.0.30001251: + version "1.0.30001251" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz#6853a606ec50893115db660f82c094d18f096d85" + integrity sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A== + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +chokidar@^3.2.2: + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +ci-info@^3.1.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.2.0.tgz#2876cb948a498797b5236f0095bc057d0dca38b6" + integrity sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A== + +cjs-module-lexer@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== + +cli-boxes@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +color-convert@^1.9.0, color-convert@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.5.2: + version "1.5.5" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014" + integrity sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@3.0.x: + version "3.0.0" + resolved "https://registry.yarnpkg.com/color/-/color-3.0.0.tgz#d920b4328d534a3ac8295d68f7bd4ba6c427be9a" + integrity sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.2" + +colorette@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.3.0.tgz#ff45d2f0edb244069d3b772adeb04fed38d0a0af" + integrity sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w== + +colors@^1.2.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +colors@~1.2.1: + version "1.2.5" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.2.5.tgz#89c7ad9a374bc030df8013241f68136ed8835afc" + integrity sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg== + +colorspace@1.1.x: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.2.tgz#e0128950d082b86a2168580796a0aa5d6c68d8c5" + integrity sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ== + dependencies: + color "3.0.x" + text-hex "1.0.x" + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" + integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +compressible@^2.0.12: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +configstore@^5.0.0, configstore@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== + dependencies: + dot-prop "^5.2.0" + graceful-fs "^4.1.2" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" + +confusing-browser-globals@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz#30d1e7f3d1b882b25ec4933d1d1adac353d20a59" + integrity sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA== + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +cookie-parser@^1.4.5: + version "1.4.5" + resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.5.tgz#3e572d4b7c0c80f9c61daf604e4336831b5d1d49" + integrity sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw== + dependencies: + cookie "0.4.0" + cookie-signature "1.0.6" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +core-js@^3.0.1: + version "3.10.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.10.0.tgz#9a020547c8b6879f929306949e31496bbe2ae9b3" + integrity sha512-MQx/7TLgmmDVamSyfE+O+5BHvG1aUGj/gHhLn1wVtm2B5u1eVIPvh7vkfjwWKNCjrTJB8+He99IntSQ1qP+vYQ== + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cors@^2.8.4, cors@^2.8.5: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +cssfilter@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae" + integrity sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4= + +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + +dataloader@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.0.0.tgz#41eaf123db115987e21ca93c005cd7753c55fe6f" + integrity sha512-YzhyDAwA4TaQIhM5go+vCLmU0UikghC/t9DTQYZR2M/UvZ1MdOhPezSDZcjj9uqQJOMqjLcpWtyW2iNINdlatQ== + +date-and-time@^0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/date-and-time/-/date-and-time-0.14.2.tgz#a4266c3dead460f6c231fe9674e585908dac354e" + integrity sha512-EFTCh9zRSEpGPmJaexg7HTuzZHh6cnJj1ui7IGCFNXzd2QdpsNh05Db5TF3xzJm30YN+A8/6xHSuRcQqoc3kFA== + +debug@2.6.9, debug@^2.2.0, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.0.1, debug@^4.1.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +debug@^3.2.6: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.0, debug@^4.2.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== + dependencies: + ms "2.1.2" + +decimal.js@^10.2.1: + version "10.3.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" + integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@^0.1.3, deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +denque@^1.4.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.0.tgz#773de0686ff2d8ec2ff92914316a47b73b1c73de" + integrity sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +deprecated-decorator@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz#00966317b7a12fe92f3cc831f7583af329b86c37" + integrity sha1-AJZjF7ehL+kvPMgx91g68ym4bDc= + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +dicer@0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f" + integrity sha1-WZbAhrszIYyBLAkL3cCc0S+stw8= + dependencies: + readable-stream "1.1.x" + streamsearch "0.1.2" + +dicer@0.3.0, dicer@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.3.0.tgz#eacd98b3bfbf92e8ab5c2fdb71aaac44bb06b872" + integrity sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA== + dependencies: + streamsearch "0.1.2" + +diff-sequences@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" + integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== + +diff-sequences@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.0.6.tgz#3305cb2e55a033924054695cc66019fd7f8e5723" + integrity sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dotenv@*, dotenv@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + +dottie@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dottie/-/dottie-2.0.2.tgz#cc91c0726ce3a054ebf11c55fbc92a7f266dd154" + integrity sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg== + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +duplexify@^4.0.0, duplexify@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.1.tgz#7027dc374f157b122a8ae08c2d3ea4d2d953aa61" + integrity sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA== + dependencies: + end-of-stream "^1.4.1" + inherits "^2.0.3" + readable-stream "^3.1.1" + stream-shift "^1.0.0" + +ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +electron-to-chromium@^1.3.811: + version "1.3.818" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.818.tgz#32ed024fa8316e5d469c96eecbea7d2463d80085" + integrity sha512-c/Z9gIr+jDZAR9q+mn40hEc1NharBT+8ejkarjbCDnBNFviI6hvcC5j2ezkAXru//bTnQp5n6iPi0JA83Tla1Q== + +emittery@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" + integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +enabled@2.0.x: + version "2.0.0" + resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" + integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +ent@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" + integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= + +error-ex@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: + version "1.18.0-next.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.2.tgz#088101a55f0541f595e7e057199e27ddc8f3a5c2" + integrity sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-negative-zero "^2.0.1" + is-regex "^1.1.1" + object-inspect "^1.9.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.3" + string.prototype.trimstart "^1.0.3" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-goat@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +eslint-config-airbnb-base@^14.2.0, eslint-config-airbnb-base@^14.2.1: + version "14.2.1" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz#8a2eb38455dc5a312550193b319cdaeef042cd1e" + integrity sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA== + dependencies: + confusing-browser-globals "^1.0.10" + object.assign "^4.1.2" + object.entries "^1.1.2" + +eslint-config-airbnb-typescript@^12.3.1: + version "12.3.1" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-12.3.1.tgz#83ab40d76402c208eb08516260d1d6fac8f8acbc" + integrity sha512-ql/Pe6/hppYuRp4m3iPaHJqkBB7dgeEmGPQ6X0UNmrQOfTF+dXw29/ZjU2kQ6RDoLxaxOA+Xqv07Vbef6oVTWw== + dependencies: + "@typescript-eslint/parser" "^4.4.1" + eslint-config-airbnb "^18.2.0" + eslint-config-airbnb-base "^14.2.0" + +eslint-config-airbnb@^18.2.0: + version "18.2.1" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-18.2.1.tgz#b7fe2b42f9f8173e825b73c8014b592e449c98d9" + integrity sha512-glZNDEZ36VdlZWoxn/bUR1r/sdFKPd1mHPbqUtkctgNG4yT2DLLtJ3D+yCV+jzZCc2V1nBVkmdknOJBZ5Hc0fg== + dependencies: + eslint-config-airbnb-base "^14.2.1" + object.assign "^4.1.2" + object.entries "^1.1.2" + +eslint-config-prettier@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.0.0.tgz#024d661444319686c588c8849c8da33815dbdb1c" + integrity sha512-5EaAVPsIHu+grmm5WKjxUia4yHgRrbkd8I0ffqUSwixCPMVBrbS97UnzlEY/Q7OWo584vgixefM0kJnUfo/VjA== + +eslint-import-resolver-node@^0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" + integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== + dependencies: + debug "^2.6.9" + resolve "^1.13.1" + +eslint-module-utils@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" + integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== + dependencies: + debug "^2.6.9" + pkg-dir "^2.0.0" + +eslint-plugin-import@^2.22.1: + version "2.22.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702" + integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== + dependencies: + array-includes "^3.1.1" + array.prototype.flat "^1.2.3" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.4" + eslint-module-utils "^2.6.0" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.1" + read-pkg-up "^2.0.0" + resolve "^1.17.0" + tsconfig-paths "^3.9.0" + +eslint-plugin-prettier@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz#7079cfa2497078905011e6f82e8dd8453d1371b7" + integrity sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-scope@^5.0.0, eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^2.0.0, eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + +eslint@^7.20.0: + version "7.20.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.20.0.tgz#db07c4ca4eda2e2316e7aa57ac7fc91ec550bdc7" + integrity sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw== + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.3.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" + esutils "^2.0.2" + file-entry-cache "^6.0.0" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash "^4.17.20" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.4" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + +esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +eventemitter3@^3.1.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" + integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expect@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.0.6.tgz#a4d74fbe27222c718fff68ef49d78e26a8fd4c05" + integrity sha512-psNLt8j2kwg42jGBDSfAlU49CEZxejN1f1PlANWDZqIhBOVU/c2Pm888FcjWJzFewhIsNWfZJeLjUjtKGiPuSw== + dependencies: + "@jest/types" "^27.0.6" + ansi-styles "^5.0.0" + jest-get-type "^27.0.6" + jest-matcher-utils "^27.0.6" + jest-message-util "^27.0.6" + jest-regex-util "^27.0.6" + +express@^4.0.0, express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + +fast-glob@^3.1.1: + version "3.2.5" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" + integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fast-safe-stringify@^2.0.4: + version "2.0.7" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" + integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== + +fast-text-encoding@^1.0.0, fast-text-encoding@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz#ec02ac8e01ab8a319af182dae2681213cfe9ce53" + integrity sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig== + +fastq@^1.6.0: + version "1.10.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.10.1.tgz#8b8f2ac8bf3632d67afcd65dac248d5fdc45385e" + integrity sha512-AWuv6Ery3pM+dY7LYS8YIaCiQvUaos9OB1RyNgaOWnaX+Tik7Onvcsf8x8c+YtDeT0maYLniBip2hox5KtEXXA== + dependencies: + reusify "^1.0.4" + +faye-websocket@0.11.3: + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + dependencies: + websocket-driver ">=0.5.1" + +fb-watchman@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= + dependencies: + pend "~1.2.0" + +fecha@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.0.tgz#3ffb6395453e3f3efff850404f0a59b6747f5f41" + integrity sha512-aN3pcx/DSmtyoovUudctc8+6Hl4T+hI9GBBHLjA76jdZl7+b1sgh5g4k+u/GL3dTy1/pnYzKp69FpJ0OicE3Wg== + +file-entry-cache@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-cache-dir@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-package-json@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/find-package-json/-/find-package-json-1.2.0.tgz#4057d1b943f82d8445fe52dc9cf456f6b8b58083" + integrity sha512-+SOGcLGYDJHtyqHd87ysBhmaeQ95oWspDKnMXBrnQ9Eq4OkLNqejgoaD8xVWu6GPa0B6roa6KinCMEMcVeqONw== + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +firebase-admin@^9.5.0: + version "9.5.0" + resolved "https://registry.yarnpkg.com/firebase-admin/-/firebase-admin-9.5.0.tgz#438bc343f1fa0644c2bdbeb36eefec3eda3bf966" + integrity sha512-OPXFOTDcAE+NORpfhq7YMEDk+vFClBtjfpkrjm2JHRxb8DpMm+K3AcusonFPU/WOH4FhiVN9JHB0+NPE20S3gQ== + dependencies: + "@firebase/database" "^0.8.1" + "@firebase/database-types" "^0.6.1" + "@types/node" "^10.10.0" + dicer "^0.3.0" + jsonwebtoken "^8.5.1" + node-forge "^0.10.0" + optionalDependencies: + "@google-cloud/firestore" "^4.5.0" + "@google-cloud/storage" "^5.3.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" + integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== + +fn.name@1.x.x: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" + integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +fs-capacitor@^2.0.4, fs-capacitor@^6.1.0, fs-capacitor@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/fs-capacitor/-/fs-capacitor-6.2.0.tgz#fa79ac6576629163cb84561995602d8999afb7f5" + integrity sha512-nKcE1UduoSKX27NSZlg879LdQc94OtbOsEmKMN2MBNudXREvijRKx2GEBsTMTfws+BrbkJoEuynbGSVRSpauvw== + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-jetpack@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/fs-jetpack/-/fs-jetpack-4.1.0.tgz#d693fcffd3cedbd8829226967866b9e89f290f0f" + integrity sha512-h4nHLIcCaxnXfUWhwP+mLnar03R2DBlqicNvKJG44TJob8RV6GB8EKNwJgSaBeDAfqWhqq01y+Ao96vRwpXlPw== + dependencies: + minimatch "^3.0.2" + rimraf "^2.6.3" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^2.3.2, fsevents@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gaxios@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-4.2.0.tgz#33bdc4fc241fc33b8915a4b8c07cfb368b932e46" + integrity sha512-Ms7fNifGv0XVU+6eIyL9LB7RVESeML9+cMvkwGS70xyD6w2Z80wl6RiqiJ9k1KFlJCUTQqFFc8tXmPQfSKUe8g== + dependencies: + abort-controller "^3.0.0" + extend "^3.0.2" + https-proxy-agent "^5.0.0" + is-stream "^2.0.0" + node-fetch "^2.3.0" + +gcp-metadata@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-4.2.1.tgz#31849fbcf9025ef34c2297c32a89a1e7e9f2cd62" + integrity sha512-tSk+REe5iq/N+K+SK1XjZJUrFPuDqGZVzCy2vocIHIGmPlTGsa8owXMJwGkrXr73NO0AzhPW4MF2DEHz7P2AVw== + dependencies: + gaxios "^4.0.0" + json-bigint "^1.0.0" + +gcs-resumable-upload@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/gcs-resumable-upload/-/gcs-resumable-upload-3.1.3.tgz#1e38e1339600b85812e6430a5ab455453c64cce3" + integrity sha512-LjVrv6YVH0XqBr/iBW0JgRA1ndxhK6zfEFFJR4im51QVTj/4sInOXimY2evDZuSZ75D3bHxTaQAdXRukMc1y+w== + dependencies: + abort-controller "^3.0.0" + configstore "^5.0.0" + extend "^3.0.2" + gaxios "^4.0.0" + google-auth-library "^7.0.0" + pumpify "^2.0.0" + stream-events "^1.0.4" + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-port@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" + integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== + +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" + integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== + +glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + +glob@7.1.6, glob@^7.1.3: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.4, glob@^7.1.6: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" + integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== + dependencies: + ini "1.3.7" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" + +globby@^11.0.1: + version "11.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.2.tgz#1af538b766a3b540ebfb58a32b2e2d5897321d83" + integrity sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + +google-auth-library@^6.1.1: + version "6.1.6" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-6.1.6.tgz#deacdcdb883d9ed6bac78bb5d79a078877fdf572" + integrity sha512-Q+ZjUEvLQj/lrVHF/IQwRo6p3s8Nc44Zk/DALsN+ac3T4HY/g/3rrufkgtl+nZ1TW7DNAw5cTChdVp4apUXVgQ== + dependencies: + arrify "^2.0.0" + base64-js "^1.3.0" + ecdsa-sig-formatter "^1.0.11" + fast-text-encoding "^1.0.0" + gaxios "^4.0.0" + gcp-metadata "^4.2.0" + gtoken "^5.0.4" + jws "^4.0.0" + lru-cache "^6.0.0" + +google-auth-library@^7.0.0, google-auth-library@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-7.0.2.tgz#cab6fc7f94ebecc97be6133d6519d9946ccf3e9d" + integrity sha512-vjyNZR3pDLC0u7GHLfj+Hw9tGprrJwoMwkYGqURCXYITjCrP9HprOyxVV+KekdLgATtWGuDkQG2MTh0qpUPUgg== + dependencies: + arrify "^2.0.0" + base64-js "^1.3.0" + ecdsa-sig-formatter "^1.0.11" + fast-text-encoding "^1.0.0" + gaxios "^4.0.0" + gcp-metadata "^4.2.0" + gtoken "^5.0.4" + jws "^4.0.0" + lru-cache "^6.0.0" + +google-gax@^2.9.2: + version "2.11.2" + resolved "https://registry.yarnpkg.com/google-gax/-/google-gax-2.11.2.tgz#9ef7773b94aaa61c4588fb2408d62e8444995026" + integrity sha512-PNqXv7Oi5XBMgoMWVxLZHUidfMv7cPHrDSDXqLyEd6kY6pqFnVKC8jt2T1df4JPSc2+VLPdeo6L7X9mbdQG8Xw== + dependencies: + "@grpc/grpc-js" "~1.2.0" + "@grpc/proto-loader" "^0.5.1" + "@types/long" "^4.0.0" + abort-controller "^3.0.0" + duplexify "^4.0.0" + fast-text-encoding "^1.0.3" + google-auth-library "^7.0.2" + is-stream-ended "^0.1.4" + node-fetch "^2.6.1" + protobufjs "^6.10.2" + retry-request "^4.0.0" + +google-p12-pem@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-3.0.3.tgz#673ac3a75d3903a87f05878f3c75e06fc151669e" + integrity sha512-wS0ek4ZtFx/ACKYF3JhyGe5kzH7pgiQ7J5otlumqR9psmWMYc+U9cErKlCYVYHoUaidXHdZ2xbo34kB+S+24hA== + dependencies: + node-forge "^0.10.0" + +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +graceful-fs@^4.1.2: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + +graceful-fs@^4.2.4: + version "4.2.8" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" + integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== + +graphql-extensions@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.13.0.tgz#34d7f9c1bf49d09c4f1fa8b5d33e6c961a1889fb" + integrity sha512-Bb7E97nvfX4gtrIdZ/i5YFlqOd6MGzrw8ED+t4wQVraYje6NQ+8P8MHMOV2WZLfbW8zsNTx8NdnnlbsdH5siag== + dependencies: + "@apollographql/apollo-tools" "^0.4.3" + apollo-server-env "^3.0.0" + apollo-server-types "^0.7.0" + +graphql-middleware@^6.0.6: + version "6.0.6" + resolved "https://registry.yarnpkg.com/graphql-middleware/-/graphql-middleware-6.0.6.tgz#9bc0a50d087a88c6d5c2f944870102835fafca9e" + integrity sha512-XdcLKohmwHwVWVkiKmPyA6nxYzckx4ZiBbrQxkhEQb2wRo8TP9FWCJb1vLQrh+7astWPAzjQX91/1iSdIZkO/Q== + dependencies: + "@graphql-tools/delegate" "^7.1.1" + "@graphql-tools/schema" "^7.1.3" + +graphql-subscriptions@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-1.2.1.tgz#2142b2d729661ddf967b7388f7cf1dd4cf2e061d" + integrity sha512-95yD/tKi24q8xYa7Q9rhQN16AYj5wPbrb8tmHGM3WRc9EBmWrG/0kkMl+tQG8wcEuE9ibR4zyOM31p5Sdr2v4g== + dependencies: + iterall "^1.3.0" + +graphql-tag@^2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.11.0.tgz#1deb53a01c46a7eb401d6cb59dec86fa1cccbffd" + integrity sha512-VmsD5pJqWJnQZMUeRwrDhfgoyqcfwEkvtpANqcoUG8/tOLkwNgU9mzub/Mc78OJMhHjx7gfAMTxzdG43VGg3bA== + +graphql-tools@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-4.0.8.tgz#e7fb9f0d43408fb0878ba66b522ce871bafe9d30" + integrity sha512-MW+ioleBrwhRjalKjYaLQbr+920pHBgy9vM/n47sswtns8+96sRn5M/G+J1eu7IMeKWiN/9p6tmwCHU7552VJg== + dependencies: + apollo-link "^1.2.14" + apollo-utilities "^1.0.1" + deprecated-decorator "^0.1.6" + iterall "^1.1.3" + uuid "^3.1.0" + +graphql-upload@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/graphql-upload/-/graphql-upload-11.0.0.tgz#24b245ff18f353bab6715e8a055db9fd73035e10" + integrity sha512-zsrDtu5gCbQFDWsNa5bMB4nf1LpKX9KDgh+f8oL1288ijV4RxeckhVozAjqjXAfRpxOHD1xOESsh6zq8SjdgjA== + dependencies: + busboy "^0.3.1" + fs-capacitor "^6.1.0" + http-errors "^1.7.3" + isobject "^4.0.0" + object-path "^0.11.4" + +graphql-upload@^12.0.0: + version "12.0.0" + resolved "https://registry.yarnpkg.com/graphql-upload/-/graphql-upload-12.0.0.tgz#2351d20d294e920fb25d2eba9f7c352e37a1a02b" + integrity sha512-ovZ3Q7sZ17Bmn8tYl22MfrpNR7nYM/DUszXWgkue7SFIlI9jtqszHAli8id8ZcnGBc9GF0gUTNSskYWW+5aNNQ== + dependencies: + busboy "^0.3.1" + fs-capacitor "^6.2.0" + http-errors "^1.8.0" + isobject "^4.0.0" + object-path "^0.11.5" + +graphql@^15.3.0: + version "15.5.1" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.5.1.tgz#f2f84415d8985e7b84731e7f3536f8bb9d383aad" + integrity sha512-FeTRX67T3LoE3LWAxxOlW2K3Bz+rMYAC18rRguK4wgXaTZMiJwSUwDmPFo3UadAKbzirKIg5Qy+sNJXbpPRnQw== + +graphql@^15.5.0: + version "15.5.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.5.0.tgz#39d19494dbe69d1ea719915b578bf920344a69d5" + integrity sha512-OmaM7y0kaK31NKG31q4YbD2beNYa6jBBKtMFT6gLYJljHLJr42IqJ8KX08u3Li/0ifzTU5HjmoOOrwa5BRLeDA== + +gtoken@^5.0.4: + version "5.2.1" + resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-5.2.1.tgz#4dae1fea17270f457954b4a45234bba5fc796d16" + integrity sha512-OY0BfPKe3QnMsY9MzTHTSKn+Vl2l1CcLe6BwDEQj00mbbkl5nyQ/7EUREstg4fQNZ8iYE7br4JJ7TdKeDOPWmw== + dependencies: + gaxios "^4.0.0" + google-p12-pem "^3.0.3" + jws "^4.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has-yarn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" + integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-stream-validation@^0.2.2: + version "0.2.4" + resolved "https://registry.yarnpkg.com/hash-stream-validation/-/hash-stream-validation-0.2.4.tgz#ee68b41bf822f7f44db1142ec28ba9ee7ccb7512" + integrity sha512-Gjzu0Xn7IagXVkSu9cSFuK1fqzwtLwFhNhVL8IFJijRNMgUttFbBSIAzKuSIrsFMO1+g1RlsoN49zPIbwPDMGQ== + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@^1.7.3, http-errors@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.0.tgz#75d1bbe497e1044f51e4ee9e704a62f28d336507" + integrity sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-parser-js@>=0.5.1: + version "0.5.3" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" + integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== + +http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore-by-default@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +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" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + +import-local@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" + integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +inflection@1.12.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.12.0.tgz#a200935656d6f5f6bc4dc7502e1aecb703228416" + integrity sha1-ogCTVlbW9fa8TcdQLhrstwMihBY= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" + integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== + +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" + integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-ci@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.0.tgz#c7e7be3c9d8eef7d0fa144390bd1e4b88dc4c994" + integrity sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ== + dependencies: + ci-info "^3.1.1" + +is-core-module@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-installed-globally@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" + integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== + dependencies: + global-dirs "^2.0.1" + is-path-inside "^3.0.1" + +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-npm@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" + integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-inside@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" + integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== + +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + +is-promise@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" + integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== + +is-regex@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" + integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== + dependencies: + call-bind "^1.0.2" + has-symbols "^1.0.1" + +is-stream-ended@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-stream-ended/-/is-stream-ended-0.1.4.tgz#f50224e95e06bce0e356d440a4827cd35b267eda" + integrity sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw== + +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-yarn-global@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" + integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + +isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" + integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== + +istanbul-lib-coverage@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" + integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== + +istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" + integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" + integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +iterall@^1.1.3, iterall@^1.2.1, iterall@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea" + integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg== + +jest-changed-files@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.0.6.tgz#bed6183fcdea8a285482e3b50a9a7712d49a7a8b" + integrity sha512-BuL/ZDauaq5dumYh5y20sn4IISnf1P9A0TDswTxUi84ORGtVa86ApuBHqICL0vepqAnZiY6a7xeSPWv2/yy4eA== + dependencies: + "@jest/types" "^27.0.6" + execa "^5.0.0" + throat "^6.0.1" + +jest-circus@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.0.6.tgz#dd4df17c4697db6a2c232aaad4e9cec666926668" + integrity sha512-OJlsz6BBeX9qR+7O9lXefWoc2m9ZqcZ5Ohlzz0pTEAG4xMiZUJoacY8f4YDHxgk0oKYxj277AfOk9w6hZYvi1Q== + dependencies: + "@jest/environment" "^27.0.6" + "@jest/test-result" "^27.0.6" + "@jest/types" "^27.0.6" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + expect "^27.0.6" + is-generator-fn "^2.0.0" + jest-each "^27.0.6" + jest-matcher-utils "^27.0.6" + jest-message-util "^27.0.6" + jest-runtime "^27.0.6" + jest-snapshot "^27.0.6" + jest-util "^27.0.6" + pretty-format "^27.0.6" + slash "^3.0.0" + stack-utils "^2.0.3" + throat "^6.0.1" + +jest-cli@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.0.6.tgz#d021e5f4d86d6a212450d4c7b86cb219f1e6864f" + integrity sha512-qUUVlGb9fdKir3RDE+B10ULI+LQrz+MCflEH2UJyoUjoHHCbxDrMxSzjQAPUMsic4SncI62ofYCcAvW6+6rhhg== + dependencies: + "@jest/core" "^27.0.6" + "@jest/test-result" "^27.0.6" + "@jest/types" "^27.0.6" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + import-local "^3.0.2" + jest-config "^27.0.6" + jest-util "^27.0.6" + jest-validate "^27.0.6" + prompts "^2.0.1" + yargs "^16.0.3" + +jest-config@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.0.6.tgz#119fb10f149ba63d9c50621baa4f1f179500277f" + integrity sha512-JZRR3I1Plr2YxPBhgqRspDE2S5zprbga3swYNrvY3HfQGu7p/GjyLOqwrYad97tX3U3mzT53TPHVmozacfP/3w== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^27.0.6" + "@jest/types" "^27.0.6" + babel-jest "^27.0.6" + chalk "^4.0.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.4" + is-ci "^3.0.0" + jest-circus "^27.0.6" + jest-environment-jsdom "^27.0.6" + jest-environment-node "^27.0.6" + jest-get-type "^27.0.6" + jest-jasmine2 "^27.0.6" + jest-regex-util "^27.0.6" + jest-resolve "^27.0.6" + jest-runner "^27.0.6" + jest-util "^27.0.6" + jest-validate "^27.0.6" + micromatch "^4.0.4" + pretty-format "^27.0.6" + +jest-diff@^26.0.0: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" + integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== + dependencies: + chalk "^4.0.0" + diff-sequences "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-diff@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.0.6.tgz#4a7a19ee6f04ad70e0e3388f35829394a44c7b5e" + integrity sha512-Z1mqgkTCSYaFgwTlP/NUiRzdqgxmmhzHY1Tq17zL94morOHfHu3K4bgSgl+CR4GLhpV8VxkuOYuIWnQ9LnFqmg== + dependencies: + chalk "^4.0.0" + diff-sequences "^27.0.6" + jest-get-type "^27.0.6" + pretty-format "^27.0.6" + +jest-docblock@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.0.6.tgz#cc78266acf7fe693ca462cbbda0ea4e639e4e5f3" + integrity sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA== + dependencies: + detect-newline "^3.0.0" + +jest-each@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.0.6.tgz#cee117071b04060158dc8d9a66dc50ad40ef453b" + integrity sha512-m6yKcV3bkSWrUIjxkE9OC0mhBZZdhovIW5ergBYirqnkLXkyEn3oUUF/QZgyecA1cF1QFyTE8bRRl8Tfg1pfLA== + dependencies: + "@jest/types" "^27.0.6" + chalk "^4.0.0" + jest-get-type "^27.0.6" + jest-util "^27.0.6" + pretty-format "^27.0.6" + +jest-environment-jsdom@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.0.6.tgz#f66426c4c9950807d0a9f209c590ce544f73291f" + integrity sha512-FvetXg7lnXL9+78H+xUAsra3IeZRTiegA3An01cWeXBspKXUhAwMM9ycIJ4yBaR0L7HkoMPaZsozCLHh4T8fuw== + dependencies: + "@jest/environment" "^27.0.6" + "@jest/fake-timers" "^27.0.6" + "@jest/types" "^27.0.6" + "@types/node" "*" + jest-mock "^27.0.6" + jest-util "^27.0.6" + jsdom "^16.6.0" + +jest-environment-node@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.0.6.tgz#a6699b7ceb52e8d68138b9808b0c404e505f3e07" + integrity sha512-+Vi6yLrPg/qC81jfXx3IBlVnDTI6kmRr08iVa2hFCWmJt4zha0XW7ucQltCAPhSR0FEKEoJ3i+W4E6T0s9is0w== + dependencies: + "@jest/environment" "^27.0.6" + "@jest/fake-timers" "^27.0.6" + "@jest/types" "^27.0.6" + "@types/node" "*" + jest-mock "^27.0.6" + jest-util "^27.0.6" + +jest-get-type@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" + integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== + +jest-get-type@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.0.6.tgz#0eb5c7f755854279ce9b68a9f1a4122f69047cfe" + integrity sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg== + +jest-haste-map@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.0.6.tgz#4683a4e68f6ecaa74231679dca237279562c8dc7" + integrity sha512-4ldjPXX9h8doB2JlRzg9oAZ2p6/GpQUNAeiYXqcpmrKbP0Qev0wdZlxSMOmz8mPOEnt4h6qIzXFLDi8RScX/1w== + dependencies: + "@jest/types" "^27.0.6" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + jest-regex-util "^27.0.6" + jest-serializer "^27.0.6" + jest-util "^27.0.6" + jest-worker "^27.0.6" + micromatch "^4.0.4" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.3.2" + +jest-jasmine2@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.0.6.tgz#fd509a9ed3d92bd6edb68a779f4738b100655b37" + integrity sha512-cjpH2sBy+t6dvCeKBsHpW41mjHzXgsavaFMp+VWRf0eR4EW8xASk1acqmljFtK2DgyIECMv2yCdY41r2l1+4iA== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^27.0.6" + "@jest/source-map" "^27.0.6" + "@jest/test-result" "^27.0.6" + "@jest/types" "^27.0.6" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + expect "^27.0.6" + is-generator-fn "^2.0.0" + jest-each "^27.0.6" + jest-matcher-utils "^27.0.6" + jest-message-util "^27.0.6" + jest-runtime "^27.0.6" + jest-snapshot "^27.0.6" + jest-util "^27.0.6" + pretty-format "^27.0.6" + throat "^6.0.1" + +jest-leak-detector@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.0.6.tgz#545854275f85450d4ef4b8fe305ca2a26450450f" + integrity sha512-2/d6n2wlH5zEcdctX4zdbgX8oM61tb67PQt4Xh8JFAIy6LRKUnX528HulkaG6nD5qDl5vRV1NXejCe1XRCH5gQ== + dependencies: + jest-get-type "^27.0.6" + pretty-format "^27.0.6" + +jest-matcher-utils@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.0.6.tgz#2a8da1e86c620b39459f4352eaa255f0d43e39a9" + integrity sha512-OFgF2VCQx9vdPSYTHWJ9MzFCehs20TsyFi6bIHbk5V1u52zJOnvF0Y/65z3GLZHKRuTgVPY4Z6LVePNahaQ+tA== + dependencies: + chalk "^4.0.0" + jest-diff "^27.0.6" + jest-get-type "^27.0.6" + pretty-format "^27.0.6" + +jest-message-util@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.0.6.tgz#158bcdf4785706492d164a39abca6a14da5ab8b5" + integrity sha512-rBxIs2XK7rGy+zGxgi+UJKP6WqQ+KrBbD1YMj517HYN3v2BG66t3Xan3FWqYHKZwjdB700KiAJ+iES9a0M+ixw== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^27.0.6" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.4" + pretty-format "^27.0.6" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.0.6.tgz#0efdd40851398307ba16778728f6d34d583e3467" + integrity sha512-lzBETUoK8cSxts2NYXSBWT+EJNzmUVtVVwS1sU9GwE1DLCfGsngg+ZVSIe0yd0ZSm+y791esiuo+WSwpXJQ5Bw== + dependencies: + "@jest/types" "^27.0.6" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + +jest-regex-util@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.0.6.tgz#02e112082935ae949ce5d13b2675db3d8c87d9c5" + integrity sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ== + +jest-resolve-dependencies@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.6.tgz#3e619e0ef391c3ecfcf6ef4056207a3d2be3269f" + integrity sha512-mg9x9DS3BPAREWKCAoyg3QucCr0n6S8HEEsqRCKSPjPcu9HzRILzhdzY3imsLoZWeosEbJZz6TKasveczzpJZA== + dependencies: + "@jest/types" "^27.0.6" + jest-regex-util "^27.0.6" + jest-snapshot "^27.0.6" + +jest-resolve@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.0.6.tgz#e90f436dd4f8fbf53f58a91c42344864f8e55bff" + integrity sha512-yKmIgw2LgTh7uAJtzv8UFHGF7Dm7XfvOe/LQ3Txv101fLM8cx2h1QVwtSJ51Q/SCxpIiKfVn6G2jYYMDNHZteA== + dependencies: + "@jest/types" "^27.0.6" + chalk "^4.0.0" + escalade "^3.1.1" + graceful-fs "^4.2.4" + jest-pnp-resolver "^1.2.2" + jest-util "^27.0.6" + jest-validate "^27.0.6" + resolve "^1.20.0" + slash "^3.0.0" + +jest-runner@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.0.6.tgz#1325f45055539222bbc7256a6976e993ad2f9520" + integrity sha512-W3Bz5qAgaSChuivLn+nKOgjqNxM7O/9JOJoKDCqThPIg2sH/d4A/lzyiaFgnb9V1/w29Le11NpzTJSzga1vyYQ== + dependencies: + "@jest/console" "^27.0.6" + "@jest/environment" "^27.0.6" + "@jest/test-result" "^27.0.6" + "@jest/transform" "^27.0.6" + "@jest/types" "^27.0.6" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.8.1" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-docblock "^27.0.6" + jest-environment-jsdom "^27.0.6" + jest-environment-node "^27.0.6" + jest-haste-map "^27.0.6" + jest-leak-detector "^27.0.6" + jest-message-util "^27.0.6" + jest-resolve "^27.0.6" + jest-runtime "^27.0.6" + jest-util "^27.0.6" + jest-worker "^27.0.6" + source-map-support "^0.5.6" + throat "^6.0.1" + +jest-runtime@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.0.6.tgz#45877cfcd386afdd4f317def551fc369794c27c9" + integrity sha512-BhvHLRVfKibYyqqEFkybsznKwhrsu7AWx2F3y9G9L95VSIN3/ZZ9vBpm/XCS2bS+BWz3sSeNGLzI3TVQ0uL85Q== + dependencies: + "@jest/console" "^27.0.6" + "@jest/environment" "^27.0.6" + "@jest/fake-timers" "^27.0.6" + "@jest/globals" "^27.0.6" + "@jest/source-map" "^27.0.6" + "@jest/test-result" "^27.0.6" + "@jest/transform" "^27.0.6" + "@jest/types" "^27.0.6" + "@types/yargs" "^16.0.0" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.4" + jest-haste-map "^27.0.6" + jest-message-util "^27.0.6" + jest-mock "^27.0.6" + jest-regex-util "^27.0.6" + jest-resolve "^27.0.6" + jest-snapshot "^27.0.6" + jest-util "^27.0.6" + jest-validate "^27.0.6" + slash "^3.0.0" + strip-bom "^4.0.0" + yargs "^16.0.3" + +jest-serializer@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.0.6.tgz#93a6c74e0132b81a2d54623251c46c498bb5bec1" + integrity sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.4" + +jest-snapshot@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.0.6.tgz#f4e6b208bd2e92e888344d78f0f650bcff05a4bf" + integrity sha512-NTHaz8He+ATUagUgE7C/UtFcRoHqR2Gc+KDfhQIyx+VFgwbeEMjeP+ILpUTLosZn/ZtbNdCF5LkVnN/l+V751A== + dependencies: + "@babel/core" "^7.7.2" + "@babel/generator" "^7.7.2" + "@babel/parser" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.0.0" + "@jest/transform" "^27.0.6" + "@jest/types" "^27.0.6" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^27.0.6" + graceful-fs "^4.2.4" + jest-diff "^27.0.6" + jest-get-type "^27.0.6" + jest-haste-map "^27.0.6" + jest-matcher-utils "^27.0.6" + jest-message-util "^27.0.6" + jest-resolve "^27.0.6" + jest-util "^27.0.6" + natural-compare "^1.4.0" + pretty-format "^27.0.6" + semver "^7.3.2" + +jest-util@^27.0.0, jest-util@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.0.6.tgz#e8e04eec159de2f4d5f57f795df9cdc091e50297" + integrity sha512-1JjlaIh+C65H/F7D11GNkGDDZtDfMEM8EBXsvd+l/cxtgQ6QhxuloOaiayt89DxUvDarbVhqI98HhgrM1yliFQ== + dependencies: + "@jest/types" "^27.0.6" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^3.0.0" + picomatch "^2.2.3" + +jest-validate@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.0.6.tgz#930a527c7a951927df269f43b2dc23262457e2a6" + integrity sha512-yhZZOaMH3Zg6DC83n60pLmdU1DQE46DW+KLozPiPbSbPhlXXaiUTDlhHQhHFpaqIFRrInko1FHXjTRpjWRuWfA== + dependencies: + "@jest/types" "^27.0.6" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^27.0.6" + leven "^3.1.0" + pretty-format "^27.0.6" + +jest-watcher@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.0.6.tgz#89526f7f9edf1eac4e4be989bcb6dec6b8878d9c" + integrity sha512-/jIoKBhAP00/iMGnTwUBLgvxkn7vsOweDrOTSPzc7X9uOyUtJIDthQBTI1EXz90bdkrxorUZVhJwiB69gcHtYQ== + dependencies: + "@jest/test-result" "^27.0.6" + "@jest/types" "^27.0.6" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^27.0.6" + string-length "^4.0.1" + +jest-worker@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.6.tgz#a5fdb1e14ad34eb228cfe162d9f729cdbfa28aed" + integrity sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^27.0.4: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.0.6.tgz#10517b2a628f0409087fbf473db44777d7a04505" + integrity sha512-EjV8aETrsD0wHl7CKMibKwQNQc3gIRBXlTikBmmHUeVMKaPFxdcUIBfoDqTSXDoGJIivAYGqCWVlzCSaVjPQsA== + dependencies: + "@jest/core" "^27.0.6" + import-local "^3.0.2" + jest-cli "^27.0.6" + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsdom@^16.6.0: + version "16.7.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" + integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== + dependencies: + abab "^2.0.5" + acorn "^8.2.4" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.3.0" + data-urls "^2.0.0" + decimal.js "^10.2.1" + domexception "^2.0.1" + escodegen "^2.0.0" + form-data "^3.0.0" + html-encoding-sniffer "^2.0.1" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.0" + parse5 "6.0.1" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.5.0" + ws "^7.4.6" + xml-name-validator "^3.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-bigint@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" + integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== + dependencies: + bignumber.js "^9.0.0" + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json2csv@^5.0.6: + version "5.0.6" + resolved "https://registry.yarnpkg.com/json2csv/-/json2csv-5.0.6.tgz#590e0e1b9579e59baa53bda0c0d840f4d8009687" + integrity sha512-0/4Lv6IenJV0qj2oBdgPIAmFiKKnh8qh7bmLFJ+/ZZHLjSeiL3fKKGX3UryvKPbxFbhV+JcYo9KUC19GJ/Z/4A== + dependencies: + commander "^6.1.0" + jsonparse "^1.3.1" + lodash.get "^4.4.2" + +json5@2.x, json5@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +jsonparse@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + +jsonwebtoken@^8.5.1: + version "8.5.1" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" + integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== + dependencies: + jws "^3.2.2" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^5.6.0" + +jwa@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" + integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jwa@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.0.tgz#a7e9c3f29dae94027ebcaf49975c9345593410fc" + integrity sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + dependencies: + jwa "^1.4.1" + safe-buffer "^5.0.1" + +jws@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.0.tgz#2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4" + integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg== + dependencies: + jwa "^2.0.0" + safe-buffer "^5.0.1" + +kareem@2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.3.2.tgz#78c4508894985b8d38a0dc15e1a8e11078f2ca93" + integrity sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ== + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +kuler@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" + integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== + +latest-version@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== + dependencies: + package-json "^6.3.0" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +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.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= + +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + +lodash@4.x, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +logform@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/logform/-/logform-2.2.0.tgz#40f036d19161fc76b68ab50fdc7fe495544492f2" + integrity sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg== + dependencies: + colors "^1.2.1" + fast-safe-stringify "^2.0.4" + fecha "^4.2.0" + ms "^2.1.1" + triple-beam "^1.3.0" + +loglevel@^1.6.7: + version "1.7.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" + integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== + +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== + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^3.0.0, make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@1.x, make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= + dependencies: + tmpl "1.0.x" + +md5-file@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/md5-file/-/md5-file-5.0.0.tgz#e519f631feca9c39e7f9ea1780b63c4745012e20" + integrity sha512-xbEFXCYVWrSx/gEKS1VPlg84h/4L20znVIulKw6kMfmBUAZNAnF00eczz9ICMl+/hjQGo5KSXRxbL/47X3rmMw== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +memory-pager@^1.0.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" + integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + +micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + +mime-db@1.46.0, "mime-db@>= 1.43.0 < 2": + version "1.46.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.46.0.tgz#6267748a7f799594de3cbc8cde91def349661cee" + integrity sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ== + +mime-types@^2.0.8, mime-types@^2.1.12, mime-types@~2.1.24: + version "2.1.29" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.29.tgz#1d4ab77da64b91f5f72489df29236563754bb1b2" + integrity sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ== + dependencies: + mime-db "1.46.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.2.0: + version "2.5.2" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" + integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +minimatch@^3.0.2, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +mkdirp@^0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +moment-timezone@^0.5.31: + version "0.5.33" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.33.tgz#b252fd6bb57f341c9b59a5ab61a8e51a73bbd22c" + integrity sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w== + dependencies: + moment ">= 2.9.0" + +"moment@>= 2.9.0", moment@^2.26.0: + version "2.29.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" + integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== + +mongodb-memory-server-core@6.10.0: + version "6.10.0" + resolved "https://registry.yarnpkg.com/mongodb-memory-server-core/-/mongodb-memory-server-core-6.10.0.tgz#9239c7941e5b0a225b50494563f0fc528c056690" + integrity sha512-Mil7M4w1231laVi3RYckVnvHANgSIHUICzdIxI5N2JM/i+uKamxkgUXmjWob188jWrWrTqeCI2vNq6KoGzRlxQ== + dependencies: + "@types/tmp" "^0.2.0" + async-mutex "^0.3.0" + camelcase "^6.1.0" + debug "^4.2.0" + find-cache-dir "^3.3.1" + find-package-json "^1.2.0" + get-port "^5.1.1" + https-proxy-agent "^5.0.0" + md5-file "^5.0.0" + mkdirp "^1.0.4" + mongodb "^3.6.9" + semver "^7.3.5" + tar-stream "^2.1.4" + tmp "^0.2.1" + tslib "^2.3.0" + uuid "^8.3.1" + yauzl "^2.10.0" + +mongodb-memory-server@^6.9.6: + version "6.10.0" + resolved "https://registry.yarnpkg.com/mongodb-memory-server/-/mongodb-memory-server-6.10.0.tgz#3011f12b69bd5cd3610eb51df57555bdab5383cb" + integrity sha512-u/n35Jdbl6CwlOlpFcCkMcVsckJNhKsldI2ImePe4+5e/kKgyktS97K5VBv5wppTVOblAbebFInnIsvSts74nQ== + dependencies: + mongodb-memory-server-core "6.10.0" + tslib "^2.3.0" + +mongodb@3.6.8: + version "3.6.8" + resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.6.8.tgz#3e2632af81915b3ff99b7681121ca0895e8ed407" + integrity sha512-sDjJvI73WjON1vapcbyBD3Ao9/VN3TKYY8/QX9EPbs22KaCSrQ5rXo5ZZd44tWJ3wl3FlnrFZ+KyUtNH6+1ZPQ== + dependencies: + bl "^2.2.1" + bson "^1.1.4" + denque "^1.4.1" + optional-require "^1.0.3" + safe-buffer "^5.1.2" + optionalDependencies: + saslprep "^1.0.0" + +mongodb@^3.6.9: + version "3.6.11" + resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.6.11.tgz#8a59a0491a92b00a8c925f72ed9d9a5b054aebb2" + integrity sha512-4Y4lTFHDHZZdgMaHmojtNAlqkvddX2QQBEN0K//GzxhGwlI9tZ9R0vhbjr1Decw+TF7qK0ZLjQT292XgHRRQgw== + dependencies: + bl "^2.2.1" + bson "^1.1.4" + denque "^1.4.1" + optional-require "^1.0.3" + safe-buffer "^5.1.2" + optionalDependencies: + saslprep "^1.0.0" + +mongoose-legacy-pluralize@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz#3ba9f91fa507b5186d399fb40854bff18fb563e4" + integrity sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ== + +mongoose@^5.12.12: + version "5.12.12" + resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-5.12.12.tgz#7da29c7d7924ad1fb07b5c5fc0acde2f4aaff4f9" + integrity sha512-n+ZmGApaL5x/r92w6S4pb+c075i+YKzg1F9YWkznSzQMtvetj/2dSjj2cqsITpd6z60k3K7ZaosIl6hzHwUA9g== + dependencies: + "@types/mongodb" "^3.5.27" + bson "^1.1.4" + kareem "2.3.2" + mongodb "3.6.8" + mongoose-legacy-pluralize "1.0.2" + mpath "0.8.3" + mquery "3.2.5" + ms "2.1.2" + regexp-clone "1.0.0" + safe-buffer "5.2.1" + sift "13.5.2" + sliced "1.0.1" + +mpath@0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.8.3.tgz#828ac0d187f7f42674839d74921970979abbdd8f" + integrity sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA== + +mquery@3.2.5: + version "3.2.5" + resolved "https://registry.yarnpkg.com/mquery/-/mquery-3.2.5.tgz#8f2305632e4bb197f68f60c0cffa21aaf4060c51" + integrity sha512-VjOKHHgU84wij7IUoZzFRU07IAxd5kWJaDmyUzQlbjHjyoeK5TNeeo8ZsFDtTYnSgpW6n/nMNIHvE3u8Lbrf4A== + dependencies: + bluebird "3.5.1" + debug "3.1.0" + regexp-clone "^1.0.0" + safe-buffer "5.1.2" + sliced "1.0.1" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multer@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/multer/-/multer-1.4.2.tgz#2f1f4d12dbaeeba74cb37e623f234bf4d3d2057a" + integrity sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg== + dependencies: + append-field "^1.0.0" + busboy "^0.2.11" + concat-stream "^1.5.2" + mkdirp "^0.5.1" + object-assign "^4.1.1" + on-finished "^2.3.0" + type-is "^1.6.4" + xtend "^4.0.0" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-fetch@^2.1.2, node-fetch@^2.2.0, node-fetch@^2.3.0, node-fetch@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + +node-releases@^1.1.75: + version "1.1.75" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.75.tgz#6dd8c876b9897a1b8e5a02de26afa79bb54ebbfe" + integrity sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw== + +nodemailer@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.5.0.tgz#d12c28d8d48778918e25f1999d97910231b175d9" + integrity sha512-Tm4RPrrIZbnqDKAvX+/4M+zovEReiKlEXWDzG4iwtpL9X34MJY+D5LnQPH/+eghe8DLlAVshHAJZAZWBGhkguw== + +nodemon@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.7.tgz#6f030a0a0ebe3ea1ba2a38f71bf9bab4841ced32" + integrity sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA== + dependencies: + chokidar "^3.2.2" + debug "^3.2.6" + ignore-by-default "^1.0.1" + minimatch "^3.0.4" + pstree.remy "^1.1.7" + semver "^5.7.1" + supports-color "^5.5.0" + touch "^3.1.0" + undefsafe "^2.0.3" + update-notifier "^4.1.0" + +nopt@~1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= + dependencies: + abbrev "1" + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^4.1.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" + integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nwsapi@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + +object-assign@^4, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-inspect@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" + integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-path@^0.11.4, object-path@^0.11.5: + version "0.11.5" + resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.5.tgz#d4e3cf19601a5140a55a16ad712019a9c50b577a" + integrity sha512-jgSbThcoR/s+XumvGMTMf81QVBmah+/Q7K7YduKeKVWL7N111unR2d6pZZarSk6kY/caeNxUDyxOvMWyzoU2eg== + +object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.entries@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.3.tgz#c601c7f168b62374541a07ddbd3e2d5e4f7711a6" + integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + has "^1.0.3" + +object.getownpropertydescriptors@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" + integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + +object.values@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.3.tgz#eaa8b1e17589f02f698db093f7c62ee1699742ee" + integrity sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + has "^1.0.3" + +on-finished@^2.3.0, on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +one-time@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" + integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== + dependencies: + fn.name "1.x.x" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +optional-require@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/optional-require/-/optional-require-1.0.3.tgz#275b8e9df1dc6a17ad155369c2422a440f89cb07" + integrity sha512-RV2Zp2MY2aeYK5G+B/Sps8lW5NHAzE5QClbFP15j+PWmP+T9PxlJXBOOLoSAdgwFvS4t0aMR4vpedMkbHfh0nA== + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +p-each-series@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" + integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +package-json@^6.3.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== + dependencies: + got "^9.6.0" + registry-auth-token "^4.0.0" + registry-url "^5.0.0" + semver "^6.2.0" + +packet-reader@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" + integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse5@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parseurl@^1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + +pg-connection-string@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.4.0.tgz#c979922eb47832999a204da5dbe1ebf2341b6a10" + integrity sha512-3iBXuv7XKvxeMrIgym7njT+HlZkwZqqGX4Bu9cci8xHZNT+Um1gWKqCsAzcC0d95rcKMU5WBg6YRUcHyV0HZKQ== + +pg-int8@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" + integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== + +pg-pool@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.2.2.tgz#a560e433443ed4ad946b84d774b3f22452694dff" + integrity sha512-ORJoFxAlmmros8igi608iVEbQNNZlp89diFVx6yV5v+ehmpMY9sK6QgpmgoXbmkNaBAx8cOOZh9g80kJv1ooyA== + +pg-protocol@^1.2.0, pg-protocol@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.4.0.tgz#43a71a92f6fe3ac559952555aa3335c8cb4908be" + integrity sha512-El+aXWcwG/8wuFICMQjM5ZSAm6OWiJicFdNYo+VY3QP+8vI4SvLIWVe51PppTzMhikUJR+PsyIFKqfdXPz/yxA== + +pg-types@^2.1.0, pg-types@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3" + integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== + dependencies: + pg-int8 "1.0.1" + postgres-array "~2.0.0" + postgres-bytea "~1.0.0" + postgres-date "~1.0.4" + postgres-interval "^1.1.0" + +pg@^8.5.1: + version "8.5.1" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.5.1.tgz#34dcb15f6db4a29c702bf5031ef2e1e25a06a120" + integrity sha512-9wm3yX9lCfjvA98ybCyw2pADUivyNWT/yIP4ZcDVpMN0og70BUWYEGXPCTAQdGTAqnytfRADb7NERrY1qxhIqw== + dependencies: + buffer-writer "2.0.0" + packet-reader "1.0.0" + pg-connection-string "^2.4.0" + pg-pool "^3.2.2" + pg-protocol "^1.4.0" + pg-types "^2.1.0" + pgpass "1.x" + +pgpass@1.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.4.tgz#85eb93a83800b20f8057a2b029bf05abaf94ea9c" + integrity sha512-YmuA56alyBq7M59vxVBfPJrGSozru8QAdoNlWuW3cz8l+UX3cWge0vTvjKhsSHSJpo3Bom8/Mm6hf0TR5GY0+w== + dependencies: + split2 "^3.1.1" + +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +picomatch@^2.2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pirates@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + dependencies: + node-modules-regexp "^1.0.0" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + +pkg-dir@^4.1.0, pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +postgres-array@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" + integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== + +postgres-bytea@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35" + integrity sha1-AntTPAqokOJtFy1Hz5zOzFIazTU= + +postgres-date@~1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" + integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== + +postgres-interval@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695" + integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== + dependencies: + xtend "^4.0.0" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" + integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== + +pretty-format@^26.0.0, pretty-format@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" + integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== + dependencies: + "@jest/types" "^26.6.2" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^17.0.1" + +pretty-format@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.0.6.tgz#ab770c47b2c6f893a21aefc57b75da63ef49a11f" + integrity sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ== + dependencies: + "@jest/types" "^27.0.6" + ansi-regex "^5.0.0" + ansi-styles "^5.0.0" + react-is "^17.0.1" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +prompts@^2.0.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.1.tgz#befd3b1195ba052f9fd2fde8a486c4e82ee77f61" + integrity sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +protobufjs@^6.10.2, protobufjs@^6.8.6: + version "6.10.2" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.10.2.tgz#b9cb6bd8ec8f87514592ba3fdfd28e93f33a469b" + integrity sha512-27yj+04uF6ya9l+qfpH187aqEzfCF4+Uit0I9ZBQVqK09hk/SQzKa2MUqUpXaVa7LOFRg1TSSr3lVxGOk6c0SQ== + 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" + +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + +psl@^1.1.33: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +pstree.remy@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-2.0.1.tgz#abfc7b5a621307c728b551decbbefb51f0e4aa1e" + integrity sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw== + dependencies: + duplexify "^4.1.1" + inherits "^2.0.3" + pump "^3.0.0" + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +pupa@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" + integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== + dependencies: + escape-goat "^2.0.0" + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +queue-microtask@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.2.tgz#abf64491e6ecf0f38a6502403d4cda04f372dfd3" + integrity sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg== + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-is@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +readable-stream@1.1.x: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@^2.2.2, readable-stream@^2.3.5, readable-stream@^2.3.7: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.0, readable-stream@^3.1.1, readable-stream@^3.4.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + +reflect-metadata@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== + +regexp-clone@1.0.0, regexp-clone@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/regexp-clone/-/regexp-clone-1.0.0.tgz#222db967623277056260b992626354a04ce9bf63" + integrity sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw== + +regexpp@^3.0.0, regexpp@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + +registry-auth-token@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" + integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== + dependencies: + rc "^1.2.8" + +registry-url@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== + dependencies: + rc "^1.2.8" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve@^1.10.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.20.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + +retry-as-promised@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/retry-as-promised/-/retry-as-promised-3.2.0.tgz#769f63d536bec4783549db0777cb56dadd9d8543" + integrity sha512-CybGs60B7oYU/qSQ6kuaFmRd9sTZ6oXSc0toqePvV74Ac6/IFZSI1ReFQmtCN+uvW1Mtqdwpvt/LGOiCBAY2Mg== + dependencies: + any-promise "^1.3.0" + +retry-request@^4.0.0, retry-request@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/retry-request/-/retry-request-4.1.3.tgz#d5f74daf261372cff58d08b0a1979b4d7cab0fde" + integrity sha512-QnRZUpuPNgX0+D1xVxul6DbJ9slvo4Rm6iV/dn63e048MvGbUZiKySVt6Tenp04JqmchxjiLltGerOJys7kJYQ== + dependencies: + debug "^4.1.1" + +retry@0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +saslprep@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226" + integrity sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag== + dependencies: + sparse-bitfield "^3.0.3" + +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + +semver-diff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== + dependencies: + semver "^6.3.0" + +"semver@2 || 3 || 4 || 5", semver@^5.6.0, semver@^5.7.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.x, semver@^7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.2.1, semver@^7.3.2: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +sequelize-pool@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/sequelize-pool/-/sequelize-pool-6.1.0.tgz#caaa0c1e324d3c2c3a399fed2c7998970925d668" + integrity sha512-4YwEw3ZgK/tY/so+GfnSgXkdwIJJ1I32uZJztIEgZeAO6HMgj64OzySbWLgxj+tXhZCJnzRfkY9gINw8Ft8ZMg== + +sequelize-typescript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sequelize-typescript/-/sequelize-typescript-2.1.0.tgz#7d42dac368f32829a736acc4f0c9f3b79fc089bb" + integrity sha512-wwPxydBQ/wIZ92pFxDQEAhW8uRHqwFZGm6JkPmpsCjrODWrH8TANZiOCjwGouygFMgBwCNK91RNwLe5TYoy5pg== + dependencies: + glob "7.1.6" + +sequelize@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-6.5.0.tgz#c968a03f6fbbcda40717f73edb39fadf27b85e96" + integrity sha512-owBt8fnzVy8E1OvyCyfCdVk7OOLyPVrBCMEf+CvRReC5oCyo+UqeXCtwaex9L6LM9ifZ1i3TG3sFeM5MgLK0CQ== + dependencies: + debug "^4.1.1" + dottie "^2.0.0" + inflection "1.12.0" + lodash "^4.17.20" + moment "^2.26.0" + moment-timezone "^0.5.31" + retry-as-promised "^3.2.0" + semver "^7.3.2" + sequelize-pool "^6.0.0" + toposort-class "^1.0.1" + uuid "^8.1.0" + validator "^10.11.0" + wkx "^0.5.0" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.11: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +sift@13.5.2: + version "13.5.2" + resolved "https://registry.yarnpkg.com/sift/-/sift-13.5.2.tgz#24a715e13c617b086166cd04917d204a591c9da6" + integrity sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA== + +signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +sliced@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" + integrity sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E= + +snakeize@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/snakeize/-/snakeize-0.1.0.tgz#10c088d8b58eb076b3229bb5a04e232ce126422d" + integrity sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0= + +source-map-support@^0.5.17, source-map-support@^0.5.6: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.5.0: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +sparse-bitfield@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" + integrity sha1-/0rm5oZWBWuks+eSqzM004JzyhE= + dependencies: + memory-pager "^1.0.2" + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.7" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" + integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== + +split2@^3.1.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +stack-trace@0.0.x: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= + +stack-utils@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" + integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw== + dependencies: + escape-string-regexp "^2.0.0" + +"statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stoppable@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/stoppable/-/stoppable-1.1.0.tgz#32da568e83ea488b08e4d7ea2c3bcc9d75015d5b" + integrity sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw== + +stream-events@^1.0.1, stream-events@^1.0.4, stream-events@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/stream-events/-/stream-events-1.0.5.tgz#bbc898ec4df33a4902d892333d47da9bf1c406d5" + integrity sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg== + dependencies: + stubs "^3.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +streamsearch@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" + integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo= + +string-argv@~0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" + integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string.prototype.trimend@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +stubs@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/stubs/-/stubs-3.0.0.tgz#e8d2ba1fa9c90570303c030b6900f7d5f89abe5b" + integrity sha1-6NK6H6nJBXAwPAMLaQD31fiavls= + +subscriptions-transport-ws@^0.9.11, subscriptions-transport-ws@^0.9.16: + version "0.9.18" + resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.18.tgz#bcf02320c911fbadb054f7f928e51c6041a37b97" + integrity sha512-tztzcBTNoEbuErsVQpTN2xUNN/efAZXyCyL5m3x4t6SKrEiTL2N8SaKWBFWM4u56pL79ULif3zjyeq+oV+nOaA== + dependencies: + backo2 "^1.0.2" + eventemitter3 "^3.1.0" + iterall "^1.2.1" + symbol-observable "^1.0.4" + ws "^5.2.0" + +supports-color@^5.3.0, supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +swagger-ui-dist@^3.18.1: + version "3.49.0" + resolved "https://registry.yarnpkg.com/swagger-ui-dist/-/swagger-ui-dist-3.49.0.tgz#8915df662b74a4dbc9583cd6d3d726c3910e3b33" + integrity sha512-R1+eT16XNP1bBLfacISifZAkFJlpwvWsS2vVurF5pbIFZnmCasD/hj+9r/q7urYdQyb0B6v11mDnuYU7rUpfQg== + +swagger-ui-express@^4.1.6: + version "4.1.6" + resolved "https://registry.yarnpkg.com/swagger-ui-express/-/swagger-ui-express-4.1.6.tgz#682294af3d5c70f74a1fa4d6a9b503a9ee55ea82" + integrity sha512-Xs2BGGudvDBtL7RXcYtNvHsFtP1DBFPMJFRxHe5ez/VG/rzVOEjazJOOSc/kSCyxreCTKfJrII6MJlL9a6t8vw== + dependencies: + swagger-ui-dist "^3.18.1" + +symbol-observable@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +table@^6.0.4: + version "6.0.7" + resolved "https://registry.yarnpkg.com/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34" + integrity sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g== + dependencies: + ajv "^7.0.2" + lodash "^4.17.20" + slice-ansi "^4.0.0" + string-width "^4.2.0" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +teeny-request@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-7.0.1.tgz#bdd41fdffea5f8fbc0d29392cb47bec4f66b2b4c" + integrity sha512-sasJmQ37klOlplL4Ia/786M5YlOcoLGQyq2TE4WHSRupbAuDaQW0PfVxV4MtdBtRJ4ngzS+1qim8zP6Zp35qCw== + dependencies: + http-proxy-agent "^4.0.0" + https-proxy-agent "^5.0.0" + node-fetch "^2.6.1" + stream-events "^1.0.5" + uuid "^8.0.0" + +term-size@^2.1.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" + integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-hex@1.0.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" + integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +throat@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" + integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== + +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.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +toposort-class@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toposort-class/-/toposort-class-1.0.1.tgz#7ffd1f78c8be28c3ba45cd4e1a3f5ee193bd9988" + integrity sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg= + +touch@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" + integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== + dependencies: + nopt "~1.0.10" + +tough-cookie@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" + integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.1.2" + +tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== + dependencies: + punycode "^2.1.1" + +triple-beam@^1.2.0, triple-beam@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" + integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw== + +ts-invariant@^0.4.0: + version "0.4.4" + resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.4.4.tgz#97a523518688f93aafad01b0e80eb803eb2abd86" + integrity sha512-uEtWkFM/sdZvRNNDL3Ehu4WVpwaulhwQszV8mrtcdeE8nN00BV9mAmQ88RkrBhFgl9gMgvjJLAQcZbnPXI9mlA== + dependencies: + tslib "^1.9.3" + +ts-jest@^27.0.3: + version "27.0.5" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-27.0.5.tgz#0b0604e2271167ec43c12a69770f0bb65ad1b750" + integrity sha512-lIJApzfTaSSbtlksfFNHkWOzLJuuSm4faFAfo5kvzOiRAuoN4/eKxVJ2zEAho8aecE04qX6K1pAzfH5QHL1/8w== + dependencies: + bs-logger "0.x" + fast-json-stable-stringify "2.x" + jest-util "^27.0.0" + json5 "2.x" + lodash "4.x" + make-error "1.x" + semver "7.x" + yargs-parser "20.x" + +ts-node@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.0.0.tgz#05f10b9a716b0b624129ad44f0ea05dac84ba3be" + integrity sha512-ROWeOIUvfFbPZkoDis0L/55Fk+6gFQNZwwKPLinacRl6tsxstTF1DbAcLKkovwnpKMVvOMHP1TIbnwXwtLg1gg== + dependencies: + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.17" + yn "3.1.1" + +tsconfig-paths@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + +tslib@^1.10.0, tslib@^1.11.1, tslib@^1.8.1, tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.3: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" + integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w== + +tslib@^2.1.0, tslib@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== + +tslib@~2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c" + integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== + +tslib@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" + integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== + +tsutils@^3.17.1: + version "3.20.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.20.0.tgz#ea03ea45462e146b53d70ce0893de453ff24f698" + integrity sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-fest@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.1.3.tgz#ea1a602e98e5a968a56a289886a52f04c686fc81" + integrity sha512-CsiQeFMR1jZEq8R+H59qe+bBevnjoV5N2WZTTdlyqxeoODQOOepN2+msQOywcieDq5sBjabKzTn3U+sfHZlMdw== + +type-is@^1.6.16, type-is@^1.6.4, type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +typescript@^4.1.5: + version "4.2.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.2.tgz#1450f020618f872db0ea17317d16d8da8ddb8c4c" + integrity sha512-tbb+NVrLfnsJy3M59lsDgrzWIflR4d4TIUjz+heUnHZwdF7YsrMTKoRERiIvI2lvBG95dfpLxB21WZhys1bgaQ== + +umzug@^3.0.0-beta.16: + version "3.0.0-beta.16" + resolved "https://registry.yarnpkg.com/umzug/-/umzug-3.0.0-beta.16.tgz#fd64f99e080f3c05faa9adae2f0e3320fc66416d" + integrity sha512-4m3wddPhKo3C5zHGtbmN9odt1wlqitPNTZFEZ6tn5Ihi7TcxEaUe4trEeP3UxIftFB15sdvDzLoYkGBQCGtXHg== + dependencies: + "@rushstack/ts-command-line" "^4.7.7" + "@types/verror" "^1.10.4" + emittery "^0.8.1" + fs-jetpack "^4.1.0" + glob "^7.1.6" + type-fest "^1.0.0" + verror "^1.10.0" + +undefsafe@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae" + integrity sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A== + dependencies: + debug "^2.2.0" + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +universalify@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +update-notifier@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" + integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== + dependencies: + boxen "^4.2.0" + chalk "^3.0.0" + configstore "^5.0.1" + has-yarn "^2.1.0" + import-lazy "^2.1.0" + is-ci "^2.0.0" + is-installed-globally "^0.3.1" + is-npm "^4.0.0" + is-yarn-global "^0.3.0" + latest-version "^5.0.0" + pupa "^2.0.1" + semver-diff "^3.1.1" + xdg-basedir "^4.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.1.tgz#77832f57ced2c9478174149cae9b96e9918cd54b" + integrity sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + for-each "^0.3.3" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.1" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^3.1.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^8.0.0, uuid@^8.1.0, uuid@^8.3.1, uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-compile-cache@^2.0.3: + version "2.2.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" + integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== + +v8-to-istanbul@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz#4229f2a99e367f3f018fa1d5c2b8ec684667c69c" + integrity sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validator@^10.11.0: + version "10.11.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-10.11.0.tgz#003108ea6e9a9874d31ccc9e5006856ccd76b228" + integrity sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw== + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +verror@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + +walker@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= + dependencies: + makeerror "1.0.x" + +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +websocket-driver@>=0.5.1: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + +winston-transport@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.4.0.tgz#17af518daa690d5b2ecccaa7acf7b20ca7925e59" + integrity sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw== + dependencies: + readable-stream "^2.3.7" + triple-beam "^1.2.0" + +winston@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/winston/-/winston-3.3.3.tgz#ae6172042cafb29786afa3d09c8ff833ab7c9170" + integrity sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw== + dependencies: + "@dabh/diagnostics" "^2.0.2" + async "^3.1.0" + is-stream "^2.0.0" + logform "^2.2.0" + one-time "^1.0.0" + readable-stream "^3.4.0" + stack-trace "0.0.x" + triple-beam "^1.3.0" + winston-transport "^4.4.0" + +wkx@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/wkx/-/wkx-0.5.0.tgz#c6c37019acf40e517cc6b94657a25a3d4aa33e8c" + integrity sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg== + dependencies: + "@types/node" "*" + +word-wrap@^1.2.3, word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@^5.2.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== + dependencies: + async-limiter "~1.0.0" + +ws@^6.0.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + +ws@^7.4.6: + version "7.5.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" + integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== + +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +xss@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.8.tgz#32feb87feb74b3dcd3d404b7a68ababf10700535" + integrity sha512-3MgPdaXV8rfQ/pNn16Eio6VXYPTkqwa0vc7GkiymmY/DqR1SE/7VPAAVZz1GJsJFrllMYO3RHfEaiUGjab6TNw== + dependencies: + commander "^2.20.3" + cssfilter "0.0.10" + +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yamljs@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/yamljs/-/yamljs-0.3.0.tgz#dc060bf267447b39f7304e9b2bfbe8b5a7ddb03b" + integrity sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ== + dependencies: + argparse "^1.0.7" + glob "^7.0.5" + +yargs-parser@20.x, yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs@^16.0.3: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zen-observable-ts@^0.8.21: + version "0.8.21" + resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.21.tgz#85d0031fbbde1eba3cd07d3ba90da241215f421d" + integrity sha512-Yj3yXweRc8LdRMrCC8nIc4kkjWecPAUVh0TI0OUrWXx6aX790vLcDlWca6I4vsyCGH3LpWxq0dJRcMOFoVqmeg== + dependencies: + tslib "^1.9.3" + zen-observable "^0.8.0" + +zen-observable@^0.8.0: + version "0.8.15" + resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" + integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ== diff --git a/db-init/create-multiple-dbs.sh b/db-init/create-multiple-dbs.sh new file mode 100755 index 0000000..aa665fa --- /dev/null +++ b/db-init/create-multiple-dbs.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +set -e +set -u + +function create_user_and_database() { + local database=$1 + echo " Creating user and database '$database'" + psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL + CREATE USER $database; + CREATE DATABASE $database; + GRANT ALL PRIVILEGES ON DATABASE $database TO $database; +EOSQL +} + +if [ -n "$POSTGRES_MULTIPLE_DATABASES" ]; then + echo "Multiple database creation requested: $POSTGRES_MULTIPLE_DATABASES" + for db in $(echo $POSTGRES_MULTIPLE_DATABASES | tr ',' ' '); do + create_user_and_database $db + done + echo "Multiple databases created" +fi diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..3e416c4 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,57 @@ +version: "3.7" + +services: + frontend: + # TODO: rename container for your project + container_name: scv2_frontend + build: + context: ./frontend + dockerfile: Dockerfile + volumes: + - ./frontend:/app + - /app/node_modules + ports: + - 3000:3000 + environment: + - CHOKIDAR_USEPOLLING=true + env_file: + - ./frontend/.env + ts-backend: + # TODO: rename container for your project + container_name: scv2_ts_backend + build: + context: ./backend/typescript + dockerfile: Dockerfile + volumes: + - ./backend/typescript:/app + - /app/node_modules + ports: + - 5000:5000 + dns: + - 8.8.8.8 + depends_on: + db: + condition: service_healthy + env_file: + - ./.env + db: + # TODO: rename container for your project + container_name: scv2_db + image: postgres:12-alpine + ports: + - 5432:5432 + volumes: + - postgres_data:/var/lib/postgresql/data/ + - ./db-init:/docker-entrypoint-initdb.d + env_file: + - ./.env + environment: + - POSTGRES_MULTIPLE_DATABASES=${POSTGRES_DB_DEV},${POSTGRES_DB_TEST} + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres"] + interval: 5s + timeout: 5s + retries: 5 + +volumes: + postgres_data: diff --git a/e2e-tests/cat.png b/e2e-tests/cat.png new file mode 100644 index 0000000000000000000000000000000000000000..ad118fa8c4907d3a6fca96df02c4bbbef3db1619 GIT binary patch literal 524387 zcmagH2bW#dl`dL2=bUrSIai&^Ip=gL=bUrZ0gSO}1IB>CHkcd@#tDo7H;h3LNJ7XU z351Zu@OA3GzSliozd!K4Z_lM&1^C@N#y7*7d+!xy+DB5=QF~o=wZ)v3Sx;4YYjG>iwSfRr5MbE zT#HUxMej1$f7^J{(uDyZo)+UGcTikSt|MF5zM+I-9O}UBkp8crKLmX6Bn%k*iz$Xr z-Xpr*@uUCZfp6ar3v))m`HtuO7tb?l0_N)Re#Lemg5EL{Rp*AUX?ywzO6bXf=--_9 z+jqdS+;IH~h*glKe#4Dtbu|#0Izk#$#(o*p0|G`s7v2Wjm9cQ%ulBQ@dh&wk4*Mc` z$?%QK2gOI6{{MhsT%)gJLB62jS+JAXGx5?k$Q3lKe8`1NAb=?^sL?f1Ob5l^u;{}U zT?-X$>QJ{p+1MXFISi&RgT=D0U&x&guEt=`E1(a82NBG~Ohi{eO=lEXDLJ4u7V}?T z`hgDw(7E@wyMDFv#~(xWE&w}znkV%K#f^cTe*_Gu6>*kf4& z_Bmjl?Z}?nxpeOYc>j16xCMxJT7iIk5yBabyvc*F)vp6=3m`))wM7un9mim({D#Kx zS%d!9sZ;UUVMkNO$Vr~T^{Y1w?>$)K3{|E0sH&Jhz5N5L(h%5pKqq0R4~)!EpoFG1 z(0;7@hM2%r6!|!J2hi1k``)rBDG-hz=8%poXx=i)@nQVA^OVl`KYjmEu?jyt&ZqDM zn6d}NJ_pg1z|aH9Am20JZG@NsU43<6NO>M3f%8X?T1M$3C~h9jB~>d?meq72o zY>pe@?#yjV!23ZfppzJ6__E3)!83dH3x};xUE+>(!%9tn=sb8F$h9DZDcxSd<$%74 zPEpSP7LuO5@Ro~MgsVJXVR>;gg<=kkhGg0>=>#FV2F1rHqfLmN?kO2uc@c7nd*rO# zyI}5}=R~<#gc$wh_FIBSv+c?)^}C?V92w2JVr!u>hbQF{k0mIJvz{6WipPK*Z101| zxdfAXBR~9*bj8Tkg|9w^OTP2mXd3;ule%Rd z45@>CXO|~W2brY|ls9*Br8Ju^aDYt(NNCP+^yUPBCEW%r_g!$Ov3Unx3EBcGSd%cFZ>}o$WG0j-8j*H`mx=5T$oq{TjL5q zJZQf{bnqY>)ndz4$i`YPzn?qS}QVQFcEuvNP#Rl8I}T=4}Bf>e;9>4<2AS|6y7p_sG%GXMADQ(MCrE`Xb^ z_W>?7E(&;cw(W&eS?3=;c;{!e ze0o$R>2f1ekKKr8Y5nVi&+d3a=>`EVmtXZeeaesu)dVu~q1coq-T}<9vIR`2olsb0vu|nb=rv-O*p@yF12A4U(9B)-f;d6c_0B9xQrPjd`w4r7iEBeE?S+V?Mk4<|iNwIsf7j7{CHAWJ&}Eh(UOgh#P!*0ptT} z2eG#Ssx3HdZ25^{)_Q7?C;a5iRY$Q1FJeXjY?A`U+_#Y74s&w`w*(D=44~sjnOZCC zyZ;B&=+~@v)35!`>UiAn#Y4EpWr@?Q@W&E8CA3U;3xX?tN{1&&Ab`0 zM2WD4sHVSw6%oak--Ke6fqJFd?OWSSE~`fmaLLgPj1T9?eJA-c!??XJrhWZNS0o!O zz~pwSOk}b*Jo?{><=ud*0T?*iMUOs zfO5EH$NWKXvZJa-*m>yp-vDFI1!ptn`*pGG4D6jFpewI{ai5_efc_Nx$ICy=Tol!X zo{3#>nw3M0Cy1+Z&b`9ULoGMQwHyY(1Whi3 z!O+$Qn=Lp4XA;Uv93Yd3zP#v zL^6*L)R{Ay7CieXKja@T;619gknIwJ3&S?b+Zh-DS9{=PTF+?H;Il5z8MRXqmGS5@=7^ZxT{SFUy{+>y9k zVr}^FIfKeTjOhX9H_w*+*^j|F0dpxl5DZuo;r9Q&bo&cXFR_UN%0pQ)IyMYJod(ep z9Z4U)o(*{f%33O*>wp7NTC~$|>qef|YCc}Z-8PWD z=3wI>p6Dcs>QxX=8lk(gP*%*qib2fK8PybGp#vfZd4 z$nq-gf)%^cbM@7nW1qls60_0vGIU@u(^Ei)2=IAbV_s}dEVx7TQ|vKLziTnhMr;UbWC~EJJqL`qU3gVZZg=$w z=f6MlyUX_(+j^NB04Lt9OQQb(#<>f$Aw%$eP)ISDqxnWuF7s@Rk9-?nK0cKkMJKqi zq5yR+brcwCHpzADfyy3o_Hm}t80gbG@>h66=L#6W z^zsz7gJCWM1sBrl$l17eClD|-GyLAmqAs&e3!A}W#W2|#v(2o?;1oUEX>)y$aR+j- z0)jrXWb&NELKpkuyHATPPJ|=pIf<|C!6>$(d{Z)!J~1xM{Gx&UYS$5YRnVp#A;4V6}g)11QHs%Z?Vy ziNBHK>~(|XVi(@THl+E9`Djn~(?Nn}9__EceIX&K$&{G6J0RAw4<8Rxy^xL0#5&NS zN(5sU_ZYg5zT$R)xz*;VKv7*G_##d8R$0n`c-R-EK`hRJ0m^IbP^0;Bs0ML=ixFS| zYhizRnEqz3;^A}zFHO{Lu49;Lx_pWkeYhHDDT-jS1kigbXwcq$6-+Q&3>j1dHeX*A zqnmZbgF$ne>U8B1Qkm=Yv&sni@UM3~$Y5@RvOp{jdWh*?Rs}Y~UF`Q8SV8fr=HP%I zD0a6zk=N){fmynbSqoHW&}0Buvm;n4$Y=P^&;0}v*!}q5o#uL>{PR}kE1N=}k9Zit@y(50 zQ!owr<$(`^tc$^xDry!XxE%BNi`T(a>RS&%XM69oe)ei9*031r-KZP zW&)@K^bIf&f|5W3pDJKW<&wZ?zQ|b-!WjnIxix@^5AbwfycB-s7fVpu#TM-+Qq@<3 zEjOReLr)!MG>=2ZFgF>l6%a56V&np3m;rJAj#3r{P^iuh)mJRwX$%(ky&uI5jeYh9 zaOKyTSR42F%fDfKfone&xgg>jJmdNUuymhcHmW{Mm&T44C?7B~qx7_UfJ+pEE~p5D zq`TsDQz3`ky2)!z1%0}F;`1NE(w%+%Mg6|7MT1o(=!cl414e?n!1J%az0>f)?Q%`$ zy~Bmq@5X2v6r0YqzkE%(A<=J2fWuVT_ z#dAaL5M!X0hX>d-7MT-!hSthX|4~&k9=v?xmz-;_4{VwD3A`ZYLAzWm3S_e88vZKy z=HuhR{uZV#_6|>$f?CK8s;$EWINJ>13QFM0oM&Ms82lu>w_Ck2j;6=WPd^zv!^fs; zI0Wnt!OS9MpjrlRZ~o((PGT$+00edgz9a3S&%I?F7jl1 zqMB)LEFv_#g_l4!pd}DP#c*nS;MVMTG=N2$T%X3M00oC-ESWiPn|E##3%DJ~aPFZn z7Z2{md$ZXVVz9cc(a*LP8cXx2ZBB)Y*CIfw>DE96`u$a)pmQsNuFX?6hY8G?qy8^Y7!ZY z7q~c!cI*=wgMaZGur^R}f+M&(H^bE)o7bC{=MIgn=Ojw1WmLpGUu01N_2n#qULKh# z1UP`aEvX!e!I?hEZR`qCW3hqrQh}qqMbWJi=1hS292hj0*^GVu%^E?OrfCpP8z|lQqicx%L0L^$GB!IIxxI(v@kN z(1W5{Q)kL;xSe|CTDc(HLPVb{%c2-$5(D_oS3d@43JTIJOe6H0paf!sdHKOZV4-64 z76IN3igQWl@z`OAkPT|{qpG`de=#_d1K^tlI06+i#!E8(=&{4Ar}{Q!aFQq2d(^1|_`tsIfBcGW!Z?wQH>t*I zBaRatpGaF0mZ?&<3X}GC9?6W*r>}uAx;h4!^gt_5{S7byxeU@obqY2ceCEeAyBGxJ+KRic>y=s2XJ+^9V3F`HI5krs7^? zr}nh6T_zWAyeJYp+0~Q`vA(ZcM6v$#$GtV2s}AH3Qh86uQ0>ad*@ZYLQ@tVO;?s;> zqh%U*HL+J^>1S{BXCYer<7FoGHxP<(=qlJmmQ4=?ok!p2ee|$Tj9)A?mYra&x$B6r zFdLeyG_v8+Jv!(&U_nHZ2;bu*TQd*r>}HrZ`ur*&Zu~}WnTOztPMKhze?K35tqY9D z@~HvyjxGidj~yL@*zjbSCufbS4@D&pVJwJ;F!y8-c`9R9CHOnfgVk|wDq7GC<0CT= zzF9-O&k!q-^DG*4{A@W!K(UB)i1zAD@NiHKhs;r)kEZ}y?0Jmss(M?i6&~t?Tfw}Ku00E( z{3v` zh|x)jAfOw>_yiX!e~a17bFJ!+w=#+C`P{sFOHzJagkN%?T&^$}pm-MA>@u-bs&X12 z^5X3a^n_ru?c77`0-P$eE}i>t8rru1{LU(M6uC`HNoE|dwV%mcR2`)eDw7C^i4y5@ z?saE#sQV!HiLA2^mVDD2P#HvhgSm z9`*s1iSF)D0bkI>o-Z+L`@nq4xkz2!7cX*OuAr};0R!mdz!Wfg&I$xfE(Cc(49iI8HG6DeoXAaV zarz}kU4yd49SfL)C!zh5suR^j8&j$kz=pkSaWXID2T;h}8imuYO*P6vK z0g6lAQnv-m9pLN>^fr(L+5#2(arcWL2T;w_7i=lzW47tj^*4mE|kCX9l6Xcsrgv*{+67`RGkbyP?i7=u+D*)!02_h zi`{H6RZ6}VRB}O#DzFK1A238hsHc^40+v()@e)haMf=wk#+ijLuq{Ykja^CHVeSBI zAswOy1hJPe5Ugq-3N#etkqEI+7r<%>25s_if=OmWxaa{8d7$0wS|fzoD>NTa=#&fi zAqdE~Z)2EOK&yNT4;CiwvFM+9QQf%q=*h_A|#!j&ZpLPB*d#16(N<#2c!o zQaP<4(g@ku!QL~>Py*K;7YVNY1YN>Je0m^n;B_Vv;2jLcI#n%xZsW{iN_W{?D1%z0;{cTC

Z6e0g`7kmA9*Afr0jOld+7O8ORw_&DzxA$?8{u3xj&&$<%$xt{e z5inyD<4#qu)sk{C9wJNB^S>B`!cA~4Kzrpu27#2*q51D+slue70~uF=nJwfjb0 zL0JGfz58T7M3!3JSf?dO?>e(x2Xg~h1l4R>m2Jw9dBVJ~+un`WK2SjC%cv#1GPCcm zFTKRGWmJIy+E4j*=T)RGAJ*|xnV=Y=DM)Qwx2nR@$F?j^Rk*C~)oT5cD6B>u-I1St z4}(8F`waLOztHU!qD?a6)e6_{aySqxXWtc7INhDf+q^-`{SG!RVsB+*VE*w5H&FWL zFR`$`x(#fHo&*wA*J*;D>mfF99}v^lA2i4ED4GKUj3Q=o7LP(!MQ3?1zJTE*c4lj|MYPfh6S^Itke7y>Lo2;mjw-gsr1VtphcYp%0%OQejzR z7aas~jY1w3D2Upg4&W-T$`Hc30YX`@1yyZj5Nn`%9`F1)q7znc3C%iUJTW~s$8IBrjhd%XX#_ zXSP%>11}7fa|A zfg1#CsxEhkS<`RBI^{uGE!sylx$~jaPE{l?tkxIPYA$qz%NBK;n$wD9%P(>2Ag0} z2GzR{9R&vEk}jyVpi&-o@L*jXAOs`9QX%Ac30Q-Z$nGsqg56qAQ6`=5>Ru2QD&2C0k@&pv_@slUO1jP_z-paeWwe)Le zWx@bVk+W}teXV>#-+yF$%iRU$$=y)!rLfIy2!KId9z5_}?`FXksTeogGa3sPED(T? z0OR>o+L#p%oQtJw&&PH_v!mC33c+_trFRZ^NGp?+r-@*;xGJ|n1&*w^faO=mXY{s{ zE7NS3z%qz$g_9_iL9FWE?iS1ny8gYp!8#d1r!p|WHNF>|K34OJS?A@@cALTGK`Pwt zV~w2{?SO#s3(tbbgR07!#02iy=y*7~0p(y=Y-TAoDh}#^+i9C~T2RC0ZS=?Z#5lLT zv%viZ9gNYnE1+zx;~uaS=vYBhM|rkY37Q*7oJ4OR#c#?nm8yQ{vHRPY~eOgAWr0uycZ-Y1xi|`f^7w^CP){>~q zatC^FiM^I_FKF>t4~C4NO&o&&>L$(RBUiVx!@LY)P_E*~7{DFW>uaoJ`2n=DDASW< z%uQ#2Vn9dy&@%&4v4Y0X^r&!eF+vF`>@TE${_GJuqxS1x%)xoPk|_v)VE`C{9+0gS zr(XvFpZ^LheOCtHhaAd?Ycll{yhcr`LVWrBMr4aOJQAoV#D8W6I{@)B(6S~_C`s9V3f)p?b< z4pVm1J8B^n+(A73Y^g6&OpTtrnTSy~k z0s@nnT*ESO5COi(7rVe;oq;)}?t^x82$phK0NxeYY=8igXClBSWB}d+QdJ90Ih$cH z9Hp@(S%Mt07b@R<%Q#90@X|@}fPzTvqZ#xT8BaH`yD-qKDEEA|0qAr_Z7>+q-aVQQ zXYhgR_k)FkRDhL#667j(7s&J;?bQCtb(2S7SWiDb+OJB;ym=4?x*VWCcz{$RSa*U; z4g}x?DzFe;xK)H(1GjBf%Dv@*GRK%e0_#2PHB!xN<&GR{w4dIC7AZG0)5liFt}yGw zm^}sP1@(g>J?fZ!Ct+DHqmjaE&v-y}XPkkdRxoa4lAVAlr~M(VivB+deo&}f_jBBY zq$@~*V2J1qFe*ACN0Om`_!^k@?_hK?-6L4iHBp*)Tpdg+9s{6z{_)^1WH1D={LVAr zGj_$!iR`J`0x4c&+_->=K*yCc04$W`!s=~T$dwUa@L^U4ux4rGkpw(Hu$Aw5^Up%# z`n5`EX)@v=bu6wMRe#xnbxHG^)L@>mL+w_#1y^QHBfF2mJ2w{t1ORQ8!g$hK2;zhL* z5yFiFpZ+3rFh2LaKS1>si_YhQHkbrV?Du~UwgoczflVE{vKgi}fdMMUXP<-aRNYzJ z-70ogXx5ghn))@2Y)dAVxe0b!78nC!JA?%*zx}Qo99O_vgLV!fM5`lfzx!Kxiu5Q zC*|gLF<^lkM%ffR55VXf50DPEJjP$#GZqSAk-AhwFRv{Oa#=xd)Rj~EV5u0Y%1dUA z;43;#kfv*gRjVc$aB4<(Zw5^Jd;Ef(bl&L8Rjiq}`IVtQ5CRryH|Q{Rs9>ZTia+z7 z%Y|oq1lrJDz^)&&k!hzx`;;1|4=15r|5anT7&44>8$An@iumYtrZTVyQgK#YR_x%j zGn@zT9H<|jXO_Lk(ME~(SG*mIF4_+y@_bhx?9F9I`1mE~iDF2gQA7*G5PQZSf5g}W zbD-|O{ER8gd}d@6itu8p zbnoAINroz8*vmeCOHAO}=ZPvAvK9pWYZXSLs7`y$P#BLeP-AuOas1>4gPZ?=Xu_8v zn98F(jI~8tbdK1;qnPFZojWXQQ2Jmow49^=e(9N))$!DuDjRl3(7A`eK75i9)KSP? zu%)Yj=ojXWZ&Udqml{1qGIxQ*GcU19avQY22R(Bu^uN6EUAgALlm^^D+@*@N7=?fS z6lB#{p7w8dV?HYUa*dBvGN$Z_K!A#+jCdirP;_v!DSDPEW2t?l+x+_ruWKKpVcBF= z2{^?pOAatqyQ@%QaP4Pl;Oz@?iIG}nE^Hfu#6maG+d9l$`-W7SxWGuSu;gY(O7a#H z{Jpu5n{ZWY8)| z`vEHD7B0aF{Xi%2!LK)E_%R#kA&4&d{OzFOC^~UH=A#E8z5&Jx$f)5efR*-B&dhP< zOE8Gh9gbT8zxj*Soc0^I`7dKP?!W~WEc2EXro%BLg$>bvpJ^@_^yj_=D!VZ7`^OWn z>*ht#%FH3@YZ9Adm;;oP3GIFlZI~ zV5>X>z?|gPi$SS8?D70-(=An;0bmtXf|lZHc;m=XsADi+?tl>#Nn`UzKUV9@1?AwI z3zfRHz}{Zw7sw`9yTVNZb8f7n4ONPB2C?eAQiV+n=^|8OV$fT?-$MTbEVT+zUCkCa z4_(j=T2-aX(|LUU%rL|^p#8h}P#vsv6y3uphV9sZ156R%NW=!j#qZ64=YRU$Pzau+ zj2&w`DfMVmB?_-=UnK^a1p-Dy6hkQI=R;kKvIOTm4fQ-(e z6Jl}DFEAaPnY|1&z$s0lD!<4;xY?Oo4tk9T&NBxUNA)2KoMs5LUD!LuIs$4zpFSsg z#+q4KY%6h zof(xUF}?~Z1g~NO_3h6!NeH;Q_a2eFK8Kp+2}$Hd zuNH$rg;k#3ZG|+cU=)!X%Y8^STa#6^|yP4ZS;{C8!A`P=)sYeCNmCSL<=#fWZ_mO3@Vkk-;)F z@q9VG1x*WFCe#AV(A?V#!APs;<5GRxFgmVa3){}O!H-~1=V2}`*pgC*#5^7hP=1L)U(0Oq~% z!BY^nA*yE`VZbaDurK^2>s$R=2;7m%U(G;WX1uE*=iKGD-5|PPL@19`lsrSeH`;W_|eHs{1CNFo*X6TeR zYRnoC+{D}h^GOp)4>K= zUSly}^uJjV7*LfNRwvqe3qv?#0NcvS5u3`7K>Ood`I-1)A`hDz0X*zx6Bv%?zC z{#&~TLsUR-b23ZzP+(w`?w$hqwt+>Kwt_QFWiMBzxy=@02~?D{TDdDG@Lcv( zW_Mc+SpVWacz_Dr-lU1q2PCU@Id+DucMwV|DfOiLhI%NpXO4N}A&EpU( zNW~B;>z79WSU)|Yf`{%Y$BLy)zrbzjpgD0BjOon?SZ28{hO~!HF}{vWjO_dm`62_vHbzO_a9P`G?92;gzL2OV>mJ^L(gKYuV&^a^<6q@5)M9j^VlPKr~B zIz23zDm+=xyFuIRK=y}mUQC~`^Q=sB5EGuc257&lk+WZ6nhmLAeR(hxC&8R!=-7d{ zKCd&*@BF0RYkmXDD5!@gr3=`et~~(8T>}B!>q)HoVnj!I+B4kTpNhCMPwNM2q=zd& ze3mEC(Fv_Pa4-@=#SB^m3kC>W=KXDFzb8ZRvp)gj_Ef)OrT~m_9;g*G;L|a`R}Lj4 zI2F7Q1h{q3OF%Y=hXqQOJO26j3%1Y-#Gu-y44g!4@MNK&0cLp_$P1)(*aRzR>~lH_ zN}+!Gu(AbXpk}5c<3P&`RjdwrOfb#atT{FNOKbUikIX_c&;UbFEoy6+vnWSgbWlyp z<$&n0#Mat9(d(K-f_GiU*JnA>|NWpH-7ZQo6Yv{|b%%jI58{chJmHYod-4u$9cZaF zY(wxCO0`*Ng53kiqXZee_u2u6O$_dazxGXH(87xI{VO1S7Qg^z?w5~6sUwPw)BoxB zce%L85d6$-U{O4?``P>YS^D2b#<}mRm6_#qAmApVDY-8~G-eR{2y^x3PqG>NwC|08 zW!Vl)kg^5IEH<>T{DEN+;M(uy8=x#J*T3`Y_-Q(%oJTugCn&Zg2bw`V9XG^WP?^T^ z1ZI>~y<)T`BUg$=6hZVwACga1nWm19&fTzAnT%jd??0DQ$n^0t27&Y0WbS&<>R^H! z5ZLINDD*|Se^RY_m4#q9{*7C>{JVGcW%faKx-+4GF2>!H2f28k54el=MQG#d>Qq4h zY(Bct;{bDGqz%`A6!c|+P4fT6}$0sEJp{ zvSsCPqrk@xEjGGB_Gg0a8dX*>bBD&7v19Vaoj8xg}dMPL3>xD{vF2LX;d z%(N>n9=9#Adq9wwsb0}Mrw(&yZEL#;UG(SFAS6#H<^=L^D19urmCZLmnfYyu&2)FRz z!lET8bz%m$N%J}6dEUJ*v;l(s=_I@Zm_nvpurPHk6gpKOhMG<-Z}sKmA@AJJJ(Pe} zX2Hgi*nHx5Hc}xfL6K!Vl#!d$!Ut&!N-l9&pkD!2$F>ug2Xn{M7p#Ilv)^2qV9=QS z+IJYw^3srrEoLPj45*vpF+63ExEq*#@%~Sq#fT+!Tr_eSoXrAQj8kD?eK&3PiWQt& zQIkPq?y@evjV(*DG4cSrrAJ;#%l<5jvl=u&-*Eu!I_A?;t0g!8ScySCSEpE6SuU3Ek~BS(MhI?rt}I(z)-a&iW6g}gZah%RBKp3 zjI$O$v9U%YHpiG10|&Mj)CS~QR+PwuAQe&N`8+X$cbj_mYH3Z+&ooz8<>GO2TNtY1 z^apZgp+;!GR0k!g8;q?eEmOVApx^j4SZJ@xD(FC2lnu`zIIfe=e!*)4HE~Sp%WV__;Bx|%eswZRV5|TadM!G~16=!^3dr;# zZ#RgOIPRXNlV<2G+f@^`kle?STytKY54iL+^wI$_2!HRb<^<6OA-cI@5BqaaQupE( zNA`Kn|cF(+59<02)ErAWv1zDjME$HIb*H?*-!!Or{zccCSLRSpl_E>Kt@h7iTvXu}wIia$K!mYN3g{_;8H<4dox1!xCy3wxv4dN& z47rWiRIncA*e4GREk+m&8tsTZmFFwM=MYdNTt_GtBMs& z-c73qg(0TZV(38Hq)1hQ7_d0I#Hb24X|6yy-N!G#gAa71+f>OdjA1qN3^;6O2n9@5 z*2&fT!Pt2Oj_qnoJgmK%11fj!Ipaqcb+$G}<^*mxd(Q=CVF)C8c!3{h%QVx8eqfjZ zMSkQI$PkE0!sqsOtEd7!8BAzFylMZ;zd@Y~Q~rh?s@8<++yEBaOg~nB z_DBxI21t-m3z;nX7_+7q#FoLG0`LAFOyvUeSo>kHCFRBHa99|k3bigPh4ZV}mO|w= z{20m(P>|z+bw6Yi51a}LbU)rEvj;E_UgxPhSeb6^=TEh$Sa_Uye%RAKXgZf3=T?G1 zA3qHSlvzy;EsnBM>YZl6`7r(FQP0F>((p{jYhiE_!5Act^j&&rv~8ZwFvbPXdg?bs zL+fG=II0P>FI;2lsf}$Fw^61WBQyKi2-J&X59&wX zZ*(pVXAjtI)4q|LZe(sZ*)x*BxqHBxL2OX~`w=h zO)%?$%lCG}9O<$Ru%2dsqEi*n_@uZ6l-tin|X zTbQ?0ZMLzFz7~{Cm?8{8Ohpw2XzJS5A7|(?L3P$%uG&X|x>P2N z_MJ!Thi8An{seSKg^Ti^zdi+J#?h6p1z&$Lg0lvy_dJv7av;B);qfW98tOG2(6ka$-T^hfmMa63uYRddv_$%r zR~gPU(d6lP0iw4pi|p?dsdKIKX0>AMJ)fcCEf;52MK(dClbLqYhtw(DwMYH#G z4`-cMxu;)&Li@t?Tg8;d3C{nPAp&-^A3P8pT>GCoWi+W9*DOW-`x`$Kg^f4^Gy#fi z>ky-1@AwI^fG>dxJ;0be&P5R_eOU$c+4bLtw%4~0L(?%k@WtI2)aZr^uA*{=2?1z7 zax=9DEipnhwm1w_Uh)PfunM+#K_!H@s15#*sVQJHMPT$G8%o8^FKU9$w*{~k50={n zMkNgtp4H9*|Bv522%ZJ{{{!PTSUAfl@f|nD^h_{qM?t6#0c}flkMLAe%zvGFiQP)T z&Bu;cXu*Bt){S5cKYKJ`cv<_8G3dcrP!e~~2FSF%dKZ}X;n@?)E(ll@QSROs25psl zXjX~J;0c1PyN{q{u};RU!4^+H0nS#{4PuFpIWvG<^Capp;B13Uso+C=-r~cz_pKm( z*3Z4o^qLRZx*z0!g)y`ao%&9(gEZUh9EVjbq z+cDD7GGEbETcQu!pq+j5I0;Ta=YIYf*tnbG#H-(HhvY)#Ai&R=F4c06&fkbvGmZG< z$_?OKAnog0=&@`j94A?#54U$1Lx2z4fQ%qU|0Gl?4AWtbLlNNfJQu*uqy117WH?uL zJk1oYwff{O7LBFyNUiq2=)_!q3AXi1cXB_1Osa*WU_3#WTXlli7euf|bnMzsm+1ph za+l1GR5rp8Ggqs9j~7%Q5PJd8kPkKp+NrNlZ#B8_)qNttb3}7y-c5qiioxjD84wWc z1vUiQk#URvXh659I%o_GcJCF$k&{wm}C_w{6;|Lqgf4}hP_aOX0A67F6#Ofv@-@;%z5>+{K2_se#cflFh6#(t`r$in5@&QrUlLS^vq0!I``5`lT zy-CnIlyhixmwOH&HaTMfXbp6@GR0^!!E(a4Iw63;5U}vzp$+vEMr_vFFPVB*l&(Vu zHd{7Xq1RrQA-Kw$3f%z3y~iZOti4wD&V*WTuA=oBNV;C-eP1ASz%RmYlSv_%7O{9Z z*a~faww-+tc=rJ=4)BH!kjkOq9BT|hLBPr;*!8C)!Lu6UMk{QLVi#WPtbOYa1`Oop zKc9Y1?4Lic>HIi=Xm^6-6(1(#QNP##>e6QUV4+d`nomXnDGgNw*JT zKs((|d@f+udH<~#=D)+l?%^aP-BTI>wi&T8|L4bFiVg{9-|j926PR{I2HG;be|qp% z2MF!Rom_Gw*>{3+i#o^%5{z>nKy$+YUAqD@sbqm_4m$nTpZ@)KkN^`9NEzYFElC9o zs_GkZHCRM$iwBfm?SD`T9x&T zQ(eI0AnO1lp00Pj;O75QQ@>|x$hUzFn6&_Fu9g8ey(21kZFlK{6QtMq->WV1UaOA! z8m1wTG7MJG36@(#m#QrDOokp>5$3}*+ga}~?dB{CAX`vI?w5Z^?ew7gfyDuC+%hi0 zG%W`37LfMCu8<6_U{WiQXP-ZI?0c`smDr}<=MUot=Vr@MXyQ)?WU_FIUvc5JZkJp>lv2Uf(S zVR(U6wGLOH(|YZ|wD0wBWn2KdMR5LANKWv@Lxy#TTqaI98w$WkyPbW4zSa?#4>b)G zY%#ImiGCRj>b4~iNHoda+1gpkMod3D5uBVTy zOz4Jf&GhB#a_QsmL2@@U$59*)-T3hLEPd_2JkMc)0@oiJ4i1Qd(ja5EWs%^Y+?JMR z3pv8vH3MbwBU#RR&7{h!i;rV$1ro5{g1F%`cZ|o(TQSG7>QaN`qRta;{;#i&8)DP` zf3x0f8MMqLyKb(lVxiC4^#?h9WpeY1-(>bqA3YW?mr{HndqDQFVz~YgQv^u&w8_k1 z2Ly7`MG9xzVe86qd$KH20J>d*uIx}2k=zvcbVG9Qf{=1xqImjmUS*@aMQ6FVwYA6GqCkk zPw>ys>1I>m++lFA6*UrDFO2`W%H$|*bfR$iZ3)anT z`j>0}cF-N`pt7L?M!=hkPk~H4d|qKC`0AR083FJnr4HAu9j2Xqw*RYBr+<{Q20Q0* zoCjkn<$-|g9WZauh;KoYs#3m&1dCx8?}euQPg^WdfmW&^qIdXBkFvA%(8Zj`!e+Jp zsJh#i39-4(&k`vh?)mI3iH*F&Xj!DIU;5hJTQ2Q(&Zv=v=S@6scuzr#v6e;bpr3k2j-2kIFh)je1|91aZkM&^3ELo=jL zw+5S_2v{8e!}zrx#&l+u=gY0=@rs6=4Vma~THn z1brLzF@6?|q8%p|tbO#Xe|bPL2J{tB3fcv&IPG_Yha_89v@xdvCM3X+x{4}XWhG04 zdst-gs4H~PjkomiDqF>kJC(ae%e)vCV22f`gT4`ree|O$(V{F;o2qOMF;F|7>i8c| zKOom~7}Q`;HvO3d%FPFB00GAtbNQA6j|3GmW}?akxvjpoJUt~`y?(aDCOk|Z)XlSL zF1Tbd$APu#BwOt_SfB@&@KT6e(0L0tF(5;pvB|8EG1R^uE3e8S?@;?+7-3;hb{F>5 z`WWOk+p5r7Vno-Udl}4$bqbW&Y=VFKdobpd;P`1T7;44H12Z(h;7HBj0Jj(qT4jO( zT^kc+5N)6XEzO{?h6IHWJzY!*0b`w|j~E;W5a(R&18W7Hgf#{&piD6a@n#j?_kSn0 zfX>t&8}7F=G@54;q(Jx&Zm-#Ves7#9?w~)PnKKTG;6`_XvcWAzTA4rTJPptc>KB#! z&jGQb0Y4GFB82Z;`HmMTrK^omPJM1h|z|fI7YQ_gb)Q zfK*tZo%kA#zuf$@p0`R$?)P7!aEJ>RtcJgPU*5dWQjtv-->?9k$PmZnXKuL?9fx}=FG4bXL*R>#@5MQyGRt`IG;Y#hpD zZL`(cm-XAAa8;|&cyKNR*t39v1T|*kIQN)8?>LFb)ou*i1JjS+DKnib+%<#GbP%j~ zU3r7gGS%qTBUQU;(AjXm0c#H!d@tMq&guvDm_o-XgFy+c^a#MWFVM_c=>Z$A0W5-4 zKKd6yuXhx?`Fyoy5Y$;ZnLWu#*&$Xy%z2<}4vYl_s4QEB$|IL#syG)0#4ll-1xl_4 z0}eqYBVhmYu3u|E5&^Ykk=FnD<3E5G4f0SePIh^pXwUH^KsD!ETeY}TMo5KzSU0XM%mnHk0TPrt?l9Sc+G2^~0lkH}pJmbF3q zu-GHUz@lvLNvM2ohh;%GmoLA6f4aS`_D6an#$Vo(R5E*m;RM2*!@=onx`X{t&_Ty_ zu7jzxX5*o{;>De_!UlL4^#r}InhZ2S(x|x$w8p8y9Ihd7XF9Ve%>(ulAPn@u#b!v+#pX(+pT?pWW5hAc1wdzf~0p)bZ5l za`O+LfyQVYg0esWCjrW`u5#U3PR>$JtxSr7(9z>!U>dkGaVB{P#!z!$TU8-nKK3~= z+Ivj-hTWIv6lnjYq&|W|#{gx#Z8#2$SqNOZUF4Vuhq18qtG^MQP2YcS{N`7?&jvD- zhaex&57>%e)ttn|A8B8_YKVoAc>!!OPDNb-G6Lu7bAg_r z5bBLkU|$ld{gQPr9VhUGXq{s|41tzGsg^fb@zEeb6FsP77+Ors5_m!em^0}8m;K8j z8bK;&Rf~c_B^@-^dHV57xST$zUD_YURrhvGV|hB7_J2>Gn58vuxiS+fZo(i}s7$WhZZiejNOn zP`dl82jzz7uCIQYDXL4=xmVOeYBKs1STCOdzy3;oN;}IU?dmIGEmK*l%3QQxT9q5Y zo0w5rP$82qKMc-PYzGOZRw0=qfKdb=Io@xIx{yd;H+3@$f$CC`IGqkiR4{){sphJ!jB;LWVm`b z#4=xrVKZb|Gld1YOp-{@@|EwXyY*{bqWSmoG&%-EOHV0wTiRjYElpqq1o>IYc^FQO z@NhZ`MKjMRvb35zb4!nYVbRpPYjgaV5f`#SsVxia5G+qX`|$|N%Ayh(Zf9_AFYTXE z7UQ8R&wPC6K$jb{r6dY$74+Hfz<@pxCwU+J=#}h{U}7CJTe(N}sXyKg1{_xf?+D|Z z(d;p#eLci zg0YLMY-7sT`?i$kIF@&$@^H%&V4pv=(+UB2jaeFi`WQxmAw4Na<68~cx7vu0ic z+An}~sk20eFj|5cI<|j~FCjiy<7}uZo=$|8Uj?@M@mp27kf-ltOJR6*l+SPyPS5=; zZnW(~j8(Hvx6FEnwBK{4J4;LUzI*`^@VffT4p$XK^I|Uf{}J{UUV2vN-tf4)ySrrE z-Q8WDad-D;2A5*R3vDSBC~YZHD5XftS|JHZAR&YV5`w(v^iJ?lN+Kk)s2_qFGq zA^q0-t@XQPU;CE5FT0;)X70y?D~e%P9`^y`E^I+JA!MraYn18zC%%a64yF;Hy zhn6;zr;lrwM2+*}9qVMk_?Czotpe5@igBV_8&?7Nv%jtMG01UZ3GmyRaHFTxKA`P^ zY-P4@-kS|adzqP7nCn1(GF?2y&IG8cpc8XHde1SOekow)9KH?|DiGKL_9;VKvBm~> z)TkJV3N2^iWiOj{oDaKew9W?WT&R|AUz|3uifhF?l&DJx@`=% zo)$Hd%Uv?Ko+rR~>cwZlxY;8CEtL-Pp8Hbz;%f(8~Xz;X=+FqZqxs-mK?tDq;-^a>FuKM2m!ozVauEAc8czY%%d~g5^{abC{>MA-vYuN$ ze`H0qFD|>2?XFJy?4dTE55xXmd6O2Cw9enQ*GoSRa-{vn3G8ENEtxV9{z>*P$>`fq-4G z!3i&(&YEX29A$hnMu2hEEeGU(9mm%Y6c3sr|o^E|r0B`+-p!e6bL z!5U8jQ?Z36u!D$VlCqA|SiM%Y^hCQ=Tm5WY-I3eZ^TJ^s23hd_K%Hq^r&C(XwTGdf zc^Zt1VKbWE>B<~dd5odp+z;G~tb9aY7=+w$KlK*G`3FXuThum;b=s>hnU+9UR*ER# z1)$Gwkzpdw{_CrMVr&F-91sU$!g{-W3BW z=-58@yYJqI-l&4bLs(!&nV+bMXWZ#Kbxmk&Q9#(9M~)-wO8c`BvFW_JgMpZC8_+FK zn270FH~x6zN4$lA_cb<(&b@St3eFF6j8~OddXnk3xFeTgbon-!%Yf)%0oz*?QWa~r z?Yv`SCiG<0fX(X6CKzCVE*@AGUATG-FvWv)d(MJ#VFFCv_Vi9^c7{m^*QT;Wj3-GcP{I=Z%WI z*p|3a7Vo*2qFFj>vMfucg=aa(i{haDXo8v7P@o_1#T!QGzWR8KAqKR+-01d%)}YTp zIrsMQ5l>|wqzi39m!Ad`Fwu0xg+PtYlkw1p&qJvPITc;~1;ijv|IfFc0XM2l+jM6q zpRZAA(5-x+{5*p>;Pc16`+;ao9A0E&_QC`7ZKas)59k|#PpYm$S(E__OVBto0VOx^ z`txUA+l9s&X9s1knXJ|R_4m;u6SM#yJ`2Y90d%J;Nc+x1F>NvhjT@m?*?Ts{wgus7 zx|L%a6%B2@w_a^jg+>lK3ftK~W=x3<+%9Lsf+y`Zv-=F6n5%{;WA3x`?Ybjr1(}rR zhtSc-!TW}S=(*f5FjLSd>te0$`Wp}cFGsHl=Fa`b2AZXAfO6!!4l@j`nYU%2unZOE zo~;-Rdl}(!5Mbbw!ptB8otw9b%DA-FMqheRhFm4k5Bl`yU>-6CXYv^tj0ljwvQO>w zvv6KmT;kUXzTuV|r}HD@P1U40+4Y8lsE+ z#&=r`qee*fNgz!`GQ?a!PJhT+6f{N#xbm*ZytHB{K{B|BYhT^o+W~8Auy@qH0~9vT ziSP>Uk>@cODWInO&tB%rm@)t}Za$;u&kx)pV|vYZ>wEnwkxdPtQv?+dpS;CZrM;kb z3JRSBB&toDF@}bAFrPk|0cX#?&gyd0O;8w9Qv(<`KhIS10WrnX=#@E;pp(~TcJiqk z%7a**?E`e|8c0AN@V-0rY@qg9{$81xT!JiSUFmT6>od<`;HewT`VxwjXJD)6t{g#) zW4sl+Ecbf&4bJRN^xp_;)1C>*)Y9pSJle_`l!BG2w*1Hx|!c%^i$R16URVpl%Qk?I{KW@=yLu z`<4afm~|Q5kW}6E*-s!*Cq=mDTZgvxjfn1i*WtZ?lI*pOW3I!Le!Q4=P*>)1fdir*Lp zQT}3a&eVQhD1*)BSy3kc_QE6VIZ=E-9koVP5!MxHau~Qbh)xh}>6)(8#6qo~W~K_5 z#o8Cx=#~lIfg8x#-#p4VhJ|hgm}E)JS3kAt#PIsXsYDZ4SWL{Q@=fM8$%{4g)dyhN zp;h2f@yx#dG=n|cS=t7D`R5m2GKJ7#8g}*N1a|5|9s?A|s}irQTl2xVZHE`B^+=e2 zV2==_4nz93M=Yxz(x}fsVcI!<@?01r#*&!?0o*LF(0b&=6EXuHqOKhd-8{Gm+?R)? zfB=sMFz)u!&(>qPS3!*fbIwH{Cqk=oXD;d(K9MDQ`dq&e+A!Q%NU&HSJARltbIqZ_QG};c)30=Z<|7Pn7Uw956Na{ z?!oxWJHb}9|B`MUF;Q-3%(TC^apJ1iqEy{*F@5v90bJ|X@BI07hQW^=T;Rn=c%#$w zhmS*st~Lfk^vTpgMt~{+?lIWX$4}+pKc0UY25(R=FEm)mYY1+QVAeYE8|nKqr^9KcJo1s^pFUMq;{r9#GNF$yed?fZBbP9RVO_+~{V zz3<{u3qJGF>-vO=`{6IWjKemk+jWJHB0BO&Fit=W`{*WUW}|aROkc2AA`D9NQ{u;%?e$8bnGzy0sO|2@RiPR)V}V-HK}I6}4GKx~Rm5aYQQSpSP4FBJp& z`z9>u<4|X)ZESi1Hc%bK(B}0Kl+m*I1MeLuMo_%Wtnq>&zGl6dIBZCE( z1`25cYdvTLuj5wtGZw)|K_k4I9|M@l8ek*rf@Ml9mv~K&wnR%iLfeI9W!~8y+S59H31jR zbOE^4;>|J{*j1LDd%z~u3?n0Vq9V+saXZ)oXX2~W;nH-ZL$mOWH&$&Kp)G(SK6;k6 zqJD7T!Ut?)c~eYHKrK=G{}vaF)zYU*^LW`UW_un8P*K&qD;DtK<}+{g=p%k;`d-HE zafxSM2CMAlb5xL5v{~eO__{5a_CY&ey{OMaG3)8#ZJR+wyfG7z-I?AKFz*Db&ND6< z8_?}!%vKv30dhh1ZG z77TC=?x|JfjnRZXSJr9@rs7xx75MZ|e&E~MtCd{xZ#=Wu9y&N^A#_qdXOeQAw(s#FmGgWKWEEgT)64%F|tAc^177q}6J8fyZ*sA!6C*g26<`$u zDsr*i&CaX};OkpNE^u%E_2_Lf(q5Tw=;_ADXrcXaCm+b6L1CHf7l46&a@zqrQ7jfZ zf3lom?~f770yiOWX#e6J4^eppz~@kN-3a}46Wl+!0~V*GJ+U`5hWfMpH3ZJm#rE1K zJefKw9MezUfXScXrCZ%{ZF>2H8wTlUnC|SwU>u|t2yGgqR>WRmrTuEH0a`5R==!@D zS!*x8WN@atzzXWYbX2I-!oV%@T9uzX6DIS_wvaa4(&;rQMs}WTlW_1A5cf1mXO4h? zBv1;g)rkQC;y^(v1(fs4VQK?0L)mjwenV5G!5aenR8enaN>x~ZaZyg7J?&@TP}uAP zyd3=?%6mV27Xk>f5jo4?d$F2Ke8AYB={hSA9acz}c;*kTx?g@28jt~sYU38$#lYP& z%iOg;Y=*+#ynf?eZ~=Y5`qR;-7Ou9D!Zha17)OKl``nq)`oU0G%G?CtO&{X*W0D(aN|0Z1|<33jgGFeZ&iMjr3TWSTDRg z%ggT0Gbw>WP(hR0QQrC2iXF~8z^ULcrXB+-FhZ!TW12c^@A8AfeJ0Ua43l-=EFGxw zshIfzjPgT(J*yNLD=qe6#w(}RK>gxQFkb%v1jLA#f#4mPhgMNN3)T*-vsDmaqLKhA zy;Z3FFi57rhYG-Qv_H_Q@4x(vZif|v4%;*!^5h@z&!u#17{h4cUJNGnH6H_=uqXrU~!pr ztTo6IwB-&4EDR`D*4yw9w^JW56Iu&oR(KR2u&Q0L-dfzIcq!gJJhF2je}RRV+Y^5@fgn!RxRaj&Z3$>=ru8R~+_+HhfOMJEc0AKEqrR6xir$ z;?lp~`g(L2#>zP|^Vu8tFQ8UBb_66}!6P&3RPFW2dtw4V_pocua_B%S9ht^`>)<9k zKwsT^?#JUt_qCch(a(cN?b$&tzX>MT)-@F%I<{>REN?XioZS~-Kvr5s|L_$@+g&!T z(J{-j4??P)7e&fEmvHtE%z_D8c*Cz>NCy{8LoCp%R8ks-mQFneMFo12^-}<1!7}Dd z*OFB*rdSQ=IA)VV;xMjQ)!t^8>BD6UymRV(l0^*>;d1qMD8_@W&Y(3Yp2Z%X&1uol z&itZNjsQRV!%ZuCuOopcs}QBlGOLWBQc!*wSU(6z)qbNpaBr6(7#ExN6G6`T4S;i7 zgJ_6;B^gSzDmozI*;%->w*Vr#wIdh@O|AMrQA&v&e}ziY^9Adwp=QZXzz z`|?-!xWe%9lXAQ}V?ZZbcsFvz45EcfYpB5>0d3iv^l~V-SVQLq_LG)% z`r>=-7xIR&kAWWp%O&~I(G}=0y@LB-)-nhEJ?wL zy>b^c@ySoXTa&;-N1MTKLM&%)0(-lTMQ8_g!)ydcm7z2~I#@Vs=idcy1MSh9F5X~Y z-vI_JgUaWail*B8V2x2cBLJksS=U6F3-p|1LICC>KD|A9jOk%8JJ^SyUx1$f^Y)$h zrmaI$X#lOyiA~Xg`LDfLcF<(Dc*$gd zD}Z+HRj?Y6fe$U~GOjO;#~ynPjS2)8L}%KK&8E}Di_n(oVVS9JiqS$@g}KsUSWR>?#Ugcmo@C3=EU|LvvUYhNtmT``0s7C}c2!hj8vb?!m;0ga|C=A%RqtGb@snlD|zlx0lIcCY{B zd-HUiZ~so{>dFFFYhA}G=*Z)4K7Mvk`@afq0H_s_lGrPX&ab_>PL}|M?jOAY(F)q8 zyZ=8yAL^j{mXDU692g2iU>iRlScjIYM?*vohFmD1+M;k-Wzw*5e-uMls zfCv%bjv%#_3cA@-W-=j|0ufFbx$~?{%gI8SVXT0x@;*@lD_o(}fI`HOB%(uvwFovm z7Kvag9@3INiaYf-_`%V>qA=t(0J_xNno$y%^CFxV9BEgcw-=L-2n$AtP6!zlgK#_M z2D2)2%-LYpT<4>90E->hBA8*jXan(XE}(Vxw{Fl#A5Fl92!9dR?-FT*7!$RQE)gt? zP{+!k!jg%*A_L(QboMUG@IQY08hBE}zD$6xgCf5DA-HPLJa!Qzh*ir8rQ5!}11wIZ z1k|JI;8q-F*n|P=1}|O&Xjoz_j^oJTLEryd{?R&?fK&bKDCG_)G57#H)h#wS5^^zf zGOC{iLuaW9g(hIW0zO>EP##!iRw}p)6HN!NX3enk3MQSSB~c97l_&U_4cLh+)c%Gw zfKLS{6}`MLnRF1rQUW&9SHkGQK<&LB7N6dCl8yniU$}rw?v(L>Z4DH<$wmx(NS**$ zPW}0*hr|T#vfr4U45@uvcUOSexl%y+Uk2b2pz|*t#X!yThU<-4Nf7L+gJE9ayWW}L zYy?0F@5>_m>Q`qzn0GcnvjyeQ#IpPNWw2fIdGKxRjqp(Vk`gvlmS;L+3|#yrSZpUN zxl3iywI|%oE9tNyP)j8k>p;LOvtW2D))cpyxNRLlCj%J;B83N;H?DUvnY$QBz?<0# z@Zx)FAqME3EsP;x!9-!gbZiU;8`8LS;Ocwo^3yUdX-iraZGL11iXEt6`0p>h-<=)D zVk}t#bDDGq2NGy$0?U=LaQ4-xyb|yxWlxC3AVp@6b6ye1vpHxCp>6iD*$SHK{bYD1qx3?urD@*0l?FSTizf ztSo><66RFSbgx)yTxs$Vv(B{--XZ5+n&kF3wbx3N%H((*A4@#39W=?k1e>b|2lT$r z-vtN8I57uy=?O7_7l4>md=^aZvfqS&wnO68?Kdz2K7HfxD{&fDoQ;J!3@}dxRNTvC zq;s=yMjK$d2)=x_)*M=K;jn8nWQ{(t+`?n&?6P6y=8GIyNk9UoX?Kwst1PthQzlNmkX!Nv^qYFQw9-AP&&=C`4C z;q)W0vU84Fb61`b3pnGs+rz*C;h+gRr^2<9r8LGQ0TMwxd(uY6+@*j9`U|KAU43ByoF$9bSTr*kS3x+mV1jZcc z1#z9!0cM`-<3=qo89{h~Sn*(0iD!n^+ zb_6J&$;8D2+BY2X$>V+IMqrf@xg@aun3x4weIA!sy5l ztw1;UX&+V@cRmK9naxUva5RGXus&`A7dKR{oI!2rozzhRU z{RXU<7p4DpKmY>@aF@)q+3HX+fLlhXQt*nLY#Y+PDwro_x6d*A407Bugf}R8q=udc z*ntG>esptdmW&U4XaSrD3%MKaHg^e3tKP0YUR`_bgxYv=+`if>CXPd8q?p)TfmlcF zTNIchKpE4+qIEE}M8;eu3mvdh!Q5*K;nfEgm}5Y!>U&X?)yV;qE>>;k%zv)t)Pw*1 zW4cde-3AMIFD0(iLAh%t1cszG$A(jn)H5K)Y3;qw2O+KT7$um3MS_4P_X6-UkI5)8 zquP^oNgXn#LN#yD%I=jv^UDeJ+`e$5x8aCdVE3`7{k|P+6FqZ9H7ta+q zs+Pot#4Za|xqw}MH$_HCc949G0sr{H-3x3b$siW#p2`!b$B}fPybU9dX!8eS&2a@> zJKLI|>*765HisX}%=^U{s82H%PBKa!W{a58I*l`fV4dR^15sYcg9N<|kR`$T7)m#N zEjaxkr0e-d!L!BEr2Rirb9l~(1q>mMtc-IHuVgcOuHFg8jp~@TR*rPDtI&-->1wrh zYvt7}A|TGd%lT>lK!efG|cYW5rQ8a7it+Gi_H++v213lY7Cu%D_%AI++CxzD(j# zmIE{Szh9sqM*An3j&AeQu6{IX7=hRavBm&(d7k*mFA~Na+ZZn(ax5VoSfNy~eAa^a4E>loT)vDNS&HnMnw;>k&*+g_Otr8h9=IqJe zf-&oLsKz#}8*&*>0XMJ1`9x9RhwoUQfPu?h{py`<2orrC3YTrqQ~|o(Y(+7L-~(0% z*AjhnzpID;ISI3hMil!>G>B0L8XbqVH;inYeH5eZai=l*#LNTiJo{A@KNtWi`wF?f z@M1H%i<`Olvesds>FBP38qA8>4lM^i`7oa!O^#qS0g>Q3&b$bft>Dm1x6`<9 zQN}FO(Q8n?qEA>bz#wRH#ncOenc}Yf!xjp_``m=p_2|Q|FUi9cJ2S6i2~u8x2C$3K z*hJR*-Fx6#u`({#?*{`6-`?hsA*w&bN{{FX5F4sgZvKRUsiJW+aMod}X?7w6pi(7^ z!C*Y2J-19u!m=+v-BT75J!z1Gz_st*RnZcoM{P>KXp>32uE6ClxBU>B56cJ8Zu9jk zG61jV5Eb09AsN*UVXt^bybpDozLUmNB?N?R-ilVrVfN*Nn`6!n@B0 zf+Y-YMvrh?H-S&6j8Z=1(iuyEr~UWxT#R$kIi=7pzSPPT2V6w#Ol&}5JQ|o(z_Ew2 z80gj_RqHm~B7?aHGK|`~jj8A7B*yL_AjO1nWI~l6fZ2meyZ`>e6EuKW4ZzB{_AC3) z7+rsxeqL3_8Y5c*N)r>kOwZ0;d(B&UZ?mXg=7fL!=(Wf7@i(_LK(DmqQ!aw_Hhum1 zRecu9N(Gl92>kZP$*hmETp1T0{u)g`1GXtf@S`puCbeA*KKbi!CF8%((=P5Rw~#-zj~i>VAEEi z-k~qp>Y4Y8>fxt-V>`R=SAVbp?_sF^a?jhwOz!r=J76WnO}?d;g$9Zz!)TF%M14 zPTD(n=j^a@noNv~=%}WX|NbcJQAaMczG+qDgK0h74G?_(#~w^o9Wepiqw-x2(`40Z zFuol!w<#>;ufKVn#SEBm-`iso`LzoP+}!2Yd}RVWvp`p&Sj(XD%B=xoeY|bS(Dxo8 zu&^C69mc$~{Iu5yX#Y#AVhp?U(FNDl2V=%45X3eW3i|L>Fo0>yJ38?mbO>|8#Q>(` z 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�}OhR(E;igkaYu8Fd@=GwSll~T8Q((gS|W69!V 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 K7gQF=q5lsqPv{8% literal 0 HcmV?d00001 diff --git a/e2e-tests/test_auth.py b/e2e-tests/test_auth.py new file mode 100644 index 0000000..9f3b644 --- /dev/null +++ b/e2e-tests/test_auth.py @@ -0,0 +1,55 @@ +import inflection +import requests + +from test_user import delete_user + + +def register_user(backend_url, body, access_token_field): + response = requests.post(f"{backend_url}/auth/register", json=body) + assert response.status_code == 200 + data = response.json() + assert "role" in data + assert data["role"] == "User" + assert "id" in data + assert access_token_field in data + expected = {k: v for k, v in body.items() if k != "password"} + actual = {k: v for k, v in data.items() if k in body} + assert actual == expected + return response.json() + + +def reset_password(backend_url, auth_header, email): + response = requests.post( + f"{backend_url}/auth/resetPassword/{email}", + headers=auth_header, + ) + assert response.status_code == 204 + + +def logout(backend_url, auth_header, id): + response = requests.post( + f"{backend_url}/auth/logout/{id}", + headers=auth_header, + ) + assert response.status_code == 204 + + +def test_auth(backend_url, auth_header, auth_user, lang, api, new_user_email): + if not auth_header or api != "rest": + return + + body = { + "firstName": "Test", + "lastName": "Script", + "email": new_user_email, + "password": "password123", + } + access_token_field = "accessToken" + if lang != "ts": + body = {inflection.underscore(k): v for k, v in body.items()} + access_token_field = inflection.underscore(access_token_field) + user = register_user(backend_url, body, access_token_field) + delete_user(backend_url, auth_header, user["id"], lang) + # Call the following with the auth user since we cannot verify emails on new users in the script + reset_password(backend_url, auth_header, auth_user["email"]) + logout(backend_url, auth_header, auth_user["id"]) diff --git a/e2e-tests/test_auth_gql.py b/e2e-tests/test_auth_gql.py new file mode 100644 index 0000000..8e21ae6 --- /dev/null +++ b/e2e-tests/test_auth_gql.py @@ -0,0 +1,89 @@ +import inflection +import requests + +from test_user_gql import delete_user + + +def register_user(backend_url, body, access_token_field): + query = """ + mutation($user: RegisterUserDTO!) { + register(user: $user) { + id + firstName + lastName + email + role + accessToken + } + } + """ + response = requests.post( + f"{backend_url}/graphql", + json={"query": query, "variables": {"user": body}}, + ) + assert "data" in response.json() + assert "register" in response.json()["data"] + data = response.json()["data"]["register"] + assert "role" in data + assert data["role"] == "User" + assert "id" in data + assert access_token_field in data + expected = {k: v for k, v in body.items() if k != "password"} + actual = {k: v for k, v in data.items() if k in body} + assert actual == expected + return data + + +def reset_password(backend_url, auth_header, email): + query = """ + mutation($email: String!) { + resetPassword(email: $email) + } + """ + response = requests.post( + f"{backend_url}/graphql", + json={"query": query, "variables": {"email": email}}, + headers=auth_header, + ) + assert "data" in response.json() + assert "resetPassword" in response.json()["data"] + data = response.json()["data"]["resetPassword"] + assert data + return data + + +def logout(backend_url, auth_header, id): + query = """ + mutation($userId: ID!) { + logout(userId: $userId) + } + """ + response = requests.post( + f"{backend_url}/graphql", + json={"query": query, "variables": {"userId": id}}, + headers=auth_header, + ) + assert "data" in response.json() + assert "logout" in response.json()["data"] + return response.json()["data"]["logout"] + + +def test_auth_gql(backend_url, auth_header, auth_user, lang, api, new_user_email): + if not auth_header or api == "rest": + return + + body = { + "firstName": "Test", + "lastName": "Script", + "email": new_user_email, + "password": "password123", + } + access_token_field = "accessToken" + if lang != "ts": + body = {inflection.underscore(k): v for k, v in body.items()} + access_token_field = inflection.underscore(access_token_field) + user = register_user(backend_url, body, access_token_field) + delete_user(backend_url, auth_header, user["id"]) + # Call the following with the auth user since we cannot verify emails on new users in the script + reset_password(backend_url, auth_header, auth_user["email"]) + logout(backend_url, auth_header, auth_user["id"]) diff --git a/e2e-tests/test_entity.py b/e2e-tests/test_entity.py new file mode 100644 index 0000000..da8a000 --- /dev/null +++ b/e2e-tests/test_entity.py @@ -0,0 +1,121 @@ +import inflection +import json +import requests + + +def get_entities(backend_url, auth_header): + response = requests.get(f"{backend_url}/entities", headers=auth_header) + assert response.status_code == 200 + return response.json() + + +def get_entity_by_id(backend_url, auth_header, id): + response = requests.get( + f"{backend_url}/entities/{id}", + headers=auth_header, + ) + assert response.status_code == 200 + return response.json() + + +def get_file(backend_url, auth_header, filename): + response = requests.get( + f"{backend_url}/entities/files/{filename}", + headers=auth_header, + ) + assert response.status_code == 200 + return response.json() + + +def create_entity(backend_url, auth_header, body, fs, file, filename_field): + if fs: + response = requests.post( + f"{backend_url}/entities/", + headers=auth_header, + files={"file": file}, + data={"body": json.dumps(body)}, + ) + else: + response = requests.post( + f"{backend_url}/entities/", + json=body, + headers=auth_header, + ) + assert response.status_code == 201 + data = response.json() + if fs: + assert filename_field in data + actual = {k: v for k, v in data.items() if k in body} + assert actual == body + return data + + +def update_entity(backend_url, auth_header, id, body, fs, file, filename_field): + if fs: + response = requests.put( + f"{backend_url}/entities/{id}", + headers=auth_header, + files={"file": file}, + data={"body": json.dumps(body)}, + ) + else: + response = requests.put( + f"{backend_url}/entities/{id}", + json=body, + headers=auth_header, + ) + assert response.status_code == 200 + data = response.json() + if fs: + assert filename_field in data + actual = {k: v for k, v in data.items() if k in body} + assert actual == body + return data + + +def delete_entity(backend_url, auth_header, id): + response = requests.delete( + f"{backend_url}/entities/{id}", + headers=auth_header, + ) + assert response.status_code == 200 + + +def test_entities(backend_url, auth_header, lang, api, fs): + if api != "rest": + return + + body1 = { + "stringField": "TestScript1", + "intField": 1, + "enumField": "A", + "stringArrayField": ["test1", "test2"], + "boolField": True, + } + body2 = { + "stringField": "TestScript2", + "intField": 2, + "enumField": "B", + "stringArrayField": ["test2"], + "boolField": False, + } + filename_field = "fileName" + if lang != "ts": + body1 = {inflection.underscore(k): v for k, v in body1.items()} + body2 = {inflection.underscore(k): v for k, v in body2.items()} + filename_field = inflection.underscore(filename_field) + file1 = ("dog.jpg", open("dog.jpg", "rb"), "image/jpeg") + file2 = ("cat.png", open("cat.png", "rb"), "image/png") + + entity = create_entity(backend_url, auth_header, body1, fs, file1, filename_field) + if fs: + get_file(backend_url, auth_header, entity[filename_field]) + updated_entity = update_entity( + backend_url, auth_header, entity["id"], body2, fs, file2, filename_field + ) + if fs: + get_file(backend_url, auth_header, updated_entity[filename_field]) + retrieved_entity = get_entity_by_id(backend_url, auth_header, entity["id"]) + assert updated_entity == retrieved_entity + assert get_entities(backend_url, auth_header) + delete_entity(backend_url, auth_header, entity["id"]) diff --git a/e2e-tests/test_entity_gql.py b/e2e-tests/test_entity_gql.py new file mode 100644 index 0000000..d8bb055 --- /dev/null +++ b/e2e-tests/test_entity_gql.py @@ -0,0 +1,273 @@ +import inflection +import json +import requests + + +def get_entities(backend_url, auth_header, fs): + if fs: + query = """ + query { + entities { + id + stringField + intField + enumField + stringArrayField + boolField + fileName + } + } + """ + else: + query = """ + query { + entities { + id + stringField + intField + enumField + stringArrayField + boolField + } + } + """ + response = requests.post( + f"{backend_url}/graphql", + json={"query": query}, + headers=auth_header, + ) + assert "data" in response.json() + assert "entities" in response.json()["data"] + return response.json()["data"]["entities"] + + +def get_entity_by_id(backend_url, auth_header, id, fs): + if fs: + query = """ + query($id: ID!) { + entity(id: $id) { + id + stringField + intField + enumField + stringArrayField + boolField + fileName + } + } + """ + else: + query = """ + query($id: ID!) { + entity(id: $id) { + id + stringField + intField + enumField + stringArrayField + boolField + } + } + """ + response = requests.post( + f"{backend_url}/graphql", + json={"query": query, "variables": {"id": id}}, + headers=auth_header, + ) + assert "data" in response.json() + assert "entity" in response.json()["data"] + return response.json()["data"]["entity"] + + +def get_file(backend_url, auth_header, filename): + query = """ + query($fileUUID: ID!) { + file(fileUUID: $fileUUID) + } + """ + response = requests.post( + f"{backend_url}/graphql", + json={"query": query, "variables": {"fileUUID": filename}}, + headers=auth_header, + ) + assert "data" in response.json() + assert "file" in response.json()["data"] + return response.json()["data"]["file"] + + +def create_entity(backend_url, auth_header, body, fs, file, filename_field): + if fs: + query = """ + mutation($entity: EntityRequestDTO!, $file: Upload) { + createEntity( + entity: $entity, file: $file + ) { + id + stringField + intField + stringArrayField + boolField + enumField + fileName + } + } + """ + # https://github.com/jaydenseric/graphql-multipart-request-spec + operations = json.dumps( + { + "query": query, + "variables": {"entity": body, "file": None}, + } + ) + map = json.dumps({"0": ["variables.file"]}) + response = requests.post( + f"{backend_url}/graphql", + data={"operations": operations, "map": map}, + files={"0": file}, + headers=auth_header, + ) + else: + query = """ + mutation($entity: EntityRequestDTO!) { + createEntity(entity: $entity) { + id + stringField + intField + stringArrayField + boolField + enumField + } + } + """ + response = requests.post( + f"{backend_url}/graphql", + json={"query": query, "variables": {"entity": body}}, + headers=auth_header, + ) + assert "data" in response.json() + assert "createEntity" in response.json()["data"] + data = response.json()["data"]["createEntity"] + if fs: + assert filename_field in data + actual = {k: v for k, v in data.items() if k in body} + assert actual == body + return data + + +def update_entity(backend_url, auth_header, id, body, fs, file, filename_field): + if fs: + query = """ + mutation($id: ID!, $entity: EntityRequestDTO!, $file: Upload) { + updateEntity( + id: $id, entity: $entity, file: $file + ) { + id + stringField + intField + stringArrayField + boolField + enumField + fileName + } + } + """ + # https://github.com/jaydenseric/graphql-multipart-request-spec + operations = json.dumps( + { + "query": query, + "variables": {"id": id, "entity": body, "file": None}, + } + ) + map = json.dumps({"0": ["variables.file"]}) + response = requests.post( + f"{backend_url}/graphql", + data={"operations": operations, "map": map}, + files={"0": file}, + headers=auth_header, + ) + else: + query = """ + mutation($id: ID!, $entity: EntityRequestDTO!) { + updateEntity( + id: $id, entity: $entity + ) { + id + stringField + intField + stringArrayField + boolField + enumField + } + } + """ + response = requests.post( + f"{backend_url}/graphql", + json={"query": query, "variables": {"id": id, "entity": body}}, + headers=auth_header, + ) + assert "data" in response.json() + assert "updateEntity" in response.json()["data"] + data = response.json()["data"]["updateEntity"] + if fs: + assert filename_field in data + actual = {k: v for k, v in data.items() if k in body} + assert actual == body + return data + + +def delete_entity(backend_url, auth_header, id): + query = """ + mutation($id: ID!) { + deleteEntity(id: $id) + } + """ + response = requests.post( + f"{backend_url}/graphql", + json={"query": query, "variables": {"id": id}}, + headers=auth_header, + ) + assert "data" in response.json() + assert "deleteEntity" in response.json()["data"] + data = response.json()["data"]["deleteEntity"] + assert data == id + return data + + +def test_entities_gql(backend_url, auth_header, lang, api, fs): + if api == "rest": + return + + body1 = { + "stringField": "TestScript1", + "intField": 1, + "enumField": "A", + "stringArrayField": ["test1", "test2"], + "boolField": True, + } + body2 = { + "stringField": "TestScript2", + "intField": 2, + "enumField": "B", + "stringArrayField": ["test2"], + "boolField": False, + } + filename_field = "fileName" + if lang != "ts": + body1 = {inflection.underscore(k): v for k, v in body1.items()} + body2 = {inflection.underscore(k): v for k, v in body2.items()} + filename_field = inflection.underscore(filename_field) + file1 = ("dog.jpg", open("dog.jpg", "rb"), "image/jpeg") + file2 = ("cat.png", open("cat.png", "rb"), "image/png") + + entity = create_entity(backend_url, auth_header, body1, fs, file1, filename_field) + if fs: + get_file(backend_url, auth_header, entity[filename_field]) + updated_entity = update_entity( + backend_url, auth_header, entity["id"], body2, fs, file2, filename_field + ) + if fs: + get_file(backend_url, auth_header, updated_entity[filename_field]) + retrieved_entity = get_entity_by_id(backend_url, auth_header, entity["id"], fs) + assert updated_entity == retrieved_entity + assert get_entities(backend_url, auth_header, fs) + delete_entity(backend_url, auth_header, entity["id"]) diff --git a/e2e-tests/test_simple_entity.py b/e2e-tests/test_simple_entity.py new file mode 100644 index 0000000..20f3182 --- /dev/null +++ b/e2e-tests/test_simple_entity.py @@ -0,0 +1,81 @@ +import inflection +import requests + + +def get_entities(backend_url, auth_header): + response = requests.get(f"{backend_url}/simple-entities", headers=auth_header) + assert response.status_code == 200 + return response.json() + + +def get_entity_by_id(backend_url, auth_header, id): + response = requests.get( + f"{backend_url}/simple-entities/{id}", + headers=auth_header, + ) + assert response.status_code == 200 + return response.json() + + +def create_entity(backend_url, auth_header, body): + response = requests.post( + f"{backend_url}/simple-entities/", + json=body, + headers=auth_header, + ) + assert response.status_code == 201 + data = response.json() + actual = {k: v for k, v in data.items() if k in body} + assert actual == body + return data + + +def update_entity(backend_url, auth_header, id, body): + response = requests.put( + f"{backend_url}/simple-entities/{id}", + json=body, + headers=auth_header, + ) + assert response.status_code == 200 + data = response.json() + actual = {k: v for k, v in data.items() if k in body} + assert actual == body + return data + + +def delete_entity(backend_url, auth_header, id): + response = requests.delete( + f"{backend_url}/simple-entities/{id}", + headers=auth_header, + ) + assert response.status_code == 200 + + +def test_simple_entities(backend_url, auth_header, lang, api): + if api != "rest": + return + + body1 = { + "stringField": "TestScript1", + "intField": 1, + "enumField": "A", + "stringArrayField": ["test1", "test2"], + "boolField": True, + } + body2 = { + "stringField": "TestScript2", + "intField": 2, + "enumField": "B", + "stringArrayField": ["test2"], + "boolField": False, + } + if lang != "ts": + body1 = {inflection.underscore(k): v for k, v in body1.items()} + body2 = {inflection.underscore(k): v for k, v in body2.items()} + + entity = create_entity(backend_url, auth_header, body1) + updated_entity = update_entity(backend_url, auth_header, entity["id"], body2) + retrieved_entity = get_entity_by_id(backend_url, auth_header, entity["id"]) + assert updated_entity == retrieved_entity + assert get_entities(backend_url, auth_header) + delete_entity(backend_url, auth_header, entity["id"]) diff --git a/e2e-tests/test_simple_entity_gql.py b/e2e-tests/test_simple_entity_gql.py new file mode 100644 index 0000000..5951263 --- /dev/null +++ b/e2e-tests/test_simple_entity_gql.py @@ -0,0 +1,150 @@ +import inflection +import requests + + +def get_entities(backend_url, auth_header): + query = """ + query { + simpleEntities { + id + stringField + intField + enumField + stringArrayField + boolField + } + } + """ + response = requests.post( + f"{backend_url}/graphql", + json={"query": query}, + headers=auth_header, + ) + assert "data" in response.json() + assert "simpleEntities" in response.json()["data"] + return response.json()["data"]["simpleEntities"] + + +def get_entity_by_id(backend_url, auth_header, id): + query = """ + query($id: ID!) { + simpleEntity(id: $id) { + id + stringField + intField + enumField + stringArrayField + boolField + } + } + """ + response = requests.post( + f"{backend_url}/graphql", + json={"query": query, "variables": {"id": id}}, + headers=auth_header, + ) + assert "data" in response.json() + assert "simpleEntity" in response.json()["data"] + return response.json()["data"]["simpleEntity"] + + +def create_entity(backend_url, auth_header, body): + query = """ + mutation($entity: SimpleEntityRequestDTO!) { + createSimpleEntity(entity: $entity) { + id + stringField + intField + stringArrayField + boolField + enumField + } + } + """ + response = requests.post( + f"{backend_url}/graphql", + json={"query": query, "variables": {"entity": body}}, + headers=auth_header, + ) + assert "data" in response.json() + assert "createSimpleEntity" in response.json()["data"] + data = response.json()["data"]["createSimpleEntity"] + actual = {k: v for k, v in data.items() if k in body} + assert actual == body + return data + + +def update_entity(backend_url, auth_header, id, body): + query = """ + mutation($id: ID!, $entity: SimpleEntityRequestDTO!) { + updateSimpleEntity( + id: $id, entity: $entity + ) { + id + stringField + intField + stringArrayField + boolField + enumField + } + } + """ + response = requests.post( + f"{backend_url}/graphql", + json={"query": query, "variables": {"id": id, "entity": body}}, + headers=auth_header, + ) + assert "data" in response.json() + assert "updateSimpleEntity" in response.json()["data"] + data = response.json()["data"]["updateSimpleEntity"] + actual = {k: v for k, v in data.items() if k in body} + assert actual == body + return data + + +def delete_entity(backend_url, auth_header, id): + query = """ + mutation($id: ID!) { + deleteSimpleEntity(id: $id) + } + """ + response = requests.post( + f"{backend_url}/graphql", + json={"query": query, "variables": {"id": id}}, + headers=auth_header, + ) + assert "data" in response.json() + assert "deleteSimpleEntity" in response.json()["data"] + data = response.json()["data"]["deleteSimpleEntity"] + assert data == id + return data + + +def test_entities_gql(backend_url, auth_header, lang, api): + if api == "rest": + return + + body1 = { + "stringField": "TestScript1", + "intField": 1, + "enumField": "A", + "stringArrayField": ["test1", "test2"], + "boolField": True, + } + body2 = { + "stringField": "TestScript2", + "intField": 2, + "enumField": "B", + "stringArrayField": ["test2"], + "boolField": False, + } + if lang != "ts": + body1 = {inflection.underscore(k): v for k, v in body1.items()} + body2 = {inflection.underscore(k): v for k, v in body2.items()} + + entity = create_entity(backend_url, auth_header, body1) + updated_entity = update_entity(backend_url, auth_header, entity["id"], body2) + retrieved_entity = get_entity_by_id(backend_url, auth_header, entity["id"]) + assert updated_entity == retrieved_entity + assert get_entities(backend_url, auth_header) + delete_entity(backend_url, auth_header, entity["id"]) diff --git a/e2e-tests/test_user.py b/e2e-tests/test_user.py new file mode 100644 index 0000000..add3485 --- /dev/null +++ b/e2e-tests/test_user.py @@ -0,0 +1,106 @@ +import inflection +import requests + + +def get_users(backend_url, auth_header): + response = requests.get(f"{backend_url}/users", headers=auth_header) + assert response.status_code == 200 + return response.json() + + +def get_user_by_id(backend_url, auth_header, id, lang): + if lang == "ts": + response = requests.get( + f"{backend_url}/users?userId={id}", + headers=auth_header, + ) + else: + response = requests.get( + f"{backend_url}/users?user_id={id}", + headers=auth_header, + ) + assert response.status_code == 200 + return response.json() + + +def get_user_by_email(backend_url, auth_header, email): + response = requests.get( + f"{backend_url}/users?email={email}", + headers=auth_header, + ) + assert response.status_code == 200 + return response.json() + + +def create_user(backend_url, auth_header, body): + response = requests.post( + f"{backend_url}/users/", + json=body, + headers=auth_header, + ) + assert response.status_code == 201 + data = response.json() + expected = {k: v for k, v in body.items() if k != "password"} + actual = {k: v for k, v in data.items() if k in body} + assert actual == expected + return data + + +def update_user(backend_url, auth_header, id, body): + response = requests.put( + f"{backend_url}/users/{id}", + json=body, + headers=auth_header, + ) + assert response.status_code == 200 + data = response.json() + actual = {k: v for k, v in data.items() if k in body} + assert actual == body + return data + + +def delete_user(backend_url, auth_header, id, lang): + if lang == "ts": + response = requests.delete( + f"{backend_url}/users?userId={id}", + headers=auth_header, + ) + else: + response = requests.delete( + f"{backend_url}/users?user_id={id}", + headers=auth_header, + ) + assert response.status_code == 204 + + +def test_users(backend_url, auth_header, lang, api, new_user_email): + if not auth_header or api != "rest": + return + + body1 = { + "firstName": "Test", + "lastName": "Script", + "role": "User", + "email": new_user_email, + "password": "password", + } + body2 = { + "firstName": "Test2", + "lastName": "Script2", + "role": "User", + "email": new_user_email, + } + if lang != "ts": + body1 = {inflection.underscore(k): v for k, v in body1.items()} + body2 = {inflection.underscore(k): v for k, v in body2.items()} + + user = create_user(backend_url, auth_header, body1) + updated_user = update_user(backend_url, auth_header, user["id"], body2) + retrieved_user_by_id = get_user_by_id(backend_url, auth_header, user["id"], lang) + assert updated_user == retrieved_user_by_id + retrieved_user_by_email = get_user_by_email( + backend_url, auth_header, updated_user["email"] + ) + assert updated_user == retrieved_user_by_email + assert get_users(backend_url, auth_header) + delete_user(backend_url, auth_header, user["id"], lang) diff --git a/e2e-tests/test_user_gql.py b/e2e-tests/test_user_gql.py new file mode 100644 index 0000000..b75a796 --- /dev/null +++ b/e2e-tests/test_user_gql.py @@ -0,0 +1,168 @@ +import inflection +import requests + + +def get_users(backend_url, auth_header): + query = """ + query { + users { + id + firstName + lastName + email + role + } + } + """ + response = requests.post( + f"{backend_url}/graphql", + json={"query": query}, + headers=auth_header, + ) + assert "data" in response.json() + assert "users" in response.json()["data"] + return response.json()["data"]["users"] + + +def get_user_by_id(backend_url, auth_header, id): + query = """ + query($id: ID!) { + userById(id: $id) { + id + firstName + lastName + email + role + } + } + """ + response = requests.post( + f"{backend_url}/graphql", + json={"query": query, "variables": {"id": id}}, + headers=auth_header, + ) + assert "data" in response.json() + assert "userById" in response.json()["data"] + return response.json()["data"]["userById"] + + +def get_user_by_email(backend_url, auth_header, email): + query = """ + query($email: String!) { + userByEmail(email: $email) { + id + firstName + lastName + email + role + } + } + """ + response = requests.post( + f"{backend_url}/graphql", + json={"query": query, "variables": {"email": email}}, + headers=auth_header, + ) + assert "data" in response.json() + assert "userByEmail" in response.json()["data"] + return response.json()["data"]["userByEmail"] + + +def create_user(backend_url, auth_header, body): + query = """ + mutation($user: CreateUserDTO!) { + createUser(user: $user) { + id + firstName + lastName + email + role + } + } + """ + response = requests.post( + f"{backend_url}/graphql", + json={"query": query, "variables": {"user": body}}, + headers=auth_header, + ) + assert "data" in response.json() + assert "createUser" in response.json()["data"] + data = response.json()["data"]["createUser"] + expected = {k: v for k, v in body.items() if k != "password"} + actual = {k: v for k, v in data.items() if k in body} + assert actual == expected + return data + + +def update_user(backend_url, auth_header, id, body): + query = """ + mutation($id: ID!, $user: UpdateUserDTO!) { + updateUser(id: $id, user: $user) { + id + firstName + lastName + email + role + } + } + """ + response = requests.post( + f"{backend_url}/graphql", + json={"query": query, "variables": {"id": id, "user": body}}, + headers=auth_header, + ) + assert "data" in response.json() + assert "updateUser" in response.json()["data"] + data = response.json()["data"]["updateUser"] + actual = {k: v for k, v in data.items() if k in body} + assert actual == body + return data + + +def delete_user(backend_url, auth_header, id): + query = """ + mutation($id: ID!) { + deleteUserById(id: $id) + } + """ + response = requests.post( + f"{backend_url}/graphql", + json={"query": query, "variables": {"id": id}}, + headers=auth_header, + ) + assert "data" in response.json() + assert "deleteUserById" in response.json()["data"] + return response.json()["data"]["deleteUserById"] + + +def test_users_gql(backend_url, auth_header, lang, api, new_user_email): + if not auth_header or api == "rest": + return + + body1 = { + "firstName": "Test", + "lastName": "Script", + "role": "User", + "email": new_user_email, + "password": "password", + } + body2 = { + "firstName": "Test2", + "lastName": "Script2", + "role": "User", + "email": new_user_email, + } + if lang != "ts": + body1 = {inflection.underscore(k): v for k, v in body1.items()} + body2 = {inflection.underscore(k): v for k, v in body2.items()} + + user = create_user(backend_url, auth_header, body1) + updated_user = update_user(backend_url, auth_header, user["id"], body2) + retrieved_user_by_id = get_user_by_id(backend_url, auth_header, user["id"]) + assert updated_user == retrieved_user_by_id + retrieved_user_by_email = get_user_by_email( + backend_url, auth_header, updated_user["email"] + ) + assert updated_user == retrieved_user_by_email + assert get_users(backend_url, auth_header) + delete_user(backend_url, auth_header, user["id"]) diff --git a/frontend/.dockerignore b/frontend/.dockerignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/frontend/.dockerignore @@ -0,0 +1 @@ +node_modules diff --git a/frontend/.env b/frontend/.env new file mode 100644 index 0000000..3152c9d --- /dev/null +++ b/frontend/.env @@ -0,0 +1 @@ +REACT_APP_BACKEND_URL=http://localhost:5001 \ No newline at end of file diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js new file mode 100644 index 0000000..88316ae --- /dev/null +++ b/frontend/.eslintrc.js @@ -0,0 +1,36 @@ +module.exports = { + root: true, + parser: "@typescript-eslint/parser", + parserOptions: { + ecmaVersion: 2020, + sourceType: "module", + ecmaFeatures: { + jsx: true, + }, + project: "./tsconfig.json", + createDefaultProgram: true, + tsconfigRootDir: __dirname, + }, + settings: { + react: { + version: "detect", + }, + }, + extends: [ + "airbnb-typescript", + "prettier", + "plugin:prettier/recommended", + "plugin:react/recommended", + "plugin:react-hooks/recommended", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended", + ], + rules: { + "prettier/prettier": ["warn", { endOfLine: "auto" }], + "react/require-default-props": "off", + "react/no-array-index-key": "off", + "jsx-a11y/click-events-have-key-events": "off", + "jsx-a11y/no-static-element-interactions": "off", + }, + ignorePatterns: ["build/*"], +}; diff --git a/frontend/.firebaserc b/frontend/.firebaserc new file mode 100644 index 0000000..32c9478 --- /dev/null +++ b/frontend/.firebaserc @@ -0,0 +1,5 @@ +{ + "projects": { + "default": "uw-blueprint-starter-code" + } +} diff --git a/frontend/.prettierrc.js b/frontend/.prettierrc.js new file mode 100644 index 0000000..b483f64 --- /dev/null +++ b/frontend/.prettierrc.js @@ -0,0 +1,3 @@ +module.exports = { + trailingComma: "all", +}; diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..edbdfea --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,11 @@ +FROM node:14.15.5-slim + +WORKDIR /app + +COPY package.json yarn.lock ./ +RUN yarn install + +COPY . ./ + +EXPOSE 3000 +ENTRYPOINT ["yarn", "start"] diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 0000000..b58e0af --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,46 @@ +# Getting Started with Create React App + +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). + +## Available Scripts + +In the project directory, you can run: + +### `yarn start` + +Runs the app in the development mode.\ +Open [http://localhost:3000](http://localhost:3000) to view it in the browser. + +The page will reload if you make edits.\ +You will also see any lint errors in the console. + +### `yarn test` + +Launches the test runner in the interactive watch mode.\ +See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. + +### `yarn build` + +Builds the app for production to the `build` folder.\ +It correctly bundles React in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.\ +Your app is ready to be deployed! + +See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. + +### `yarn eject` + +**Note: this is a one-way operation. Once you `eject`, you can’t go back!** + +If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. + +Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. + +You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. + +## Learn More + +You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). + +To learn React, check out the [React documentation](https://reactjs.org/). diff --git a/frontend/firebase.json b/frontend/firebase.json new file mode 100644 index 0000000..340ed5b --- /dev/null +++ b/frontend/firebase.json @@ -0,0 +1,16 @@ +{ + "hosting": { + "public": "build", + "ignore": [ + "firebase.json", + "**/.*", + "**/node_modules/**" + ], + "rewrites": [ + { + "source": "**", + "destination": "/index.html" + } + ] + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..f35f3e8 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,83 @@ +{ + "name": "frontend", + "version": "0.1.0", + "private": true, + "dependencies": { + "@apollo/client": "^3.3.16", + "@rjsf/bootstrap-4": "^2.5.1", + "@rjsf/core": "^2.5.1", + "@testing-library/jest-dom": "^5.11.4", + "@testing-library/react": "^11.1.0", + "@testing-library/user-event": "^12.1.10", + "@types/apollo-upload-client": "^14.1.0", + "@types/jest": "^26.0.15", + "@types/json2csv": "^5.0.3", + "@types/node": "^12.0.0", + "@types/react": "^17.0.0", + "@types/react-dom": "^17.0.0", + "@types/react-jsonschema-form": "^1.7.4", + "@types/react-table": "^7.0.29", + "apollo-upload-client": "^16.0.0", + "axios": "^0.21.1", + "bootstrap": "^4.6.0", + "graphql": "^15.5.0", + "humps": "^2.0.1", + "json-schema": "^0.3.0", + "json2csv": "^5.0.6", + "jsonwebtoken": "^8.5.1", + "react": "^17.0.1", + "react-bootstrap": "^1.5.2", + "react-dom": "^17.0.1", + "react-google-login": "^5.2.2", + "react-json-schema": "^1.2.2", + "react-jsonschema-form": "^1.8.1", + "react-router-dom": "^5.2.0", + "react-scripts": "4.0.2", + "react-table": "^7.7.0", + "typescript": "^4.1.2", + "web-vitals": "^1.0.1" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject", + "lint": "eslint . --ext .ts,.tsx,.js,.jsx", + "fix": "eslint . --ext .ts,.tsx,.js,.jsx --fix" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "devDependencies": { + "@types/humps": "^2.0.0", + "@types/jsonwebtoken": "^8.5.1", + "@types/react-router-dom": "^5.1.7", + "@types/react-test-renderer": "^17.0.1", + "@typescript-eslint/eslint-plugin": "^4.15.2", + "@typescript-eslint/parser": "^4.15.2", + "eslint-config-airbnb-typescript": "^12.3.1", + "eslint-config-prettier": "^8.1.0", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-jsx-a11y": "^6.4.1", + "eslint-plugin-prettier": "^3.3.1", + "eslint-plugin-react": "^7.22.0", + "eslint-plugin-react-hooks": "^4.2.0", + "prettier": "^2.2.1", + "react-test-renderer": "^17.0.2" + } +} diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a11777cc471a4344702741ab1c8a588998b1311a GIT binary patch literal 3870 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 baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ literal 0 HcmV?d00001 diff --git a/frontend/public/index.html b/frontend/public/index.html new file mode 100644 index 0000000..aa069f2 --- /dev/null +++ b/frontend/public/index.html @@ -0,0 +1,43 @@ + + + + + + + + + + + + + React App + + + +

+ + + diff --git a/frontend/public/logo192.png b/frontend/public/logo192.png new file mode 100644 index 0000000000000000000000000000000000000000..fc44b0a3796c0e0a64c3d858ca038bd4570465d9 GIT binary patch literal 5347 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN literal 0 HcmV?d00001 diff --git a/frontend/public/manifest.json b/frontend/public/manifest.json new file mode 100644 index 0000000..080d6c7 --- /dev/null +++ b/frontend/public/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/frontend/public/robots.txt b/frontend/public/robots.txt new file mode 100644 index 0000000..e9e57dc --- /dev/null +++ b/frontend/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/frontend/src/APIClients/AuthAPIClient.ts b/frontend/src/APIClients/AuthAPIClient.ts new file mode 100644 index 0000000..4f55923 --- /dev/null +++ b/frontend/src/APIClients/AuthAPIClient.ts @@ -0,0 +1,119 @@ +import { + FetchResult, + MutationFunctionOptions, + OperationVariables, +} from "@apollo/client"; +import AUTHENTICATED_USER_KEY from "../constants/AuthConstants"; +import { AuthenticatedUser } from "../types/AuthTypes"; +import baseAPIClient from "./BaseAPIClient"; +import { + getLocalStorageObjProperty, + setLocalStorageObjProperty, +} from "../utils/LocalStorageUtils"; + + +const login = async ( + email: string, + password: string, +): Promise => { + try { + const { data } = await baseAPIClient.post( + "/auth/login", + { email, password }, + { withCredentials: true }, + ); + localStorage.setItem(AUTHENTICATED_USER_KEY, JSON.stringify(data)); + return data; + } catch (error) { + return null; + } +}; + +const loginWithGoogle = async (idToken: string): Promise => { + try { + const { data } = await baseAPIClient.post( + "/auth/login", + { idToken }, + { withCredentials: true }, + ); + localStorage.setItem(AUTHENTICATED_USER_KEY, JSON.stringify(data)); + return data; + } catch (error) { + return null; + } +}; + +const logout = async (userId: string | undefined): Promise => { + const bearerToken = `Bearer ${getLocalStorageObjProperty( + AUTHENTICATED_USER_KEY, + "accessToken", + )}`; + try { + await baseAPIClient.post( + `/auth/logout/${userId}`, + {}, + { headers: { Authorization: bearerToken } }, + ); + localStorage.removeItem(AUTHENTICATED_USER_KEY); + return true; + } catch (error) { + return false; + } +}; + +const register = async ( + firstName: string, + lastName: string, + email: string, + password: string, +): Promise => { + try { + const { data } = await baseAPIClient.post( + "/auth/register", + { firstName, lastName, email, password }, + { withCredentials: true }, + ); + localStorage.setItem(AUTHENTICATED_USER_KEY, JSON.stringify(data)); + return data; + } catch (error) { + return null; + } +}; + +const resetPassword = async (email: string | undefined): Promise => { + const bearerToken = `Bearer ${getLocalStorageObjProperty( + AUTHENTICATED_USER_KEY, + "accessToken", + )}`; + try { + await baseAPIClient.post( + `/auth/resetPassword/${email}`, + {}, + { headers: { Authorization: bearerToken } }, + ); + return true; + } catch (error) { + return false; + } +}; + +// for testing only, refresh does not need to be exposed in the client +const refresh = async (): Promise => { + try { + const { data } = await baseAPIClient.post( + "/auth/refresh", + {}, + { withCredentials: true }, + ); + setLocalStorageObjProperty( + AUTHENTICATED_USER_KEY, + "accessToken", + data.accessToken, + ); + return true; + } catch (error) { + return false; + } +}; + +export default { login, logout, loginWithGoogle, register, resetPassword, refresh }; diff --git a/frontend/src/APIClients/BaseAPIClient.ts b/frontend/src/APIClients/BaseAPIClient.ts new file mode 100644 index 0000000..52b7a38 --- /dev/null +++ b/frontend/src/APIClients/BaseAPIClient.ts @@ -0,0 +1,49 @@ +import axios, { AxiosRequestConfig } from "axios"; +import jwt from "jsonwebtoken"; + +import AUTHENTICATED_USER_KEY from "../constants/AuthConstants"; +import { DecodedJWT } from "../types/AuthTypes"; +import { setLocalStorageObjProperty } from "../utils/LocalStorageUtils"; + +const baseAPIClient = axios.create({ + baseURL: process.env.REACT_APP_BACKEND_URL, +}); + +baseAPIClient.interceptors.request.use(async (config: AxiosRequestConfig) => { + const newConfig = { ...config }; + + // if access token in header has expired, do a refresh + const authHeaderParts = config.headers.Authorization?.split(" "); + if ( + authHeaderParts && + authHeaderParts.length >= 2 && + authHeaderParts[0].toLowerCase() === "bearer" + ) { + const decodedToken = jwt.decode(authHeaderParts[1]) as DecodedJWT; + + if ( + decodedToken && + (typeof decodedToken === "string" || + decodedToken.exp <= Math.round(new Date().getTime() / 1000)) + ) { + const { data } = await axios.post( + `${process.env.REACT_APP_BACKEND_URL}/auth/refresh`, + {}, + { withCredentials: true }, + ); + + const accessToken = data.accessToken || data.access_token; + setLocalStorageObjProperty( + AUTHENTICATED_USER_KEY, + "accessToken", + accessToken, + ); + + newConfig.headers.Authorization = accessToken; + } + } + + return newConfig; +}); + +export default baseAPIClient; diff --git a/frontend/src/APIClients/EntityAPIClient.ts b/frontend/src/APIClients/EntityAPIClient.ts new file mode 100644 index 0000000..b9063cc --- /dev/null +++ b/frontend/src/APIClients/EntityAPIClient.ts @@ -0,0 +1,121 @@ +import baseAPIClient from "./BaseAPIClient"; +import AUTHENTICATED_USER_KEY from "../constants/AuthConstants"; +import { getLocalStorageObjProperty } from "../utils/LocalStorageUtils"; + +enum EnumField { + "A", + "B", + "C", + "D", +} + +export type EntityRequest = { + stringField: string; + intField: number; + stringArrayField: string[]; + enumField: EnumField; + boolField: boolean; +}; + +export type EntityResponse = { + id: string | number; + stringField: string; + intField: number; + stringArrayField: string[]; + enumField: EnumField; + boolField: boolean; + fileName: string; +}; + +const create = async ({ + formData, +}: { + formData: FormData; +}): Promise => { + const bearerToken = `Bearer ${getLocalStorageObjProperty( + AUTHENTICATED_USER_KEY, + "accessToken", + )}`; + try { + const { data } = await baseAPIClient.post("/entities", formData, { + headers: { Authorization: bearerToken }, + }); + return data; + } catch (error) { + return error; + } +}; + +const get = async (): Promise => { + const bearerToken = `Bearer ${getLocalStorageObjProperty( + AUTHENTICATED_USER_KEY, + "accessToken", + )}`; + try { + const { data } = await baseAPIClient.get("/entities", { + headers: { Authorization: bearerToken }, + }); + return data; + } catch (error) { + return error; + } +}; + +const getFile = async (uuid: string): Promise => { + const bearerToken = `Bearer ${getLocalStorageObjProperty( + AUTHENTICATED_USER_KEY, + "accessToken", + )}`; + try { + const { data } = await baseAPIClient.get(`/entities/files/${uuid}`, { + headers: { Authorization: bearerToken }, + }); + + return data.fileURL + } catch (error) { + return error; + } +}; + +const getCSV = async (): Promise => { + const bearerToken = `Bearer ${getLocalStorageObjProperty( + AUTHENTICATED_USER_KEY, + "accessToken", + )}`; + try { + const { data } = await baseAPIClient.get("/entities", { + // Following line is necessary to set the Content-Type header + // Reference: https://github.com/axios/axios/issues/86 + data: null, + headers: { Authorization: bearerToken, "Content-Type": "text/csv" }, + }); + + return data; + } catch (error) { + return error; + } +}; + +const update = async ( + id: number | string, + { + entityData, + }: { + entityData: FormData; + }, +): Promise => { + const bearerToken = `Bearer ${getLocalStorageObjProperty( + AUTHENTICATED_USER_KEY, + "accessToken", + )}`; + try { + const { data } = await baseAPIClient.put(`/entities/${id}`, entityData, { + headers: { Authorization: bearerToken }, + }); + return data; + } catch (error) { + return error; + } +}; + +export default { create, get, getFile, getCSV, update }; diff --git a/frontend/src/APIClients/SimpleEntityAPIClient.ts b/frontend/src/APIClients/SimpleEntityAPIClient.ts new file mode 100644 index 0000000..8415d18 --- /dev/null +++ b/frontend/src/APIClients/SimpleEntityAPIClient.ts @@ -0,0 +1,107 @@ +import baseAPIClient from "./BaseAPIClient"; +import AUTHENTICATED_USER_KEY from "../constants/AuthConstants"; +import { getLocalStorageObjProperty } from "../utils/LocalStorageUtils"; + +enum EnumField { + "A", + "B", + "C", + "D", +} + +export type SimpleEntityRequest = { + stringField: string; + intField: number; + stringArrayField: string[]; + enumField: EnumField; + boolField: boolean; +}; + +export type SimpleEntityResponse = { + id: string | number; + stringField: string; + intField: number; + stringArrayField: string[]; + enumField: EnumField; + boolField: boolean; +}; + +const create = async ({ + formData, +}: { + formData: SimpleEntityRequest; +}): Promise => { + const bearerToken = `Bearer ${getLocalStorageObjProperty( + AUTHENTICATED_USER_KEY, + "accessToken", + )}`; + try { + const { data } = await baseAPIClient.post("/simple-entities", formData, { + headers: { Authorization: bearerToken }, + }); + return data; + } catch (error) { + return error; + } +}; + +const get = async (): Promise => { + const bearerToken = `Bearer ${getLocalStorageObjProperty( + AUTHENTICATED_USER_KEY, + "accessToken", + )}`; + try { + const { data } = await baseAPIClient.get("/simple-entities", { + headers: { Authorization: bearerToken }, + }); + return data; + } catch (error) { + return error; + } +}; + +const getCSV = async (): Promise => { + const bearerToken = `Bearer ${getLocalStorageObjProperty( + AUTHENTICATED_USER_KEY, + "accessToken", + )}`; + try { + const { data } = await baseAPIClient.get("/simple-entities", { + // Following line is necessary to set the Content-Type header + // Reference: https://github.com/axios/axios/issues/86 + data: null, + headers: { Authorization: bearerToken, "Content-Type": "text/csv" }, + }); + return data; + } catch (error) { + return error; + } +}; + +const update = async ( + id: number | string, + { + entityData, + }: { + entityData: SimpleEntityRequest; + }, +): Promise => { + const bearerToken = `Bearer ${getLocalStorageObjProperty( + AUTHENTICATED_USER_KEY, + "accessToken", + )}`; + try { + const { data } = await baseAPIClient.put( + `/simple-entities/${id}`, + entityData, + { + headers: { Authorization: bearerToken }, + }, + ); + return data; + } catch (error) { + return error; + } +}; + +export default { create, get, getCSV, update }; diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx new file mode 100644 index 0000000..1bd76ee --- /dev/null +++ b/frontend/src/App.tsx @@ -0,0 +1,109 @@ +import "bootstrap/dist/css/bootstrap.min.css"; +import React, { useState, useReducer } from "react"; +import { BrowserRouter as Router, Route, Switch } from "react-router-dom"; + +import Login from "./components/auth/Login"; +import Signup from "./components/auth/Signup"; +import PrivateRoute from "./components/auth/PrivateRoute"; +import CreatePage from "./components/pages/CreatePage"; +import Default from "./components/pages/Default"; +import DisplayPage from "./components/pages/DisplayPage"; +import SimpleEntityCreatePage from "./components/pages/SimpleEntityCreatePage"; +import SimpleEntityDisplayPage from "./components/pages/SimpleEntityDisplayPage"; +import NotFound from "./components/pages/NotFound"; +import UpdatePage from "./components/pages/UpdatePage"; +import SimpleEntityUpdatePage from "./components/pages/SimpleEntityUpdatePage"; +import * as Routes from "./constants/Routes"; +import AUTHENTICATED_USER_KEY from "./constants/AuthConstants"; +import AuthContext from "./contexts/AuthContext"; +import { getLocalStorageObj } from "./utils/LocalStorageUtils"; +import SampleContext, { + DEFAULT_SAMPLE_CONTEXT, +} from "./contexts/SampleContext"; +import sampleContextReducer from "./reducers/SampleContextReducer"; +import SampleContextDispatcherContext from "./contexts/SampleContextDispatcherContext"; +import EditTeamInfoPage from "./components/pages/EditTeamPage"; +import HooksDemo from "./components/pages/HooksDemo"; + +import { AuthenticatedUser } from "./types/AuthTypes"; + +const App = (): React.ReactElement => { + const currentUser: AuthenticatedUser = getLocalStorageObj( + AUTHENTICATED_USER_KEY, + ); + + const [authenticatedUser, setAuthenticatedUser] = useState( + currentUser, + ); + + // Some sort of global state. Context API replaces redux. + // Split related states into different contexts as necessary. + // Split dispatcher and state into separate contexts as necessary. + const [sampleContext, dispatchSampleContextUpdate] = useReducer( + sampleContextReducer, + DEFAULT_SAMPLE_CONTEXT, + ); + + return ( + + + + + + + + + + + + + + + + + + + + + + + ); +}; + +export default App; diff --git a/frontend/src/components/auth/Login.tsx b/frontend/src/components/auth/Login.tsx new file mode 100644 index 0000000..295aeda --- /dev/null +++ b/frontend/src/components/auth/Login.tsx @@ -0,0 +1,106 @@ +import React, { useContext, useState } from "react"; +import { Redirect, useHistory } from "react-router-dom"; +import { + GoogleLogin, + GoogleLoginResponse, + GoogleLoginResponseOffline, +} from "react-google-login"; + +import authAPIClient from "../../APIClients/AuthAPIClient"; +import { HOME_PAGE, SIGNUP_PAGE } from "../../constants/Routes"; +import AuthContext from "../../contexts/AuthContext"; +import { AuthenticatedUser } from "../../types/AuthTypes"; + +type GoogleResponse = GoogleLoginResponse | GoogleLoginResponseOffline; + +type GoogleErrorResponse = { + error: string; + details: string; +}; + +const Login = (): React.ReactElement => { + const { authenticatedUser, setAuthenticatedUser } = useContext(AuthContext); + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + const history = useHistory(); + + const onLogInClick = async () => { + const user: AuthenticatedUser = await authAPIClient.login(email, password); + setAuthenticatedUser(user); + }; + + const onSignUpClick = () => { + history.push(SIGNUP_PAGE); + }; + + const onGoogleLoginSuccess = async (tokenId: string) => { + const user: AuthenticatedUser = await authAPIClient.loginWithGoogle( + tokenId, + ); + setAuthenticatedUser(user); + }; + + if (authenticatedUser) { + return ; + } + + return ( +
+

Login

+
+
+ setEmail(event.target.value)} + placeholder="username@domain.com" + /> +
+
+ setPassword(event.target.value)} + placeholder="password" + /> +
+
+ +
+ { + if ("tokenId" in response) { + onGoogleLoginSuccess(response.tokenId); + } else { + // eslint-disable-next-line no-alert + window.alert(response); + } + }} + onFailure={(error: GoogleErrorResponse) => + // eslint-disable-next-line no-alert + window.alert(JSON.stringify(error)) + } + /> + +
+ +
+
+ ); +}; + +export default Login; diff --git a/frontend/src/components/auth/Logout.tsx b/frontend/src/components/auth/Logout.tsx new file mode 100644 index 0000000..30854a1 --- /dev/null +++ b/frontend/src/components/auth/Logout.tsx @@ -0,0 +1,24 @@ +import React, { useContext } from "react"; + +import authAPIClient from "../../APIClients/AuthAPIClient"; +import AuthContext from "../../contexts/AuthContext"; + + +const Logout = (): React.ReactElement => { + const { authenticatedUser, setAuthenticatedUser } = useContext(AuthContext); + + const onLogOutClick = async () => { + const success = await authAPIClient.logout(authenticatedUser?.id); + if (success) { + setAuthenticatedUser(null); + } + }; + + return ( + + ); +}; + +export default Logout; diff --git a/frontend/src/components/auth/PrivateRoute.tsx b/frontend/src/components/auth/PrivateRoute.tsx new file mode 100644 index 0000000..f020432 --- /dev/null +++ b/frontend/src/components/auth/PrivateRoute.tsx @@ -0,0 +1,27 @@ +import React, { useContext } from "react"; +import { Route, Redirect } from "react-router-dom"; + +import AuthContext from "../../contexts/AuthContext"; +import { LOGIN_PAGE } from "../../constants/Routes"; + +type PrivateRouteProps = { + component: React.FC; + path: string; + exact: boolean; +}; + +const PrivateRoute: React.FC = ({ + component, + exact, + path, +}: PrivateRouteProps) => { + const { authenticatedUser } = useContext(AuthContext); + + return authenticatedUser ? ( + + ) : ( + + ); +}; + +export default PrivateRoute; diff --git a/frontend/src/components/auth/RefreshCredentials.tsx b/frontend/src/components/auth/RefreshCredentials.tsx new file mode 100644 index 0000000..f946880 --- /dev/null +++ b/frontend/src/components/auth/RefreshCredentials.tsx @@ -0,0 +1,24 @@ +import React, { useContext } from "react"; + +import authAPIClient from "../../APIClients/AuthAPIClient"; +import AuthContext from "../../contexts/AuthContext"; + + +const RefreshCredentials = (): React.ReactElement => { + const { setAuthenticatedUser } = useContext(AuthContext); + + const onRefreshClick = async () => { + const success = await authAPIClient.refresh(); + if (!success) { + setAuthenticatedUser(null); + } + }; + + return ( + + ); +}; + +export default RefreshCredentials; diff --git a/frontend/src/components/auth/ResetPassword.tsx b/frontend/src/components/auth/ResetPassword.tsx new file mode 100644 index 0000000..d5151de --- /dev/null +++ b/frontend/src/components/auth/ResetPassword.tsx @@ -0,0 +1,23 @@ +import React, { useContext } from "react"; +import authAPIClient from "../../APIClients/AuthAPIClient"; +import AuthContext from "../../contexts/AuthContext"; + +const ResetPassword = (): React.ReactElement => { + const { authenticatedUser } = useContext(AuthContext); + + const onResetPasswordClick = async () => { + await authAPIClient.resetPassword(authenticatedUser?.email); + }; + + return ( + + ); +}; + +export default ResetPassword; diff --git a/frontend/src/components/auth/Signup.tsx b/frontend/src/components/auth/Signup.tsx new file mode 100644 index 0000000..60737ab --- /dev/null +++ b/frontend/src/components/auth/Signup.tsx @@ -0,0 +1,80 @@ +import React, { useContext, useState } from "react"; +import { Redirect } from "react-router-dom"; + +import authAPIClient from "../../APIClients/AuthAPIClient"; +import { HOME_PAGE } from "../../constants/Routes"; +import AuthContext from "../../contexts/AuthContext"; +import { AuthenticatedUser } from "../../types/AuthTypes"; + +const Signup = (): React.ReactElement => { + const { authenticatedUser, setAuthenticatedUser } = useContext(AuthContext); + const [firstName, setFirstName] = useState(""); + const [lastName, setLastName] = useState(""); + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + + const onSignupClick = async () => { + const user: AuthenticatedUser = await authAPIClient.register( + firstName, + lastName, + email, + password, + ); + setAuthenticatedUser(user); + }; + + if (authenticatedUser) { + return ; + } + + return ( +
+

Signup

+
+
+ setFirstName(event.target.value)} + placeholder="first name" + /> +
+
+ setLastName(event.target.value)} + placeholder="last name" + /> +
+
+ setEmail(event.target.value)} + placeholder="username@domain.com" + /> +
+
+ setPassword(event.target.value)} + placeholder="password" + /> +
+
+ +
+
+
+ ); +}; + +export default Signup; diff --git a/frontend/src/components/common/MainPageButton.tsx b/frontend/src/components/common/MainPageButton.tsx new file mode 100644 index 0000000..62d3596 --- /dev/null +++ b/frontend/src/components/common/MainPageButton.tsx @@ -0,0 +1,22 @@ +import React from "react"; +import { useHistory } from "react-router-dom"; +import { HOME_PAGE } from "../../constants/Routes"; + +const MainPageButton = (): React.ReactElement => { + const history = useHistory(); + const navigateTo = () => history.push(HOME_PAGE); + return ( +
+ +
+ ); +}; + +export default MainPageButton; diff --git a/frontend/src/components/common/__tests__/MainPageButton.spec.tsx b/frontend/src/components/common/__tests__/MainPageButton.spec.tsx new file mode 100644 index 0000000..0b72d7f --- /dev/null +++ b/frontend/src/components/common/__tests__/MainPageButton.spec.tsx @@ -0,0 +1,15 @@ +import React from "react"; +import { create } from "react-test-renderer"; +import MainPageButton from "../MainPageButton"; + +// Example snapshot test. +// For more information on React testing, visit: +// https://jestjs.io/docs/tutorial-react +// https://reactjs.org/docs/testing.html + +describe("MainPageButton component", () => { + it("should match the snapshot", () => { + const button = create(); + expect(button.toJSON()).toMatchSnapshot(); + }); +}); diff --git a/frontend/src/components/common/__tests__/__snapshots__/MainPageButton.spec.tsx.snap b/frontend/src/components/common/__tests__/__snapshots__/MainPageButton.spec.tsx.snap new file mode 100644 index 0000000..f4e9836 --- /dev/null +++ b/frontend/src/components/common/__tests__/__snapshots__/MainPageButton.spec.tsx.snap @@ -0,0 +1,18 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`MainPageButton component should match the snapshot 1`] = ` +
+ +
+`; diff --git a/frontend/src/components/crud/CreateForm.tsx b/frontend/src/components/crud/CreateForm.tsx new file mode 100644 index 0000000..3c4e595 --- /dev/null +++ b/frontend/src/components/crud/CreateForm.tsx @@ -0,0 +1,105 @@ +import React, { useState } from "react"; +import { JSONSchema7 } from "json-schema"; +import { Form } from "@rjsf/bootstrap-4"; +import EntityAPIClient, { + EntityRequest, + EntityResponse, +} from "../../APIClients/EntityAPIClient"; + +const schema: JSONSchema7 = { + title: "Create Entity", + description: "A simple form to test creating an entity", + type: "object", + required: [ + "stringField", + "intField", + "stringArrayField", + "enumField", + "boolField", + ], + properties: { + stringField: { + type: "string", + title: "String Field", + default: "UW Blueprint", + }, + intField: { + type: "integer", + title: "Integer Field", + default: 2017, + }, + stringArrayField: { + type: "array", + items: { + type: "string", + }, + title: "String Array Field", + default: [], + }, + enumField: { + type: "string", + enum: ["A", "B", "C", "D"], + title: "Enum Field", + default: "A", + }, + boolField: { + type: "boolean", + title: "Boolean Field", + default: true, + }, + }, +}; + +const uiSchema = { + boolField: { + "ui:widget": "select", + }, +}; + +const CreateForm = (): React.ReactElement => { + const [data, setData] = useState(null); + const [fileField, setFileField] = useState(null); + const [formFields, setFormFields] = useState(null); + + if (data) { + return

Created! ✔️

; + } + + const fileChanged = (e: { target: HTMLInputElement }) => { + if (e.target.files) { + const fileSize = e.target.files[0].size / 1024 / 1024; + if (fileSize > 5) { + // eslint-disable-next-line no-alert + window.alert("Your file exceeds 5MB. Upload a smaller file."); + } else { + setFileField(e.target.files[0]); + } + } + }; + + const onSubmit = async ({ formData }: { formData: EntityRequest }) => { + const multipartFormData = new FormData(); + multipartFormData.append("body", JSON.stringify(formData)); + if (fileField) { + multipartFormData.append("file", fileField); + } + const result = await EntityAPIClient.create({ formData: multipartFormData }); + setData(result); + }; + return ( + <> + +
+ setFormFields(formData) + } + onSubmit={onSubmit} + /> + + ); +}; + +export default CreateForm; diff --git a/frontend/src/components/crud/DisplayTableContainer.tsx b/frontend/src/components/crud/DisplayTableContainer.tsx new file mode 100644 index 0000000..ba0c8fe --- /dev/null +++ b/frontend/src/components/crud/DisplayTableContainer.tsx @@ -0,0 +1,179 @@ +/* eslint react/jsx-props-no-spreading: 0 */ // --> OFF +import React, { useState, useEffect } from "react"; +import BTable from "react-bootstrap/Table"; +import { HeaderGroup, useTable, Column } from "react-table"; + + +import EntityAPIClient, { + EntityResponse, +} from "../../APIClients/EntityAPIClient"; +import { downloadCSV } from "../../utils/CSVUtils"; +import { downloadFile } from "../../utils/FileUtils"; + +type EntityData = Omit & { boolField: string }; + +const convert = (entityResponse: EntityResponse): EntityData => { + return { + id: entityResponse.id, + stringField: entityResponse.stringField, + intField: entityResponse.intField, + stringArrayField: entityResponse.stringArrayField, + enumField: entityResponse.enumField, + boolField: entityResponse.boolField.toString(), + fileName: entityResponse.fileName, + }; +}; + +type TableProps = { + data: EntityData[]; + downloadEntityFile: (fileUUID: string) => void; +}; + +const createColumns = ( + downloadEntityFile: (fileUUID: string) => void, +): Column[] => [ + { + Header: "id", + + accessor: "id", // accessor is the "key" in the data + }, + { + Header: "stringField", + + accessor: "stringField", // accessor is the "key" in the data + }, + + { + Header: "integerField", + + accessor: "intField", + }, + { + Header: "stringArrayField", + + accessor: "stringArrayField", + }, + { + Header: "enumField", + + accessor: "enumField", + }, + { + Header: "boolField", + + accessor: "boolField", + }, + { + Header: "fileName", + + accessor: "fileName", + + // eslint-disable-next-line react/display-name, @typescript-eslint/no-explicit-any + Cell: ({ cell }: any) => + // TODO: lookup the proper type of the prop + cell.row.values.fileName ? ( + + ) : null, + }, +]; + +const DisplayTable = ({ data, downloadEntityFile }: TableProps) => { + const { + getTableProps, + + headerGroups, + + rows, + + prepareRow, + } = useTable({ + columns: createColumns(downloadEntityFile), + data, + }); + + return ( + + + {headerGroups.map((headerGroup: HeaderGroup) => ( + // Key is specified in the prop getter functions + // eslint-disable-next-line react/jsx-key + + {headerGroup.headers.map((column) => ( + // eslint-disable-next-line react/jsx-key + {column.render("Header")} + ))} + + ))} + + + {rows.map((row) => { + prepareRow(row); + return ( + // eslint-disable-next-line react/jsx-key + + {row.cells.map((cell) => { + // eslint-disable-next-line react/jsx-key + return {cell.render("Cell")}; + })} + + ); + })} + + + ); +}; + +const DisplayTableContainer: React.FC = (): React.ReactElement | null => { + const [entities, setEntities] = useState(null); + + useEffect(() => { + const retrieveAndUpdateData = async () => { + const result = await EntityAPIClient.get(); + if (result) { + setEntities(result.map((r: EntityResponse) => convert(r))); + } + }; + retrieveAndUpdateData(); + }, []); + + const downloadEntityFile = async (fileUUID: string) => { + + const data = await EntityAPIClient.getFile(fileUUID); + downloadFile(data, "file"); + }; + + const downloadEntitiesCSV = async () => { + if (entities) { + const csvString = await EntityAPIClient.getCSV(); + downloadCSV(csvString, "export.csv"); + // Use the following lines to download CSV using frontend CSV generation instead of API + // const csvString = await generateCSV({ data: entities }); + // downloadCSV(csvString, "export.csv"); + } + }; + + return ( + <> + + {entities && ( + + )} + + ); +}; + +export default DisplayTableContainer; diff --git a/frontend/src/components/crud/SimpleEntityCreateForm.tsx b/frontend/src/components/crud/SimpleEntityCreateForm.tsx new file mode 100644 index 0000000..76abd4f --- /dev/null +++ b/frontend/src/components/crud/SimpleEntityCreateForm.tsx @@ -0,0 +1,86 @@ +import React, { useState } from "react"; +import { JSONSchema7 } from "json-schema"; +import { Form } from "@rjsf/bootstrap-4"; +import SimpleEntityAPIClient, { + SimpleEntityRequest, + SimpleEntityResponse, +} from "../../APIClients/SimpleEntityAPIClient"; + +const schema: JSONSchema7 = { + title: "Create Simple Entity", + description: "A simple form to test creating a simple entity", + type: "object", + required: [ + "stringField", + "intField", + "stringArrayField", + "enumField", + "boolField", + ], + properties: { + stringField: { + type: "string", + title: "String Field", + default: "UW Blueprint", + }, + intField: { + type: "integer", + title: "Integer Field", + default: 2017, + }, + stringArrayField: { + type: "array", + items: { + type: "string", + }, + title: "String Array Field", + default: [], + }, + enumField: { + type: "string", + enum: ["A", "B", "C", "D"], + title: "Enum Field", + default: "A", + }, + boolField: { + type: "boolean", + title: "Boolean Field", + default: true, + }, + }, +}; + +const uiSchema = { + boolField: { + "ui:widget": "select", + }, +}; + +const SimpleEntityCreateForm = (): React.ReactElement => { + const [data, setData] = useState(null); + const [formFields, setFormFields] = useState( + null, + ); + + if (data) { + return

Created! ✔️

; + } + + const onSubmit = async ({ formData }: { formData: SimpleEntityRequest }) => { + const result = await SimpleEntityAPIClient.create({ formData }); + setData(result); + }; + return ( + + setFormFields(formData) + } + onSubmit={onSubmit} + /> + ); +}; + +export default SimpleEntityCreateForm; diff --git a/frontend/src/components/crud/SimpleEntityDisplayTableContainer.tsx b/frontend/src/components/crud/SimpleEntityDisplayTableContainer.tsx new file mode 100644 index 0000000..5a857c4 --- /dev/null +++ b/frontend/src/components/crud/SimpleEntityDisplayTableContainer.tsx @@ -0,0 +1,147 @@ +/* eslint react/jsx-props-no-spreading: 0 */ // --> OFF +import React, { useState, useEffect } from "react"; +import BTable from "react-bootstrap/Table"; +import { HeaderGroup, useTable, Column } from "react-table"; + +import SimpleEntityAPIClient, { + SimpleEntityResponse, +} from "../../APIClients/SimpleEntityAPIClient"; +import { downloadCSV } from "../../utils/CSVUtils"; + +type EntityData = Omit & { + boolField: string; +}; + +const convert = (entityResponse: SimpleEntityResponse): EntityData => { + return { + id: entityResponse.id, + stringField: entityResponse.stringField, + intField: entityResponse.intField, + stringArrayField: entityResponse.stringArrayField, + enumField: entityResponse.enumField, + boolField: entityResponse.boolField.toString(), + }; +}; + +type TableProps = { + data: EntityData[]; +}; + +const columns: Column[] = [ + { + Header: "id", + + accessor: "id", // accessor is the "key" in the data + }, + { + Header: "stringField", + + accessor: "stringField", // accessor is the "key" in the data + }, + + { + Header: "integerField", + + accessor: "intField", + }, + { + Header: "stringArrayField", + + accessor: "stringArrayField", + }, + { + Header: "enumField", + + accessor: "enumField", + }, + { + Header: "boolField", + + accessor: "boolField", + }, +]; + +const SimpleEntityDisplayTable = ({ data }: TableProps) => { + const { + getTableProps, + + headerGroups, + + rows, + + prepareRow, + } = useTable({ columns, data }); + + return ( + + + {headerGroups.map((headerGroup: HeaderGroup) => ( + // Key is specified in the prop getter functions + // eslint-disable-next-line react/jsx-key + + {headerGroup.headers.map((column) => ( + // eslint-disable-next-line react/jsx-key + {column.render("Header")} + ))} + + ))} + + + {rows.map((row) => { + prepareRow(row); + return ( + // eslint-disable-next-line react/jsx-key + + {row.cells.map((cell) => { + // eslint-disable-next-line react/jsx-key + return {cell.render("Cell")}; + })} + + ); + })} + + + ); +}; + +const SimpleEntityDisplayTableContainer: React.FC = (): React.ReactElement | null => { + const [entities, setEntities] = useState(null); + + useEffect(() => { + const retrieveAndUpdateData = async () => { + const result = await SimpleEntityAPIClient.get(); + if (result) { + setEntities(result.map((r: SimpleEntityResponse) => convert(r))); + } + }; + retrieveAndUpdateData(); + }, []); + + const downloadEntitiesCSV = async () => { + if (entities) { + const csvString = await SimpleEntityAPIClient.getCSV(); + downloadCSV(csvString, "export.csv"); + // Use the following lines to download CSV using frontend CSV generation instead of API + // const csvString = await generateCSV({ data: entities }); + // downloadCSV(csvString, "export.csv"); + } + }; + + return ( + <> + + {entities && } + + ); +}; + +export default SimpleEntityDisplayTableContainer; diff --git a/frontend/src/components/crud/SimpleEntityUpdateForm.tsx b/frontend/src/components/crud/SimpleEntityUpdateForm.tsx new file mode 100644 index 0000000..2610ef6 --- /dev/null +++ b/frontend/src/components/crud/SimpleEntityUpdateForm.tsx @@ -0,0 +1,96 @@ +import React, { useState } from "react"; +import { JSONSchema7 } from "json-schema"; +import { Form } from "@rjsf/bootstrap-4"; +import SimpleEntityAPIClient, { + SimpleEntityRequest, + SimpleEntityResponse, +} from "../../APIClients/SimpleEntityAPIClient"; + +const schema: JSONSchema7 = { + title: "Update Simple Entity", + description: "A simple form to test updating a simple entity", + type: "object", + required: [ + "id", + "stringField", + "intField", + "stringArrayField", + "enumField", + "boolField", + ], + properties: { + id: { + type: "string", + title: "entity id", + default: "123abc456def7890ghij1234", + }, + stringField: { + type: "string", + title: "String Field", + default: "UW Blueprint", + }, + intField: { + type: "integer", + title: "Integer Field", + default: 2017, + }, + stringArrayField: { + type: "array", + items: { + type: "string", + }, + title: "String Array Field", + default: [], + }, + enumField: { + type: "string", + enum: ["A", "B", "C", "D"], + title: "Enum Field", + default: "A", + }, + boolField: { + type: "boolean", + title: "Boolean Field", + default: true, + }, + }, +}; + +const uiSchema = { + boolField: { + "ui:widget": "select", + }, +}; + +const SimpleEntityUpdateForm = (): React.ReactElement => { + const [data, setData] = useState(null); + const [formFields, setFormFields] = useState( + null, + ); + + if (data) { + return

Updated! ✔️

; + } + + const onSubmit = async ({ formData }: { formData: SimpleEntityResponse }) => { + const { id, ...entityData } = formData; + + const result = await SimpleEntityAPIClient.update(formData.id, { + entityData, + }); + setData(result); + }; + return ( + + setFormFields(formData) + } + onSubmit={onSubmit} + /> + ); +}; + +export default SimpleEntityUpdateForm; diff --git a/frontend/src/components/crud/UpdateForm.tsx b/frontend/src/components/crud/UpdateForm.tsx new file mode 100644 index 0000000..decca84 --- /dev/null +++ b/frontend/src/components/crud/UpdateForm.tsx @@ -0,0 +1,116 @@ +import React, { useState } from "react"; +import { JSONSchema7 } from "json-schema"; +import { Form } from "@rjsf/bootstrap-4"; +import EntityAPIClient, { + EntityRequest, + EntityResponse, +} from "../../APIClients/EntityAPIClient"; + +const schema: JSONSchema7 = { + title: "Update Entity", + description: "A simple form to test updating an entity", + type: "object", + required: [ + "id", + "stringField", + "intField", + "stringArrayField", + "enumField", + "boolField", + ], + properties: { + id: { + type: "string", + title: "entity id", + default: "123abc456def7890ghij1234", + }, + stringField: { + type: "string", + title: "String Field", + default: "UW Blueprint", + }, + intField: { + type: "integer", + title: "Integer Field", + default: 2017, + }, + stringArrayField: { + type: "array", + items: { + type: "string", + }, + title: "String Array Field", + default: [], + }, + enumField: { + type: "string", + enum: ["A", "B", "C", "D"], + title: "Enum Field", + default: "A", + }, + boolField: { + type: "boolean", + title: "Boolean Field", + default: true, + }, + }, +}; + +const uiSchema = { + boolField: { + "ui:widget": "select", + }, +}; + +const UpdateForm = (): React.ReactElement => { + const [data, setData] = useState(null); + const [fileField, setFileField] = useState(null); + const [formFields, setFormFields] = useState(null); + + if (data) { + return

Updated! ✔️

; + } + + const fileChanged = (e: { target: HTMLInputElement }) => { + if (e.target.files) { + const fileSize = e.target.files[0].size / 1024 / 1024; + if (fileSize > 5) { + // eslint-disable-next-line no-alert + window.alert("Your file exceeds 5MB. Upload a smaller file."); + } else { + setFileField(e.target.files[0]); + } + } + }; + + const onSubmit = async ({ formData }: { formData: EntityResponse }) => { + const { id, ...entityData } = formData; + + const multipartFormData = new FormData(); + multipartFormData.append("body", JSON.stringify(entityData)); + if (fileField) { + multipartFormData.append("file", fileField); + } + const result = await EntityAPIClient.update( + formData.id, + { entityData: multipartFormData } + ); + setData(result); + }; + return ( + <> + + + setFormFields(formData) + } + onSubmit={onSubmit} + /> + + ); +}; + +export default UpdateForm; diff --git a/frontend/src/components/pages/CreatePage.tsx b/frontend/src/components/pages/CreatePage.tsx new file mode 100644 index 0000000..904d6aa --- /dev/null +++ b/frontend/src/components/pages/CreatePage.tsx @@ -0,0 +1,15 @@ +import React from "react"; +import CreateForm from "../crud/CreateForm"; +import MainPageButton from "../common/MainPageButton"; + +const CreatePage = (): React.ReactElement => { + return ( +
+

Default Page

+ + +
+ ); +}; + +export default CreatePage; diff --git a/frontend/src/components/pages/Default.tsx b/frontend/src/components/pages/Default.tsx new file mode 100644 index 0000000..f451a12 --- /dev/null +++ b/frontend/src/components/pages/Default.tsx @@ -0,0 +1,74 @@ +import React, { useContext } from "react"; +import { useHistory } from "react-router-dom"; +import * as Routes from "../../constants/Routes"; +import SampleContext from "../../contexts/SampleContext"; + +import Logout from "../auth/Logout"; +import RefreshCredentials from "../auth/RefreshCredentials"; +import ResetPassword from "../auth/ResetPassword"; + +type ButtonProps = { text: string; path: string }; + +const Button = ({ text, path }: ButtonProps) => { + const history = useHistory(); + const navigateTo = () => history.push(path); + return ( + + ); +}; + +const TeamInfoDisplay = () => { + const { teamName, numTerms, members, isActive } = useContext(SampleContext); + return ( +
+

Team Info

+
Name: {teamName}
+
# terms: {numTerms}
+
+ Members:{" "} + {members.map( + (name, i) => ` ${name}${i === members.length - 1 ? "" : ","}`, + )} +
+
Active: {isActive ? "Yes" : "No"}
+
+ ); +}; + +const Default = (): React.ReactElement => { + return ( +
+

Default Page

+
+ + + +
+ +
+ + +
+ ); +}; + +export default Default; diff --git a/frontend/src/components/pages/DisplayPage.tsx b/frontend/src/components/pages/DisplayPage.tsx new file mode 100644 index 0000000..a9d7f79 --- /dev/null +++ b/frontend/src/components/pages/DisplayPage.tsx @@ -0,0 +1,15 @@ +import React from "react"; +import DisplayTableContainer from "../crud/DisplayTableContainer"; +import MainPageButton from "../common/MainPageButton"; + +const GetPage = (): React.ReactElement => { + return ( +
+

Default Page

+ + +
+ ); +}; + +export default GetPage; diff --git a/frontend/src/components/pages/EditTeamPage.tsx b/frontend/src/components/pages/EditTeamPage.tsx new file mode 100644 index 0000000..3d5457a --- /dev/null +++ b/frontend/src/components/pages/EditTeamPage.tsx @@ -0,0 +1,93 @@ +import React, { useContext, useState } from "react"; +import SampleContext from "../../contexts/SampleContext"; +import MainPageButton from "../common/MainPageButton"; +import SampleContextDispatcherContext from "../../contexts/SampleContextDispatcherContext"; + +type DeleteButtonProps = { index: number; onClick: (index: number) => void }; + +const DeleteMemberButton: React.FC = ({ + index, + onClick, +}: DeleteButtonProps) => { + return ( + + ); +}; + +const EditTeamInfoPage = (): React.ReactElement => { + const { teamName, numTerms, members } = useContext(SampleContext); + const dispatchTeamUpdate = useContext(SampleContextDispatcherContext); + const [newMember, setNewMember] = useState(""); + + const setName = (e: React.FormEvent) => { + dispatchTeamUpdate({ type: "EDIT_NAME", value: e.currentTarget.value }); + }; + + const setNumTerms = (e: React.FormEvent) => { + dispatchTeamUpdate({ + type: "EDIT_NUM_TERMS", + value: parseInt(e.currentTarget.value, 10), + }); + }; + + const onMemberDelete = (index: number) => { + dispatchTeamUpdate({ + type: "EDIT_MEMBERS", + value: [...members.slice(0, index), ...members.slice(index + 1)], + }); + }; + + const onMemberAdd = () => { + dispatchTeamUpdate({ + type: "EDIT_MEMBERS", + value: [...members, newMember], + }); + }; + + return ( +
+

Edit Team

+
+ Team Name: +
+
+ Num Terms:{" "} + +
+
+ Members: + {members.map((_name, i) => ( +
+ {_name} + +
+ ))} +
+
+ { + setNewMember(e.target.value); + }} + /> + +
+ +
+ ); +}; + +export default EditTeamInfoPage; diff --git a/frontend/src/components/pages/HooksDemo/EmojiSection.tsx b/frontend/src/components/pages/HooksDemo/EmojiSection.tsx new file mode 100644 index 0000000..107f6d4 --- /dev/null +++ b/frontend/src/components/pages/HooksDemo/EmojiSection.tsx @@ -0,0 +1,56 @@ +import React, { forwardRef } from "react"; + +type Props = { + title: string; + description: string; + notes?: string[]; + emoji: string; + onClick?: (emoji: string) => void; +}; + +// React.forwardRef https://reactjs.org/docs/react-api.html#reactforwardref +// forwardRef allows us to forward a passed ref attribute further down the +// the DOM tree. +const EmojiSection = forwardRef( + ( + { title, description, notes, emoji, onClick }: Props, + ref, + ): React.ReactElement => { + function handleClick() { + if (onClick) { + onClick(emoji); + } + } + + return ( +
+

{title}

+
+
{emoji}
+

{description}

+
+ {notes && ( + <> +
Notes:
+
    + {notes.map( + (note: string, i: number): React.ReactElement => ( +
  • {note}
  • + ), + )} +
+ + )} +
+ ); + }, +); + +// This is necessary because we are using forwardRef. +EmojiSection.displayName = "EmojiSection"; + +// React.memo https://reactjs.org/docs/react-api.html#reactmemo +// React.memo prevents the component passed in from re-rendering if +// its props have not changed. Note that it only performs a shallow +// comparison on each prop. +export default React.memo(EmojiSection); diff --git a/frontend/src/components/pages/HooksDemo/HooksDemo.tsx b/frontend/src/components/pages/HooksDemo/HooksDemo.tsx new file mode 100644 index 0000000..d9717ea --- /dev/null +++ b/frontend/src/components/pages/HooksDemo/HooksDemo.tsx @@ -0,0 +1,211 @@ +/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */ +/* eslint-disable no-console */ + +// *************************************************************** +// This page is meant to be a hooks crash course and demo basic +// hook functionality in React. +// To learn more about React hooks and the most up to date +// patterns, check out the official docs at: +// +// https://reactjs.org/docs/hooks-intro.html +// +// Hooks demonstrated on this page: +// * useState +// * useRef +// * useCallback +// +// For an example of a custom hook using useEffect, see: +// https://github.com/uwblueprint/arbitrium/blob/master/src/Hooks/usePromise.ts +// https://github.com/uwblueprint/arbitrium/blob/master/src/Hooks/useAsyncFetch.ts +// *************************************************************** + +// *************************************************************** +// FUNCTIONAL COMPONENTS VS. CLASS COMPONENTS +// +// In component classes, we use lifecycle methods such as +// componentDidMount, componentDidUpdate, render, etc. to +// trigger side effects and update / manage the component. +// +// Another way to define a React component is as a function. +// Functional components with hooks remove the boilerplate of +// class components and their lifecycle methods. You can now +// reason about React components as you would any other function. +// Hooks allow us to inject state into functional components, +// and retain values between renders of the component. +// *************************************************************** + +import React, { useEffect, useState, useRef, useCallback } from "react"; +import EmojiSection from "./EmojiSection"; + +import { EMOJIS } from "./emojis"; +import "./styles.css"; + +type BannerState = { + emoji: string; + showBanner: boolean; +}; + +const HooksDemo = (): React.ReactElement => { + const [showScrollButton, setShowScrollButton] = useState(false); + const [bannerState, setBannerState] = useState({ + emoji: "", + showBanner: false, + }); + + // useRef allows us to store mutable, persistent values between + // renders. Here we store an array of HTMLDivElement refs so + // we can scroll each section into view. + const sectionRefs = useRef[]>( + new Array(EMOJIS.length).fill(React.createRef()), + ); + + useEffect( + () => { + // useEffect is the most basic and powerful hook. You can use + // useEffect to build out your own custom hooks. + // + // The first parameter of useEffect is a function. useEffect + // should be used for dealing with side effects that aren't + // visible, such as data fetching, logging, etc. + // + // The second paramter is an array of dependent variables. + // On each re-render the effect will check if any values in + // its dependency array has changed, and will only re-run the + // effect if it determines there's at least one change. + // All effects will run the first time on mount. + // + // As our dependency array below is empty, this effect will only + // run when the component mounts. + console.log("Component mounted!"); + + function onScroll() { + // This may seem like we are triggering an update on every scroll, + // which would be bad. + // However, the set state function returned by useState actually + // bails out if a shallow comparison of the previous and next + // state is the same. + if (window.pageYOffset > 100) { + setShowScrollButton(true); + } else if (window.pageYOffset <= 100) { + setShowScrollButton(false); + } + } + + // Set up a listener for scroll events. + window.addEventListener("scroll", onScroll); + + return () => { + // The return value for useEffect callback is an optional + // cleanup function. Remember to clean up after your effects + // or risk introducing memory leaks. + // + // This function is run on unmount, and on each re-render + // before running the effect again (i.e. a previously running + // effect is cleaned up before being re-applied). You can learn + // more about why cleanup functions are run on each re-render, + // and how to opt out if desired (ex: performance concerns) at: + // https://reactjs.org/docs/hooks-effect.html + window.removeEventListener("scroll", onScroll); + }; + }, + [] /* dependency array */, + ); + + useEffect(() => { + if (!bannerState.showBanner) return (): void => {}; + + const bannerTimer = setTimeout(() => { + setBannerState({ emoji: bannerState.emoji, showBanner: false }); + // Show banner for 5 seconds + }, 5000); + + return (): void => { + // Recall cleanup functions are automatically applied before + // applying the effect on a re-render. In this case, we definitely + // don't want to opt out of that behaviour, as we want to clear the + // previous timeout before setting a new one. + clearTimeout(bannerTimer); + }; + + // Note our dependency array contains one value. Thus, this effect + // will run when the bannerState is changed via setBannerState. + }, [bannerState]); + + const onSectionClick = useCallback((emoji: string): void => { + // useCallback is used to memoize callback functions passed to + // memoized child components or functions that may be used in hooks + // dependency arrays. + // + // A new function is only generated if anything in the + // dependency array has changed between renders. Without useCallback, + // a new onSectionClick would be generated every time and we would + // need to re-render each section, since we are passing in a 'new' + // prop. + // + // The useMemo hook exists for memoizing values instead of functions. + navigator.clipboard.writeText(emoji); + setBannerState({ showBanner: true, emoji }); + }, []); + + const scrollToTop = () => { + window.scrollTo({ + top: 0, + behavior: "smooth", + }); + }; + + return ( +
+ {showScrollButton && ( + + )} + {bannerState.showBanner && ( +
+ Copied {bannerState.emoji} to clipboard! +
+ )} +
+

📖 Emoji Dictionary 🧠

+

Some of Internal Tools' fave emojis 🎉

+
Click a section to copy the emoji!
+
+ Table of contents: +
    + {EMOJIS.map((emoji, i: number) => ( +
  • + sectionRefs.current[i].current?.scrollIntoView({ + behavior: "smooth", + }) + } + className="page-nav-item" + key={i} + > + {emoji.emoji} +
  • + ))} +
+
+ {EMOJIS.map((emoji, i: number) => ( + + ))} +
+
+ ); +}; + +export default HooksDemo; diff --git a/frontend/src/components/pages/HooksDemo/emojis.ts b/frontend/src/components/pages/HooksDemo/emojis.ts new file mode 100644 index 0000000..e0cc7e3 --- /dev/null +++ b/frontend/src/components/pages/HooksDemo/emojis.ts @@ -0,0 +1,67 @@ +export type EmojiInfo = { + name: string; + emoji: string; + description: string; + uses?: string[]; +}; + +export const EMOJIS: EmojiInfo[] = [ + { + name: "Smiley face", + emoji: "🙂", + description: "The simplest smiley face emoji :).", + uses: [ + "possible passive aggression", + "said you're fine but actually dead inside", + "customer service", + ], + }, + { + name: "Scream", + emoji: "😱", + description: "Emoji holding their face and screaming.", + uses: ["AAAAAAAAAAAAA", "broke main", "exams"], + }, + { + name: "Skull", + emoji: "💀", + description: "Just a skull.", + uses: ["aaaaaaa", "laughter(?)"], + }, + { + name: "Train station", + emoji: "🚉", + description: "Train stationed at a train stop.", + uses: ["we love public transit", "please stand clear of the doors"], + }, + { + name: "Clown", + emoji: "🤡", + description: "A clown face.", + uses: ["oh no", "did something dumb", "broke main again"], + }, + { + name: "Zany", + emoji: "🤪", + description: "A silly face with wide eyes and tongue stuck out.", + uses: ["git push main --force", "dynamic typing"], + }, + { + name: "Thinking", + emoji: "🤔", + description: "Emoji thinking hard, stroking chin with raised eyebrow.", + uses: ["hmmmmmmmmmmmmmmm", "why my code not working"], + }, + { + name: "Blushing smiley face", + emoji: "😊", + description: "A blushing smiley face, with eyes closed.", + uses: ["genuine happiness or something"], + }, + { + name: "👁👄👁", + emoji: "👁👄👁", + description: "A face. Two eyes and a mouth.", + uses: ["it is what it is"], + }, +]; diff --git a/frontend/src/components/pages/HooksDemo/index.ts b/frontend/src/components/pages/HooksDemo/index.ts new file mode 100644 index 0000000..0b6ae48 --- /dev/null +++ b/frontend/src/components/pages/HooksDemo/index.ts @@ -0,0 +1,3 @@ +import HooksDemo from "./HooksDemo"; + +export default HooksDemo; diff --git a/frontend/src/components/pages/HooksDemo/styles.css b/frontend/src/components/pages/HooksDemo/styles.css new file mode 100644 index 0000000..94635e2 --- /dev/null +++ b/frontend/src/components/pages/HooksDemo/styles.css @@ -0,0 +1,71 @@ +/* Simple styling for HooksDemo, for demo convenience. */ + +.page-root { + position: relative; + margin-bottom: 28px; +} + +.page-content { + margin: 0 auto; + width: fit-content; + max-width: 80%; +} + +.page-scroll-top-button { + position: fixed; + top: 20px; + left: 28px; + font-size: 1.5rem; +} + +.page-banner { + background: rgba(0, 0, 0, 0.2); + padding: 10px; + font-size: 2rem; + position: fixed; + right: 40px; + top: 20px; +} + +.page-nav { + columns: 2; + margin-bottom: 20px; + padding-bottom: 28px; + border-bottom: gray 5px solid; +} +.page-nav-item { + font-size: 1.5rem; +} + +.page-nav-item:hover { + cursor: pointer; + background: rgba(0, 0, 0, 0.2); +} + +.section-root { + margin-bottom: 1rem; + padding: 10px 15px; + border-left: 5px solid transparent; +} + +.section-root:hover { + cursor: pointer; + background: rgba(0, 0, 0, 0.1); + border-left: gray 5px solid; +} + +.section-body { + display: flex; + align-items: center; +} + +.section-emoji { + font-size: 64px; +} + +.section-description { + margin-left: 12px; + height: fit-content; + font-size: 1.1rem; + padding: 10px; +} diff --git a/frontend/src/components/pages/NotFound.tsx b/frontend/src/components/pages/NotFound.tsx new file mode 100644 index 0000000..ed8d826 --- /dev/null +++ b/frontend/src/components/pages/NotFound.tsx @@ -0,0 +1,11 @@ +import React from "react"; + +const NotFound = (): React.ReactElement => { + return ( +
+

404 Not Found 🙁

+
+ ); +}; + +export default NotFound; diff --git a/frontend/src/components/pages/SimpleEntityCreatePage.tsx b/frontend/src/components/pages/SimpleEntityCreatePage.tsx new file mode 100644 index 0000000..5464334 --- /dev/null +++ b/frontend/src/components/pages/SimpleEntityCreatePage.tsx @@ -0,0 +1,15 @@ +import React from "react"; +import SimpleEntityCreateForm from "../crud/SimpleEntityCreateForm"; +import MainPageButton from "../common/MainPageButton"; + +const SimpleEntityCreatePage = (): React.ReactElement => { + return ( +
+

Default Page

+ + +
+ ); +}; + +export default SimpleEntityCreatePage; diff --git a/frontend/src/components/pages/SimpleEntityDisplayPage.tsx b/frontend/src/components/pages/SimpleEntityDisplayPage.tsx new file mode 100644 index 0000000..642ea06 --- /dev/null +++ b/frontend/src/components/pages/SimpleEntityDisplayPage.tsx @@ -0,0 +1,15 @@ +import React from "react"; +import SimpleEntityDisplayTableContainer from "../crud/SimpleEntityDisplayTableContainer"; +import MainPageButton from "../common/MainPageButton"; + +const GetSimpleEntitiesPage = (): React.ReactElement => { + return ( +
+

Default Page

+ + +
+ ); +}; + +export default GetSimpleEntitiesPage; diff --git a/frontend/src/components/pages/SimpleEntityUpdatePage.tsx b/frontend/src/components/pages/SimpleEntityUpdatePage.tsx new file mode 100644 index 0000000..1f03cd4 --- /dev/null +++ b/frontend/src/components/pages/SimpleEntityUpdatePage.tsx @@ -0,0 +1,15 @@ +import React from "react"; +import SimpleEntityUpdateForm from "../crud/SimpleEntityUpdateForm"; +import MainPageButton from "../common/MainPageButton"; + +const SimpleEntityUpdatePage = (): React.ReactElement => { + return ( +
+

Default Page

+ + +
+ ); +}; + +export default SimpleEntityUpdatePage; diff --git a/frontend/src/components/pages/UpdatePage.tsx b/frontend/src/components/pages/UpdatePage.tsx new file mode 100644 index 0000000..57c20ad --- /dev/null +++ b/frontend/src/components/pages/UpdatePage.tsx @@ -0,0 +1,15 @@ +import React from "react"; +import UpdateForm from "../crud/UpdateForm"; +import MainPageButton from "../common/MainPageButton"; + +const UpdatePage = (): React.ReactElement => { + return ( +
+

Default Page

+ + +
+ ); +}; + +export default UpdatePage; diff --git a/frontend/src/components/pages/__tests__/Default.test.tsx b/frontend/src/components/pages/__tests__/Default.test.tsx new file mode 100644 index 0000000..f037501 --- /dev/null +++ b/frontend/src/components/pages/__tests__/Default.test.tsx @@ -0,0 +1,17 @@ +import React from "react"; +import { render } from "@testing-library/react"; +import Default from "../Default"; + +// Example React test. +// For more information on React component testing, visit: +// https://jestjs.io/docs/tutorial-react +// https://reactjs.org/docs/testing.html + + +describe("Default page", () => { + it("Should render Create Entity button", () => { + const page = render(); + const button = page.queryByText("Create Entity"); + expect(button).toBeVisible(); + }); +}); diff --git a/frontend/src/constants/AuthConstants.ts b/frontend/src/constants/AuthConstants.ts new file mode 100644 index 0000000..610ad60 --- /dev/null +++ b/frontend/src/constants/AuthConstants.ts @@ -0,0 +1,3 @@ +const AUTHENTICATED_USER_KEY = `${window.location.hostname}:AUTHENTICATED_USER`; + +export default AUTHENTICATED_USER_KEY; diff --git a/frontend/src/constants/Routes.ts b/frontend/src/constants/Routes.ts new file mode 100644 index 0000000..e13be69 --- /dev/null +++ b/frontend/src/constants/Routes.ts @@ -0,0 +1,21 @@ +export const HOME_PAGE = "/"; + +export const LOGIN_PAGE = "/login"; + +export const SIGNUP_PAGE = "/signup"; + +export const EDIT_TEAM_PAGE = "/edit-team"; + +export const DISPLAY_ENTITY_PAGE = "/entity"; + +export const CREATE_ENTITY_PAGE = "/entity/create"; + +export const UPDATE_ENTITY_PAGE = "/entity/update"; + +export const DISPLAY_SIMPLE_ENTITY_PAGE = "/simpleEntity"; + +export const CREATE_SIMPLE_ENTITY_PAGE = "/simpleEntity/create"; + +export const UPDATE_SIMPLE_ENTITY_PAGE = "/simpleEntity/update"; + +export const HOOKS_PAGE = "/hooks"; diff --git a/frontend/src/contexts/AuthContext.ts b/frontend/src/contexts/AuthContext.ts new file mode 100644 index 0000000..174f681 --- /dev/null +++ b/frontend/src/contexts/AuthContext.ts @@ -0,0 +1,15 @@ +import { createContext } from "react"; +import { AuthenticatedUser } from "../types/AuthTypes"; + +type AuthContextType = { + authenticatedUser: AuthenticatedUser; + setAuthenticatedUser: (_authenticatedUser: AuthenticatedUser) => void; +}; + +const AuthContext = createContext({ + authenticatedUser: null, + /* eslint-disable-next-line @typescript-eslint/no-unused-vars */ + setAuthenticatedUser: (_authenticatedUser: AuthenticatedUser): void => {}, +}); + +export default AuthContext; diff --git a/frontend/src/contexts/SampleContext.ts b/frontend/src/contexts/SampleContext.ts new file mode 100644 index 0000000..fca643b --- /dev/null +++ b/frontend/src/contexts/SampleContext.ts @@ -0,0 +1,13 @@ +import { createContext } from "react"; +import { SampleContextType } from "../types/SampleContextTypes"; + +export const DEFAULT_SAMPLE_CONTEXT = { + teamName: "Internal Tools", + numTerms: 3, + members: ["Sherry", "Alex", "Carelynn", "Bruce", "Richard", "Raveen", "Xin"], + isActive: true, +}; + +const SampleContext = createContext(DEFAULT_SAMPLE_CONTEXT); + +export default SampleContext; diff --git a/frontend/src/contexts/SampleContextDispatcherContext.ts b/frontend/src/contexts/SampleContextDispatcherContext.ts new file mode 100644 index 0000000..94d86cb --- /dev/null +++ b/frontend/src/contexts/SampleContextDispatcherContext.ts @@ -0,0 +1,8 @@ +import { createContext } from "react"; +import { SampleContextAction } from "../types/SampleContextTypes"; + +const SampleContextDispatcherContext = createContext< + React.Dispatch +>(() => {}); + +export default SampleContextDispatcherContext; diff --git a/frontend/src/index.css b/frontend/src/index.css new file mode 100644 index 0000000..ec2585e --- /dev/null +++ b/frontend/src/index.css @@ -0,0 +1,13 @@ +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; +} diff --git a/frontend/src/index.tsx b/frontend/src/index.tsx new file mode 100644 index 0000000..7a658e4 --- /dev/null +++ b/frontend/src/index.tsx @@ -0,0 +1,18 @@ +import React from "react"; +import ReactDOM from "react-dom"; + +import "./index.css"; +import App from "./App"; +import reportWebVitals from "./reportWebVitals"; + +ReactDOM.render( + + + , + document.getElementById("root"), +); + +// If you want to start measuring performance in your app, pass a function +// to log results (for example: reportWebVitals(console.log)) +// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals +reportWebVitals(); diff --git a/frontend/src/react-app-env.d.ts b/frontend/src/react-app-env.d.ts new file mode 100644 index 0000000..6431bc5 --- /dev/null +++ b/frontend/src/react-app-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/frontend/src/reducers/SampleContextReducer.ts b/frontend/src/reducers/SampleContextReducer.ts new file mode 100644 index 0000000..9876c8a --- /dev/null +++ b/frontend/src/reducers/SampleContextReducer.ts @@ -0,0 +1,35 @@ +import { + SampleContextAction, + SampleContextType, +} from "../types/SampleContextTypes"; + +// Using tools such as immer might help with this process. +export default function sampleContextReducer( + state: SampleContextType, + action: SampleContextAction, +): SampleContextType { + switch (action.type) { + case "EDIT_NAME": + return { + ...state, + teamName: action.value, + }; + case "EDIT_NUM_TERMS": + return { + ...state, + numTerms: action.value, + }; + case "EDIT_MEMBERS": + return { + ...state, + members: action.value, + }; + case "EDIT_IS_ACTIVE": + return { + ...state, + isActive: action.value, + }; + default: + return state; + } +} diff --git a/frontend/src/reportWebVitals.ts b/frontend/src/reportWebVitals.ts new file mode 100644 index 0000000..41784a3 --- /dev/null +++ b/frontend/src/reportWebVitals.ts @@ -0,0 +1,15 @@ +import { ReportHandler } from "web-vitals"; + +const reportWebVitals = (onPerfEntry?: ReportHandler): void => { + if (onPerfEntry && onPerfEntry instanceof Function) { + import("web-vitals").then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { + getCLS(onPerfEntry); + getFID(onPerfEntry); + getFCP(onPerfEntry); + getLCP(onPerfEntry); + getTTFB(onPerfEntry); + }); + } +}; + +export default reportWebVitals; diff --git a/frontend/src/setupTests.ts b/frontend/src/setupTests.ts new file mode 100644 index 0000000..1dd407a --- /dev/null +++ b/frontend/src/setupTests.ts @@ -0,0 +1,5 @@ +// jest-dom adds custom jest matchers for asserting on DOM nodes. +// allows you to do things like: +// expect(element).toHaveTextContent(/react/i) +// learn more: https://github.com/testing-library/jest-dom +import "@testing-library/jest-dom"; diff --git a/frontend/src/types/AuthTypes.ts b/frontend/src/types/AuthTypes.ts new file mode 100644 index 0000000..0adfeb4 --- /dev/null +++ b/frontend/src/types/AuthTypes.ts @@ -0,0 +1,13 @@ +export type AuthenticatedUser = { + id: string; + firstName: string; + lastName: string; + email: string; + role: "Admin" | "User"; + accessToken: string; +} | null; + +export type DecodedJWT = + | string + | null + | { [key: string]: unknown; exp: number }; diff --git a/frontend/src/types/SampleContextTypes.ts b/frontend/src/types/SampleContextTypes.ts new file mode 100644 index 0000000..f277364 --- /dev/null +++ b/frontend/src/types/SampleContextTypes.ts @@ -0,0 +1,24 @@ +export type SampleContextType = { + teamName: string; + numTerms: number; + members: string[]; + isActive: boolean; +}; + +export type SampleContextAction = + | { + type: "EDIT_NAME"; + value: string; + } + | { + type: "EDIT_NUM_TERMS"; + value: number; + } + | { + type: "EDIT_MEMBERS"; + value: string[]; + } + | { + type: "EDIT_IS_ACTIVE"; + value: boolean; + }; diff --git a/frontend/src/utils/CSVUtils.ts b/frontend/src/utils/CSVUtils.ts new file mode 100644 index 0000000..a647b0c --- /dev/null +++ b/frontend/src/utils/CSVUtils.ts @@ -0,0 +1,84 @@ +import { parseAsync, transforms } from "json2csv"; +import { Readable, TransformOptions } from "stream"; + +type GenerateCSVParams = { + data: Readonly | ReadonlyArray | Readable; + fields?: string[]; + transformFunction?: (item: T) => Record; + flattenObjects?: boolean; + flattenArrays?: boolean; + pathsToUnwind?: string[]; + opts?: json2csv.Options; + transformOpts?: TransformOptions; +}; + +/** + * Generate a CSV from a JSON array/object or readable input stream. + * fields, transformFunction, flattenObjects, flattenArrays, and pathsToUnwind belong to json2csv.options but + * they are also provided as parameters here for convenience. + * For examples using each of these params, see the CSVUtils.test.ts file. + * @param data JSON array/object or stream to convert to a CSV string + * @param fields columns to include in the csv + * @param transformFunction function to transform fields of the object before converting to csv + * @param flattenObjects indicates whether each property of object fields should be split into a different column + * @param flattenArrays indicates whether each element of array fields should be split into a different column + * @param pathsToUnwind array fields that should be split into different rows + * @param opts options from json2csv to override or add additional options (https://mircozeiss.com/json2csv/#available-options) + * @param transformOpts transform options from stream module (https://nodejs.org/api/stream.html#stream_new_stream_transform_options) + * @returns CSV string + * @throws Error if JSON is not parsed properly + */ +/* eslint-disable-next-line import/prefer-default-export */ +export const generateCSV = async ({ + data, + fields, + transformFunction, + flattenObjects = false, + flattenArrays = false, + pathsToUnwind, + opts, + transformOpts, +}: GenerateCSVParams): Promise => { + const transformations = [ + transforms.flatten({ + objects: flattenObjects, + arrays: flattenArrays, + }), + ]; + if (transformFunction) { + transformations.push(transformFunction); + } + if (pathsToUnwind) { + transformations.push(transforms.unwind({ paths: pathsToUnwind })); + } + + const options = { + fields, + transforms: transformations, + ...opts, + }; + return parseAsync(data, options, transformOpts); +}; + +/** + * Downloads a CSV file. + * References: https://github.com/mui-org/material-ui-x/blob/fa346f0fbe3d9b9eea9bb403fe4675f544d6abf9/packages/grid/_modules_/grid/utils/exportAs.ts + * @param data CSV string + * @param fileName name of the CSV file + */ +export const downloadCSV = (data: string, fileName: string): void => { + const byteOrderMark = "\uFEFF"; + const csvContent = byteOrderMark + data; + const blob = new Blob([csvContent], { + type: "text/csv, charset=UTF-8", + }); + const url = URL.createObjectURL(blob); + + const a = document.createElement("a"); + a.href = url; + a.download = fileName; + a.click(); + setTimeout(() => { + URL.revokeObjectURL(url); + }); +}; diff --git a/frontend/src/utils/FileUtils.ts b/frontend/src/utils/FileUtils.ts new file mode 100644 index 0000000..efc08e4 --- /dev/null +++ b/frontend/src/utils/FileUtils.ts @@ -0,0 +1,9 @@ +// eslint-disable-next-line import/prefer-default-export +export const downloadFile = (data: string, fileName: string): void => { + const a = document.createElement("a"); + a.href = data; + a.download = fileName; + a.target = "_blank"; + a.click(); + a.parentNode?.removeChild(a); +}; diff --git a/frontend/src/utils/LocalStorageUtils.ts b/frontend/src/utils/LocalStorageUtils.ts new file mode 100644 index 0000000..ab22849 --- /dev/null +++ b/frontend/src/utils/LocalStorageUtils.ts @@ -0,0 +1,42 @@ +// Get a string value from localStorage as an object +export const getLocalStorageObj = (localStorageKey: string): O | null => { + const stringifiedObj = localStorage.getItem(localStorageKey); + let object = null; + + if (stringifiedObj) { + try { + object = JSON.parse(stringifiedObj); + } catch (error) { + object = null; + } + } + + return object; +}; + +// Get a property of an object value from localStorage +export const getLocalStorageObjProperty = , P>( + localStorageKey: string, + property: string, +): P | null => { + const object = getLocalStorageObj(localStorageKey); + if (!object) return null; + + return object[property]; +}; + +// Set a property of an object value in localStorage +export const setLocalStorageObjProperty = >( + localStorageKey: string, + property: string, + value: string, +): void => { + const object: Record | null = getLocalStorageObj( + localStorageKey, + ); + + if (!object) return; + + object[property] = value; + localStorage.setItem(localStorageKey, JSON.stringify(object)); +}; diff --git a/frontend/src/utils/__tests__/CSVUtils.test.ts b/frontend/src/utils/__tests__/CSVUtils.test.ts new file mode 100644 index 0000000..2487805 --- /dev/null +++ b/frontend/src/utils/__tests__/CSVUtils.test.ts @@ -0,0 +1,136 @@ +import * as CSVUtils from "../CSVUtils"; + +type Pet = { + name: string; + type: string; +}; + +type Home = { + number: number; + street: string; +}; + +type Person = { + age: number; + name: string; + pets: Pet[]; + home?: Home; +}; + +const testData: Person[] = [ + { + name: "Person1", + age: 20, + pets: [ + { name: "Beans", type: "Cat" }, + { name: "Spot", type: "Dog" }, + ], + }, + { + name: "Person2", + age: 25, + pets: [{ name: "Splash", type: "Fish" }], + }, +]; + +describe("CSVUtils", () => { + it("generateCSV should include all fields, with nested objects/arrays, if no options", async () => { + const result = await CSVUtils.generateCSV({ data: testData }); + expect(result).toEqual( + `"name","age","pets"\n` + + `"Person1",20,"[{""name"":""Beans"",""type"":""Cat""},{""name"":""Spot"",""type"":""Dog""}]"\n` + + `"Person2",25,"[{""name"":""Splash"",""type"":""Fish""}]"`, + ); + }); + + it("generateCSV should only include the fields specified", async () => { + const result = await CSVUtils.generateCSV({ + data: testData, + fields: ["age", "name"], + }); + expect(result).toEqual(`"age","name"\n20,"Person1"\n25,"Person2"`); + }); + + it("generateCSV should transform fields properly if specified", async () => { + const transformFunction = (person: Person) => ({ + ...person, + age: person.age + 1, + petNames: person.pets.map((pet) => pet.name), + numPets: person.pets.length, + }); + const result = await CSVUtils.generateCSV({ + data: testData, + transformFunction, + }); + expect(result).toEqual( + `"name","age","pets","petNames","numPets"\n` + + `"Person1",21,"[{""name"":""Beans"",""type"":""Cat""},{""name"":""Spot"",""type"":""Dog""}]","[""Beans"",""Spot""]",2\n` + + `"Person2",26,"[{""name"":""Splash"",""type"":""Fish""}]","[""Splash""]",1`, + ); + }); + + it("generateCSV should flatten objects properly if specified", async () => { + const testDataWithHomes = [ + { ...testData[0], home: { number: 22, street: "Cool Road" } }, + { ...testData[1], home: { number: 24, street: "Awesome Road" } }, + ]; + const result = await CSVUtils.generateCSV({ + data: testDataWithHomes, + flattenObjects: true, + }); + expect(result).toEqual( + `"name","age","pets","home.number","home.street"\n` + + `"Person1",20,"[{""name"":""Beans"",""type"":""Cat""},{""name"":""Spot"",""type"":""Dog""}]",22,"Cool Road"\n` + + `"Person2",25,"[{""name"":""Splash"",""type"":""Fish""}]",24,"Awesome Road"`, + ); + }); + + it("generateCSV should flatten arrays properly if specified", async () => { + const result = await CSVUtils.generateCSV({ + data: testData, + flattenArrays: true, + }); + expect(result).toEqual( + `"name","age","pets.0","pets.1"\n` + + `"Person1",20,"{""name"":""Beans"",""type"":""Cat""}","{""name"":""Spot"",""type"":""Dog""}"\n` + + `"Person2",25,"{""name"":""Splash"",""type"":""Fish""}",`, + ); + }); + + it("generateCSV should flatten objects and arrays properly if specified", async () => { + const result = await CSVUtils.generateCSV({ + data: testData, + flattenArrays: true, + flattenObjects: true, + }); + expect(result).toEqual( + `"name","age","pets.0.name","pets.0.type","pets.1.name","pets.1.type"\n` + + `"Person1",20,"Beans","Cat","Spot","Dog"\n` + + `"Person2",25,"Splash","Fish",,`, + ); + }); + + it("generateCSV should unwind fields properly if specified", async () => { + const result = await CSVUtils.generateCSV({ + data: testData, + pathsToUnwind: ["pets"], + }); + expect(result).toEqual( + `"name","age","pets"\n` + + `"Person1",20,"{""name"":""Beans"",""type"":""Cat""}"\n` + + `"Person1",20,"{""name"":""Spot"",""type"":""Dog""}"\n` + + `"Person2",25,"{""name"":""Splash"",""type"":""Fish""}"`, + ); + }); + + it("generateCSV should override/add options if opts is specified", async () => { + const result = await CSVUtils.generateCSV({ + data: testData, + opts: { header: false }, + }); + expect(result).toEqual( + `"Person1",20,"[{""name"":""Beans"",""type"":""Cat""},{""name"":""Spot"",""type"":""Dog""}]"\n` + + `"Person2",25,"[{""name"":""Splash"",""type"":""Fish""}]"`, + ); + }); +}); diff --git a/frontend/src/utils/__tests__/LocalStorageUtils.test.ts b/frontend/src/utils/__tests__/LocalStorageUtils.test.ts new file mode 100644 index 0000000..d8d5947 --- /dev/null +++ b/frontend/src/utils/__tests__/LocalStorageUtils.test.ts @@ -0,0 +1,59 @@ +import * as LocalStorageUtils from "../LocalStorageUtils"; + +class LocalStorageMock { + store: Record = {}; + + readonly length: number = 0; + + clear() { + this.store = {}; + } + + getItem(key: string) { + return this.store[key] || null; + } + + setItem(key: string, value: string) { + this.store[key] = value; + } + + removeItem(key: string) { + delete this.store[key]; + } +} + +const mockStorage = new LocalStorageMock(); + +describe("LocalStorageUtils", () => { + beforeAll(() => { + Object.defineProperty(global, "localStorage", { + value: mockStorage, + }); + }); + + afterEach(() => { + localStorage.clear(); + }); + + it("getLocalStorageObj should retrieve obj by key", () => { + localStorage.setItem("hello", JSON.stringify({ value: "world" })); + expect(LocalStorageUtils.getLocalStorageObj("hello")).toEqual({ + value: "world", + }); + }); + + it("getLocalStorageObjProperty should retrieve obj property by key and property", () => { + localStorage.setItem("hello", JSON.stringify({ value: "world" })); + expect( + LocalStorageUtils.getLocalStorageObjProperty("hello", "value"), + ).toEqual("world"); + }); + + it("setLocalStorageObjproperty should set obj property by key, property and value", () => { + localStorage.setItem("club", JSON.stringify({})); + LocalStorageUtils.setLocalStorageObjProperty("club", "name", "Blueprint"); + expect(LocalStorageUtils.getLocalStorageObj("club")).toEqual({ + name: "Blueprint", + }); + }); +}); diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..a273b0c --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx" + }, + "include": [ + "src" + ] +} diff --git a/frontend/yarn.lock b/frontend/yarn.lock new file mode 100644 index 0000000..5e78255 --- /dev/null +++ b/frontend/yarn.lock @@ -0,0 +1,12548 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@apollo/client@^3.1.3": + version "3.4.9" + resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.4.9.tgz#78d0decf8371b768f97c721d1b71c96260bac4db" + integrity sha512-1AlYjRJ/ktDApEUEP2DqHI38tqSyhSlsF/Q3fFb/aCbLHQfcSZ1dCv7ZlC9UXRyDwQYc0w23gYJ7wZde6W8P4A== + dependencies: + "@graphql-typed-document-node/core" "^3.0.0" + "@wry/context" "^0.6.0" + "@wry/equality" "^0.5.0" + "@wry/trie" "^0.3.0" + graphql-tag "^2.12.3" + hoist-non-react-statics "^3.3.2" + optimism "^0.16.1" + prop-types "^15.7.2" + symbol-observable "^4.0.0" + ts-invariant "^0.9.0" + tslib "^2.3.0" + zen-observable-ts "^1.1.0" + +"@apollo/client@^3.3.16": + version "3.3.16" + resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.3.16.tgz#e4a51b0f86583b18ab81723660e381ef616536c1" + integrity sha512-EPTiNpmiU6/vvxpl4lXWQDqS3YddweC1sh/ewCuVP9IK0+xlVGb5vR1yhM/7T3PIJqwz52dGpZyJskmbTfENfQ== + dependencies: + "@graphql-typed-document-node/core" "^3.0.0" + "@types/zen-observable" "^0.8.0" + "@wry/context" "^0.6.0" + "@wry/equality" "^0.4.0" + fast-json-stable-stringify "^2.0.0" + graphql-tag "^2.12.0" + hoist-non-react-statics "^3.3.2" + optimism "^0.15.0" + prop-types "^15.7.2" + symbol-observable "^2.0.0" + ts-invariant "^0.7.0" + tslib "^1.10.0" + zen-observable "^0.8.14" + +"@babel/code-frame@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.5.5": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" + integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== + dependencies: + "@babel/highlight" "^7.12.13" + +"@babel/compat-data@^7.12.1", "@babel/compat-data@^7.13.11", "@babel/compat-data@^7.13.15", "@babel/compat-data@^7.13.8": + version "7.13.15" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.15.tgz#7e8eea42d0b64fda2b375b22d06c605222e848f4" + integrity sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA== + +"@babel/core@7.12.3": + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz#1b436884e1e3bff6fb1328dc02b208759de92ad8" + integrity sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.1" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.1" + "@babel/parser" "^7.12.3" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.5", "@babel/core@^7.8.4": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.16.tgz#7756ab24396cc9675f1c3fcd5b79fcce192ea96a" + integrity sha512-sXHpixBiWWFti0AV2Zq7avpTasr6sIAu7Y396c608541qAU2ui4a193m0KSQmfPSKFZLnQ3cvlKDOm3XkuXm3Q== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.16" + "@babel/helper-compilation-targets" "^7.13.16" + "@babel/helper-module-transforms" "^7.13.14" + "@babel/helpers" "^7.13.16" + "@babel/parser" "^7.13.16" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.15" + "@babel/types" "^7.13.16" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/generator@^7.12.1", "@babel/generator@^7.13.16": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.16.tgz#0befc287031a201d84cdfc173b46b320ae472d14" + integrity sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg== + dependencies: + "@babel/types" "^7.13.16" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" + integrity sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz#6bc20361c88b0a74d05137a65cac8d3cbf6f61fc" + integrity sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.12.13" + "@babel/types" "^7.12.13" + +"@babel/helper-compilation-targets@^7.12.1", "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.13", "@babel/helper-compilation-targets@^7.13.16", "@babel/helper-compilation-targets@^7.13.8": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz#6e91dccf15e3f43e5556dffe32d860109887563c" + integrity sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA== + dependencies: + "@babel/compat-data" "^7.13.15" + "@babel/helper-validator-option" "^7.12.17" + browserslist "^4.14.5" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.12.1", "@babel/helper-create-class-features-plugin@^7.13.0": + version "7.13.11" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz#30d30a005bca2c953f5653fc25091a492177f4f6" + integrity sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw== + dependencies: + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-member-expression-to-functions" "^7.13.0" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/helper-replace-supers" "^7.13.0" + "@babel/helper-split-export-declaration" "^7.12.13" + +"@babel/helper-create-regexp-features-plugin@^7.12.13": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz#a2ac87e9e319269ac655b8d4415e94d38d663cb7" + integrity sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.12.13" + regexpu-core "^4.7.1" + +"@babel/helper-define-polyfill-provider@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz#a640051772045fedaaecc6f0c6c69f02bdd34bf1" + integrity sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw== + dependencies: + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-explode-assignable-expression@^7.12.13": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz#17b5c59ff473d9f956f40ef570cf3a76ca12657f" + integrity sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA== + dependencies: + "@babel/types" "^7.13.0" + +"@babel/helper-function-name@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" + integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== + dependencies: + "@babel/helper-get-function-arity" "^7.12.13" + "@babel/template" "^7.12.13" + "@babel/types" "^7.12.13" + +"@babel/helper-get-function-arity@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" + integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-hoist-variables@^7.13.0": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz#1b1651249e94b51f8f0d33439843e33e39775b30" + integrity sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg== + dependencies: + "@babel/traverse" "^7.13.15" + "@babel/types" "^7.13.16" + +"@babel/helper-member-expression-to-functions@^7.13.0", "@babel/helper-member-expression-to-functions@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" + integrity sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw== + dependencies: + "@babel/types" "^7.13.12" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" + integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA== + dependencies: + "@babel/types" "^7.13.12" + +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.13.14": + version "7.13.14" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz#e600652ba48ccb1641775413cb32cfa4e8b495ef" + integrity sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g== + dependencies: + "@babel/helper-module-imports" "^7.13.12" + "@babel/helper-replace-supers" "^7.13.12" + "@babel/helper-simple-access" "^7.13.12" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-validator-identifier" "^7.12.11" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.13" + "@babel/types" "^7.13.14" + +"@babel/helper-optimise-call-expression@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" + integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" + integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== + +"@babel/helper-remap-async-to-generator@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz#376a760d9f7b4b2077a9dd05aa9c3927cadb2209" + integrity sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-wrap-function" "^7.13.0" + "@babel/types" "^7.13.0" + +"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.0", "@babel/helper-replace-supers@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz#6442f4c1ad912502481a564a7386de0c77ff3804" + integrity sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.13.12" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.12" + +"@babel/helper-simple-access@^7.12.13", "@babel/helper-simple-access@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" + integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA== + dependencies: + "@babel/types" "^7.13.12" + +"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" + integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-split-export-declaration@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" + integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== + +"@babel/helper-validator-option@^7.12.1", "@babel/helper-validator-option@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" + integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== + +"@babel/helper-wrap-function@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4" + integrity sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA== + dependencies: + "@babel/helper-function-name" "^7.12.13" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + +"@babel/helpers@^7.12.1", "@babel/helpers@^7.13.16": + version "7.13.17" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.17.tgz#b497c7a00e9719d5b613b8982bda6ed3ee94caf6" + integrity sha512-Eal4Gce4kGijo1/TGJdqp3WuhllaMLSrW6XcL0ulyUAQOuxHcCafZE8KHg9857gcTehsm/v7RcOx2+jp0Ryjsg== + dependencies: + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.17" + "@babel/types" "^7.13.17" + +"@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" + integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.12.3", "@babel/parser@^7.13.16", "@babel/parser@^7.7.0": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.16.tgz#0f18179b0448e6939b1f3f5c4c355a3a9bcdfd37" + integrity sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw== + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz#a3484d84d0b549f3fc916b99ee4783f26fabad2a" + integrity sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.13.12" + +"@babel/plugin-proposal-async-generator-functions@^7.12.1", "@babel/plugin-proposal-async-generator-functions@^7.13.15": + version "7.13.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz#80e549df273a3b3050431b148c892491df1bcc5b" + integrity sha512-VapibkWzFeoa6ubXy/NgV5U2U4MVnUlvnx6wo1XhlsaTrLYWE0UFpDQsVrmn22q5CzeloqJ8gEMHSKxuee6ZdA== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-remap-async-to-generator" "^7.13.0" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de" + integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz#146376000b94efd001e57a40a88a525afaab9f37" + integrity sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-proposal-decorators@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.1.tgz#59271439fed4145456c41067450543aee332d15f" + integrity sha512-knNIuusychgYN8fGJHONL0RbFxLGawhXOJNLBk75TniTsZZeA+wdkDuv6wp4lGwzQEKjZi6/WYtnb3udNPmQmQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-decorators" "^7.12.1" + +"@babel/plugin-proposal-dynamic-import@^7.12.1", "@babel/plugin-proposal-dynamic-import@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz#876a1f6966e1dec332e8c9451afda3bebcdf2e1d" + integrity sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.12.1", "@babel/plugin-proposal-export-namespace-from@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz#393be47a4acd03fa2af6e3cde9b06e33de1b446d" + integrity sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.12.1", "@babel/plugin-proposal-json-strings@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz#bf1fb362547075afda3634ed31571c5901afef7b" + integrity sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.12.1", "@babel/plugin-proposal-logical-assignment-operators@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz#93fa78d63857c40ce3c8c3315220fd00bfbb4e1a" + integrity sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c" + integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1", "@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz#3730a31dafd3c10d8ccd10648ed80a2ac5472ef3" + integrity sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz#0e2c6774c4ce48be412119b4d693ac777f7685a6" + integrity sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-numeric-separator@^7.12.1", "@babel/plugin-proposal-numeric-separator@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz#bd9da3188e787b5120b4f9d465a8261ce67ed1db" + integrity sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz#5d210a4d727d6ce3b18f9de82cc99a3964eed60a" + integrity sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g== + dependencies: + "@babel/compat-data" "^7.13.8" + "@babel/helper-compilation-targets" "^7.13.8" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.13.0" + +"@babel/plugin-proposal-optional-catch-binding@^7.12.1", "@babel/plugin-proposal-optional-catch-binding@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz#3ad6bd5901506ea996fc31bdcf3ccfa2bed71107" + integrity sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz#cce122203fc8a32794296fc377c6dedaf4363797" + integrity sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@^7.12.1", "@babel/plugin-proposal-optional-chaining@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz#ba9feb601d422e0adea6760c2bd6bbb7bfec4866" + integrity sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.12.1", "@babel/plugin-proposal-private-methods@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz#04bd4c6d40f6e6bbfa2f57e2d8094bad900ef787" + integrity sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.12.13", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz#bebde51339be829c17aaaaced18641deb62b39ba" + integrity sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.1", "@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-decorators@^7.12.1": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.13.tgz#fac829bf3c7ef4a1bc916257b403e58c6bdaf648" + integrity sha512-Rw6aIXGuqDLr6/LoBBYE57nKOzQpz/aDkKlMqEwH+Vp0MXbG6H/TfRjaY343LKxzAKAMXIHsQ8JzaZKuDZ9MwA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-flow@^7.12.1": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.13.tgz#5df9962503c0a9c918381c929d51d4d6949e7e86" + integrity sha512-J/RYxnlSLXZLVR7wTRsozxKT8qbsx1mNKJzXEEjQ0Kjx1ZACcyHgbanNWNCFtc36IzuWhYWPpvJFFoexoOWFmA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz#044fb81ebad6698fe62c478875575bcbb9b70f15" + integrity sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.12.1", "@babel/plugin-syntax-top-level-await@^7.12.13", "@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178" + integrity sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-typescript@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz#9dff111ca64154cef0f4dc52cf843d9f12ce4474" + integrity sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-arrow-functions@^7.12.1", "@babel/plugin-transform-arrow-functions@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz#10a59bebad52d637a027afa692e8d5ceff5e3dae" + integrity sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-async-to-generator@^7.12.1", "@babel/plugin-transform-async-to-generator@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz#8e112bf6771b82bf1e974e5e26806c5c99aa516f" + integrity sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg== + dependencies: + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-remap-async-to-generator" "^7.13.0" + +"@babel/plugin-transform-block-scoped-functions@^7.12.1", "@babel/plugin-transform-block-scoped-functions@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz#a9bf1836f2a39b4eb6cf09967739de29ea4bf4c4" + integrity sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-block-scoping@^7.12.1", "@babel/plugin-transform-block-scoping@^7.12.13": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.13.16.tgz#a9c0f10794855c63b1d629914c7dcfeddd185892" + integrity sha512-ad3PHUxGnfWF4Efd3qFuznEtZKoBp0spS+DgqzVzRPV7urEBvPLue3y2j80w4Jf2YLzZHj8TOv/Lmvdmh3b2xg== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz#0265155075c42918bf4d3a4053134176ad9b533b" + integrity sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-replace-supers" "^7.13.0" + "@babel/helper-split-export-declaration" "^7.12.13" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.12.1", "@babel/plugin-transform-computed-properties@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz#845c6e8b9bb55376b1fa0b92ef0bdc8ea06644ed" + integrity sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-destructuring@^7.12.1", "@babel/plugin-transform-destructuring@^7.13.0": + version "7.13.17" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz#678d96576638c19d5b36b332504d3fd6e06dea27" + integrity sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.12.13", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz#3f1601cc29905bfcb67f53910f197aeafebb25ad" + integrity sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-duplicate-keys@^7.12.1", "@babel/plugin-transform-duplicate-keys@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz#6f06b87a8b803fd928e54b81c258f0a0033904de" + integrity sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-exponentiation-operator@^7.12.1", "@babel/plugin-transform-exponentiation-operator@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz#4d52390b9a273e651e4aba6aee49ef40e80cd0a1" + integrity sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-flow-strip-types@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.1.tgz#8430decfa7eb2aea5414ed4a3fa6e1652b7d77c4" + integrity sha512-8hAtkmsQb36yMmEtk2JZ9JnVyDSnDOdlB+0nEGzIDLuK4yR3JcEjfuFPYkdEPSh8Id+rAMeBEn+X0iVEyho6Hg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-flow" "^7.12.1" + +"@babel/plugin-transform-for-of@^7.12.1", "@babel/plugin-transform-for-of@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz#c799f881a8091ac26b54867a845c3e97d2696062" + integrity sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-function-name@^7.12.1", "@babel/plugin-transform-function-name@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz#bb024452f9aaed861d374c8e7a24252ce3a50051" + integrity sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ== + dependencies: + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-literals@^7.12.1", "@babel/plugin-transform-literals@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz#2ca45bafe4a820197cf315794a4d26560fe4bdb9" + integrity sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-member-expression-literals@^7.12.1", "@babel/plugin-transform-member-expression-literals@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz#5ffa66cd59b9e191314c9f1f803b938e8c081e40" + integrity sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-modules-amd@^7.12.1", "@babel/plugin-transform-modules-amd@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz#19f511d60e3d8753cc5a6d4e775d3a5184866cc3" + integrity sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ== + dependencies: + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.12.1", "@babel/plugin-transform-modules-commonjs@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz#7b01ad7c2dcf2275b06fa1781e00d13d420b3e1b" + integrity sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw== + dependencies: + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-simple-access" "^7.12.13" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.12.1", "@babel/plugin-transform-modules-systemjs@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz#6d066ee2bff3c7b3d60bf28dec169ad993831ae3" + integrity sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A== + dependencies: + "@babel/helper-hoist-variables" "^7.13.0" + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-validator-identifier" "^7.12.11" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.12.1", "@babel/plugin-transform-modules-umd@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz#8a3d96a97d199705b9fd021580082af81c06e70b" + integrity sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw== + dependencies: + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.12.1", "@babel/plugin-transform-named-capturing-groups-regex@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz#2213725a5f5bbbe364b50c3ba5998c9599c5c9d9" + integrity sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.13" + +"@babel/plugin-transform-new-target@^7.12.1", "@babel/plugin-transform-new-target@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz#e22d8c3af24b150dd528cbd6e685e799bf1c351c" + integrity sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-object-super@^7.12.1", "@babel/plugin-transform-object-super@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz#b4416a2d63b8f7be314f3d349bd55a9c1b5171f7" + integrity sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-replace-supers" "^7.12.13" + +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz#8fa7603e3097f9c0b7ca1a4821bc2fb52e9e5007" + integrity sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-property-literals@^7.12.1", "@babel/plugin-transform-property-literals@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz#4e6a9e37864d8f1b3bc0e2dce7bf8857db8b1a81" + integrity sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-react-constant-elements@^7.12.1": + version "7.13.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.13.13.tgz#0208b1d942bf939cd4f7aa5b255d42602aa4a920" + integrity sha512-SNJU53VM/SjQL0bZhyU+f4kJQz7bQQajnrZRSaU21hruG/NWY41AEM9AWXeXX90pYr/C2yAmTgI6yW3LlLrAUQ== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-react-display-name@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz#1cbcd0c3b1d6648c55374a22fc9b6b7e5341c00d" + integrity sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-react-display-name@^7.12.1", "@babel/plugin-transform-react-display-name@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.13.tgz#c28effd771b276f4647411c9733dbb2d2da954bd" + integrity sha512-MprESJzI9O5VnJZrL7gg1MpdqmiFcUv41Jc7SahxYsNP2kDkFqClxxTZq+1Qv4AFCamm+GXMRDQINNn+qrxmiA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-react-jsx-development@^7.12.1", "@babel/plugin-transform-react-jsx-development@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.17.tgz#f510c0fa7cd7234153539f9a362ced41a5ca1447" + integrity sha512-BPjYV86SVuOaudFhsJR1zjgxxOhJDt6JHNoD48DxWEIxUCAMjV1ys6DYw4SDYZh0b1QsS2vfIA9t/ZsQGsDOUQ== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.12.17" + +"@babel/plugin-transform-react-jsx-self@^7.12.1": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.13.tgz#422d99d122d592acab9c35ea22a6cfd9bf189f60" + integrity sha512-FXYw98TTJ125GVCCkFLZXlZ1qGcsYqNQhVBQcZjyrwf8FEUtVfKIoidnO8S0q+KBQpDYNTmiGo1gn67Vti04lQ== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-react-jsx-source@^7.12.1": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.13.tgz#051d76126bee5c9a6aa3ba37be2f6c1698856bcb" + integrity sha512-O5JJi6fyfih0WfDgIJXksSPhGP/G0fQpfxYy87sDc+1sFmsCS6wr3aAn+whbzkhbjtq4VMqLRaSzR6IsshIC0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-react-jsx@^7.12.1", "@babel/plugin-transform-react-jsx@^7.12.17", "@babel/plugin-transform-react-jsx@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz#1df5dfaf0f4b784b43e96da6f28d630e775f68b3" + integrity sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-module-imports" "^7.13.12" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-jsx" "^7.12.13" + "@babel/types" "^7.13.12" + +"@babel/plugin-transform-react-pure-annotations@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz#05d46f0ab4d1339ac59adf20a1462c91b37a1a42" + integrity sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-regenerator@^7.12.1", "@babel/plugin-transform-regenerator@^7.13.15": + version "7.13.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz#e5eb28945bf8b6563e7f818945f966a8d2997f39" + integrity sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.12.1", "@babel/plugin-transform-reserved-words@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz#7d9988d4f06e0fe697ea1d9803188aa18b472695" + integrity sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-runtime@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz#04b792057eb460389ff6a4198e377614ea1e7ba5" + integrity sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + resolve "^1.8.1" + semver "^5.5.1" + +"@babel/plugin-transform-shorthand-properties@^7.12.1", "@babel/plugin-transform-shorthand-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz#db755732b70c539d504c6390d9ce90fe64aff7ad" + integrity sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-spread@^7.12.1", "@babel/plugin-transform-spread@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz#84887710e273c1815ace7ae459f6f42a5d31d5fd" + integrity sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + +"@babel/plugin-transform-sticky-regex@^7.12.1", "@babel/plugin-transform-sticky-regex@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz#760ffd936face73f860ae646fb86ee82f3d06d1f" + integrity sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-template-literals@^7.12.1", "@babel/plugin-transform-template-literals@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz#a36049127977ad94438dee7443598d1cefdf409d" + integrity sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-typeof-symbol@^7.12.1", "@babel/plugin-transform-typeof-symbol@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz#785dd67a1f2ea579d9c2be722de8c84cb85f5a7f" + integrity sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-typescript@^7.12.1": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.13.0.tgz#4a498e1f3600342d2a9e61f60131018f55774853" + integrity sha512-elQEwluzaU8R8dbVuW2Q2Y8Nznf7hnjM7+DSCd14Lo5fF63C9qNLbwZYbmZrtV9/ySpSUpkRpQXvJb6xyu4hCQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-typescript" "^7.12.13" + +"@babel/plugin-transform-unicode-escapes@^7.12.1", "@babel/plugin-transform-unicode-escapes@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz#840ced3b816d3b5127dd1d12dcedc5dead1a5e74" + integrity sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-unicode-regex@^7.12.1", "@babel/plugin-transform-unicode-regex@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz#b52521685804e155b1202e83fc188d34bb70f5ac" + integrity sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/preset-env@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.1.tgz#9c7e5ca82a19efc865384bb4989148d2ee5d7ac2" + integrity sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg== + dependencies: + "@babel/compat-data" "^7.12.1" + "@babel/helper-compilation-targets" "^7.12.1" + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-option" "^7.12.1" + "@babel/plugin-proposal-async-generator-functions" "^7.12.1" + "@babel/plugin-proposal-class-properties" "^7.12.1" + "@babel/plugin-proposal-dynamic-import" "^7.12.1" + "@babel/plugin-proposal-export-namespace-from" "^7.12.1" + "@babel/plugin-proposal-json-strings" "^7.12.1" + "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" + "@babel/plugin-proposal-numeric-separator" "^7.12.1" + "@babel/plugin-proposal-object-rest-spread" "^7.12.1" + "@babel/plugin-proposal-optional-catch-binding" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.12.1" + "@babel/plugin-proposal-private-methods" "^7.12.1" + "@babel/plugin-proposal-unicode-property-regex" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.12.1" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.12.1" + "@babel/plugin-transform-arrow-functions" "^7.12.1" + "@babel/plugin-transform-async-to-generator" "^7.12.1" + "@babel/plugin-transform-block-scoped-functions" "^7.12.1" + "@babel/plugin-transform-block-scoping" "^7.12.1" + "@babel/plugin-transform-classes" "^7.12.1" + "@babel/plugin-transform-computed-properties" "^7.12.1" + "@babel/plugin-transform-destructuring" "^7.12.1" + "@babel/plugin-transform-dotall-regex" "^7.12.1" + "@babel/plugin-transform-duplicate-keys" "^7.12.1" + "@babel/plugin-transform-exponentiation-operator" "^7.12.1" + "@babel/plugin-transform-for-of" "^7.12.1" + "@babel/plugin-transform-function-name" "^7.12.1" + "@babel/plugin-transform-literals" "^7.12.1" + "@babel/plugin-transform-member-expression-literals" "^7.12.1" + "@babel/plugin-transform-modules-amd" "^7.12.1" + "@babel/plugin-transform-modules-commonjs" "^7.12.1" + "@babel/plugin-transform-modules-systemjs" "^7.12.1" + "@babel/plugin-transform-modules-umd" "^7.12.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1" + "@babel/plugin-transform-new-target" "^7.12.1" + "@babel/plugin-transform-object-super" "^7.12.1" + "@babel/plugin-transform-parameters" "^7.12.1" + "@babel/plugin-transform-property-literals" "^7.12.1" + "@babel/plugin-transform-regenerator" "^7.12.1" + "@babel/plugin-transform-reserved-words" "^7.12.1" + "@babel/plugin-transform-shorthand-properties" "^7.12.1" + "@babel/plugin-transform-spread" "^7.12.1" + "@babel/plugin-transform-sticky-regex" "^7.12.1" + "@babel/plugin-transform-template-literals" "^7.12.1" + "@babel/plugin-transform-typeof-symbol" "^7.12.1" + "@babel/plugin-transform-unicode-escapes" "^7.12.1" + "@babel/plugin-transform-unicode-regex" "^7.12.1" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.12.1" + core-js-compat "^3.6.2" + semver "^5.5.0" + +"@babel/preset-env@^7.12.1", "@babel/preset-env@^7.8.4": + version "7.13.15" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.13.15.tgz#c8a6eb584f96ecba183d3d414a83553a599f478f" + integrity sha512-D4JAPMXcxk69PKe81jRJ21/fP/uYdcTZ3hJDF5QX2HSI9bBxxYw/dumdR6dGumhjxlprHPE4XWoPaqzZUVy2MA== + dependencies: + "@babel/compat-data" "^7.13.15" + "@babel/helper-compilation-targets" "^7.13.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-validator-option" "^7.12.17" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.13.12" + "@babel/plugin-proposal-async-generator-functions" "^7.13.15" + "@babel/plugin-proposal-class-properties" "^7.13.0" + "@babel/plugin-proposal-dynamic-import" "^7.13.8" + "@babel/plugin-proposal-export-namespace-from" "^7.12.13" + "@babel/plugin-proposal-json-strings" "^7.13.8" + "@babel/plugin-proposal-logical-assignment-operators" "^7.13.8" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.13.8" + "@babel/plugin-proposal-numeric-separator" "^7.12.13" + "@babel/plugin-proposal-object-rest-spread" "^7.13.8" + "@babel/plugin-proposal-optional-catch-binding" "^7.13.8" + "@babel/plugin-proposal-optional-chaining" "^7.13.12" + "@babel/plugin-proposal-private-methods" "^7.13.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.12.13" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.12.13" + "@babel/plugin-transform-arrow-functions" "^7.13.0" + "@babel/plugin-transform-async-to-generator" "^7.13.0" + "@babel/plugin-transform-block-scoped-functions" "^7.12.13" + "@babel/plugin-transform-block-scoping" "^7.12.13" + "@babel/plugin-transform-classes" "^7.13.0" + "@babel/plugin-transform-computed-properties" "^7.13.0" + "@babel/plugin-transform-destructuring" "^7.13.0" + "@babel/plugin-transform-dotall-regex" "^7.12.13" + "@babel/plugin-transform-duplicate-keys" "^7.12.13" + "@babel/plugin-transform-exponentiation-operator" "^7.12.13" + "@babel/plugin-transform-for-of" "^7.13.0" + "@babel/plugin-transform-function-name" "^7.12.13" + "@babel/plugin-transform-literals" "^7.12.13" + "@babel/plugin-transform-member-expression-literals" "^7.12.13" + "@babel/plugin-transform-modules-amd" "^7.13.0" + "@babel/plugin-transform-modules-commonjs" "^7.13.8" + "@babel/plugin-transform-modules-systemjs" "^7.13.8" + "@babel/plugin-transform-modules-umd" "^7.13.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.13" + "@babel/plugin-transform-new-target" "^7.12.13" + "@babel/plugin-transform-object-super" "^7.12.13" + "@babel/plugin-transform-parameters" "^7.13.0" + "@babel/plugin-transform-property-literals" "^7.12.13" + "@babel/plugin-transform-regenerator" "^7.13.15" + "@babel/plugin-transform-reserved-words" "^7.12.13" + "@babel/plugin-transform-shorthand-properties" "^7.12.13" + "@babel/plugin-transform-spread" "^7.13.0" + "@babel/plugin-transform-sticky-regex" "^7.12.13" + "@babel/plugin-transform-template-literals" "^7.13.0" + "@babel/plugin-transform-typeof-symbol" "^7.12.13" + "@babel/plugin-transform-unicode-escapes" "^7.12.13" + "@babel/plugin-transform-unicode-regex" "^7.12.13" + "@babel/preset-modules" "^0.1.4" + "@babel/types" "^7.13.14" + babel-plugin-polyfill-corejs2 "^0.2.0" + babel-plugin-polyfill-corejs3 "^0.2.0" + babel-plugin-polyfill-regenerator "^0.2.0" + core-js-compat "^3.9.0" + semver "^6.3.0" + +"@babel/preset-modules@^0.1.3", "@babel/preset-modules@^0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" + integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-react@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.1.tgz#7f022b13f55b6dd82f00f16d1c599ae62985358c" + integrity sha512-euCExymHCi0qB9u5fKw7rvlw7AZSjw/NaB9h7EkdTt5+yHRrXdiRTh7fkG3uBPpJg82CqLfp1LHLqWGSCrab+g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-react-display-name" "^7.12.1" + "@babel/plugin-transform-react-jsx" "^7.12.1" + "@babel/plugin-transform-react-jsx-development" "^7.12.1" + "@babel/plugin-transform-react-jsx-self" "^7.12.1" + "@babel/plugin-transform-react-jsx-source" "^7.12.1" + "@babel/plugin-transform-react-pure-annotations" "^7.12.1" + +"@babel/preset-react@^7.12.5": + version "7.13.13" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.13.13.tgz#fa6895a96c50763fe693f9148568458d5a839761" + integrity sha512-gx+tDLIE06sRjKJkVtpZ/t3mzCDOnPG+ggHZG9lffUbX8+wC739x20YQc9V35Do6ZAxaUc/HhVHIiOzz5MvDmA== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-validator-option" "^7.12.17" + "@babel/plugin-transform-react-display-name" "^7.12.13" + "@babel/plugin-transform-react-jsx" "^7.13.12" + "@babel/plugin-transform-react-jsx-development" "^7.12.17" + "@babel/plugin-transform-react-pure-annotations" "^7.12.1" + +"@babel/preset-typescript@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.1.tgz#86480b483bb97f75036e8864fe404cc782cc311b" + integrity sha512-hNK/DhmoJPsksdHuI/RVrcEws7GN5eamhi28JkO52MqIxU8Z0QpmiSOQxZHWOHV7I3P4UjHV97ay4TcamMA6Kw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-typescript" "^7.12.1" + +"@babel/runtime-corejs2@^7.4.5", "@babel/runtime-corejs2@^7.8.7": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.14.0.tgz#5519b92ccc819bd3d0a1ecb25ab3cb5a775485f8" + integrity sha512-btR4E8JiGlmmDI5YgirlG9z3T91rBdxnVh2YuEStrHDcekffaaIeK+CE0S4IaYUyYhMa7rFDfF2GEO79XNbLEA== + dependencies: + core-js "^2.6.5" + regenerator-runtime "^0.13.4" + +"@babel/runtime-corejs3@^7.10.2": + version "7.13.17" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.13.17.tgz#9baf45f03d4d013f021760b992d6349a9d27deaf" + integrity sha512-RGXINY1YvduBlGrP+vHjJqd/nK7JVpfM4rmZLGMx77WoL3sMrhheA0qxii9VNn1VHnxJLEyxmvCB+Wqc+x/FMw== + dependencies: + core-js-pure "^3.0.0" + regenerator-runtime "^0.13.4" + +"@babel/runtime@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.1.tgz#b4116a6b6711d010b2dad3b7b6e43bf1b9954740" + integrity sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": + version "7.13.17" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.17.tgz#8966d1fc9593bf848602f0662d6b4d0069e3a7ec" + integrity sha512-NCdgJEelPTSh+FEFylhnP1ylq848l1z9t9N0j1Lfbcw0+KXGjsTvUmkxy+voLLXB5SOKMbLLx4jxYliGrYQseA== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.12.5", "@babel/runtime@^7.9.2": + version "7.12.18" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.18.tgz#af137bd7e7d9705a412b3caaf991fe6aaa97831b" + integrity sha512-BogPQ7ciE6SYAUPtlm9tWbgI9+2AgqSam6QivMgXgAT+fKbgppaj4ZX15MHeLC1PVF5sNk70huBu20XxWOs8Cg== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.13.8", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.7": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.0.tgz#46794bc20b612c5f75e62dd071e24dfd95f1cbe6" + integrity sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.10.4", "@babel/template@^7.12.13", "@babel/template@^7.3.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" + integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/parser" "^7.12.13" + "@babel/types" "^7.12.13" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.13.0", "@babel/traverse@^7.13.13", "@babel/traverse@^7.13.15", "@babel/traverse@^7.13.17", "@babel/traverse@^7.7.0": + version "7.13.17" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.17.tgz#c85415e0c7d50ac053d758baec98b28b2ecfeea3" + integrity sha512-BMnZn0R+X6ayqm3C3To7o1j7Q020gWdqdyP50KEoVqaCO2c/Im7sYZSmVgvefp8TTMQ+9CtwuBp0Z1CZ8V3Pvg== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.16" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/parser" "^7.13.16" + "@babel/types" "^7.13.17" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.12.6", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.14", "@babel/types@^7.13.16", "@babel/types@^7.13.17", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": + version "7.13.17" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.17.tgz#48010a115c9fba7588b4437dd68c9469012b38b4" + integrity sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@cnakazawa/watch@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + +"@csstools/convert-colors@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" + integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== + +"@csstools/normalize.css@^10.1.0": + version "10.1.0" + resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-10.1.0.tgz#f0950bba18819512d42f7197e56c518aa491cf18" + integrity sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg== + +"@eslint/eslintrc@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547" + integrity sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@graphql-typed-document-node/core@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.1.0.tgz#0eee6373e11418bfe0b5638f654df7a4ca6a3950" + integrity sha512-wYn6r8zVZyQJ6rQaALBEln5B1pzxb9shV5Ef97kTvn6yVGrqyXVnDqnU24MXnFubR+rZjBY9NWuxX3FB2sTsjg== + +"@hapi/address@2.x.x": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" + integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ== + +"@hapi/bourne@1.x.x": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a" + integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA== + +"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" + integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow== + +"@hapi/joi@^15.1.0": + version "15.1.1" + resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7" + integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ== + dependencies: + "@hapi/address" "2.x.x" + "@hapi/bourne" "1.x.x" + "@hapi/hoek" "8.x.x" + "@hapi/topo" "3.x.x" + +"@hapi/topo@3.x.x": + version "3.1.6" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29" + integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ== + dependencies: + "@hapi/hoek" "^8.3.0" + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" + integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^26.6.2" + jest-util "^26.6.2" + slash "^3.0.0" + +"@jest/core@^26.6.0", "@jest/core@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" + integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/reporters" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-changed-files "^26.6.2" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-resolve-dependencies "^26.6.3" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + jest-watcher "^26.6.2" + micromatch "^4.0.2" + p-each-series "^2.1.0" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^26.6.0", "@jest/environment@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" + integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== + dependencies: + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + +"@jest/fake-timers@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" + integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== + dependencies: + "@jest/types" "^26.6.2" + "@sinonjs/fake-timers" "^6.0.1" + "@types/node" "*" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-util "^26.6.2" + +"@jest/globals@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" + integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/types" "^26.6.2" + expect "^26.6.2" + +"@jest/reporters@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" + integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.4" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^4.0.3" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + jest-haste-map "^26.6.2" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^7.0.0" + optionalDependencies: + node-notifier "^8.0.0" + +"@jest/source-map@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" + integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.4" + source-map "^0.6.0" + +"@jest/test-result@^26.6.0", "@jest/test-result@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" + integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== + dependencies: + "@jest/console" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" + integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== + dependencies: + "@jest/test-result" "^26.6.2" + graceful-fs "^4.2.4" + jest-haste-map "^26.6.2" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + +"@jest/transform@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" + integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^26.6.2" + babel-plugin-istanbul "^6.0.0" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.4" + jest-haste-map "^26.6.2" + jest-regex-util "^26.0.0" + jest-util "^26.6.2" + micromatch "^4.0.2" + pirates "^4.0.1" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + +"@jest/types@^26.6.0", "@jest/types@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" + integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + +"@nodelib/fs.scandir@2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" + integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== + dependencies: + "@nodelib/fs.stat" "2.0.4" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" + integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" + integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== + dependencies: + "@nodelib/fs.scandir" "2.1.4" + fastq "^1.6.0" + +"@npmcli/move-file@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@pmmmwh/react-refresh-webpack-plugin@0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz#1eec460596d200c0236bf195b078a5d1df89b766" + integrity sha512-br5Qwvh8D2OQqSXpd1g/xqXKnK0r+Jz6qVKBbWmpUcrbGOxUrf39V5oZ1876084CGn18uMdR5uvPqBv9UqtBjQ== + dependencies: + ansi-html "^0.0.7" + error-stack-parser "^2.0.6" + html-entities "^1.2.1" + native-url "^0.2.6" + schema-utils "^2.6.5" + source-map "^0.7.3" + +"@popperjs/core@^2.8.6": + version "2.9.2" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.9.2.tgz#adea7b6953cbb34651766b0548468e743c6a2353" + integrity sha512-VZMYa7+fXHdwIq1TDhSXoVmSPEGM/aa+6Aiq3nVVJ9bXr24zScr+NlKFKC3iPljA7ho/GAZr+d2jOf5GIRC30Q== + +"@restart/context@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@restart/context/-/context-2.1.4.tgz#a99d87c299a34c28bd85bb489cb07bfd23149c02" + integrity sha512-INJYZQJP7g+IoDUh/475NlGiTeMfwTXUEr3tmRneckHIxNolGOW9CTq83S8cxq0CgJwwcMzMJFchxvlwe7Rk8Q== + +"@restart/hooks@^0.3.26": + version "0.3.26" + resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.3.26.tgz#ade155a7b0b014ef1073391dda46972c3a14a129" + integrity sha512-7Hwk2ZMYm+JLWcb7R9qIXk1OoUg1Z+saKWqZXlrvFwT3w6UArVNWgxYOzf+PJoK9zZejp8okPAKTctthhXLt5g== + dependencies: + lodash "^4.17.20" + lodash-es "^4.17.20" + +"@rjsf/bootstrap-4@^2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@rjsf/bootstrap-4/-/bootstrap-4-2.5.1.tgz#adb164f22d450e275a07d0b18e39aa1de83ff136" + integrity sha512-USijizR4MkYtMOdbZWt3HDDc9vWmMvmiskqXwV2jEUBMPSu1UG0bZS2HKzqfnMJcJRT1P7Tj4O3sGwgE+7FCpw== + dependencies: + react-icons "^3.10.0" + +"@rjsf/core@^2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@rjsf/core/-/core-2.5.1.tgz#95a842d22bab5f83929662fcd73739108e9f5cbb" + integrity sha512-km8NYScXNONaL5BiSLS6wyDj49pOLZtn0iXg7Zxlm921uuf3o2AAX5SuZS5kB4Zj2zlrVMrXESexfX6bxdDYHw== + dependencies: + "@babel/runtime-corejs2" "^7.8.7" + "@types/json-schema" "^7.0.4" + ajv "^6.7.0" + core-js "^2.5.7" + json-schema-merge-allof "^0.6.0" + jsonpointer "^4.0.1" + lodash "^4.17.15" + prop-types "^15.7.2" + react-app-polyfill "^1.0.4" + react-is "^16.9.0" + shortid "^2.2.14" + +"@rollup/plugin-node-resolve@^7.1.1": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz#80de384edfbd7bfc9101164910f86078151a3eca" + integrity sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q== + dependencies: + "@rollup/pluginutils" "^3.0.8" + "@types/resolve" "0.0.8" + builtin-modules "^3.1.0" + is-module "^1.0.0" + resolve "^1.14.2" + +"@rollup/plugin-replace@^2.3.1": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a" + integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + magic-string "^0.25.7" + +"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@sinonjs/commons@^1.7.0": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" + integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@surma/rollup-plugin-off-main-thread@^1.1.1": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-1.4.2.tgz#e6786b6af5799f82f7ab3a82e53f6182d2b91a58" + integrity sha512-yBMPqmd1yEJo/280PAMkychuaALyQ9Lkb5q1ck3mjJrFuEobIfhnQ4J3mbvBoISmR3SWMWV+cGB/I0lCQee79A== + dependencies: + ejs "^2.6.1" + magic-string "^0.25.0" + +"@svgr/babel-plugin-add-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906" + integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg== + +"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef" + integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg== + +"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd" + integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA== + +"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897" + integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ== + +"@svgr/babel-plugin-svg-dynamic-title@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7" + integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg== + +"@svgr/babel-plugin-svg-em-dimensions@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0" + integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw== + +"@svgr/babel-plugin-transform-react-native-svg@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80" + integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q== + +"@svgr/babel-plugin-transform-svg-component@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz#583a5e2a193e214da2f3afeb0b9e8d3250126b4a" + integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ== + +"@svgr/babel-preset@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz#8af54f3e0a8add7b1e2b0fcd5a882c55393df327" + integrity sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1" + "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0" + "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0" + "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0" + "@svgr/babel-plugin-transform-svg-component" "^5.5.0" + +"@svgr/core@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579" + integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ== + dependencies: + "@svgr/plugin-jsx" "^5.5.0" + camelcase "^6.2.0" + cosmiconfig "^7.0.0" + +"@svgr/hast-util-to-babel-ast@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz#5ee52a9c2533f73e63f8f22b779f93cd432a5461" + integrity sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ== + dependencies: + "@babel/types" "^7.12.6" + +"@svgr/plugin-jsx@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000" + integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA== + dependencies: + "@babel/core" "^7.12.3" + "@svgr/babel-preset" "^5.5.0" + "@svgr/hast-util-to-babel-ast" "^5.5.0" + svg-parser "^2.0.2" + +"@svgr/plugin-svgo@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246" + integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ== + dependencies: + cosmiconfig "^7.0.0" + deepmerge "^4.2.2" + svgo "^1.2.2" + +"@svgr/webpack@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.5.0.tgz#aae858ee579f5fa8ce6c3166ef56c6a1b381b640" + integrity sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g== + dependencies: + "@babel/core" "^7.12.3" + "@babel/plugin-transform-react-constant-elements" "^7.12.1" + "@babel/preset-env" "^7.12.1" + "@babel/preset-react" "^7.12.5" + "@svgr/core" "^5.5.0" + "@svgr/plugin-jsx" "^5.5.0" + "@svgr/plugin-svgo" "^5.5.0" + loader-utils "^2.0.0" + +"@testing-library/dom@^7.28.1": + version "7.29.6" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.29.6.tgz#eb37844fb431186db7960a7ff6749ea65a19617c" + integrity sha512-vzTsAXa439ptdvav/4lsKRcGpAQX7b6wBIqia7+iNzqGJ5zjswApxA6jDAsexrc6ue9krWcbh8o+LYkBXW+GCQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.12.5" + "@types/aria-query" "^4.2.0" + aria-query "^4.2.2" + chalk "^4.1.0" + dom-accessibility-api "^0.5.4" + lz-string "^1.4.4" + pretty-format "^26.6.2" + +"@testing-library/jest-dom@^5.11.4": + version "5.11.9" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.11.9.tgz#e6b3cd687021f89f261bd53cbe367041fbd3e975" + integrity sha512-Mn2gnA9d1wStlAIT2NU8J15LNob0YFBVjs2aEQ3j8rsfRQo+lAs7/ui1i2TGaJjapLmuNPLTsrm+nPjmZDwpcQ== + dependencies: + "@babel/runtime" "^7.9.2" + "@types/testing-library__jest-dom" "^5.9.1" + aria-query "^4.2.2" + chalk "^3.0.0" + css "^3.0.0" + css.escape "^1.5.1" + lodash "^4.17.15" + redent "^3.0.0" + +"@testing-library/react@^11.1.0": + version "11.2.5" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-11.2.5.tgz#ae1c36a66c7790ddb6662c416c27863d87818eb9" + integrity sha512-yEx7oIa/UWLe2F2dqK0FtMF9sJWNXD+2PPtp39BvE0Kh9MJ9Kl0HrZAgEuhUJR+Lx8Di6Xz+rKwSdEPY2UV8ZQ== + dependencies: + "@babel/runtime" "^7.12.5" + "@testing-library/dom" "^7.28.1" + +"@testing-library/user-event@^12.1.10": + version "12.7.1" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-12.7.1.tgz#e1ce931c04a1c65faf28618442d56ba8da887f2c" + integrity sha512-COfCkYgcxc+P9+pEAIGlmBuIDjO91Chf9GOBHI8AhIiMyaoOrKVPQny1uf0HIAYNoHKL5slhkqOPP2ZyNaVQGw== + dependencies: + "@babel/runtime" "^7.12.5" + +"@types/anymatch@*": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" + integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== + +"@types/apollo-upload-client@^14.1.0": + version "14.1.0" + resolved "https://registry.yarnpkg.com/@types/apollo-upload-client/-/apollo-upload-client-14.1.0.tgz#21a57d7e3f29ff946ba51a53b3d7da46ddd21fbc" + integrity sha512-ZLvcEqu+l9qKGdrIpASt/A2WY1ghAC9L3qaoegkiBOccjxvQmWN9liZzVFiuHTuWseWpVbMklqbs/z+KEjll9Q== + dependencies: + "@apollo/client" "^3.1.3" + "@types/extract-files" "*" + graphql "^15.3.0" + +"@types/aria-query@^4.2.0": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.1.tgz#78b5433344e2f92e8b306c06a5622c50c245bf6b" + integrity sha512-S6oPal772qJZHoRZLFc/XoZW2gFvwXusYUmXPXkgxJLuEk2vOt7jc4Yo6z/vtI0EBkbPBVrJJ0B+prLIKiWqHg== + +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": + version "7.1.14" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.14.tgz#faaeefc4185ec71c389f4501ee5ec84b170cc402" + integrity sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8" + integrity sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be" + integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": + version "7.11.1" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.1.tgz#654f6c4f67568e24c23b367e947098c6206fa639" + integrity sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw== + dependencies: + "@babel/types" "^7.3.0" + +"@types/classnames@^2.2.10": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.3.1.tgz#3c2467aa0f1a93f1f021e3b9bcf938bd5dfdc0dd" + integrity sha512-zeOWb0JGBoVmlQoznvqXbE0tEC/HONsnoUNH19Hc96NFsTAwTXbTqb8FMYkru1F/iqp7a18Ws3nWJvtA1sHD1A== + dependencies: + classnames "*" + +"@types/eslint@^7.2.6": + version "7.2.10" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.10.tgz#4b7a9368d46c0f8cd5408c23288a59aa2394d917" + integrity sha512-kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*": + version "0.0.47" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.47.tgz#d7a51db20f0650efec24cd04994f523d93172ed4" + integrity sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg== + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + +"@types/extract-files@*": + version "8.1.1" + resolved "https://registry.yarnpkg.com/@types/extract-files/-/extract-files-8.1.1.tgz#11b67e795ad2c8b483431e8d4f190db2fd22944b" + integrity sha512-dMJJqBqyhsfJKuK7p7HyyNmki7qj1AlwhUKWx6KrU7i1K2T2SPsUsSUTWFmr/sEM1q8rfR8j5IyUmYrDbrhfjQ== + +"@types/glob@^7.1.1": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/graceful-fs@^4.1.2": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + dependencies: + "@types/node" "*" + +"@types/history@*": + version "4.7.8" + resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.8.tgz#49348387983075705fe8f4e02fb67f7daaec4934" + integrity sha512-S78QIYirQcUoo6UJZx9CSP0O2ix9IaeAXwQi26Rhr/+mg7qqPy8TzaxHSUut7eGjL8WmLccT7/MXf304WjqHcA== + +"@types/html-minifier-terser@^5.0.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#3c9ee980f1a10d6021ae6632ca3e79ca2ec4fb50" + integrity sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA== + +"@types/humps@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/humps/-/humps-2.0.0.tgz#9ad07801cd34f9d9ce379fa66f62d3049937d815" + integrity sha512-bP/s9HUT2oTJ0c3XGcHGISwTNs6r8eUPNfU6DuOSU8EHgtHqwvoDEyj76jPhKT/0MszS1PF/hHolxRrHSLYUPQ== + +"@types/invariant@^2.2.33": + version "2.2.34" + resolved "https://registry.yarnpkg.com/@types/invariant/-/invariant-2.2.34.tgz#05e4f79f465c2007884374d4795452f995720bbe" + integrity sha512-lYUtmJ9BqUN688fGY1U1HZoWT1/Jrmgigx2loq4ZcJpICECm/Om3V314BxdzypO0u5PORKGMM6x0OXaljV1YFg== + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" + integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" + integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@*", "@types/jest@^26.0.15": + version "26.0.20" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.20.tgz#cd2f2702ecf69e86b586e1f5223a60e454056307" + integrity sha512-9zi2Y+5USJRxd0FsahERhBwlcvFh6D2GLQnY2FH2BzK8J9s9omvNHIbvABwIluXa0fD8XVKMLTO0aOEuUfACAA== + dependencies: + jest-diff "^26.0.0" + pretty-format "^26.0.0" + +"@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": + version "7.0.7" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" + integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== + +"@types/json2csv@^5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@types/json2csv/-/json2csv-5.0.3.tgz#759514772a90e35b08c10808dedeaf52248af418" + integrity sha512-ZJEv6SzhPhgpBpxZU4n/TZekbZqI4EcyXXRwms1lAITG2kIAtj85PfNYafUOY1zy8bWs5ujaub0GU4copaA0sw== + dependencies: + "@types/node" "*" + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + +"@types/jsonwebtoken@^8.5.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#56958cb2d80f6d74352bd2e501a018e2506a8a84" + integrity sha512-rNAPdomlIUX0i0cg2+I+Q1wOUr531zHBQ+cV/28PJ39bSPKjahatZZ2LMuhiguETkCgLVzfruw/ZvNMNkKoSzw== + dependencies: + "@types/node" "*" + +"@types/minimatch@*": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" + integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA== + +"@types/node@*": + version "15.0.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.0.1.tgz#ef34dea0881028d11398be5bf4e856743e3dc35a" + integrity sha512-TMkXt0Ck1y0KKsGr9gJtWGjttxlZnnvDtphxUOSd0bfaR6Q1jle+sPvrzNR1urqYTWMinoKvjKfXUGsumaO1PA== + +"@types/node@^12.0.0": + version "12.20.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.4.tgz#73687043dd00fcb6962c60fbf499553a24d6bdf2" + integrity sha512-xRCgeE0Q4pT5UZ189TJ3SpYuX/QGl6QIAOAIeDSbAVAd2gX1NxSZup4jNVK7cxIeP8KDSbJgcckun495isP1jQ== + +"@types/normalize-package-data@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/prettier@^2.0.0": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.2.3.tgz#ef65165aea2924c9359205bf748865b8881753c0" + integrity sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA== + +"@types/prop-types@*", "@types/prop-types@^15.7.3": + version "15.7.3" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" + integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== + +"@types/q@^1.5.1": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" + integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== + +"@types/react-dom@^17.0.0": + version "17.0.1" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.1.tgz#d92d77d020bfb083e07cc8e0ac9f933599a4d56a" + integrity sha512-yIVyopxQb8IDZ7SOHeTovurFq+fXiPICa+GV3gp0Xedsl+MwQlMLKmvrnEjFbQxjliH5YVAEWFh975eVNmKj7Q== + dependencies: + "@types/react" "*" + +"@types/react-jsonschema-form@^1.7.4": + version "1.7.4" + resolved "https://registry.yarnpkg.com/@types/react-jsonschema-form/-/react-jsonschema-form-1.7.4.tgz#b9dded80f830bce11a623107633b13964a143cca" + integrity sha512-TSsntIuB8bfheC/ZpjUmgB6+m5cLR4Gbh8rnqpSYB6T4e2TwzNICuKC5AykZI0XTxqLJmShyVsJxuo4aih64Gw== + dependencies: + "@types/json-schema" "*" + "@types/react" "*" + +"@types/react-router-dom@^5.1.7": + version "5.1.7" + resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.1.7.tgz#a126d9ea76079ffbbdb0d9225073eb5797ab7271" + integrity sha512-D5mHD6TbdV/DNHYsnwBTv+y73ei+mMjrkGrla86HthE4/PVvL1J94Bu3qABU+COXzpL23T1EZapVVpwHuBXiUg== + dependencies: + "@types/history" "*" + "@types/react" "*" + "@types/react-router" "*" + +"@types/react-router@*": + version "5.1.13" + resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.13.tgz#051c0d229bd48ad90558a1db500708127cc512f7" + integrity sha512-ZIuaO9Yrln54X6elg8q2Ivp6iK6p4syPsefEYAhRDAoqNh48C8VYUmB9RkXjKSQAJSJV0mbIFCX7I4vZDcHrjg== + dependencies: + "@types/history" "*" + "@types/react" "*" + +"@types/react-table@^7.0.29": + version "7.0.29" + resolved "https://registry.yarnpkg.com/@types/react-table/-/react-table-7.0.29.tgz#af2c82f2d6a39be5bc0f191b30501309a8db0949" + integrity sha512-RCGVKGlTDv3jbj37WJ5HhN3sPb0W/2rqlvyGUtvawnnyrxgI2BGgASvU93rq2jwanVp5J9l1NYAeiGlNhdaBGw== + dependencies: + "@types/react" "*" + +"@types/react-test-renderer@^17.0.1": + version "17.0.1" + resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-17.0.1.tgz#3120f7d1c157fba9df0118dae20cb0297ee0e06b" + integrity sha512-3Fi2O6Zzq/f3QR9dRnlnHso9bMl7weKCviFmfF6B4LS1Uat6Hkm15k0ZAQuDz+UBq6B3+g+NM6IT2nr5QgPzCw== + dependencies: + "@types/react" "*" + +"@types/react-transition-group@^4.4.1": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.1.tgz#e1a3cb278df7f47f17b5082b1b3da17170bd44b1" + integrity sha512-vIo69qKKcYoJ8wKCJjwSgCTM+z3chw3g18dkrDfVX665tMH7tmbDxEAnPdey4gTlwZz5QuHGzd+hul0OVZDqqQ== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@^17.0.0": + version "17.0.2" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.2.tgz#3de24c4efef902dd9795a49c75f760cbe4f7a5a8" + integrity sha512-Xt40xQsrkdvjn1EyWe1Bc0dJLcil/9x2vAuW7ya+PuQip4UYUaXyhzWmAbwRsdMgwOFHpfp7/FFZebDU6Y8VHA== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + +"@types/react@>=16.9.11", "@types/react@>=16.9.35": + version "17.0.4" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.4.tgz#a67c6f7a460d2660e950d9ccc1c2f18525c28220" + integrity sha512-onz2BqScSFMoTRdJUZUDD/7xrusM8hBA2Fktk2qgaTYPCgPvWnDEgkrOs8hhPUf2jfcIXkJ5yK6VfYormJS3Jw== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/resolve@0.0.8": + version "0.0.8" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" + integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== + dependencies: + "@types/node" "*" + +"@types/scheduler@*": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275" + integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA== + +"@types/source-list-map@*": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" + integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== + +"@types/stack-utils@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" + integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== + +"@types/tapable@^1", "@types/tapable@^1.0.5": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.7.tgz#545158342f949e8fd3bfd813224971ecddc3fac4" + integrity sha512-0VBprVqfgFD7Ehb2vd8Lh9TG3jP98gvr8rgehQqzztZNI7o8zS8Ad4jyZneKELphpuE212D8J70LnSNQSyO6bQ== + +"@types/testing-library__jest-dom@^5.9.1": + version "5.9.5" + resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.9.5.tgz#5bf25c91ad2d7b38f264b12275e5c92a66d849b0" + integrity sha512-ggn3ws+yRbOHog9GxnXiEZ/35Mow6YtPZpd7Z5mKDeZS/o7zx3yAle0ov/wjhVB5QT4N2Dt+GNoGCdqkBGCajQ== + dependencies: + "@types/jest" "*" + +"@types/uglify-js@*": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.0.tgz#1cad8df1fb0b143c5aba08de5712ea9d1ff71124" + integrity sha512-EGkrJD5Uy+Pg0NUR8uA4bJ5WMfljyad0G+784vLCNUkD+QwOJXUbBYExXfVGf7YtyzdQp3L/XMYcliB987kL5Q== + dependencies: + source-map "^0.6.1" + +"@types/warning@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.0.tgz#0d2501268ad8f9962b740d387c4654f5f8e23e52" + integrity sha1-DSUBJorY+ZYrdA04fEZU9fjiPlI= + +"@types/webpack-sources@*": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.1.0.tgz#8882b0bd62d1e0ce62f183d0d01b72e6e82e8c10" + integrity sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg== + dependencies: + "@types/node" "*" + "@types/source-list-map" "*" + source-map "^0.7.3" + +"@types/webpack@^4.41.8": + version "4.41.27" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.27.tgz#f47da488c8037e7f1b2dbf2714fbbacb61ec0ffc" + integrity sha512-wK/oi5gcHi72VMTbOaQ70VcDxSQ1uX8S2tukBK9ARuGXrYM/+u4ou73roc7trXDNmCxCoerE8zruQqX/wuHszA== + dependencies: + "@types/anymatch" "*" + "@types/node" "*" + "@types/tapable" "^1" + "@types/uglify-js" "*" + "@types/webpack-sources" "*" + source-map "^0.6.0" + +"@types/yargs-parser@*": + version "20.2.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" + integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA== + +"@types/yargs@^15.0.0": + version "15.0.13" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.13.tgz#34f7fec8b389d7f3c1fd08026a5763e072d3c6dc" + integrity sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ== + dependencies: + "@types/yargs-parser" "*" + +"@types/zen-observable@0.8.3": + version "0.8.3" + resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.3.tgz#781d360c282436494b32fe7d9f7f8e64b3118aa3" + integrity sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw== + +"@types/zen-observable@^0.8.0": + version "0.8.2" + resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.2.tgz#808c9fa7e4517274ed555fa158f2de4b4f468e71" + integrity sha512-HrCIVMLjE1MOozVoD86622S7aunluLb2PJdPfb3nYiEtohm8mIB/vyv0Fd37AdeMFrTUQXEunw78YloMA3Qilg== + +"@typescript-eslint/eslint-plugin@^4.15.2": + version "4.15.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.2.tgz#981b26b4076c62a5a55873fbef3fe98f83360c61" + integrity sha512-uiQQeu9tWl3f1+oK0yoAv9lt/KXO24iafxgQTkIYO/kitruILGx3uH+QtIAHqxFV+yIsdnJH+alel9KuE3J15Q== + dependencies: + "@typescript-eslint/experimental-utils" "4.15.2" + "@typescript-eslint/scope-manager" "4.15.2" + debug "^4.1.1" + functional-red-black-tree "^1.0.1" + lodash "^4.17.15" + regexpp "^3.0.0" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/eslint-plugin@^4.5.0": + version "4.22.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.22.0.tgz#3d5f29bb59e61a9dba1513d491b059e536e16dbc" + integrity sha512-U8SP9VOs275iDXaL08Ln1Fa/wLXfj5aTr/1c0t0j6CdbOnxh+TruXu1p4I0NAvdPBQgoPjHsgKn28mOi0FzfoA== + dependencies: + "@typescript-eslint/experimental-utils" "4.22.0" + "@typescript-eslint/scope-manager" "4.22.0" + debug "^4.1.1" + functional-red-black-tree "^1.0.1" + lodash "^4.17.15" + regexpp "^3.0.0" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/experimental-utils@4.15.2": + version "4.15.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.15.2.tgz#5efd12355bd5b535e1831282e6cf465b9a71cf36" + integrity sha512-Fxoshw8+R5X3/Vmqwsjc8nRO/7iTysRtDqx6rlfLZ7HbT8TZhPeQqbPjTyk2RheH3L8afumecTQnUc9EeXxohQ== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/scope-manager" "4.15.2" + "@typescript-eslint/types" "4.15.2" + "@typescript-eslint/typescript-estree" "4.15.2" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/experimental-utils@4.22.0", "@typescript-eslint/experimental-utils@^4.0.1": + version "4.22.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.22.0.tgz#68765167cca531178e7b650a53456e6e0bef3b1f" + integrity sha512-xJXHHl6TuAxB5AWiVrGhvbGL8/hbiCQ8FiWwObO3r0fnvBdrbWEDy1hlvGQOAWc6qsCWuWMKdVWlLAEMpxnddg== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/scope-manager" "4.22.0" + "@typescript-eslint/types" "4.22.0" + "@typescript-eslint/typescript-estree" "4.22.0" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/experimental-utils@^3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz#e179ffc81a80ebcae2ea04e0332f8b251345a686" + integrity sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/types" "3.10.1" + "@typescript-eslint/typescript-estree" "3.10.1" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/parser@^4.15.2", "@typescript-eslint/parser@^4.4.1": + version "4.15.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.15.2.tgz#c804474321ef76a3955aec03664808f0d6e7872e" + integrity sha512-SHeF8xbsC6z2FKXsaTb1tBCf0QZsjJ94H6Bo51Y1aVEZ4XAefaw5ZAilMoDPlGghe+qtq7XdTiDlGfVTOmvA+Q== + dependencies: + "@typescript-eslint/scope-manager" "4.15.2" + "@typescript-eslint/types" "4.15.2" + "@typescript-eslint/typescript-estree" "4.15.2" + debug "^4.1.1" + +"@typescript-eslint/parser@^4.5.0": + version "4.22.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.22.0.tgz#e1637327fcf796c641fe55f73530e90b16ac8fe8" + integrity sha512-z/bGdBJJZJN76nvAY9DkJANYgK3nlRstRRi74WHm3jjgf2I8AglrSY+6l7ogxOmn55YJ6oKZCLLy+6PW70z15Q== + dependencies: + "@typescript-eslint/scope-manager" "4.22.0" + "@typescript-eslint/types" "4.22.0" + "@typescript-eslint/typescript-estree" "4.22.0" + debug "^4.1.1" + +"@typescript-eslint/scope-manager@4.15.2": + version "4.15.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.15.2.tgz#5725bda656995960ae1d004bfd1cd70320f37f4f" + integrity sha512-Zm0tf/MSKuX6aeJmuXexgdVyxT9/oJJhaCkijv0DvJVT3ui4zY6XYd6iwIo/8GEZGy43cd7w1rFMiCLHbRzAPQ== + dependencies: + "@typescript-eslint/types" "4.15.2" + "@typescript-eslint/visitor-keys" "4.15.2" + +"@typescript-eslint/scope-manager@4.22.0": + version "4.22.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.22.0.tgz#ed411545e61161a8d702e703a4b7d96ec065b09a" + integrity sha512-OcCO7LTdk6ukawUM40wo61WdeoA7NM/zaoq1/2cs13M7GyiF+T4rxuA4xM+6LeHWjWbss7hkGXjFDRcKD4O04Q== + dependencies: + "@typescript-eslint/types" "4.22.0" + "@typescript-eslint/visitor-keys" "4.22.0" + +"@typescript-eslint/types@3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727" + integrity sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ== + +"@typescript-eslint/types@4.15.2": + version "4.15.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.15.2.tgz#04acf3a2dc8001a88985291744241e732ef22c60" + integrity sha512-r7lW7HFkAarfUylJ2tKndyO9njwSyoy6cpfDKWPX6/ctZA+QyaYscAHXVAfJqtnY6aaTwDYrOhp+ginlbc7HfQ== + +"@typescript-eslint/types@4.22.0": + version "4.22.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.22.0.tgz#0ca6fde5b68daf6dba133f30959cc0688c8dd0b6" + integrity sha512-sW/BiXmmyMqDPO2kpOhSy2Py5w6KvRRsKZnV0c4+0nr4GIcedJwXAq+RHNK4lLVEZAJYFltnnk1tJSlbeS9lYA== + +"@typescript-eslint/typescript-estree@3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz#fd0061cc38add4fad45136d654408569f365b853" + integrity sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w== + dependencies: + "@typescript-eslint/types" "3.10.1" + "@typescript-eslint/visitor-keys" "3.10.1" + debug "^4.1.1" + glob "^7.1.6" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/typescript-estree@4.15.2": + version "4.15.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.2.tgz#c2f7a1e94f3428d229d5ecff3ead6581ee9b62fa" + integrity sha512-cGR8C2g5SPtHTQvAymEODeqx90pJHadWsgTtx6GbnTWKqsg7yp6Eaya9nFzUd4KrKhxdYTTFBiYeTPQaz/l8bw== + dependencies: + "@typescript-eslint/types" "4.15.2" + "@typescript-eslint/visitor-keys" "4.15.2" + debug "^4.1.1" + globby "^11.0.1" + is-glob "^4.0.1" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/typescript-estree@4.22.0": + version "4.22.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.22.0.tgz#b5d95d6d366ff3b72f5168c75775a3e46250d05c" + integrity sha512-TkIFeu5JEeSs5ze/4NID+PIcVjgoU3cUQUIZnH3Sb1cEn1lBo7StSV5bwPuJQuoxKXlzAObjYTilOEKRuhR5yg== + dependencies: + "@typescript-eslint/types" "4.22.0" + "@typescript-eslint/visitor-keys" "4.22.0" + debug "^4.1.1" + globby "^11.0.1" + is-glob "^4.0.1" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/visitor-keys@3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz#cd4274773e3eb63b2e870ac602274487ecd1e931" + integrity sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ== + dependencies: + eslint-visitor-keys "^1.1.0" + +"@typescript-eslint/visitor-keys@4.15.2": + version "4.15.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.2.tgz#3d1c7979ce75bf6acf9691109bd0d6b5706192b9" + integrity sha512-TME1VgSb7wTwgENN5KVj4Nqg25hP8DisXxNBojM4Nn31rYaNDIocNm5cmjOFfh42n7NVERxWrDFoETO/76ePyg== + dependencies: + "@typescript-eslint/types" "4.15.2" + eslint-visitor-keys "^2.0.0" + +"@typescript-eslint/visitor-keys@4.22.0": + version "4.22.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.22.0.tgz#169dae26d3c122935da7528c839f42a8a42f6e47" + integrity sha512-nnMu4F+s4o0sll6cBSsTeVsT4cwxB7zECK3dFxzEjPBii9xLpq4yqqsy/FU5zMfan6G60DKZSCXAa3sHJZrcYw== + dependencies: + "@typescript-eslint/types" "4.22.0" + eslint-visitor-keys "^2.0.0" + +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== + +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@xtuc/long" "4.2.2" + +"@wry/context@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.6.0.tgz#f903eceb89d238ef7e8168ed30f4511f92d83e06" + integrity sha512-sAgendOXR8dM7stJw3FusRxFHF/ZinU0lffsA2YTyyIOfic86JX02qlPqPVqJNZJPAxFt+2EE8bvq6ZlS0Kf+Q== + dependencies: + tslib "^2.1.0" + +"@wry/equality@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.4.0.tgz#474491869a8d0590f4a33fd2a4850a77a0f63408" + integrity sha512-DxN/uawWfhRbgYE55zVCPOoe+jvsQ4m7PT1Wlxjyb/LCCLuU1UsucV2BbCxFAX8bjcSueFBbB5Qfj1Zfe8e7Fw== + dependencies: + tslib "^2.1.0" + +"@wry/equality@^0.5.0": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.5.2.tgz#72c8a7a7d884dff30b612f4f8464eba26c080e73" + integrity sha512-oVMxbUXL48EV/C0/M7gLVsoK6qRHPS85x8zECofEZOVvxGmIPLA9o5Z27cc2PoAyZz1S2VoM2A7FLAnpfGlneA== + dependencies: + tslib "^2.3.0" + +"@wry/trie@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@wry/trie/-/trie-0.3.0.tgz#3245e74988c4e3033299e479a1bf004430752463" + integrity sha512-Yw1akIogPhAT6XPYsRHlZZIS0tIGmAl9EYXHi2scf7LPKKqdqmow/Hu4kEqP2cJR3EjaU/9L0ZlAjFf3hFxmug== + dependencies: + tslib "^2.1.0" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +abab@^2.0.3, abab@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + +acorn-jsx@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" + integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== + +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn@^6.4.1: + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== + +acorn@^7.1.0, acorn@^7.1.1, acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.1.0: + version "8.2.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.2.1.tgz#0d36af126fb6755095879c1dc6fd7edf7d60a5fb" + integrity sha512-z716cpm5TX4uzOzILx8PavOE6C6DKshHDw1aQN52M/yNSqE9s5O8SMfyhCCfCJ3HmTL0NkVOi+8a/55T7YB3bg== + +address@1.1.2, address@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" + integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== + +adjust-sourcemap-loader@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz#5ae12fb5b7b1c585e80bbb5a63ec163a1a45e61e" + integrity sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw== + dependencies: + loader-utils "^2.0.0" + regex-parser "^2.2.11" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.7.0: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.2.0.tgz#c89d3380a784ce81b2085f48811c4c101df4c602" + integrity sha512-WSNGFuyWd//XO8n/m/EaOlNLtO0yL8EXT/74LqT4khdhpZjP7lkj/kT5uwRmGitKEVp/Oj7ZUHeGfPtgHhQ5CA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +alphanum-sort@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= + +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-html@0.0.7, ansi-html@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + +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.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@^3.0.3, anymatch@~3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +apollo-upload-client@^16.0.0: + version "16.0.0" + resolved "https://registry.yarnpkg.com/apollo-upload-client/-/apollo-upload-client-16.0.0.tgz#704c9bc21e12bd4687172876eb927cf756b2e524" + integrity sha512-aLhYucyA0T8aBEQ5g+p13qnR9RUyL8xqb8FSZ7e/Kw2KUOsotLUlFluLobqaE7JSUFwc6sKfXIcwB7y4yEjbZg== + dependencies: + extract-files "^11.0.0" + +aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +aria-query@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" + integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== + dependencies: + "@babel/runtime" "^7.10.2" + "@babel/runtime-corejs3" "^7.10.2" + +arity-n@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arity-n/-/arity-n-1.0.4.tgz#d9e76b11733e08569c0847ae7b39b2860b30b745" + integrity sha1-2edrEXM+CFacCEeuezmyhgswt0U= + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-includes@^3.1.1, array-includes@^3.1.2, array-includes@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" + integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + get-intrinsic "^1.1.1" + is-string "^1.0.5" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +array.prototype.flat@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" + integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + +array.prototype.flatmap@^1.2.3, array.prototype.flatmap@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" + integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + function-bind "^1.1.1" + +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + +asap@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +autoprefixer@^9.6.1: + version "9.8.6" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" + integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== + dependencies: + browserslist "^4.12.0" + caniuse-lite "^1.0.30001109" + colorette "^1.2.1" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.32" + postcss-value-parser "^4.1.0" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + +axe-core@^4.0.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.2.0.tgz#6594db4ee62f78be79e32a7295d21b099b60668d" + integrity sha512-1uIESzroqpaTzt9uX48HO+6gfnKu3RwvWdCcWSrX4csMInJfCo1yvKPNXCwXFRpJqRW25tiASb6No0YH57PXqg== + +axios@^0.21.1: + version "0.21.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" + integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== + dependencies: + follow-redirects "^1.10.0" + +axobject-query@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" + integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== + +babel-eslint@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" + integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + eslint-visitor-keys "^1.0.0" + resolve "^1.12.0" + +babel-extract-comments@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz#0a2aedf81417ed391b85e18b4614e693a0351a21" + integrity sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ== + dependencies: + babylon "^6.18.0" + +babel-jest@^26.6.0, babel-jest@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" + integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== + dependencies: + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/babel__core" "^7.1.7" + babel-plugin-istanbul "^6.0.0" + babel-preset-jest "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + slash "^3.0.0" + +babel-loader@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" + integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== + dependencies: + find-cache-dir "^2.1.0" + loader-utils "^1.4.0" + mkdirp "^0.5.3" + pify "^4.0.1" + schema-utils "^2.6.5" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-istanbul@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" + integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^4.0.0" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" + integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-macros@2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" + integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== + dependencies: + "@babel/runtime" "^7.7.2" + cosmiconfig "^6.0.0" + resolve "^1.12.0" + +babel-plugin-named-asset-import@^0.3.7: + version "0.3.7" + resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.7.tgz#156cd55d3f1228a5765774340937afc8398067dd" + integrity sha512-squySRkf+6JGnvjoUtDEjSREJEBirnXi9NqP6rjSYsylxQxqBTz+pkmf395i9E2zsvmYUaI40BHo6SqZUdydlw== + +babel-plugin-polyfill-corejs2@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz#686775bf9a5aa757e10520903675e3889caeedc4" + integrity sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg== + dependencies: + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.2.0" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz#f4b4bb7b19329827df36ff56f6e6d367026cb7a2" + integrity sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.2.0" + core-js-compat "^3.9.1" + +babel-plugin-polyfill-regenerator@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz#853f5f5716f4691d98c84f8069c7636ea8da7ab8" + integrity sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.2.0" + +babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= + +babel-plugin-transform-object-rest-spread@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.26.0" + +babel-plugin-transform-react-remove-prop-types@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" + integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" + integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== + dependencies: + babel-plugin-jest-hoist "^26.6.2" + babel-preset-current-node-syntax "^1.0.0" + +babel-preset-react-app@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-10.0.0.tgz#689b60edc705f8a70ce87f47ab0e560a317d7045" + integrity sha512-itL2z8v16khpuKutx5IH8UdCdSTuzrOhRFTEdIhveZ2i1iBKDrVE0ATa4sFVy+02GLucZNVBWtoarXBy0Msdpg== + dependencies: + "@babel/core" "7.12.3" + "@babel/plugin-proposal-class-properties" "7.12.1" + "@babel/plugin-proposal-decorators" "7.12.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "7.12.1" + "@babel/plugin-proposal-numeric-separator" "7.12.1" + "@babel/plugin-proposal-optional-chaining" "7.12.1" + "@babel/plugin-transform-flow-strip-types" "7.12.1" + "@babel/plugin-transform-react-display-name" "7.12.1" + "@babel/plugin-transform-runtime" "7.12.1" + "@babel/preset-env" "7.12.1" + "@babel/preset-react" "7.12.1" + "@babel/preset-typescript" "7.12.1" + "@babel/runtime" "7.12.1" + babel-plugin-macros "2.8.0" + babel-plugin-transform-react-remove-prop-types "0.4.24" + +babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.0.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +bfj@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/bfj/-/bfj-7.0.2.tgz#1988ce76f3add9ac2913fd8ba47aad9e651bfbb2" + integrity sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw== + dependencies: + bluebird "^3.5.5" + check-types "^11.1.1" + hoopy "^0.1.4" + tryer "^1.0.1" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.0.0, bn.js@^5.1.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" + integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== + +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +bootstrap@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.6.0.tgz#97b9f29ac98f98dfa43bf7468262d84392552fd7" + integrity sha512-Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.1, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1, brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@4.14.2: + version "4.14.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.2.tgz#1b3cec458a1ba87588cc5e9be62f19b6d48813ce" + integrity sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw== + dependencies: + caniuse-lite "^1.0.30001125" + electron-to-chromium "^1.3.564" + escalade "^3.0.2" + node-releases "^1.1.61" + +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.5, browserslist@^4.6.2, browserslist@^4.6.4: + version "4.16.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.5.tgz#952825440bca8913c62d0021334cbe928ef062ae" + integrity sha512-C2HAjrM1AI/djrpAUU/tr4pml1DqLIzJKSLDBXBrNErl9ZCCTXdhwxdJjYc16953+mBWf7Lw+uUJgpgb8cN71A== + dependencies: + caniuse-lite "^1.0.30001214" + colorette "^1.2.2" + electron-to-chromium "^1.3.719" + escalade "^3.1.1" + node-releases "^1.1.71" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-modules@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" + integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacache@^12.0.2: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cacache@^15.0.5: + version "15.0.6" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.6.tgz#65a8c580fda15b59150fb76bf3f3a8e45d583099" + integrity sha512-g1WYDMct/jzW+JdWEyjaX2zoBkZ6ZT9VpOyp2I/VMtDsNLffNat3kqPFfi1eDRSK9/SuKGyORDHcQMcPF8sQ/w== + dependencies: + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" + unique-filename "^1.1.1" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +camelcase@5.3.1, camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.0.0, camelcase@^6.1.0, camelcase@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001214: + version "1.0.30001219" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001219.tgz#5bfa5d0519f41f993618bd318f606a4c4c16156b" + integrity sha512-c0yixVG4v9KBc/tQ2rlbB3A/bgBFRvl8h8M4IeUbqCca4gsiCfvtaheUssbnux/Mb66Vjz7x8yYjDgYcNQOhyQ== + +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" + +case-sensitive-paths-webpack-plugin@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz#23ac613cc9a856e4f88ff8bb73bbb5e989825cf7" + integrity sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" + integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +check-types@^11.1.1: + version "11.1.2" + resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.1.2.tgz#86a7c12bf5539f6324eb0e70ca8896c0e38f3e2f" + integrity sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ== + +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chokidar@^3.4.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +cjs-module-lexer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" + integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +classnames@*, classnames@^2.2.6: + version "2.3.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" + integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== + +clean-css@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" + integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== + dependencies: + source-map "~0.6.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0, color-convert@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.5.4: + version "1.5.5" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014" + integrity sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.0.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" + integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.4" + +colorette@^1.2.1, colorette@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" + integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" + integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== + +common-tags@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" + integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +compose-function@3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/compose-function/-/compose-function-3.0.3.tgz#9ed675f13cc54501d30950a486ff6a7ba3ab185f" + integrity sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8= + dependencies: + arity-n "^1.0.4" + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +compute-gcd@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/compute-gcd/-/compute-gcd-1.2.1.tgz#34d639f3825625e1357ce81f0e456a6249d8c77f" + integrity sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg== + dependencies: + validate.io-array "^1.0.3" + validate.io-function "^1.0.2" + validate.io-integer-array "^1.0.0" + +compute-lcm@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/compute-lcm/-/compute-lcm-1.1.2.tgz#9107c66b9dca28cefb22b4ab4545caac4034af23" + integrity sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ== + dependencies: + compute-gcd "^1.2.1" + validate.io-array "^1.0.3" + validate.io-function "^1.0.2" + validate.io-integer-array "^1.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +confusing-browser-globals@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz#30d1e7f3d1b882b25ec4933d1d1adac353d20a59" + integrity sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA== + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@1.7.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +convert-source-map@^0.3.3: + version "0.3.5" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190" + integrity sha1-8dgClQr33SYxof6+BZZVDIarMZA= + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-js-compat@^3.6.2, core-js-compat@^3.9.0, core-js-compat@^3.9.1: + version "3.11.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.11.1.tgz#57a91e9b02d3bb8cf37f82eceaf44a3d646fa614" + integrity sha512-aZ0e4tmlG/aOBHj92/TuOuZwp6jFvn1WNabU5VOVixzhu5t5Ao+JZkQOPlgNXu6ynwLrwJxklT4Gw1G1VGEh+g== + dependencies: + browserslist "^4.16.5" + semver "7.0.0" + +core-js-pure@^3.0.0: + version "3.11.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.11.1.tgz#fd52fa8c8b7b797b3606524b3d97278a8d8e7f09" + integrity sha512-2JukQi8HgAOCD5CSimxWWXVrUBoA9Br796uIA5Z06bIjt7PBBI19ircFaAxplgE1mJf3x2BY6MkT/HWA/UryPg== + +core-js@^2.4.0, core-js@^2.5.7, core-js@^2.6.5: + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + +core-js@^3.5.0, core-js@^3.6.5: + version "3.11.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.11.1.tgz#f920392bf8ed63a0ec8e4e729857bfa3d121c525" + integrity sha512-k93Isqg7e4txZWMGNYwevZL9MiogLk8pd1PtwrmFmi8IBq4GXqUaVW/a33Llt6amSI36uSjd0GWwc9pTT9ALlQ== + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + +cosmiconfig@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" + integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= + +css-blank-pseudo@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5" + integrity sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w== + dependencies: + postcss "^7.0.5" + +css-color-names@0.0.4, css-color-names@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-declaration-sorter@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" + integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== + dependencies: + postcss "^7.0.1" + timsort "^0.3.0" + +css-has-pseudo@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz#3c642ab34ca242c59c41a125df9105841f6966ee" + integrity sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^5.0.0-rc.4" + +css-loader@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-4.3.0.tgz#c888af64b2a5b2e85462c72c0f4a85c7e2e0821e" + integrity sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg== + dependencies: + camelcase "^6.0.0" + cssesc "^3.0.0" + icss-utils "^4.1.1" + loader-utils "^2.0.0" + postcss "^7.0.32" + postcss-modules-extract-imports "^2.0.0" + postcss-modules-local-by-default "^3.0.3" + postcss-modules-scope "^2.2.0" + postcss-modules-values "^3.0.0" + postcss-value-parser "^4.1.0" + schema-utils "^2.7.1" + semver "^7.3.2" + +css-prefers-color-scheme@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz#6f830a2714199d4f0d0d0bb8a27916ed65cff1f4" + integrity sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg== + dependencies: + postcss "^7.0.5" + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^2.0.0, css-select@^2.0.2: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-tree@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-what@^3.2.1: + version "3.4.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" + integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== + +css.escape@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" + integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= + +css@^2.0.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" + integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== + dependencies: + inherits "^2.0.3" + source-map "^0.6.1" + source-map-resolve "^0.5.2" + urix "^0.1.0" + +css@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/css/-/css-3.0.0.tgz#4447a4d58fdd03367c516ca9f64ae365cee4aa5d" + integrity sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ== + dependencies: + inherits "^2.0.4" + source-map "^0.6.1" + source-map-resolve "^0.6.0" + +cssdb@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0" + integrity sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ== + +cssesc@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" + integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-default@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz#920622b1fc1e95a34e8838203f1397a504f2d3ff" + integrity sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ== + dependencies: + css-declaration-sorter "^4.0.1" + cssnano-util-raw-cache "^4.0.1" + postcss "^7.0.0" + postcss-calc "^7.0.1" + postcss-colormin "^4.0.3" + postcss-convert-values "^4.0.1" + postcss-discard-comments "^4.0.2" + postcss-discard-duplicates "^4.0.2" + postcss-discard-empty "^4.0.1" + postcss-discard-overridden "^4.0.1" + postcss-merge-longhand "^4.0.11" + postcss-merge-rules "^4.0.3" + postcss-minify-font-values "^4.0.2" + postcss-minify-gradients "^4.0.2" + postcss-minify-params "^4.0.2" + postcss-minify-selectors "^4.0.2" + postcss-normalize-charset "^4.0.1" + postcss-normalize-display-values "^4.0.2" + postcss-normalize-positions "^4.0.2" + postcss-normalize-repeat-style "^4.0.2" + postcss-normalize-string "^4.0.2" + postcss-normalize-timing-functions "^4.0.2" + postcss-normalize-unicode "^4.0.1" + postcss-normalize-url "^4.0.1" + postcss-normalize-whitespace "^4.0.2" + postcss-ordered-values "^4.1.2" + postcss-reduce-initial "^4.0.3" + postcss-reduce-transforms "^4.0.2" + postcss-svgo "^4.0.3" + postcss-unique-selectors "^4.0.1" + +cssnano-util-get-arguments@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + +cssnano-util-raw-cache@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" + integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== + dependencies: + postcss "^7.0.0" + +cssnano-util-same-parent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" + integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== + +cssnano@^4.1.10: + version "4.1.11" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.11.tgz#c7b5f5b81da269cb1fd982cb960c1200910c9a99" + integrity sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.8" + is-resolvable "^1.0.0" + postcss "^7.0.0" + +csso@^4.0.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + +csstype@^3.0.2: + version "3.0.6" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.6.tgz#865d0b5833d7d8d40f4e5b8a6d76aea3de4725ef" + integrity sha512-+ZAmfyWMT7TiIlzdqJgjMb7S4f1beorDbWbsocyK4RaiqA5RTX3K14bnBWmmA9QEM0gRdsjyyrEmcyga8Zsxmw== + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +damerau-levenshtein@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791" + integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug== + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.1, debug@^3.2.5: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decimal.js@^10.2.1: + version "10.2.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" + integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + +deep-equal@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +deep-is@^0.1.3, deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +detect-node@^2.0.4: + version "2.0.5" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.5.tgz#9d270aa7eaa5af0b72c4c9d9b814e7f4ce738b79" + integrity sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw== + +detect-port-alt@1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" + integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== + dependencies: + address "^1.0.1" + debug "^2.6.0" + +diff-sequences@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" + integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-accessibility-api@^0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.4.tgz#b06d059cdd4a4ad9a79275f9d414a5c126241166" + integrity sha512-TvrjBckDy2c6v6RLxPv5QXOnU+SmF9nBII5621Ve5fu6Z/BDrENurBEvlC1f44lKEUVqOpK4w9E5Idc5/EgkLQ== + +dom-converter@^0.2: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-helpers@^5.0.1, dom-helpers@^5.1.2, dom-helpers@^5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" + integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== + dependencies: + "@babel/runtime" "^7.8.7" + csstype "^3.0.2" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +domelementtype@1, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== + +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + +domutils@^1.5.1, domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dotenv-expand@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" + integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== + +dotenv@8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + +duplexer@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ecdsa-sig-formatter@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +ejs@^2.6.1: + version "2.7.4" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" + integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== + +electron-to-chromium@^1.3.564, electron-to-chromium@^1.3.719: + version "1.3.723" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.723.tgz#52769a75635342a4db29af5f1e40bd3dad02c877" + integrity sha512-L+WXyXI7c7+G1V8ANzRsPI5giiimLAUDC6Zs1ojHHPhYXb3k/iTABFmWjivEtsWrRQymjnO66/rO2ZTABGdmWg== + +elliptic@^6.5.3: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emittery@^0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" + integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.0.0: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^4.3.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" + integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +entities@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +errno@^0.1.3, errno@~0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +error-stack-parser@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8" + integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ== + dependencies: + stackframe "^1.1.1" + +es-abstract@^1.17.2, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: + version "1.18.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" + integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.2" + is-callable "^1.2.3" + is-negative-zero "^2.0.1" + is-regex "^1.1.2" + is-string "^1.0.5" + object-inspect "^1.9.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es5-ext@^0.10.35, es5-ext@^0.10.50: + version "0.10.53" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.3" + next-tick "~1.0.0" + +es6-iterator@2.0.3, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-symbol@^3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +escalade@^3.0.2, escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +eslint-config-airbnb-base@^14.2.0, eslint-config-airbnb-base@^14.2.1: + version "14.2.1" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz#8a2eb38455dc5a312550193b319cdaeef042cd1e" + integrity sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA== + dependencies: + confusing-browser-globals "^1.0.10" + object.assign "^4.1.2" + object.entries "^1.1.2" + +eslint-config-airbnb-typescript@^12.3.1: + version "12.3.1" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-12.3.1.tgz#83ab40d76402c208eb08516260d1d6fac8f8acbc" + integrity sha512-ql/Pe6/hppYuRp4m3iPaHJqkBB7dgeEmGPQ6X0UNmrQOfTF+dXw29/ZjU2kQ6RDoLxaxOA+Xqv07Vbef6oVTWw== + dependencies: + "@typescript-eslint/parser" "^4.4.1" + eslint-config-airbnb "^18.2.0" + eslint-config-airbnb-base "^14.2.0" + +eslint-config-airbnb@^18.2.0: + version "18.2.1" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-18.2.1.tgz#b7fe2b42f9f8173e825b73c8014b592e449c98d9" + integrity sha512-glZNDEZ36VdlZWoxn/bUR1r/sdFKPd1mHPbqUtkctgNG4yT2DLLtJ3D+yCV+jzZCc2V1nBVkmdknOJBZ5Hc0fg== + dependencies: + eslint-config-airbnb-base "^14.2.1" + object.assign "^4.1.2" + object.entries "^1.1.2" + +eslint-config-prettier@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.1.0.tgz#4ef1eaf97afe5176e6a75ddfb57c335121abc5a6" + integrity sha512-oKMhGv3ihGbCIimCAjqkdzx2Q+jthoqnXSP+d86M9tptwugycmTFdVR4IpLgq2c4SHifbwO90z2fQ8/Aio73yw== + +eslint-config-react-app@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-6.0.0.tgz#ccff9fc8e36b322902844cbd79197982be355a0e" + integrity sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A== + dependencies: + confusing-browser-globals "^1.0.10" + +eslint-import-resolver-node@^0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" + integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== + dependencies: + debug "^2.6.9" + resolve "^1.13.1" + +eslint-module-utils@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" + integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== + dependencies: + debug "^2.6.9" + pkg-dir "^2.0.0" + +eslint-plugin-flowtype@^5.2.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.7.2.tgz#482a42fe5d15ee614652ed256d37543d584d7bc0" + integrity sha512-7Oq/N0+3nijBnYWQYzz/Mp/7ZCpwxYvClRyW/PLAmimY9uLCBvoXsNsERcJdkKceyOjgRbFhhxs058KTrne9Mg== + dependencies: + lodash "^4.17.15" + string-natural-compare "^3.0.1" + +eslint-plugin-import@^2.22.1: + version "2.22.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702" + integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== + dependencies: + array-includes "^3.1.1" + array.prototype.flat "^1.2.3" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.4" + eslint-module-utils "^2.6.0" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.1" + read-pkg-up "^2.0.0" + resolve "^1.17.0" + tsconfig-paths "^3.9.0" + +eslint-plugin-jest@^24.1.0: + version "24.3.6" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-24.3.6.tgz#5f0ca019183c3188c5ad3af8e80b41de6c8e9173" + integrity sha512-WOVH4TIaBLIeCX576rLcOgjNXqP+jNlCiEmRgFTfQtJ52DpwnIQKAVGlGPAN7CZ33bW6eNfHD6s8ZbEUTQubJg== + dependencies: + "@typescript-eslint/experimental-utils" "^4.0.1" + +eslint-plugin-jsx-a11y@^6.3.1, eslint-plugin-jsx-a11y@^6.4.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz#a2d84caa49756942f42f1ffab9002436391718fd" + integrity sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg== + dependencies: + "@babel/runtime" "^7.11.2" + aria-query "^4.2.2" + array-includes "^3.1.1" + ast-types-flow "^0.0.7" + axe-core "^4.0.2" + axobject-query "^2.2.0" + damerau-levenshtein "^1.0.6" + emoji-regex "^9.0.0" + has "^1.0.3" + jsx-ast-utils "^3.1.0" + language-tags "^1.0.5" + +eslint-plugin-prettier@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz#7079cfa2497078905011e6f82e8dd8453d1371b7" + integrity sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-plugin-react-hooks@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz#8c229c268d468956334c943bb45fc860280f5556" + integrity sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ== + +eslint-plugin-react@^7.21.5: + version "7.23.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz#2d2291b0f95c03728b55869f01102290e792d494" + integrity sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw== + dependencies: + array-includes "^3.1.3" + array.prototype.flatmap "^1.2.4" + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.0.4" + object.entries "^1.1.3" + object.fromentries "^2.0.4" + object.values "^1.1.3" + prop-types "^15.7.2" + resolve "^2.0.0-next.3" + string.prototype.matchall "^4.0.4" + +eslint-plugin-react@^7.22.0: + version "7.22.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.22.0.tgz#3d1c542d1d3169c45421c1215d9470e341707269" + integrity sha512-p30tuX3VS+NWv9nQot9xIGAHBXR0+xJVaZriEsHoJrASGCJZDJ8JLNM0YqKqI0AKm6Uxaa1VUHoNEibxRCMQHA== + dependencies: + array-includes "^3.1.1" + array.prototype.flatmap "^1.2.3" + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.4.1 || ^3.0.0" + object.entries "^1.1.2" + object.fromentries "^2.0.2" + object.values "^1.1.1" + prop-types "^15.7.2" + resolve "^1.18.1" + string.prototype.matchall "^4.0.2" + +eslint-plugin-testing-library@^3.9.2: + version "3.10.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-3.10.2.tgz#609ec2b0369da7cf2e6d9edff5da153cc31d87bd" + integrity sha512-WAmOCt7EbF1XM8XfbCKAEzAPnShkNSwcIsAD2jHdsMUT9mZJPjLCG7pMzbcC8kK366NOuGip8HKLDC+Xk4yIdA== + dependencies: + "@typescript-eslint/experimental-utils" "^3.10.1" + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^5.0.0, eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^2.0.0, eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + +eslint-webpack-plugin@^2.1.0: + version "2.5.4" + resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-2.5.4.tgz#473b84932f1a8e2c2b8e66a402d0497bf440b986" + integrity sha512-7rYh0m76KyKSDE+B+2PUQrlNS4HJ51t3WKpkJg6vo2jFMbEPTG99cBV0Dm7LXSHucN4WGCG65wQcRiTFrj7iWw== + dependencies: + "@types/eslint" "^7.2.6" + arrify "^2.0.1" + jest-worker "^26.6.2" + micromatch "^4.0.2" + normalize-path "^3.0.0" + schema-utils "^3.0.0" + +eslint@^7.11.0: + version "7.25.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.25.0.tgz#1309e4404d94e676e3e831b3a3ad2b050031eb67" + integrity sha512-TVpSovpvCNpLURIScDRB6g5CYu/ZFq9GfX2hLNIV4dSBKxIWojeDODvYl3t0k0VtMxYeR8OXPCFE5+oHMlGfhw== + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" + esutils "^2.0.2" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash "^4.17.21" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.4" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + +esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.1.0, esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +estree-walker@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" + integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== + +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +eventsource@^1.0.7: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf" + integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== + dependencies: + original "^1.0.0" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +exec-sh@^0.3.2: + version "0.3.6" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" + integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expect@^26.6.0, expect@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" + integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== + dependencies: + "@jest/types" "^26.6.2" + ansi-styles "^4.0.0" + jest-get-type "^26.3.0" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" + +express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +ext@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" + integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + dependencies: + type "^2.0.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extract-files@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-11.0.0.tgz#b72d428712f787eef1f5193aff8ab5351ca8469a" + integrity sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ== + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + +fast-glob@^3.1.1: + version "3.2.5" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" + integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fastq@^1.6.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" + integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.1: + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + dependencies: + websocket-driver ">=0.5.1" + +fb-watchman@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + +figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +file-loader@6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.1.1.tgz#a6f29dfb3f5933a1c350b2dbaa20ac5be0539baa" + integrity sha512-Klt8C4BjWSXYQAfhpYYkG4qHNTna4toMHEbWrI5IuVoxbU6uiDKeKAP99R8mmbJi3lvewn/jQBOgU4+NS3tDQw== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +filesize@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.1.0.tgz#e81bdaa780e2451d714d71c0d7a4f3238d37ad00" + integrity sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-cache-dir@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@4.1.0, find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" + integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== + +flatten@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" + integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +follow-redirects@^1.0.0, follow-redirects@^1.10.0: + version "1.14.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.0.tgz#f5d260f95c5f8c105894491feee5dc8993b402fe" + integrity sha512-0vRwd7RKQBTt+mgu87mtYeofLFZpTas2S9zY+jIeuLJMNvudIgF52nr19q40HOwH5RrhWIPuj9puybzSJiRrVg== + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +fork-ts-checker-webpack-plugin@4.1.6: + version "4.1.6" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz#5055c703febcf37fa06405d400c122b905167fc5" + integrity sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw== + dependencies: + "@babel/code-frame" "^7.5.5" + chalk "^2.4.1" + micromatch "^3.1.10" + minimatch "^3.0.4" + semver "^5.6.0" + tapable "^1.0.0" + worker-rpc "^0.1.0" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-extra@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@^2.1.2, fsevents@^2.1.3, fsevents@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-modules@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" + +globals@^13.6.0: + version "13.8.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.8.0.tgz#3e20f504810ce87a8d72e55aecf8435b50f4c1b3" + integrity sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q== + dependencies: + type-fest "^0.20.2" + +globby@11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" + integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + +globby@^11.0.1: + version "11.0.3" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb" + integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + +graphql-tag@^2.12.0: + version "2.12.4" + resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.4.tgz#d34066688a4f09e72d6f4663c74211e9b4b7c4bf" + integrity sha512-VV1U4O+9x99EkNpNmCUV5RZwq6MnK4+pGbRYWG+lA/m3uo7TSqJF81OkcOP148gFP6fzdl7JWYBrwWVTS9jXww== + dependencies: + tslib "^2.1.0" + +graphql-tag@^2.12.3: + version "2.12.5" + resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.5.tgz#5cff974a67b417747d05c8d9f5f3cb4495d0db8f" + integrity sha512-5xNhP4063d16Pz3HBtKprutsPrmHZi5IdUGOWRxA2B6VF7BIRGOHZ5WQvDmJXZuPcBg7rYwaFxvQYjqkSdR3TQ== + dependencies: + tslib "^2.1.0" + +graphql@^15.3.0: + version "15.5.1" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.5.1.tgz#f2f84415d8985e7b84731e7f3536f8bb9d383aad" + integrity sha512-FeTRX67T3LoE3LWAxxOlW2K3Bz+rMYAC18rRguK4wgXaTZMiJwSUwDmPFo3UadAKbzirKIg5Qy+sNJXbpPRnQw== + +graphql@^15.5.0: + version "15.5.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.5.0.tgz#39d19494dbe69d1ea719915b578bf920344a69d5" + integrity sha512-OmaM7y0kaK31NKG31q4YbD2beNYa6jBBKtMFT6gLYJljHLJr42IqJ8KX08u3Li/0ifzTU5HjmoOOrwa5BRLeDA== + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= + +gzip-size@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" + integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== + dependencies: + duplexer "^0.1.1" + pify "^4.0.1" + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +harmony-reflect@^1.4.6: + version "1.6.2" + resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710" + integrity sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g== + +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.0, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== + +history@^4.9.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== + dependencies: + "@babel/runtime" "^7.1.2" + loose-envify "^1.2.0" + resolve-pathname "^3.0.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + value-equal "^1.0.1" + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +hoopy@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" + integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + +html-entities@^1.2.1, html-entities@^1.3.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" + integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +html-minifier-terser@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" + integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== + dependencies: + camel-case "^4.1.1" + clean-css "^4.2.3" + commander "^4.1.1" + he "^1.2.0" + param-case "^3.0.3" + relateurl "^0.2.7" + terser "^4.6.3" + +html-webpack-plugin@4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz#625097650886b97ea5dae331c320e3238f6c121c" + integrity sha512-MouoXEYSjTzCrjIxWwg8gxL5fE2X2WZJLmBYXlaJhQUH5K/b5OrqmV7T4dB7iu0xkmJ6JlUuV6fFVtnqbPopZw== + dependencies: + "@types/html-minifier-terser" "^5.0.0" + "@types/tapable" "^1.0.5" + "@types/webpack" "^4.41.8" + html-minifier-terser "^5.0.1" + loader-utils "^1.2.3" + lodash "^4.17.15" + pretty-error "^2.1.1" + tapable "^1.1.3" + util.promisify "1.0.0" + +htmlparser2@^3.10.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-parser-js@>=0.5.1: + version "0.5.3" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" + integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== + +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +humps@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/humps/-/humps-2.0.1.tgz#dd02ea6081bd0568dc5d073184463957ba9ef9aa" + integrity sha1-3QLqYIG9BWjcXQcxhEY5V7qe+ao= + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-utils@^4.0.0, icss-utils@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" + integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== + dependencies: + postcss "^7.0.14" + +identity-obj-proxy@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" + integrity sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ= + dependencies: + harmony-reflect "^1.4.6" + +ieee754@^1.1.4: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +immer@8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/immer/-/immer-8.0.1.tgz#9c73db683e2b3975c424fb0572af5889877ae656" + integrity sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA== + +import-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" + integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + dependencies: + import-from "^2.1.0" + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-from@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" + integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + dependencies: + resolve-from "^3.0.0" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +import-local@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" + integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@^1.3.5: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arguments@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" + integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + dependencies: + call-bind "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-bigint@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2" + integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0" + integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== + dependencies: + call-bind "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-callable@^1.1.4, is-callable@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" + integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-color-stop@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + dependencies: + css-color-names "^0.0.4" + hex-color-regex "^1.1.0" + hsl-regex "^1.0.0" + hsla-regex "^1.0.0" + rgb-regex "^1.0.1" + rgba-regex "^1.0.0" + +is-core-module@^2.0.0, is-core-module@^2.1.0, is-core-module@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.3.0.tgz#d341652e3408bca69c4671b79a0954a3d349f887" + integrity sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw== + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-number-object@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" + integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-cwd@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-potential-custom-element-name@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + +is-regex@^1.0.4, is-regex@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" + integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== + dependencies: + call-bind "^1.0.2" + has-symbols "^1.0.1" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= + +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-root@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" + integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +is-wsl@^2.1.1, is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul-lib-coverage@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" + integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== + +istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" + integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" + integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jest-changed-files@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" + integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== + dependencies: + "@jest/types" "^26.6.2" + execa "^4.0.0" + throat "^5.0.0" + +jest-circus@26.6.0: + version "26.6.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-26.6.0.tgz#7d9647b2e7f921181869faae1f90a2629fd70705" + integrity sha512-L2/Y9szN6FJPWFK8kzWXwfp+FOR7xq0cUL4lIsdbIdwz3Vh6P1nrpcqOleSzr28zOtSHQNV9Z7Tl+KkuK7t5Ng== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^26.6.0" + "@jest/test-result" "^26.6.0" + "@jest/types" "^26.6.0" + "@types/babel__traverse" "^7.0.4" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + expect "^26.6.0" + is-generator-fn "^2.0.0" + jest-each "^26.6.0" + jest-matcher-utils "^26.6.0" + jest-message-util "^26.6.0" + jest-runner "^26.6.0" + jest-runtime "^26.6.0" + jest-snapshot "^26.6.0" + jest-util "^26.6.0" + pretty-format "^26.6.0" + stack-utils "^2.0.2" + throat "^5.0.0" + +jest-cli@^26.6.0: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" + integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== + dependencies: + "@jest/core" "^26.6.3" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + import-local "^3.0.2" + is-ci "^2.0.0" + jest-config "^26.6.3" + jest-util "^26.6.2" + jest-validate "^26.6.2" + prompts "^2.0.1" + yargs "^15.4.1" + +jest-config@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" + integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^26.6.3" + "@jest/types" "^26.6.2" + babel-jest "^26.6.3" + chalk "^4.0.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.4" + jest-environment-jsdom "^26.6.2" + jest-environment-node "^26.6.2" + jest-get-type "^26.3.0" + jest-jasmine2 "^26.6.3" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + micromatch "^4.0.2" + pretty-format "^26.6.2" + +jest-diff@^26.0.0, jest-diff@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" + integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== + dependencies: + chalk "^4.0.0" + diff-sequences "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-docblock@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" + integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== + dependencies: + detect-newline "^3.0.0" + +jest-each@^26.6.0, jest-each@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" + integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== + dependencies: + "@jest/types" "^26.6.2" + chalk "^4.0.0" + jest-get-type "^26.3.0" + jest-util "^26.6.2" + pretty-format "^26.6.2" + +jest-environment-jsdom@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" + integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + jsdom "^16.4.0" + +jest-environment-node@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" + integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + +jest-get-type@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" + integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== + +jest-haste-map@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" + integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== + dependencies: + "@jest/types" "^26.6.2" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + jest-regex-util "^26.0.0" + jest-serializer "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + micromatch "^4.0.2" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.1.2" + +jest-jasmine2@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" + integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + expect "^26.6.2" + is-generator-fn "^2.0.0" + jest-each "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + pretty-format "^26.6.2" + throat "^5.0.0" + +jest-leak-detector@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" + integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== + dependencies: + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-matcher-utils@^26.6.0, jest-matcher-utils@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" + integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== + dependencies: + chalk "^4.0.0" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-message-util@^26.6.0, jest-message-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" + integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/types" "^26.6.2" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.2" + pretty-format "^26.6.2" + slash "^3.0.0" + stack-utils "^2.0.2" + +jest-mock@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" + integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + +jest-regex-util@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" + integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== + +jest-resolve-dependencies@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" + integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== + dependencies: + "@jest/types" "^26.6.2" + jest-regex-util "^26.0.0" + jest-snapshot "^26.6.2" + +jest-resolve@26.6.0: + version "26.6.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.0.tgz#070fe7159af87b03e50f52ea5e17ee95bbee40e1" + integrity sha512-tRAz2bwraHufNp+CCmAD8ciyCpXCs1NQxB5EJAmtCFy6BN81loFEGWKzYu26Y62lAJJe4X4jg36Kf+NsQyiStQ== + dependencies: + "@jest/types" "^26.6.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + jest-pnp-resolver "^1.2.2" + jest-util "^26.6.0" + read-pkg-up "^7.0.1" + resolve "^1.17.0" + slash "^3.0.0" + +jest-resolve@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" + integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== + dependencies: + "@jest/types" "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + jest-pnp-resolver "^1.2.2" + jest-util "^26.6.2" + read-pkg-up "^7.0.1" + resolve "^1.18.1" + slash "^3.0.0" + +jest-runner@^26.6.0, jest-runner@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" + integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.7.1" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-docblock "^26.0.0" + jest-haste-map "^26.6.2" + jest-leak-detector "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + jest-runtime "^26.6.3" + jest-util "^26.6.2" + jest-worker "^26.6.2" + source-map-support "^0.5.6" + throat "^5.0.0" + +jest-runtime@^26.6.0, jest-runtime@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" + integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/globals" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + cjs-module-lexer "^0.6.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + slash "^3.0.0" + strip-bom "^4.0.0" + yargs "^15.4.1" + +jest-serializer@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" + integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.4" + +jest-snapshot@^26.6.0, jest-snapshot@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" + integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^26.6.2" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.0.0" + chalk "^4.0.0" + expect "^26.6.2" + graceful-fs "^4.2.4" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + jest-haste-map "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + natural-compare "^1.4.0" + pretty-format "^26.6.2" + semver "^7.3.2" + +jest-util@^26.6.0, jest-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" + integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^2.0.0" + micromatch "^4.0.2" + +jest-validate@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" + integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== + dependencies: + "@jest/types" "^26.6.2" + camelcase "^6.0.0" + chalk "^4.0.0" + jest-get-type "^26.3.0" + leven "^3.1.0" + pretty-format "^26.6.2" + +jest-watch-typeahead@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-0.6.1.tgz#45221b86bb6710b7e97baaa1640ae24a07785e63" + integrity sha512-ITVnHhj3Jd/QkqQcTqZfRgjfyRhDFM/auzgVo2RKvSwi18YMvh0WvXDJFoFED6c7jd/5jxtu4kSOb9PTu2cPVg== + dependencies: + ansi-escapes "^4.3.1" + chalk "^4.0.0" + jest-regex-util "^26.0.0" + jest-watcher "^26.3.0" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + +jest-watcher@^26.3.0, jest-watcher@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" + integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== + dependencies: + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^26.6.2" + string-length "^4.0.1" + +jest-worker@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" + integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== + dependencies: + merge-stream "^2.0.0" + supports-color "^6.1.0" + +jest-worker@^26.5.0, jest-worker@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest@26.6.0: + version "26.6.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.0.tgz#546b25a1d8c888569dbbe93cae131748086a4a25" + integrity sha512-jxTmrvuecVISvKFFhOkjsWRZV7sFqdSUAd1ajOKY+/QE/aLBVstsJ/dX8GczLzwiT6ZEwwmZqtCUHLHHQVzcfA== + dependencies: + "@jest/core" "^26.6.0" + import-local "^3.0.2" + jest-cli "^26.6.0" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsdom@^16.4.0: + version "16.5.3" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.5.3.tgz#13a755b3950eb938b4482c407238ddf16f0d2136" + integrity sha512-Qj1H+PEvUsOtdPJ056ewXM4UJPCi4hhLA8wpiz9F2YvsRBhuFsXxtrIFAgGBDynQA9isAMGE91PfUYbdMPXuTA== + dependencies: + abab "^2.0.5" + acorn "^8.1.0" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.3.0" + data-urls "^2.0.0" + decimal.js "^10.2.1" + domexception "^2.0.1" + escodegen "^2.0.0" + html-encoding-sniffer "^2.0.1" + is-potential-custom-element-name "^1.0.0" + nwsapi "^2.2.0" + parse5 "6.0.1" + request "^2.88.2" + request-promise-native "^1.0.9" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.5.0" + ws "^7.4.4" + xml-name-validator "^3.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-compare@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/json-schema-compare/-/json-schema-compare-0.2.2.tgz#dd601508335a90c7f4cfadb6b2e397225c908e56" + integrity sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ== + dependencies: + lodash "^4.17.4" + +json-schema-merge-allof@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/json-schema-merge-allof/-/json-schema-merge-allof-0.6.0.tgz#64d48820fec26b228db837475ce3338936bf59a5" + integrity sha512-LEw4VMQVRceOPLuGRWcxW5orTTiR9ZAtqTAe4rQUjNADTeR81bezBVFa0MqIwp0YmHIM1KkhSjZM7o+IQhaPbQ== + dependencies: + compute-lcm "^1.1.0" + json-schema-compare "^0.2.2" + lodash "^4.17.4" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-schema@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.3.0.tgz#90a9c5054bd065422c00241851ce8d59475b701b" + integrity sha512-TYfxx36xfl52Rf1LU9HyWSLGPdYLL+SQ8/E/0yVyKG8wCCDaSrhPap0vEdlsZWRaS6tnKKLPGiEJGiREVC8kxQ== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json2csv@^5.0.6: + version "5.0.6" + resolved "https://registry.yarnpkg.com/json2csv/-/json2csv-5.0.6.tgz#590e0e1b9579e59baa53bda0c0d840f4d8009687" + integrity sha512-0/4Lv6IenJV0qj2oBdgPIAmFiKKnh8qh7bmLFJ+/ZZHLjSeiL3fKKGX3UryvKPbxFbhV+JcYo9KUC19GJ/Z/4A== + dependencies: + commander "^6.1.0" + jsonparse "^1.3.1" + lodash.get "^4.4.2" + +json3@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + +jsonpointer@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.1.0.tgz#501fb89986a2389765ba09e6053299ceb4f2c2cc" + integrity sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg== + +jsonwebtoken@^8.5.1: + version "8.5.1" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" + integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== + dependencies: + jws "^3.2.2" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^5.6.0" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82" + integrity sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q== + dependencies: + array-includes "^3.1.2" + object.assign "^4.1.2" + +jwa@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" + integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + dependencies: + jwa "^1.4.1" + safe-buffer "^5.0.1" + +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +klona@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" + integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== + +language-subtag-registry@~0.3.2: + version "0.3.21" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a" + integrity sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg== + +language-tags@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + integrity sha1-0yHbxNowuovzAk4ED6XBRmH5GTo= + dependencies: + language-subtag-registry "~0.3.2" + +last-call-webpack-plugin@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" + integrity sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w== + dependencies: + lodash "^4.17.5" + webpack-sources "^1.1.0" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + +loader-utils@2.0.0, loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash-es@^4.17.20: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= + +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= + +lodash.template@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" + integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" + integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== + dependencies: + lodash._reinterpolate "^3.0.0" + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +"lodash@>=3.5 <5", lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.7.0: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +loglevel@^1.6.8: + version "1.7.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" + integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lz-string@^1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" + integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= + +magic-string@^0.25.0, magic-string@^0.25.7: + version "0.25.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + dependencies: + sourcemap-codec "^1.4.4" + +make-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.0, make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= + dependencies: + tmpl "1.0.x" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +microevent.ts@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" + integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.2: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.47.0, "mime-db@>= 1.43.0 < 2": + version "1.47.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" + integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== + +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.30" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" + integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== + dependencies: + mime-db "1.47.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.4: + version "2.5.2" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" + integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +mini-create-react-context@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz#072171561bfdc922da08a60c2197a497cc2d1d5e" + integrity sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ== + dependencies: + "@babel/runtime" "^7.12.1" + tiny-warning "^1.0.3" + +mini-css-extract-plugin@0.11.3: + version "0.11.3" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.11.3.tgz#15b0910a7f32e62ffde4a7430cfefbd700724ea6" + integrity sha512-n9BA8LonkOkW1/zn+IbLPQmovsL0wMb9yx75fMJQZf2X1Zoec9yTZtyMePcyu19wPkmFbzZZA6fLTotpFhQsOA== + dependencies: + loader-utils "^1.1.0" + normalize-url "1.9.1" + schema-utils "^1.0.0" + webpack-sources "^1.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@3.0.4, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" + integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== + dependencies: + yallist "^4.0.0" + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +nan@^2.12.1: + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + +nanoid@^2.1.0: + version "2.1.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280" + integrity sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA== + +nanoid@^3.1.22: + version "3.1.22" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844" + integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +native-url@^0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/native-url/-/native-url-0.2.6.tgz#ca1258f5ace169c716ff44eccbddb674e10399ae" + integrity sha512-k4bDC87WtgrdD362gZz6zoiXQrl40kYlBmpfmSjwRO1VU0V5ccwJTlxuE72F6m3V0vc1xOf6n3UCP9QyerRqmA== + dependencies: + querystring "^0.2.0" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.5.0, neo-async@^2.6.1, neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + +node-notifier@^8.0.0: + version "8.0.2" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" + integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== + dependencies: + growly "^1.3.0" + is-wsl "^2.2.0" + semver "^7.3.2" + shellwords "^0.1.1" + uuid "^8.3.0" + which "^2.0.2" + +node-releases@^1.1.61, node-releases@^1.1.71: + version "1.1.71" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" + integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== + +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +normalize-url@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nth-check@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + +nwsapi@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.9.0: + version "1.10.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.2.tgz#b6385a3e2b7cae0b5eafcf90cddf85d128767f30" + integrity sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA== + +object-is@^1.0.1: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0, object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.entries@^1.1.0, object.entries@^1.1.2, object.entries@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.3.tgz#c601c7f168b62374541a07ddbd3e2d5e4f7711a6" + integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + has "^1.0.3" + +object.fromentries@^2.0.2, object.fromentries@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8" + integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + has "^1.0.3" + +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" + integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.values@^1.1.0, object.values@^1.1.1, object.values@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.3.tgz#eaa8b1e17589f02f698db093f7c62ee1699742ee" + integrity sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + has "^1.0.3" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^7.0.2: + version "7.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +optimism@^0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.15.0.tgz#c65e694bec7ce439f41e9cb8fc261a72d798125b" + integrity sha512-KLKl3Kb7hH++s9ewRcBhmfpXgXF0xQ+JZ3xQFuPjnoT6ib2TDmYyVkKENmGxivsN2G3VRxpXuauCkB4GYOhtPw== + dependencies: + "@wry/context" "^0.6.0" + "@wry/trie" "^0.3.0" + +optimism@^0.16.1: + version "0.16.1" + resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.16.1.tgz#7c8efc1f3179f18307b887e18c15c5b7133f6e7d" + integrity sha512-64i+Uw3otrndfq5kaoGNoY7pvOhSsjFEN4bdEFh80MWVk/dbgJfMv7VFDeCT8LxNAlEVhQmdVEbfE7X2nWNIIg== + dependencies: + "@wry/context" "^0.6.0" + "@wry/trie" "^0.3.0" + +optimize-css-assets-webpack-plugin@5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.4.tgz#85883c6528aaa02e30bbad9908c92926bb52dc90" + integrity sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A== + dependencies: + cssnano "^4.1.10" + last-call-webpack-plugin "^3.0.0" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +p-each-series@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" + integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +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== + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +param-case@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse5@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pbkdf2@^3.0.3: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d" + integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pirates@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + dependencies: + node-modules-regexp "^1.0.0" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.0, pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkg-up@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + +pnp-webpack-plugin@1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149" + integrity sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg== + dependencies: + ts-pnp "^1.1.6" + +portfinder@^1.0.26: + version "1.0.28" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.5" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-attribute-case-insensitive@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz#d93e46b504589e94ac7277b0463226c68041a880" + integrity sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^6.0.2" + +postcss-browser-comments@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-browser-comments/-/postcss-browser-comments-3.0.0.tgz#1248d2d935fb72053c8e1f61a84a57292d9f65e9" + integrity sha512-qfVjLfq7HFd2e0HW4s1dvU8X080OZdG46fFbIBFjW7US7YPDcWfRvdElvwMJr2LI6hMmD+7LnH2HcmXTs+uOig== + dependencies: + postcss "^7" + +postcss-calc@^7.0.1: + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" + integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== + dependencies: + postcss "^7.0.27" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" + +postcss-color-functional-notation@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz#5efd37a88fbabeb00a2966d1e53d98ced93f74e0" + integrity sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-color-gray@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz#532a31eb909f8da898ceffe296fdc1f864be8547" + integrity sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.5" + postcss-values-parser "^2.0.0" + +postcss-color-hex-alpha@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz#a8d9ca4c39d497c9661e374b9c51899ef0f87388" + integrity sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw== + dependencies: + postcss "^7.0.14" + postcss-values-parser "^2.0.1" + +postcss-color-mod-function@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz#816ba145ac11cc3cb6baa905a75a49f903e4d31d" + integrity sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-color-rebeccapurple@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz#c7a89be872bb74e45b1e3022bfe5748823e6de77" + integrity sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" + integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== + dependencies: + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-convert-values@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" + integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-custom-media@^7.0.8: + version "7.0.8" + resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz#fffd13ffeffad73621be5f387076a28b00294e0c" + integrity sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg== + dependencies: + postcss "^7.0.14" + +postcss-custom-properties@^8.0.11: + version "8.0.11" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz#2d61772d6e92f22f5e0d52602df8fae46fa30d97" + integrity sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA== + dependencies: + postcss "^7.0.17" + postcss-values-parser "^2.0.1" + +postcss-custom-selectors@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz#64858c6eb2ecff2fb41d0b28c9dd7b3db4de7fba" + integrity sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-dir-pseudo-class@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz#6e3a4177d0edb3abcc85fdb6fbb1c26dabaeaba2" + integrity sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-discard-comments@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" + integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== + dependencies: + postcss "^7.0.0" + +postcss-discard-duplicates@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" + integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== + dependencies: + postcss "^7.0.0" + +postcss-discard-empty@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" + integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== + dependencies: + postcss "^7.0.0" + +postcss-discard-overridden@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" + integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== + dependencies: + postcss "^7.0.0" + +postcss-double-position-gradients@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz#fc927d52fddc896cb3a2812ebc5df147e110522e" + integrity sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA== + dependencies: + postcss "^7.0.5" + postcss-values-parser "^2.0.0" + +postcss-env-function@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-2.0.2.tgz#0f3e3d3c57f094a92c2baf4b6241f0b0da5365d7" + integrity sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-flexbugs-fixes@4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz#9218a65249f30897deab1033aced8578562a6690" + integrity sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ== + dependencies: + postcss "^7.0.26" + +postcss-focus-visible@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz#477d107113ade6024b14128317ade2bd1e17046e" + integrity sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g== + dependencies: + postcss "^7.0.2" + +postcss-focus-within@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz#763b8788596cee9b874c999201cdde80659ef680" + integrity sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w== + dependencies: + postcss "^7.0.2" + +postcss-font-variant@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz#42d4c0ab30894f60f98b17561eb5c0321f502641" + integrity sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA== + dependencies: + postcss "^7.0.2" + +postcss-gap-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz#431c192ab3ed96a3c3d09f2ff615960f902c1715" + integrity sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg== + dependencies: + postcss "^7.0.2" + +postcss-image-set-function@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz#28920a2f29945bed4c3198d7df6496d410d3f288" + integrity sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-initial@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-3.0.4.tgz#9d32069a10531fe2ecafa0b6ac750ee0bc7efc53" + integrity sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg== + dependencies: + postcss "^7.0.2" + +postcss-lab-function@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz#bb51a6856cd12289ab4ae20db1e3821ef13d7d2e" + integrity sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-load-config@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" + integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== + dependencies: + cosmiconfig "^5.0.0" + import-cwd "^2.0.0" + +postcss-loader@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" + integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== + dependencies: + loader-utils "^1.1.0" + postcss "^7.0.0" + postcss-load-config "^2.0.0" + schema-utils "^1.0.0" + +postcss-logical@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-3.0.0.tgz#2495d0f8b82e9f262725f75f9401b34e7b45d5b5" + integrity sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA== + dependencies: + postcss "^7.0.2" + +postcss-media-minmax@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz#b75bb6cbc217c8ac49433e12f22048814a4f5ed5" + integrity sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw== + dependencies: + postcss "^7.0.2" + +postcss-merge-longhand@^4.0.11: + version "4.0.11" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" + integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" + integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + cssnano-util-same-parent "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + vendors "^1.0.0" + +postcss-minify-font-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" + integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" + integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-params@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" + integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== + dependencies: + alphanum-sort "^1.0.0" + browserslist "^4.0.0" + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + uniqs "^2.0.0" + +postcss-minify-selectors@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" + integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +postcss-modules-extract-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" + integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== + dependencies: + postcss "^7.0.5" + +postcss-modules-local-by-default@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" + integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== + dependencies: + icss-utils "^4.1.1" + postcss "^7.0.32" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" + integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" + +postcss-modules-values@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" + integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== + dependencies: + icss-utils "^4.0.0" + postcss "^7.0.6" + +postcss-nesting@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052" + integrity sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg== + dependencies: + postcss "^7.0.2" + +postcss-normalize-charset@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" + integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== + dependencies: + postcss "^7.0.0" + +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" + integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" + integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-repeat-style@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" + integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-string@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" + integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" + integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-unicode@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" + integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-url@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" + integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" + integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize@8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize/-/postcss-normalize-8.0.1.tgz#90e80a7763d7fdf2da6f2f0f82be832ce4f66776" + integrity sha512-rt9JMS/m9FHIRroDDBGSMsyW1c0fkvOJPy62ggxSHUldJO7B195TqFMqIf+lY5ezpDcYOV4j86aUp3/XbxzCCQ== + dependencies: + "@csstools/normalize.css" "^10.1.0" + browserslist "^4.6.2" + postcss "^7.0.17" + postcss-browser-comments "^3.0.0" + sanitize.css "^10.0.0" + +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" + integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== + dependencies: + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-overflow-shorthand@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz#31ecf350e9c6f6ddc250a78f0c3e111f32dd4c30" + integrity sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g== + dependencies: + postcss "^7.0.2" + +postcss-page-break@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-2.0.0.tgz#add52d0e0a528cabe6afee8b46e2abb277df46bf" + integrity sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ== + dependencies: + postcss "^7.0.2" + +postcss-place@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-4.0.1.tgz#e9f39d33d2dc584e46ee1db45adb77ca9d1dcc62" + integrity sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-preset-env@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz#c34ddacf8f902383b35ad1e030f178f4cdf118a5" + integrity sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg== + dependencies: + autoprefixer "^9.6.1" + browserslist "^4.6.4" + caniuse-lite "^1.0.30000981" + css-blank-pseudo "^0.1.4" + css-has-pseudo "^0.10.0" + css-prefers-color-scheme "^3.1.1" + cssdb "^4.4.0" + postcss "^7.0.17" + postcss-attribute-case-insensitive "^4.0.1" + postcss-color-functional-notation "^2.0.1" + postcss-color-gray "^5.0.0" + postcss-color-hex-alpha "^5.0.3" + postcss-color-mod-function "^3.0.3" + postcss-color-rebeccapurple "^4.0.1" + postcss-custom-media "^7.0.8" + postcss-custom-properties "^8.0.11" + postcss-custom-selectors "^5.1.2" + postcss-dir-pseudo-class "^5.0.0" + postcss-double-position-gradients "^1.0.0" + postcss-env-function "^2.0.2" + postcss-focus-visible "^4.0.0" + postcss-focus-within "^3.0.0" + postcss-font-variant "^4.0.0" + postcss-gap-properties "^2.0.0" + postcss-image-set-function "^3.0.1" + postcss-initial "^3.0.0" + postcss-lab-function "^2.0.1" + postcss-logical "^3.0.0" + postcss-media-minmax "^4.0.0" + postcss-nesting "^7.0.0" + postcss-overflow-shorthand "^2.0.0" + postcss-page-break "^2.0.0" + postcss-place "^4.0.1" + postcss-pseudo-class-any-link "^6.0.0" + postcss-replace-overflow-wrap "^3.0.0" + postcss-selector-matches "^4.0.0" + postcss-selector-not "^4.0.0" + +postcss-pseudo-class-any-link@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz#2ed3eed393b3702879dec4a87032b210daeb04d1" + integrity sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-reduce-initial@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" + integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" + integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== + dependencies: + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-replace-overflow-wrap@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz#61b360ffdaedca84c7c918d2b0f0d0ea559ab01c" + integrity sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw== + dependencies: + postcss "^7.0.2" + +postcss-safe-parser@5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-5.0.2.tgz#459dd27df6bc2ba64608824ba39e45dacf5e852d" + integrity sha512-jDUfCPJbKOABhwpUKcqCVbbXiloe/QXMcbJ6Iipf3sDIihEzTqRCeMBfRaOHxhBuTYqtASrI1KJWxzztZU4qUQ== + dependencies: + postcss "^8.1.0" + +postcss-selector-matches@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz#71c8248f917ba2cc93037c9637ee09c64436fcff" + integrity sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww== + dependencies: + balanced-match "^1.0.0" + postcss "^7.0.2" + +postcss-selector-not@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz#263016eef1cf219e0ade9a913780fc1f48204cbf" + integrity sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ== + dependencies: + balanced-match "^1.0.0" + postcss "^7.0.2" + +postcss-selector-parser@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" + integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== + dependencies: + dot-prop "^5.2.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" + integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== + dependencies: + cssesc "^2.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: + version "6.0.5" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.5.tgz#042d74e137db83e6f294712096cb413f5aa612c4" + integrity sha512-aFYPoYmXbZ1V6HZaSvat08M97A8HqO6Pjz+PiNpw/DhuRrC72XWAdp3hL6wusDCN31sSmcZyMGa2hZEuX+Xfhg== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-svgo@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e" + integrity sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" + +postcss-unique-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" + integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== + dependencies: + alphanum-sort "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== + +postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f" + integrity sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg== + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss@7.0.21: + version "7.0.21" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.21.tgz#06bb07824c19c2021c5d056d5b10c35b989f7e17" + integrity sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +postcss@^7, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.35" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" + integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +postcss@^8.1.0: + version "8.2.13" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.13.tgz#dbe043e26e3c068e45113b1ed6375d2d37e2129f" + integrity sha512-FCE5xLH+hjbzRdpbRb1IMCvPv9yZx2QnDarBEYSN0N0HYk+TcXsEhwdFcFb+SRWOKzKGErhIEbBK2ogyLdTtfQ== + dependencies: + colorette "^1.2.2" + nanoid "^3.1.22" + source-map "^0.6.1" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" + integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== + +pretty-bytes@^5.3.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + +pretty-error@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" + integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== + dependencies: + lodash "^4.17.20" + renderkid "^2.0.4" + +pretty-format@^26.0.0, pretty-format@^26.6.0, pretty-format@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" + integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== + dependencies: + "@jest/types" "^26.6.2" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^17.0.1" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +promise@^8.0.3, promise@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" + integrity sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q== + dependencies: + asap "~2.0.6" + +prompts@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" + integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +prompts@^2.0.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.1.tgz#befd3b1195ba052f9fd2fde8a486c4e82ee77f61" + integrity sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +prop-types-extra@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/prop-types-extra/-/prop-types-extra-1.1.1.tgz#58c3b74cbfbb95d304625975aa2f0848329a010b" + integrity sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew== + dependencies: + react-is "^16.3.2" + warning "^4.0.0" + +prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2: + version "15.7.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +psl@^1.1.28, psl@^1.1.33: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystring@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd" + integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg== + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +raf@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== + dependencies: + performance-now "^2.1.0" + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +react-app-polyfill@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-1.0.6.tgz#890f8d7f2842ce6073f030b117de9130a5f385f0" + integrity sha512-OfBnObtnGgLGfweORmdZbyEz+3dgVePQBb3zipiaDsMHV1NpWm0rDFYIVXFV/AK+x4VIIfWHhrdMIeoTLyRr2g== + dependencies: + core-js "^3.5.0" + object-assign "^4.1.1" + promise "^8.0.3" + raf "^3.4.1" + regenerator-runtime "^0.13.3" + whatwg-fetch "^3.0.0" + +react-app-polyfill@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-2.0.0.tgz#a0bea50f078b8a082970a9d853dc34b6dcc6a3cf" + integrity sha512-0sF4ny9v/B7s6aoehwze9vJNWcmCemAUYBVasscVr92+UYiEqDXOxfKjXN685mDaMRNF3WdhHQs76oTODMocFA== + dependencies: + core-js "^3.6.5" + object-assign "^4.1.1" + promise "^8.1.0" + raf "^3.4.1" + regenerator-runtime "^0.13.7" + whatwg-fetch "^3.4.1" + +react-bootstrap@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-1.5.2.tgz#07dabec53d10491a520c49f102170b440fa89008" + integrity sha512-mGKPY5+lLd7Vtkx2VFivoRkPT4xAHazuFfIhJLTEgHlDfIUSePn7qrmpZe5gXH9zvHV0RsBaQ9cLfXjxnZrOpA== + dependencies: + "@babel/runtime" "^7.13.8" + "@restart/context" "^2.1.4" + "@restart/hooks" "^0.3.26" + "@types/classnames" "^2.2.10" + "@types/invariant" "^2.2.33" + "@types/prop-types" "^15.7.3" + "@types/react" ">=16.9.35" + "@types/react-transition-group" "^4.4.1" + "@types/warning" "^3.0.0" + classnames "^2.2.6" + dom-helpers "^5.1.2" + invariant "^2.2.4" + prop-types "^15.7.2" + prop-types-extra "^1.1.0" + react-overlays "^5.0.0" + react-transition-group "^4.4.1" + uncontrollable "^7.2.1" + warning "^4.0.3" + +react-dev-utils@^11.0.2: + version "11.0.4" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-11.0.4.tgz#a7ccb60257a1ca2e0efe7a83e38e6700d17aa37a" + integrity sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A== + dependencies: + "@babel/code-frame" "7.10.4" + address "1.1.2" + browserslist "4.14.2" + chalk "2.4.2" + cross-spawn "7.0.3" + detect-port-alt "1.1.6" + escape-string-regexp "2.0.0" + filesize "6.1.0" + find-up "4.1.0" + fork-ts-checker-webpack-plugin "4.1.6" + global-modules "2.0.0" + globby "11.0.1" + gzip-size "5.1.1" + immer "8.0.1" + is-root "2.1.0" + loader-utils "2.0.0" + open "^7.0.2" + pkg-up "3.1.0" + prompts "2.4.0" + react-error-overlay "^6.0.9" + recursive-readdir "2.2.2" + shell-quote "1.7.2" + strip-ansi "6.0.0" + text-table "0.2.0" + +react-dom-factories@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/react-dom-factories/-/react-dom-factories-1.0.2.tgz#eb7705c4db36fb501b3aa38ff759616aa0ff96e0" + integrity sha1-63cFxNs2+1AbOqOP91lhaqD/luA= + +react-dom@^17.0.1: + version "17.0.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.1.tgz#1de2560474ec9f0e334285662ede52dbc5426fc6" + integrity sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + scheduler "^0.20.1" + +react-error-overlay@^6.0.9: + version "6.0.9" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" + integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== + +react-google-login@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/react-google-login/-/react-google-login-5.2.2.tgz#a20b46440c6c1610175ef75baf427118ff0e9859" + integrity sha512-JUngfvaSMcOuV0lFff7+SzJ2qviuNMQdqlsDJkUM145xkGPVIfqWXq9Ui+2Dr6jdJWH5KYdynz9+4CzKjI5u6g== + dependencies: + "@types/react" "*" + prop-types "^15.6.0" + +react-icons@^3.10.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-3.11.0.tgz#2ca2903dfab8268ca18ebd8cc2e879921ec3b254" + integrity sha512-JRgiI/vdF6uyBgyZhVyYJUZAop95Sy4XDe/jmT3R/bKliFWpO/uZBwvSjWEdxwzec7SYbEPNPck0Kff2tUGM2Q== + dependencies: + camelcase "^5.0.0" + +"react-is@^16.12.0 || ^17.0.0", react-is@^17.0.1, react-is@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + +react-is@^16.3.2, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.9.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-json-schema@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/react-json-schema/-/react-json-schema-1.2.2.tgz#b24a46f049066ac78d0138bcd4f5504cda2381e9" + integrity sha512-aQDeTQPWVhFfy/hZygPgp9imhkkWtF83OF8/I4EfgS5MY0UbiSVZp0HGhH16dB0YoqIFzJ5Bl507iu6L0+GxWg== + dependencies: + react-dom-factories "^1.0.2" + +react-jsonschema-form@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/react-jsonschema-form/-/react-jsonschema-form-1.8.1.tgz#9c962f29a55b3fe071d8edf2fc3430f05f1b7ed9" + integrity sha512-aaDloxNAcGXOOOcdKOxxqEEn5oDlPUZgWcs8unXXB9vjBRgCF8rCm/wVSv1u2G5ih0j/BX6Ewd/WjI2g00lPdg== + dependencies: + "@babel/runtime-corejs2" "^7.4.5" + ajv "^6.7.0" + core-js "^2.5.7" + lodash "^4.17.15" + prop-types "^15.5.8" + react-is "^16.8.4" + react-lifecycles-compat "^3.0.4" + shortid "^2.2.14" + +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-overlays@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-5.0.1.tgz#7e2c3cd3c0538048b0b7451d203b1289c561b7f2" + integrity sha512-plwUJieTBbLSrgvQ4OkkbTD/deXgxiJdNuKzo6n1RWE3OVnQIU5hffCGS/nvIuu6LpXFs2majbzaXY8rcUVdWA== + dependencies: + "@babel/runtime" "^7.13.8" + "@popperjs/core" "^2.8.6" + "@restart/hooks" "^0.3.26" + "@types/warning" "^3.0.0" + dom-helpers "^5.2.0" + prop-types "^15.7.2" + uncontrollable "^7.2.1" + warning "^4.0.3" + +react-refresh@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f" + integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg== + +react-router-dom@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.2.0.tgz#9e65a4d0c45e13289e66c7b17c7e175d0ea15662" + integrity sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA== + dependencies: + "@babel/runtime" "^7.1.2" + history "^4.9.0" + loose-envify "^1.3.1" + prop-types "^15.6.2" + react-router "5.2.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-router@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.2.0.tgz#424e75641ca8747fbf76e5ecca69781aa37ea293" + integrity sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw== + dependencies: + "@babel/runtime" "^7.1.2" + history "^4.9.0" + hoist-non-react-statics "^3.1.0" + loose-envify "^1.3.1" + mini-create-react-context "^0.4.0" + path-to-regexp "^1.7.0" + prop-types "^15.6.2" + react-is "^16.6.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-scripts@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-4.0.2.tgz#530fd934dfdf31c355e366df40bf488347c28de7" + integrity sha512-okaWNaGDGtnXyM2CLMUl8gYZnAubgxEulC40FYjsxn5bbj+G/mDINdy24wHz4Vypb/LWtIe8rdBU78k/74v8Mw== + dependencies: + "@babel/core" "7.12.3" + "@pmmmwh/react-refresh-webpack-plugin" "0.4.3" + "@svgr/webpack" "5.5.0" + "@typescript-eslint/eslint-plugin" "^4.5.0" + "@typescript-eslint/parser" "^4.5.0" + babel-eslint "^10.1.0" + babel-jest "^26.6.0" + babel-loader "8.1.0" + babel-plugin-named-asset-import "^0.3.7" + babel-preset-react-app "^10.0.0" + bfj "^7.0.2" + camelcase "^6.1.0" + case-sensitive-paths-webpack-plugin "2.3.0" + css-loader "4.3.0" + dotenv "8.2.0" + dotenv-expand "5.1.0" + eslint "^7.11.0" + eslint-config-react-app "^6.0.0" + eslint-plugin-flowtype "^5.2.0" + eslint-plugin-import "^2.22.1" + eslint-plugin-jest "^24.1.0" + eslint-plugin-jsx-a11y "^6.3.1" + eslint-plugin-react "^7.21.5" + eslint-plugin-react-hooks "^4.2.0" + eslint-plugin-testing-library "^3.9.2" + eslint-webpack-plugin "^2.1.0" + file-loader "6.1.1" + fs-extra "^9.0.1" + html-webpack-plugin "4.5.0" + identity-obj-proxy "3.0.0" + jest "26.6.0" + jest-circus "26.6.0" + jest-resolve "26.6.0" + jest-watch-typeahead "0.6.1" + mini-css-extract-plugin "0.11.3" + optimize-css-assets-webpack-plugin "5.0.4" + pnp-webpack-plugin "1.6.4" + postcss-flexbugs-fixes "4.2.1" + postcss-loader "3.0.0" + postcss-normalize "8.0.1" + postcss-preset-env "6.7.0" + postcss-safe-parser "5.0.2" + prompts "2.4.0" + react-app-polyfill "^2.0.0" + react-dev-utils "^11.0.2" + react-refresh "^0.8.3" + resolve "1.18.1" + resolve-url-loader "^3.1.2" + sass-loader "^10.0.5" + semver "7.3.2" + style-loader "1.3.0" + terser-webpack-plugin "4.2.3" + ts-pnp "1.2.0" + url-loader "4.1.1" + webpack "4.44.2" + webpack-dev-server "3.11.0" + webpack-manifest-plugin "2.2.0" + workbox-webpack-plugin "5.1.4" + optionalDependencies: + fsevents "^2.1.3" + +react-shallow-renderer@^16.13.1: + version "16.14.1" + resolved "https://registry.yarnpkg.com/react-shallow-renderer/-/react-shallow-renderer-16.14.1.tgz#bf0d02df8a519a558fd9b8215442efa5c840e124" + integrity sha512-rkIMcQi01/+kxiTE9D3fdS959U1g7gs+/rborw++42m1O9FAQiNI/UNRZExVUoAOprn4umcXf+pFRou8i4zuBg== + dependencies: + object-assign "^4.1.1" + react-is "^16.12.0 || ^17.0.0" + +react-table@^7.7.0: + version "7.7.0" + resolved "https://registry.yarnpkg.com/react-table/-/react-table-7.7.0.tgz#e2ce14d7fe3a559f7444e9ecfe8231ea8373f912" + integrity sha512-jBlj70iBwOTvvImsU9t01LjFjy4sXEtclBovl3mTiqjz23Reu0DKnRza4zlLtOPACx6j2/7MrQIthIK1Wi+LIA== + +react-test-renderer@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-17.0.2.tgz#4cd4ae5ef1ad5670fc0ef776e8cc7e1231d9866c" + integrity sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ== + dependencies: + object-assign "^4.1.1" + react-is "^17.0.2" + react-shallow-renderer "^16.13.1" + scheduler "^0.20.2" + +react-transition-group@^4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.1.tgz#63868f9325a38ea5ee9535d828327f85773345c9" + integrity sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw== + dependencies: + "@babel/runtime" "^7.5.5" + dom-helpers "^5.0.1" + loose-envify "^1.4.0" + prop-types "^15.6.2" + +react@^17.0.1: + version "17.0.1" + resolved "https://registry.yarnpkg.com/react/-/react-17.0.1.tgz#6e0600416bd57574e3f86d92edba3d9008726127" + integrity sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + +recursive-readdir@2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" + integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== + dependencies: + minimatch "3.0.4" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + dependencies: + "@babel/runtime" "^7.8.4" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regex-parser@^2.2.11: + version "2.2.11" + resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" + integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== + +regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" + integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +regexpp@^3.0.0, regexpp@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + +regexpu-core@^4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" + integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + +regjsparser@^0.6.4: + version "0.6.9" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" + integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ== + dependencies: + jsesc "~0.5.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +renderkid@^2.0.4: + version "2.0.5" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.5.tgz#483b1ac59c6601ab30a7a596a5965cabccfdd0a5" + integrity sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ== + dependencies: + css-select "^2.0.2" + dom-converter "^0.2" + htmlparser2 "^3.10.1" + lodash "^4.17.20" + strip-ansi "^3.0.0" + +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +request-promise-core@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" + integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== + dependencies: + lodash "^4.17.19" + +request-promise-native@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" + integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== + dependencies: + request-promise-core "1.1.4" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@^2.88.2: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-pathname@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" + integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== + +resolve-url-loader@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz#235e2c28e22e3e432ba7a5d4e305c59a58edfc08" + integrity sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ== + dependencies: + adjust-sourcemap-loader "3.0.0" + camelcase "5.3.1" + compose-function "3.0.3" + convert-source-map "1.7.0" + es6-iterator "2.0.3" + loader-utils "1.2.3" + postcss "7.0.21" + rework "1.0.1" + rework-visit "1.0.0" + source-map "0.6.1" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.18.1.tgz#018fcb2c5b207d2a6424aee361c5a266da8f4130" + integrity sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA== + dependencies: + is-core-module "^2.0.0" + path-parse "^1.0.6" + +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.3.2, resolve@^1.8.1: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +resolve@^1.13.1: + version "1.19.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" + integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== + dependencies: + is-core-module "^2.1.0" + path-parse "^1.0.6" + +resolve@^2.0.0-next.3: + version "2.0.0-next.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" + integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rework-visit@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rework-visit/-/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a" + integrity sha1-mUWygD8hni96ygCtuLyfZA+ELJo= + +rework@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rework/-/rework-1.0.1.tgz#30806a841342b54510aa4110850cd48534144aa7" + integrity sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc= + dependencies: + convert-source-map "^0.3.3" + css "^2.0.0" + +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + +rimraf@^2.5.4, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rollup-plugin-babel@^4.3.3: + version "4.4.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz#d15bd259466a9d1accbdb2fe2fff17c52d030acb" + integrity sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + rollup-pluginutils "^2.8.1" + +rollup-plugin-terser@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz#8c650062c22a8426c64268548957463bf981b413" + integrity sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w== + dependencies: + "@babel/code-frame" "^7.5.5" + jest-worker "^24.9.0" + rollup-pluginutils "^2.8.2" + serialize-javascript "^4.0.0" + terser "^4.6.2" + +rollup-pluginutils@^2.8.1, rollup-pluginutils@^2.8.2: + version "2.8.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" + integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== + dependencies: + estree-walker "^0.6.1" + +rollup@^1.31.1: + version "1.32.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.32.1.tgz#4480e52d9d9e2ae4b46ba0d9ddeaf3163940f9c4" + integrity sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A== + dependencies: + "@types/estree" "*" + "@types/node" "*" + acorn "^7.1.0" + +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +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.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sane@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + +sanitize.css@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-10.0.0.tgz#b5cb2547e96d8629a60947544665243b1dc3657a" + integrity sha512-vTxrZz4dX5W86M6oVWVdOVe72ZiPs41Oi7Z6Km4W5Turyz28mrXSJhhEBZoRtzJWIv3833WKVwLSDWWkEfupMg== + +sass-loader@^10.0.5: + version "10.1.1" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.1.1.tgz#4ddd5a3d7638e7949065dd6e9c7c04037f7e663d" + integrity sha512-W6gVDXAd5hR/WHsPicvZdjAWHBcEJ44UahgxcIE196fW2ong0ZHMPO1kZuI5q0VlvMQZh32gpv69PLWQm70qrw== + dependencies: + klona "^2.0.4" + loader-utils "^2.0.0" + neo-async "^2.6.2" + schema-utils "^3.0.0" + semver "^7.3.2" + +sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + +scheduler@^0.20.1: + version "0.20.1" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.1.tgz#da0b907e24026b01181ecbc75efdc7f27b5a000c" + integrity sha512-LKTe+2xNJBNxu/QhHvDR14wUXHRQbVY5ZOYpOGWRzhydZUqrLb2JBvLPY7cAqFmqrWuDED0Mjk7013SZiOz6Bw== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +scheduler@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" + integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +schema-utils@^2.6.5, schema-utils@^2.7.0, schema-utils@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" + integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== + dependencies: + "@types/json-schema" "^7.0.6" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +selfsigned@^1.10.7: + version "1.10.8" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30" + integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== + dependencies: + node-forge "^0.10.0" + +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.2.1, semver@^7.3.2: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +serialize-javascript@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +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" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== + +shortid@^2.2.14: + version "2.2.16" + resolved "https://registry.yarnpkg.com/shortid/-/shortid-2.2.16.tgz#b742b8f0cb96406fd391c76bfc18a67a57fe5608" + integrity sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g== + dependencies: + nanoid "^2.1.0" + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sockjs-client@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" + integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== + dependencies: + debug "^3.2.5" + eventsource "^1.0.7" + faye-websocket "~0.11.1" + inherits "^2.0.3" + json3 "^3.3.2" + url-parse "^1.4.3" + +sockjs@0.3.20: + version "0.3.20" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855" + integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== + dependencies: + faye-websocket "^0.10.0" + uuid "^3.4.0" + websocket-driver "0.6.5" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-resolve@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" + integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + +source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.19: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.7.3, source-map@~0.7.2: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +sourcemap-codec@^1.4.4: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.7" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" + integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" + integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== + dependencies: + figgy-pudding "^3.5.1" + +ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +stack-utils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" + integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw== + dependencies: + escape-string-regexp "^2.0.0" + +stackframe@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" + integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-natural-compare@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" + integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string.prototype.matchall@^4.0.2, string.prototype.matchall@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz#608f255e93e072107f5de066f81a2dfb78cf6b29" + integrity sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + has-symbols "^1.0.1" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.3.1" + side-channel "^1.0.4" + +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +strip-ansi@6.0.0, strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-comments@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-1.0.2.tgz#82b9c45e7f05873bee53f37168af930aa368679d" + integrity sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw== + dependencies: + babel-extract-comments "^1.0.0" + babel-plugin-transform-object-rest-spread "^6.26.0" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +style-loader@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e" + integrity sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q== + dependencies: + loader-utils "^2.0.0" + schema-utils "^2.7.0" + +stylehacks@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" + integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +svg-parser@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== + +svgo@^1.0.0, svgo@^1.2.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + +symbol-observable@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-2.0.3.tgz#5b521d3d07a43c351055fa43b8355b62d33fd16a" + integrity sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA== + +symbol-observable@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-4.0.0.tgz#5b425f192279e87f2f9b937ac8540d1984b39205" + integrity sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ== + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +table@^6.0.4: + version "6.6.0" + resolved "https://registry.yarnpkg.com/table/-/table-6.6.0.tgz#905654b79df98d9e9a973de1dd58682532c40e8e" + integrity sha512-iZMtp5tUvcnAdtHpZTWLPF0M7AgiQsURR2DwmxnJwSy8I3+cY+ozzVvYha3BOLG2TB+L0CqjIz+91htuj6yCXg== + dependencies: + ajv "^8.0.1" + lodash.clonedeep "^4.5.0" + lodash.flatten "^4.4.0" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" + +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tar@^6.0.2: + version "6.1.0" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83" + integrity sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +temp-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= + +tempy@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.3.0.tgz#6f6c5b295695a16130996ad5ab01a8bd726e8bf8" + integrity sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ== + dependencies: + temp-dir "^1.0.0" + type-fest "^0.3.1" + unique-string "^1.0.0" + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +terser-webpack-plugin@4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz#28daef4a83bd17c1db0297070adc07fc8cfc6a9a" + integrity sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ== + dependencies: + cacache "^15.0.5" + find-cache-dir "^3.3.1" + jest-worker "^26.5.0" + p-limit "^3.0.2" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" + source-map "^0.6.1" + terser "^5.3.4" + webpack-sources "^1.4.3" + +terser-webpack-plugin@^1.4.3: + version "1.4.5" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" + integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^4.0.0" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser@^4.1.2, terser@^4.6.2, terser@^4.6.3: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +terser@^5.3.4: + version "5.7.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.0.tgz#a761eeec206bc87b605ab13029876ead938ae693" + integrity sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g== + dependencies: + commander "^2.20.0" + source-map "~0.7.2" + source-map-support "~0.5.19" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-table@0.2.0, text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +throat@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" + integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +timers-browserify@^2.0.4: + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== + dependencies: + setimmediate "^1.0.4" + +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + +tiny-invariant@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" + integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== + +tiny-warning@^1.0.0, tiny-warning@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +tough-cookie@^2.3.3, tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tough-cookie@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" + integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.1.2" + +tr46@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" + integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== + dependencies: + punycode "^2.1.1" + +tryer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" + integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== + +ts-invariant@^0.7.0: + version "0.7.3" + resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.7.3.tgz#13aae22a4a165393aaf5cecdee45ef4128d358b8" + integrity sha512-UWDDeovyUTIMWj+45g5nhnl+8oo+GhxL5leTaHn5c8FkQWfh8v66gccLd2/YzVmV5hoQUjCEjhrXnQqVDJdvKA== + dependencies: + tslib "^2.1.0" + +ts-invariant@^0.9.0: + version "0.9.1" + resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.9.1.tgz#87dfde9894a4ce3c7711b02b1b449e7fd7384b13" + integrity sha512-hSeYibh29ULlHkuEfukcoiyTct+s2RzczMLTv4x3NWC/YrBy7x7ps5eYq/b4Y3Sb9/uAlf54+/5CAEMVxPhuQw== + dependencies: + tslib "^2.1.0" + +ts-pnp@1.2.0, ts-pnp@^1.1.6: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" + integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== + +tsconfig-paths@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + +tslib@^1.10.0, tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.3, tslib@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" + integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w== + +tslib@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== + +tsutils@^3.17.1: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" + integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.0.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" + integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +typescript@^4.1.2: + version "4.1.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.5.tgz#123a3b214aaff3be32926f0d8f1f6e704eb89a72" + integrity sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA== + +unbox-primitive@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + +uncontrollable@^7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-7.2.1.tgz#1fa70ba0c57a14d5f78905d533cf63916dc75738" + integrity sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ== + dependencies: + "@babel/runtime" "^7.6.3" + "@types/react" ">=16.9.11" + invariant "^2.2.4" + react-lifecycles-compat "^3.0.4" + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= + dependencies: + crypto-random-string "^1.0.0" + +universalify@^0.1.0, universalify@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1, upath@^1.1.2, upath@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-loader@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" + integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== + dependencies: + loader-utils "^2.0.0" + mime-types "^2.1.27" + schema-utils "^3.0.0" + +url-parse@^1.4.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b" + integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^8.3.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +v8-to-istanbul@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.1.tgz#04bfd1026ba4577de5472df4f5e89af49de5edda" + integrity sha512-p0BB09E5FRjx0ELN6RgusIPsSPhtgexSRcKETybEs6IGOTXJSZqfwxp7r//55nnu0f1AxltY5VvdVqy2vZf9AA== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate.io-array@^1.0.3: + version "1.0.6" + resolved "https://registry.yarnpkg.com/validate.io-array/-/validate.io-array-1.0.6.tgz#5b5a2cafd8f8b85abb2f886ba153f2d93a27774d" + integrity sha1-W1osr9j4uFq7L4hroVPy2Tond00= + +validate.io-function@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/validate.io-function/-/validate.io-function-1.0.2.tgz#343a19802ed3b1968269c780e558e93411c0bad7" + integrity sha1-NDoZgC7TsZaCaceA5VjpNBHAutc= + +validate.io-integer-array@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz#2cabde033293a6bcbe063feafe91eaf46b13a089" + integrity sha1-LKveAzKTpry+Bj/q/pHq9GsToIk= + dependencies: + validate.io-array "^1.0.3" + validate.io-integer "^1.0.4" + +validate.io-integer@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/validate.io-integer/-/validate.io-integer-1.0.5.tgz#168496480b95be2247ec443f2233de4f89878068" + integrity sha1-FoSWSAuVviJH7EQ/IjPeT4mHgGg= + dependencies: + validate.io-number "^1.0.3" + +validate.io-number@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/validate.io-number/-/validate.io-number-1.0.3.tgz#f63ffeda248bf28a67a8d48e0e3b461a1665baf8" + integrity sha1-9j/+2iSL8opnqNSODjtGGhZluvg= + +value-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" + integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +vendors@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" + integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + +walker@^1.0.7, walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= + dependencies: + makeerror "1.0.x" + +warning@^4.0.0, warning@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.7.4: + version "1.7.5" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" + integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.1" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +web-vitals@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-1.1.0.tgz#7f410d9a1f7a1cd5d952806b45776204b47dc274" + integrity sha512-1cx54eRxY/+M0KNKdNpNnuXAXG+vJEvwScV4DiV9rOYDguHoeDIzm09ghBohOPtkqPO5OtPC14FWkNva3SDisg== + +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +webpack-dev-middleware@^3.7.2: + version "3.7.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" + integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" + integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.3.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.8" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.26" + schema-utils "^1.0.0" + selfsigned "^1.10.7" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "0.3.20" + sockjs-client "1.4.0" + spdy "^4.0.2" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "^13.3.2" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-manifest-plugin@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-2.2.0.tgz#19ca69b435b0baec7e29fbe90fb4015de2de4f16" + integrity sha512-9S6YyKKKh/Oz/eryM1RyLVDVmy3NSPV0JXMRhZ18fJsq+AwGxUY34X54VNwkzYcEmEkDwNxuEOboCZEebJXBAQ== + dependencies: + fs-extra "^7.0.0" + lodash ">=3.5 <5" + object.entries "^1.1.0" + tapable "^1.0.0" + +webpack-sources@^1.1.0, webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@4.44.2: + version "4.44.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.2.tgz#6bfe2b0af055c8b2d1e90ed2cd9363f841266b72" + integrity sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.3.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.3" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.7.4" + webpack-sources "^1.4.1" + +websocket-driver@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= + dependencies: + websocket-extensions ">=0.1.1" + +websocket-driver@>=0.5.1: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-fetch@^3.0.0, whatwg-fetch@^3.4.1: + version "3.6.2" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" + integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.5.0.tgz#7752b8464fc0903fec89aa9846fc9efe07351fd3" + integrity sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg== + dependencies: + lodash "^4.7.0" + tr46 "^2.0.2" + webidl-conversions "^6.1.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.9, which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.3, word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +workbox-background-sync@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-5.1.4.tgz#5ae0bbd455f4e9c319e8d827c055bb86c894fd12" + integrity sha512-AH6x5pYq4vwQvfRDWH+vfOePfPIYQ00nCEB7dJRU1e0n9+9HMRyvI63FlDvtFT2AvXVRsXvUt7DNMEToyJLpSA== + dependencies: + workbox-core "^5.1.4" + +workbox-broadcast-update@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-5.1.4.tgz#0eeb89170ddca7f6914fa3523fb14462891f2cfc" + integrity sha512-HTyTWkqXvHRuqY73XrwvXPud/FN6x3ROzkfFPsRjtw/kGZuZkPzfeH531qdUGfhtwjmtO/ZzXcWErqVzJNdXaA== + dependencies: + workbox-core "^5.1.4" + +workbox-build@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-5.1.4.tgz#23d17ed5c32060c363030c8823b39d0eabf4c8c7" + integrity sha512-xUcZn6SYU8usjOlfLb9Y2/f86Gdo+fy1fXgH8tJHjxgpo53VVsqRX0lUDw8/JuyzNmXuo8vXX14pXX2oIm9Bow== + dependencies: + "@babel/core" "^7.8.4" + "@babel/preset-env" "^7.8.4" + "@babel/runtime" "^7.8.4" + "@hapi/joi" "^15.1.0" + "@rollup/plugin-node-resolve" "^7.1.1" + "@rollup/plugin-replace" "^2.3.1" + "@surma/rollup-plugin-off-main-thread" "^1.1.1" + common-tags "^1.8.0" + fast-json-stable-stringify "^2.1.0" + fs-extra "^8.1.0" + glob "^7.1.6" + lodash.template "^4.5.0" + pretty-bytes "^5.3.0" + rollup "^1.31.1" + rollup-plugin-babel "^4.3.3" + rollup-plugin-terser "^5.3.1" + source-map "^0.7.3" + source-map-url "^0.4.0" + stringify-object "^3.3.0" + strip-comments "^1.0.2" + tempy "^0.3.0" + upath "^1.2.0" + workbox-background-sync "^5.1.4" + workbox-broadcast-update "^5.1.4" + workbox-cacheable-response "^5.1.4" + workbox-core "^5.1.4" + workbox-expiration "^5.1.4" + workbox-google-analytics "^5.1.4" + workbox-navigation-preload "^5.1.4" + workbox-precaching "^5.1.4" + workbox-range-requests "^5.1.4" + workbox-routing "^5.1.4" + workbox-strategies "^5.1.4" + workbox-streams "^5.1.4" + workbox-sw "^5.1.4" + workbox-window "^5.1.4" + +workbox-cacheable-response@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-5.1.4.tgz#9ff26e1366214bdd05cf5a43da9305b274078a54" + integrity sha512-0bfvMZs0Of1S5cdswfQK0BXt6ulU5kVD4lwer2CeI+03czHprXR3V4Y8lPTooamn7eHP8Iywi5QjyAMjw0qauA== + dependencies: + workbox-core "^5.1.4" + +workbox-core@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-5.1.4.tgz#8bbfb2362ecdff30e25d123c82c79ac65d9264f4" + integrity sha512-+4iRQan/1D8I81nR2L5vcbaaFskZC2CL17TLbvWVzQ4qiF/ytOGF6XeV54pVxAvKUtkLANhk8TyIUMtiMw2oDg== + +workbox-expiration@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-5.1.4.tgz#92b5df461e8126114943a3b15c55e4ecb920b163" + integrity sha512-oDO/5iC65h2Eq7jctAv858W2+CeRW5e0jZBMNRXpzp0ZPvuT6GblUiHnAsC5W5lANs1QS9atVOm4ifrBiYY7AQ== + dependencies: + workbox-core "^5.1.4" + +workbox-google-analytics@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-5.1.4.tgz#b3376806b1ac7d7df8418304d379707195fa8517" + integrity sha512-0IFhKoEVrreHpKgcOoddV+oIaVXBFKXUzJVBI+nb0bxmcwYuZMdteBTp8AEDJacENtc9xbR0wa9RDCnYsCDLjA== + dependencies: + workbox-background-sync "^5.1.4" + workbox-core "^5.1.4" + workbox-routing "^5.1.4" + workbox-strategies "^5.1.4" + +workbox-navigation-preload@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-5.1.4.tgz#30d1b720d26a05efc5fa11503e5cc1ed5a78902a" + integrity sha512-Wf03osvK0wTflAfKXba//QmWC5BIaIZARU03JIhAEO2wSB2BDROWI8Q/zmianf54kdV7e1eLaIEZhth4K4MyfQ== + dependencies: + workbox-core "^5.1.4" + +workbox-precaching@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-5.1.4.tgz#874f7ebdd750dd3e04249efae9a1b3f48285fe6b" + integrity sha512-gCIFrBXmVQLFwvAzuGLCmkUYGVhBb7D1k/IL7pUJUO5xacjLcFUaLnnsoVepBGAiKw34HU1y/YuqvTKim9qAZA== + dependencies: + workbox-core "^5.1.4" + +workbox-range-requests@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-5.1.4.tgz#7066a12c121df65bf76fdf2b0868016aa2bab859" + integrity sha512-1HSujLjgTeoxHrMR2muDW2dKdxqCGMc1KbeyGcmjZZAizJTFwu7CWLDmLv6O1ceWYrhfuLFJO+umYMddk2XMhw== + dependencies: + workbox-core "^5.1.4" + +workbox-routing@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-5.1.4.tgz#3e8cd86bd3b6573488d1a2ce7385e547b547e970" + integrity sha512-8ljknRfqE1vEQtnMtzfksL+UXO822jJlHTIR7+BtJuxQ17+WPZfsHqvk1ynR/v0EHik4x2+826Hkwpgh4GKDCw== + dependencies: + workbox-core "^5.1.4" + +workbox-strategies@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-5.1.4.tgz#96b1418ccdfde5354612914964074d466c52d08c" + integrity sha512-VVS57LpaJTdjW3RgZvPwX0NlhNmscR7OQ9bP+N/34cYMDzXLyA6kqWffP6QKXSkca1OFo/v6v7hW7zrrguo6EA== + dependencies: + workbox-core "^5.1.4" + workbox-routing "^5.1.4" + +workbox-streams@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-5.1.4.tgz#05754e5e3667bdc078df2c9315b3f41210d8cac0" + integrity sha512-xU8yuF1hI/XcVhJUAfbQLa1guQUhdLMPQJkdT0kn6HP5CwiPOGiXnSFq80rAG4b1kJUChQQIGPrq439FQUNVrw== + dependencies: + workbox-core "^5.1.4" + workbox-routing "^5.1.4" + +workbox-sw@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-5.1.4.tgz#2bb34c9f7381f90d84cef644816d45150011d3db" + integrity sha512-9xKnKw95aXwSNc8kk8gki4HU0g0W6KXu+xks7wFuC7h0sembFnTrKtckqZxbSod41TDaGh+gWUA5IRXrL0ECRA== + +workbox-webpack-plugin@5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-5.1.4.tgz#7bfe8c16e40fe9ed8937080ac7ae9c8bde01e79c" + integrity sha512-PZafF4HpugZndqISi3rZ4ZK4A4DxO8rAqt2FwRptgsDx7NF8TVKP86/huHquUsRjMGQllsNdn4FNl8CD/UvKmQ== + dependencies: + "@babel/runtime" "^7.5.5" + fast-json-stable-stringify "^2.0.0" + source-map-url "^0.4.0" + upath "^1.1.2" + webpack-sources "^1.3.0" + workbox-build "^5.1.4" + +workbox-window@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-5.1.4.tgz#2740f7dea7f93b99326179a62f1cc0ca2c93c863" + integrity sha512-vXQtgTeMCUq/4pBWMfQX8Ee7N2wVC4Q7XYFqLnfbXJ2hqew/cU1uMTD2KqGEgEpE4/30luxIxgE+LkIa8glBYw== + dependencies: + workbox-core "^5.1.4" + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + +worker-rpc@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/worker-rpc/-/worker-rpc-0.1.1.tgz#cb565bd6d7071a8f16660686051e969ad32f54d5" + integrity sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg== + dependencies: + microevent.ts "~0.1.1" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + +ws@^7.4.4: + version "7.4.5" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1" + integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g== + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.0, yaml@^1.7.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yargs@^15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zen-observable-ts@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.1.0.tgz#2d1aa9d79b87058e9b75698b92791c1838551f83" + integrity sha512-1h4zlLSqI2cRLPJUHJFL8bCWHhkpuXkF+dbGkRaWjgDIG26DmzyshUMrdV/rL3UnR+mhaX4fRq8LPouq0MYYIA== + dependencies: + "@types/zen-observable" "0.8.3" + zen-observable "0.8.15" + +zen-observable@0.8.15, zen-observable@^0.8.14: + version "0.8.15" + resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" + integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ== diff --git a/hooks/post-merge b/hooks/post-merge new file mode 100644 index 0000000..ce5bd23 --- /dev/null +++ b/hooks/post-merge @@ -0,0 +1,21 @@ +#!/bin/sh +# update secret files if git pull on master resulted in new changes being merged locally + +branch=`git symbolic-ref HEAD` +root_dir=`git rev-parse --show-toplevel` +# must replace with actual vault_path and default_branch, can run setup.sh +vault_path="kv/internal-tools" +default_branch="main" + +if [ $branch = "refs/heads/${default_branch}" ]; then + if [ -f "${root_dir}/update_secret_files.py" ]; then + vault kv get -format=json $vault_path | python "${root_dir}/update_secret_files.py" + if [ $? -eq 0 ]; then + echo "Successfully pulled secrets from Vault" + else + echo "An error occurred while pulling secrets from Vault" + fi + else + echo "To automatically update secrets after git pull on default branch, place update_secret_files.py in repo root directory" + fi +fi diff --git a/secret.config b/secret.config new file mode 100644 index 0000000..651ddc1 --- /dev/null +++ b/secret.config @@ -0,0 +1,2 @@ +ROOT_ENV_FILE=.env +FRONTEND_ENV_FILE=frontend/.env diff --git a/setup.sh b/setup.sh new file mode 100755 index 0000000..11c0c95 --- /dev/null +++ b/setup.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +vault_path_replacement_str="s|^vault_path=.*|vault_path=\"$1\"|g" +default_branch_replacement_str="s|^default_branch=.*|default_branch=\"$2\"|g" + +# MacOS +if [[ $OSTYPE =~ darwin.* ]]; then + sed -i "" -e $vault_path_replacement_str ./hooks/post-merge + sed -i "" -e $default_branch_replacement_str ./hooks/post-merge +else + sed -i $vault_path_replacement_str ./hooks/post-merge + sed -i $default_branch_replacement_str ./hooks/post-merge +fi +cp ./hooks/post-merge ./.git/hooks/post-merge diff --git a/update_secret_files.py b/update_secret_files.py new file mode 100644 index 0000000..2629b39 --- /dev/null +++ b/update_secret_files.py @@ -0,0 +1,56 @@ +import sys +import json + +# Open secret.config file +configFileNotFound = False +try: + configFile = open('secret.config') +except Exception as e: + print("File secret.config could not be opened in current directory.") + print(e) + configFileNotFound = True + # Script will exit after checking if the Vault request is valid + +# Decode json result +try: + rawInput = ''.join(sys.stdin.readlines()) + decodedJson = json.loads(rawInput) +except Exception as e: + print("Unable to retrieve secrets from Vault and obtain valid json result.") + print("Please ensure you are authenticated and have supplied the correct path argument.") + exit() + +# Extract the data field containting the secrets +if "data" in decodedJson and "data" in decodedJson["data"]: + data = decodedJson["data"]["data"] +else: + print("Unable to access the field data:{data:{}} from result which should contain the secrets.") + print("Please ensure you are authenticated and have supplied the correct path argument.") + exit() + +# Even if the config file is not found, it is useful to still indicate if the Vault request has any problems before exiting +if configFileNotFound: + exit() + +# Read all the secret file locations from secret.config +locations = {} +for line in configFile: + key, val = line.rstrip().partition('=')[::2] + if key in locations: + print("Key <{keyName}> appeared more than once on configuration file. Ignoring second instance of the key.".format(keyName=key)) + else: + locations[key] = val +configFile.close() + +# Write values to the secret file corresponding to their keys +for key in data: + if key in locations: + try: + f = open(locations[key], 'w') + f.write(data[key]) + f.close() + except Exception as e: + print("Could not write the values for key <{keyName}> to location <{locName}>".format(keyName=key, locName=locations[key])) + print(e) + else: + print("File location for key <{keyName}> was not found.".format(keyName=key)) \ No newline at end of file