From 06ff195a5b4791a7a955512f99a82c329ebd5f41 Mon Sep 17 00:00:00 2001 From: Kevin Jennison Date: Sun, 2 Jul 2023 17:39:27 -0400 Subject: [PATCH] Convert to TypeScript (#655) * Convert some files to TS * Convert files to TS * Fix build * Convert some tests * Convert files * WIP * WIP * WIP * WIP * WIP * WIP * WIP * WIP * WIP * WIP * WIP * WIP * WIP * WIP * WIP * WIP * WIP * WIP * WIP * Fix test * Fix parsing * WIP * WIP * WIP * WIP * WIP * WIP * WIP * WIP * WIP * WIP * WIP * WIP * WIP * Rebuild yarn.lock * Pin firebase-admin, fix tests * WIP * WIP * Make cookies types more generalized * WIP * WIP * Import type from correct file * WIP --- .eslintrc.js | 5 + __mocks__/firebase-admin/app.js | 2 + __mocks__/firebase-admin/auth.js | 10 - __mocks__/firebase-admin/auth.ts | 15 + __mocks__/firebase/app.js | 9 +- __mocks__/firebase/auth.js | 2 + index.tests.ts | 122 - jest.config.js | 10 +- jestSetup.js | 17 + package.json | 6 +- src/AuthAction.js | 11 - src/AuthAction.ts | 12 + src/__mocks__/config.js | 11 - src/__mocks__/config.ts | 14 + ...{useFirebaseUser.js => useFirebaseUser.ts} | 2 + ...{AuthAction.test.js => AuthAction.test.ts} | 5 +- ...uthCookies.test.js => authCookies.test.ts} | 3 +- .../{claims.test.js => claims.test.ts} | 0 .../{config.test.js => config.test.ts} | 47 +- .../{cookies.test.js => cookies.test.ts} | 48 +- ...uthUser.test.js => createAuthUser.test.ts} | 0 .../{encoding.test.js => encoding.test.ts} | 3 + ...aseAdmin.test.js => firebaseAdmin.test.ts} | 647 ++- ...ies.test.js => getUserFromCookies.test.ts} | 211 +- ...est.js => index.server.moduleLoad.test.ts} | 21 +- ...ex.server.test.js => index.server.test.ts} | 0 .../{index.test.js => index.test.ts} | 40 +- ...{initCommon.test.js => initCommon.test.ts} | 13 +- ...K.test.js => initFirebaseAdminSDK.test.ts} | 26 +- ....test.js => initFirebaseClientSDK.test.ts} | 29 +- .../{logDebug.test.js => logDebug.test.ts} | 3 + .../{redirects.test.js => redirects.test.ts} | 60 +- ...Cookies.test.js => setAuthCookies.test.ts} | 70 +- ...okies.test.js => unsetAuthCookies.test.ts} | 27 +- ...eAuthUser.test.js => useAuthUser.test.tsx} | 5 +- ...seUser.test.js => useFirebaseUser.test.ts} | 287 +- ...est.js => withAuthUser.moduleLoad.test.ts} | 3 + ...AuthUser.test.js => withAuthUser.test.tsx} | 291 +- ...R.test.js => withAuthUserTokenSSR.test.ts} | 88 +- src/{authCookies.js => authCookies.ts} | 0 src/{claims.js => claims.ts} | 7 +- src/{config.js => config.ts} | 96 +- src/configTypes.ts | 158 + src/{constants.js => constants.ts} | 0 src/{cookies.js => cookies.ts} | 68 +- src/{createAuthUser.js => createAuthUser.ts} | 88 +- src/{encoding.js => encoding.ts} | 6 +- src/{firebaseAdmin.js => firebaseAdmin.ts} | 173 +- ...erFromCookies.js => getUserFromCookies.ts} | 22 +- src/{index.server.js => index.server.ts} | 17 +- src/{index.js => index.ts} | 3 +- src/{initCommon.js => initCommon.ts} | 5 +- ...aseAdminSDK.js => initFirebaseAdminSDK.ts} | 2 +- ...eClientSDK.js => initFirebaseClientSDK.ts} | 0 src/{logDebug.js => logDebug.ts} | 4 +- src/redirectTypes.ts | 34 + src/{redirects.js => redirects.ts} | 47 +- src/{setAuthCookies.js => setAuthCookies.ts} | 7 +- ...est.js => createMockFetchResponse.test.ts} | 0 ...est.js => mockModuleNotFoundError.test.ts} | 0 src/testHelpers/authUserInputs.js | 54 - src/testHelpers/authUserInputs.ts | 63 + ...eMockAuthUser.js => createMockAuthUser.ts} | 0 ...reateMockConfig.js => createMockConfig.ts} | 20 +- src/testHelpers/createMockFetchResponse.js | 14 - src/testHelpers/createMockFetchResponse.ts | 20 + ...extContext.js => createMockNextContext.ts} | 2 +- src/testHelpers/mockModuleNotFoundError.js | 11 - src/testHelpers/mockModuleNotFoundError.ts | 19 + ...nsetAuthCookies.js => unsetAuthCookies.ts} | 3 +- src/{useAuthUser.js => useAuthUser.tsx} | 11 +- ...{useFirebaseUser.js => useFirebaseUser.ts} | 41 +- src/{withAuthUser.js => withAuthUser.tsx} | 74 +- ...serTokenSSR.js => withAuthUserTokenSSR.ts} | 76 +- tsconfig.json | 2 +- webpack.config.js | 6 +- yarn.lock | 5164 +++++++++-------- 77 files changed, 4569 insertions(+), 3923 deletions(-) delete mode 100644 __mocks__/firebase-admin/auth.js create mode 100644 __mocks__/firebase-admin/auth.ts delete mode 100644 index.tests.ts delete mode 100644 src/AuthAction.js create mode 100644 src/AuthAction.ts delete mode 100644 src/__mocks__/config.js create mode 100644 src/__mocks__/config.ts rename src/__mocks__/{useFirebaseUser.js => useFirebaseUser.ts} (92%) rename src/__tests__/{AuthAction.test.js => AuthAction.test.ts} (78%) rename src/__tests__/{authCookies.test.js => authCookies.test.ts} (92%) rename src/__tests__/{claims.test.js => claims.test.ts} (100%) rename src/__tests__/{config.test.js => config.test.ts} (96%) rename src/__tests__/{cookies.test.js => cookies.test.ts} (98%) rename src/__tests__/{createAuthUser.test.js => createAuthUser.test.ts} (100%) rename src/__tests__/{encoding.test.js => encoding.test.ts} (94%) rename src/__tests__/{firebaseAdmin.test.js => firebaseAdmin.test.ts} (71%) rename src/__tests__/{getUserFromCookies.test.js => getUserFromCookies.test.ts} (77%) rename src/__tests__/{index.server.moduleLoad.test.js => index.server.moduleLoad.test.ts} (78%) rename src/__tests__/{index.server.test.js => index.server.test.ts} (100%) rename src/__tests__/{index.test.js => index.test.ts} (86%) rename src/__tests__/{initCommon.test.js => initCommon.test.ts} (72%) rename src/__tests__/{initFirebaseAdminSDK.test.js => initFirebaseAdminSDK.test.ts} (84%) rename src/__tests__/{initFirebaseClientSDK.test.js => initFirebaseClientSDK.test.ts} (80%) rename src/__tests__/{logDebug.test.js => logDebug.test.ts} (97%) rename src/__tests__/{redirects.test.js => redirects.test.ts} (78%) rename src/__tests__/{setAuthCookies.test.js => setAuthCookies.test.ts} (84%) rename src/__tests__/{unsetAuthCookies.test.js => unsetAuthCookies.test.ts} (80%) rename src/__tests__/{useAuthUser.test.js => useAuthUser.test.tsx} (88%) rename src/__tests__/{useFirebaseUser.test.js => useFirebaseUser.test.ts} (75%) rename src/__tests__/{withAuthUser.moduleLoad.test.js => withAuthUser.moduleLoad.test.ts} (98%) rename src/__tests__/{withAuthUser.test.js => withAuthUser.test.tsx} (85%) rename src/__tests__/{withAuthUserTokenSSR.test.js => withAuthUserTokenSSR.test.ts} (88%) rename src/{authCookies.js => authCookies.ts} (100%) rename src/{claims.js => claims.ts} (80%) rename src/{config.js => config.ts} (64%) create mode 100644 src/configTypes.ts rename src/{constants.js => constants.ts} (100%) rename src/{cookies.js => cookies.ts} (65%) rename src/{createAuthUser.js => createAuthUser.ts} (76%) rename src/{encoding.js => encoding.ts} (66%) rename src/{firebaseAdmin.js => firebaseAdmin.ts} (52%) rename src/{getUserFromCookies.js => getUserFromCookies.ts} (88%) rename src/{index.server.js => index.server.ts} (77%) rename src/{index.js => index.ts} (94%) rename src/{initCommon.js => initCommon.ts} (60%) rename src/{initFirebaseAdminSDK.js => initFirebaseAdminSDK.ts} (95%) rename src/{initFirebaseClientSDK.js => initFirebaseClientSDK.ts} (100%) rename src/{logDebug.js => logDebug.ts} (83%) create mode 100644 src/redirectTypes.ts rename src/{redirects.js => redirects.ts} (69%) rename src/{setAuthCookies.js => setAuthCookies.ts} (94%) rename src/testHelpers/__tests__/{createMockFetchResponse.test.js => createMockFetchResponse.test.ts} (100%) rename src/testHelpers/__tests__/{mockModuleNotFoundError.test.js => mockModuleNotFoundError.test.ts} (100%) delete mode 100644 src/testHelpers/authUserInputs.js create mode 100644 src/testHelpers/authUserInputs.ts rename src/testHelpers/{createMockAuthUser.js => createMockAuthUser.ts} (100%) rename src/testHelpers/{createMockConfig.js => createMockConfig.ts} (72%) delete mode 100644 src/testHelpers/createMockFetchResponse.js create mode 100644 src/testHelpers/createMockFetchResponse.ts rename src/testHelpers/{createMockNextContext.js => createMockNextContext.ts} (92%) delete mode 100644 src/testHelpers/mockModuleNotFoundError.js create mode 100644 src/testHelpers/mockModuleNotFoundError.ts rename src/{unsetAuthCookies.js => unsetAuthCookies.ts} (86%) rename src/{useAuthUser.js => useAuthUser.tsx} (59%) rename src/{useFirebaseUser.js => useFirebaseUser.ts} (82%) rename src/{withAuthUser.js => withAuthUser.tsx} (80%) rename src/{withAuthUserTokenSSR.js => withAuthUserTokenSSR.ts} (65%) diff --git a/.eslintrc.js b/.eslintrc.js index 30873bb4..be03fc3c 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -2,6 +2,7 @@ module.exports = { extends: [ 'airbnb', 'prettier', + 'plugin:@typescript-eslint/eslint-recommended', 'plugin:@typescript-eslint/recommended', 'plugin:import/typescript', ], @@ -59,9 +60,13 @@ module.exports = { { files: [ '**/*.test.ts', + '**/*.test.tsx', '**/__mocks__/**/*.ts', + '**/__mocks__/**/*.tsx', '**/*.test.js', + '**/*.test.jsx', '**/__mocks__/**/*.js', + '**/__mocks__/**/*.jsx', ], extends: ['plugin:jest/recommended'], env: { diff --git a/__mocks__/firebase-admin/app.js b/__mocks__/firebase-admin/app.js index dc1009bf..7bb3d621 100644 --- a/__mocks__/firebase-admin/app.js +++ b/__mocks__/firebase-admin/app.js @@ -1,3 +1,5 @@ +export {} + const firebaseAdminApp = jest.createMockFromModule('firebase-admin/app') firebaseAdminApp.getApps = jest.fn(() => []) diff --git a/__mocks__/firebase-admin/auth.js b/__mocks__/firebase-admin/auth.js deleted file mode 100644 index ace8113b..00000000 --- a/__mocks__/firebase-admin/auth.js +++ /dev/null @@ -1,10 +0,0 @@ -const firebaseAdminAuth = jest.createMockFromModule('firebase-admin/auth') - -const auth = { - createCustomToken: jest.fn(async () => null), - verifyIdToken: jest.fn(async () => null), -} - -firebaseAdminAuth.getAuth = jest.fn(() => auth) - -module.exports = firebaseAdminAuth diff --git a/__mocks__/firebase-admin/auth.ts b/__mocks__/firebase-admin/auth.ts new file mode 100644 index 00000000..a3e18357 --- /dev/null +++ b/__mocks__/firebase-admin/auth.ts @@ -0,0 +1,15 @@ +export {} + +const { Auth } = jest.requireActual('firebase-admin/auth') + +const firebaseAdminAuthMock: jest.Mocked = + jest.createMockFromModule('firebase-admin/auth') + +const auth = { + createCustomToken: jest.fn(async () => null) as jest.Mock, + verifyIdToken: jest.fn(async () => null) as jest.Mock, +} + +firebaseAdminAuthMock.getAuth = jest.fn(() => auth) + +module.exports = firebaseAdminAuthMock diff --git a/__mocks__/firebase/app.js b/__mocks__/firebase/app.js index b2b24b43..999f45d2 100644 --- a/__mocks__/firebase/app.js +++ b/__mocks__/firebase/app.js @@ -1,5 +1,12 @@ +export {} + +const { FirebaseError } = jest.requireActual('firebase/app') + const firebaseAppMock = jest.createMockFromModule('firebase/app') firebaseAppMock.getApps = jest.fn(() => []) -module.exports = firebaseAppMock +module.exports = { + ...firebaseAppMock, + FirebaseError, +} diff --git a/__mocks__/firebase/auth.js b/__mocks__/firebase/auth.js index e306a2b3..e192f309 100644 --- a/__mocks__/firebase/auth.js +++ b/__mocks__/firebase/auth.js @@ -1,3 +1,5 @@ +export {} + const firebaseAuthMock = jest.createMockFromModule('firebase/auth') const mockOnIdTokenChangedUnsubscribe = jest.fn() diff --git a/index.tests.ts b/index.tests.ts deleted file mode 100644 index aec9d461..00000000 --- a/index.tests.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { - GetServerSideProps, - GetServerSidePropsContext, - GetServerSidePropsResult, -} from 'next' -import { type AuthUser, withAuthUserSSR, withAuthUserTokenSSR } from '.' - -declare function describe(name: string, test: () => void | Promise): void -declare function it(name: string, test: () => void | Promise): void -declare const SSP_CONTEXT: GetServerSidePropsContext - -describe('withAuthUserSSR typings', () => { - it('with no getter should return GetServerSideProps', () => { - const getSSP = withAuthUserSSR()() - type T = $Assert - }) - - it('should infer proper prop types', async () => { - const SProp = Symbol('SParams') - const getSSP = withAuthUserSSR()(async () => ({ - props: { s: 'test', n: 42, [SProp]: true as const }, - })) - const ssp = await getSSP(SSP_CONTEXT) - type T = - | $Assert< - typeof getSSP, - GetServerSideProps<{ s: string; n: number; [SProp]: true }> - > - | $Assert< - typeof ssp, - GetServerSidePropsResult<{ s: string; n: number; [SProp]: true }>, - 'Wrong result props type' - > - }) - - it('getter should have AuthUser of proper type', () => { - withAuthUserSSR()(async ({ AuthUser }) => { - type T = $Assert - return { props: {} } - }) - }) - - it('getter should have params and previewData of proper types when type of GetServerSideProps is explicit', () => { - const SParams = Symbol('SParams') - const SPreview = Symbol('SPreview') - type Props = { p: 1 } - type Params = { [SParams]: 'p' } - type Preview = { [SPreview]: 'p' } - - const getSSP: GetServerSideProps = - withAuthUserSSR()(async ({ params, previewData }) => { - type T = - | $Assert - | $Assert< - typeof previewData, - Preview | undefined, - 'Wrong previewData type' - > - return { props: { p: 1 } } - }) - }) - - it('should produce mismatch props error when type of GetServerSideProps is explicit', () => { - type Props = { p: 1 } - - // @ts-expect-error ts(2322) - // Type '{ p: 2; }' is not assignable to type 'Props'. - // Types of property 'p' are incompatible. - // Type '2' is not assignable to type '1'. - const getSSP: GetServerSideProps = withAuthUserSSR()(async () => ({ - props: { p: 2 }, - })) - }) -}) - -describe('withAuthUserTokenSSR typings', () => { - it('should have same type as withAuthUserSSR', () => { - type T = $Assert - }) -}) - -// ======================================================================== -// Type assertion from https://github.com/hyoo-ru/mam_mol/tree/master/type - -/** - * Asserts for equality of `Actual` and `Expected` types. - * Don't use `never` as `Expected` - use `$AssertNever` instead. - */ -type $Assert< - Actual, - Expected extends - | $Equals - | $Error< - Message, - { - actual: Actual - expected: Expected - } - >, - Message = 'Assert failed' -> = Actual - -/** - * Asserts for `Actual` type is `never`. - * - * $AssertNever< $Equals< 1 , 2 > > - */ -type $AssertNever = Actual - -/** - * Return `unknown` when `A` and `B` are the same type. `never` otherwise. - * - * $Equals< unknown , any > & number // never - * $Equals< never , never > & number // number - */ -type $Equals = (() => X extends A ? 1 : 2) extends () => X extends B - ? 1 - : 2 - ? unknown - : never - -type $Error = Message & { $err: Info } diff --git a/jest.config.js b/jest.config.js index 851eb4c9..4796436c 100644 --- a/jest.config.js +++ b/jest.config.js @@ -13,13 +13,19 @@ module.exports = { // Support absolute imports; e.g. from 'src/*' // https://stackoverflow.com/a/72437265/1332513 moduleDirectories: ['node_modules', ''], - testPathIgnorePatterns: ['/node_modules/', '/.next/', '/.yalc/', '/.git/'], + testPathIgnorePatterns: [ + '/node_modules/', + '/.next/', + '/.yalc/', + '/.git/', + 'build/', + ], transform: { '^.+\\.(js|jsx)$': '/node_modules/babel-jest', '^.+\\.(ts|tsx)$': 'ts-jest', }, transformIgnorePatterns: [ - '/node_modules/(?!(firebase|@firebase)/)', + '/node_modules/(?!(firebase|@firebase|jose)/)', '/.yalc/', '^.+\\.module\\.(css|sass|scss)$', ], diff --git a/jestSetup.js b/jestSetup.js index 4d2afeca..3fb645f6 100644 --- a/jestSetup.js +++ b/jestSetup.js @@ -1,6 +1,9 @@ +/* globals jest */ /* eslint-disable import/no-extraneous-dependencies */ import 'core-js/stable' import 'regenerator-runtime/runtime' +import crypto from 'crypto' +import { TextEncoder, TextDecoder } from 'util' // Force warnings to fail Jest tests. // https://github.com/facebook/jest/issues/6121#issuecomment-444269677 @@ -11,3 +14,17 @@ console.error = function (message, ...args) { error.apply(console, args) // keep default behaviour throw message instanceof Error ? message : new Error(message) } + +// Next.js polyfills fetch +global.fetch = jest.fn() + +// https://github.com/jsdom/jsdom/issues/1612 +Object.defineProperty(global.self, 'crypto', { + value: { + subtle: crypto.webcrypto.subtle, + }, +}) + +// https://github.com/inrupt/solid-client-authn-js/issues/1676#issuecomment-917016646 +global.TextEncoder = TextEncoder +global.TextDecoder = TextDecoder diff --git a/package.json b/package.json index bf687bdc..7b829b03 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,10 @@ "@testing-library/react": "^13.3.0", "@testing-library/react-hooks": "^8.0.1", "@types/cookies": "^0.7.7", + "@types/hoist-non-react-statics": "^3.3.1", "@types/jest": "^28", + "@types/keygrip": "^1.0.2", + "@types/set-cookie-parser": "^2.4.2", "@typescript-eslint/eslint-plugin": "^5.30.7", "@typescript-eslint/parser": "^5.30.7", "babel-jest": "^28.1.3", @@ -67,7 +70,7 @@ "eslint-plugin-react": "^7.30.1", "eslint-plugin-react-hooks": "^4.6.0", "firebase": "^9.9.1", - "firebase-admin": "^11.0.0", + "firebase-admin": "11.0.0", "jest": "^28.1.3", "jest-environment-jsdom": "^28.1.3", "jscodeshift": "^0.14.0", @@ -86,6 +89,7 @@ "source-map-loader": "^4.0.1", "ts-jest": "^28", "ts-loader": "^9.4.3", + "tsconfig-paths-webpack-plugin": "^4.0.1", "typescript": "^4.7.4", "webpack": "^5.73.0", "webpack-bundle-analyzer": "^4.5.0", diff --git a/src/AuthAction.js b/src/AuthAction.js deleted file mode 100644 index 432391dd..00000000 --- a/src/AuthAction.js +++ /dev/null @@ -1,11 +0,0 @@ -// Different behaviors when the user's auth status is pending -// or mismatches the page requirements. -const AuthAction = { - RENDER: 'render', - SHOW_LOADER: 'showLoader', - RETURN_NULL: 'returnNull', - REDIRECT_TO_LOGIN: 'redirectToLogin', - REDIRECT_TO_APP: 'redirectToApp', -} - -export default AuthAction diff --git a/src/AuthAction.ts b/src/AuthAction.ts new file mode 100644 index 00000000..ff23dfe2 --- /dev/null +++ b/src/AuthAction.ts @@ -0,0 +1,12 @@ +// Different behaviors when the user's auth status is pending +// or mismatches the page requirements. + +enum AuthAction { + RENDER = 'render', + SHOW_LOADER = 'showLoader', + RETURN_NULL = 'returnNull', + REDIRECT_TO_LOGIN = 'redirectToLogin', + REDIRECT_TO_APP = 'redirectToApp', +} + +export default AuthAction diff --git a/src/__mocks__/config.js b/src/__mocks__/config.js deleted file mode 100644 index 639cbfbe..00000000 --- a/src/__mocks__/config.js +++ /dev/null @@ -1,11 +0,0 @@ -let config - -const mock = jest.createMockFromModule('../config') - -mock.setConfig = jest.fn((newConfig) => { - config = newConfig -}) - -mock.getConfig = jest.fn(() => config) - -module.exports = mock diff --git a/src/__mocks__/config.ts b/src/__mocks__/config.ts new file mode 100644 index 00000000..2fbeea60 --- /dev/null +++ b/src/__mocks__/config.ts @@ -0,0 +1,14 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +export {} + +let config: any + +const mock: any = jest.createMockFromModule('../config') + +mock.setConfig = jest.fn((newConfig) => { + config = newConfig +}) + +mock.getConfig = jest.fn(() => config) + +module.exports = mock diff --git a/src/__mocks__/useFirebaseUser.js b/src/__mocks__/useFirebaseUser.ts similarity index 92% rename from src/__mocks__/useFirebaseUser.js rename to src/__mocks__/useFirebaseUser.ts index f02ba36f..eb6d009b 100644 --- a/src/__mocks__/useFirebaseUser.js +++ b/src/__mocks__/useFirebaseUser.ts @@ -1,3 +1,5 @@ +export {} + const mockUseFirebaseUser = jest.fn(() => ({ user: undefined, claims: {}, diff --git a/src/__tests__/AuthAction.test.js b/src/__tests__/AuthAction.test.ts similarity index 78% rename from src/__tests__/AuthAction.test.js rename to src/__tests__/AuthAction.test.ts index 50788141..6bce8292 100644 --- a/src/__tests__/AuthAction.test.js +++ b/src/__tests__/AuthAction.test.ts @@ -1,4 +1,7 @@ -describe('index.js: AuthAction', () => { +// eslint-disable-next-line jest/no-export +export {} + +describe('index.ts: AuthAction', () => { it('defines the expected constants', () => { expect.assertions(1) const AuthAction = require('src/AuthAction').default diff --git a/src/__tests__/authCookies.test.js b/src/__tests__/authCookies.test.ts similarity index 92% rename from src/__tests__/authCookies.test.js rename to src/__tests__/authCookies.test.ts index d6ac08e4..97593af7 100644 --- a/src/__tests__/authCookies.test.js +++ b/src/__tests__/authCookies.test.ts @@ -1,10 +1,11 @@ import { setConfig } from 'src/config' +import { ConfigInput } from 'src/configTypes' import createMockConfig from 'src/testHelpers/createMockConfig' jest.mock('src/config') beforeEach(() => { - const mockConfig = createMockConfig() + const mockConfig = createMockConfig() as ConfigInput setConfig({ ...mockConfig, cookies: { diff --git a/src/__tests__/claims.test.js b/src/__tests__/claims.test.ts similarity index 100% rename from src/__tests__/claims.test.js rename to src/__tests__/claims.test.ts diff --git a/src/__tests__/config.test.js b/src/__tests__/config.test.ts similarity index 96% rename from src/__tests__/config.test.js rename to src/__tests__/config.test.ts index 84c72de3..7b749e45 100644 --- a/src/__tests__/config.test.js +++ b/src/__tests__/config.test.ts @@ -1,10 +1,11 @@ +import { ConfigInput } from 'src/configTypes' import createMockConfig from 'src/testHelpers/createMockConfig' jest.mock('src/isClientSide') jest.mock('src/logDebug') // stash and restore the system env vars -let env = null +let env: typeof process.env beforeEach(() => { // Default to client side context. @@ -16,7 +17,7 @@ beforeEach(() => { afterEach(() => { jest.resetModules() process.env = env - env = null + env = { NODE_ENV: 'test' } }) // Create duplicate tests for behavior we want to test on both the client @@ -254,7 +255,7 @@ describe('config: server side', () => { const mockConfigDefault = createMockConfig() const mockConfig = { ...mockConfigDefault, - tokenChangedHandler: async (token) => token, + tokenChangedHandler: async () => undefined, } expect(() => { setConfig(mockConfig) @@ -269,7 +270,7 @@ describe('config: server side', () => { const mockConfigDefault = createMockConfig() const mockConfig = { ...mockConfigDefault, - tokenChangedHandler: async (token) => token, + tokenChangedHandler: async () => undefined, } expect(() => { setConfig(mockConfig) @@ -287,7 +288,7 @@ describe('config: server side', () => { loginAPIEndpoint: undefined, logoutAPIEndpoint: undefined, onLoginRequestError: () => {}, - tokenChangedHandler: async (token) => token, + tokenChangedHandler: async () => undefined, } expect(() => { setConfig(mockConfig) @@ -305,7 +306,7 @@ describe('config: server side', () => { loginAPIEndpoint: undefined, logoutAPIEndpoint: undefined, onLogoutRequestError: () => {}, - tokenChangedHandler: async (token) => token, + tokenChangedHandler: async () => undefined, } expect(() => { setConfig(mockConfig) @@ -375,9 +376,9 @@ describe('config: server side', () => { it('defaults onVerifyTokenError to a function', () => { expect.assertions(1) const { getConfig, setConfig } = require('src/config') - const mockConfigDefault = createMockConfig() - delete mockConfigDefault.onVerifyTokenError - setConfig(mockConfigDefault) + const mockUserConfig: ConfigInput = createMockConfig() as ConfigInput + delete mockUserConfig.onVerifyTokenError + setConfig(mockUserConfig) const config = getConfig() expect(typeof config.onVerifyTokenError).toEqual('function') }) @@ -413,9 +414,9 @@ describe('config: server side', () => { it('defaults onTokenRefreshError to a function', () => { expect.assertions(1) const { getConfig, setConfig } = require('src/config') - const mockConfigDefault = createMockConfig() - delete mockConfigDefault.onTokenRefreshError - setConfig(mockConfigDefault) + const mockUserConfig: ConfigInput = createMockConfig() as ConfigInput + delete mockUserConfig.onTokenRefreshError + setConfig(mockUserConfig) const config = getConfig() expect(typeof config.onTokenRefreshError).toEqual('function') }) @@ -693,7 +694,7 @@ describe('config: client side', () => { const mockConfigDefault = createMockConfig() const mockConfig = { ...mockConfigDefault, - tokenChangedHandler: async (token) => token, + tokenChangedHandler: async () => undefined, } expect(() => { setConfig(mockConfig) @@ -708,7 +709,7 @@ describe('config: client side', () => { const mockConfigDefault = createMockConfig() const mockConfig = { ...mockConfigDefault, - tokenChangedHandler: async (token) => token, + tokenChangedHandler: async () => undefined, } expect(() => { setConfig(mockConfig) @@ -726,7 +727,7 @@ describe('config: client side', () => { loginAPIEndpoint: undefined, logoutAPIEndpoint: undefined, onLoginRequestError: () => {}, - tokenChangedHandler: async (token) => token, + tokenChangedHandler: async () => undefined, } expect(() => { setConfig(mockConfig) @@ -744,7 +745,7 @@ describe('config: client side', () => { loginAPIEndpoint: undefined, logoutAPIEndpoint: undefined, onLogoutRequestError: () => {}, - tokenChangedHandler: async (token) => token, + tokenChangedHandler: async () => undefined, } expect(() => { setConfig(mockConfig) @@ -814,9 +815,9 @@ describe('config: client side', () => { it('defaults onVerifyTokenError to a function', () => { expect.assertions(1) const { getConfig, setConfig } = require('src/config') - const mockConfigDefault = createMockConfig() - delete mockConfigDefault.onVerifyTokenError - setConfig(mockConfigDefault) + const mockUserConfig: ConfigInput = createMockConfig() as ConfigInput + delete mockUserConfig.onVerifyTokenError + setConfig(mockUserConfig) const config = getConfig() expect(typeof config.onVerifyTokenError).toEqual('function') }) @@ -852,9 +853,9 @@ describe('config: client side', () => { it('defaults onTokenRefreshError to a function', () => { expect.assertions(1) const { getConfig, setConfig } = require('src/config') - const mockConfigDefault = createMockConfig() - delete mockConfigDefault.onTokenRefreshError - setConfig(mockConfigDefault) + const mockUserConfig: ConfigInput = createMockConfig() as ConfigInput + delete mockUserConfig.onTokenRefreshError + setConfig(mockUserConfig) const config = getConfig() expect(typeof config.onTokenRefreshError).toEqual('function') }) @@ -897,7 +898,7 @@ describe('config: debug logging', () => { firebaseAdminInitConfig: { ...mockConfig.firebaseAdminInitConfig, credential: { - ...mockConfig.firebaseAdminInitConfig.credential, + ...mockConfig.firebaseAdminInitConfig?.credential, privateKey: 'hidden', clientEmail: 'hidden', }, diff --git a/src/__tests__/cookies.test.js b/src/__tests__/cookies.test.ts similarity index 98% rename from src/__tests__/cookies.test.js rename to src/__tests__/cookies.test.ts index 7cab87cb..1726e6c2 100644 --- a/src/__tests__/cookies.test.js +++ b/src/__tests__/cookies.test.ts @@ -36,7 +36,7 @@ jest.mock('src/config') const mockNow = '2020-10-15T18:00:00.000Z' beforeEach(() => { - MockDate.set(moment(mockNow)) + MockDate.set(moment(mockNow) as unknown as Date) }) afterEach(() => { @@ -45,7 +45,7 @@ afterEach(() => { // Handles splitting cookies set in a single "set-cookie" header. // https://github.com/nfriedly/set-cookie-parser#usage-in-react-native -const parseCookies = (headerVal) => { +const parseCookies = (headerVal: string) => { const splitCookieHeaders = setCookieParser.splitCookiesString(headerVal) return setCookieParser.parse(splitCookieHeaders) } @@ -73,11 +73,11 @@ const createDeleteCookieOptions = createSetCookieOptions /** * START: getCookie tests */ -describe('cookies.js: getCookie', () => { +describe('cookies: getCookie', () => { it('returns the expected cookie value [unsigned]', async () => { expect.assertions(1) const MOCK_COOKIE_NAME = 'myStuff' - const MOCK_COOKIE_VAL = { + const MOCK_COOKIE_VAL: object = { my: ['data', 'here'], } await testApiHandler({ @@ -491,7 +491,7 @@ describe('cookies.js: getCookie', () => { /** * START: setCookie tests */ -describe('cookies.js: setCookie', () => { +describe('cookies: setCookie', () => { it('sets the expected base64-encoded cookie value', async () => { expect.assertions(1) const MOCK_COOKIE_NAME = 'myStuff' @@ -518,7 +518,7 @@ describe('cookies.js: setCookie', () => { const expectedVal = encodeBase64(MOCK_COOKIE_VALUE) expect( setCookiesParsed.find((cookie) => cookie.name === MOCK_COOKIE_NAME) - .value + ?.value ).toEqual(expectedVal) }, }) @@ -592,7 +592,7 @@ describe('cookies.js: setCookie', () => { expect( setCookiesParsed.find( (cookie) => cookie.name === `${MOCK_COOKIE_NAME}.sig` // note .sig - ).value + )?.value ).toEqual(expectedVal) expect(setCookiesParsed.length).toBe(2) }, @@ -748,7 +748,7 @@ describe('cookies.js: setCookie', () => { ) expect( setCookiesParsed.find((cookie) => cookie.name === MOCK_COOKIE_NAME) - .domain + ?.domain ).toEqual('example.com') }, }) @@ -782,7 +782,7 @@ describe('cookies.js: setCookie', () => { ) expect( setCookiesParsed.find((cookie) => cookie.name === MOCK_COOKIE_NAME) - .httpOnly + ?.httpOnly ).toBe(true) }, }) @@ -816,7 +816,7 @@ describe('cookies.js: setCookie', () => { ) expect( setCookiesParsed.find((cookie) => cookie.name === MOCK_COOKIE_NAME) - .httpOnly + ?.httpOnly ).toBeUndefined() }, }) @@ -866,7 +866,7 @@ describe('cookies.js: setCookie', () => { ) expect( setCookiesParsed.find((cookie) => cookie.name === MOCK_COOKIE_NAME) - .value + ?.value ).toEqual(encodeBase64(MOCK_COOKIE_NEW_VALUE)) }, }) @@ -916,7 +916,7 @@ describe('cookies.js: setCookie', () => { ) expect( setCookiesParsed.find((cookie) => cookie.name === MOCK_COOKIE_NAME) - .value + ?.value ).toEqual(encodeBase64(MOCK_COOKIE_ORIGINAL_VALUE)) }, }) @@ -950,7 +950,7 @@ describe('cookies.js: setCookie', () => { ) expect( setCookiesParsed.find((cookie) => cookie.name === MOCK_COOKIE_NAME) - .path + ?.path ).toEqual('/some/path') }, }) @@ -984,7 +984,7 @@ describe('cookies.js: setCookie', () => { ) expect( setCookiesParsed.find((cookie) => cookie.name === MOCK_COOKIE_NAME) - .sameSite + ?.sameSite ).toEqual('strict') }, }) @@ -1018,7 +1018,7 @@ describe('cookies.js: setCookie', () => { ) expect( setCookiesParsed.find((cookie) => cookie.name === MOCK_COOKIE_NAME) - .sameSite + ?.sameSite ).toEqual('strict') }, }) @@ -1052,7 +1052,7 @@ describe('cookies.js: setCookie', () => { ) expect( setCookiesParsed.find((cookie) => cookie.name === MOCK_COOKIE_NAME) - .sameSite + ?.sameSite ).toEqual('lax') }, }) @@ -1086,7 +1086,7 @@ describe('cookies.js: setCookie', () => { ) expect( setCookiesParsed.find((cookie) => cookie.name === MOCK_COOKIE_NAME) - .sameSite + ?.sameSite ).toEqual('none') }, }) @@ -1120,7 +1120,7 @@ describe('cookies.js: setCookie', () => { ) expect( setCookiesParsed.find((cookie) => cookie.name === MOCK_COOKIE_NAME) - .secure + ?.secure ).toBe(true) }, }) @@ -1154,7 +1154,7 @@ describe('cookies.js: setCookie', () => { ) expect( setCookiesParsed.find((cookie) => cookie.name === MOCK_COOKIE_NAME) - .secure + ?.secure ).toBeUndefined() }, }) @@ -1189,7 +1189,7 @@ describe('cookies.js: setCookie', () => { const setCookieVal = setCookiesParsed.find( (cookie) => cookie.name === MOCK_COOKIE_NAME ) - const { expires } = setCookieVal + const { expires } = setCookieVal || {} expect(moment(expires).toISOString()).toEqual( moment(mockNow).add(4, 'minutes').toISOString() ) @@ -1226,7 +1226,7 @@ describe('cookies.js: setCookie', () => { const setCookieVal = setCookiesParsed.find( (cookie) => cookie.name === MOCK_COOKIE_NAME ) - const { expires } = setCookieVal + const { expires } = setCookieVal || {} expect(moment(expires).toISOString()).toEqual( moment(mockNow).add(368, 'days').toISOString() ) @@ -1300,7 +1300,7 @@ describe('cookies.js: setCookie', () => { /** * START: deleteCookie tests */ -describe('cookies.js: deleteCookie', () => { +describe('cookies: deleteCookie', () => { it('sets the expected expired date', async () => { expect.assertions(1) const MOCK_COOKIE_NAME = 'myStuff' @@ -1324,7 +1324,7 @@ describe('cookies.js: deleteCookie', () => { ) const expiresAt = setCookiesParsed.find( (cookie) => cookie.name === MOCK_COOKIE_NAME - ).expires + )?.expires expect(moment(expiresAt).toISOString()).toEqual( moment('1970-01-01T00:00:00.000Z').toISOString() ) @@ -1355,7 +1355,7 @@ describe('cookies.js: deleteCookie', () => { ) expect( setCookiesParsed.find((cookie) => cookie.name === MOCK_COOKIE_NAME) - .value + ?.value ).toEqual('') }, }) diff --git a/src/__tests__/createAuthUser.test.js b/src/__tests__/createAuthUser.test.ts similarity index 100% rename from src/__tests__/createAuthUser.test.js rename to src/__tests__/createAuthUser.test.ts diff --git a/src/__tests__/encoding.test.js b/src/__tests__/encoding.test.ts similarity index 94% rename from src/__tests__/encoding.test.js rename to src/__tests__/encoding.test.ts index 31a22612..5c2cdba6 100644 --- a/src/__tests__/encoding.test.js +++ b/src/__tests__/encoding.test.ts @@ -1,3 +1,6 @@ +// eslint-disable-next-line jest/no-export +export {} + describe('encoding', () => { it('returns the expected encoded value', () => { expect.assertions(1) diff --git a/src/__tests__/firebaseAdmin.test.js b/src/__tests__/firebaseAdmin.test.ts similarity index 71% rename from src/__tests__/firebaseAdmin.test.js rename to src/__tests__/firebaseAdmin.test.ts index adc7e87f..674acd3c 100644 --- a/src/__tests__/firebaseAdmin.test.js +++ b/src/__tests__/firebaseAdmin.test.ts @@ -1,3 +1,7 @@ +/** + * @jest-environment node + */ + import { getAuth } from 'firebase-admin/auth' import { createMockFirebaseUserAdminSDK } from 'src/testHelpers/authUserInputs' import createMockFetchResponse from 'src/testHelpers/createMockFetchResponse' @@ -6,17 +10,45 @@ import { setConfig, getConfig } from 'src/config' import createMockConfig from 'src/testHelpers/createMockConfig' import initFirebaseAdminSDK from 'src/initFirebaseAdminSDK' import logDebug from 'src/logDebug' +import { FirebaseError as FirebaseErrorType } from 'firebase-admin/app' jest.mock('firebase-admin/auth') jest.mock('src/initFirebaseAdminSDK') jest.mock('src/logDebug') +const mockGetAuth = getAuth as jest.Mock +const mockInitFirebaseAdminSDK = jest.mocked(initFirebaseAdminSDK) +const mockLogDebug = jest.mocked(logDebug) + +let fetchSpy: jest.SpyInstance + +// https://github.com/firebase/firebase-admin-node/issues/1666 +class FirebaseError extends Error implements FirebaseErrorType { + constructor(code: string, message: string) { + super(message) + this.code = code + this.message = message + } + + code: string + + message: string + + // Just matching FirebaseErrorType + toJSON(): object { + return { error: this.message } + } +} + // stash and restore the system env vars -let env = null +let env: typeof process.env beforeEach(() => { - // `fetch` is polyfilled by Next.js. - global.fetch = jest.fn(() => Promise.resolve(createMockFetchResponse())) + fetchSpy = jest + .spyOn(global, 'fetch') + .mockImplementation( + jest.fn(() => Promise.resolve(createMockFetchResponse())) as jest.Mock + ) const mockConfig = createMockConfig() setConfig({ @@ -30,8 +62,9 @@ beforeEach(() => { }) afterEach(() => { + env = { NODE_ENV: 'test' } process.env = env - env = null + global.fetch = jest.fn() jest.clearAllMocks() }) @@ -45,10 +78,10 @@ describe('verifyIdToken', () => { expect.assertions(1) const { verifyIdToken } = require('src/firebaseAdmin') const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() + const firebaseAdminAuth = mockGetAuth() firebaseAdminAuth.verifyIdToken.mockResolvedValue(mockFirebaseUser) await verifyIdToken('some-token') - expect(initFirebaseAdminSDK).toHaveBeenCalled() + expect(mockInitFirebaseAdminSDK).toHaveBeenCalled() }) it('returns an AuthUser', async () => { @@ -59,7 +92,7 @@ describe('verifyIdToken', () => { firebaseUserAdminSDK: mockFirebaseUser, token: 'some-token', }) - const firebaseAdminAuth = getAuth() + const firebaseAdminAuth = mockGetAuth() firebaseAdminAuth.verifyIdToken.mockResolvedValue(mockFirebaseUser) const response = await verifyIdToken('some-token') expect(response).toEqual({ @@ -74,7 +107,7 @@ describe('verifyIdToken', () => { expect.assertions(1) const { verifyIdToken } = require('src/firebaseAdmin') const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() + const firebaseAdminAuth = mockGetAuth() firebaseAdminAuth.verifyIdToken.mockResolvedValue(mockFirebaseUser) const AuthUser = await verifyIdToken('some-token') const token = await AuthUser.getIdToken() @@ -86,8 +119,11 @@ describe('verifyIdToken', () => { const { verifyIdToken } = require('src/firebaseAdmin') // Mock the behavior of refreshing the token. - global.fetch.mockImplementation(async (endpoint) => { - if (endpoint.indexOf(googleRefreshTokenEndpoint) === 0) { + fetchSpy.mockImplementation(async (endpoint) => { + if ( + typeof endpoint === 'string' && + endpoint.indexOf(googleRefreshTokenEndpoint) === 0 + ) { return { ...createMockFetchResponse(), json: () => Promise.resolve({ id_token: 'a-new-token' }), @@ -98,19 +134,21 @@ describe('verifyIdToken', () => { }) // Mock that the original token is expired but a new token works. - const expiredTokenErr = new Error( + const expiredTokenErr = new FirebaseError( + 'auth/id-token-expired', 'The provided Firebase ID token is expired.' ) - expiredTokenErr.code = 'auth/id-token-expired' const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() - firebaseAdminAuth.verifyIdToken.mockImplementation(async (token) => { - if (token === 'some-token') { - throw expiredTokenErr - } else { - return mockFirebaseUser + const firebaseAdminAuth = mockGetAuth() + firebaseAdminAuth.verifyIdToken.mockImplementation( + async (token: string) => { + if (token === 'some-token') { + throw expiredTokenErr + } else { + return mockFirebaseUser + } } - }) + ) const AuthUser = await verifyIdToken('some-token', 'my-refresh-token') const token = await AuthUser.getIdToken() expect(token).toEqual('a-new-token') @@ -121,8 +159,11 @@ describe('verifyIdToken', () => { const { verifyIdToken } = require('src/firebaseAdmin') // Mock the behavior of refreshing the token. - global.fetch.mockImplementation(async (endpoint) => { - if (endpoint.indexOf(googleRefreshTokenEndpoint) === 0) { + fetchSpy.mockImplementation(async (endpoint) => { + if ( + typeof endpoint === 'string' && + endpoint.indexOf(googleRefreshTokenEndpoint) === 0 + ) { return { ...createMockFetchResponse(), json: () => Promise.resolve({ id_token: 'a-new-token' }), @@ -133,19 +174,21 @@ describe('verifyIdToken', () => { }) // Mock that the original token is expired but a new token works. - const expiredTokenErr = new Error( + const expiredTokenErr = new FirebaseError( + 'auth/argument-error', 'Firebase ID token has "kid" claim which does not correspond to a known public key. Most likely the ID token is expired, so get a fresh token from your client app and try again.' ) - expiredTokenErr.code = 'auth/argument-error' const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() - firebaseAdminAuth.verifyIdToken.mockImplementation(async (token) => { - if (token === 'some-token') { - throw expiredTokenErr - } else { - return mockFirebaseUser + const firebaseAdminAuth = mockGetAuth() + firebaseAdminAuth.verifyIdToken.mockImplementation( + async (token: string) => { + if (token === 'some-token') { + throw expiredTokenErr + } else { + return mockFirebaseUser + } } - }) + ) const AuthUser = await verifyIdToken('some-token', 'my-refresh-token') const token = await AuthUser.getIdToken() expect(token).toEqual('a-new-token') @@ -157,11 +200,11 @@ describe('verifyIdToken', () => { const { verifyIdToken } = require('src/firebaseAdmin') const { onVerifyTokenError } = getConfig() // Mock that the original token is expired but a new token works. - const expiredTokenErr = new Error( + const expiredTokenErr = new FirebaseError( + 'auth/argument-error', 'Firebase ID token has "kid" claim which does not correspond to a known public key. Most likely the ID token is expired, so get a fresh token from your client app and try again.' ) - expiredTokenErr.code = 'auth/argument-error' - const firebaseAdminAuth = getAuth() + const firebaseAdminAuth = mockGetAuth() firebaseAdminAuth.verifyIdToken.mockImplementation(async () => { throw expiredTokenErr }) @@ -174,7 +217,7 @@ describe('verifyIdToken', () => { const { verifyIdToken } = require('src/firebaseAdmin') // Set the Firebase API key. - const mockConfig = createMockConfig() + const mockConfig = createMockConfig({ clientSide: false }) setConfig({ ...mockConfig, firebaseClientInitConfig: { @@ -184,21 +227,23 @@ describe('verifyIdToken', () => { }) // Mock that the original token is expired but a new token works. - const expiredTokenErr = new Error( + const expiredTokenErr = new FirebaseError( + 'auth/id-token-expired', 'The provided Firebase ID token is expired.' ) - expiredTokenErr.code = 'auth/id-token-expired' const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() - firebaseAdminAuth.verifyIdToken.mockImplementation(async (token) => { - if (token === 'some-token') { - throw expiredTokenErr - } else { - return mockFirebaseUser + const firebaseAdminAuth = mockGetAuth() + firebaseAdminAuth.verifyIdToken.mockImplementation( + async (token: string) => { + if (token === 'some-token') { + throw expiredTokenErr + } else { + return mockFirebaseUser + } } - }) + ) await verifyIdToken('some-token', 'my-refresh-token') - const calledEndpoint = global.fetch.mock.calls[0][0] + const calledEndpoint = (fetchSpy.mock.calls[0] as string[])[0] const keyParam = new URL(calledEndpoint).searchParams.get('key') expect(keyParam).toEqual('the-expected-api-key') }) @@ -208,21 +253,23 @@ describe('verifyIdToken', () => { const { verifyIdToken } = require('src/firebaseAdmin') // Mock that the original token is expired but a new token works. - const expiredTokenErr = new Error( + const expiredTokenErr = new FirebaseError( + 'auth/id-token-expired', 'The provided Firebase ID token is expired.' ) - expiredTokenErr.code = 'auth/id-token-expired' const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() - firebaseAdminAuth.verifyIdToken.mockImplementation(async (token) => { - if (token === 'some-token') { - throw expiredTokenErr - } else { - return mockFirebaseUser + const firebaseAdminAuth = mockGetAuth() + firebaseAdminAuth.verifyIdToken.mockImplementation( + async (token: string) => { + if (token === 'some-token') { + throw expiredTokenErr + } else { + return mockFirebaseUser + } } - }) + ) await verifyIdToken('some-token', 'my-refresh-token') - const fetchOptions = global.fetch.mock.calls[0][1] + const fetchOptions = (fetchSpy.mock.calls[0] as object[])[1] expect(fetchOptions).toEqual({ body: 'grant_type=refresh_token&refresh_token=my-refresh-token', headers: { @@ -236,17 +283,21 @@ describe('verifyIdToken', () => { expect.assertions(2) const { verifyIdToken } = require('src/firebaseAdmin') - const expiredTokenErr = new Error('Mock error message.') - expiredTokenErr.code = 'auth/invalid-user-token' + const expiredTokenErr = new FirebaseError( + 'auth/invalid-user-token', + 'Mock error message.' + ) const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() - firebaseAdminAuth.verifyIdToken.mockImplementation(async (token) => { - if (token === 'some-token') { - throw expiredTokenErr - } else { - return mockFirebaseUser + const firebaseAdminAuth = mockGetAuth() + firebaseAdminAuth.verifyIdToken.mockImplementation( + async (token: string) => { + if (token === 'some-token') { + throw expiredTokenErr + } else { + return mockFirebaseUser + } } - }) + ) const AuthUser = await verifyIdToken('some-token', 'my-refresh-token') expect(AuthUser.id).toEqual(null) const token = await AuthUser.getIdToken() @@ -257,17 +308,21 @@ describe('verifyIdToken', () => { expect.assertions(2) const { verifyIdToken } = require('src/firebaseAdmin') - const expiredTokenErr = new Error('Mock error message.') - expiredTokenErr.code = 'auth/user-token-expired' + const expiredTokenErr = new FirebaseError( + 'auth/user-token-expired', + 'Mock error message.' + ) const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() - firebaseAdminAuth.verifyIdToken.mockImplementation(async (token) => { - if (token === 'some-token') { - throw expiredTokenErr - } else { - return mockFirebaseUser + const firebaseAdminAuth = mockGetAuth() + firebaseAdminAuth.verifyIdToken.mockImplementation( + async (token: string) => { + if (token === 'some-token') { + throw expiredTokenErr + } else { + return mockFirebaseUser + } } - }) + ) const AuthUser = await verifyIdToken('some-token', 'my-refresh-token') expect(AuthUser.id).toEqual(null) const token = await AuthUser.getIdToken() @@ -278,17 +333,21 @@ describe('verifyIdToken', () => { expect.assertions(2) const { verifyIdToken } = require('src/firebaseAdmin') - const expiredTokenErr = new Error('Mock error message.') - expiredTokenErr.code = 'auth/user-disabled' + const expiredTokenErr = new FirebaseError( + 'auth/user-disabled', + 'Mock error message.' + ) const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() - firebaseAdminAuth.verifyIdToken.mockImplementation(async (token) => { - if (token === 'some-token') { - throw expiredTokenErr - } else { - return mockFirebaseUser + const firebaseAdminAuth = mockGetAuth() + firebaseAdminAuth.verifyIdToken.mockImplementation( + async (token: string) => { + if (token === 'some-token') { + throw expiredTokenErr + } else { + return mockFirebaseUser + } } - }) + ) const AuthUser = await verifyIdToken('some-token', 'my-refresh-token') expect(AuthUser.id).toEqual(null) const token = await AuthUser.getIdToken() @@ -299,17 +358,21 @@ describe('verifyIdToken', () => { expect.assertions(2) const { verifyIdToken } = require('src/firebaseAdmin') - const expiredTokenErr = new Error('Mock error message.') - expiredTokenErr.code = 'auth/id-token-expired' + const expiredTokenErr = new FirebaseError( + 'auth/id-token-expired', + 'Mock error message.' + ) const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() - firebaseAdminAuth.verifyIdToken.mockImplementation(async (token) => { - if (token === 'some-token') { - throw expiredTokenErr - } else { - return mockFirebaseUser + const firebaseAdminAuth = mockGetAuth() + firebaseAdminAuth.verifyIdToken.mockImplementation( + async (token: string) => { + if (token === 'some-token') { + throw expiredTokenErr + } else { + return mockFirebaseUser + } } - }) + ) const AuthUser = await verifyIdToken('some-token') expect(AuthUser.id).toEqual(null) const token = await AuthUser.getIdToken() @@ -320,25 +383,27 @@ describe('verifyIdToken', () => { expect.assertions(2) const { verifyIdToken } = require('src/firebaseAdmin') const { onTokenRefreshError } = getConfig() - global.fetch.mockImplementation(async () => ({ + fetchSpy.mockImplementation(async () => ({ ...createMockFetchResponse(), ok: false, status: 500, json: () => Promise.resolve({ error: 'Something happened, sorry.' }), })) - const expiredTokenErr = new Error( + const expiredTokenErr = new FirebaseError( + 'auth/id-token-expired', 'The provided Firebase ID token is expired.' ) - expiredTokenErr.code = 'auth/id-token-expired' const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() - firebaseAdminAuth.verifyIdToken.mockImplementation(async (token) => { - if (token === 'some-token') { - throw expiredTokenErr - } else { - return mockFirebaseUser + const firebaseAdminAuth = mockGetAuth() + firebaseAdminAuth.verifyIdToken.mockImplementation( + async (token: string) => { + if (token === 'some-token') { + throw expiredTokenErr + } else { + return mockFirebaseUser + } } - }) + ) await expect( verifyIdToken('some-token', 'my-refresh-token') ).resolves.not.toThrow() @@ -352,7 +417,7 @@ describe('verifyIdToken', () => { expect.assertions(2) const mockConfig = createMockConfig() - let resolver + let resolver: CallableFunction | undefined let isResolved = false const prom = new Promise((resolve) => { resolver = resolve @@ -370,25 +435,27 @@ describe('verifyIdToken', () => { }) const { verifyIdToken } = require('src/firebaseAdmin') - global.fetch.mockImplementation(async () => ({ + fetchSpy.mockImplementation(async () => ({ ...createMockFetchResponse(), ok: false, status: 500, json: () => Promise.resolve({ error: 'Something happened, sorry.' }), })) - const expiredTokenErr = new Error( + const expiredTokenErr = new FirebaseError( + 'auth/id-token-expired', 'The provided Firebase ID token is expired.' ) - expiredTokenErr.code = 'auth/id-token-expired' const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() - firebaseAdminAuth.verifyIdToken.mockImplementation(async (token) => { - if (token === 'some-token') { - throw expiredTokenErr - } else { - return mockFirebaseUser + const firebaseAdminAuth = mockGetAuth() + firebaseAdminAuth.verifyIdToken.mockImplementation( + async (token: string) => { + if (token === 'some-token') { + throw expiredTokenErr + } else { + return mockFirebaseUser + } } - }) + ) // Not awaiting verifyIdToken here. We'll rely on `expect.assertions`. // eslint-disable-next-line jest/valid-expect-in-promise @@ -396,31 +463,35 @@ describe('verifyIdToken', () => { expect(isResolved).toBe(true) }) expect(isResolved).toBe(false) - resolver() + if (resolver) { + resolver() + } }) it('returns an unauthenticated AuthUser if there is an error refreshing the token', async () => { expect.assertions(2) const { verifyIdToken } = require('src/firebaseAdmin') - global.fetch.mockImplementation(async () => ({ + fetchSpy.mockImplementation(async () => ({ ...createMockFetchResponse(), ok: false, status: 500, json: () => Promise.resolve({ error: 'Something happened, sorry.' }), })) - const expiredTokenErr = new Error( + const expiredTokenErr = new FirebaseError( + 'auth/id-token-expired', 'The provided Firebase ID token is expired.' ) - expiredTokenErr.code = 'auth/id-token-expired' const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() - firebaseAdminAuth.verifyIdToken.mockImplementation(async (token) => { - if (token === 'some-token') { - throw expiredTokenErr - } else { - return mockFirebaseUser + const firebaseAdminAuth = mockGetAuth() + firebaseAdminAuth.verifyIdToken.mockImplementation( + async (token: string) => { + if (token === 'some-token') { + throw expiredTokenErr + } else { + return mockFirebaseUser + } } - }) + ) const AuthUser = await verifyIdToken('some-token', 'my-refresh-token') expect(AuthUser.id).toEqual(null) const token = await AuthUser.getIdToken() @@ -431,8 +502,11 @@ describe('verifyIdToken', () => { expect.assertions(2) const { verifyIdToken } = require('src/firebaseAdmin') const { onVerifyTokenError } = getConfig() - global.fetch.mockImplementation(async (endpoint) => { - if (endpoint.indexOf(googleRefreshTokenEndpoint) === 0) { + fetchSpy.mockImplementation(async (endpoint) => { + if ( + typeof endpoint === 'string' && + endpoint.indexOf(googleRefreshTokenEndpoint) === 0 + ) { return { ...createMockFetchResponse(), json: () => Promise.resolve({ id_token: 'a-new-token' }), @@ -441,9 +515,11 @@ describe('verifyIdToken', () => { // Mock a 500 response from Google token refresh. return { ...createMockFetchResponse(), ok: false, status: 500 } }) - const otherErr = new Error('The Firebase ID token has been revoked.') - otherErr.code = 'auth/id-token-revoked' // a different error - const firebaseAdminAuth = getAuth() + const otherErr = new FirebaseError( + 'auth/id-token-revoked', // a different error + 'The Firebase ID token has been revoked.' + ) + const firebaseAdminAuth = mockGetAuth() firebaseAdminAuth.verifyIdToken.mockImplementation(async () => { throw otherErr }) @@ -457,7 +533,7 @@ describe('verifyIdToken', () => { expect.assertions(2) const mockConfig = createMockConfig() - let resolver + let resolver: CallableFunction | undefined let isResolved = false const prom = new Promise((resolve) => { resolver = resolve @@ -475,8 +551,11 @@ describe('verifyIdToken', () => { }) const { verifyIdToken } = require('src/firebaseAdmin') - global.fetch.mockImplementation(async (endpoint) => { - if (endpoint.indexOf(googleRefreshTokenEndpoint) === 0) { + fetchSpy.mockImplementation(async (endpoint) => { + if ( + typeof endpoint === 'string' && + endpoint.indexOf(googleRefreshTokenEndpoint) === 0 + ) { return { ...createMockFetchResponse(), json: () => Promise.resolve({ id_token: 'a-new-token' }), @@ -485,9 +564,11 @@ describe('verifyIdToken', () => { // Mock a 500 response from Google token refresh. return { ...createMockFetchResponse(), ok: false, status: 500 } }) - const otherErr = new Error('The Firebase ID token has been revoked.') - otherErr.code = 'auth/id-token-revoked' // a different error - const firebaseAdminAuth = getAuth() + const otherErr = new FirebaseError( + 'auth/id-token-revoked', // a different error + 'The Firebase ID token has been revoked.' + ) + const firebaseAdminAuth = mockGetAuth() firebaseAdminAuth.verifyIdToken.mockImplementation(async () => { throw otherErr }) @@ -498,14 +579,19 @@ describe('verifyIdToken', () => { expect(isResolved).toBe(true) }) expect(isResolved).toBe(false) - resolver() + if (resolver) { + resolver() + } }) it("returns an unauthenticated AuthUser if Firebase admin's verifyIdToken throws something other than an expired token error", async () => { expect.assertions(2) const { verifyIdToken } = require('src/firebaseAdmin') - global.fetch.mockImplementation(async (endpoint) => { - if (endpoint.indexOf(googleRefreshTokenEndpoint) === 0) { + fetchSpy.mockImplementation(async (endpoint) => { + if ( + typeof endpoint === 'string' && + endpoint.indexOf(googleRefreshTokenEndpoint) === 0 + ) { return { ...createMockFetchResponse(), json: () => Promise.resolve({ id_token: 'a-new-token' }), @@ -514,9 +600,11 @@ describe('verifyIdToken', () => { // Mock a 500 response from Google token refresh. return { ...createMockFetchResponse(), ok: false, status: 500 } }) - const otherErr = new Error('The Firebase ID token has been revoked.') - otherErr.code = 'auth/id-token-revoked' // a different error - const firebaseAdminAuth = getAuth() + const otherErr = new FirebaseError( + 'auth/id-token-revoked', // a different error + 'The Firebase ID token has been revoked.' + ) + const firebaseAdminAuth = mockGetAuth() firebaseAdminAuth.verifyIdToken.mockImplementation(async () => { throw otherErr }) @@ -533,11 +621,11 @@ describe('verifyIdToken', () => { // Mock that verifyIdToken throws a "token expired" error even for // the refreshed token, for some reason. - const expiredTokenErr = new Error( + const expiredTokenErr = new FirebaseError( + 'auth/id-token-expired', 'The provided Firebase ID token is expired.' ) - expiredTokenErr.code = 'auth/id-token-expired' - const firebaseAdminAuth = getAuth() + const firebaseAdminAuth = mockGetAuth() firebaseAdminAuth.verifyIdToken.mockImplementation(async () => { throw expiredTokenErr }) @@ -551,7 +639,7 @@ describe('verifyIdToken', () => { expect.assertions(2) const mockConfig = createMockConfig() - let resolver + let resolver: CallableFunction | undefined let isResolved = false const prom = new Promise((resolve) => { resolver = resolve @@ -572,11 +660,11 @@ describe('verifyIdToken', () => { // Mock that verifyIdToken throws a "token expired" error even for // the refreshed token, for some reason. - const expiredTokenErr = new Error( + const expiredTokenErr = new FirebaseError( + 'auth/id-token-expired', 'The provided Firebase ID token is expired.' ) - expiredTokenErr.code = 'auth/id-token-expired' - const firebaseAdminAuth = getAuth() + const firebaseAdminAuth = mockGetAuth() firebaseAdminAuth.verifyIdToken.mockImplementation(async () => { throw expiredTokenErr }) @@ -587,7 +675,9 @@ describe('verifyIdToken', () => { expect(isResolved).toBe(true) }) expect(isResolved).toBe(false) - resolver() + if (resolver) { + resolver() + } }) it("returns an unauthenticated AuthUser if Firebase admin's verifyIdToken throws an error for the refreshed token", async () => { @@ -596,11 +686,11 @@ describe('verifyIdToken', () => { // Mock that verifyIdToken throws a "token expired" error even for // the refreshed token, for some reason. - const expiredTokenErr = new Error( + const expiredTokenErr = new FirebaseError( + 'auth/id-token-expired', 'The provided Firebase ID token is expired.' ) - expiredTokenErr.code = 'auth/id-token-expired' - const firebaseAdminAuth = getAuth() + const firebaseAdminAuth = mockGetAuth() firebaseAdminAuth.verifyIdToken.mockImplementation(async () => { throw expiredTokenErr }) @@ -614,84 +704,96 @@ describe('verifyIdToken', () => { expect.assertions(2) const { verifyIdToken } = require('src/firebaseAdmin') const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() + const firebaseAdminAuth = mockGetAuth() firebaseAdminAuth.verifyIdToken.mockResolvedValue(mockFirebaseUser) - logDebug.mockClear() + mockLogDebug.mockClear() await verifyIdToken('some-token') - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[verifyIdToken] Successfully verified the ID token. The user is authenticated.' ) - expect(logDebug).toHaveBeenCalledTimes(1) + expect(mockLogDebug).toHaveBeenCalledTimes(1) }) it('logs debugging logs as expected if verifying the token fails with auth/invalid-user-token', async () => { expect.assertions(2) const { verifyIdToken } = require('src/firebaseAdmin') - const expiredTokenErr = new Error('Mock error message.') - expiredTokenErr.code = 'auth/invalid-user-token' + const expiredTokenErr = new FirebaseError( + 'auth/invalid-user-token', + 'Mock error message.' + ) const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() - firebaseAdminAuth.verifyIdToken.mockImplementation(async (token) => { - if (token === 'some-token') { - throw expiredTokenErr - } else { - return mockFirebaseUser + const firebaseAdminAuth = mockGetAuth() + firebaseAdminAuth.verifyIdToken.mockImplementation( + async (token: string) => { + if (token === 'some-token') { + throw expiredTokenErr + } else { + return mockFirebaseUser + } } - }) - logDebug.mockClear() + ) + mockLogDebug.mockClear() await verifyIdToken('some-token', 'my-refresh-token') - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[verifyIdToken] Error verifying the ID token: auth/invalid-user-token. The user will be unauthenticated.' ) - expect(logDebug).toHaveBeenCalledTimes(1) + expect(mockLogDebug).toHaveBeenCalledTimes(1) }) it('logs debugging logs as expected if verifying the token fails with auth/user-token-expired', async () => { expect.assertions(2) const { verifyIdToken } = require('src/firebaseAdmin') - const expiredTokenErr = new Error('Mock error message.') - expiredTokenErr.code = 'auth/user-token-expired' + const expiredTokenErr = new FirebaseError( + 'auth/user-token-expired', + 'Mock error message.' + ) const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() - firebaseAdminAuth.verifyIdToken.mockImplementation(async (token) => { - if (token === 'some-token') { - throw expiredTokenErr - } else { - return mockFirebaseUser + const firebaseAdminAuth = mockGetAuth() + firebaseAdminAuth.verifyIdToken.mockImplementation( + async (token: string) => { + if (token === 'some-token') { + throw expiredTokenErr + } else { + return mockFirebaseUser + } } - }) - logDebug.mockClear() + ) + mockLogDebug.mockClear() await verifyIdToken('some-token', 'my-refresh-token') - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[verifyIdToken] Error verifying the ID token: auth/user-token-expired. The user will be unauthenticated.' ) - expect(logDebug).toHaveBeenCalledTimes(1) + expect(mockLogDebug).toHaveBeenCalledTimes(1) }) it('logs debugging logs as expected if verifying the token fails with auth/user-disabled', async () => { expect.assertions(2) const { verifyIdToken } = require('src/firebaseAdmin') - const expiredTokenErr = new Error('Mock error message.') - expiredTokenErr.code = 'auth/user-disabled' + const expiredTokenErr = new FirebaseError( + 'auth/user-disabled', + 'Mock error message.' + ) const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() - firebaseAdminAuth.verifyIdToken.mockImplementation(async (token) => { - if (token === 'some-token') { - throw expiredTokenErr - } else { - return mockFirebaseUser + const firebaseAdminAuth = mockGetAuth() + firebaseAdminAuth.verifyIdToken.mockImplementation( + async (token: string) => { + if (token === 'some-token') { + throw expiredTokenErr + } else { + return mockFirebaseUser + } } - }) - logDebug.mockClear() + ) + mockLogDebug.mockClear() await verifyIdToken('some-token', 'my-refresh-token') - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[verifyIdToken] Error verifying the ID token: auth/user-disabled. The user will be unauthenticated.' ) - expect(logDebug).toHaveBeenCalledTimes(1) + expect(mockLogDebug).toHaveBeenCalledTimes(1) }) it('logs debugging logs as expected when the token is successfully refreshed because of a Firebase auth/argument-error error', async () => { @@ -699,8 +801,11 @@ describe('verifyIdToken', () => { const { verifyIdToken } = require('src/firebaseAdmin') // Mock the behavior of refreshing the token. - global.fetch.mockImplementation(async (endpoint) => { - if (endpoint.indexOf(googleRefreshTokenEndpoint) === 0) { + fetchSpy.mockImplementation(async (endpoint) => { + if ( + typeof endpoint === 'string' && + endpoint.indexOf(googleRefreshTokenEndpoint) === 0 + ) { return { ...createMockFetchResponse(), json: () => Promise.resolve({ id_token: 'a-new-token' }), @@ -711,71 +816,78 @@ describe('verifyIdToken', () => { }) // Mock that the original token is expired but a new token works. - const expiredTokenErr = new Error( + const expiredTokenErr = new FirebaseError( + 'auth/argument-error', 'Firebase ID token has "kid" claim which does not correspond to a known public key. Most likely the ID token is expired, so get a fresh token from your client app and try again.' ) - expiredTokenErr.code = 'auth/argument-error' const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() - firebaseAdminAuth.verifyIdToken.mockImplementation(async (token) => { - if (token === 'some-token') { - throw expiredTokenErr - } else { - return mockFirebaseUser + const firebaseAdminAuth = mockGetAuth() + firebaseAdminAuth.verifyIdToken.mockImplementation( + async (token: string) => { + if (token === 'some-token') { + throw expiredTokenErr + } else { + return mockFirebaseUser + } } - }) - logDebug.mockClear() + ) + mockLogDebug.mockClear() await verifyIdToken('some-token', 'my-refresh-token') - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[verifyIdToken] The ID token is expired (error code auth/argument-error). Attempting to refresh the ID token.' ) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[verifyIdToken] Successfully refreshed the ID token.' ) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[verifyIdToken] Successfully verified the ID token. The user is authenticated.' ) - expect(logDebug).toHaveBeenCalledTimes(3) + expect(mockLogDebug).toHaveBeenCalledTimes(3) }) it('logs debugging logs as expected when there is an error refreshing the token', async () => { expect.assertions(3) const { verifyIdToken } = require('src/firebaseAdmin') - global.fetch.mockImplementation(async () => ({ + fetchSpy.mockImplementation(async () => ({ ...createMockFetchResponse(), ok: false, status: 500, json: () => Promise.resolve({ error: 'Something happened, sorry.' }), })) - const expiredTokenErr = new Error( + const expiredTokenErr = new FirebaseError( + 'auth/id-token-expired', 'The provided Firebase ID token is expired.' ) - expiredTokenErr.code = 'auth/id-token-expired' const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() - firebaseAdminAuth.verifyIdToken.mockImplementation(async (token) => { - if (token === 'some-token') { - throw expiredTokenErr - } else { - return mockFirebaseUser + const firebaseAdminAuth = mockGetAuth() + firebaseAdminAuth.verifyIdToken.mockImplementation( + async (token: string) => { + if (token === 'some-token') { + throw expiredTokenErr + } else { + return mockFirebaseUser + } } - }) - logDebug.mockClear() + ) + mockLogDebug.mockClear() await verifyIdToken('some-token', 'my-refresh-token') - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[verifyIdToken] The ID token is expired (error code auth/id-token-expired). Attempting to refresh the ID token.' ) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[verifyIdToken] Failed to refresh the ID token. The user will be unauthenticated.' ) - expect(logDebug).toHaveBeenCalledTimes(2) + expect(mockLogDebug).toHaveBeenCalledTimes(2) }) it("logs debugging logs as expected when Firebase admin's verifyIdToken throws an unhandled error code", async () => { expect.assertions(2) const { verifyIdToken } = require('src/firebaseAdmin') - global.fetch.mockImplementation(async (endpoint) => { - if (endpoint.indexOf(googleRefreshTokenEndpoint) === 0) { + fetchSpy.mockImplementation(async (endpoint) => { + if ( + typeof endpoint === 'string' && + endpoint.indexOf(googleRefreshTokenEndpoint) === 0 + ) { return { ...createMockFetchResponse(), json: () => Promise.resolve({ id_token: 'a-new-token' }), @@ -784,26 +896,28 @@ describe('verifyIdToken', () => { // Mock a 500 response from Google token refresh. return { ...createMockFetchResponse(), ok: false, status: 500 } }) - const otherErr = new Error('The Firebase ID token has been revoked.') - otherErr.code = 'auth/some-unexpected-error' // a different error - const firebaseAdminAuth = getAuth() + const otherErr = new FirebaseError( + 'auth/some-unexpected-error', // a different error + 'The Firebase ID token has been revoked.' + ) + const firebaseAdminAuth = mockGetAuth() firebaseAdminAuth.verifyIdToken.mockImplementation(async () => { throw otherErr }) - logDebug.mockClear() + mockLogDebug.mockClear() await verifyIdToken('some-token', 'my-refresh-token') - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[verifyIdToken] Error verifying the ID token: auth/some-unexpected-error. The user will be unauthenticated.' ) - expect(logDebug).toHaveBeenCalledTimes(1) + expect(mockLogDebug).toHaveBeenCalledTimes(1) }) it('throws a helpful error if `fetch` is not defined', async () => { expect.assertions(1) - delete global.fetch // no fetch + global.fetch = undefined as unknown as typeof global.fetch const { verifyIdToken } = require('src/firebaseAdmin') const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() + const firebaseAdminAuth = mockGetAuth() firebaseAdminAuth.verifyIdToken.mockResolvedValue(mockFirebaseUser) await expect(verifyIdToken('some-token')).rejects.toThrow( 'A `fetch` global is required when using next-firebase-auth. See documentation on setting up a `fetch` polyfill.' @@ -817,7 +931,7 @@ describe('getCustomIdAndRefreshTokens', () => { it('calls initFirebaseAdminSDK', async () => { expect.assertions(1) const { getCustomIdAndRefreshTokens } = require('src/firebaseAdmin') - global.fetch.mockReturnValue({ + fetchSpy.mockResolvedValue({ ...createMockFetchResponse(), json: () => Promise.resolve({ @@ -826,18 +940,18 @@ describe('getCustomIdAndRefreshTokens', () => { }), }) const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() + const firebaseAdminAuth = mockGetAuth() firebaseAdminAuth.verifyIdToken.mockResolvedValue(mockFirebaseUser) firebaseAdminAuth.createCustomToken.mockResolvedValue('my-custom-token') await getCustomIdAndRefreshTokens('some-token') - expect(initFirebaseAdminSDK).toHaveBeenCalled() + expect(mockInitFirebaseAdminSDK).toHaveBeenCalled() }) it("passes the Firebase user's ID (from verifyIdToken) to createCustomToken", async () => { expect.assertions(1) const { getCustomIdAndRefreshTokens } = require('src/firebaseAdmin') const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() + const firebaseAdminAuth = mockGetAuth() firebaseAdminAuth.verifyIdToken.mockResolvedValue(mockFirebaseUser) firebaseAdminAuth.createCustomToken.mockResolvedValue('my-custom-token') await getCustomIdAndRefreshTokens('some-token') @@ -862,12 +976,12 @@ describe('getCustomIdAndRefreshTokens', () => { }) const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() + const firebaseAdminAuth = mockGetAuth() firebaseAdminAuth.verifyIdToken.mockResolvedValue(mockFirebaseUser) firebaseAdminAuth.createCustomToken.mockResolvedValue('my-custom-token') await getCustomIdAndRefreshTokens('some-token') - const endpoint = global.fetch.mock.calls[0][0] + const endpoint = fetchSpy.mock.calls[0][0] expect(endpoint).toEqual( `${googleCustomTokenEndpoint}?key=${expectedAPIKey}` ) @@ -892,12 +1006,12 @@ describe('getCustomIdAndRefreshTokens', () => { const authEmulatorEndpoint = 'http://localhost:9099/identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken' const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() + const firebaseAdminAuth = mockGetAuth() firebaseAdminAuth.verifyIdToken.mockResolvedValue(mockFirebaseUser) firebaseAdminAuth.createCustomToken.mockResolvedValue('my-custom-token') await getCustomIdAndRefreshTokens('some-token') - const endpoint = global.fetch.mock.calls[0][0] + const endpoint = fetchSpy.mock.calls[0][0] expect(endpoint).toEqual(`${authEmulatorEndpoint}?key=${expectedAPIKey}`) }) @@ -905,11 +1019,11 @@ describe('getCustomIdAndRefreshTokens', () => { expect.assertions(1) const { getCustomIdAndRefreshTokens } = require('src/firebaseAdmin') const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() + const firebaseAdminAuth = mockGetAuth() firebaseAdminAuth.verifyIdToken.mockResolvedValue(mockFirebaseUser) firebaseAdminAuth.createCustomToken.mockResolvedValue('my-custom-token') await getCustomIdAndRefreshTokens('some-token') - const options = global.fetch.mock.calls[0][1] + const options = fetchSpy.mock.calls[0][1] expect(options).toEqual({ body: '{"token":"my-custom-token","returnSecureToken":true}', headers: { @@ -924,7 +1038,7 @@ describe('getCustomIdAndRefreshTokens', () => { const { getCustomIdAndRefreshTokens } = require('src/firebaseAdmin') // Mock the behavior of getting a custom token. - global.fetch.mockReturnValue({ + fetchSpy.mockResolvedValue({ ...createMockFetchResponse(), json: () => Promise.resolve({ @@ -934,7 +1048,7 @@ describe('getCustomIdAndRefreshTokens', () => { }) const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() + const firebaseAdminAuth = mockGetAuth() firebaseAdminAuth.verifyIdToken.mockResolvedValue(mockFirebaseUser) firebaseAdminAuth.createCustomToken.mockResolvedValue('my-custom-token') const response = await getCustomIdAndRefreshTokens('some-token') @@ -950,7 +1064,7 @@ describe('getCustomIdAndRefreshTokens', () => { const { getCustomIdAndRefreshTokens } = require('src/firebaseAdmin') // Mock the behavior of getting a custom token. - global.fetch.mockReturnValue({ + fetchSpy.mockResolvedValue({ ...createMockFetchResponse(), json: () => Promise.resolve({ @@ -963,7 +1077,7 @@ describe('getCustomIdAndRefreshTokens', () => { const expectedAuthUser = createAuthUser({ firebaseUserAdminSDK: mockFirebaseUser, }) - const firebaseAdminAuth = getAuth() + const firebaseAdminAuth = mockGetAuth() firebaseAdminAuth.verifyIdToken.mockResolvedValue(mockFirebaseUser) firebaseAdminAuth.createCustomToken.mockResolvedValue('my-custom-token') const response = await getCustomIdAndRefreshTokens('some-token') @@ -981,7 +1095,7 @@ describe('getCustomIdAndRefreshTokens', () => { const { getCustomIdAndRefreshTokens } = require('src/firebaseAdmin') // Mock the behavior of getting a custom token. - global.fetch.mockReturnValue({ + fetchSpy.mockResolvedValue({ ...createMockFetchResponse(), json: () => Promise.resolve({ @@ -991,9 +1105,11 @@ describe('getCustomIdAndRefreshTokens', () => { }) // Mock that the ID token is invalid. - const expiredTokenErr = new Error('Mock error message.') - expiredTokenErr.code = 'auth/invalid-user-token' - const firebaseAdminAuth = getAuth() + const expiredTokenErr = new FirebaseError( + 'auth/invalid-user-token', + 'Mock error message.' + ) + const firebaseAdminAuth = mockGetAuth() firebaseAdminAuth.verifyIdToken.mockImplementation(() => expiredTokenErr) firebaseAdminAuth.createCustomToken.mockResolvedValue('my-custom-token') @@ -1008,7 +1124,7 @@ describe('getCustomIdAndRefreshTokens', () => { const { getCustomIdAndRefreshTokens } = require('src/firebaseAdmin') // Mock the behavior of getting a custom token. - global.fetch.mockReturnValue({ + fetchSpy.mockResolvedValue({ ...createMockFetchResponse(), ok: false, status: 500, @@ -1019,7 +1135,7 @@ describe('getCustomIdAndRefreshTokens', () => { }) const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() + const firebaseAdminAuth = mockGetAuth() firebaseAdminAuth.verifyIdToken.mockResolvedValue(mockFirebaseUser) firebaseAdminAuth.createCustomToken.mockResolvedValue('my-custom-token') await expect(getCustomIdAndRefreshTokens('some-token')).rejects.toEqual( @@ -1032,7 +1148,7 @@ describe('getCustomIdAndRefreshTokens', () => { const { getCustomIdAndRefreshTokens } = require('src/firebaseAdmin') // Mock the behavior of getting a custom token. - global.fetch.mockReturnValue({ + fetchSpy.mockResolvedValue({ ...createMockFetchResponse(), json: () => Promise.resolve({ @@ -1042,19 +1158,19 @@ describe('getCustomIdAndRefreshTokens', () => { }) const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() + const firebaseAdminAuth = mockGetAuth() firebaseAdminAuth.verifyIdToken.mockResolvedValue(mockFirebaseUser) firebaseAdminAuth.createCustomToken.mockResolvedValue('my-custom-token') - logDebug.mockClear() + mockLogDebug.mockClear() await getCustomIdAndRefreshTokens('some-token') - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[setAuthCookies] Getting a refresh token from the ID token.' ) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[verifyIdToken] Successfully verified the ID token. The user is authenticated.' ) - expect(logDebug).toHaveBeenCalledTimes(2) + expect(mockLogDebug).toHaveBeenCalledTimes(2) }) it('logs debugging logs as expected when failing to get a refresh token', async () => { @@ -1062,7 +1178,7 @@ describe('getCustomIdAndRefreshTokens', () => { const { getCustomIdAndRefreshTokens } = require('src/firebaseAdmin') // Mock the behavior of getting a custom token. - global.fetch.mockReturnValue({ + fetchSpy.mockResolvedValue({ ...createMockFetchResponse(), ok: false, status: 500, @@ -1073,36 +1189,37 @@ describe('getCustomIdAndRefreshTokens', () => { }) const mockFirebaseUser = createMockFirebaseUserAdminSDK() - const firebaseAdminAuth = getAuth() + const firebaseAdminAuth = mockGetAuth() firebaseAdminAuth.verifyIdToken.mockResolvedValue(mockFirebaseUser) firebaseAdminAuth.createCustomToken.mockResolvedValue('my-custom-token') - logDebug.mockClear() + mockLogDebug.mockClear() try { await getCustomIdAndRefreshTokens('some-token') // We expect this to throw. // eslint-disable-next-line no-empty } catch (e) {} - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[setAuthCookies] Getting a refresh token from the ID token.' ) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[verifyIdToken] Successfully verified the ID token. The user is authenticated.' ) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[setAuthCookies] Failed to get a refresh token from the ID token.' ) - expect(logDebug).toHaveBeenCalledTimes(3) + expect(mockLogDebug).toHaveBeenCalledTimes(3) }) it('throws a helpful error if `fetch` is not defined', async () => { expect.assertions(1) const { getCustomIdAndRefreshTokens } = require('src/firebaseAdmin') - delete global.fetch + // Pretend fetch is undefined + global.fetch = undefined as unknown as typeof global.fetch - const firebaseAdminAuth = getAuth() + const firebaseAdminAuth = mockGetAuth() firebaseAdminAuth.verifyIdToken.mockResolvedValue( createMockFirebaseUserAdminSDK() ) diff --git a/src/__tests__/getUserFromCookies.test.js b/src/__tests__/getUserFromCookies.test.ts similarity index 77% rename from src/__tests__/getUserFromCookies.test.js rename to src/__tests__/getUserFromCookies.test.ts index 2805e6f6..d8c3ab46 100644 --- a/src/__tests__/getUserFromCookies.test.js +++ b/src/__tests__/getUserFromCookies.test.ts @@ -13,6 +13,7 @@ import { getAuthUserTokensSigCookieName, } from 'src/authCookies' import logDebug from 'src/logDebug' +import { NextApiRequest } from 'next' /** * We intentionally don't mock a few modules whose behavior we want to @@ -26,16 +27,26 @@ jest.mock('src/authCookies') jest.mock('src/isClientSide') jest.mock('src/logDebug') +const mockGetCookie = jest.mocked(getCookie) +const mockVerifyIdToken = verifyIdToken as jest.Mock +const mockGetAuthUserCookieName = jest.mocked(getAuthUserCookieName) +const mockGetAuthUserSigCookieName = jest.mocked(getAuthUserSigCookieName) +const mockGetAuthUserTokensCookieName = jest.mocked(getAuthUserTokensCookieName) +const mockGetAuthUserTokensSigCookieName = jest.mocked( + getAuthUserTokensSigCookieName +) +const mockLogDebug = jest.mocked(logDebug) + beforeEach(() => { // This is always called server-side. const isClientSide = require('src/isClientSide').default isClientSide.mockReturnValue(false) - getAuthUserCookieName.mockReturnValue('SomeName.AuthUser') - getAuthUserTokensCookieName.mockReturnValue('SomeName.AuthUserTokens') + mockGetAuthUserCookieName.mockReturnValue('SomeName.AuthUser') + mockGetAuthUserTokensCookieName.mockReturnValue('SomeName.AuthUserTokens') // Default to an authed user. - getCookie.mockImplementation((cookieName) => { + mockGetCookie.mockImplementation((cookieName) => { if (cookieName === 'SomeName.AuthUserTokens') { return JSON.stringify({ idToken: 'some-id-token', @@ -67,7 +78,7 @@ describe('getUserFromCookies: with ID token', () => { it('returns an authenticated user', async () => { expect.assertions(1) - getCookie.mockImplementation((cookieName) => { + mockGetCookie.mockImplementation((cookieName) => { if (cookieName === 'SomeName.AuthUserTokens') { return JSON.stringify({ idToken: 'some-id-token', @@ -88,15 +99,15 @@ describe('getUserFromCookies: with ID token', () => { token: 'a-user-identity-token-abc', firebaseUserAdminSDK: mockFirebaseAdminUser, }) - verifyIdToken.mockResolvedValue(expectedUser) - const mockReq = {} + mockVerifyIdToken.mockResolvedValue(expectedUser) + const mockReq = {} as NextApiRequest const user = await getUserFromCookies({ req: mockReq }) expect(user).toEqual(expectedUser) }) it('uses the ID token, not the auth info cookie, when "includeToken" is true', async () => { expect.assertions(1) - getCookie.mockImplementation((cookieName) => { + mockGetCookie.mockImplementation((cookieName) => { if (cookieName === 'SomeName.AuthUserTokens') { return JSON.stringify({ idToken: 'some-id-token', @@ -118,15 +129,15 @@ describe('getUserFromCookies: with ID token', () => { token: 'a-user-identity-token-abc', firebaseUserAdminSDK: mockFirebaseAdminUser, }) - verifyIdToken.mockResolvedValue(expectedUser) - const mockReq = {} + mockVerifyIdToken.mockResolvedValue(expectedUser) + const mockReq = {} as NextApiRequest const user = await getUserFromCookies({ req: mockReq, includeToken: true }) expect(user).toEqual(expectedUser) }) it('returns an unauthed user object when no user exists', async () => { expect.assertions(1) - getCookie.mockImplementation((cookieName) => { + mockGetCookie.mockImplementation((cookieName) => { if (cookieName === 'SomeName.AuthUserTokens') { return JSON.stringify({ idToken: 'some-id-token', @@ -140,11 +151,11 @@ describe('getUserFromCookies: with ID token', () => { } return undefined }) - getCookie.mockReturnValue(undefined) // the user has no auth cookies + mockGetCookie.mockReturnValue(undefined) // the user has no auth cookies const mockFirebaseAdminUser = undefined - verifyIdToken.mockResolvedValue(mockFirebaseAdminUser) + mockVerifyIdToken.mockResolvedValue(mockFirebaseAdminUser) const expectedUser = createAuthUser() - const mockReq = {} + const mockReq = {} as NextApiRequest const user = await getUserFromCookies({ req: mockReq }) expect(user).toEqual({ ...expectedUser, @@ -156,7 +167,7 @@ describe('getUserFromCookies: with ID token', () => { it('passes the expected values to getCookie', async () => { expect.assertions(1) - getAuthUserTokensCookieName.mockReturnValue('MyCookie.AuthUserTokens') + mockGetAuthUserTokensCookieName.mockReturnValue('MyCookie.AuthUserTokens') const mockConfig = getMockConfig() setConfig({ ...mockConfig, @@ -168,9 +179,9 @@ describe('getUserFromCookies: with ID token', () => { signed: true, }, }) - const mockReq = {} + const mockReq = {} as NextApiRequest await getUserFromCookies({ req: mockReq }) - expect(getCookie).toHaveBeenCalledWith( + expect(mockGetCookie).toHaveBeenCalledWith( 'MyCookie.AuthUserTokens', { req: mockReq, @@ -181,7 +192,7 @@ describe('getUserFromCookies: with ID token', () => { it('passes the idToken and refreshToken from the auth cookie to verifyIdToken', async () => { expect.assertions(1) - getCookie.mockImplementation((cookieName) => { + mockGetCookie.mockImplementation((cookieName) => { if (cookieName === 'SomeName.AuthUserTokens') { return JSON.stringify({ idToken: 'some-id-token-24680', @@ -200,10 +211,10 @@ describe('getUserFromCookies: with ID token', () => { token: 'a-user-identity-token-abc', firebaseUserAdminSDK: mockFirebaseAdminUser, }) - verifyIdToken.mockResolvedValue(expectedUser) - const mockReq = {} + mockVerifyIdToken.mockResolvedValue(expectedUser) + const mockReq = {} as NextApiRequest await getUserFromCookies({ req: mockReq }) - expect(verifyIdToken).toHaveBeenCalledWith( + expect(mockVerifyIdToken).toHaveBeenCalledWith( 'some-id-token-24680', 'some-refresh-token-13579' ) @@ -211,7 +222,7 @@ describe('getUserFromCookies: with ID token', () => { it('throws if verifyIdToken throws', async () => { expect.assertions(1) - getCookie.mockImplementation((cookieName) => { + mockGetCookie.mockImplementation((cookieName) => { if (cookieName === 'SomeName.AuthUserTokens') { return JSON.stringify({ idToken: 'some-id-token', @@ -226,8 +237,8 @@ describe('getUserFromCookies: with ID token', () => { return undefined }) const mockErr = new Error('Invalid thing.') - verifyIdToken.mockImplementationOnce(() => Promise.reject(mockErr)) - const mockReq = {} + mockVerifyIdToken.mockImplementationOnce(() => Promise.reject(mockErr)) + const mockReq = {} as NextApiRequest await expect(getUserFromCookies({ req: mockReq })).rejects.toEqual(mockErr) }) @@ -236,7 +247,7 @@ describe('getUserFromCookies: with ID token', () => { await testApiHandler({ handler: async (req, res) => { await getUserFromCookies({ req, includeToken: true }) - const { req: passedReq } = getCookie.mock.calls[0][1] + const { req: passedReq } = mockGetCookie.mock.calls[0][1] expect(passedReq).toEqual(req) expect(passedReq.headers.cookie).toEqual('someStuff=foo;') return res.status(200).end() @@ -254,10 +265,10 @@ describe('getUserFromCookies: with ID token', () => { it('passes the expected request object structure to getCookie when cookie values are provided *instead of* the `req` object (incl. signed cookie)', async () => { expect.assertions(1) - getAuthUserCookieName.mockReturnValue('MyCookie.AuthUser') - getAuthUserSigCookieName.mockReturnValue('MyCookie.AuthUser.sig') - getAuthUserTokensCookieName.mockReturnValue('MyCookie.AuthUserTokens') - getAuthUserTokensSigCookieName.mockReturnValue( + mockGetAuthUserCookieName.mockReturnValue('MyCookie.AuthUser') + mockGetAuthUserSigCookieName.mockReturnValue('MyCookie.AuthUser.sig') + mockGetAuthUserTokensCookieName.mockReturnValue('MyCookie.AuthUserTokens') + mockGetAuthUserTokensSigCookieName.mockReturnValue( 'MyCookie.AuthUserTokens.sig' ) const authCookieValue = 'thequickbrownfox' @@ -273,16 +284,16 @@ describe('getUserFromCookies: with ID token', () => { 'MyCookie.AuthUserTokens=thequickbrownfox; MyCookie.AuthUserTokens.sig=1q2w3e4r;', }, } - const { req: passedReq } = getCookie.mock.calls[0][1] + const { req: passedReq } = mockGetCookie.mock.calls[0][1] expect(passedReq).toEqual(expectedReqObj) }) it('passes the expected request object structure to getCookie when cookie values are provided *instead of* the `req` object (*not* incl. signed cookie)', async () => { expect.assertions(1) - getAuthUserCookieName.mockReturnValue('MyCookie.AuthUser') - getAuthUserSigCookieName.mockReturnValue('MyCookie.AuthUser.sig') - getAuthUserTokensCookieName.mockReturnValue('MyCookie.AuthUserTokens') - getAuthUserTokensSigCookieName.mockReturnValue( + mockGetAuthUserCookieName.mockReturnValue('MyCookie.AuthUser') + mockGetAuthUserSigCookieName.mockReturnValue('MyCookie.AuthUser.sig') + mockGetAuthUserTokensCookieName.mockReturnValue('MyCookie.AuthUserTokens') + mockGetAuthUserTokensSigCookieName.mockReturnValue( 'MyCookie.AuthUserTokens.sig' ) const authCookieValue = 'thequickbrownfox' @@ -297,7 +308,7 @@ describe('getUserFromCookies: with ID token', () => { cookie: 'MyCookie.AuthUserTokens=thequickbrownfox;', }, } - const { req: passedReq } = getCookie.mock.calls[0][1] + const { req: passedReq } = mockGetCookie.mock.calls[0][1] expect(passedReq).toEqual(expectedReqObj) }) @@ -316,7 +327,7 @@ describe('getUserFromCookies: with ID token', () => { it('logs expected debug logs for an authenticated user', async () => { expect.assertions(3) - getCookie.mockImplementation((cookieName) => { + mockGetCookie.mockImplementation((cookieName) => { if (cookieName === 'SomeName.AuthUserTokens') { return JSON.stringify({ idToken: 'some-id-token', @@ -337,23 +348,23 @@ describe('getUserFromCookies: with ID token', () => { token: 'a-user-identity-token-abc', firebaseUserAdminSDK: mockFirebaseAdminUser, }) - verifyIdToken.mockResolvedValue(expectedUser) - const mockReq = {} + mockVerifyIdToken.mockResolvedValue(expectedUser) + const mockReq = {} as NextApiRequest - logDebug.mockClear() + mockLogDebug.mockClear() await getUserFromCookies({ req: mockReq }) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[getUserFromCookies] Attempting to get user info from cookies via the ID token.' ) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[getUserFromCookies] Successfully retrieved the ID token from cookies.' ) - expect(logDebug).toHaveBeenCalledTimes(3) + expect(mockLogDebug).toHaveBeenCalledTimes(3) }) it('logs expected debug logs for a user without valid auth cookie values', async () => { expect.assertions(3) - getCookie.mockImplementation((cookieName) => { + mockGetCookie.mockImplementation((cookieName) => { if (cookieName === 'SomeName.AuthUserTokens') { return JSON.stringify({ idToken: 'some-id-token', @@ -367,26 +378,26 @@ describe('getUserFromCookies: with ID token', () => { } return undefined }) - getCookie.mockReturnValue(undefined) // the user has no auth cookies + mockGetCookie.mockReturnValue(undefined) // the user has no auth cookies const mockFirebaseAdminUser = undefined - verifyIdToken.mockResolvedValue(mockFirebaseAdminUser) - const mockReq = {} + mockVerifyIdToken.mockResolvedValue(mockFirebaseAdminUser) + const mockReq = {} as NextApiRequest - logDebug.mockClear() + mockLogDebug.mockClear() await getUserFromCookies({ req: mockReq }) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[getUserFromCookies] Attempting to get user info from cookies via the ID token.' ) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( "[getUserFromCookies] Failed to retrieve the ID token from cookies. This will happen if the user is not logged in, the provided cookie values are invalid, or the cookie values don't align with your cookie settings. The user will be unauthenticated." ) - expect(logDebug).toHaveBeenCalledTimes(3) + expect(mockLogDebug).toHaveBeenCalledTimes(3) }) it('logs expected debug logs for a user whose ID token is not successfully verified', async () => { expect.assertions(3) - getCookie.mockImplementation((cookieName) => { + mockGetCookie.mockImplementation((cookieName) => { if (cookieName === 'SomeName.AuthUserTokens') { return JSON.stringify({ idToken: 'some-id-token', @@ -403,18 +414,18 @@ describe('getUserFromCookies: with ID token', () => { // Mock the Firebase admin user verification. const expectedUser = createAuthUser() // unauthenticated user! - verifyIdToken.mockResolvedValue(expectedUser) - const mockReq = {} + mockVerifyIdToken.mockResolvedValue(expectedUser) + const mockReq = {} as NextApiRequest - logDebug.mockClear() + mockLogDebug.mockClear() await getUserFromCookies({ req: mockReq }) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[getUserFromCookies] Attempting to get user info from cookies via the ID token.' ) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[getUserFromCookies] Successfully retrieved the ID token from cookies.' ) - expect(logDebug).toHaveBeenCalledTimes(3) + expect(mockLogDebug).toHaveBeenCalledTimes(3) }) }) /** @@ -428,7 +439,7 @@ describe('getUserFromCookies: *without* ID token', () => { it('returns an authenticated user', async () => { expect.assertions(1) - getCookie.mockImplementation((cookieName) => { + mockGetCookie.mockImplementation((cookieName) => { if (cookieName === 'SomeName.AuthUserTokens') { return JSON.stringify({ idToken: 'some-id-token', @@ -449,8 +460,8 @@ describe('getUserFromCookies: *without* ID token', () => { token: 'a-user-identity-token-abc', firebaseUserAdminSDK: mockFirebaseAdminUser, }) - verifyIdToken.mockResolvedValue(expectedUser) - const mockReq = {} + mockVerifyIdToken.mockResolvedValue(expectedUser) + const mockReq = {} as NextApiRequest const user = await getUserFromCookies({ req: mockReq, includeToken: false }) expect(user).toEqual({ ...expectedUser, @@ -469,7 +480,7 @@ describe('getUserFromCookies: *without* ID token', () => { email: 'some-different-email@example.com', // differs from token result }, }) - getCookie.mockImplementation((cookieName) => { + mockGetCookie.mockImplementation((cookieName) => { if (cookieName === 'SomeName.AuthUserTokens') { return JSON.stringify({ idToken: 'some-id-token', @@ -488,8 +499,8 @@ describe('getUserFromCookies: *without* ID token', () => { token: 'a-user-identity-token-abc', firebaseUserAdminSDK: mockFirebaseAdminUser, }) - verifyIdToken.mockResolvedValue(mockUserWithToken) - const mockReq = {} + mockVerifyIdToken.mockResolvedValue(mockUserWithToken) + const mockReq = {} as NextApiRequest const user = await getUserFromCookies({ req: mockReq, includeToken: false }) expect(user).toEqual({ ...mockUserNoToken, @@ -501,11 +512,11 @@ describe('getUserFromCookies: *without* ID token', () => { it('returns an unauthed user object when no user exists', async () => { expect.assertions(1) - getCookie.mockReturnValue(undefined) // the user has no auth cookies + mockGetCookie.mockReturnValue(undefined) // the user has no auth cookies const mockFirebaseAdminUser = undefined - verifyIdToken.mockResolvedValue(mockFirebaseAdminUser) + mockVerifyIdToken.mockResolvedValue(mockFirebaseAdminUser) const expectedUser = createAuthUser() - const mockReq = {} + const mockReq = {} as NextApiRequest const user = await getUserFromCookies({ req: mockReq, includeToken: false }) expect(user).toEqual({ ...expectedUser, @@ -517,7 +528,7 @@ describe('getUserFromCookies: *without* ID token', () => { it('passes the expected values to getCookie', async () => { expect.assertions(1) - getAuthUserCookieName.mockReturnValue('MyCookie.AuthUser') + mockGetAuthUserCookieName.mockReturnValue('MyCookie.AuthUser') const mockConfig = getMockConfig() setConfig({ ...mockConfig, @@ -530,9 +541,9 @@ describe('getUserFromCookies: *without* ID token', () => { }, }) - const mockReq = {} + const mockReq = {} as NextApiRequest await getUserFromCookies({ req: mockReq, includeToken: false }) - expect(getCookie).toHaveBeenCalledWith( + expect(mockGetCookie).toHaveBeenCalledWith( 'MyCookie.AuthUser', { req: mockReq, @@ -544,7 +555,7 @@ describe('getUserFromCookies: *without* ID token', () => { it('does not call verifyIdToken when not using an ID token', async () => { expect.assertions(1) - getCookie.mockImplementation((cookieName) => { + mockGetCookie.mockImplementation((cookieName) => { if (cookieName === 'SomeName.AuthUserTokens') { return JSON.stringify({ idToken: 'some-id-token-24680', @@ -563,10 +574,10 @@ describe('getUserFromCookies: *without* ID token', () => { token: 'a-user-identity-token-abc', firebaseUserAdminSDK: mockFirebaseAdminUser, }) - verifyIdToken.mockResolvedValue(expectedUser) - const mockReq = {} + mockVerifyIdToken.mockResolvedValue(expectedUser) + const mockReq = {} as NextApiRequest await getUserFromCookies({ req: mockReq, includeToken: false }) - expect(verifyIdToken).not.toHaveBeenCalled() + expect(mockVerifyIdToken).not.toHaveBeenCalled() }) // https://github.com/gladly-team/next-firebase-auth/issues/195 @@ -582,7 +593,7 @@ describe('getUserFromCookies: *without* ID token', () => { }, }) - getCookie.mockImplementation((cookieName) => { + mockGetCookie.mockImplementation((cookieName) => { if (cookieName === 'SomeName.AuthUserTokens') { return JSON.stringify({ idToken: 'some-id-token', @@ -601,8 +612,8 @@ describe('getUserFromCookies: *without* ID token', () => { token: 'a-user-identity-token-abc', firebaseUserAdminSDK: mockFirebaseAdminUser, }) - verifyIdToken.mockResolvedValue(expectedUser) - const mockReq = {} + mockVerifyIdToken.mockResolvedValue(expectedUser) + const mockReq = {} as NextApiRequest const expectedErr = new Error( 'Cookies must be signed when using withAuthUserSSR.' ) @@ -616,7 +627,7 @@ describe('getUserFromCookies: *without* ID token', () => { await testApiHandler({ handler: async (req, res) => { await getUserFromCookies({ req, includeToken: false }) - const { req: passedReq } = getCookie.mock.calls[0][1] + const { req: passedReq } = mockGetCookie.mock.calls[0][1] expect(passedReq).toEqual(req) expect(passedReq.headers.cookie).toEqual('someStuff=foo;') return res.status(200).end() @@ -634,10 +645,10 @@ describe('getUserFromCookies: *without* ID token', () => { it('passes the expected request object structure to getCookie when cookie values are provided *instead of* the `req` object (incl. signed cookie)', async () => { expect.assertions(1) - getAuthUserCookieName.mockReturnValue('MyCookie.AuthUser') - getAuthUserSigCookieName.mockReturnValue('MyCookie.AuthUser.sig') - getAuthUserTokensCookieName.mockReturnValue('MyCookie.AuthUserTokens') - getAuthUserTokensSigCookieName.mockReturnValue( + mockGetAuthUserCookieName.mockReturnValue('MyCookie.AuthUser') + mockGetAuthUserSigCookieName.mockReturnValue('MyCookie.AuthUser.sig') + mockGetAuthUserTokensCookieName.mockReturnValue('MyCookie.AuthUserTokens') + mockGetAuthUserTokensSigCookieName.mockReturnValue( 'MyCookie.AuthUserTokens.sig' ) const authCookieValue = 'thequickbrownfox' @@ -653,16 +664,16 @@ describe('getUserFromCookies: *without* ID token', () => { 'MyCookie.AuthUser=thequickbrownfox; MyCookie.AuthUser.sig=1q2w3e4r;', }, } - const { req: passedReq } = getCookie.mock.calls[0][1] + const { req: passedReq } = mockGetCookie.mock.calls[0][1] expect(passedReq).toEqual(expectedReqObj) }) it('passes the expected request object structure to getCookie when cookie values are provided *instead of* the `req` object (not incl. signed cookie)', async () => { expect.assertions(1) - getAuthUserCookieName.mockReturnValue('MyCookie.AuthUser') - getAuthUserSigCookieName.mockReturnValue('MyCookie.AuthUser.sig') - getAuthUserTokensCookieName.mockReturnValue('MyCookie.AuthUserTokens') - getAuthUserTokensSigCookieName.mockReturnValue( + mockGetAuthUserCookieName.mockReturnValue('MyCookie.AuthUser') + mockGetAuthUserSigCookieName.mockReturnValue('MyCookie.AuthUser.sig') + mockGetAuthUserTokensCookieName.mockReturnValue('MyCookie.AuthUserTokens') + mockGetAuthUserTokensSigCookieName.mockReturnValue( 'MyCookie.AuthUserTokens.sig' ) const authCookieValue = 'thequickbrownfox' @@ -677,7 +688,7 @@ describe('getUserFromCookies: *without* ID token', () => { cookie: 'MyCookie.AuthUser=thequickbrownfox;', }, } - const { req: passedReq } = getCookie.mock.calls[0][1] + const { req: passedReq } = mockGetCookie.mock.calls[0][1] expect(passedReq).toEqual(expectedReqObj) }) @@ -696,7 +707,7 @@ describe('getUserFromCookies: *without* ID token', () => { it('logs expected debug logs for an authenticated user', async () => { expect.assertions(3) - getCookie.mockImplementation((cookieName) => { + mockGetCookie.mockImplementation((cookieName) => { if (cookieName === 'SomeName.AuthUserTokens') { return JSON.stringify({ idToken: 'some-id-token', @@ -717,36 +728,36 @@ describe('getUserFromCookies: *without* ID token', () => { token: 'a-user-identity-token-abc', firebaseUserAdminSDK: mockFirebaseAdminUser, }) - verifyIdToken.mockResolvedValue(expectedUser) - const mockReq = {} + mockVerifyIdToken.mockResolvedValue(expectedUser) + const mockReq = {} as NextApiRequest - logDebug.mockClear() + mockLogDebug.mockClear() await getUserFromCookies({ req: mockReq, includeToken: false }) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[getUserFromCookies] Attempting to get user info from cookies (not using the ID token).' ) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[getUserFromCookies] Successfully retrieved the user info from cookies.' ) - expect(logDebug).toHaveBeenCalledTimes(3) + expect(mockLogDebug).toHaveBeenCalledTimes(3) }) it('logs expected debug logs for an unauthenticated user', async () => { expect.assertions(3) - getCookie.mockReturnValue(undefined) // the user has no auth cookies + mockGetCookie.mockReturnValue(undefined) // the user has no auth cookies const mockFirebaseAdminUser = undefined - verifyIdToken.mockResolvedValue(mockFirebaseAdminUser) - const mockReq = {} + mockVerifyIdToken.mockResolvedValue(mockFirebaseAdminUser) + const mockReq = {} as NextApiRequest - logDebug.mockClear() + mockLogDebug.mockClear() await getUserFromCookies({ req: mockReq, includeToken: false }) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[getUserFromCookies] Attempting to get user info from cookies (not using the ID token).' ) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[getUserFromCookies] Failed to retrieve the user info from cookies. The provided cookie values might be invalid or not align with your cookie settings. The user will be unauthenticated.' ) - expect(logDebug).toHaveBeenCalledTimes(3) + expect(mockLogDebug).toHaveBeenCalledTimes(3) }) }) /** diff --git a/src/__tests__/index.server.moduleLoad.test.js b/src/__tests__/index.server.moduleLoad.test.ts similarity index 78% rename from src/__tests__/index.server.moduleLoad.test.js rename to src/__tests__/index.server.moduleLoad.test.ts index 16459151..f5ef709e 100644 --- a/src/__tests__/index.server.moduleLoad.test.js +++ b/src/__tests__/index.server.moduleLoad.test.ts @@ -1,9 +1,8 @@ // Tests for index.server.js that require resetting all // modules between tests. Most tests should reside in // index.server.test.js. - -// Allow using the name "mockModuleNotFoundError". -/* eslint-disable new-cap */ +// eslint-disable-next-line jest/no-export +export {} jest.mock('react') @@ -16,30 +15,30 @@ describe('index.server.js (resetting modules)', () => { expect.assertions(0) // Fake that all optional dependencies are not installed. - const mockModuleNotFoundError = + const MockModuleNotFoundError = require('src/testHelpers/mockModuleNotFoundError').default jest.mock('firebase/app', () => { - throw new mockModuleNotFoundError({ + throw new MockModuleNotFoundError({ moduleName: 'firebase/app', }) }) jest.mock('firebase/auth', () => { - throw new mockModuleNotFoundError({ + throw new MockModuleNotFoundError({ moduleName: 'firebase/auth', }) }) jest.mock('next', () => { - throw new mockModuleNotFoundError({ + throw new MockModuleNotFoundError({ moduleName: 'next', }) }) jest.mock('react', () => { - throw new mockModuleNotFoundError({ + throw new MockModuleNotFoundError({ moduleName: 'react', }) }) jest.mock('react-dom', () => { - throw new mockModuleNotFoundError({ + throw new MockModuleNotFoundError({ moduleName: 'react-dom', }) }) @@ -53,10 +52,10 @@ describe('index.server.js (resetting modules)', () => { const expectedErr = new Error( 'The dependency "react" is required when calling `useAuthUser`.' ) - const mockModuleNotFoundError = + const MockModuleNotFoundError = require('src/testHelpers/mockModuleNotFoundError').default jest.mock('react', () => { - throw new mockModuleNotFoundError({ + throw new MockModuleNotFoundError({ moduleName: 'react', }) }) diff --git a/src/__tests__/index.server.test.js b/src/__tests__/index.server.test.ts similarity index 100% rename from src/__tests__/index.server.test.js rename to src/__tests__/index.server.test.ts diff --git a/src/__tests__/index.test.js b/src/__tests__/index.test.ts similarity index 86% rename from src/__tests__/index.test.js rename to src/__tests__/index.test.ts index 533f14e7..51d662b6 100644 --- a/src/__tests__/index.test.js +++ b/src/__tests__/index.test.ts @@ -8,15 +8,17 @@ jest.mock('src/logDebug') jest.mock('src/initFirebaseClientSDK') jest.mock('src/isClientSide') +const mockIsClientSide = jest.mocked(isClientSide) + beforeEach(() => { - isClientSide.mockReturnValue(true) + mockIsClientSide.mockReturnValue(true) }) afterEach(() => { jest.clearAllMocks() }) -describe('index.js: init', () => { +describe('index.ts: init', () => { it('exports init', () => { expect.assertions(2) const index = require('src/index').default @@ -54,7 +56,7 @@ describe('index.js: init', () => { it('calls initFirebaseClientSDK if on the client side', () => { expect.assertions(1) - isClientSide.mockReturnValue(true) + mockIsClientSide.mockReturnValue(true) const index = require('src/index').default index.init() expect(initFirebaseClientSDK).toHaveBeenCalled() @@ -62,14 +64,14 @@ describe('index.js: init', () => { it('does not call initFirebaseClientSDK if on the server side', () => { expect.assertions(1) - isClientSide.mockReturnValue(false) + mockIsClientSide.mockReturnValue(false) const index = require('src/index').default index.init() expect(initFirebaseClientSDK).not.toHaveBeenCalled() }) }) -describe('index.js: withAuthUser', () => { +describe('index.ts: withAuthUser', () => { it('exports withAuthUser', () => { expect.assertions(2) const index = require('src/index').default @@ -78,7 +80,7 @@ describe('index.js: withAuthUser', () => { }) }) -describe('index.js: useAuthUser', () => { +describe('index.ts: useAuthUser', () => { it('exports useAuthUser', () => { expect.assertions(2) const index = require('src/index').default @@ -87,7 +89,7 @@ describe('index.js: useAuthUser', () => { }) }) -describe('index.js: withAuthUserSSR', () => { +describe('index.ts: withAuthUserSSR', () => { it('exports withAuthUserSSR', () => { expect.assertions(2) const index = require('src/index').default @@ -97,7 +99,7 @@ describe('index.js: withAuthUserSSR', () => { it('throws if called on the client side', () => { expect.assertions(1) - isClientSide.mockReturnValue(true) + mockIsClientSide.mockReturnValue(true) const index = require('src/index').default expect(() => { index.withAuthUserSSR() @@ -105,7 +107,7 @@ describe('index.js: withAuthUserSSR', () => { }) }) -describe('index.js: withAuthUserTokenSSR', () => { +describe('index.ts: withAuthUserTokenSSR', () => { it('exports withAuthUserTokenSSR', () => { expect.assertions(2) const index = require('src/index').default @@ -115,7 +117,7 @@ describe('index.js: withAuthUserTokenSSR', () => { it('throws if called on the client side', () => { expect.assertions(1) - isClientSide.mockReturnValue(true) + mockIsClientSide.mockReturnValue(true) const index = require('src/index').default expect(() => { index.withAuthUserTokenSSR() @@ -123,7 +125,7 @@ describe('index.js: withAuthUserTokenSSR', () => { }) }) -describe('index.js: setAuthCookies', () => { +describe('index.ts: setAuthCookies', () => { it('exports setAuthCookies', () => { expect.assertions(2) const index = require('src/index').default @@ -133,7 +135,7 @@ describe('index.js: setAuthCookies', () => { it('throws if called on the client side', () => { expect.assertions(1) - isClientSide.mockReturnValue(true) + mockIsClientSide.mockReturnValue(true) const index = require('src/index').default expect(() => { index.setAuthCookies() @@ -141,7 +143,7 @@ describe('index.js: setAuthCookies', () => { }) }) -describe('index.js: unsetAuthCookies', () => { +describe('index.ts: unsetAuthCookies', () => { it('exports unsetAuthCookies', () => { expect.assertions(2) const index = require('src/index').default @@ -151,7 +153,7 @@ describe('index.js: unsetAuthCookies', () => { it('throws if called on the client side', () => { expect.assertions(1) - isClientSide.mockReturnValue(true) + mockIsClientSide.mockReturnValue(true) const index = require('src/index').default expect(() => { index.unsetAuthCookies() @@ -159,7 +161,7 @@ describe('index.js: unsetAuthCookies', () => { }) }) -describe('index.js: verifyIdToken', () => { +describe('index.ts: verifyIdToken', () => { it('exports verifyIdToken', () => { expect.assertions(2) const index = require('src/index').default @@ -169,7 +171,7 @@ describe('index.js: verifyIdToken', () => { it('throws if called on the client side', () => { expect.assertions(1) - isClientSide.mockReturnValue(true) + mockIsClientSide.mockReturnValue(true) const index = require('src/index').default expect(() => { index.verifyIdToken() @@ -177,7 +179,7 @@ describe('index.js: verifyIdToken', () => { }) }) -describe('index.js: AuthAction', () => { +describe('index.ts: AuthAction', () => { it('defines the expected constants', () => { expect.assertions(1) const index = require('src/index').default @@ -191,7 +193,7 @@ describe('index.js: AuthAction', () => { }) }) -describe('index.js: getUserFromCookies', () => { +describe('index.ts: getUserFromCookies', () => { it('exports getUserFromCookies', () => { expect.assertions(2) const index = require('src/index').default @@ -201,7 +203,7 @@ describe('index.js: getUserFromCookies', () => { it('throws if called on the client side', () => { expect.assertions(1) - isClientSide.mockReturnValue(true) + mockIsClientSide.mockReturnValue(true) const index = require('src/index').default expect(() => { index.getUserFromCookies() diff --git a/src/__tests__/initCommon.test.js b/src/__tests__/initCommon.test.ts similarity index 72% rename from src/__tests__/initCommon.test.js rename to src/__tests__/initCommon.test.ts index 4480d536..0bc77199 100644 --- a/src/__tests__/initCommon.test.js +++ b/src/__tests__/initCommon.test.ts @@ -2,13 +2,16 @@ import initCommon from 'src/initCommon' import { setConfig } from 'src/config' import { setDebugEnabled } from 'src/logDebug' import isClientSide from 'src/isClientSide' +import { ConfigInput } from 'src/configTypes' jest.mock('src/config') jest.mock('src/logDebug') jest.mock('src/isClientSide') +const mockIsClientSide = jest.mocked(isClientSide) + beforeEach(() => { - isClientSide.mockReturnValue(true) + mockIsClientSide.mockReturnValue(true) }) afterEach(() => { @@ -18,25 +21,25 @@ afterEach(() => { describe('initCommon', () => { it('calls setDebugEnabled with true if config.debug is true', () => { expect.assertions(1) - initCommon({ debug: true }) + initCommon({ debug: true } as unknown as ConfigInput) expect(setDebugEnabled).toHaveBeenCalledWith(true) }) it('calls setDebugEnabled with false if config.debug is truthy but non-true', () => { expect.assertions(1) - initCommon({ debug: 'yes' }) + initCommon({ debug: 'yes' } as unknown as ConfigInput) expect(setDebugEnabled).toHaveBeenCalledWith(false) }) it('calls setDebugEnabled with false if config.debug is false', () => { expect.assertions(1) - initCommon({ debug: false }) + initCommon({ debug: false } as unknown as ConfigInput) expect(setDebugEnabled).toHaveBeenCalledWith(false) }) it('calls setConfig with the provided config', () => { expect.assertions(1) - initCommon({ some: 'config' }) + initCommon({ some: 'config' } as unknown as ConfigInput) expect(setConfig).toHaveBeenCalledWith({ some: 'config' }) }) }) diff --git a/src/__tests__/initFirebaseAdminSDK.test.js b/src/__tests__/initFirebaseAdminSDK.test.ts similarity index 84% rename from src/__tests__/initFirebaseAdminSDK.test.js rename to src/__tests__/initFirebaseAdminSDK.test.ts index a8e167b2..4dc6e87c 100644 --- a/src/__tests__/initFirebaseAdminSDK.test.js +++ b/src/__tests__/initFirebaseAdminSDK.test.ts @@ -15,12 +15,18 @@ jest.mock('firebase-admin') jest.mock('src/config') jest.mock('src/logDebug') +const mockApplicationDefault = applicationDefault as jest.Mock +const mockCert = cert as jest.Mock +const mockGetApps = getApps as jest.Mock +const mockInitializeApp = initializeApp as jest.Mock +const mockSetConfig = jest.mocked(setConfig) + beforeEach(() => { const mockConfig = createMockConfig({ clientSide: false }) - setConfig(mockConfig) + mockSetConfig(mockConfig) - getApps.mockReturnValue([]) - cert.mockImplementation((obj) => ({ + mockGetApps.mockReturnValue([]) + mockCert.mockImplementation((obj) => ({ ...obj, _mockFirebaseCert: true, })) @@ -35,7 +41,7 @@ describe('initFirebaseAdminSDK', () => { expect.assertions(1) const initFirebaseAdminSDK = require('src/initFirebaseAdminSDK').default initFirebaseAdminSDK() - expect(initializeApp).toHaveBeenCalledWith({ + expect(mockInitializeApp).toHaveBeenCalledWith({ credential: { _mockFirebaseCert: true, clientEmail: 'my-example-app@example.com', @@ -55,12 +61,12 @@ describe('initFirebaseAdminSDK', () => { useFirebaseAdminDefaultCredential: true, }) const initFirebaseAdminSDK = require('src/initFirebaseAdminSDK').default - applicationDefault.mockReturnValue({ + mockApplicationDefault.mockReturnValue({ _mockFirebaseDefaultCred: true, }) initFirebaseAdminSDK() expect(applicationDefault).toHaveBeenCalled() - expect(initializeApp).toHaveBeenCalledWith({ + expect(mockInitializeApp).toHaveBeenCalledWith({ credential: { _mockFirebaseDefaultCred: true, }, @@ -76,10 +82,10 @@ describe('initFirebaseAdminSDK', () => { it('does not call initializeApp if Firebase already has an initialized app', () => { expect.assertions(1) - getApps.mockReturnValue([{ some: 'app' }]) + mockGetApps.mockReturnValue([{ some: 'app' }]) const initFirebaseAdminSDK = require('src/initFirebaseAdminSDK').default initFirebaseAdminSDK() - expect(initializeApp).not.toHaveBeenCalled() + expect(mockInitializeApp).not.toHaveBeenCalled() }) it('throws if config.firebaseAdminInitConfig is not set and no app is initialized', () => { @@ -104,7 +110,7 @@ describe('initFirebaseAdminSDK', () => { ...mockConfig, firebaseAdminInitConfig: undefined, }) - getApps.mockReturnValue([{ some: 'app' }]) + mockGetApps.mockReturnValue([{ some: 'app' }]) const initFirebaseAdminSDK = require('src/initFirebaseAdminSDK').default expect(() => { initFirebaseAdminSDK() @@ -122,7 +128,7 @@ describe('initFirebaseAdminSDK', () => { it('does not call logDebug when not initializing a new app', () => { expect.assertions(1) - getApps.mockReturnValue([{ some: 'app' }]) + mockGetApps.mockReturnValue([{ some: 'app' }]) const initFirebaseAdminSDK = require('src/initFirebaseAdminSDK').default initFirebaseAdminSDK() expect(logDebug).not.toHaveBeenCalled() diff --git a/src/__tests__/initFirebaseClientSDK.test.js b/src/__tests__/initFirebaseClientSDK.test.ts similarity index 80% rename from src/__tests__/initFirebaseClientSDK.test.js rename to src/__tests__/initFirebaseClientSDK.test.ts index 4bf8fb3d..e6fd3886 100644 --- a/src/__tests__/initFirebaseClientSDK.test.js +++ b/src/__tests__/initFirebaseClientSDK.test.ts @@ -3,17 +3,22 @@ import { getAuth, connectAuthEmulator } from 'firebase/auth' import { setConfig } from 'src/config' import createMockConfig from 'src/testHelpers/createMockConfig' import logDebug from 'src/logDebug' +import { ConfigInput } from 'src/configTypes' jest.mock('firebase/app') jest.mock('firebase/auth') jest.mock('src/config') jest.mock('src/logDebug') +const mockGetApps = getApps as jest.Mock +const mockInitializeApp = initializeApp as jest.Mock +const mockGetAuth = getAuth as jest.Mock + beforeEach(() => { const mockConfig = createMockConfig() setConfig(mockConfig) - getApps.mockReturnValue([]) + mockGetApps.mockReturnValue([]) }) afterEach(() => { @@ -25,7 +30,7 @@ describe('initFirebaseClientSDK', () => { expect.assertions(1) const initFirebaseClientSDK = require('src/initFirebaseClientSDK').default initFirebaseClientSDK() - expect(initializeApp).toHaveBeenCalledWith({ + expect(mockInitializeApp).toHaveBeenCalledWith({ apiKey: 'fakeAPIKey123', authDomain: 'my-example-app.firebaseapp.com', databaseURL: 'https://my-example-app.firebaseio.com', @@ -35,10 +40,10 @@ describe('initFirebaseClientSDK', () => { it('does not call firebase.initializeApp if Firebase already has an initialized app', () => { expect.assertions(1) - getApps.mockReturnValue([{ some: 'app' }]) + mockGetApps.mockReturnValue([{ some: 'app' }]) const initFirebaseClientSDK = require('src/initFirebaseClientSDK').default initFirebaseClientSDK() - expect(initializeApp).not.toHaveBeenCalled() + expect(mockInitializeApp).not.toHaveBeenCalled() }) it('throws if config.firebaseClientInitConfig is not set and no app is initialized', () => { @@ -46,7 +51,8 @@ describe('initFirebaseClientSDK', () => { const mockConfig = createMockConfig() setConfig({ ...mockConfig, - firebaseClientInitConfig: undefined, + firebaseClientInitConfig: + undefined as unknown as ConfigInput['firebaseClientInitConfig'], }) const initFirebaseClientSDK = require('src/initFirebaseClientSDK').default expect(() => { @@ -61,9 +67,10 @@ describe('initFirebaseClientSDK', () => { const mockConfig = createMockConfig() setConfig({ ...mockConfig, - firebaseClientInitConfig: undefined, + firebaseClientInitConfig: + undefined as unknown as ConfigInput['firebaseClientInitConfig'], }) - getApps.mockReturnValue([{ some: 'app' }]) + mockGetApps.mockReturnValue([{ some: 'app' }]) const initFirebaseClientSDK = require('src/initFirebaseClientSDK').default expect(() => { initFirebaseClientSDK() @@ -77,8 +84,8 @@ describe('initFirebaseClientSDK', () => { ...mockConfig, firebaseAuthEmulatorHost: 'localhost:9099', }) - getApps.mockReturnValue([{ some: 'app' }]) - getAuth.mockReturnValue('mockAuth') + mockGetApps.mockReturnValue([{ some: 'app' }]) + mockGetAuth.mockReturnValue('mockAuth') const initFirebaseClientSDK = require('src/initFirebaseClientSDK').default initFirebaseClientSDK() @@ -90,7 +97,7 @@ describe('initFirebaseClientSDK', () => { it('does not initialize the client-side auth emulator if config.firebaseAuthEmulatorHost is not set', () => { expect.assertions(1) - getApps.mockReturnValue([{ some: 'app' }]) + mockGetApps.mockReturnValue([{ some: 'app' }]) const initFirebaseClientSDK = require('src/initFirebaseClientSDK').default initFirebaseClientSDK() @@ -108,7 +115,7 @@ describe('initFirebaseClientSDK', () => { it('calls logDebug when not initializing', () => { expect.assertions(1) - getApps.mockReturnValue([{ some: 'app' }]) + mockGetApps.mockReturnValue([{ some: 'app' }]) const initFirebaseClientSDK = require('src/initFirebaseClientSDK').default initFirebaseClientSDK() expect(logDebug).toHaveBeenCalledWith( diff --git a/src/__tests__/logDebug.test.js b/src/__tests__/logDebug.test.ts similarity index 97% rename from src/__tests__/logDebug.test.js rename to src/__tests__/logDebug.test.ts index bb2608cd..6662de30 100644 --- a/src/__tests__/logDebug.test.js +++ b/src/__tests__/logDebug.test.ts @@ -1,4 +1,7 @@ /* eslint no-console: 0 */ +// eslint-disable-next-line jest/no-export +export {} + jest.mock('src/isClientSide') beforeEach(() => { diff --git a/src/__tests__/redirects.test.js b/src/__tests__/redirects.test.ts similarity index 78% rename from src/__tests__/redirects.test.js rename to src/__tests__/redirects.test.ts index 2ae1d06d..e730dc36 100644 --- a/src/__tests__/redirects.test.js +++ b/src/__tests__/redirects.test.ts @@ -1,33 +1,37 @@ +import { GetServerSidePropsContext } from 'next' +import type { ParsedUrlQuery } from 'querystring' import { getLoginRedirectInfo, getAppRedirectInfo } from 'src/redirects' import getMockConfig from 'src/testHelpers/createMockConfig' import { setConfig } from 'src/config' +import { AuthUser as AuthUserType } from 'src/createAuthUser' +import { RedirectInput } from 'src/redirectTypes' describe('redirects', () => { const redirectOperations = [ - ({ + { redirectConfigName: 'authPageURL', redirectFunc: getLoginRedirectInfo, }, { redirectConfigName: 'appPageURL', redirectFunc: getAppRedirectInfo, - }), + }, ] redirectOperations.forEach(({ redirectConfigName, redirectFunc }) => { describe(`${redirectFunc.name} : ${redirectConfigName} tests`, () => { describe('with global config', () => { it('returns a redirect object when "redirectDestination" is set to a string and it is provided by the global config', () => { - setConfig(getMockConfig()) - const result = redirectFunc({}) const mockConfig = getMockConfig() setConfig({ ...mockConfig, - authPageURL: '/', + appPageURL: '/foo', + authPageURL: '/foo', }) + const result = redirectFunc({}) expect(result).toEqual({ - destination: '/', + destination: '/foo', basePath: true, permanent: false, }) @@ -36,13 +40,13 @@ describe('redirects', () => { describe('with config specified in "redirectURL"', () => { it('returns a redirect object when "redirectDestination" set to a string', () => { - const redirectURL = '/' + const redirectURL = '/example' const result = redirectFunc({ redirectURL, }) expect(result).toEqual({ - destination: '/', + destination: '/example', basePath: true, permanent: false, }) @@ -50,11 +54,11 @@ describe('redirects', () => { it('returns a redirect object when "redirectDestination" set to a minimally valid object', () => { const result = redirectFunc({ - redirectURL: '/', // Only required field + redirectURL: '/abc', // Only required field }) expect(result).toEqual({ - destination: '/', + destination: '/abc', basePath: true, permanent: false, }) @@ -65,6 +69,7 @@ describe('redirects', () => { redirectURL: { destination: '/', basePath: false, + permanent: false, }, }) @@ -77,11 +82,11 @@ describe('redirects', () => { it('returns a redirect object when "redirectDestination" set to a function returning a string', () => { const result = redirectFunc({ - redirectURL: () => '/', + redirectURL: () => '/blah', }) expect(result).toEqual({ - destination: '/', + destination: '/blah', basePath: true, permanent: false, }) @@ -90,10 +95,14 @@ describe('redirects', () => { it('returns a redirect object when "redirectDestination" set to a function returning a valid object with a computed "destination"', () => { const result = redirectFunc({ redirectURL: ({ ctx, AuthUser }) => ({ - destination: `/${ctx.id}/${AuthUser.id}`, + basePath: true, + destination: `/${ctx?.query.id}/${AuthUser?.id}`, + permanent: false, }), - ctx: { id: 'context-id' }, - AuthUser: { id: 'user-id' }, + ctx: { + query: { id: 'context-id' }, + } as unknown as GetServerSidePropsContext, + AuthUser: { id: 'user-id' } as AuthUserType, }) expect(result).toEqual({ @@ -108,6 +117,7 @@ describe('redirects', () => { redirectURL: () => ({ destination: '/', basePath: false, + permanent: false, anotherProp: true, }), }) @@ -122,17 +132,19 @@ describe('redirects', () => { it('returns a redirect object when defaults are overridden', () => { const result = redirectFunc({ - ctx: { id: 'context-id' }, - AuthUser: { id: 'user-id' }, + ctx: { + id: 'context-id', + } as unknown as GetServerSidePropsContext, + AuthUser: { id: 'user-id' } as AuthUserType, redirectURL: () => ({ - destination: `/`, + destination: `/hello`, basePath: false, permanent: true, }), }) expect(result).toEqual({ - destination: '/', + destination: '/hello', basePath: false, permanent: true, }) @@ -157,9 +169,7 @@ describe('redirects', () => { it('throws when "destination" is an empty string', () => { expect(() => redirectFunc({ - options: { - [redirectConfigName]: '', - }, + redirectURL: '', }) ).toThrow( `The "${redirectConfigName}" must be set to a non-empty string, an object literal containing "destination", or a function that returns either.` @@ -169,10 +179,8 @@ describe('redirects', () => { it('throws when "destination" is a number', () => { expect(() => redirectFunc({ - options: { - [redirectConfigName]: 42, - }, - }) + redirectURL: 42, + } as unknown as RedirectInput) ).toThrow( `The "${redirectConfigName}" must be set to a non-empty string, an object literal containing "destination", or a function that returns either.` ) diff --git a/src/__tests__/setAuthCookies.test.js b/src/__tests__/setAuthCookies.test.ts similarity index 84% rename from src/__tests__/setAuthCookies.test.js rename to src/__tests__/setAuthCookies.test.ts index 33932d94..559c8c43 100644 --- a/src/__tests__/setAuthCookies.test.js +++ b/src/__tests__/setAuthCookies.test.ts @@ -10,6 +10,7 @@ import createMockConfig from 'src/testHelpers/createMockConfig' import createMockAuthUser from 'src/testHelpers/createMockAuthUser' import logDebug from 'src/logDebug' import createAuthUser from 'src/createAuthUser' +import { NextApiRequest, NextApiResponse } from 'next' jest.mock('src/config') jest.mock('src/firebaseAdmin') @@ -17,18 +18,25 @@ jest.mock('src/authCookies') jest.mock('src/cookies') jest.mock('src/logDebug') +const mockSetConfig = jest.mocked(setConfig) +const mockGetCustomIdAndRefreshTokens = getCustomIdAndRefreshTokens as jest.Mock +const mockGetAuthUserCookieName = jest.mocked(getAuthUserCookieName) +const mockGetAuthUserTokensCookieName = jest.mocked(getAuthUserTokensCookieName) +const mockSetCookie = jest.mocked(setCookie) +const mockLogDebug = jest.mocked(logDebug) + beforeEach(() => { const mockAuthUser = createMockAuthUser() - getAuthUserCookieName.mockReturnValue('SomeName.AuthUser') - getAuthUserTokensCookieName.mockReturnValue('SomeName.AuthUserTokens') - getCustomIdAndRefreshTokens.mockResolvedValue({ + mockGetAuthUserCookieName.mockReturnValue('SomeName.AuthUser') + mockGetAuthUserTokensCookieName.mockReturnValue('SomeName.AuthUserTokens') + mockGetCustomIdAndRefreshTokens.mockResolvedValue({ idToken: 'fake-custom-id-token-here', refreshToken: 'fake-refresh-token-here', AuthUser: mockAuthUser, }) const mockConfig = createMockConfig() - setConfig({ + mockSetConfig({ ...mockConfig, cookies: { ...mockConfig.cookies, @@ -102,7 +110,7 @@ describe('setAuthCookies', () => { authorization: 'some-token-here', }, }) - expect(getCustomIdAndRefreshTokens).toHaveBeenCalledWith( + expect(mockGetCustomIdAndRefreshTokens).toHaveBeenCalledWith( 'some-token-here' ) }, @@ -119,7 +127,9 @@ describe('setAuthCookies', () => { }, test: async ({ fetch }) => { await fetch() // no Authorization header - expect(getCustomIdAndRefreshTokens).toHaveBeenCalledWith('a-cool-token') + expect(mockGetCustomIdAndRefreshTokens).toHaveBeenCalledWith( + 'a-cool-token' + ) }, }) }) @@ -138,7 +148,7 @@ describe('setAuthCookies', () => { authorization: 'some-token-here', }, }) - expect(getCustomIdAndRefreshTokens).toHaveBeenCalledWith( + expect(mockGetCustomIdAndRefreshTokens).toHaveBeenCalledWith( 'another-token-here' ) }, @@ -149,8 +159,8 @@ describe('setAuthCookies', () => { expect.assertions(1) const mockAuthUser = createMockAuthUser() const setAuthCookies = require('src/setAuthCookies').default - let mockReq - let mockRes + let mockReq: NextApiRequest + let mockRes: NextApiResponse await testApiHandler({ handler: async (req, res) => { // Store the req/res to use in the test assertion. @@ -165,7 +175,7 @@ describe('setAuthCookies', () => { authorization: 'some-token-here', }, }) - expect(setCookie).toHaveBeenCalledWith( + expect(mockSetCookie).toHaveBeenCalledWith( 'SomeName.AuthUser', mockAuthUser.serialize({ includeToken: false }), { req: mockReq, res: mockRes }, @@ -189,8 +199,8 @@ describe('setAuthCookies', () => { it('sets the AuthUserTokens cookie as expected', async () => { expect.assertions(1) const setAuthCookies = require('src/setAuthCookies').default - let mockReq - let mockRes + let mockReq: NextApiRequest + let mockRes: NextApiResponse await testApiHandler({ handler: async (req, res) => { // Store the req/res to use in the test assertion. @@ -205,7 +215,7 @@ describe('setAuthCookies', () => { authorization: 'some-token-here', }, }) - expect(setCookie).toHaveBeenCalledWith( + expect(mockSetCookie).toHaveBeenCalledWith( 'SomeName.AuthUserTokens', JSON.stringify({ idToken: 'fake-custom-id-token-here', @@ -258,7 +268,7 @@ describe('setAuthCookies', () => { it('returns the expected values when getCustomIdAndRefreshTokens throws', async () => { expect.assertions(1) const setAuthCookies = require('src/setAuthCookies').default - getCustomIdAndRefreshTokens.mockRejectedValue( + mockGetCustomIdAndRefreshTokens.mockRejectedValue( new Error( '[setAuthCookies] Failed to verify the ID token. Cannot authenticate the user or get a refresh token.' ) @@ -276,7 +286,7 @@ describe('setAuthCookies', () => { return res.status(200).end() }, test: async ({ fetch }) => { - logDebug.mockClear() + mockLogDebug.mockClear() await fetch({ headers: { authorization: 'some-token-here', @@ -295,19 +305,19 @@ describe('setAuthCookies', () => { return res.status(200).end() }, test: async ({ fetch }) => { - logDebug.mockClear() + mockLogDebug.mockClear() await fetch({ headers: { authorization: 'some-token-here', }, }) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[setAuthCookies] Attempting to set auth cookies.' ) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[setAuthCookies] Set auth cookies for an authenticated user.' ) - expect(logDebug).toHaveBeenCalledTimes(2) + expect(mockLogDebug).toHaveBeenCalledTimes(2) }, }) }) @@ -316,7 +326,7 @@ describe('setAuthCookies', () => { expect.assertions(3) const setAuthCookies = require('src/setAuthCookies').default - getCustomIdAndRefreshTokens.mockResolvedValue({ + mockGetCustomIdAndRefreshTokens.mockResolvedValue({ idToken: null, refreshToken: null, AuthUser: createAuthUser(), // unauthenticated @@ -327,19 +337,19 @@ describe('setAuthCookies', () => { return res.status(200).end() }, test: async ({ fetch }) => { - logDebug.mockClear() + mockLogDebug.mockClear() await fetch({ headers: { authorization: 'some-token-here', }, }) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[setAuthCookies] Attempting to set auth cookies.' ) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[setAuthCookies] Set auth cookies. The user is not authenticated.' ) - expect(logDebug).toHaveBeenCalledTimes(2) + expect(mockLogDebug).toHaveBeenCalledTimes(2) }, }) }) @@ -347,7 +357,7 @@ describe('setAuthCookies', () => { it('logs expected debug logs when getCustomIdAndRefreshTokens throws', async () => { expect.assertions(4) const setAuthCookies = require('src/setAuthCookies').default - getCustomIdAndRefreshTokens.mockRejectedValue( + mockGetCustomIdAndRefreshTokens.mockRejectedValue( new Error('Failed to verify the ID token.') ) await testApiHandler({ @@ -356,22 +366,22 @@ describe('setAuthCookies', () => { return res.status(200).end() }, test: async ({ fetch }) => { - logDebug.mockClear() + mockLogDebug.mockClear() await fetch({ headers: { authorization: 'some-token-here', }, }) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[setAuthCookies] Attempting to set auth cookies.' ) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[setAuthCookies] Failed to verify the ID token. Cannot authenticate the user or get a refresh token.' ) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[setAuthCookies] Set auth cookies. The user is not authenticated.' ) - expect(logDebug).toHaveBeenCalledTimes(3) + expect(mockLogDebug).toHaveBeenCalledTimes(3) }, }) }) diff --git a/src/__tests__/unsetAuthCookies.test.js b/src/__tests__/unsetAuthCookies.test.ts similarity index 80% rename from src/__tests__/unsetAuthCookies.test.js rename to src/__tests__/unsetAuthCookies.test.ts index 46650fa3..a247a646 100644 --- a/src/__tests__/unsetAuthCookies.test.js +++ b/src/__tests__/unsetAuthCookies.test.ts @@ -7,18 +7,25 @@ import { testApiHandler } from 'next-test-api-route-handler' import { setConfig } from 'src/config' import createMockConfig from 'src/testHelpers/createMockConfig' import logDebug from 'src/logDebug' +import { NextApiRequest, NextApiResponse } from 'next' jest.mock('src/config') jest.mock('src/authCookies') jest.mock('src/cookies') jest.mock('src/logDebug') +const mockSetConfig = jest.mocked(setConfig) +const mockGetAuthUserCookieName = jest.mocked(getAuthUserCookieName) +const mockGetAuthUserTokensCookieName = jest.mocked(getAuthUserTokensCookieName) +const mockDeleteCookie = jest.mocked(deleteCookie) +const mockLogDebug = jest.mocked(logDebug) + beforeEach(() => { - getAuthUserCookieName.mockReturnValue('SomeName.AuthUser') - getAuthUserTokensCookieName.mockReturnValue('SomeName.AuthUserTokens') + mockGetAuthUserCookieName.mockReturnValue('SomeName.AuthUser') + mockGetAuthUserTokensCookieName.mockReturnValue('SomeName.AuthUserTokens') const mockConfig = createMockConfig() - setConfig({ + mockSetConfig({ ...mockConfig, cookies: { ...mockConfig.cookies, @@ -44,8 +51,8 @@ describe('unsetAuthCookies', () => { it('calls deleteCookie for the AuthUser cookie', async () => { expect.assertions(1) const unsetAuthCookies = require('src/unsetAuthCookies').default - let mockReq - let mockRes + let mockReq: NextApiRequest + let mockRes: NextApiResponse await testApiHandler({ handler: async (req, res) => { // Store the req/res to use in the test assertion. @@ -56,7 +63,7 @@ describe('unsetAuthCookies', () => { }, test: async ({ fetch }) => { await fetch() - expect(deleteCookie).toHaveBeenCalledWith( + expect(mockDeleteCookie).toHaveBeenCalledWith( 'SomeName.AuthUser', { req: mockReq, @@ -82,8 +89,8 @@ describe('unsetAuthCookies', () => { it('calls deleteCookie for the AuthUserTokens cookie', async () => { expect.assertions(1) const unsetAuthCookies = require('src/unsetAuthCookies').default - let mockReq - let mockRes + let mockReq: NextApiRequest + let mockRes: NextApiResponse await testApiHandler({ handler: async (req, res) => { // Store the req/res to use in the test assertion. @@ -94,7 +101,7 @@ describe('unsetAuthCookies', () => { }, test: async ({ fetch }) => { await fetch() - expect(deleteCookie).toHaveBeenCalledWith( + expect(mockDeleteCookie).toHaveBeenCalledWith( 'SomeName.AuthUserTokens', { req: mockReq, @@ -127,7 +134,7 @@ describe('unsetAuthCookies', () => { }, test: async ({ fetch }) => { await fetch() - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[unsetAuthCookies] Unset auth cookies.' ) }, diff --git a/src/__tests__/useAuthUser.test.js b/src/__tests__/useAuthUser.test.tsx similarity index 88% rename from src/__tests__/useAuthUser.test.js rename to src/__tests__/useAuthUser.test.tsx index 46670d5d..6591f3bf 100644 --- a/src/__tests__/useAuthUser.test.js +++ b/src/__tests__/useAuthUser.test.tsx @@ -1,3 +1,6 @@ +/* eslint-disable @typescript-eslint/no-empty-function */ +/* eslint-disable @typescript-eslint/no-var-requires */ +/* eslint-disable global-require */ import React from 'react' import { render } from '@testing-library/react' @@ -11,7 +14,7 @@ describe('useAuthUser', () => { jest.spyOn(React, 'createContext') // eslint-disable-next-line no-unused-expressions require('src/useAuthUser').default - expect(React.createContext).toHaveBeenCalledWith() + expect(React.createContext).toHaveBeenCalledWith(undefined) }) test('defining the AuthUser context value changes the useAuthUser value', () => { diff --git a/src/__tests__/useFirebaseUser.test.js b/src/__tests__/useFirebaseUser.test.ts similarity index 75% rename from src/__tests__/useFirebaseUser.test.js rename to src/__tests__/useFirebaseUser.test.ts index 4603956a..3a6bda40 100644 --- a/src/__tests__/useFirebaseUser.test.js +++ b/src/__tests__/useFirebaseUser.test.ts @@ -1,4 +1,4 @@ -import { getIdTokenResult, onIdTokenChanged } from 'firebase/auth' +import { User, getIdTokenResult, onIdTokenChanged } from 'firebase/auth' import { renderHook, act } from '@testing-library/react-hooks' import useFirebaseUser from 'src/useFirebaseUser' import { @@ -16,11 +16,24 @@ jest.mock('firebase/auth') jest.mock('src/config') jest.mock('src/logDebug') +const mockGetIdTokenResult = getIdTokenResult as jest.Mock +const mockOnIdTokenChanged = onIdTokenChanged as jest.Mock +const mockSetConfig = jest.mocked(setConfig) +const mockLogDebug = jest.mocked(logDebug) + +type OnIdTokenChangeCallback = (firebaseUser: User | null) => Promise +type PromiseResolver = (value: unknown) => void + +let fetchSpy: jest.SpyInstance + beforeEach(() => { - // `fetch` is polyfilled by Next.js. - global.fetch = jest.fn(() => Promise.resolve(createMockFetchResponse())) + fetchSpy = jest + .spyOn(window, 'fetch') + .mockImplementation( + jest.fn(() => Promise.resolve(createMockFetchResponse())) as jest.Mock + ) - setConfig({ + mockSetConfig({ ...createMockConfig(), loginAPIEndpoint: 'https://example.com/api/my-login', logoutAPIEndpoint: 'https://example.com/api/my-logout', @@ -32,11 +45,11 @@ afterEach(() => { }) describe('useFirebaseUser', () => { - it('returns an undefined user and initialized=false before the Firebase JS SDK has initialized', () => { + it('returns a null user and initialized=false before the Firebase JS SDK has initialized', () => { expect.assertions(1) const { result } = renderHook(() => useFirebaseUser()) expect(result.current).toEqual({ - user: undefined, + user: null, claims: {}, initialized: false, authRequestCompleted: false, @@ -49,16 +62,16 @@ describe('useFirebaseUser', () => { const mockFirebaseUser = createMockFirebaseUserClientSDK() const mockFirebaseUserWithClaims = { ...mockFirebaseUser, claims: {} } - let onIdTokenChangedCallback + let onIdTokenChangedCallback: OnIdTokenChangeCallback // Capture the onIdTokenChanged callback - onIdTokenChanged.mockImplementation((_, callback) => { + mockOnIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) // Intercept the getIdToken call - getIdTokenResult.mockResolvedValue(mockFirebaseUserWithClaims) + mockGetIdTokenResult.mockResolvedValue(mockFirebaseUserWithClaims) const { result } = renderHook(() => useFirebaseUser()) @@ -74,21 +87,21 @@ describe('useFirebaseUser', () => { }) }) - it('return an undefined user and initialized=true if the Firebase JS SDK calls `onIdTokenChanged` with no Firebase user', async () => { + it('return a null user and initialized=true if the Firebase JS SDK calls `onIdTokenChanged` with no Firebase user', async () => { expect.assertions(1) - const mockFirebaseUser = undefined // not signed in + const mockFirebaseUser = null // not signed in - let onIdTokenChangedCallback + let onIdTokenChangedCallback: OnIdTokenChangeCallback // Capture the onIdTokenChanged callback - onIdTokenChanged.mockImplementation((_, callback) => { + mockOnIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) // Intercept the getIdToken call - getIdTokenResult.mockResolvedValue(undefined) + mockGetIdTokenResult.mockResolvedValue(undefined) const { result } = renderHook(() => useFirebaseUser()) @@ -97,7 +110,7 @@ describe('useFirebaseUser', () => { await onIdTokenChangedCallback(mockFirebaseUser) }) expect(result.current).toEqual({ - user: undefined, + user: null, claims: {}, initialized: true, authRequestCompleted: true, @@ -117,16 +130,16 @@ describe('useFirebaseUser', () => { }, } - let onIdTokenChangedCallback + let onIdTokenChangedCallback: OnIdTokenChangeCallback // Capture the onIdTokenChanged callback - onIdTokenChanged.mockImplementation((_, callback) => { + mockOnIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) // Intercept the getIdToken call - getIdTokenResult.mockResolvedValue(mockFirebaseUserWithClaims) + mockGetIdTokenResult.mockResolvedValue(mockFirebaseUserWithClaims) const { result } = renderHook(() => useFirebaseUser()) @@ -154,17 +167,17 @@ describe('useFirebaseUser', () => { getIdToken: async () => mockToken, } - let onIdTokenChangedCallback + let onIdTokenChangedCallback: OnIdTokenChangeCallback // Capture the onIdTokenChanged callback - onIdTokenChanged.mockImplementation((_, callback) => { + mockOnIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) // Intercept the getIdToken call const idTokenResult = createMockIdTokenResult() - getIdTokenResult.mockResolvedValue(idTokenResult) + mockGetIdTokenResult.mockResolvedValue(idTokenResult) renderHook(() => useFirebaseUser()) @@ -186,15 +199,15 @@ describe('useFirebaseUser', () => { it('calls the logout endpoint as expected when the Firebase JS SDK calls `onIdTokenChanged` without an authed user', async () => { expect.assertions(2) - let onIdTokenChangedCallback + let onIdTokenChangedCallback: OnIdTokenChangeCallback // Capture the onIdTokenChanged callback - onIdTokenChanged.mockImplementation((_, callback) => { + mockOnIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) - const mockFirebaseUser = undefined + const mockFirebaseUser = null renderHook(() => useFirebaseUser()) expect(fetch).not.toHaveBeenCalled() @@ -212,22 +225,22 @@ describe('useFirebaseUser', () => { it('throws if `fetch`ing the login endpoint does not return an OK response', async () => { expect.assertions(1) - let onIdTokenChangedCallback + let onIdTokenChangedCallback: OnIdTokenChangeCallback // Capture the onIdTokenChanged callback - onIdTokenChanged.mockImplementation((_, callback) => { + mockOnIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) const idTokenResult = createMockIdTokenResult() - getIdTokenResult.mockResolvedValue(idTokenResult) + mockGetIdTokenResult.mockResolvedValue(idTokenResult) const mockFirebaseUser = createMockFirebaseUserClientSDK() renderHook(() => useFirebaseUser()) // Mock that `fetch` returns a non-OK response. - global.fetch.mockResolvedValue({ + fetchSpy.mockResolvedValue({ ...createMockFetchResponse(), ok: false, status: 500, @@ -243,26 +256,26 @@ describe('useFirebaseUser', () => { it('calls onLoginRequestError if defined, rather than throwing, when the login endpoint returns a non-OK response', async () => { expect.assertions(2) const mockOnLoginRequestError = jest.fn() - setConfig({ + mockSetConfig({ ...createMockConfig(), loginAPIEndpoint: 'https://example.com/api/my-login', logoutAPIEndpoint: 'https://example.com/api/my-logout', onLoginRequestError: mockOnLoginRequestError, }) - let onIdTokenChangedCallback - onIdTokenChanged.mockImplementation((_, callback) => { + let onIdTokenChangedCallback: OnIdTokenChangeCallback + mockOnIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) const idTokenResult = createMockIdTokenResult() - getIdTokenResult.mockResolvedValue(idTokenResult) + mockGetIdTokenResult.mockResolvedValue(idTokenResult) const mockFirebaseUser = createMockFirebaseUserClientSDK() renderHook(() => useFirebaseUser()) // Mock that `fetch` returns a non-OK response. - global.fetch.mockResolvedValue({ + fetchSpy.mockResolvedValue({ ...createMockFetchResponse(), ok: false, status: 500, @@ -280,10 +293,10 @@ describe('useFirebaseUser', () => { it('throws if `fetch` throws when calling the login endpoint', async () => { expect.assertions(1) - let onIdTokenChangedCallback + let onIdTokenChangedCallback: OnIdTokenChangeCallback // Capture the onIdTokenChanged callback - onIdTokenChanged.mockImplementation((_, callback) => { + mockOnIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) @@ -292,7 +305,7 @@ describe('useFirebaseUser', () => { renderHook(() => useFirebaseUser()) // Mock that `fetch` returns a non-OK response. - global.fetch.mockRejectedValue(new Error('Could not fetch.')) + fetchSpy.mockRejectedValue(new Error('Could not fetch.')) await act(async () => { await expect(onIdTokenChangedCallback(mockFirebaseUser)).rejects.toThrow( @@ -303,19 +316,19 @@ describe('useFirebaseUser', () => { it('throws if `fetch`ing the logout endpoint does not return an OK response', async () => { expect.assertions(1) - let onIdTokenChangedCallback + let onIdTokenChangedCallback: OnIdTokenChangeCallback // Capture the onIdTokenChanged callback - onIdTokenChanged.mockImplementation((_, callback) => { + mockOnIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) - const mockFirebaseUser = undefined + const mockFirebaseUser = null renderHook(() => useFirebaseUser()) // Mock that `fetch` returns a non-OK response. - global.fetch.mockResolvedValue({ + fetchSpy.mockResolvedValue({ ...createMockFetchResponse(), ok: false, status: 500, @@ -331,23 +344,23 @@ describe('useFirebaseUser', () => { it('calls onLogoutRequestError if defined, rather than throwing, when the logout endpoint returns a non-OK response', async () => { expect.assertions(2) const mockOnLogoutRequestError = jest.fn() - setConfig({ + mockSetConfig({ ...createMockConfig(), loginAPIEndpoint: 'https://example.com/api/my-login', logoutAPIEndpoint: 'https://example.com/api/my-logout', onLogoutRequestError: mockOnLogoutRequestError, }) - let onIdTokenChangedCallback - onIdTokenChanged.mockImplementation((_, callback) => { + let onIdTokenChangedCallback: OnIdTokenChangeCallback + mockOnIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) - const mockFirebaseUser = undefined + const mockFirebaseUser = null renderHook(() => useFirebaseUser()) // Mock that `fetch` returns a non-OK response. - global.fetch.mockResolvedValue({ + fetchSpy.mockResolvedValue({ ...createMockFetchResponse(), ok: false, status: 500, @@ -365,19 +378,19 @@ describe('useFirebaseUser', () => { it('throws if `fetch` throws when calling the logout endpoint', async () => { expect.assertions(1) - let onIdTokenChangedCallback + let onIdTokenChangedCallback: OnIdTokenChangeCallback // Capture the onIdTokenChanged callback - onIdTokenChanged.mockImplementation((_, callback) => { + mockOnIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) - const mockFirebaseUser = undefined + const mockFirebaseUser = null renderHook(() => useFirebaseUser()) // Mock that `fetch` returns a non-OK response. - global.fetch.mockRejectedValue(new Error('Could not fetch.')) + fetchSpy.mockRejectedValue(new Error('Could not fetch.')) await act(async () => { await expect(onIdTokenChangedCallback(mockFirebaseUser)).rejects.toThrow( @@ -389,7 +402,7 @@ describe('useFirebaseUser', () => { it('unsubscribes from the Firebase `onIdTokenChanged` event when it unmounts', () => { expect.assertions(2) const onIdTokenChangedUnsubscribe = jest.fn() - onIdTokenChanged.mockImplementation(() => onIdTokenChangedUnsubscribe) + mockOnIdTokenChanged.mockImplementation(() => onIdTokenChangedUnsubscribe) const { unmount } = renderHook(() => useFirebaseUser()) expect(onIdTokenChangedUnsubscribe).not.toHaveBeenCalled() unmount() @@ -404,28 +417,26 @@ describe('useFirebaseUser', () => { const consoleErrorSpy = jest.spyOn(console, 'error') // Control when the auth fetch resolves. - let fetchPromiseResolver - const fetchPromise = jest.fn( - () => - new Promise((resolve) => { - fetchPromiseResolver = resolve - }) - ) + let fetchPromiseResolver: PromiseResolver + const fetchPromise = () => + new Promise((resolve) => { + fetchPromiseResolver = resolve + }) as unknown as Promise global.fetch = fetchPromise const mockFirebaseUser = createMockFirebaseUserClientSDK() const mockFirebaseUserWithClaims = { ...mockFirebaseUser, claims: {} } - let onIdTokenChangedCallback + let onIdTokenChangedCallback: OnIdTokenChangeCallback // Capture the onIdTokenChanged callback - onIdTokenChanged.mockImplementation((_, callback) => { + mockOnIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) // Intercept the getIdToken call - getIdTokenResult.mockResolvedValue(mockFirebaseUserWithClaims) + mockGetIdTokenResult.mockResolvedValue(mockFirebaseUserWithClaims) const { unmount } = renderHook(() => useFirebaseUser()) await act(async () => { @@ -445,7 +456,7 @@ describe('useFirebaseUser', () => { it('calls "tokenChangedHandler" with AuthUser if it is configured', async () => { expect.assertions(4) const tokenChangedHandler = jest.fn() - setConfig({ + mockSetConfig({ ...createMockConfig(), tokenChangedHandler, }) @@ -454,12 +465,12 @@ describe('useFirebaseUser', () => { // Intercept the getIdToken call const idTokenResult = createMockIdTokenResult() - getIdTokenResult.mockResolvedValue(idTokenResult) + mockGetIdTokenResult.mockResolvedValue(idTokenResult) - let onIdTokenChangedCallback + let onIdTokenChangedCallback: OnIdTokenChangeCallback // Capture the onIdTokenChanged callback - onIdTokenChanged.mockImplementation((_, callback) => { + mockOnIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) @@ -489,28 +500,26 @@ describe('useFirebaseUser', () => { expect.assertions(2) // Control when the auth fetch resolves. - let fetchPromiseResolver - const fetchPromise = jest.fn( - () => - new Promise((resolve) => { - fetchPromiseResolver = resolve - }) - ) + let fetchPromiseResolver: PromiseResolver + const fetchPromise = () => + new Promise((resolve) => { + fetchPromiseResolver = resolve + }) as unknown as Promise global.fetch = fetchPromise const mockFirebaseUser = createMockFirebaseUserClientSDK() const mockFirebaseUserWithClaims = { ...mockFirebaseUser, claims: {} } - let onIdTokenChangedCallback + let onIdTokenChangedCallback: OnIdTokenChangeCallback // Capture the onIdTokenChanged callback - onIdTokenChanged.mockImplementation((_, callback) => { + mockOnIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) // Intercept the getIdToken call - getIdTokenResult.mockResolvedValue(mockFirebaseUserWithClaims) + mockGetIdTokenResult.mockResolvedValue(mockFirebaseUserWithClaims) const { result } = renderHook(() => useFirebaseUser()) @@ -543,7 +552,7 @@ describe('useFirebaseUser', () => { expect.assertions(2) // Control when the tokenChangedHanlder resolves. - let tokenChangedPromiseResolver + let tokenChangedPromiseResolver: PromiseResolver const tokenChangedHandler = jest.fn( () => new Promise((resolve) => { @@ -551,7 +560,7 @@ describe('useFirebaseUser', () => { }) ) - setConfig({ + mockSetConfig({ ...createMockConfig(), tokenChangedHandler, }) @@ -560,12 +569,12 @@ describe('useFirebaseUser', () => { // Intercept the getIdToken call const idTokenResult = createMockIdTokenResult() - getIdTokenResult.mockResolvedValue(idTokenResult) + mockGetIdTokenResult.mockResolvedValue(idTokenResult) - let onIdTokenChangedCallback + let onIdTokenChangedCallback: OnIdTokenChangeCallback // Capture the onIdTokenChanged callback - onIdTokenChanged.mockImplementation((_, callback) => { + mockOnIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) @@ -603,16 +612,16 @@ describe('useFirebaseUser', () => { const mockFirebaseUser = createMockFirebaseUserClientSDK() const mockFirebaseUserWithClaims = { ...mockFirebaseUser, claims: {} } - let onIdTokenChangedCallback + let onIdTokenChangedCallback: OnIdTokenChangeCallback // Capture the onIdTokenChanged callback - onIdTokenChanged.mockImplementation((_, callback) => { + mockOnIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) // Intercept the getIdToken call - getIdTokenResult.mockResolvedValue(mockFirebaseUserWithClaims) + mockGetIdTokenResult.mockResolvedValue(mockFirebaseUserWithClaims) const { result } = renderHook(() => useFirebaseUser()) @@ -627,13 +636,11 @@ describe('useFirebaseUser', () => { }) // Control when the auth fetch resolves. - let fetchPromiseResolver - const fetchPromise = jest.fn( - () => - new Promise((resolve) => { - fetchPromiseResolver = resolve - }) - ) + let fetchPromiseResolver: PromiseResolver + const fetchPromise = () => + new Promise((resolve) => { + fetchPromiseResolver = resolve + }) as unknown as Promise global.fetch = fetchPromise await act(async () => { @@ -660,33 +667,33 @@ describe('useFirebaseUser', () => { it('logs the expected debugging messages logging in with the default tokenChangedHandler', async () => { expect.assertions(3) - setConfig({ + mockSetConfig({ ...createMockConfig(), }) const mockFirebaseUser = createMockFirebaseUserClientSDK() const idTokenResult = createMockIdTokenResult() - getIdTokenResult.mockResolvedValue(idTokenResult) + mockGetIdTokenResult.mockResolvedValue(idTokenResult) - let onIdTokenChangedCallback + let onIdTokenChangedCallback: OnIdTokenChangeCallback // Capture the onIdTokenChanged callback - onIdTokenChanged.mockImplementation((_, callback) => { + mockOnIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) renderHook(() => useFirebaseUser()) - logDebug.mockClear() + mockLogDebug.mockClear() await act(async () => { await onIdTokenChangedCallback(mockFirebaseUser) }) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[withAuthUser] The Firebase ID token changed. New Firebase user:', expect.any(Object) ) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[withAuthUser] Calling the login endpoint.' ) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[withAuthUser] Completed the auth API request.' ) }) @@ -694,108 +701,108 @@ describe('useFirebaseUser', () => { it('logs the expected debugging messages when calling the login endpoint fails', async () => { expect.assertions(5) const mockOnLoginRequestError = jest.fn() - setConfig({ + mockSetConfig({ ...createMockConfig(), loginAPIEndpoint: 'https://example.com/api/my-login', logoutAPIEndpoint: 'https://example.com/api/my-logout', onLoginRequestError: mockOnLoginRequestError, }) - let onIdTokenChangedCallback - onIdTokenChanged.mockImplementation((_, callback) => { + let onIdTokenChangedCallback: OnIdTokenChangeCallback + mockOnIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) const idTokenResult = createMockIdTokenResult() - getIdTokenResult.mockResolvedValue(idTokenResult) + mockGetIdTokenResult.mockResolvedValue(idTokenResult) const mockFirebaseUser = createMockFirebaseUserClientSDK() renderHook(() => useFirebaseUser()) // Mock that `fetch` returns a non-OK response. - global.fetch.mockResolvedValue({ + fetchSpy.mockResolvedValue({ ...createMockFetchResponse(), ok: false, status: 500, json: async () => ({ not: 'good' }), }) - logDebug.mockClear() + mockLogDebug.mockClear() await act(async () => { await onIdTokenChangedCallback(mockFirebaseUser) }) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[withAuthUser] The Firebase ID token changed. New Firebase user:', expect.any(Object) ) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[withAuthUser] Calling the login endpoint.' ) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( `[withAuthUser] The call to the login endpoint failed with status 500 and response: ${JSON.stringify( { not: 'good' } )}` ) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[withAuthUser] Completed the auth API request.' ) - expect(logDebug).toHaveBeenCalledTimes(4) + expect(mockLogDebug).toHaveBeenCalledTimes(4) }) it('logs the expected debugging messages logging out with the default tokenChangedHandler', async () => { expect.assertions(4) - setConfig({ + mockSetConfig({ ...createMockConfig(), }) - getIdTokenResult.mockResolvedValue(undefined) + mockGetIdTokenResult.mockResolvedValue(undefined) - let onIdTokenChangedCallback + let onIdTokenChangedCallback: OnIdTokenChangeCallback // Capture the onIdTokenChanged callback - onIdTokenChanged.mockImplementation((_, callback) => { + mockOnIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) renderHook(() => useFirebaseUser()) - logDebug.mockClear() + mockLogDebug.mockClear() await act(async () => { - await onIdTokenChangedCallback(undefined) + await onIdTokenChangedCallback(null) }) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[withAuthUser] The Firebase ID token changed. New Firebase user:', - undefined + null ) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[withAuthUser] Calling the logout endpoint.' ) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[withAuthUser] Completed the auth API request.' ) - expect(logDebug).toHaveBeenCalledTimes(3) + expect(mockLogDebug).toHaveBeenCalledTimes(3) }) it('logs the expected debugging messages when calling the logout endpoint fails', async () => { expect.assertions(4) - let onIdTokenChangedCallback + let onIdTokenChangedCallback: OnIdTokenChangeCallback // Capture the onIdTokenChanged callback - onIdTokenChanged.mockImplementation((_, callback) => { + mockOnIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) - const mockFirebaseUser = undefined + const mockFirebaseUser = null renderHook(() => useFirebaseUser()) // Mock that `fetch` returns a non-OK response. - global.fetch.mockResolvedValue({ + fetchSpy.mockResolvedValue({ ...createMockFetchResponse(), ok: false, status: 500, json: async () => ({ not: 'good' }), }) - logDebug.mockClear() + mockLogDebug.mockClear() await act(async () => { try { await onIdTokenChangedCallback(mockFirebaseUser) @@ -803,49 +810,49 @@ describe('useFirebaseUser', () => { // eslint-disable-next-line no-empty } catch (e) {} }) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[withAuthUser] The Firebase ID token changed. New Firebase user:', - undefined + null ) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[withAuthUser] Calling the logout endpoint.' ) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( `[withAuthUser] The call to the logout endpoint failed with status 500 and response: ${JSON.stringify( { not: 'good' } )}` ) - expect(logDebug).toHaveBeenCalledTimes(3) + expect(mockLogDebug).toHaveBeenCalledTimes(3) }) it('logs the expected debugging messages when calling a custom tokenChangedHandler', async () => { expect.assertions(6) - let tokenChangedPromiseResolver + let tokenChangedPromiseResolver: PromiseResolver const tokenChangedHandler = jest.fn( () => new Promise((resolve) => { tokenChangedPromiseResolver = resolve }) ) - setConfig({ + mockSetConfig({ ...createMockConfig(), tokenChangedHandler, }) const mockFirebaseUser = createMockFirebaseUserClientSDK() const idTokenResult = createMockIdTokenResult() - getIdTokenResult.mockResolvedValue(idTokenResult) + mockGetIdTokenResult.mockResolvedValue(idTokenResult) - let onIdTokenChangedCallback + let onIdTokenChangedCallback: OnIdTokenChangeCallback // Capture the onIdTokenChanged callback - onIdTokenChanged.mockImplementation((_, callback) => { + mockOnIdTokenChanged.mockImplementation((_, callback) => { onIdTokenChangedCallback = callback return () => {} // "unsubscribe" function }) renderHook(() => useFirebaseUser()) - expect(logDebug).not.toHaveBeenCalled() + expect(mockLogDebug).not.toHaveBeenCalled() await act(async () => { // Not awaited. The `tokenChangedHandler` call has not resolved; that is, @@ -853,16 +860,16 @@ describe('useFirebaseUser', () => { onIdTokenChangedCallback(mockFirebaseUser) }) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[withAuthUser] The Firebase ID token changed. New Firebase user:', expect.any(Object) ) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[withAuthUser] Calling the custom "tokenChangedHandler" provided in the config.' ) // Shouldn't be called yet. - expect(logDebug).not.toHaveBeenCalledWith( + expect(mockLogDebug).not.toHaveBeenCalledWith( '[withAuthUser] Completed the auth API request.' ) @@ -872,9 +879,9 @@ describe('useFirebaseUser', () => { tokenChangedPromiseResolver(createMockFetchResponse()) }) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[withAuthUser] Completed the auth API request.' ) - expect(logDebug).toHaveBeenCalledTimes(3) + expect(mockLogDebug).toHaveBeenCalledTimes(3) }) }) diff --git a/src/__tests__/withAuthUser.moduleLoad.test.js b/src/__tests__/withAuthUser.moduleLoad.test.ts similarity index 98% rename from src/__tests__/withAuthUser.moduleLoad.test.js rename to src/__tests__/withAuthUser.moduleLoad.test.ts index 535b00ce..64bb6a00 100644 --- a/src/__tests__/withAuthUser.moduleLoad.test.js +++ b/src/__tests__/withAuthUser.moduleLoad.test.ts @@ -2,6 +2,9 @@ // modules between tests. Most tests should reside in // withAuthUser.test.js. +// eslint-disable-next-line jest/no-export +export {} + // Allow using the name "mockModuleNotFoundError". /* eslint-disable new-cap */ jest.mock('react') diff --git a/src/__tests__/withAuthUser.test.js b/src/__tests__/withAuthUser.test.tsx similarity index 85% rename from src/__tests__/withAuthUser.test.js rename to src/__tests__/withAuthUser.test.tsx index 881845a5..1cc7e760 100644 --- a/src/__tests__/withAuthUser.test.js +++ b/src/__tests__/withAuthUser.test.tsx @@ -8,10 +8,11 @@ import { createMockFirebaseUserClientSDK, } from 'src/testHelpers/authUserInputs' import useAuthUser from 'src/useAuthUser' -import createAuthUser from 'src/createAuthUser' +import createAuthUser, { AuthUser as AuthUserType } from 'src/createAuthUser' import useFirebaseUser from 'src/useFirebaseUser' import AuthAction from 'src/AuthAction' import logDebug from 'src/logDebug' +import withAuthUser from 'src/withAuthUser' // Note that we don't mock createAuthUser or useAuthUser. const mockRouterPush = jest.fn() @@ -23,38 +24,55 @@ jest.mock('src/useFirebaseUser') jest.mock('src/isClientSide') jest.mock('src/logDebug') -const MockComponent = ({ message }) =>
Hello! {message}
+const mockUseFirebaseUser = jest.mocked(useFirebaseUser) + +const MockComponent = ({ message }: { message: string }) => ( +
Hello! {message}
+) const getUseFirebaseUserResponse = () => ({ - user: undefined, + user: null, claims: {}, initialized: false, authRequestCompleted: false, }) +const originalWindowLocation = window.location + beforeEach(() => { - delete window.location - window.location = { replace: jest.fn() } + Object.defineProperty(window, 'location', { + configurable: true, + enumerable: true, + value: { + replace: jest.fn(), + }, + }) + // Default to client side context. const isClientSide = require('src/isClientSide').default isClientSide.mockReturnValue(true) setConfig(getMockConfig()) - useFirebaseUser.mockReturnValue(getUseFirebaseUserResponse()) + mockUseFirebaseUser.mockReturnValue(getUseFirebaseUserResponse()) }) afterEach(() => { + Object.defineProperty(window, 'location', { + configurable: true, + enumerable: true, + value: originalWindowLocation, + }) + jest.clearAllMocks() }) describe('withAuthUser: rendering/redirecting', () => { it('renders the child component when there is no server-side or client-side user by default (rendering is the default setting)', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), - user: undefined, // no client-side user + user: null, // no client-side user initialized: false, // not yet initialized }) const MockCompWithUser = withAuthUser()(MockComponent) @@ -64,10 +82,9 @@ describe('withAuthUser: rendering/redirecting', () => { it('renders the child component when there is no server-side or client-side user and rendering without a user is allowed', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), - user: undefined, // no client-side user + user: null, // no client-side user initialized: false, // not yet initialized }) const MockCompWithUser = withAuthUser({ @@ -81,10 +98,9 @@ describe('withAuthUser: rendering/redirecting', () => { it('returns null if when there is no server-side or client-side user and "whenUnauthedBeforeInit" is set to render null', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), - user: undefined, // no client-side user + user: null, // no client-side user initialized: false, // not yet initialized }) const MockCompWithUser = withAuthUser({ @@ -98,10 +114,9 @@ describe('withAuthUser: rendering/redirecting', () => { it('renders the child component when there is a server-side user and rendering without a user is *not* allowed', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), - user: undefined, // no client-side user + user: null, // no client-side user initialized: false, // not yet initialized }) const MockSerializedAuthUser = createMockSerializedAuthUser() @@ -121,9 +136,8 @@ describe('withAuthUser: rendering/redirecting', () => { it('renders the child component when there is a client-side user (but no server-side user) and rendering without a user is *not* allowed', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), user: createMockFirebaseUserClientSDK(), // client-side user exists initialized: true, @@ -145,7 +159,6 @@ describe('withAuthUser: rendering/redirecting', () => { it('renders the child component when there is a client-side user after Firebase initializes (but no server-side user) and rendering without a user should return null', () => { expect.assertions(2) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user const MockCompWithUser = withAuthUser({ whenUnauthedBeforeInit: AuthAction.RETURN_NULL, @@ -162,7 +175,7 @@ describe('withAuthUser: rendering/redirecting', () => { // The wrapped component will only render after the client-side // user is available. expect(queryByText('Hello! How are you?')).toBeNull() - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), user: createMockFirebaseUserClientSDK(), initialized: true, @@ -179,11 +192,10 @@ describe('withAuthUser: rendering/redirecting', () => { it('shows the provided loading component on the client side when there is no user (*before* Firebase initializes) and a "show loader" strategy is set', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), - user: undefined, // no client-side user + user: null, // no client-side user initialized: false, // not yet initialized authRequestCompleted: false, }) @@ -191,12 +203,11 @@ describe('withAuthUser: rendering/redirecting', () => { const MockCompWithUser = withAuthUser({ whenUnauthedBeforeInit: AuthAction.SHOW_LOADER, whenUnauthedAfterInit: AuthAction.RENDER, - redirectIfAuthed: true, LoaderComponent: MyLoader, })(MockComponent) const { queryByText } = render( ) @@ -205,22 +216,20 @@ describe('withAuthUser: rendering/redirecting', () => { it('returns null if no loading component is provided but we should show a loader', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), - user: undefined, // no client-side user + user: null, // no client-side user initialized: false, // not yet initialized }) const MockCompWithUser = withAuthUser({ whenUnauthedBeforeInit: AuthAction.SHOW_LOADER, whenUnauthedAfterInit: AuthAction.RENDER, - redirectIfAuthed: true, LoaderComponent: undefined, // none defined })(MockComponent) const { container } = render( ) @@ -229,11 +238,10 @@ describe('withAuthUser: rendering/redirecting', () => { it('redirects to login on the client side when there is no user (*before* Firebase initializes) and a redirecting strategy is set', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), - user: undefined, // no client-side user + user: null, // no client-side user initialized: false, // not yet initialized authRequestCompleted: false, }) @@ -251,7 +259,7 @@ describe('withAuthUser: rendering/redirecting', () => { })(MockComponent) render( ) @@ -260,11 +268,10 @@ describe('withAuthUser: rendering/redirecting', () => { it('logs a debugging message when redirecting to login', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), - user: undefined, // no client-side user + user: null, // no client-side user initialized: false, // not yet initialized authRequestCompleted: false, }) @@ -282,7 +289,7 @@ describe('withAuthUser: rendering/redirecting', () => { })(MockComponent) render( ) @@ -293,11 +300,10 @@ describe('withAuthUser: rendering/redirecting', () => { it('redirects to login on the client side when there is no user and a redirecting strategy is set, but only *after* Firebase initializes and the auth cookie request is complete', () => { expect.assertions(3) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), - user: undefined, // no client-side user + user: null, // no client-side user initialized: false, // not initialized authRequestCompleted: false, // login request not completed }) @@ -313,33 +319,33 @@ describe('withAuthUser: rendering/redirecting', () => { })(MockComponent) const { rerender } = render( ) expect(mockRouterReplace).not.toHaveBeenCalled() - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), - user: undefined, + user: null, initialized: true, // changed authRequestCompleted: false, }) rerender( ) expect(mockRouterReplace).not.toHaveBeenCalled() - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), - user: undefined, + user: null, initialized: true, authRequestCompleted: true, // changed }) rerender( ) @@ -348,13 +354,12 @@ describe('withAuthUser: rendering/redirecting', () => { it('does not redirect to login when server-side, even when a redirecting strategy is set (redirects here are client-side only)', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const isClientSide = require('src/isClientSide').default isClientSide.mockReturnValue(false) // server-side const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), - user: undefined, // no client-side user + user: null, // no client-side user initialized: false, // not yet initialized authRequestCompleted: false, }) @@ -372,7 +377,7 @@ describe('withAuthUser: rendering/redirecting', () => { })(MockComponent) render( ) @@ -381,11 +386,10 @@ describe('withAuthUser: rendering/redirecting', () => { it('throws if needing to redirect to login and "authPageURL" is not set in the config', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), - user: undefined, // no client-side user + user: null, // no client-side user initialized: true, // already initialized authRequestCompleted: true, }) @@ -411,7 +415,7 @@ describe('withAuthUser: rendering/redirecting', () => { expect(() => { render( ) @@ -422,18 +426,17 @@ describe('withAuthUser: rendering/redirecting', () => { it('throws if needing to redirect to login and "authPageURL" is a function that does not resolve to a non-empty string', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), - user: undefined, // no client-side user exists + user: null, // no client-side user exists initialized: true, authRequestCompleted: true, }) const mockConfig = getMockConfig() setConfig({ ...mockConfig, - authPageURL: () => undefined, // custom app page + authPageURL: () => undefined as unknown as string, // should be set }) const MockCompWithUser = withAuthUser({ whenUnauthedBeforeInit: AuthAction.REDIRECT_TO_LOGIN, @@ -451,7 +454,7 @@ describe('withAuthUser: rendering/redirecting', () => { expect(() => render( ) @@ -462,16 +465,16 @@ describe('withAuthUser: rendering/redirecting', () => { it('calls the "authPageURL" function with an undefined context and unauthed AuthUser if redirecting to the login page on client', () => { expect.assertions(3) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), - user: undefined, // no client-side user + user: null, // no client-side user initialized: true, // already initialized authRequestCompleted: true, }) const mockConfig = getMockConfig() - let propsSpy + // eslint-disable-next-line @typescript-eslint/no-explicit-any + let propsSpy: { [key: string]: any } = {} setConfig({ ...mockConfig, authPageURL: (props) => { @@ -486,7 +489,7 @@ describe('withAuthUser: rendering/redirecting', () => { })(MockComponent) render( ) @@ -497,9 +500,8 @@ describe('withAuthUser: rendering/redirecting', () => { it('redirects to the app on the client side only when there is a user, a redirect-to-app-when-authed strategy is set, and the request to set cookies has completed', () => { expect.assertions(3) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), user: createMockFirebaseUserClientSDK(), // client-side user exists claims: undefined, @@ -518,12 +520,12 @@ describe('withAuthUser: rendering/redirecting', () => { })(MockComponent) const { rerender } = render( ) expect(mockRouterReplace).not.toHaveBeenCalled() - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), user: createMockFirebaseUserClientSDK(), claims: undefined, @@ -532,12 +534,12 @@ describe('withAuthUser: rendering/redirecting', () => { }) rerender( ) expect(mockRouterReplace).not.toHaveBeenCalled() - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), user: createMockFirebaseUserClientSDK(), claims: undefined, @@ -546,7 +548,7 @@ describe('withAuthUser: rendering/redirecting', () => { }) rerender( ) @@ -555,9 +557,8 @@ describe('withAuthUser: rendering/redirecting', () => { it('logs a debugging message when redirecting to the app', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), user: createMockFirebaseUserClientSDK(), // client-side user exists claims: undefined, @@ -576,7 +577,7 @@ describe('withAuthUser: rendering/redirecting', () => { })(MockComponent) render( ) @@ -585,11 +586,10 @@ describe('withAuthUser: rendering/redirecting', () => { it('does not redirect to the app on the server side, even when we will redirect to the app on the client side', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const isClientSide = require('src/isClientSide').default isClientSide.mockReturnValue(false) // server-side const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), user: createMockFirebaseUserClientSDK(), // client-side user exists claims: undefined, @@ -608,7 +608,7 @@ describe('withAuthUser: rendering/redirecting', () => { })(MockComponent) render( ) @@ -617,9 +617,8 @@ describe('withAuthUser: rendering/redirecting', () => { it('throws if needing to redirect to the app and "appPageURL" is not set in the config', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), user: createMockFirebaseUserClientSDK(), // client-side user exists initialized: true, @@ -647,7 +646,7 @@ describe('withAuthUser: rendering/redirecting', () => { expect(() => { render( ) @@ -658,9 +657,8 @@ describe('withAuthUser: rendering/redirecting', () => { it('throws if needing to redirect to the app and "appPageURL" is a function that does not resolve to a non-empty string', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), user: createMockFirebaseUserClientSDK(), // client-side user exists initialized: true, @@ -669,7 +667,7 @@ describe('withAuthUser: rendering/redirecting', () => { const mockConfig = getMockConfig() setConfig({ ...mockConfig, - appPageURL: () => undefined, // should be set + appPageURL: () => undefined as unknown as string, // should be set }) const MockCompWithUser = withAuthUser({ whenUnauthedBeforeInit: AuthAction.RENDER, @@ -688,7 +686,7 @@ describe('withAuthUser: rendering/redirecting', () => { expect(() => { render( ) @@ -699,9 +697,8 @@ describe('withAuthUser: rendering/redirecting', () => { it('calls "appPageURL" with an undefined context and valid AuthUser if redirecting to the app page and a function is provided', () => { expect.assertions(2) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), user: createMockFirebaseUserClientSDK(), // client-side user exists initialized: true, @@ -713,7 +710,7 @@ describe('withAuthUser: rendering/redirecting', () => { ...mockConfig, appPageURL: ({ ctx, AuthUser }) => { ctxSpy = ctx - return `/my-app/here/?email=${AuthUser.email}` // custom app page + return `/my-app/here/?email=${AuthUser?.email}` // custom app page }, }) const MockCompWithUser = withAuthUser({ @@ -723,7 +720,7 @@ describe('withAuthUser: rendering/redirecting', () => { })(MockComponent) render( ) @@ -735,11 +732,10 @@ describe('withAuthUser: rendering/redirecting', () => { it('renders null when redirecting to login and whenUnauthedBeforeInit === AuthAction.RETURN_NULL', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), - user: undefined, // no client-side user + user: null, // no client-side user initialized: true, // already initialized authRequestCompleted: true, }) @@ -750,7 +746,7 @@ describe('withAuthUser: rendering/redirecting', () => { })(MockComponent) const { container } = render( ) @@ -759,11 +755,10 @@ describe('withAuthUser: rendering/redirecting', () => { it('renders the loader when redirecting to login and whenUnauthedBeforeInit === AuthAction.SHOW_LOADER', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), - user: undefined, // no client-side user + user: null, // no client-side user initialized: true, // already initialized authRequestCompleted: true, }) @@ -776,7 +771,7 @@ describe('withAuthUser: rendering/redirecting', () => { })(MockComponent) const { queryByText } = render( ) @@ -785,11 +780,10 @@ describe('withAuthUser: rendering/redirecting', () => { it('renders the child component when redirecting to login and whenUnauthedBeforeInit === AuthAction.RENDER', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), - user: undefined, // no client-side user + user: null, // no client-side user initialized: true, // already initialized authRequestCompleted: true, }) @@ -800,7 +794,7 @@ describe('withAuthUser: rendering/redirecting', () => { })(MockComponent) const { queryByText } = render( ) @@ -809,9 +803,8 @@ describe('withAuthUser: rendering/redirecting', () => { it('renders null by default when redirecting to the app', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), user: createMockFirebaseUserClientSDK(), // client-side user exists initialized: true, @@ -824,7 +817,7 @@ describe('withAuthUser: rendering/redirecting', () => { })(MockComponent) const { container } = render( ) @@ -833,9 +826,8 @@ describe('withAuthUser: rendering/redirecting', () => { it('renders the child component when redirecting to the app and whenAuthedBeforeRedirect === AuthAction.RENDER', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), user: createMockFirebaseUserClientSDK(), // client-side user exists initialized: true, @@ -847,7 +839,7 @@ describe('withAuthUser: rendering/redirecting', () => { })(MockComponent) const { queryByText } = render( ) @@ -856,9 +848,8 @@ describe('withAuthUser: rendering/redirecting', () => { it('renders the loader component when redirecting to the app and whenAuthedBeforeRedirect === AuthAction.SHOW_LOADER', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), user: createMockFirebaseUserClientSDK(), // client-side user exists initialized: true, @@ -872,7 +863,7 @@ describe('withAuthUser: rendering/redirecting', () => { })(MockComponent) const { queryByText } = render( ) @@ -881,9 +872,8 @@ describe('withAuthUser: rendering/redirecting', () => { it('renders null by default when redirecting to the app, even while waiting for authRequestCompleted', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), user: createMockFirebaseUserClientSDK(), // client-side user exists initialized: true, @@ -896,7 +886,7 @@ describe('withAuthUser: rendering/redirecting', () => { })(MockComponent) const { container } = render( ) @@ -905,16 +895,16 @@ describe('withAuthUser: rendering/redirecting', () => { it('calls the "authPageURL" function with an undefined context and unauthed AuthUser if redirecting to the login outside the base path on client', () => { expect.assertions(3) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), - user: undefined, // no client-side user + user: null, // no client-side user initialized: true, // already initialized authRequestCompleted: true, }) const mockConfig = getMockConfig() - let propsSpy + // eslint-disable-next-line @typescript-eslint/no-explicit-any + let propsSpy: { [key: string]: any } = {} setConfig({ ...mockConfig, authPageURL: (props) => { @@ -933,7 +923,7 @@ describe('withAuthUser: rendering/redirecting', () => { })(MockComponent) render( ) @@ -944,9 +934,8 @@ describe('withAuthUser: rendering/redirecting', () => { it('calls location.replace (with appPageURL as a function returning an object) when redirecting to the login outside the base path on client', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), user: createMockFirebaseUserClientSDK(), // client-side user exists claims: undefined, @@ -969,7 +958,7 @@ describe('withAuthUser: rendering/redirecting', () => { })(MockComponent) render( ) @@ -978,9 +967,8 @@ describe('withAuthUser: rendering/redirecting', () => { it('calls location.replace (with appPageURL as an object) when redirecting to the login outside the base path on client', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), user: createMockFirebaseUserClientSDK(), // client-side user exists claims: undefined, @@ -1003,7 +991,7 @@ describe('withAuthUser: rendering/redirecting', () => { })(MockComponent) render( ) @@ -1012,9 +1000,8 @@ describe('withAuthUser: rendering/redirecting', () => { it('calls router.replace (with appPageURL as an object) when redirecting to the login *within* the base path on client', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), user: createMockFirebaseUserClientSDK(), // client-side user exists claims: undefined, @@ -1036,7 +1023,7 @@ describe('withAuthUser: rendering/redirecting', () => { })(MockComponent) render( ) @@ -1047,11 +1034,10 @@ describe('withAuthUser: rendering/redirecting', () => { describe('withAuthUser: AuthUser context', () => { it('sets the AuthUser context to an empty AuthUser when there is no server-side or client-side user', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), - user: undefined, // no client-side user exists + user: null, // no client-side user exists initialized: false, }) const expectedAuthUser = { @@ -1079,7 +1065,6 @@ describe('withAuthUser: AuthUser context', () => { it('sets the AuthUser context using the server-side user (when there is no client-side user)', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = createMockSerializedAuthUser() const expectedAuthUser = { ...createAuthUser({ @@ -1089,9 +1074,9 @@ describe('withAuthUser: AuthUser context', () => { serialize: expect.any(Function), signOut: expect.any(Function), } - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), - user: undefined, // no client-side user exists + user: null, // no client-side user exists initialized: false, }) @@ -1113,11 +1098,10 @@ describe('withAuthUser: AuthUser context', () => { it('sets the AuthUser context using the client-side user (when there is no server-side user)', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user const mockFirebaseUser = createMockFirebaseUserClientSDK() - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), user: mockFirebaseUser, // client-side user exists initialized: true, @@ -1151,10 +1135,9 @@ describe('withAuthUser: AuthUser context', () => { it('sets the AuthUser context using the client-side user when both client-side and server-side user info exists', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = createMockSerializedAuthUser() // server-side user exists const mockFirebaseUser = createMockFirebaseUserClientSDK() - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), user: mockFirebaseUser, // client-side user exists initialized: true, @@ -1190,11 +1173,10 @@ describe('withAuthUser: AuthUser context', () => { it('sets the AuthUser context using the server-side user when both client-side and server-side user info exists but the Firebase JS SDK has not initialized', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = createMockSerializedAuthUser() // server-side user exists - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), - user: undefined, + user: null, initialized: false, }) @@ -1227,11 +1209,10 @@ describe('withAuthUser: AuthUser context', () => { it('sets the AuthUser context to an empty AuthUser when the server-side user exists, but the Firebase JS SDK *has* initialized and has no user', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = createMockSerializedAuthUser() // server-side user exists - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), - user: undefined, + user: null, initialized: true, authRequestCompleted: true, }) @@ -1266,7 +1247,6 @@ describe('withAuthUser: AuthUser context', () => { it('includes custom claims in the AuthUser context when using the server-side user', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = createMockSerializedAuthUser({ claims: { my: 'custom claims!' }, }) @@ -1281,9 +1261,9 @@ describe('withAuthUser: AuthUser context', () => { my: 'custom claims!', }, } - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), - user: undefined, // no client-side user exists + user: null, // no client-side user exists initialized: false, }) @@ -1305,11 +1285,10 @@ describe('withAuthUser: AuthUser context', () => { it('includes custom claims in the AuthUser context when using the client-side user', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = undefined // no server-side user const mockFirebaseUser = createMockFirebaseUserClientSDK() - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), user: mockFirebaseUser, // client-side user exists claims: { @@ -1351,10 +1330,9 @@ describe('withAuthUser: AuthUser context', () => { it('logs a debugging message when it renders the AuthUser', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = createMockSerializedAuthUser() const mockFirebaseUser = createMockFirebaseUserClientSDK() - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...getUseFirebaseUserResponse(), user: mockFirebaseUser, initialized: true, @@ -1386,7 +1364,6 @@ describe('withAuthUser: AuthUser context', () => { it('provides the same AuthUser object reference after "authRequestCompleted" changes (that is, it does not cause a re-render)', () => { expect.assertions(1) - const withAuthUser = require('src/withAuthUser').default const MockSerializedAuthUser = createMockSerializedAuthUser() // server-side user exists const mockFirebaseUser = createMockFirebaseUserClientSDK() const initialFirebaseUserResponse = { @@ -1395,9 +1372,9 @@ describe('withAuthUser: AuthUser context', () => { initialized: true, authRequestCompleted: false, } - useFirebaseUser.mockReturnValue(initialFirebaseUserResponse) + mockUseFirebaseUser.mockReturnValue(initialFirebaseUserResponse) - const authUsers = [] + const authUsers: AuthUserType[] = [] const AnotherMockComponent = () => { const authUser = useAuthUser() authUsers.push(authUser) @@ -1411,7 +1388,7 @@ describe('withAuthUser: AuthUser context', () => { const { rerender } = render( ) - useFirebaseUser.mockReturnValue({ + mockUseFirebaseUser.mockReturnValue({ ...initialFirebaseUserResponse, authRequestCompleted: true, }) diff --git a/src/__tests__/withAuthUserTokenSSR.test.js b/src/__tests__/withAuthUserTokenSSR.test.ts similarity index 88% rename from src/__tests__/withAuthUserTokenSSR.test.js rename to src/__tests__/withAuthUserTokenSSR.test.ts index 5804ef51..74bfc5e4 100644 --- a/src/__tests__/withAuthUserTokenSSR.test.js +++ b/src/__tests__/withAuthUserTokenSSR.test.ts @@ -1,3 +1,4 @@ +import { GetServerSidePropsContext } from 'next' import { setConfig } from 'src/config' import getMockConfig from 'src/testHelpers/createMockConfig' import { createMockFirebaseUserAdminSDK } from 'src/testHelpers/authUserInputs' @@ -6,6 +7,8 @@ import createMockNextContext from 'src/testHelpers/createMockNextContext' import AuthAction from 'src/AuthAction' import getUserFromCookies from 'src/getUserFromCookies' import logDebug from 'src/logDebug' +import { ConfigInput } from 'src/configTypes' +import { PageURL } from 'src/redirectTypes' /** * We intentionally don't mock a few modules whose behavior we want to @@ -17,9 +20,12 @@ jest.mock('src/cookies') jest.mock('src/getUserFromCookies') jest.mock('src/logDebug') +const mockGetUserFromCookies = jest.mocked(getUserFromCookies) +const mockLogDebug = jest.mocked(logDebug) + beforeEach(() => { // Default to an unauthed user. - getUserFromCookies.mockResolvedValue(createAuthUser()) + mockGetUserFromCookies.mockResolvedValue(createAuthUser()) }) afterEach(() => { @@ -36,14 +42,14 @@ describe('withAuthUserTokenSSR: authed user cookies and prop', () => { token: 'a-user-identity-token-abc', firebaseUserAdminSDK: mockFirebaseAdminUser, }) - getUserFromCookies.mockResolvedValue(user) + mockGetUserFromCookies.mockResolvedValue(user) const withAuthUserTokenSSR = require('src/withAuthUserTokenSSR').default const mockGetSSPFunc = jest.fn() const func = withAuthUserTokenSSR()(mockGetSSPFunc) const ctx = createMockNextContext() await func(ctx) - expect(getUserFromCookies).toHaveBeenCalledWith({ + expect(mockGetUserFromCookies).toHaveBeenCalledWith({ req: ctx.req, includeToken: true, }) @@ -58,14 +64,14 @@ describe('withAuthUserTokenSSR: authed user cookies and prop', () => { token: 'a-user-identity-token-abc', firebaseUserAdminSDK: mockFirebaseAdminUser, }) - getUserFromCookies.mockResolvedValue(user) + mockGetUserFromCookies.mockResolvedValue(user) const withAuthUserTokenSSR = require('src/withAuthUserTokenSSR').default const mockGetSSPFunc = jest.fn() const func = withAuthUserTokenSSR({}, { useToken: false })(mockGetSSPFunc) const ctx = createMockNextContext() await func(ctx) - expect(getUserFromCookies).toHaveBeenCalledWith({ + expect(mockGetUserFromCookies).toHaveBeenCalledWith({ req: ctx.req, includeToken: false, }) @@ -80,7 +86,7 @@ describe('withAuthUserTokenSSR: authed user cookies and prop', () => { token: 'a-user-identity-token-abc', firebaseUserAdminSDK: mockFirebaseAdminUser, }) - getUserFromCookies.mockResolvedValue(user) + mockGetUserFromCookies.mockResolvedValue(user) const expectedAuthUserProp = user.serialize() const withAuthUserTokenSSR = require('src/withAuthUserTokenSSR').default @@ -92,10 +98,10 @@ describe('withAuthUserTokenSSR: authed user cookies and prop', () => { }) }) - it('passes an empty serialized AuthUser prop when the user no cookie auth and auth is *not* required', async () => { + it('passes an empty serialized AuthUser prop when the user has no cookie auth and auth is *not* required', async () => { expect.assertions(1) const unauthedUser = createAuthUser() - getUserFromCookies.mockResolvedValue(unauthedUser) + mockGetUserFromCookies.mockResolvedValue(unauthedUser) const expectedAuthUserProp = unauthedUser.serialize() // empty auth const withAuthUserTokenSSR = require('src/withAuthUserTokenSSR').default const mockGetSSPFunc = jest.fn() @@ -132,7 +138,8 @@ describe('withAuthUserTokenSSR: authed user cookies and prop', () => { const mockGetSSPFunc = jest.fn() const func = withAuthUserTokenSSR({ whenUnauthed: AuthAction.REDIRECT_TO_LOGIN, - authPageURL: ({ ctx }) => `/my-login?next=${ctx.pathname}`, + authPageURL: ({ ctx }: { ctx: GetServerSidePropsContext }) => + `/my-login?next=${ctx.query.pathname}`, })(mockGetSSPFunc) const props = await func(createMockNextContext()) expect(props).toEqual({ @@ -151,8 +158,8 @@ describe('withAuthUserTokenSSR: authed user cookies and prop', () => { const mockGetSSPFunc = jest.fn() const func = withAuthUserTokenSSR({ whenUnauthed: AuthAction.REDIRECT_TO_LOGIN, - authPageURL: ({ ctx }) => ({ - destination: `/my-login?next=${ctx.pathname}`, + authPageURL: ({ ctx }: { ctx: GetServerSidePropsContext }) => ({ + destination: `/my-login?next=${ctx.query.pathname}`, basePath: false, }), })(mockGetSSPFunc) @@ -173,8 +180,8 @@ describe('withAuthUserTokenSSR: authed user cookies and prop', () => { const mockGetSSPFunc = jest.fn() const func = withAuthUserTokenSSR({ whenUnauthed: AuthAction.REDIRECT_TO_LOGIN, - authPageURL: ({ ctx }) => ({ - destination: `/my-login?next=${ctx.pathname}`, + authPageURL: ({ ctx }: { ctx: GetServerSidePropsContext }) => ({ + destination: `/my-login?next=${ctx.query.pathname}`, basePath: true, }), })(mockGetSSPFunc) @@ -241,8 +248,8 @@ describe('withAuthUserTokenSSR: authed user cookies and prop', () => { const mockConfig = getMockConfig() setConfig({ ...mockConfig, - authPageURL: () => undefined, // no auth page default defined - }) + authPageURL: () => undefined as unknown as PageURL, // no auth page default defined + } as unknown as ConfigInput) const withAuthUserTokenSSR = require('src/withAuthUserTokenSSR').default const mockGetSSPFunc = jest.fn() @@ -262,7 +269,7 @@ describe('withAuthUserTokenSSR: authed user cookies and prop', () => { // Mock that the user is authed. const mockFirebaseAdminUser = createMockFirebaseUserAdminSDK() - getUserFromCookies.mockResolvedValue( + mockGetUserFromCookies.mockResolvedValue( createAuthUser({ token: 'a-user-identity-token-abc', firebaseUserAdminSDK: mockFirebaseAdminUser, @@ -290,7 +297,7 @@ describe('withAuthUserTokenSSR: authed user cookies and prop', () => { // Mock that the user is authed. const mockFirebaseAdminUser = createMockFirebaseUserAdminSDK() - getUserFromCookies.mockResolvedValue( + mockGetUserFromCookies.mockResolvedValue( createAuthUser({ token: 'a-user-identity-token-abc', firebaseUserAdminSDK: mockFirebaseAdminUser, @@ -322,7 +329,7 @@ describe('withAuthUserTokenSSR: authed user cookies and prop', () => { // Mock that the user is authed. const mockFirebaseAdminUser = createMockFirebaseUserAdminSDK() - getUserFromCookies.mockResolvedValue( + mockGetUserFromCookies.mockResolvedValue( createAuthUser({ token: 'a-user-identity-token-abc', firebaseUserAdminSDK: mockFirebaseAdminUser, @@ -333,7 +340,8 @@ describe('withAuthUserTokenSSR: authed user cookies and prop', () => { const mockGetSSPFunc = jest.fn() const func = withAuthUserTokenSSR({ whenAuthed: AuthAction.REDIRECT_TO_APP, - appPageURL: ({ ctx }) => `/my-app?next=${ctx.pathname}`, + appPageURL: ({ ctx }: { ctx: GetServerSidePropsContext }) => + `/my-app?next=${ctx.query.pathname}`, })(mockGetSSPFunc) const props = await func(createMockNextContext()) expect(props).toEqual({ @@ -348,7 +356,7 @@ describe('withAuthUserTokenSSR: authed user cookies and prop', () => { it('redirects to the config\'s default app URL when no app URL is provided, the user is authed, and "whenAuthed" is set to AuthAction.REDIRECT_TO_APP', async () => { expect.assertions(1) const mockFirebaseAdminUser = createMockFirebaseUserAdminSDK() - getUserFromCookies.mockResolvedValue( + mockGetUserFromCookies.mockResolvedValue( createAuthUser({ token: 'a-user-identity-token-abc', firebaseUserAdminSDK: mockFirebaseAdminUser, @@ -382,7 +390,7 @@ describe('withAuthUserTokenSSR: authed user cookies and prop', () => { // Mock that the user is authed. const mockFirebaseAdminUser = createMockFirebaseUserAdminSDK() - getUserFromCookies.mockResolvedValue( + mockGetUserFromCookies.mockResolvedValue( createAuthUser({ token: 'a-user-identity-token-abc', firebaseUserAdminSDK: mockFirebaseAdminUser, @@ -413,7 +421,7 @@ describe('withAuthUserTokenSSR: authed user cookies and prop', () => { // Mock that the user is authed. const mockFirebaseAdminUser = createMockFirebaseUserAdminSDK() - getUserFromCookies.mockResolvedValue( + mockGetUserFromCookies.mockResolvedValue( createAuthUser({ token: 'a-user-identity-token-abc', firebaseUserAdminSDK: mockFirebaseAdminUser, @@ -423,8 +431,8 @@ describe('withAuthUserTokenSSR: authed user cookies and prop', () => { const mockConfig = getMockConfig() setConfig({ ...mockConfig, - appPageURL: () => undefined, // no default defined - }) + appPageURL: () => undefined as unknown as PageURL, // no default defined + } as unknown as ConfigInput) const withAuthUserTokenSSR = require('src/withAuthUserTokenSSR').default const mockGetSSPFunc = jest.fn() @@ -442,7 +450,7 @@ describe('withAuthUserTokenSSR: authed user cookies and prop', () => { it("includes the composed getServerSideProps's props, passing it the context with a defined AuthUser", async () => { expect.assertions(1) const mockFirebaseAdminUser = createMockFirebaseUserAdminSDK() - getUserFromCookies.mockResolvedValue( + mockGetUserFromCookies.mockResolvedValue( createAuthUser({ token: 'a-user-identity-token-abc', firebaseUserAdminSDK: mockFirebaseAdminUser, @@ -473,7 +481,7 @@ describe('withAuthUserTokenSSR: authed user cookies and prop', () => { it("includes only the composed getServerSideProps's custom 'redirect' logic", async () => { expect.assertions(1) const mockFirebaseAdminUser = createMockFirebaseUserAdminSDK() - getUserFromCookies.mockResolvedValue( + mockGetUserFromCookies.mockResolvedValue( createAuthUser({ token: 'a-user-identity-token-abc', firebaseUserAdminSDK: mockFirebaseAdminUser, @@ -499,7 +507,7 @@ describe('withAuthUserTokenSSR: authed user cookies and prop', () => { it("includes only the composed getServerSideProps's custom 'notFound' logic", async () => { expect.assertions(1) const mockFirebaseAdminUser = createMockFirebaseUserAdminSDK() - getUserFromCookies.mockResolvedValue( + mockGetUserFromCookies.mockResolvedValue( createAuthUser({ token: 'a-user-identity-token-abc', firebaseUserAdminSDK: mockFirebaseAdminUser, @@ -519,16 +527,16 @@ describe('withAuthUserTokenSSR: authed user cookies and prop', () => { token: 'a-user-identity-token-abc', firebaseUserAdminSDK: mockFirebaseAdminUser, }) - getUserFromCookies.mockResolvedValue(user) + mockGetUserFromCookies.mockResolvedValue(user) const withAuthUserTokenSSR = require('src/withAuthUserTokenSSR').default const mockGetSSPFunc = jest.fn() const func = withAuthUserTokenSSR()(mockGetSSPFunc) - logDebug.mockClear() + mockLogDebug.mockClear() await func(createMockNextContext()) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[withAuthUserSSR] Calling "withAuthUserSSR" / "withAuthUserTokenSSR".' ) - expect(logDebug).toHaveBeenCalledTimes(1) + expect(mockLogDebug).toHaveBeenCalledTimes(1) }) it('logs expected debug logs when redirecting to the login URL', async () => { @@ -540,15 +548,15 @@ describe('withAuthUserTokenSSR: authed user cookies and prop', () => { whenUnauthed: AuthAction.REDIRECT_TO_LOGIN, authPageURL: '/my-login', })(mockGetSSPFunc) - logDebug.mockClear() + mockLogDebug.mockClear() await func(createMockNextContext()) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[withAuthUserSSR] Calling "withAuthUserSSR" / "withAuthUserTokenSSR".' ) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[withAuthUserSSR] Redirecting to login.' ) - expect(logDebug).toHaveBeenCalledTimes(2) + expect(mockLogDebug).toHaveBeenCalledTimes(2) }) it('logs expected debug logs when redirecting to the app URL', async () => { @@ -556,7 +564,7 @@ describe('withAuthUserTokenSSR: authed user cookies and prop', () => { // Mock that the user is authed. const mockFirebaseAdminUser = createMockFirebaseUserAdminSDK() - getUserFromCookies.mockResolvedValue( + mockGetUserFromCookies.mockResolvedValue( createAuthUser({ token: 'a-user-identity-token-abc', firebaseUserAdminSDK: mockFirebaseAdminUser, @@ -569,14 +577,14 @@ describe('withAuthUserTokenSSR: authed user cookies and prop', () => { whenAuthed: AuthAction.REDIRECT_TO_APP, appPageURL: '/my-app', })(mockGetSSPFunc) - logDebug.mockClear() + mockLogDebug.mockClear() await func(createMockNextContext()) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[withAuthUserSSR] Calling "withAuthUserSSR" / "withAuthUserTokenSSR".' ) - expect(logDebug).toHaveBeenCalledWith( + expect(mockLogDebug).toHaveBeenCalledWith( '[withAuthUserSSR] Redirecting to app.' ) - expect(logDebug).toHaveBeenCalledTimes(2) + expect(mockLogDebug).toHaveBeenCalledTimes(2) }) }) diff --git a/src/authCookies.js b/src/authCookies.ts similarity index 100% rename from src/authCookies.js rename to src/authCookies.ts diff --git a/src/claims.js b/src/claims.ts similarity index 80% rename from src/claims.js rename to src/claims.ts index 58fab577..f2a2987a 100644 --- a/src/claims.js +++ b/src/claims.ts @@ -19,13 +19,16 @@ export const STANDARD_CLAIMS = [ 'user_id', // not listed in the decodedIDtoken reference but it appears in tokens ] +export interface Claims { + [key: string]: string | object | undefined +} /** * Filter out all standard claims from an object of claims * * @param {Object} obj */ -export const filterStandardClaims = (obj = {}) => { - const claims = {} +export const filterStandardClaims = (obj: Claims = {}) => { + const claims: Claims = {} Object.keys(obj).forEach((key) => { if (!STANDARD_CLAIMS.includes(key)) { claims[key] = obj[key] diff --git a/src/config.js b/src/config.ts similarity index 64% rename from src/config.js rename to src/config.ts index 41bcb437..c84dd23c 100644 --- a/src/config.js +++ b/src/config.ts @@ -1,81 +1,12 @@ import isClientSide from 'src/isClientSide' import logDebug from 'src/logDebug' +import { ConfigInput, ConfigMerged, defaultConfig } from './configTypes' -let config +let config: ConfigMerged -const ONE_WEEK_IN_MS = 7 * 60 * 60 * 24 * 1000 const TWO_WEEKS_IN_MS = 14 * 60 * 60 * 24 * 1000 -// https://github.com/gladly-team/next-firebase-auth#config -const defaultConfig = { - debug: false, - // The API endpoint to call on auth state change for an authenticated user. - loginAPIEndpoint: undefined, - // The API endpoint to call on auth state change for a signed-out user. - logoutAPIEndpoint: undefined, - // Optional function: handler called if the login API endpoint returns - // a non-200 response. Not used if a custom "tokenChangedHandler" is - // defined. If a handler is not defined, this library will throw on any - // non-200 responses. - onLoginRequestError: undefined, - // Optional function: handler called if the logout API endpoint returns - // a non-200 response. Not used if a custom "tokenChangedHandler" is - // defined. If a handler is not defined, this library will throw on any - // non-200 responses. - onLogoutRequestError: undefined, - // Optional function: a handler to call on auth state changes. More info: - // https://github.com/gladly-team/next-firebase-auth#tokenchangedhandler - tokenChangedHandler: undefined, - // Optional function: handler called if there are unexpected errors while - // verifying the user's ID token server-side. - // eslint-disable-next-line @typescript-eslint/no-empty-function - onVerifyTokenError: () => {}, - // Optional function: handler called if there are unexpected errors while - // refreshing the user's ID token server-side. - // eslint-disable-next-line @typescript-eslint/no-empty-function - onTokenRefreshError: () => {}, - // Optional string: the URL to navigate to when the user - // needs to log in. - authPageURL: undefined, - // Optional string: the URL to navigate to when the user - // is alredy logged in but on an authentication page. - appPageURL: undefined, - // Optional object: the config passed to the Firebase admin SDK's - // `initializeApp`. - // Not required if the app is initializing the admin SDK - // elsewhere. - firebaseAdminInitConfig: undefined, - // Required object: the config passed to the Firebase - // client JS SDK firebase.initializeApp. - // The "firebaseClientInitConfig.apiKey" value is always - // required, but other options are optional if the app - // initializes the admin SDK manually. - firebaseClientInitConfig: undefined, - // Optional object: the firebase auth emulator host address - // on the user's machine. Should be set to 'localhost:9099' in order - // to match the FIREBASE_AUTH_EMULATOR_HOST variable on the server - // see https://firebase.google.com/docs/emulator-suite/connect_auth - firebaseAuthEmulatorHost: undefined, - cookies: { - // Required string. The base name for the auth cookies. - name: undefined, - // String or array. - keys: undefined, - // Options below are passed to cookies.set: - // https://github.com/pillarjs/cookies#cookiesset-name--value---options-- - // We'll default to stricter, more secure options. - domain: undefined, - httpOnly: true, - maxAge: ONE_WEEK_IN_MS, - overwrite: true, - path: '/', - sameSite: 'strict', - secure: true, - signed: true, - }, -} - -const validateConfig = (mergedConfig) => { +const validateConfig = (mergedConfig: ConfigMerged) => { const errorMessages = [] // The config should have *either* a tokenChangedHandler *or* other @@ -152,10 +83,10 @@ const validateConfig = (mergedConfig) => { // We consider cookie keys undefined if the keys are an empty string, // empty array, or array of only undefined values. const { keys } = mergedConfig.cookies - const areCookieKeysDefined = - keys && - keys.length && - (keys.filter ? keys.filter((item) => item !== undefined).length : true) + const areCookieKeysDefined = Array.isArray(keys) + ? keys.length && + (keys.filter ? keys.filter((item) => item !== undefined).length : true) + : !!keys // Validate config values that differ between client and server context. if (isClientSide()) { @@ -220,7 +151,10 @@ const validateConfig = (mergedConfig) => { // https://firebase.google.com/docs/auth/admin/manage-cookies // By default, the cookie will be refreshed each time the user loads // the client-side app. - if (mergedConfig.cookies.maxAge > TWO_WEEKS_IN_MS) { + if ( + !mergedConfig.cookies.maxAge || + mergedConfig.cookies.maxAge > TWO_WEEKS_IN_MS + ) { errorMessages.push( `The "cookies.maxAge" setting must be less than two weeks (${TWO_WEEKS_IN_MS} ms).` ) @@ -238,7 +172,7 @@ const validateConfig = (mergedConfig) => { // Replace private values with "hidden" for safer logging during // debugging. -const replacePrivateValues = (unredactedConfig) => { +const replacePrivateValues = (unredactedConfig: ConfigInput) => { const redactedConfig = { ...unredactedConfig, cookies: { @@ -261,13 +195,13 @@ const replacePrivateValues = (unredactedConfig) => { return redactedConfig } -export const setConfig = (userConfig = {}) => { +export const setConfig = (userConfig: ConfigInput) => { logDebug( '[init] Setting config with provided value:', replacePrivateValues(userConfig) ) - const { cookies: cookieOptions = {}, ...otherUserConfig } = userConfig + const { cookies: cookieOptions, ...otherUserConfig } = userConfig // Merge the user's config with the default config, validate it, // and set it. @@ -276,7 +210,7 @@ export const setConfig = (userConfig = {}) => { ...otherUserConfig, cookies: { ...defaultConfig.cookies, - ...cookieOptions, + ...(cookieOptions || {}), }, } const { isValid, errors } = validateConfig(mergedConfig) diff --git a/src/configTypes.ts b/src/configTypes.ts new file mode 100644 index 00000000..8e5cc87f --- /dev/null +++ b/src/configTypes.ts @@ -0,0 +1,158 @@ +import * as Cookies from 'cookies' +import { PageURL } from './redirectTypes' +import { AuthUser } from './createAuthUser' + +type OnErrorHandler = (error: Error) => void + +// https://github.com/gladly-team/next-firebase-auth#config +export interface ConfigInput { + /** + * The redirect destination URL when redirecting to the login page. + */ + authPageURL?: PageURL + /** + * The redirect destination URL when redirecting to the app. + */ + appPageURL?: PageURL + /** + * The API endpoint to call on auth state change for an authenticated user. + */ + loginAPIEndpoint?: string + /** + * The API endpoint to call on auth state change for a signed-out user. + */ + logoutAPIEndpoint?: string + /** + * Handler called if there are unexpected errors while verifying the user's + * ID token server-side. + */ + onVerifyTokenError?: OnErrorHandler + /** + * Handler called if there are unexpected errors while refreshing the + * user's ID token server-side. + */ + onTokenRefreshError?: OnErrorHandler + /** + * A handler to call on auth state changes. More info: + * https://github.com/gladly-team/next-firebase-auth#tokenchangedhandler + */ + tokenChangedHandler?: (user: AuthUser) => void + /** + * Handler called if the login API endpoint returns a non-200 response. + * Not used if a custom "tokenChangedHandler" is defined. If a handler is + * not defined, this library will throw on any non-200 responses. + */ + onLoginRequestError?: OnErrorHandler + /** + * Handler called if the logout API endpoint returns a non-200 response. Not + * used if a custom "tokenChangedHandler" is defined. If a handler is not + * defined, this library will throw on any non-200 responses. + */ + onLogoutRequestError?: OnErrorHandler + /** + * Whether to use application default credentials with firebase-admin. + */ + useFirebaseAdminDefaultCredential?: boolean + /** + * The config passed to the Firebase admin SDK's `initializeApp`. Not + * required if your app manually is initializing the admin SDK elsewhere. + */ + firebaseAdminInitConfig?: { + credential: { + projectId: string + clientEmail: string + privateKey: string + } + databaseURL?: string + } + /** + * The Firebase auth emulator host address on the user's machine. Must match + * the value of the `FIREBASE_AUTH_EMULATOR_HOST` environment variable. + * https://firebase.google.com/docs/emulator-suite/connect_auth + */ + firebaseAuthEmulatorHost?: string + /** + * The config passed to the Firebase client JS SDK's `initializeApp`. + */ + firebaseClientInitConfig: { + apiKey: string + projectId?: string + appId?: string + // "PROJECT_ID.firebaseapp.com" + authDomain?: string + // "https://PROJECT_ID.firebaseio.com" + databaseURL?: string + // "PROJECT_ID.appspot.com" + storageBucket?: string + // "SENDER_ID" + messagingSenderId?: string + // "G-MEASUREMENT_ID" + measurementId?: string + } + cookies: Omit & { + // The base name for the auth cookies. + name: string + sameSite: string + } + /** + * When true, will log events. + */ + debug?: boolean +} + +const ONE_WEEK_IN_MS = 7 * 60 * 60 * 24 * 1000 + +export const defaultConfig = { + debug: false, + // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars + onVerifyTokenError: (_err: Error) => {}, + // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars + onTokenRefreshError: (_err: Error) => {}, + cookies: { + // Required to be provided by the user. + // name: undefined, + httpOnly: true, + maxAge: ONE_WEEK_IN_MS, + overwrite: true, + path: '/', + sameSite: 'strict', + secure: true, + signed: true, + }, +} + +export type ConfigDefault = typeof defaultConfig + +// TODO: move to helper module + +// Spread operator for types +// https://stackoverflow.com/a/49683575/1332513 +type OptionalPropertyNames = { + // eslint-disable-next-line @typescript-eslint/ban-types + [K in keyof T]-?: {} extends { [P in K]: T[K] } ? K : never +}[keyof T] + +type SpreadProperties = { + [P in K]: L[P] | Exclude +} + +type Id = T extends infer U ? { [K in keyof U]: U[K] } : never + +type SpreadTwo = Id< + Pick> & + Pick>> & + Pick, keyof L>> & + SpreadProperties & keyof L> +> + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +type Spread = A extends [infer L, ...infer R] + ? SpreadTwo> + : unknown + +export type ConfigMerged = Omit< + Spread<[ConfigInput, ConfigDefault]>, + 'cookies' +> & { + cookies: Spread<[ConfigInput['cookies'], ConfigDefault['cookies']]> +} diff --git a/src/constants.js b/src/constants.ts similarity index 100% rename from src/constants.js rename to src/constants.ts diff --git a/src/cookies.js b/src/cookies.ts similarity index 65% rename from src/cookies.js rename to src/cookies.ts index 9312163e..47cba7d2 100644 --- a/src/cookies.js +++ b/src/cookies.ts @@ -1,8 +1,33 @@ // https://github.com/pillarjs/cookies import Cookies from 'cookies' +import { + GetServerSidePropsContext, + NextApiRequest, + NextApiResponse, +} from 'next' import { encodeBase64, decodeBase64 } from 'src/encoding' -const createCookieMgr = ({ req, res }, { keys, secure } = {}) => { +interface ReqResObj { + req: NextApiRequest | GetServerSidePropsContext['req'] + res: NextApiResponse | GetServerSidePropsContext['res'] +} + +interface ReqResOptionalObj { + req: NextApiRequest | GetServerSidePropsContext['req'] + res?: NextApiResponse | GetServerSidePropsContext['res'] +} + +type CookieOptions = Omit & { + sameSite?: string +} + +const createCookieMgr = ( + { req, res }: ReqResObj, + { + keys, + secure, + }: { keys?: Cookies.Option['keys']; secure?: Cookies.Option['secure'] } = {} +) => { // https://github.com/pillarjs/cookies const cookies = Cookies(req, res, { keys, @@ -12,7 +37,7 @@ const createCookieMgr = ({ req, res }, { keys, secure } = {}) => { } export const getCookie = ( - name, + name: string, // The request object is mandatory. The response object is optional. { req, @@ -27,15 +52,23 @@ export const getCookie = ( // eslint-disable-next-line @typescript-eslint/no-empty-function call: () => {}, }), - }, - }, - { keys, secure, signed } = {} + } as unknown as NextApiResponse, + }: ReqResOptionalObj, + { + keys, + secure, + signed = false, + }: { + keys?: Cookies.Option['keys'] + secure?: Cookies.Option['secure'] + signed?: Cookies.SetOption['signed'] + } = {} ) => { if (signed) { - const areCookieKeysDefined = - keys && - keys.length && - (keys.filter ? keys.filter((item) => item !== undefined).length : true) + const areCookieKeysDefined = Array.isArray(keys) + ? keys.length && + (keys.filter ? keys.filter((item) => item !== undefined).length : true) + : !!keys if (!areCookieKeysDefined) { throw new Error( 'The "keys" value must be provided when using signed cookies.' @@ -54,10 +87,10 @@ export const getCookie = ( } export const setCookie = ( - name, - cookieVal, + name: string, + cookieVal: string | undefined, // The response object is mandatory. The request is optional and unused. - { req, res }, + { req, res }: ReqResObj, { keys, domain, @@ -68,7 +101,7 @@ export const setCookie = ( sameSite, secure, signed, - } = {} + }: CookieOptions = {} ) => { if (signed && !keys) { throw new Error( @@ -92,7 +125,8 @@ export const setCookie = ( maxAge, overwrite, path, - sameSite, + // Prefer explicit sameSite string instead of boolean. + sameSite: sameSite as Cookies.SetOption['sameSite'], secure, signed, }) @@ -100,7 +134,11 @@ export const setCookie = ( // Some options, like path and domain, must match those used when setting // the cookie. -export const deleteCookie = (name, reqResObj, options) => { +export const deleteCookie = ( + name: string, + reqResObj: ReqResObj, + options: CookieOptions +) => { // "If the value is omitted, an outbound header with an expired // date is used to delete the cookie." // https://github.com/pillarjs/cookies#cookiesset-name--value---options-- diff --git a/src/createAuthUser.js b/src/createAuthUser.ts similarity index 76% rename from src/createAuthUser.js rename to src/createAuthUser.ts index 3c96216c..099177f7 100644 --- a/src/createAuthUser.js +++ b/src/createAuthUser.ts @@ -1,6 +1,48 @@ /* eslint no-underscore-dangle: 0 */ +import { User } from 'firebase/auth' +import { DecodedIdToken } from 'firebase-admin/auth' import isClientSide from 'src/isClientSide' -import { filterStandardClaims } from 'src/claims' +import { Claims, filterStandardClaims } from 'src/claims' + +interface DeserializedAuthUser { + id?: string + claims?: object + email?: string + emailVerified: boolean + phoneNumber?: string + displayName?: string + photoURL?: string + clientInitialized: boolean + _token?: string +} + +export type AuthUserSerialized = string + +interface CreateAuthUserInput { + firebaseUserClientSDK?: User + firebaseUserAdminSDK?: Omit + serializedAuthUser?: AuthUserSerialized + clientInitialized?: boolean + token?: string | null + claims?: Claims +} + +type getIdToken = (forceRefresh?: boolean) => Promise + +export interface AuthUser { + id: string | null + email: string | null + emailVerified: boolean + phoneNumber: string | null + displayName: string | null + photoURL: string | null + claims: Record + getIdToken: (forceRefresh?: boolean) => Promise + clientInitialized: boolean + firebaseUser: User | null + signOut: () => Promise + serialize: (a?: { includeToken?: boolean }) => string +} /** * Take a representation of a Firebase user from a maximum of one of: @@ -46,7 +88,7 @@ const createAuthUser = ({ clientInitialized = false, token = null, claims, -} = {}) => { +}: CreateAuthUserInput = {}): AuthUser => { // Ensure only one of the user input types is defined. const numUserInputsDefined = [ firebaseUserClientSDK, @@ -87,19 +129,19 @@ const createAuthUser = ({ } let customClaims = {} - let userId = null - let email = null + let userId: string | null = null + let email: string | null = null let emailVerified = false - let phoneNumber = null - let displayName = null - let photoURL = null - let getIdTokenFunc = async () => null + let phoneNumber: string | null = null + let displayName: string | null = null + let photoURL: string | null = null + let getIdTokenFunc: getIdToken = async () => null // When not on the client side, the "signOut" method is a noop. // eslint-disable-next-line @typescript-eslint/no-empty-function let signOutFunc = async () => {} - let tokenString = null // used for serialization + let tokenString: string | null = null // used for serialization if (firebaseUserClientSDK) { if (isClientSide()) { // eslint-disable-next-line global-require, @typescript-eslint/no-var-requires @@ -131,7 +173,7 @@ const createAuthUser = ({ * @param forceRefresh Force refresh regardless of token * expiration. */ - getIdTokenFunc = async (forceRefresh) => + getIdTokenFunc = async (forceRefresh?: boolean): Promise => firebaseUserClientSDK.getIdToken(forceRefresh) tokenString = null } else if (firebaseUserAdminSDK) { @@ -144,24 +186,26 @@ const createAuthUser = ({ */ customClaims = filterStandardClaims(firebaseUserAdminSDK) userId = firebaseUserAdminSDK.uid - email = firebaseUserAdminSDK.email - emailVerified = firebaseUserAdminSDK.email_verified - phoneNumber = firebaseUserAdminSDK.phone_number + email = firebaseUserAdminSDK.email || null + emailVerified = firebaseUserAdminSDK.email_verified || false + phoneNumber = firebaseUserAdminSDK.phone_number || null displayName = firebaseUserAdminSDK.name - photoURL = firebaseUserAdminSDK.picture + photoURL = firebaseUserAdminSDK.picture || null getIdTokenFunc = async () => token tokenString = token } else if (serializedAuthUser) { - const deserializedUser = JSON.parse(serializedAuthUser) - customClaims = deserializedUser.claims - userId = deserializedUser.id - email = deserializedUser.email + const deserializedUser: DeserializedAuthUser = JSON.parse( + serializedAuthUser + ) as DeserializedAuthUser + customClaims = deserializedUser.claims || {} + userId = deserializedUser.id || null + email = deserializedUser.email || null emailVerified = deserializedUser.emailVerified - phoneNumber = deserializedUser.phoneNumber - displayName = deserializedUser.displayName - photoURL = deserializedUser.photoURL + phoneNumber = deserializedUser.phoneNumber || null + displayName = deserializedUser.displayName || null + photoURL = deserializedUser.photoURL || null getIdTokenFunc = async () => deserializedUser._token || null - tokenString = deserializedUser._token + tokenString = deserializedUser._token || null } return { id: userId, diff --git a/src/encoding.js b/src/encoding.ts similarity index 66% rename from src/encoding.js rename to src/encoding.ts index 2e517e25..459e8446 100644 --- a/src/encoding.js +++ b/src/encoding.ts @@ -4,8 +4,8 @@ * @param {String} string * @return {Object} */ -export const decodeBase64 = (string) => { - const body = Buffer.from(string, 'base64').toString('utf8') +export const decodeBase64 = (str: string) => { + const body = Buffer.from(str, 'base64').toString('utf8') return JSON.parse(body) } @@ -16,7 +16,7 @@ export const decodeBase64 = (string) => { * @return {String} * @private */ -export const encodeBase64 = (obj) => { +export const encodeBase64 = (obj: object | string) => { const str = JSON.stringify(obj) return Buffer.from(str).toString('base64') } diff --git a/src/firebaseAdmin.js b/src/firebaseAdmin.ts similarity index 52% rename from src/firebaseAdmin.js rename to src/firebaseAdmin.ts index ab138060..8341d64a 100644 --- a/src/firebaseAdmin.js +++ b/src/firebaseAdmin.ts @@ -3,6 +3,7 @@ import initFirebaseAdminSDK from 'src/initFirebaseAdminSDK' import createAuthUser from 'src/createAuthUser' import { getConfig } from 'src/config' import logDebug from 'src/logDebug' +import { FirebaseError as FirebaseErrorType } from 'firebase-admin/app' // If the FIREBASE_AUTH_EMULATOR_HOST variable is set, send the token request to the emulator const getTokenPrefix = () => @@ -15,7 +16,7 @@ const getFirebasePublicAPIKey = () => { return config.firebaseClientInitConfig.apiKey } -const errorMessageVerifyFailed = (errCode) => +const errorMessageVerifyFailed = (errCode: string) => `[verifyIdToken] Error verifying the ID token: ${errCode}. The user will be unauthenticated.` const throwIfFetchNotDefined = () => { @@ -31,7 +32,7 @@ const throwIfFetchNotDefined = () => { * the Firebase ID token has expired. * @return {String} The new ID token */ -const refreshExpiredIdToken = async (refreshToken) => { +const refreshExpiredIdToken = async (refreshToken: string) => { if (!refreshToken) { throw new Error('The "refreshToken" argument is required.') } @@ -62,89 +63,125 @@ const refreshExpiredIdToken = async (refreshToken) => { * is provided. * @return {Object} An AuthUser instance */ -export const verifyIdToken = async (token, refreshToken = null) => { +export const verifyIdToken = async (token: string, refreshToken?: string) => { // Ensure `fetch` is defined. throwIfFetchNotDefined() initFirebaseAdminSDK() let firebaseUser - let newToken = token + let newToken: string | null = token const firebaseAdminAuth = getAuth() const { onTokenRefreshError, onVerifyTokenError } = getConfig() try { firebaseUser = await firebaseAdminAuth.verifyIdToken(token) } catch (e) { - // https://firebase.google.com/docs/reference/node/firebase.auth.Error - switch (e.code) { - // Errors we consider expected and which should result in an - // unauthenticated user. - case 'auth/invalid-user-token': - case 'auth/user-token-expired': - case 'auth/user-disabled': - // Return an unauthenticated user. - // https://github.com/gladly-team/next-firebase-auth/issues/174 - newToken = null - firebaseUser = null - logDebug(errorMessageVerifyFailed(e.code)) - break - - // Errors that might be fixed by refreshing the user's ID token. - case 'auth/id-token-expired': - case 'auth/argument-error': - if (refreshToken) { - logDebug( - `[verifyIdToken] The ID token is expired (error code ${e.code}). Attempting to refresh the ID token.` - ) - let newTokenFailure = false - try { - newToken = await refreshExpiredIdToken(refreshToken) - } catch (refreshErr) { - newTokenFailure = true - - // Call developer-provided error callback. - await onTokenRefreshError(refreshErr) - } + // FirebaseError isn't exported, so let's assume. + // https://github.com/firebase/firebase-admin-node/issues/1666 + const firebaseErr: FirebaseErrorType = e as FirebaseErrorType + if (firebaseErr.code) { + // https://firebase.google.com/docs/reference/node/firebase.auth.Error + switch (firebaseErr.code) { + // Errors we consider expected and which should result in an + // unauthenticated user. + case 'auth/invalid-user-token': + case 'auth/user-token-expired': + case 'auth/user-disabled': + // Return an unauthenticated user. + // https://github.com/gladly-team/next-firebase-auth/issues/174 + newToken = null + firebaseUser = undefined + logDebug(errorMessageVerifyFailed(firebaseErr.code)) + break - if (!newTokenFailure) { - logDebug('[verifyIdToken] Successfully refreshed the ID token.') + // Errors that might be fixed by refreshing the user's ID token. + case 'auth/id-token-expired': + case 'auth/argument-error': + if (refreshToken) { + logDebug( + `[verifyIdToken] The ID token is expired (error code ${firebaseErr.code}). Attempting to refresh the ID token.` + ) + let newTokenFailure = false try { - firebaseUser = await firebaseAdminAuth.verifyIdToken(newToken) - } catch (verifyErr) { - await onVerifyTokenError(verifyErr) - logDebug(errorMessageVerifyFailed(verifyErr.code)) + newToken = await refreshExpiredIdToken(refreshToken) + } catch (refreshErr) { + newTokenFailure = true + + // Call developer-provided error callback. + if (refreshErr instanceof Error) { + if (onTokenRefreshError) { + await onTokenRefreshError(refreshErr) + } + } else { + logDebug(refreshErr) + } + } + + if (!newTokenFailure) { + logDebug('[verifyIdToken] Successfully refreshed the ID token.') + try { + firebaseUser = await firebaseAdminAuth.verifyIdToken( + // Assume new token is set and catch any errors. + newToken as string + ) + } catch (verifyErr) { + if (verifyErr instanceof Error) { + if (onVerifyTokenError) { + await onVerifyTokenError(verifyErr) + } + // FirebaseError isn't exported, so let's assume. + // https://github.com/firebase/firebase-admin-node/issues/1666 + const verifyErrFromFirebase: FirebaseErrorType = + verifyErr as unknown as FirebaseErrorType + if (verifyErrFromFirebase.code) { + logDebug( + errorMessageVerifyFailed(verifyErrFromFirebase.code) + ) + } + } else { + logDebug(verifyErr) + } + } } + + // If either token refreshing or validation failed, return an + // unauthenticated user. + // https://github.com/gladly-team/next-firebase-auth/issues/366 + if (newTokenFailure) { + newToken = null + firebaseUser = undefined + logDebug( + '[verifyIdToken] Failed to refresh the ID token. The user will be unauthenticated.' + ) + } + break } - // If either token refreshing or validation failed, return an - // unauthenticated user. + // Fall through here if there is no refresh token. Without a refresh + // token, an expired ID token is not resolvable. + // eslint-disable-next-line no-fallthrough + default: + // Here, any errors are unexpected. Return an unauthenticated user. + // Rationale: it's not particularly easy for developers to + // catch errors in `withAuthUserSSR`, so default to returning + // an unauthed user and give the developer control over + // handling the error. // https://github.com/gladly-team/next-firebase-auth/issues/366 - if (newTokenFailure) { - newToken = null - firebaseUser = null - logDebug( - '[verifyIdToken] Failed to refresh the ID token. The user will be unauthenticated.' - ) + newToken = null + firebaseUser = undefined + + // Call developer-provided error callback. + if (onVerifyTokenError) { + await onVerifyTokenError(firebaseErr as unknown as Error) } - break - } - - // Fall through here if there is no refresh token. Without a refresh - // token, an expired ID token is not resolvable. - // eslint-disable-next-line no-fallthrough - default: - // Here, any errors are unexpected. Return an unauthenticated user. - // Rationale: it's not particularly easy for developers to - // catch errors in `withAuthUserSSR`, so default to returning - // an unauthed user and give the developer control over - // handling the error. - // https://github.com/gladly-team/next-firebase-auth/issues/366 - newToken = null - firebaseUser = null - - // Call developer-provided error callback. - await onVerifyTokenError(e) - logDebug(errorMessageVerifyFailed(e.code)) + logDebug(errorMessageVerifyFailed(firebaseErr.code)) + } + } else { + // This should never happen because all errors should be instances of + // FirebaseError. + newToken = null + firebaseUser = undefined + logDebug(e) } } const AuthUser = createAuthUser({ @@ -171,7 +208,7 @@ export const verifyIdToken = async (token, refreshToken = null) => { * @return {String} response.refreshToken - The user's refresh token * @return {Object} response.AuthUser - An AuthUser instance */ -export const getCustomIdAndRefreshTokens = async (token) => { +export const getCustomIdAndRefreshTokens = async (token: string) => { // Ensure `fetch` is defined. throwIfFetchNotDefined() diff --git a/src/getUserFromCookies.js b/src/getUserFromCookies.ts similarity index 88% rename from src/getUserFromCookies.js rename to src/getUserFromCookies.ts index 7faa4fa9..f52d5bca 100644 --- a/src/getUserFromCookies.js +++ b/src/getUserFromCookies.ts @@ -10,6 +10,7 @@ import { import { getConfig } from 'src/config' import logDebug from 'src/logDebug' import initFirebaseAdminSDK from 'src/initFirebaseAdminSDK' +import { GetServerSidePropsContext, NextApiRequest } from 'next' /** * Given a request object or cookie values, verify and return @@ -39,6 +40,11 @@ const getUserFromCookies = async ({ includeToken = true, authCookieValue, authCookieSigValue, +}: { + req?: NextApiRequest | GetServerSidePropsContext['req'] + includeToken?: boolean + authCookieValue?: string + authCookieSigValue?: string }) => { const { keys, secure, signed } = getConfig().cookies let user @@ -70,7 +76,16 @@ const getUserFromCookies = async ({ headers: { cookie: cookieStr, }, - } + // Map onto IncomingMessage type, assuming other req properties are unused. + } as NextApiRequest + } + + if (!req) { + // This shouldn't happen, as req assignment is handled above. This is + // to force `req` typing to be defined. + throw new Error( + 'When "authCookieValue" is not provided, "req" must be defined.' + ) } // Get the user either from: @@ -92,7 +107,10 @@ const getUserFromCookies = async ({ }, { keys, secure, signed } ) - const { idToken, refreshToken } = cookieValStr + const { + idToken, + refreshToken, + }: { idToken?: string; refreshToken?: string } = cookieValStr ? JSON.parse(cookieValStr) : {} if (idToken) { diff --git a/src/index.server.js b/src/index.server.ts similarity index 77% rename from src/index.server.js rename to src/index.server.ts index be322666..2661e726 100644 --- a/src/index.server.js +++ b/src/index.server.ts @@ -8,23 +8,26 @@ import setAuthCookies from 'src/setAuthCookies' import unsetAuthCookies from 'src/unsetAuthCookies' import { verifyIdToken } from 'src/firebaseAdmin' import getUserFromCookies from 'src/getUserFromCookies' +import { ConfigInput } from './configTypes' +import { WithAuthUserOptions } from './withAuthUser' +import { WithAuthUserSSROptions } from './withAuthUserTokenSSR' -const init = (config) => { +const init = (config: ConfigInput) => { initCommon(config) // We only initialize the Firebase admin SDK as it's needed. See: // https://github.com/gladly-team/next-firebase-auth/issues/70 } -const withAuthUser = (...args) => { +const withAuthUser = (options: WithAuthUserOptions) => { // Require rather than import the module to support optional // peer dependencies. See: // https://github.com/gladly-team/next-firebase-auth/issues/502 const withAuthUserModule = require('src/withAuthUser').default - return withAuthUserModule(...args) + return withAuthUserModule(options) } -const useAuthUser = (...args) => { +const useAuthUser = () => { // Some dependencies are optional. Throw if they aren't installed // when calling this API. // https://github.com/gladly-team/next-firebase-auth/issues/502 @@ -37,15 +40,15 @@ const useAuthUser = (...args) => { ) } const useAuthUserModule = require('src/useAuthUser').default - return useAuthUserModule(...args) + return useAuthUserModule() } -const withAuthUserSSR = (options) => { +const withAuthUserSSR = (options: WithAuthUserSSROptions) => { const withAuthUserTokenSSRModule = require('src/withAuthUserTokenSSR').default return withAuthUserTokenSSRModule(options, { useToken: false }) } -const withAuthUserTokenSSR = (options) => { +const withAuthUserTokenSSR = (options: WithAuthUserSSROptions) => { const withAuthUserTokenSSRModule = require('src/withAuthUserTokenSSR').default return withAuthUserTokenSSRModule(options, { useToken: true }) } diff --git a/src/index.js b/src/index.ts similarity index 94% rename from src/index.js rename to src/index.ts index 101dd437..3adb8588 100644 --- a/src/index.js +++ b/src/index.ts @@ -5,8 +5,9 @@ import initFirebaseClientSDK from 'src/initFirebaseClientSDK' import isClientSide from 'src/isClientSide' import AuthAction from 'src/AuthAction' import initCommon from 'src/initCommon' +import { ConfigInput } from './configTypes' -const init = (config = {}) => { +const init = (config: ConfigInput) => { initCommon(config) // On the client side, initialize the Firebase JS SDK. diff --git a/src/initCommon.js b/src/initCommon.ts similarity index 60% rename from src/initCommon.js rename to src/initCommon.ts index aa0207a4..f6238b0c 100644 --- a/src/initCommon.js +++ b/src/initCommon.ts @@ -1,9 +1,10 @@ import { setConfig } from 'src/config' import { setDebugEnabled } from 'src/logDebug' +import { ConfigInput } from './configTypes' // `init` behavior shared between the client and server init. -const initCommon = (config) => { - setDebugEnabled(config.debug === true) +const initCommon = (config: ConfigInput) => { + setDebugEnabled(config?.debug === true) setConfig(config) } diff --git a/src/initFirebaseAdminSDK.js b/src/initFirebaseAdminSDK.ts similarity index 95% rename from src/initFirebaseAdminSDK.js rename to src/initFirebaseAdminSDK.ts index 8c8fc9c1..1c6ecae0 100644 --- a/src/initFirebaseAdminSDK.js +++ b/src/initFirebaseAdminSDK.ts @@ -25,7 +25,7 @@ const initFirebaseAdminSDK = () => { credential: useFirebaseAdminDefaultCredential ? applicationDefault() : cert({ - ...firebaseAdminInitConfig.credential, + ...firebaseAdminInitConfig?.credential, }), }) logDebug('[init] Initialized the Firebase admin SDK.') diff --git a/src/initFirebaseClientSDK.js b/src/initFirebaseClientSDK.ts similarity index 100% rename from src/initFirebaseClientSDK.js rename to src/initFirebaseClientSDK.ts diff --git a/src/logDebug.js b/src/logDebug.ts similarity index 83% rename from src/logDebug.js rename to src/logDebug.ts index 59f5f33d..fe324cd6 100644 --- a/src/logDebug.js +++ b/src/logDebug.ts @@ -2,7 +2,7 @@ import isClientSide from 'src/isClientSide' let isDebugEnabled = false -const logDebug = (...args) => { +const logDebug = (...args: unknown[]) => { if (!isDebugEnabled) { return } @@ -19,7 +19,7 @@ const logDebug = (...args) => { console.log(...prefix, ...args) } -export const setDebugEnabled = (isEnabled) => { +export const setDebugEnabled = (isEnabled: boolean) => { isDebugEnabled = isEnabled } diff --git a/src/redirectTypes.ts b/src/redirectTypes.ts new file mode 100644 index 00000000..d07db26e --- /dev/null +++ b/src/redirectTypes.ts @@ -0,0 +1,34 @@ +import type { GetServerSidePropsContext } from 'next' +import type { ParsedUrlQuery } from 'querystring' +import { AuthUser } from './createAuthUser' + +export type URLResolveFunction = (obj: { + ctx?: GetServerSidePropsContext + AuthUser?: AuthUser +}) => string | RedirectObject + +export type RedirectObject = { + destination: string | URLResolveFunction + basePath: boolean + permanent?: boolean +} + +export type PageURL = string | RedirectObject | URLResolveFunction + +export interface RedirectInput { + ctx?: GetServerSidePropsContext + AuthUser?: AuthUser + redirectURL?: PageURL +} + +export interface RedirectDestination { + destination: string + basePath: boolean + permanent?: boolean +} + +export type RedirectConfigName = string + +export interface RedirectConfig extends RedirectInput { + redirectConfigName: RedirectConfigName +} diff --git a/src/redirects.js b/src/redirects.ts similarity index 69% rename from src/redirects.js rename to src/redirects.ts index 76c250d6..c51fc01c 100644 --- a/src/redirects.js +++ b/src/redirects.ts @@ -1,11 +1,29 @@ +import type { GetServerSidePropsContext } from 'next' + +import { AuthUser as AuthUserType } from 'src/createAuthUser' import { getConfig } from 'src/config' +import { + PageURL, + RedirectConfig, + RedirectConfigName, + RedirectInput, + RedirectObject, +} from './redirectTypes' const REDIRECT_DEFAULTS = { basePath: true, permanent: false, } -const getDestination = ({ ctx, AuthUser, redirectDestination }) => { +const getDestination = ({ + ctx, + AuthUser, + redirectDestination, +}: { + ctx?: GetServerSidePropsContext + AuthUser?: AuthUserType + redirectDestination: PageURL +}): RedirectObject | undefined => { if (typeof redirectDestination === 'function') { const destination = redirectDestination({ ctx, AuthUser }) return getDestination({ ctx, AuthUser, redirectDestination: destination }) @@ -24,11 +42,13 @@ const getDestination = ({ ctx, AuthUser, redirectDestination }) => { ...redirectDestination, } } - - return null + return undefined } -const throwWhenInvalid = (redirectConfigName, redirectURL) => { +const throwWhenInvalid = ( + redirectConfigName: RedirectConfigName, + redirectURL?: RedirectObject +) => { const isValid = redirectURL && (typeof redirectURL === 'string' || @@ -43,14 +63,17 @@ const throwWhenInvalid = (redirectConfigName, redirectURL) => { return redirectURL } -const getRedirectByUrlConfigName = (redirectConfig) => { +const getRedirectByUrlConfigName = (redirectConfig: RedirectConfig) => { const { redirectConfigName, redirectURL, ctx, AuthUser } = redirectConfig + const redirectDestination = + // eslint-disable-next-line @typescript-eslint/no-explicit-any + redirectURL || ((getConfig() as any)[redirectConfigName] as PageURL) return throwWhenInvalid( redirectConfigName, getDestination({ ctx, AuthUser, - redirectDestination: redirectURL || getConfig()[redirectConfigName], + redirectDestination, }) ) } @@ -64,7 +87,11 @@ const getRedirectByUrlConfigName = (redirectConfig) => { * @param {Object} LoginRedirectProps.AuthUser - An instance of AuthUser * @param {ctx|null} LoginRedirectProps.ctx - Server-side context */ -export const getLoginRedirectInfo = ({ redirectURL, AuthUser, ctx }) => +export const getLoginRedirectInfo = ({ + redirectURL, + AuthUser, + ctx, +}: RedirectInput) => getRedirectByUrlConfigName({ redirectConfigName: 'authPageURL', redirectURL, @@ -81,7 +108,11 @@ export const getLoginRedirectInfo = ({ redirectURL, AuthUser, ctx }) => * @param {Object} LoginRedirectProps.AuthUser - An instance of AuthUser * @param {ctx|null} LoginRedirectProps.ctx - Server-side context */ -export const getAppRedirectInfo = ({ redirectURL, AuthUser, ctx }) => +export const getAppRedirectInfo = ({ + redirectURL, + AuthUser, + ctx, +}: RedirectInput) => getRedirectByUrlConfigName({ redirectConfigName: 'appPageURL', redirectURL, diff --git a/src/setAuthCookies.js b/src/setAuthCookies.ts similarity index 94% rename from src/setAuthCookies.js rename to src/setAuthCookies.ts index bd48f039..2dfce1b2 100644 --- a/src/setAuthCookies.js +++ b/src/setAuthCookies.ts @@ -7,8 +7,13 @@ import { import { getConfig } from 'src/config' import logDebug from 'src/logDebug' import createAuthUser from 'src/createAuthUser' +import { NextApiRequest, NextApiResponse } from 'next' -const setAuthCookies = async (req, res, { token: userProvidedToken } = {}) => { +const setAuthCookies = async ( + req: NextApiRequest, + res: NextApiResponse, + { token: userProvidedToken }: { token?: string } = {} +) => { logDebug('[setAuthCookies] Attempting to set auth cookies.') // This should be the original Firebase ID token from diff --git a/src/testHelpers/__tests__/createMockFetchResponse.test.js b/src/testHelpers/__tests__/createMockFetchResponse.test.ts similarity index 100% rename from src/testHelpers/__tests__/createMockFetchResponse.test.js rename to src/testHelpers/__tests__/createMockFetchResponse.test.ts diff --git a/src/testHelpers/__tests__/mockModuleNotFoundError.test.js b/src/testHelpers/__tests__/mockModuleNotFoundError.test.ts similarity index 100% rename from src/testHelpers/__tests__/mockModuleNotFoundError.test.js rename to src/testHelpers/__tests__/mockModuleNotFoundError.test.ts diff --git a/src/testHelpers/authUserInputs.js b/src/testHelpers/authUserInputs.js deleted file mode 100644 index 2a4faf98..00000000 --- a/src/testHelpers/authUserInputs.js +++ /dev/null @@ -1,54 +0,0 @@ -export const createMockFirebaseUserClientSDK = () => ({ - uid: 'abc-123', - email: 'abc@example.com', - emailVerified: true, - phoneNumber: '+1800-123-4567', - displayName: 'Abc Cdf', - photoURL: 'https://abc.googleusercontent.com/cdf/profile_photo.png', - getIdToken: async () => 'my-id-token-abc-123', - claims: {}, - // ... other properties -}) - -// https://firebase.google.com/docs/reference/admin/node/firebase-admin.auth.decodedidtoken -export const createMockFirebaseUserAdminSDK = () => ({ - uid: 'def-456', - email: 'def@example.com', - email_verified: true, - phone_number: '+1800-234-5678', - name: 'Def Ghi', - picture: 'https://def.googleusercontent.com/ghi/profile_photo.png', - iss: 'https://securetoken.google.com/my-cool-app', - aud: 'my-cool-app', - auth_time: 1540000000, - user_id: 'def-456', - sub: 'def-456', - iat: 1540000000, - exp: 1540000000, - firebase: {}, - // ... other properties -}) - -// https://firebase.google.com/docs/reference/js/firebase.auth.IDTokenResult -export const createMockIdTokenResult = ({ claims = {} } = {}) => ({ - authTime: 1540000000, - claims, - expirationTime: 1540000000, - issuedAtTime: 1540000000, - signInProvider: 'google', - signInSecondFactor: null, - token: 'my-id-token-ghb-231', -}) - -export const createMockSerializedAuthUser = ({ claims = {} } = {}) => - JSON.stringify({ - id: 'ghi-789', - claims, - email: 'ghi@example.com', - emailVerified: true, - phoneNumber: '+1800-345-6789', - displayName: 'Ghi Jkl', - photoURL: 'https://ghi.googleusercontent.com/jkl/profile_photo.png', - clientInitialized: false, - _token: 'my-id-token-ghi-789', - }) diff --git a/src/testHelpers/authUserInputs.ts b/src/testHelpers/authUserInputs.ts new file mode 100644 index 00000000..9d99ed08 --- /dev/null +++ b/src/testHelpers/authUserInputs.ts @@ -0,0 +1,63 @@ +import { DecodedIdToken } from 'firebase-admin/auth' +import { User } from 'firebase/auth' + +export const createMockFirebaseUserClientSDK = () => { + const mockUser = { + uid: 'abc-123', + email: 'abc@example.com', + emailVerified: true, + phoneNumber: '+1800-123-4567', + displayName: 'Abc Cdf', + photoURL: 'https://abc.googleusercontent.com/cdf/profile_photo.png', + getIdToken: async () => 'my-id-token-abc-123', + claims: {}, + // ... other properties + } as unknown as User + return mockUser +} + +// https://firebase.google.com/docs/reference/admin/node/firebase-admin.auth.decodedidtoken +export const createMockFirebaseUserAdminSDK = () => { + const mockUser = { + uid: 'def-456', + email: 'def@example.com', + email_verified: true, + phone_number: '+1800-234-5678', + name: 'Def Ghi', + picture: 'https://def.googleusercontent.com/ghi/profile_photo.png', + iss: 'https://securetoken.google.com/my-cool-app', + aud: 'my-cool-app', + auth_time: 1540000000, + user_id: 'def-456', + sub: 'def-456', + iat: 1540000000, + exp: 1540000000, + firebase: {}, + // ... other properties + } as unknown as DecodedIdToken + return mockUser +} + +// https://firebase.google.com/docs/reference/js/firebase.auth.IDTokenResult +export const createMockIdTokenResult = ({ claims = {} } = {}) => ({ + authTime: 1540000000, + claims, + expirationTime: 1540000000, + issuedAtTime: 1540000000, + signInProvider: 'google', + signInSecondFactor: null, + token: 'my-id-token-ghb-231', +}) + +export const createMockSerializedAuthUser = ({ claims = {} } = {}) => + JSON.stringify({ + id: 'ghi-789', + claims, + email: 'ghi@example.com', + emailVerified: true, + phoneNumber: '+1800-345-6789', + displayName: 'Ghi Jkl', + photoURL: 'https://ghi.googleusercontent.com/jkl/profile_photo.png', + clientInitialized: false, + _token: 'my-id-token-ghi-789', + }) diff --git a/src/testHelpers/createMockAuthUser.js b/src/testHelpers/createMockAuthUser.ts similarity index 100% rename from src/testHelpers/createMockAuthUser.js rename to src/testHelpers/createMockAuthUser.ts diff --git a/src/testHelpers/createMockConfig.js b/src/testHelpers/createMockConfig.ts similarity index 72% rename from src/testHelpers/createMockConfig.js rename to src/testHelpers/createMockConfig.ts index 5ff51a63..ed51e62c 100644 --- a/src/testHelpers/createMockConfig.js +++ b/src/testHelpers/createMockConfig.ts @@ -1,6 +1,6 @@ /* eslint-env jest */ -const createMockConfig = ({ clientSide } = {}) => { +const createMockConfig = ({ clientSide }: { clientSide?: boolean } = {}) => { // eslint-disable-next-line global-require, @typescript-eslint/no-var-requires const isClientSide = require('src/isClientSide').default const useClientSideConfig = @@ -13,14 +13,16 @@ const createMockConfig = ({ clientSide } = {}) => { onTokenRefreshError: jest.fn(), authPageURL: '/login', appPageURL: '/', - firebaseAdminInitConfig: { - credential: { - projectId: 'my-example-app', - clientEmail: 'my-example-app@example.com', - privateKey: useClientSideConfig ? undefined : 'fakePrivateKey123', - }, - databaseURL: 'https://my-example-app.firebaseio.com', - }, + firebaseAdminInitConfig: useClientSideConfig + ? undefined + : { + credential: { + projectId: 'my-example-app', + clientEmail: 'my-example-app@example.com', + privateKey: 'fakePrivateKey123', + }, + databaseURL: 'https://my-example-app.firebaseio.com', + }, firebaseClientInitConfig: { apiKey: 'fakeAPIKey123', authDomain: 'my-example-app.firebaseapp.com', diff --git a/src/testHelpers/createMockFetchResponse.js b/src/testHelpers/createMockFetchResponse.js deleted file mode 100644 index 96bcf5fd..00000000 --- a/src/testHelpers/createMockFetchResponse.js +++ /dev/null @@ -1,14 +0,0 @@ -const createMockFetchResponse = () => ({ - body: {}, - bodyUsed: true, - headers: {}, - json: () => Promise.resolve({}), - ok: true, - redirected: false, - status: 200, - statusText: '', - type: 'cors', - url: 'https://example.com/foo/', -}) - -export default createMockFetchResponse diff --git a/src/testHelpers/createMockFetchResponse.ts b/src/testHelpers/createMockFetchResponse.ts new file mode 100644 index 00000000..a38bf914 --- /dev/null +++ b/src/testHelpers/createMockFetchResponse.ts @@ -0,0 +1,20 @@ +const createMockFetchResponse = () => + ({ + arrayBuffer: '', + blob: '', + body: {}, + bodyUsed: true, + clone: () => null, + formData: '', + headers: {} as Headers, + json: () => Promise.resolve({}), + ok: true, + redirected: false, + status: 200, + statusText: '', + text: '', + type: 'cors' as ResponseType, + url: 'https://example.com/foo/', + } as unknown as Response) + +export default createMockFetchResponse diff --git a/src/testHelpers/createMockNextContext.js b/src/testHelpers/createMockNextContext.ts similarity index 92% rename from src/testHelpers/createMockNextContext.js rename to src/testHelpers/createMockNextContext.ts index 66f42740..ccc5b302 100644 --- a/src/testHelpers/createMockNextContext.js +++ b/src/testHelpers/createMockNextContext.ts @@ -1,8 +1,8 @@ // https://nextjs.org/docs/api-reference/data-fetching/getInitialProps#context-object const createMockNextContext = ({ serverSide = true } = {}) => ({ - pathname: '/my-path', query: { abc: 'def', + pathname: '/my-path', }, asPath: '/my-path?abc=def', req: serverSide ? {} : undefined, diff --git a/src/testHelpers/mockModuleNotFoundError.js b/src/testHelpers/mockModuleNotFoundError.js deleted file mode 100644 index bf66c641..00000000 --- a/src/testHelpers/mockModuleNotFoundError.js +++ /dev/null @@ -1,11 +0,0 @@ -function ModuleNotFoundError({ - moduleName, - callingModule = 'exampleModule.js', -}) { - this.name = 'ModuleNotFoundError' - this.code = 'MODULE_NOT_FOUND' - this.message = `Cannot find module '${moduleName}' from '${callingModule}'` -} -ModuleNotFoundError.prototype = Error.prototype - -export default ModuleNotFoundError diff --git a/src/testHelpers/mockModuleNotFoundError.ts b/src/testHelpers/mockModuleNotFoundError.ts new file mode 100644 index 00000000..a6584ecb --- /dev/null +++ b/src/testHelpers/mockModuleNotFoundError.ts @@ -0,0 +1,19 @@ +function ModuleNotFoundError( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this: any, + { + moduleName, + callingModule = 'exampleModule.js', + }: { + moduleName: string + callingModule: string + } +) { + this.name = 'ModuleNotFoundError' + this.code = 'MODULE_NOT_FOUND' + this.message = `Cannot find module '${moduleName}' from '${callingModule}'` +} +ModuleNotFoundError.prototype = Error.prototype + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export default ModuleNotFoundError as any diff --git a/src/unsetAuthCookies.js b/src/unsetAuthCookies.ts similarity index 86% rename from src/unsetAuthCookies.js rename to src/unsetAuthCookies.ts index fc119df4..61a0eefc 100644 --- a/src/unsetAuthCookies.js +++ b/src/unsetAuthCookies.ts @@ -1,3 +1,4 @@ +import { NextApiRequest, NextApiResponse } from 'next' import { getAuthUserCookieName, getAuthUserTokensCookieName, @@ -6,7 +7,7 @@ import { getConfig } from 'src/config' import { deleteCookie } from 'src/cookies' import logDebug from 'src/logDebug' -const unsetAuthCookies = async (req, res) => { +const unsetAuthCookies = async (req: NextApiRequest, res: NextApiResponse) => { // Pick a subset of the config.cookies options to // pass to deleteCookie. const cookieOptions = (({ diff --git a/src/useAuthUser.js b/src/useAuthUser.tsx similarity index 59% rename from src/useAuthUser.js rename to src/useAuthUser.tsx index 26ae5112..0d104b5e 100644 --- a/src/useAuthUser.js +++ b/src/useAuthUser.tsx @@ -1,12 +1,19 @@ import { createContext, useContext } from 'react' +import { AuthUser } from './createAuthUser' + +type AuthUserContext = + | (AuthUser & { + serialize: (opts?: { includeToken?: boolean }) => string + }) + | undefined // Default to undefined. `useAuthUser` will throw if the value is undefined // to ensure the developer wraps pages in `withAuthUser`. See: // https://github.com/gladly-team/next-firebase-auth/issues/155 -export const AuthUserContext = createContext() +export const AuthUserContext = createContext(undefined) const useAuthUser = () => { - const authUser = useContext(AuthUserContext) + const authUser = useContext(AuthUserContext) if (!authUser) { throw new Error( 'When using `useAuthUser`, the page must be wrapped in `withAuthUser`.' diff --git a/src/useFirebaseUser.js b/src/useFirebaseUser.ts similarity index 82% rename from src/useFirebaseUser.js rename to src/useFirebaseUser.ts index 9d3791f4..632f749e 100644 --- a/src/useFirebaseUser.js +++ b/src/useFirebaseUser.ts @@ -1,12 +1,17 @@ import { useEffect, useState } from 'react' import { getApp } from 'firebase/app' -import { getAuth, getIdTokenResult, onIdTokenChanged } from 'firebase/auth' +import { + User, + getAuth, + getIdTokenResult, + onIdTokenChanged, +} from 'firebase/auth' import { getConfig } from 'src/config' -import createAuthUser from 'src/createAuthUser' -import { filterStandardClaims } from 'src/claims' +import createAuthUser, { AuthUser as AuthUserType } from 'src/createAuthUser' +import { Claims, filterStandardClaims } from 'src/claims' import logDebug from 'src/logDebug' -const defaultTokenChangedHandler = async (authUser) => { +const defaultTokenChangedHandler = async (authUser: AuthUserType) => { const { loginAPIEndpoint, logoutAPIEndpoint, @@ -20,12 +25,15 @@ const defaultTokenChangedHandler = async (authUser) => { // place we use this logic. logDebug('[withAuthUser] Calling the login endpoint.') const userToken = await authUser.getIdToken() + if (!loginAPIEndpoint) { + throw new Error('Invalid config.') + } try { response = await fetch(loginAPIEndpoint, { method: 'POST', headers: { - Authorization: userToken, - }, + Authorization: userToken || undefined, + } as HeadersInit, credentials: 'include', }) if (!response.ok) { @@ -46,7 +54,7 @@ const defaultTokenChangedHandler = async (authUser) => { ) } } catch (err) { - if (onLoginRequestError) { + if (onLoginRequestError && err instanceof Error) { await onLoginRequestError(err) } else { throw err @@ -55,6 +63,9 @@ const defaultTokenChangedHandler = async (authUser) => { } else { // If the user is not authed, call logout to unset the cookie. logDebug('[withAuthUser] Calling the logout endpoint.') + if (!logoutAPIEndpoint) { + throw new Error('Invalid config.') + } try { response = await fetch(logoutAPIEndpoint, { method: 'POST', @@ -78,7 +89,7 @@ const defaultTokenChangedHandler = async (authUser) => { ) } } catch (err) { - if (onLogoutRequestError) { + if (onLogoutRequestError && err instanceof Error) { await onLogoutRequestError(err) } else { throw err @@ -88,7 +99,7 @@ const defaultTokenChangedHandler = async (authUser) => { return response } -const setAuthCookie = async (firebaseUser) => { +const setAuthCookie = async (firebaseUser?: User) => { const { tokenChangedHandler } = getConfig() const authUser = createAuthUser({ @@ -107,8 +118,12 @@ const setAuthCookie = async (firebaseUser) => { } const useFirebaseUser = () => { - const [userInfo, setUserInfo] = useState({ - user: undefined, // unmodified Firebase user, undefined if not authed + const [userInfo, setUserInfo] = useState<{ + user: User | null + claims?: Claims + initialized: boolean + }>({ + user: null, // unmodified Firebase user, undefined if not authed claims: {}, initialized: false, }) @@ -118,7 +133,7 @@ const useFirebaseUser = () => { useEffect(() => { let isCancelled = false - const onIdTokenChange = async (firebaseUser) => { + const onIdTokenChange = async (firebaseUser: User | null) => { // Prefixing with "[withAuthUser]" because that's currently the only // place we use this hook. logDebug( @@ -141,7 +156,7 @@ const useFirebaseUser = () => { initialized: true, }) - await setAuthCookie(firebaseUser) + await setAuthCookie(firebaseUser || undefined) // Cancel state updates if the component has unmounted. We could abort // fetches, but that would not currently support any async logic in the diff --git a/src/withAuthUser.js b/src/withAuthUser.tsx similarity index 80% rename from src/withAuthUser.js rename to src/withAuthUser.tsx index efc41906..65cdc493 100644 --- a/src/withAuthUser.js +++ b/src/withAuthUser.tsx @@ -1,13 +1,39 @@ +/* eslint-disable block-scoped-var */ /* globals window */ import hoistNonReactStatics from 'hoist-non-react-statics' +import type { ComponentType } from 'react' import { MODULE_NOT_FOUND } from 'src/constants' -import createAuthUser from 'src/createAuthUser' +import createAuthUser, { + AuthUserSerialized as AuthUserSerializedType, +} from 'src/createAuthUser' import useFirebaseUser from 'src/useFirebaseUser' import AuthAction from 'src/AuthAction' import isClientSide from 'src/isClientSide' import logDebug from 'src/logDebug' import { getAppRedirectInfo, getLoginRedirectInfo } from 'src/redirects' +import { PageURL, RedirectDestination } from './redirectTypes' + +export interface WithAuthUserOptions { + whenAuthed?: AuthAction.RENDER | AuthAction.REDIRECT_TO_APP + whenAuthedBeforeRedirect?: + | AuthAction.RENDER + | AuthAction.SHOW_LOADER + | AuthAction.RETURN_NULL + whenUnauthedBeforeInit?: + | AuthAction.RENDER + | AuthAction.REDIRECT_TO_LOGIN + | AuthAction.SHOW_LOADER + | AuthAction.RETURN_NULL + whenUnauthedAfterInit?: AuthAction.RENDER | AuthAction.REDIRECT_TO_LOGIN + appPageURL?: PageURL + authPageURL?: PageURL + LoaderComponent?: ComponentType | null +} + +interface HOCProps { + AuthUserSerialized?: AuthUserSerializedType +} /** * A higher-order component that provides pages with the @@ -49,30 +75,27 @@ const withAuthUser = whenUnauthedBeforeInit = AuthAction.RENDER, whenUnauthedAfterInit = AuthAction.RENDER, whenAuthedBeforeRedirect = AuthAction.RETURN_NULL, - appPageURL = null, - authPageURL = null, + appPageURL, + authPageURL, LoaderComponent = null, - } = {}) => - (ChildComponent) => { + }: WithAuthUserOptions = {}) => + ( + ChildComponent: ComponentType + ): ComponentType => { logDebug('[withAuthUser] Calling "withAuthUser".') // Some dependencies are optional. Throw if they aren't installed // when calling this API. // https://github.com/gladly-team/next-firebase-auth/issues/502 - let React - let useEffect - let useCallback - let useMemo - let useRouter - let AuthUserContext try { - /* eslint-disable global-require */ - React = require('react') - ;({ useEffect, useCallback, useMemo } = require('react')) - ;({ useRouter } = require('next/router')) - ;({ AuthUserContext } = require('src/useAuthUser')) - /* eslint-enable global-require */ - } catch (e) { + /* eslint-disable global-require, no-var, vars-on-top, @typescript-eslint/no-var-requires */ + var React = require('react') + var { useEffect, useCallback, useMemo } = require('react') + var { useRouter } = require('next/router') + var { AuthUserContext } = require('src/useAuthUser') + /* eslint-enable global-require, no-var, vars-on-top, @typescript-eslint/no-var-requires */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } catch (e: any) { if (e.code === MODULE_NOT_FOUND) { throw new Error( 'The dependencies "react" and "next" are required when calling `withAuthUser`.' @@ -82,7 +105,7 @@ const withAuthUser = } } - const WithAuthUserHOC = (props) => { + const WithAuthUserHOC = (props: ComponentProps & HOCProps) => { const { AuthUserSerialized, ...otherProps } = props const AuthUserFromServer = useMemo( () => @@ -101,7 +124,7 @@ const withAuthUser = const AuthUserFromClient = useMemo( () => createAuthUser({ - firebaseUserClientSDK: firebaseUser, + firebaseUserClientSDK: firebaseUser || undefined, clientInitialized: firebaseInitialized, claims, }), @@ -127,7 +150,7 @@ const withAuthUser = const willRedirectToApp = isAuthed && whenAuthed === AuthAction.REDIRECT_TO_APP const shouldRedirectToApp = - willRedirectToApp && isClientSide && authRequestCompleted + willRedirectToApp && isClientSide() && authRequestCompleted // Redirect to the login page if the user is not authed and one of these // is true: @@ -144,7 +167,7 @@ const withAuthUser = whenUnauthedAfterInit === AuthAction.REDIRECT_TO_LOGIN)) const shouldRedirectToLogin = willRedirectToLogin && - isClientSide && + isClientSide() && // We don't have to wait for an auth request if we should redirect // before Firebase initializes. (whenUnauthedBeforeInit !== AuthAction.REDIRECT_TO_LOGIN @@ -153,7 +176,7 @@ const withAuthUser = const router = useRouter() const routeToDestination = useCallback( - ({ basePath, destination }) => { + ({ basePath, destination }: RedirectDestination) => { if (basePath === false) { window.location.replace(destination) } else { @@ -204,8 +227,11 @@ const withAuthUser = const loaderComp = LoaderComponent ? : null const comps = ( + {/** + * https://github.com/Microsoft/TypeScript/issues/28938#issuecomment-450636046 + * */} {/* eslint-disable-next-line react/jsx-props-no-spreading */} - + ) if (willRedirectToApp) { diff --git a/src/withAuthUserTokenSSR.js b/src/withAuthUserTokenSSR.ts similarity index 65% rename from src/withAuthUserTokenSSR.js rename to src/withAuthUserTokenSSR.ts index 7adfe94b..3e45b663 100644 --- a/src/withAuthUserTokenSSR.js +++ b/src/withAuthUserTokenSSR.ts @@ -1,7 +1,41 @@ +import type { ParsedUrlQuery } from 'querystring' +import { + GetServerSidePropsContext, + GetServerSidePropsResult, + PreviewData, +} from 'next' + import getUserFromCookies from 'src/getUserFromCookies' import AuthAction from 'src/AuthAction' import { getLoginRedirectInfo, getAppRedirectInfo } from 'src/redirects' import logDebug from 'src/logDebug' +import { AuthUser as AuthUserType } from './createAuthUser' +import { PageURL } from './redirectTypes' + +export interface WithAuthUserSSROptions { + whenAuthed?: AuthAction.RENDER | AuthAction.REDIRECT_TO_APP + whenUnauthed?: AuthAction.RENDER | AuthAction.REDIRECT_TO_LOGIN + appPageURL?: PageURL + authPageURL?: PageURL +} + +type GetSSRResult

= GetServerSidePropsResult< + P & { AuthUserSerialized?: string } +> + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +type Dictionary = Record + +type SSRPropsContext< + Q extends ParsedUrlQuery = ParsedUrlQuery, + D extends PreviewData = PreviewData +> = GetServerSidePropsContext & { AuthUser: AuthUserType } + +type SSRPropsGetter< + P extends Dictionary = Dictionary, + Q extends ParsedUrlQuery = ParsedUrlQuery, + D extends PreviewData = PreviewData +> = (context: SSRPropsContext) => Promise> /** * An wrapper for a page's exported getServerSideProps that @@ -31,13 +65,19 @@ const withAuthUserTokenSSR = { whenAuthed = AuthAction.RENDER, whenUnauthed = AuthAction.RENDER, - appPageURL = null, - authPageURL = null, - } = {}, + appPageURL = undefined, + authPageURL = undefined, + }: WithAuthUserSSROptions = {}, { useToken = true } = {} ) => - (getServerSidePropsFunc) => - async (ctx) => { + < + P extends Dictionary = Dictionary, + Q extends ParsedUrlQuery = ParsedUrlQuery, + D extends PreviewData = PreviewData + >( + getServerSidePropsFunc?: SSRPropsGetter + ) => + async (ctx: SSRPropsContext) => { logDebug( '[withAuthUserSSR] Calling "withAuthUserSSR" / "withAuthUserTokenSSR".' ) @@ -73,9 +113,6 @@ const withAuthUserTokenSSR = } } - // Prepare return data - let returnData = { props: { AuthUserSerialized } } - // Evaluate the composed getServerSideProps(). if (getServerSidePropsFunc) { // Add the AuthUser to Next.js context so pages can use @@ -83,21 +120,30 @@ const withAuthUserTokenSSR = ctx.AuthUser = AuthUser const composedProps = (await getServerSidePropsFunc(ctx)) || {} if (composedProps) { - if (composedProps.props) { + if ('props' in composedProps) { // If there are composed props, add Authuser to the props. - returnData = { ...composedProps } - returnData.props.AuthUserSerialized = AuthUserSerialized - } else if (composedProps.notFound || composedProps.redirect) { + return { + ...composedProps, + props: { + ...(composedProps.props || {}), + AuthUserSerialized, + }, + } + } + if ('notFound' in composedProps || 'redirect' in composedProps) { // If the composed props include a 'notFound' or 'redirect' key, // it means it contains a custom dynamic routing logic that should // not be overwritten: // https://nextjs.org/docs/basic-features/data-fetching#getserversideprops-server-side-rendering) - returnData = { ...composedProps } + return { ...composedProps } } } } - - return returnData + return { + props: { + AuthUserSerialized, + }, + } } export default withAuthUserTokenSSR diff --git a/tsconfig.json b/tsconfig.json index 970cbca2..25627d16 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -25,7 +25,7 @@ "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, - "jsx": "preserve" + "jsx": "react" }, "include": [ "**/*" diff --git a/webpack.config.js b/webpack.config.js index c1085512..e00f4a1d 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -4,6 +4,7 @@ const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer') const nodeExternals = require('webpack-node-externals') const CopyPlugin = require('copy-webpack-plugin') const includeSubdependencies = require('datwd') +const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin') const analyzeBundle = process.env.WEBPACK_ANALYZE_BUNDLE @@ -16,6 +17,7 @@ const sharedConfig = { libraryExport: 'default', }, resolve: { + plugins: [new TsconfigPathsPlugin({})], extensions: ['.js', '.jx', '.ts', '.tsx'], }, module: { @@ -67,7 +69,7 @@ const sharedConfig = { const serverConfig = { ...sharedConfig, - entry: './src/index.server.js', + entry: './src/index.server.ts', target: 'node', output: { ...sharedConfig.output, @@ -85,7 +87,7 @@ const serverConfig = { const clientConfig = { ...sharedConfig, - entry: './src/index.js', + entry: './src/index.ts', target: 'web', output: { ...sharedConfig.output, diff --git a/yarn.lock b/yarn.lock index 2f184447..45e64f40 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,420 +2,307 @@ # yarn lockfile v1 -"@ampproject/remapping@^2.1.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== dependencies: - "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" "@babel/cli@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.18.9.tgz#1fbc8424e5f74ae08bc61ec71609af29287d82d2" - integrity sha512-e7TOtHVrAXBJGNgoROVxqx0mathd01oJGXIDekRfxdrISnRqfM795APwkDtse9GdyPYivjg3iXiko3sF3W7f5Q== + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.22.5.tgz#eb323bd69f50297792c2b7c205a97306a305d703" + integrity sha512-N5d7MjzwsQ2wppwjhrsicVDhJSqF9labEP/swYiHhio4Ca2XjEehpgPmerjnLQl7BPE59BLud0PTWGYwqFl/cQ== dependencies: - "@jridgewell/trace-mapping" "^0.3.8" + "@jridgewell/trace-mapping" "^0.3.17" commander "^4.0.1" convert-source-map "^1.1.0" fs-readdir-recursive "^1.1.0" - glob "^7.0.0" + glob "^7.2.0" make-dir "^2.1.0" slash "^2.0.0" optionalDependencies: "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3" chokidar "^3.4.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== - dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.18.8": - version "7.18.8" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" - integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== - -"@babel/compat-data@^7.19.3": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.19.4.tgz#95c86de137bf0317f3a570e1b6e996b427299747" - integrity sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw== - -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.9.tgz#805461f967c77ff46c74ca0460ccf4fe933ddd59" - integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.9" - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-module-transforms" "^7.18.9" - "@babel/helpers" "^7.18.9" - "@babel/parser" "^7.18.9" - "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.9" - "@babel/types" "^7.18.9" +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658" + integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== + dependencies: + "@babel/highlight" "^7.22.5" + +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.5.tgz#b1f6c86a02d85d2dd3368a2b67c09add8cd0c255" + integrity sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.13.16", "@babel/core@^7.18.9": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.5.tgz#d67d9747ecf26ee7ecd3ebae1ee22225fe902a89" + integrity sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.22.5" + "@babel/generator" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helpers" "^7.22.5" + "@babel/parser" "^7.22.5" + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.5" + "@babel/types" "^7.22.5" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" - json5 "^2.2.1" + json5 "^2.2.2" semver "^6.3.0" -"@babel/core@^7.13.16": - version "7.19.3" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.19.3.tgz#2519f62a51458f43b682d61583c3810e7dcee64c" - integrity sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.19.3" - "@babel/helper-compilation-targets" "^7.19.3" - "@babel/helper-module-transforms" "^7.19.0" - "@babel/helpers" "^7.19.0" - "@babel/parser" "^7.19.3" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.3" - "@babel/types" "^7.19.3" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.1" - semver "^6.3.0" - -"@babel/generator@^7.18.9", "@babel/generator@^7.7.2": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.9.tgz#68337e9ea8044d6ddc690fb29acae39359cca0a5" - integrity sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug== - dependencies: - "@babel/types" "^7.18.9" - "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" - -"@babel/generator@^7.19.3", "@babel/generator@^7.19.4": - version "7.19.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.19.5.tgz#da3f4b301c8086717eee9cab14da91b1fa5dcca7" - integrity sha512-DxbNz9Lz4aMZ99qPpO1raTbcrI1ZeYh+9NR9qhfkQIbFtVEqotHojEBxHzmxhVONkGt6VyrqVQcgpefMy9pqcg== +"@babel/generator@^7.22.5", "@babel/generator@^7.7.2": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.5.tgz#1e7bf768688acfb05cf30b2369ef855e82d984f7" + integrity sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA== dependencies: - "@babel/types" "^7.19.4" + "@babel/types" "^7.22.5" "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" - integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== +"@babel/helper-annotate-as-pure@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" + integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.22.5" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb" - integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz#a3f4758efdd0190d8927fcffd261755937c71878" + integrity sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw== dependencies: - "@babel/helper-explode-assignable-expression" "^7.18.6" - "@babel/types" "^7.18.9" + "@babel/types" "^7.22.5" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" - integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz#fc7319fc54c5e2fa14b2909cf3c5fd3046813e02" + integrity sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw== dependencies: - "@babel/compat-data" "^7.18.8" - "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.20.2" + "@babel/compat-data" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" + browserslist "^4.21.3" + lru-cache "^5.1.1" semver "^6.3.0" -"@babel/helper-compilation-targets@^7.19.3": - version "7.19.3" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz#a10a04588125675d7c7ae299af86fa1b2ee038ca" - integrity sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg== - dependencies: - "@babel/compat-data" "^7.19.3" - "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.21.3" +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz#2192a1970ece4685fbff85b48da2c32fcb130b7c" + integrity sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.5" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.18.6": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz#d802ee16a64a9e824fcbf0a2ffc92f19d58550ce" - integrity sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.18.9" - "@babel/helper-member-expression-to-functions" "^7.18.9" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-replace-supers" "^7.18.9" - "@babel/helper-split-export-declaration" "^7.18.6" - -"@babel/helper-create-class-features-plugin@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz#bfd6904620df4e46470bae4850d66be1054c404b" - integrity sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-member-expression-to-functions" "^7.18.9" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-replace-supers" "^7.18.9" - "@babel/helper-split-export-declaration" "^7.18.6" - -"@babel/helper-create-regexp-features-plugin@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz#3e35f4e04acbbf25f1b3534a657610a000543d3c" - integrity sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz#bb2bf0debfe39b831986a4efbf4066586819c6e4" + integrity sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A== dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - regexpu-core "^5.1.0" + "@babel/helper-annotate-as-pure" "^7.22.5" + regexpu-core "^5.3.1" + semver "^6.3.0" -"@babel/helper-define-polyfill-provider@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" - integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== +"@babel/helper-define-polyfill-provider@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz#487053f103110f25b9755c5980e031e93ced24d8" + integrity sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg== 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" + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" debug "^4.1.1" lodash.debounce "^4.0.8" resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-environment-visitor@^7.18.6", "@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== - -"@babel/helper-explode-assignable-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" - integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-function-name@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz#940e6084a55dee867d33b4e487da2676365e86b0" - integrity sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A== - dependencies: - "@babel/template" "^7.18.6" - "@babel/types" "^7.18.9" - -"@babel/helper-function-name@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" - integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== - dependencies: - "@babel/template" "^7.18.10" - "@babel/types" "^7.19.0" - -"@babel/helper-hoist-variables@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" - integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-member-expression-to-functions@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz#1531661e8375af843ad37ac692c132841e2fd815" - integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg== - dependencies: - "@babel/types" "^7.18.9" - -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712" - integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.18.6" - "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.9" - "@babel/types" "^7.18.9" - -"@babel/helper-module-transforms@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz#309b230f04e22c58c6a2c0c0c7e50b216d350c30" - integrity sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.18.6" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.0" - "@babel/types" "^7.19.0" - -"@babel/helper-optimise-call-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" - integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== - dependencies: - "@babel/types" "^7.18.6" - -"@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.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" - integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== - -"@babel/helper-plugin-utils@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz#4796bb14961521f0f8715990bee2fb6e51ce21bf" - integrity sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw== - -"@babel/helper-remap-async-to-generator@^7.18.6": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" - integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-wrap-function" "^7.18.9" - "@babel/types" "^7.18.9" - -"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz#1092e002feca980fbbb0bd4d51b74a65c6a500e6" - integrity sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-member-expression-to-functions" "^7.18.9" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/traverse" "^7.18.9" - "@babel/types" "^7.18.9" - -"@babel/helper-simple-access@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" - integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-skip-transparent-expression-wrappers@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz#778d87b3a758d90b471e7b9918f34a9a02eb5818" - integrity sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw== - dependencies: - "@babel/types" "^7.18.9" - -"@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-string-parser@^7.19.4": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" - integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== - -"@babel/helper-validator-identifier@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" - integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== - -"@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== - -"@babel/helper-validator-option@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" - integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== - -"@babel/helper-wrap-function@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.18.9.tgz#ae1feddc6ebbaa2fd79346b77821c3bd73a39646" - integrity sha512-cG2ru3TRAL6a60tfQflpEfs4ldiPwF6YW3zfJiRgmoFVIaC1vGnBBgatfec+ZUziPHkHSaXAuEck3Cdkf3eRpQ== - dependencies: - "@babel/helper-function-name" "^7.18.9" - "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.9" - "@babel/types" "^7.18.9" - -"@babel/helpers@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" - integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ== - dependencies: - "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.9" - "@babel/types" "^7.18.9" - -"@babel/helpers@^7.19.0": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.19.4.tgz#42154945f87b8148df7203a25c31ba9a73be46c5" - integrity sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw== - dependencies: - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.4" - "@babel/types" "^7.19.4" - -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" +"@babel/helper-environment-visitor@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" + integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== + +"@babel/helper-function-name@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" + integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== + dependencies: + "@babel/template" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-member-expression-to-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz#0a7c56117cad3372fbf8d2fb4bf8f8d64a1e76b2" + integrity sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-module-imports@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" + integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-module-transforms@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz#0f65daa0716961b6e96b164034e737f60a80d2ef" + integrity sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw== + dependencies: + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/helper-optimise-call-expression@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" + integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== + dependencies: + "@babel/types" "^7.22.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.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + +"@babel/helper-remap-async-to-generator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz#14a38141a7bf2165ad38da61d61cf27b43015da2" + integrity sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-wrap-function" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/helper-replace-supers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz#71bc5fb348856dea9fdc4eafd7e2e49f585145dc" + integrity sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg== + dependencies: + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" + integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz#88cf11050edb95ed08d596f7a044462189127a08" + integrity sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" + integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== + +"@babel/helper-validator-identifier@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" + integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== + +"@babel/helper-validator-option@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac" + integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== + +"@babel/helper-wrap-function@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz#44d205af19ed8d872b4eefb0d2fa65f45eb34f06" + integrity sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw== + dependencies: + "@babel/helper-function-name" "^7.22.5" + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/helpers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.5.tgz#74bb4373eb390d1ceed74a15ef97767e63120820" + integrity sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q== + dependencies: + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/highlight@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031" + integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw== + dependencies: + "@babel/helper-validator-identifier" "^7.22.5" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.6", "@babel/parser@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.9.tgz#f2dde0c682ccc264a9a8595efd030a5cc8fd2539" - integrity sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg== +"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.5.tgz#721fd042f3ce1896238cf1b341c77eb7dee7dbea" + integrity sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q== -"@babel/parser@^7.13.16", "@babel/parser@^7.18.10", "@babel/parser@^7.19.3", "@babel/parser@^7.19.4": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.4.tgz#03c4339d2b8971eb3beca5252bafd9b9f79db3dc" - integrity sha512-qpVT7gtuOLjWeDTKLkJ6sryqLliBaFpAtGeqw5cs5giLldvh+Ch0plqnUMKoVAUS6ZEueQQiZV+p5pxtPitEsA== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" - integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz#87245a21cd69a73b0b81bcda98d443d6df08f05e" + integrity sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz#a11af19aa373d68d561f08e0a57242350ed0ec50" - integrity sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz#fef09f9499b1f1c930da8a0c419db42167d792ca" + integrity sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" - "@babel/plugin-proposal-optional-chaining" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.22.5" -"@babel/plugin-proposal-async-generator-functions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz#aedac81e6fc12bb643374656dd5f2605bf743d17" - integrity sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w== - dependencies: - "@babel/helper-environment-visitor" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-remap-async-to-generator" "^7.18.6" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.18.6": +"@babel/plugin-proposal-class-properties@^7.13.0": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== @@ -423,48 +310,7 @@ "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-class-static-block@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz#8aa81d403ab72d3962fc06c26e222dacfc9b9020" - integrity sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-proposal-dynamic-import@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" - integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-proposal-export-namespace-from@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" - integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" - integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-proposal-logical-assignment-operators@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz#8148cbb350483bf6220af06fa6db3690e14b2e23" - integrity sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8", "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": +"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== @@ -472,61 +318,21 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" - integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== +"@babel/plugin-proposal-optional-chaining@^7.13.12": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" + integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-object-rest-spread@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz#f9434f6beb2c8cae9dfcf97d2a5941bbbf9ad4e7" - integrity sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q== - dependencies: - "@babel/compat-data" "^7.18.8" - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.18.8" - -"@babel/plugin-proposal-optional-catch-binding@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" - integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-proposal-optional-chaining@^7.13.12", "@babel/plugin-proposal-optional-chaining@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz#e8e8fe0723f2563960e4bf5e9690933691915993" - integrity sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" - integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== -"@babel/plugin-proposal-private-property-in-object@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz#a64137b232f0aca3733a67eb1a144c192389c503" - integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": +"@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== @@ -576,21 +382,28 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz#774d825256f2379d06139be0c723c4dd444f3ca1" - integrity sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A== +"@babel/plugin-syntax-flow@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz#163b820b9e7696ce134df3ee716d9c0c98035859" + integrity sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-syntax-import-assertions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz#cd6190500a4fa2fe31990a963ffab4b63e4505e4" - integrity sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ== +"@babel/plugin-syntax-import-assertions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" + integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-attributes@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" + integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-syntax-import-meta@^7.8.3": +"@babel/plugin-syntax-import-meta@^7.10.4", "@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== @@ -604,12 +417,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" - integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== +"@babel/plugin-syntax-jsx@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" + integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" @@ -667,359 +480,492 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.18.6", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz#1c09cd25795c7c2b8a4ba9ae49394576d4133285" - integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== +"@babel/plugin-syntax-typescript@^7.22.5", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" + integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-arrow-functions@^7.18.6": +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz#19063fcf8771ec7b31d742339dac62433d0611fe" - integrity sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ== + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-async-to-generator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz#ccda3d1ab9d5ced5265fdb13f1882d5476c71615" - integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== +"@babel/plugin-transform-arrow-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" + integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-remap-async-to-generator" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoped-functions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" - integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== +"@babel/plugin-transform-async-generator-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz#7336356d23380eda9a56314974f053a020dab0c3" + integrity sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.5" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-transform-async-to-generator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" + integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== + dependencies: + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.5" + +"@babel/plugin-transform-block-scoped-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" + integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-block-scoping@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz#8bfc793b3a4b2742c0983fadc1480d843ecea31b" + integrity sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-class-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" + integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-class-static-block@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz#3e40c46f048403472d6f4183116d5e46b1bff5ba" + integrity sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-block-scoping@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz#f9b7e018ac3f373c81452d6ada8bd5a18928926d" - integrity sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - -"@babel/plugin-transform-classes@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz#90818efc5b9746879b869d5ce83eb2aa48bbc3da" - integrity sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.18.9" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-replace-supers" "^7.18.9" - "@babel/helper-split-export-declaration" "^7.18.6" +"@babel/plugin-transform-classes@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz#635d4e98da741fad814984639f4c0149eb0135e1" + integrity sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.5" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz#2357a8224d402dad623caf6259b611e56aec746e" - integrity sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw== +"@babel/plugin-transform-computed-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" + integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/template" "^7.22.5" -"@babel/plugin-transform-destructuring@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz#68906549c021cb231bee1db21d3b5b095f8ee292" - integrity sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA== +"@babel/plugin-transform-destructuring@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz#d3aca7438f6c26c78cdd0b0ba920a336001b27cc" + integrity sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" - integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== +"@babel/plugin-transform-dotall-regex@^7.22.5", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" + integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-duplicate-keys@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" - integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== +"@babel/plugin-transform-duplicate-keys@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" + integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-exponentiation-operator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" - integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== +"@babel/plugin-transform-dynamic-import@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz#d6908a8916a810468c4edff73b5b75bda6ad393e" + integrity sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-flow-strip-types@^7.18.6": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz#e9e8606633287488216028719638cbbb2f2dde8f" - integrity sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg== +"@babel/plugin-transform-exponentiation-operator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" + integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== dependencies: - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/plugin-syntax-flow" "^7.18.6" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-for-of@^7.18.8": - version "7.18.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1" - integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== +"@babel/plugin-transform-export-namespace-from@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz#57c41cb1d0613d22f548fddd8b288eedb9973a5b" + integrity sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-function-name@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" - integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== +"@babel/plugin-transform-flow-strip-types@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz#0bb17110c7bf5b35a60754b2f00c58302381dee2" + integrity sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA== dependencies: - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-function-name" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-flow" "^7.22.5" -"@babel/plugin-transform-literals@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" - integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== +"@babel/plugin-transform-for-of@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz#ab1b8a200a8f990137aff9a084f8de4099ab173f" + integrity sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-member-expression-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" - integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== +"@babel/plugin-transform-function-name@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" + integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-amd@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz#8c91f8c5115d2202f277549848874027d7172d21" - integrity sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg== +"@babel/plugin-transform-json-strings@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz#14b64352fdf7e1f737eed68de1a1468bd2a77ec0" + integrity sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A== dependencies: - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz#afd243afba166cca69892e24a8fd8c9f2ca87883" - integrity sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q== +"@babel/plugin-transform-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" + integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== dependencies: - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-simple-access" "^7.18.6" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz#545df284a7ac6a05125e3e405e536c5853099a06" - integrity sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A== +"@babel/plugin-transform-logical-assignment-operators@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz#66ae5f068fd5a9a5dc570df16f56c2a8462a9d6c" + integrity sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA== dependencies: - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-module-transforms" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-validator-identifier" "^7.18.6" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-modules-umd@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" - integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== +"@babel/plugin-transform-member-expression-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" + integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== dependencies: - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-named-capturing-groups-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz#c89bfbc7cc6805d692f3a49bc5fc1b630007246d" - integrity sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg== +"@babel/plugin-transform-modules-amd@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz#4e045f55dcf98afd00f85691a68fc0780704f526" + integrity sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-new-target@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" - integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== +"@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz#7d9875908d19b8c0536085af7b053fd5bd651bfa" + integrity sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-object-super@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" - integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== +"@babel/plugin-transform-modules-systemjs@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz#18c31410b5e579a0092638f95c896c2a98a5d496" + integrity sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-replace-supers" "^7.18.6" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" -"@babel/plugin-transform-parameters@^7.18.8": - version "7.18.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz#ee9f1a0ce6d78af58d0956a9378ea3427cccb48a" - integrity sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg== +"@babel/plugin-transform-modules-umd@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" + integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-property-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" - integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== +"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" + integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-react-display-name@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" - integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA== +"@babel/plugin-transform-new-target@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" + integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-react-jsx-development@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" - integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== +"@babel/plugin-transform-nullish-coalescing-operator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz#f8872c65776e0b552e0849d7596cddd416c3e381" + integrity sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA== dependencies: - "@babel/plugin-transform-react-jsx" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-react-jsx@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.6.tgz#2721e96d31df96e3b7ad48ff446995d26bc028ff" - integrity sha512-Mz7xMPxoy9kPS/JScj6fJs03TZ/fZ1dJPlMjRAgTaxaS0fUBk8FV/A2rRgfPsVCZqALNwMexD+0Uaf5zlcKPpw== +"@babel/plugin-transform-numeric-separator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz#57226a2ed9e512b9b446517ab6fa2d17abb83f58" + integrity sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g== dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-jsx" "^7.18.6" - "@babel/types" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-react-pure-annotations@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844" - integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ== +"@babel/plugin-transform-object-rest-spread@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz#9686dc3447df4753b0b2a2fae7e8bc33cdc1f2e1" + integrity sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/compat-data" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.22.5" -"@babel/plugin-transform-regenerator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz#585c66cb84d4b4bf72519a34cfce761b8676ca73" - integrity sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ== +"@babel/plugin-transform-object-super@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" + integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - regenerator-transform "^0.15.0" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.5" -"@babel/plugin-transform-reserved-words@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" - integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== +"@babel/plugin-transform-optional-catch-binding@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz#842080be3076703be0eaf32ead6ac8174edee333" + integrity sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-transform-optional-chaining@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz#1003762b9c14295501beb41be72426736bedd1e0" + integrity sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-transform-parameters@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz#c3542dd3c39b42c8069936e48717a8d179d63a18" + integrity sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-private-methods@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" + integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-private-property-in-object@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz#07a77f28cbb251546a43d175a1dda4cf3ef83e32" + integrity sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-transform-property-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" + integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-react-display-name@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz#3c4326f9fce31c7968d6cb9debcaf32d9e279a2b" + integrity sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-react-jsx-development@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" + integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.22.5" + +"@babel/plugin-transform-react-jsx@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz#932c291eb6dd1153359e2a90cb5e557dcf068416" + integrity sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-jsx" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/plugin-transform-react-pure-annotations@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz#1f58363eef6626d6fa517b95ac66fe94685e32c0" + integrity sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-regenerator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz#cd8a68b228a5f75fa01420e8cc2fc400f0fc32aa" + integrity sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + regenerator-transform "^0.15.1" + +"@babel/plugin-transform-reserved-words@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" + integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-runtime@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.9.tgz#d9e4b1b25719307bfafbf43065ed7fb3a83adb8f" - integrity sha512-wS8uJwBt7/b/mzE13ktsJdmS4JP/j7PQSaADtnb4I2wL0zK51MQ0pmF8/Jy0wUIS96fr+fXT6S/ifiPXnvrlSg== - dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.9" - babel-plugin-polyfill-corejs2 "^0.3.1" - babel-plugin-polyfill-corejs3 "^0.5.2" - babel-plugin-polyfill-regenerator "^0.3.1" + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz#ca975fb5e260044473c8142e1b18b567d33c2a3b" + integrity sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw== + dependencies: + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + babel-plugin-polyfill-corejs2 "^0.4.3" + babel-plugin-polyfill-corejs3 "^0.8.1" + babel-plugin-polyfill-regenerator "^0.5.0" semver "^6.3.0" -"@babel/plugin-transform-shorthand-properties@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" - integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== +"@babel/plugin-transform-shorthand-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" + integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-spread@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz#6ea7a6297740f381c540ac56caf75b05b74fb664" - integrity sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA== +"@babel/plugin-transform-spread@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" + integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-sticky-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" - integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== +"@babel/plugin-transform-sticky-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" + integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-template-literals@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" - integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== +"@babel/plugin-transform-template-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" + integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typeof-symbol@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" - integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== +"@babel/plugin-transform-typeof-symbol@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" + integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typescript@^7.18.6": - version "7.19.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.3.tgz#4f1db1e0fe278b42ddbc19ec2f6cd2f8262e35d6" - integrity sha512-z6fnuK9ve9u/0X0rRvI9MY0xg+DOUaABDYOe+/SQTxtlptaBB/V9JIUxJn6xp3lMBeb9qe8xSFmHU35oZDXD+w== +"@babel/plugin-transform-typescript@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.5.tgz#5c0f7adfc1b5f38c4dbc8f79b1f0f8074134bd7d" + integrity sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.19.0" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/plugin-syntax-typescript" "^7.18.6" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-typescript" "^7.22.5" -"@babel/plugin-transform-unicode-escapes@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz#0d01fb7fb2243ae1c033f65f6e3b4be78db75f27" - integrity sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw== +"@babel/plugin-transform-unicode-escapes@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz#ce0c248522b1cb22c7c992d88301a5ead70e806c" + integrity sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" - integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== +"@babel/plugin-transform-unicode-property-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" + integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" + integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-sets-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" + integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.9.tgz#9b3425140d724fbe590322017466580844c7eaff" - integrity sha512-75pt/q95cMIHWssYtyfjVlvI+QEZQThQbKvR9xH+F/Agtw/s4Wfc2V9Bwd/P39VtixB7oWxGdH4GteTTwYJWMg== - dependencies: - "@babel/compat-data" "^7.18.8" - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-validator-option" "^7.18.6" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-async-generator-functions" "^7.18.6" - "@babel/plugin-proposal-class-properties" "^7.18.6" - "@babel/plugin-proposal-class-static-block" "^7.18.6" - "@babel/plugin-proposal-dynamic-import" "^7.18.6" - "@babel/plugin-proposal-export-namespace-from" "^7.18.9" - "@babel/plugin-proposal-json-strings" "^7.18.6" - "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" - "@babel/plugin-proposal-numeric-separator" "^7.18.6" - "@babel/plugin-proposal-object-rest-spread" "^7.18.9" - "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" - "@babel/plugin-proposal-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-private-methods" "^7.18.6" - "@babel/plugin-proposal-private-property-in-object" "^7.18.6" - "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.5.tgz#3da66078b181f3d62512c51cf7014392c511504e" + integrity sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A== + dependencies: + "@babel/compat-data" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.5" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.5" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.18.6" + "@babel/plugin-syntax-import-assertions" "^7.22.5" + "@babel/plugin-syntax-import-attributes" "^7.22.5" + "@babel/plugin-syntax-import-meta" "^7.10.4" "@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" @@ -1029,54 +975,71 @@ "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.18.6" - "@babel/plugin-transform-async-to-generator" "^7.18.6" - "@babel/plugin-transform-block-scoped-functions" "^7.18.6" - "@babel/plugin-transform-block-scoping" "^7.18.9" - "@babel/plugin-transform-classes" "^7.18.9" - "@babel/plugin-transform-computed-properties" "^7.18.9" - "@babel/plugin-transform-destructuring" "^7.18.9" - "@babel/plugin-transform-dotall-regex" "^7.18.6" - "@babel/plugin-transform-duplicate-keys" "^7.18.9" - "@babel/plugin-transform-exponentiation-operator" "^7.18.6" - "@babel/plugin-transform-for-of" "^7.18.8" - "@babel/plugin-transform-function-name" "^7.18.9" - "@babel/plugin-transform-literals" "^7.18.9" - "@babel/plugin-transform-member-expression-literals" "^7.18.6" - "@babel/plugin-transform-modules-amd" "^7.18.6" - "@babel/plugin-transform-modules-commonjs" "^7.18.6" - "@babel/plugin-transform-modules-systemjs" "^7.18.9" - "@babel/plugin-transform-modules-umd" "^7.18.6" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.18.6" - "@babel/plugin-transform-new-target" "^7.18.6" - "@babel/plugin-transform-object-super" "^7.18.6" - "@babel/plugin-transform-parameters" "^7.18.8" - "@babel/plugin-transform-property-literals" "^7.18.6" - "@babel/plugin-transform-regenerator" "^7.18.6" - "@babel/plugin-transform-reserved-words" "^7.18.6" - "@babel/plugin-transform-shorthand-properties" "^7.18.6" - "@babel/plugin-transform-spread" "^7.18.9" - "@babel/plugin-transform-sticky-regex" "^7.18.6" - "@babel/plugin-transform-template-literals" "^7.18.9" - "@babel/plugin-transform-typeof-symbol" "^7.18.9" - "@babel/plugin-transform-unicode-escapes" "^7.18.6" - "@babel/plugin-transform-unicode-regex" "^7.18.6" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.22.5" + "@babel/plugin-transform-async-generator-functions" "^7.22.5" + "@babel/plugin-transform-async-to-generator" "^7.22.5" + "@babel/plugin-transform-block-scoped-functions" "^7.22.5" + "@babel/plugin-transform-block-scoping" "^7.22.5" + "@babel/plugin-transform-class-properties" "^7.22.5" + "@babel/plugin-transform-class-static-block" "^7.22.5" + "@babel/plugin-transform-classes" "^7.22.5" + "@babel/plugin-transform-computed-properties" "^7.22.5" + "@babel/plugin-transform-destructuring" "^7.22.5" + "@babel/plugin-transform-dotall-regex" "^7.22.5" + "@babel/plugin-transform-duplicate-keys" "^7.22.5" + "@babel/plugin-transform-dynamic-import" "^7.22.5" + "@babel/plugin-transform-exponentiation-operator" "^7.22.5" + "@babel/plugin-transform-export-namespace-from" "^7.22.5" + "@babel/plugin-transform-for-of" "^7.22.5" + "@babel/plugin-transform-function-name" "^7.22.5" + "@babel/plugin-transform-json-strings" "^7.22.5" + "@babel/plugin-transform-literals" "^7.22.5" + "@babel/plugin-transform-logical-assignment-operators" "^7.22.5" + "@babel/plugin-transform-member-expression-literals" "^7.22.5" + "@babel/plugin-transform-modules-amd" "^7.22.5" + "@babel/plugin-transform-modules-commonjs" "^7.22.5" + "@babel/plugin-transform-modules-systemjs" "^7.22.5" + "@babel/plugin-transform-modules-umd" "^7.22.5" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.22.5" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.5" + "@babel/plugin-transform-numeric-separator" "^7.22.5" + "@babel/plugin-transform-object-rest-spread" "^7.22.5" + "@babel/plugin-transform-object-super" "^7.22.5" + "@babel/plugin-transform-optional-catch-binding" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.22.5" + "@babel/plugin-transform-parameters" "^7.22.5" + "@babel/plugin-transform-private-methods" "^7.22.5" + "@babel/plugin-transform-private-property-in-object" "^7.22.5" + "@babel/plugin-transform-property-literals" "^7.22.5" + "@babel/plugin-transform-regenerator" "^7.22.5" + "@babel/plugin-transform-reserved-words" "^7.22.5" + "@babel/plugin-transform-shorthand-properties" "^7.22.5" + "@babel/plugin-transform-spread" "^7.22.5" + "@babel/plugin-transform-sticky-regex" "^7.22.5" + "@babel/plugin-transform-template-literals" "^7.22.5" + "@babel/plugin-transform-typeof-symbol" "^7.22.5" + "@babel/plugin-transform-unicode-escapes" "^7.22.5" + "@babel/plugin-transform-unicode-property-regex" "^7.22.5" + "@babel/plugin-transform-unicode-regex" "^7.22.5" + "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.18.9" - babel-plugin-polyfill-corejs2 "^0.3.1" - babel-plugin-polyfill-corejs3 "^0.5.2" - babel-plugin-polyfill-regenerator "^0.3.1" - core-js-compat "^3.22.1" + "@babel/types" "^7.22.5" + babel-plugin-polyfill-corejs2 "^0.4.3" + babel-plugin-polyfill-corejs3 "^0.8.1" + babel-plugin-polyfill-regenerator "^0.5.0" + core-js-compat "^3.30.2" semver "^6.3.0" "@babel/preset-flow@^7.13.13": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.18.6.tgz#83f7602ba566e72a9918beefafef8ef16d2810cb" - integrity sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ== + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.22.5.tgz#876f24ab6b38bd79703a93f32020ca2162312784" + integrity sha512-ta2qZ+LSiGCrP5pgcGt8xMnnkXQrq8Sa4Ulhy06BOlF5QbLw9q5hIx7bn5MrsvyTGAfh6kTOo07Q+Pfld/8Y5Q== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-validator-option" "^7.18.6" - "@babel/plugin-transform-flow-strip-types" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" + "@babel/plugin-transform-flow-strip-types" "^7.22.5" "@babel/preset-modules@^0.1.5": version "0.1.5" @@ -1090,30 +1053,32 @@ esutils "^2.0.2" "@babel/preset-react@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" - integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.22.5.tgz#c4d6058fbf80bccad02dd8c313a9aaa67e3c3dd6" + integrity sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-validator-option" "^7.18.6" - "@babel/plugin-transform-react-display-name" "^7.18.6" - "@babel/plugin-transform-react-jsx" "^7.18.6" - "@babel/plugin-transform-react-jsx-development" "^7.18.6" - "@babel/plugin-transform-react-pure-annotations" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" + "@babel/plugin-transform-react-display-name" "^7.22.5" + "@babel/plugin-transform-react-jsx" "^7.22.5" + "@babel/plugin-transform-react-jsx-development" "^7.22.5" + "@babel/plugin-transform-react-pure-annotations" "^7.22.5" "@babel/preset-typescript@^7.13.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz#ce64be3e63eddc44240c6358daefac17b3186399" - integrity sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ== + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz#16367d8b01d640e9a507577ed4ee54e0101e51c8" + integrity sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-validator-option" "^7.18.6" - "@babel/plugin-transform-typescript" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" + "@babel/plugin-syntax-jsx" "^7.22.5" + "@babel/plugin-transform-modules-commonjs" "^7.22.5" + "@babel/plugin-transform-typescript" "^7.22.5" "@babel/register@^7.13.16": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.18.9.tgz#1888b24bc28d5cc41c412feb015e9ff6b96e439c" - integrity sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw== + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.22.5.tgz#e4d8d0f615ea3233a27b5c6ada6750ee59559939" + integrity sha512-vV6pm/4CijSQ8Y47RH5SopXzursN35RQINfGJkmOlcpAtGuf94miFvIPhCKGQN7WGIcsgG1BHEX2KVdTYwTwUQ== dependencies: clone-deep "^4.0.1" find-cache-dir "^2.0.0" @@ -1121,86 +1086,50 @@ pirates "^4.0.5" source-map-support "^0.5.16" -"@babel/runtime-corejs3@^7.10.2": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.18.9.tgz#7bacecd1cb2dd694eacd32a91fcf7021c20770ae" - integrity sha512-qZEWeccZCrHA2Au4/X05QW5CMdm4VjUDCrGq5gf1ZDcM4hRqreKrtwAn7yci9zfgAS9apvnsFXiGBHBAxZdK9A== - dependencies: - core-js-pure "^3.20.2" - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.9", "@babel/runtime@^7.8.4": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" - integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" - integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.18.10" - "@babel/types" "^7.18.10" - -"@babel/template@^7.18.6", "@babel/template@^7.3.3": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31" - integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.18.6" - "@babel/types" "^7.18.6" - -"@babel/traverse@^7.13.0", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.9.tgz#deeff3e8f1bad9786874cb2feda7a2d77a904f98" - integrity sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.9" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.18.9" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.18.9" - "@babel/types" "^7.18.9" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/traverse@^7.19.0", "@babel/traverse@^7.19.3", "@babel/traverse@^7.19.4": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.19.4.tgz#f117820e18b1e59448a6c1fa9d0ff08f7ac459a8" - integrity sha512-w3K1i+V5u2aJUOXBFFC5pveFLmtq1s3qcdDNC2qRI6WPBQIDaKFqXxDEqDO/h1dQ3HjsZoZMyIy6jGLq0xtw+g== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.19.4" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.19.4" - "@babel/types" "^7.19.4" +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + +"@babel/runtime@^7.12.5", "@babel/runtime@^7.18.9", "@babel/runtime@^7.20.7", "@babel/runtime@^7.8.4": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.5.tgz#8564dd588182ce0047d55d7a75e93921107b57ec" + integrity sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA== + dependencies: + regenerator-runtime "^0.13.11" + +"@babel/template@^7.22.5", "@babel/template@^7.3.3": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" + integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== + dependencies: + "@babel/code-frame" "^7.22.5" + "@babel/parser" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/traverse@^7.22.5", "@babel/traverse@^7.7.2": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.5.tgz#44bd276690db6f4940fdb84e1cb4abd2f729ccd1" + integrity sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ== + dependencies: + "@babel/code-frame" "^7.22.5" + "@babel/generator" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.5" + "@babel/parser" "^7.22.5" + "@babel/types" "^7.22.5" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.9.tgz#7148d64ba133d8d73a41b3172ac4b83a1452205f" - integrity sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - to-fast-properties "^2.0.0" - -"@babel/types@^7.18.10", "@babel/types@^7.19.0", "@babel/types@^7.19.3", "@babel/types@^7.19.4": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.4.tgz#0dd5c91c573a202d600490a35b33246fed8a41c7" - integrity sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe" + integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA== dependencies: - "@babel/helper-string-parser" "^7.19.4" - "@babel/helper-validator-identifier" "^7.19.1" + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -1208,415 +1137,485 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@discoveryjs/json-ext@^0.5.0": +"@discoveryjs/json-ext@0.5.7", "@discoveryjs/json-ext@^0.5.0": version "0.5.7" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== -"@eslint/eslintrc@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f" - integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.4.0": + version "4.5.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" + integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== + +"@eslint/eslintrc@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.0.tgz#82256f164cc9e0b59669efc19d57f8092706841d" + integrity sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.3.2" - globals "^13.15.0" + espree "^9.6.0" + globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" js-yaml "^4.1.0" minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@eslint/js@8.44.0": + version "8.44.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.44.0.tgz#961a5903c74139390478bdc808bcde3fc45ab7af" + integrity sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw== + "@fastify/busboy@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-1.1.0.tgz#4472f856e2bb5a9ee34ad64b93891b73b73537ca" - integrity sha512-Fv854f94v0CzIDllbY3i/0NJPNBRNLDawf3BTYVGCe9VrIIs3Wi7AFx24F9NzCxdf0wyx/x0Q9kEVnvDOPnlxA== + version "1.2.1" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-1.2.1.tgz#9c6db24a55f8b803b5222753b24fe3aea2ba9ca3" + integrity sha512-7PQA7EH43S0CxcOa9OeAnaeA0oQ+e/DHNPZwSQM9CQHW76jle5+OvLdibRp/Aafs9KXbLhxyjOTkRjWUbQEd3Q== dependencies: text-decoding "^1.0.0" -"@firebase/analytics-compat@0.1.13": - version "0.1.13" - resolved "https://registry.yarnpkg.com/@firebase/analytics-compat/-/analytics-compat-0.1.13.tgz#61e1d6f9e4d033c3ed9943d91530eb3e0f382f92" - integrity sha512-QC1DH/Dwc8fBihn0H+jocBWyE17GF1fOCpCrpAiQ2u16F/NqsVDVG4LjIqdhq963DXaXneNY7oDwa25Up682AA== +"@firebase/analytics-compat@0.2.6": + version "0.2.6" + resolved "https://registry.yarnpkg.com/@firebase/analytics-compat/-/analytics-compat-0.2.6.tgz#50063978c42f13eb800e037e96ac4b17236841f4" + integrity sha512-4MqpVLFkGK7NJf/5wPEEP7ePBJatwYpyjgJ+wQHQGHfzaCDgntOnl9rL2vbVGGKCnRqWtZDIWhctB86UWXaX2Q== dependencies: - "@firebase/analytics" "0.8.0" - "@firebase/analytics-types" "0.7.0" - "@firebase/component" "0.5.17" - "@firebase/util" "1.6.3" + "@firebase/analytics" "0.10.0" + "@firebase/analytics-types" "0.8.0" + "@firebase/component" "0.6.4" + "@firebase/util" "1.9.3" tslib "^2.1.0" -"@firebase/analytics-types@0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@firebase/analytics-types/-/analytics-types-0.7.0.tgz#91960e7c87ce8bf18cf8dd9e55ccbf5dc3989b5d" - integrity sha512-DNE2Waiwy5+zZnCfintkDtBfaW6MjIG883474v6Z0K1XZIvl76cLND4iv0YUb48leyF+PJK1KO2XrgHb/KpmhQ== - -"@firebase/analytics@0.8.0": +"@firebase/analytics-types@0.8.0": version "0.8.0" - resolved "https://registry.yarnpkg.com/@firebase/analytics/-/analytics-0.8.0.tgz#b5d595082f57d33842b1fd9025d88f83065e87fe" - integrity sha512-wkcwainNm8Cu2xkJpDSHfhBSdDJn86Q1TZNmLWc67VrhZUHXIKXxIqb65/tNUVE+I8+sFiDDNwA+9R3MqTQTaA== - dependencies: - "@firebase/component" "0.5.17" - "@firebase/installations" "0.5.12" - "@firebase/logger" "0.3.3" - "@firebase/util" "1.6.3" + resolved "https://registry.yarnpkg.com/@firebase/analytics-types/-/analytics-types-0.8.0.tgz#551e744a29adbc07f557306530a2ec86add6d410" + integrity sha512-iRP+QKI2+oz3UAh4nPEq14CsEjrjD6a5+fuypjScisAh9kXKFvdJOZJDwk7kikLvWVLGEs9+kIUS4LPQV7VZVw== + +"@firebase/analytics@0.10.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@firebase/analytics/-/analytics-0.10.0.tgz#9c6986acd573c6c6189ffb52d0fd63c775db26d7" + integrity sha512-Locv8gAqx0e+GX/0SI3dzmBY5e9kjVDtD+3zCFLJ0tH2hJwuCAiL+5WkHuxKj92rqQj/rvkBUCfA1ewlX2hehg== + dependencies: + "@firebase/component" "0.6.4" + "@firebase/installations" "0.6.4" + "@firebase/logger" "0.4.0" + "@firebase/util" "1.9.3" tslib "^2.1.0" -"@firebase/app-check-compat@0.2.12": - version "0.2.12" - resolved "https://registry.yarnpkg.com/@firebase/app-check-compat/-/app-check-compat-0.2.12.tgz#e30b2395e3d30f8cfcf3554fc87875f82c1aa086" - integrity sha512-GFppNLlUyMN9Iq31ME/+GkjRVKlc+MeanzUKQ9UaR73ZsYH3oX3Ja+xjoYgixaVJDDG+ofBYR7ZXTkkQdSR/pw== +"@firebase/app-check-compat@0.3.7": + version "0.3.7" + resolved "https://registry.yarnpkg.com/@firebase/app-check-compat/-/app-check-compat-0.3.7.tgz#e150f61d653a0f2043a34dcb995616a717161839" + integrity sha512-cW682AxsyP1G+Z0/P7pO/WT2CzYlNxoNe5QejVarW2o5ZxeWSSPAiVEwpEpQR/bUlUmdeWThYTMvBWaopdBsqw== dependencies: - "@firebase/app-check" "0.5.12" - "@firebase/app-check-types" "0.4.0" - "@firebase/component" "0.5.17" - "@firebase/logger" "0.3.3" - "@firebase/util" "1.6.3" + "@firebase/app-check" "0.8.0" + "@firebase/app-check-types" "0.5.0" + "@firebase/component" "0.6.4" + "@firebase/logger" "0.4.0" + "@firebase/util" "1.9.3" tslib "^2.1.0" -"@firebase/app-check-interop-types@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@firebase/app-check-interop-types/-/app-check-interop-types-0.1.0.tgz#83afd9d41f99166c2bdb2d824e5032e9edd8fe53" - integrity sha512-uZfn9s4uuRsaX5Lwx+gFP3B6YsyOKUE+Rqa6z9ojT4VSRAsZFko9FRn6OxQUA1z5t5d08fY4pf+/+Dkd5wbdbA== +"@firebase/app-check-interop-types@0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.0.tgz#b27ea1397cb80427f729e4bbf3a562f2052955c4" + integrity sha512-xAxHPZPIgFXnI+vb4sbBjZcde7ZluzPPaSK7Lx3/nmuVk4TjZvnL8ONnkd4ERQKL8WePQySU+pRcWkh8rDf5Sg== -"@firebase/app-check-types@0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@firebase/app-check-types/-/app-check-types-0.4.0.tgz#7007a9d1d720db20bcf466fe6785c96feaa0a82d" - integrity sha512-SsWafqMABIOu7zLgWbmwvHGOeQQVQlwm42kwwubsmfLmL4Sf5uGpBfDhQ0CAkpi7bkJ/NwNFKafNDL9prRNP0Q== +"@firebase/app-check-types@0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@firebase/app-check-types/-/app-check-types-0.5.0.tgz#1b02826213d7ce6a1cf773c329b46ea1c67064f4" + integrity sha512-uwSUj32Mlubybw7tedRzR24RP8M8JUVR3NPiMk3/Z4bCmgEKTlQBwMXrehDAZ2wF+TsBq0SN1c6ema71U/JPyQ== -"@firebase/app-check@0.5.12": - version "0.5.12" - resolved "https://registry.yarnpkg.com/@firebase/app-check/-/app-check-0.5.12.tgz#82f305cc01bfe4d32c35e425941b2eca2ce9f089" - integrity sha512-l+MmvupSGT/F+I5ei7XjhEfpoL4hLVJr0vUwcG5NEf2hAkQnySli9fnbl9fZu1BJaQ2kthrMmtg1gcbcM9BUCQ== +"@firebase/app-check@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@firebase/app-check/-/app-check-0.8.0.tgz#b531ec40900af9c3cf1ec63de9094a0ddd733d6a" + integrity sha512-dRDnhkcaC2FspMiRK/Vbp+PfsOAEP6ZElGm9iGFJ9fDqHoPs0HOPn7dwpJ51lCFi1+2/7n5pRPGhqF/F03I97g== dependencies: - "@firebase/component" "0.5.17" - "@firebase/logger" "0.3.3" - "@firebase/util" "1.6.3" + "@firebase/component" "0.6.4" + "@firebase/logger" "0.4.0" + "@firebase/util" "1.9.3" tslib "^2.1.0" -"@firebase/app-compat@0.1.30": - version "0.1.30" - resolved "https://registry.yarnpkg.com/@firebase/app-compat/-/app-compat-0.1.30.tgz#027542ec59e1a482edb8dc90b611f3c47e0a7a9b" - integrity sha512-t51oJEJzjts4D5C7Nol0Ua7dqhpQSlcWSa7X1VtL+zjcTZ92ibYmwQjXomexBmlKvCUamGClMAEBfEgUtr0Wug== +"@firebase/app-compat@0.2.13": + version "0.2.13" + resolved "https://registry.yarnpkg.com/@firebase/app-compat/-/app-compat-0.2.13.tgz#c42d392f45f2c9fef1631cb3ae36d53296aa6407" + integrity sha512-j6ANZaWjeVy5zg6X7uiqh6lM6o3n3LD1+/SJFNs9V781xyryyZWXe+tmnWNWPkP086QfJoNkWN9pMQRqSG4vMg== dependencies: - "@firebase/app" "0.7.29" - "@firebase/component" "0.5.17" - "@firebase/logger" "0.3.3" - "@firebase/util" "1.6.3" + "@firebase/app" "0.9.13" + "@firebase/component" "0.6.4" + "@firebase/logger" "0.4.0" + "@firebase/util" "1.9.3" tslib "^2.1.0" -"@firebase/app-types@0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.7.0.tgz#c9e16d1b8bed1a991840b8d2a725fb58d0b5899f" - integrity sha512-6fbHQwDv2jp/v6bXhBw2eSRbNBpxHcd1NBF864UksSMVIqIyri9qpJB1Mn6sGZE+bnDsSQBC5j2TbMxYsJQkQg== - -"@firebase/app@0.7.29": - version "0.7.29" - resolved "https://registry.yarnpkg.com/@firebase/app/-/app-0.7.29.tgz#404fcc7f130b1829350d3a2e20d2d350e0c54b91" - integrity sha512-jT47plTi/O0lpXEXPx5t/dH/3BVnP9Tq/D8SZkhMUXPYlYDudvepIiV3VOW8XxbbHU/X+JyY0qG5CoWxIk0teg== - dependencies: - "@firebase/component" "0.5.17" - "@firebase/logger" "0.3.3" - "@firebase/util" "1.6.3" - idb "7.0.1" +"@firebase/app-types@0.8.1": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.8.1.tgz#4c7f916281aed570581fc667e3eb6cc730119a95" + integrity sha512-p75Ow3QhB82kpMzmOntv866wH9eZ3b4+QbUY+8/DA5Zzdf1c8Nsk8B7kbFpzJt4wwHMdy5LTF5YUnoTc1JiWkw== + +"@firebase/app-types@0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.9.0.tgz#35b5c568341e9e263b29b3d2ba0e9cfc9ec7f01e" + integrity sha512-AeweANOIo0Mb8GiYm3xhTEBVCmPwTYAu9Hcd2qSkLuga/6+j9b1Jskl5bpiSQWy9eJ/j5pavxj6eYogmnuzm+Q== + +"@firebase/app@0.9.13": + version "0.9.13" + resolved "https://registry.yarnpkg.com/@firebase/app/-/app-0.9.13.tgz#b1d3ad63d52f235a0d70a9b4261cabb3a24690d7" + integrity sha512-GfiI1JxJ7ecluEmDjPzseRXk/PX31hS7+tjgBopL7XjB2hLUdR+0FTMXy2Q3/hXezypDvU6or7gVFizDESrkXw== + dependencies: + "@firebase/component" "0.6.4" + "@firebase/logger" "0.4.0" + "@firebase/util" "1.9.3" + idb "7.1.1" tslib "^2.1.0" -"@firebase/auth-compat@0.2.18": - version "0.2.18" - resolved "https://registry.yarnpkg.com/@firebase/auth-compat/-/auth-compat-0.2.18.tgz#c7bb254fbb23447069f81abb15f96e91de40b285" - integrity sha512-Fw2PJS0G/tGrfyEBcYJQ42sfy5+sANrK5xd7tuzgV7zLFW5rYkHUIZngXjuOBwLOcfO2ixa/FavfeJle3oJ38Q== +"@firebase/auth-compat@0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@firebase/auth-compat/-/auth-compat-0.4.2.tgz#cb65edc2fbd5f72fff32310409f2fd702b5145e7" + integrity sha512-Q30e77DWXFmXEt5dg5JbqEDpjw9y3/PcP9LslDPR7fARmAOTIY9MM6HXzm9KC+dlrKH/+p6l8g9ifJiam9mc4A== dependencies: - "@firebase/auth" "0.20.5" - "@firebase/auth-types" "0.11.0" - "@firebase/component" "0.5.17" - "@firebase/util" "1.6.3" + "@firebase/auth" "0.23.2" + "@firebase/auth-types" "0.12.0" + "@firebase/component" "0.6.4" + "@firebase/util" "1.9.3" node-fetch "2.6.7" - selenium-webdriver "4.1.2" tslib "^2.1.0" -"@firebase/auth-interop-types@0.1.6": - version "0.1.6" - resolved "https://registry.yarnpkg.com/@firebase/auth-interop-types/-/auth-interop-types-0.1.6.tgz#5ce13fc1c527ad36f1bb1322c4492680a6cf4964" - integrity sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g== +"@firebase/auth-interop-types@0.1.7": + version "0.1.7" + resolved "https://registry.yarnpkg.com/@firebase/auth-interop-types/-/auth-interop-types-0.1.7.tgz#82c8d431779916224d2af5cef6cec2042d830f28" + integrity sha512-yA/dTveGGPcc85JP8ZE/KZqfGQyQTBCV10THdI8HTlP1GDvNrhr//J5jAt58MlsCOaO3XmC4DqScPBbtIsR/EA== -"@firebase/auth-types@0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@firebase/auth-types/-/auth-types-0.11.0.tgz#b9c73c60ca07945b3bbd7a097633e5f78fa9e886" - integrity sha512-q7Bt6cx+ySj9elQHTsKulwk3+qDezhzRBFC9zlQ1BjgMueUOnGMcvqmU0zuKlQ4RhLSH7MNAdBV2znVaoN3Vxw== +"@firebase/auth-interop-types@0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@firebase/auth-interop-types/-/auth-interop-types-0.2.1.tgz#78884f24fa539e34a06c03612c75f222fcc33742" + integrity sha512-VOaGzKp65MY6P5FI84TfYKBXEPi6LmOCSMMzys6o2BN2LOsqy7pCuZCup7NYnfbk5OkkQKzvIfHOzTm0UDpkyg== + +"@firebase/auth-types@0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@firebase/auth-types/-/auth-types-0.12.0.tgz#f28e1b68ac3b208ad02a15854c585be6da3e8e79" + integrity sha512-pPwaZt+SPOshK8xNoiQlK5XIrS97kFYc3Rc7xmy373QsOJ9MmqXxLaYssP5Kcds4wd2qK//amx/c+A8O2fVeZA== + +"@firebase/auth@0.23.2": + version "0.23.2" + resolved "https://registry.yarnpkg.com/@firebase/auth/-/auth-0.23.2.tgz#9e6d8dd550a28053c1825fb98c7dc9b37119254d" + integrity sha512-dM9iJ0R6tI1JczuGSxXmQbXAgtYie0K4WvKcuyuSTCu9V8eEDiz4tfa1sO3txsfvwg7nOY3AjoCyMYEdqZ8hdg== + dependencies: + "@firebase/component" "0.6.4" + "@firebase/logger" "0.4.0" + "@firebase/util" "1.9.3" + node-fetch "2.6.7" + tslib "^2.1.0" -"@firebase/auth@0.20.5": - version "0.20.5" - resolved "https://registry.yarnpkg.com/@firebase/auth/-/auth-0.20.5.tgz#a2e6c6b593d8f9cf8276a7d1f8ab5b055d65cc50" - integrity sha512-SbKj7PCAuL0lXEToUOoprc1im2Lr/bzOePXyPC7WWqVgdVBt0qovbfejlzKYwJLHUAPg9UW1y3XYe3IlbXr77w== +"@firebase/component@0.5.21": + version "0.5.21" + resolved "https://registry.yarnpkg.com/@firebase/component/-/component-0.5.21.tgz#bb10add24fe2ee59a61163a469d4711d8da4002d" + integrity sha512-12MMQ/ulfygKpEJpseYMR0HunJdlsLrwx2XcEs40M18jocy2+spyzHHEwegN3x/2/BLFBjR5247Etmz0G97Qpg== dependencies: - "@firebase/component" "0.5.17" - "@firebase/logger" "0.3.3" - "@firebase/util" "1.6.3" - node-fetch "2.6.7" - selenium-webdriver "4.1.2" + "@firebase/util" "1.7.3" tslib "^2.1.0" -"@firebase/component@0.5.17": - version "0.5.17" - resolved "https://registry.yarnpkg.com/@firebase/component/-/component-0.5.17.tgz#89291f378714df05d44430c524708669380d8ea6" - integrity sha512-mTM5CBSIlmI+i76qU4+DhuExnWtzcPS3cVgObA3VAjliPPr3GrUlTaaa8KBGfxsD27juQxMsYA0TvCR5X+GQ3Q== +"@firebase/component@0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@firebase/component/-/component-0.6.4.tgz#8981a6818bd730a7554aa5e0516ffc9b1ae3f33d" + integrity sha512-rLMyrXuO9jcAUCaQXCMjCMUsWrba5fzHlNK24xz5j2W6A/SRmK8mZJ/hn7V0fViLbxC0lPMtrK1eYzk6Fg03jA== dependencies: - "@firebase/util" "1.6.3" + "@firebase/util" "1.9.3" tslib "^2.1.0" -"@firebase/database-compat@0.2.3", "@firebase/database-compat@^0.2.0": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@firebase/database-compat/-/database-compat-0.2.3.tgz#023ee1444088dd49714f93dcb2dff63d4b9a8589" - integrity sha512-uwSMnbjlSQM5gQRq8OoBLs7uc7obwsl0D6kSDAnMOlPtPl9ert79Rq9faU/COjybsJ8l7tNXMVYYJo3mQ5XNrA== - dependencies: - "@firebase/component" "0.5.17" - "@firebase/database" "0.13.3" - "@firebase/database-types" "0.9.11" - "@firebase/logger" "0.3.3" - "@firebase/util" "1.6.3" +"@firebase/database-compat@0.3.4": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@firebase/database-compat/-/database-compat-0.3.4.tgz#4e57932f7a5ba761cd5ac946ab6b6ab3f660522c" + integrity sha512-kuAW+l+sLMUKBThnvxvUZ+Q1ZrF/vFJ58iUY9kAcbX48U03nVzIF6Tmkf0p3WVQwMqiXguSgtOPIB6ZCeF+5Gg== + dependencies: + "@firebase/component" "0.6.4" + "@firebase/database" "0.14.4" + "@firebase/database-types" "0.10.4" + "@firebase/logger" "0.4.0" + "@firebase/util" "1.9.3" tslib "^2.1.0" -"@firebase/database-types@0.9.11", "@firebase/database-types@^0.9.7": - version "0.9.11" - resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-0.9.11.tgz#ac8881e20e490d1557c8975aa3e7815dbf03b2e6" - integrity sha512-27V3eFomWCZqLR6qb3Q9eS2lsUtulhSHeDNaL6fImwnhvMYTmf6ZwMfRWupgi8AFwW4s91g9Oc1/fkQtJGHKQw== +"@firebase/database-compat@^0.2.0": + version "0.2.10" + resolved "https://registry.yarnpkg.com/@firebase/database-compat/-/database-compat-0.2.10.tgz#fa4440db9f41a9a05112642504c1e6557a75b8be" + integrity sha512-fK+IgUUqVKcWK/gltzDU+B1xauCOfY6vulO8lxoNTkcCGlSxuTtwsdqjGkFmgFRMYjXFWWJ6iFcJ/vXahzwCtA== dependencies: - "@firebase/app-types" "0.7.0" - "@firebase/util" "1.6.3" + "@firebase/component" "0.5.21" + "@firebase/database" "0.13.10" + "@firebase/database-types" "0.9.17" + "@firebase/logger" "0.3.4" + "@firebase/util" "1.7.3" + tslib "^2.1.0" -"@firebase/database@0.13.3": - version "0.13.3" - resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.13.3.tgz#cf9acc03434c89e0bcb8b8ab3a6d2a70e342b8c5" - integrity sha512-ZE+QJqQUaCTZiIzGq3RJLo64HRMtbdaEwyDhfZyPEzMJV4kyLsw3cHdEHVCtBmdasTvwtpO2YRFmd4AXAoKtNw== +"@firebase/database-types@0.10.4": + version "0.10.4" + resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-0.10.4.tgz#47ba81113512dab637abace61cfb65f63d645ca7" + integrity sha512-dPySn0vJ/89ZeBac70T+2tWWPiJXWbmRygYv0smT5TfE3hDrQ09eKMF3Y+vMlTdrMWq7mUdYW5REWPSGH4kAZQ== dependencies: - "@firebase/auth-interop-types" "0.1.6" - "@firebase/component" "0.5.17" - "@firebase/logger" "0.3.3" - "@firebase/util" "1.6.3" + "@firebase/app-types" "0.9.0" + "@firebase/util" "1.9.3" + +"@firebase/database-types@0.9.17", "@firebase/database-types@^0.9.7": + version "0.9.17" + resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-0.9.17.tgz#4c248052b0a9ae052ba940e4996a0bfab25dc257" + integrity sha512-YQm2tCZyxNtEnlS5qo5gd2PAYgKCy69tUKwioGhApCFThW+mIgZs7IeYeJo2M51i4LCixYUl+CvnOyAnb/c3XA== + dependencies: + "@firebase/app-types" "0.8.1" + "@firebase/util" "1.7.3" + +"@firebase/database@0.13.10": + version "0.13.10" + resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.13.10.tgz#c24e0219490b9c1fabfb7b42cb45850e145fe56d" + integrity sha512-KRucuzZ7ZHQsRdGEmhxId5jyM2yKsjsQWF9yv0dIhlxYg0D8rCVDZc/waoPKA5oV3/SEIoptF8F7R1Vfe7BCQA== + dependencies: + "@firebase/auth-interop-types" "0.1.7" + "@firebase/component" "0.5.21" + "@firebase/logger" "0.3.4" + "@firebase/util" "1.7.3" faye-websocket "0.11.4" tslib "^2.1.0" -"@firebase/firestore-compat@0.1.22": - version "0.1.22" - resolved "https://registry.yarnpkg.com/@firebase/firestore-compat/-/firestore-compat-0.1.22.tgz#535e51d9034c08a7f4ebb67e0de86459ab4c5494" - integrity sha512-1HWmJtbxhDzAV7984XSQX7tp0MzjhRFnBygpU6k6H2m0Ey9JVDTPK8lIlZCctjCCA2cBsek7yAD+rDnpWC+KRw== +"@firebase/database@0.14.4": + version "0.14.4" + resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.14.4.tgz#9e7435a16a540ddfdeb5d99d45618e6ede179aa6" + integrity sha512-+Ea/IKGwh42jwdjCyzTmeZeLM3oy1h0mFPsTy6OqCWzcu/KFqRAr5Tt1HRCOBlNOdbh84JPZC47WLU18n2VbxQ== dependencies: - "@firebase/component" "0.5.17" - "@firebase/firestore" "3.4.13" - "@firebase/firestore-types" "2.5.0" - "@firebase/util" "1.6.3" + "@firebase/auth-interop-types" "0.2.1" + "@firebase/component" "0.6.4" + "@firebase/logger" "0.4.0" + "@firebase/util" "1.9.3" + faye-websocket "0.11.4" tslib "^2.1.0" -"@firebase/firestore-types@2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@firebase/firestore-types/-/firestore-types-2.5.0.tgz#16fca40b6980fdb000de86042d7a96635f2bcdd7" - integrity sha512-I6c2m1zUhZ5SH0cWPmINabDyH5w0PPFHk2UHsjBpKdZllzJZ2TwTkXbDtpHUZNmnc/zAa0WNMNMvcvbb/xJLKA== - -"@firebase/firestore@3.4.13": - version "3.4.13" - resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-3.4.13.tgz#c934f72fed311f9359cff3c836ab43d492c85b55" - integrity sha512-wLsbWflFoWDg9NprulzTAjtapLA3dfaG1Dsa9OUsgPRDGg5jfeo60n43d94fesX4crE+C5vkFhLQKMgsEGpr9w== - dependencies: - "@firebase/component" "0.5.17" - "@firebase/logger" "0.3.3" - "@firebase/util" "1.6.3" - "@firebase/webchannel-wrapper" "0.6.2" - "@grpc/grpc-js" "^1.3.2" +"@firebase/firestore-compat@0.3.12": + version "0.3.12" + resolved "https://registry.yarnpkg.com/@firebase/firestore-compat/-/firestore-compat-0.3.12.tgz#c08b24c76da7af75598f3c28432b6eb22f959b56" + integrity sha512-mazuNGAx5Kt9Nph0pm6ULJFp/+j7GSsx+Ncw1GrnKl+ft1CQ4q2LcUssXnjqkX2Ry0fNGqUzC1mfIUrk9bYtjQ== + dependencies: + "@firebase/component" "0.6.4" + "@firebase/firestore" "3.13.0" + "@firebase/firestore-types" "2.5.1" + "@firebase/util" "1.9.3" + tslib "^2.1.0" + +"@firebase/firestore-types@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@firebase/firestore-types/-/firestore-types-2.5.1.tgz#464b2ee057956599ca34de50eae957c30fdbabb7" + integrity sha512-xG0CA6EMfYo8YeUxC8FeDzf6W3FX1cLlcAGBYV6Cku12sZRI81oWcu61RSKM66K6kUENP+78Qm8mvroBcm1whw== + +"@firebase/firestore@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-3.13.0.tgz#f924a3bb462bc3ac666dc5d375f3f8c4e1a72345" + integrity sha512-NwcnU+madJXQ4fbLkGx1bWvL612IJN/qO6bZ6dlPmyf7QRyu5azUosijdAN675r+bOOJxMtP1Bv981bHBXAbUg== + dependencies: + "@firebase/component" "0.6.4" + "@firebase/logger" "0.4.0" + "@firebase/util" "1.9.3" + "@firebase/webchannel-wrapper" "0.10.1" + "@grpc/grpc-js" "~1.7.0" "@grpc/proto-loader" "^0.6.13" node-fetch "2.6.7" tslib "^2.1.0" -"@firebase/functions-compat@0.2.4": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@firebase/functions-compat/-/functions-compat-0.2.4.tgz#afa5d8eefe6d51c7b89e44d9262700b68fbcb73f" - integrity sha512-Crfn6il1yXGuXkjSd8nKrqR4XxPvuP19g64bXpM6Ix67qOkQg676kyOuww0FF17xN0NSXHfG8Pyf+CUrx8wJ5g== +"@firebase/functions-compat@0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@firebase/functions-compat/-/functions-compat-0.3.5.tgz#7a532d3a9764c6d5fbc1ec5541a989a704326647" + integrity sha512-uD4jwgwVqdWf6uc3NRKF8cSZ0JwGqSlyhPgackyUPe+GAtnERpS4+Vr66g0b3Gge0ezG4iyHo/EXW/Hjx7QhHw== dependencies: - "@firebase/component" "0.5.17" - "@firebase/functions" "0.8.4" - "@firebase/functions-types" "0.5.0" - "@firebase/util" "1.6.3" + "@firebase/component" "0.6.4" + "@firebase/functions" "0.10.0" + "@firebase/functions-types" "0.6.0" + "@firebase/util" "1.9.3" tslib "^2.1.0" -"@firebase/functions-types@0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@firebase/functions-types/-/functions-types-0.5.0.tgz#b50ba95ccce9e96f7cda453228ffe1684645625b" - integrity sha512-qza0M5EwX+Ocrl1cYI14zoipUX4gI/Shwqv0C1nB864INAD42Dgv4v94BCyxGHBg2kzlWy8PNafdP7zPO8aJQA== - -"@firebase/functions@0.8.4": - version "0.8.4" - resolved "https://registry.yarnpkg.com/@firebase/functions/-/functions-0.8.4.tgz#a9b7a10314f286df1ded87d8546fb8d9107a9c06" - integrity sha512-o1bB0xMyQKe+b246zGnjwHj4R6BH4mU2ZrSaa/3QvTpahUQ3hqYfkZPLOXCU7+vEFxHb3Hd4UUjkFhxoAcPqLA== - dependencies: - "@firebase/app-check-interop-types" "0.1.0" - "@firebase/auth-interop-types" "0.1.6" - "@firebase/component" "0.5.17" - "@firebase/messaging-interop-types" "0.1.0" - "@firebase/util" "1.6.3" +"@firebase/functions-types@0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@firebase/functions-types/-/functions-types-0.6.0.tgz#ccd7000dc6fc668f5acb4e6a6a042a877a555ef2" + integrity sha512-hfEw5VJtgWXIRf92ImLkgENqpL6IWpYaXVYiRkFY1jJ9+6tIhWM7IzzwbevwIIud/jaxKVdRzD7QBWfPmkwCYw== + +"@firebase/functions@0.10.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@firebase/functions/-/functions-0.10.0.tgz#c630ddf12cdf941c25bc8d554e30c3226cd560f6" + integrity sha512-2U+fMNxTYhtwSpkkR6WbBcuNMOVaI7MaH3cZ6UAeNfj7AgEwHwMIFLPpC13YNZhno219F0lfxzTAA0N62ndWzA== + dependencies: + "@firebase/app-check-interop-types" "0.3.0" + "@firebase/auth-interop-types" "0.2.1" + "@firebase/component" "0.6.4" + "@firebase/messaging-interop-types" "0.2.0" + "@firebase/util" "1.9.3" node-fetch "2.6.7" tslib "^2.1.0" -"@firebase/installations-compat@0.1.12": - version "0.1.12" - resolved "https://registry.yarnpkg.com/@firebase/installations-compat/-/installations-compat-0.1.12.tgz#d0394127f71aff596cb8bb607840095d1617246e" - integrity sha512-BIhFpWIn/GkuOa+jnXkp3SDJT2RLYJF6MWpinHIBKFJs7MfrgYZ3zQ1AlhobDEql+bkD1dK4dB5sNcET2T+EyA== +"@firebase/installations-compat@0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@firebase/installations-compat/-/installations-compat-0.2.4.tgz#b5557c897b4cd3635a59887a8bf69c3731aaa952" + integrity sha512-LI9dYjp0aT9Njkn9U4JRrDqQ6KXeAmFbRC0E7jI7+hxl5YmRWysq5qgQl22hcWpTk+cm3es66d/apoDU/A9n6Q== dependencies: - "@firebase/component" "0.5.17" - "@firebase/installations" "0.5.12" - "@firebase/installations-types" "0.4.0" - "@firebase/util" "1.6.3" + "@firebase/component" "0.6.4" + "@firebase/installations" "0.6.4" + "@firebase/installations-types" "0.5.0" + "@firebase/util" "1.9.3" tslib "^2.1.0" -"@firebase/installations-types@0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@firebase/installations-types/-/installations-types-0.4.0.tgz#256782ff9adfb390ac658c25bc32f89635ddce7c" - integrity sha512-nXxWKQDvBGctuvsizbUEJKfxXU9WAaDhon+j0jpjIfOJkvkj3YHqlLB/HeYjpUn85Pb22BjplpTnDn4Gm9pc3A== +"@firebase/installations-types@0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@firebase/installations-types/-/installations-types-0.5.0.tgz#2adad64755cd33648519b573ec7ec30f21fb5354" + integrity sha512-9DP+RGfzoI2jH7gY4SlzqvZ+hr7gYzPODrbzVD82Y12kScZ6ZpRg/i3j6rleto8vTFC8n6Len4560FnV1w2IRg== -"@firebase/installations@0.5.12": - version "0.5.12" - resolved "https://registry.yarnpkg.com/@firebase/installations/-/installations-0.5.12.tgz#1d5764aa6f0b73d9d6d1a81a07eab5cd71a5ea27" - integrity sha512-Zq43fCE0PB5tGJ3ojzx5RNQzKdej1188qgAk22rwjuhP7npaG/PlJqDG1/V0ZjTLRePZ1xGrfXSPlA17c/vtNw== +"@firebase/installations@0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@firebase/installations/-/installations-0.6.4.tgz#20382e33e6062ac5eff4bede8e468ed4c367609e" + integrity sha512-u5y88rtsp7NYkCHC3ElbFBrPtieUybZluXyzl7+4BsIz4sqb4vSAuwHEUgCgCeaQhvsnxDEU6icly8U9zsJigA== dependencies: - "@firebase/component" "0.5.17" - "@firebase/util" "1.6.3" + "@firebase/component" "0.6.4" + "@firebase/util" "1.9.3" idb "7.0.1" tslib "^2.1.0" -"@firebase/logger@0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@firebase/logger/-/logger-0.3.3.tgz#0f724b1e0b166d17ac285aac5c8ec14d136beed4" - integrity sha512-POTJl07jOKTOevLXrTvJD/VZ0M6PnJXflbAh5J9VGkmtXPXNG6MdZ9fmRgqYhXKTaDId6AQenQ262uwgpdtO0Q== +"@firebase/logger@0.3.4": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@firebase/logger/-/logger-0.3.4.tgz#8822dd3e9168be93c1bce0b4ac235e3b165a6a68" + integrity sha512-hlFglGRgZEwoyClZcGLx/Wd+zoLfGmbDkFx56mQt/jJ0XMbfPqwId1kiPl0zgdWZX+D8iH+gT6GuLPFsJWgiGw== dependencies: tslib "^2.1.0" -"@firebase/messaging-compat@0.1.16": - version "0.1.16" - resolved "https://registry.yarnpkg.com/@firebase/messaging-compat/-/messaging-compat-0.1.16.tgz#4fe4e2c1b496e62f63e815cb242a2ab323cd7899" - integrity sha512-uG7rWcXJzU8vvlEBFpwG1ndw/GURrrmKcwsHopEWbsPGjMRaVWa7XrdKbvIR7IZohqPzcC/V9L8EeqF4Q4lz8w== +"@firebase/logger@0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@firebase/logger/-/logger-0.4.0.tgz#15ecc03c452525f9d47318ad9491b81d1810f113" + integrity sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA== dependencies: - "@firebase/component" "0.5.17" - "@firebase/messaging" "0.9.16" - "@firebase/util" "1.6.3" tslib "^2.1.0" -"@firebase/messaging-interop-types@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@firebase/messaging-interop-types/-/messaging-interop-types-0.1.0.tgz#bdac02dd31edd5cb9eec37b1db698ea5e2c1a631" - integrity sha512-DbvUl/rXAZpQeKBnwz0NYY5OCqr2nFA0Bj28Fmr3NXGqR4PAkfTOHuQlVtLO1Nudo3q0HxAYLa68ZDAcuv2uKQ== - -"@firebase/messaging@0.9.16": - version "0.9.16" - resolved "https://registry.yarnpkg.com/@firebase/messaging/-/messaging-0.9.16.tgz#96b57ebbb054e57f78585f85f59d521c5ba5cd85" - integrity sha512-Yl9gGrAvJF6C1gg3+Cr2HxlL6APsDEkrorkFafmSP1l+rg1epZKoOAcKJbSF02Vtb50wfb9FqGGy8tzodgETxg== - dependencies: - "@firebase/component" "0.5.17" - "@firebase/installations" "0.5.12" - "@firebase/messaging-interop-types" "0.1.0" - "@firebase/util" "1.6.3" +"@firebase/messaging-compat@0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@firebase/messaging-compat/-/messaging-compat-0.2.4.tgz#323ca48deef77065b4fcda3cfd662c4337dffcfd" + integrity sha512-lyFjeUhIsPRYDPNIkYX1LcZMpoVbBWXX4rPl7c/rqc7G+EUea7IEtSt4MxTvh6fDfPuzLn7+FZADfscC+tNMfg== + dependencies: + "@firebase/component" "0.6.4" + "@firebase/messaging" "0.12.4" + "@firebase/util" "1.9.3" + tslib "^2.1.0" + +"@firebase/messaging-interop-types@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.0.tgz#6056f8904a696bf0f7fdcf5f2ca8f008e8f6b064" + integrity sha512-ujA8dcRuVeBixGR9CtegfpU4YmZf3Lt7QYkcj693FFannwNuZgfAYaTmbJ40dtjB81SAu6tbFPL9YLNT15KmOQ== + +"@firebase/messaging@0.12.4": + version "0.12.4" + resolved "https://registry.yarnpkg.com/@firebase/messaging/-/messaging-0.12.4.tgz#ccb49df5ab97d5650c9cf5b8c77ddc34daafcfe0" + integrity sha512-6JLZct6zUaex4g7HI3QbzeUrg9xcnmDAPTWpkoMpd/GoSVWH98zDoWXMGrcvHeCAIsLpFMe4MPoZkJbrPhaASw== + dependencies: + "@firebase/component" "0.6.4" + "@firebase/installations" "0.6.4" + "@firebase/messaging-interop-types" "0.2.0" + "@firebase/util" "1.9.3" idb "7.0.1" tslib "^2.1.0" -"@firebase/performance-compat@0.1.12": - version "0.1.12" - resolved "https://registry.yarnpkg.com/@firebase/performance-compat/-/performance-compat-0.1.12.tgz#ac50b0cd29bf7f5e1e33c640dba25e2f8db95f0b" - integrity sha512-IBORzUeGY1MGdZnsix9Mu5z4+C3WHIwalu0usxvygL0EZKHztGG8bppYPGH/b5vvg8QyHs9U+Pn1Ot2jZhffQQ== - dependencies: - "@firebase/component" "0.5.17" - "@firebase/logger" "0.3.3" - "@firebase/performance" "0.5.12" - "@firebase/performance-types" "0.1.0" - "@firebase/util" "1.6.3" +"@firebase/performance-compat@0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@firebase/performance-compat/-/performance-compat-0.2.4.tgz#95cbf32057b5d9f0c75d804bc50e6ed3ba486274" + integrity sha512-nnHUb8uP9G8islzcld/k6Bg5RhX62VpbAb/Anj7IXs/hp32Eb2LqFPZK4sy3pKkBUO5wcrlRWQa6wKOxqlUqsg== + dependencies: + "@firebase/component" "0.6.4" + "@firebase/logger" "0.4.0" + "@firebase/performance" "0.6.4" + "@firebase/performance-types" "0.2.0" + "@firebase/util" "1.9.3" tslib "^2.1.0" -"@firebase/performance-types@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@firebase/performance-types/-/performance-types-0.1.0.tgz#5e6efa9dc81860aee2cb7121b39ae8fa137e69fc" - integrity sha512-6p1HxrH0mpx+622Ql6fcxFxfkYSBpE3LSuwM7iTtYU2nw91Hj6THC8Bc8z4nboIq7WvgsT/kOTYVVZzCSlXl8w== - -"@firebase/performance@0.5.12": - version "0.5.12" - resolved "https://registry.yarnpkg.com/@firebase/performance/-/performance-0.5.12.tgz#4eae3eb91eeffb29b996e7908172052d4a901856" - integrity sha512-MPVTkOkGrm2SMQgI1FPNBm85y2pPqlPb6VDjIMCWkVpAr6G1IZzUT24yEMySRcIlK/Hh7/Qu1Nu5ASRzRuX6+Q== - dependencies: - "@firebase/component" "0.5.17" - "@firebase/installations" "0.5.12" - "@firebase/logger" "0.3.3" - "@firebase/util" "1.6.3" +"@firebase/performance-types@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@firebase/performance-types/-/performance-types-0.2.0.tgz#400685f7a3455970817136d9b48ce07a4b9562ff" + integrity sha512-kYrbr8e/CYr1KLrLYZZt2noNnf+pRwDq2KK9Au9jHrBMnb0/C9X9yWSXmZkFt4UIdsQknBq8uBB7fsybZdOBTA== + +"@firebase/performance@0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@firebase/performance/-/performance-0.6.4.tgz#0ad766bfcfab4f386f4fe0bef43bbcf505015069" + integrity sha512-HfTn/bd8mfy/61vEqaBelNiNnvAbUtME2S25A67Nb34zVuCSCRIX4SseXY6zBnOFj3oLisaEqhVcJmVPAej67g== + dependencies: + "@firebase/component" "0.6.4" + "@firebase/installations" "0.6.4" + "@firebase/logger" "0.4.0" + "@firebase/util" "1.9.3" tslib "^2.1.0" -"@firebase/polyfill@0.3.36": - version "0.3.36" - resolved "https://registry.yarnpkg.com/@firebase/polyfill/-/polyfill-0.3.36.tgz#c057cce6748170f36966b555749472b25efdb145" - integrity sha512-zMM9oSJgY6cT2jx3Ce9LYqb0eIpDE52meIzd/oe/y70F+v9u1LDqk5kUF5mf16zovGBWMNFmgzlsh6Wj0OsFtg== - dependencies: - core-js "3.6.5" - promise-polyfill "8.1.3" - whatwg-fetch "2.0.4" - -"@firebase/remote-config-compat@0.1.12": - version "0.1.12" - resolved "https://registry.yarnpkg.com/@firebase/remote-config-compat/-/remote-config-compat-0.1.12.tgz#7606752d7bfe2701d58568345ca536beda14ee53" - integrity sha512-Yz7Gtb2rLa7ykXZX9DnSTId8CXd++jFFLW3foUImrYwJEtWgLJc7gwkRfd1M73IlKGNuQAY+DpUNF0n1dLbecA== - dependencies: - "@firebase/component" "0.5.17" - "@firebase/logger" "0.3.3" - "@firebase/remote-config" "0.3.11" - "@firebase/remote-config-types" "0.2.0" - "@firebase/util" "1.6.3" +"@firebase/remote-config-compat@0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@firebase/remote-config-compat/-/remote-config-compat-0.2.4.tgz#1f494c81a6c9560b1f9ca1b4fbd4bbbe47cf4776" + integrity sha512-FKiki53jZirrDFkBHglB3C07j5wBpitAaj8kLME6g8Mx+aq7u9P7qfmuSRytiOItADhWUj7O1JIv7n9q87SuwA== + dependencies: + "@firebase/component" "0.6.4" + "@firebase/logger" "0.4.0" + "@firebase/remote-config" "0.4.4" + "@firebase/remote-config-types" "0.3.0" + "@firebase/util" "1.9.3" tslib "^2.1.0" -"@firebase/remote-config-types@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@firebase/remote-config-types/-/remote-config-types-0.2.0.tgz#1e2759fc01f20b58c564db42196f075844c3d1fd" - integrity sha512-hqK5sCPeZvcHQ1D6VjJZdW6EexLTXNMJfPdTwbD8NrXUw6UjWC4KWhLK/TSlL0QPsQtcKRkaaoP+9QCgKfMFPw== - -"@firebase/remote-config@0.3.11": - version "0.3.11" - resolved "https://registry.yarnpkg.com/@firebase/remote-config/-/remote-config-0.3.11.tgz#93c82b5944a20c027f4ee82c145813ca96b430bb" - integrity sha512-qA84dstrvVpO7rWT/sb2CLv1kjHVmz59SRFPKohJJYFBcPOGK4Pe4FWWhKAE9yg1Gnl0qYAGkahOwNawq3vE0g== - dependencies: - "@firebase/component" "0.5.17" - "@firebase/installations" "0.5.12" - "@firebase/logger" "0.3.3" - "@firebase/util" "1.6.3" +"@firebase/remote-config-types@0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@firebase/remote-config-types/-/remote-config-types-0.3.0.tgz#689900dcdb3e5c059e8499b29db393e4e51314b4" + integrity sha512-RtEH4vdcbXZuZWRZbIRmQVBNsE7VDQpet2qFvq6vwKLBIQRQR5Kh58M4ok3A3US8Sr3rubYnaGqZSurCwI8uMA== + +"@firebase/remote-config@0.4.4": + version "0.4.4" + resolved "https://registry.yarnpkg.com/@firebase/remote-config/-/remote-config-0.4.4.tgz#6a496117054de58744bc9f382d2a6d1e14060c65" + integrity sha512-x1ioTHGX8ZwDSTOVp8PBLv2/wfwKzb4pxi0gFezS5GCJwbLlloUH4YYZHHS83IPxnua8b6l0IXUaWd0RgbWwzQ== + dependencies: + "@firebase/component" "0.6.4" + "@firebase/installations" "0.6.4" + "@firebase/logger" "0.4.0" + "@firebase/util" "1.9.3" tslib "^2.1.0" -"@firebase/storage-compat@0.1.17": - version "0.1.17" - resolved "https://registry.yarnpkg.com/@firebase/storage-compat/-/storage-compat-0.1.17.tgz#da721071e006d066fb9b1cff69481bd59a02346b" - integrity sha512-nOYmnpI0gwoz5nROseMi9WbmHGf+xumfsOvdPyMZAjy0VqbDnpKIwmTUZQBdR+bLuB5oIkHQsvw9nbb1SH+PzQ== +"@firebase/storage-compat@0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@firebase/storage-compat/-/storage-compat-0.3.2.tgz#51a97170fd652a516f729f82b97af369e5a2f8d7" + integrity sha512-wvsXlLa9DVOMQJckbDNhXKKxRNNewyUhhbXev3t8kSgoCotd1v3MmqhKKz93ePhDnhHnDs7bYHy+Qa8dRY6BXw== dependencies: - "@firebase/component" "0.5.17" - "@firebase/storage" "0.9.9" - "@firebase/storage-types" "0.6.0" - "@firebase/util" "1.6.3" + "@firebase/component" "0.6.4" + "@firebase/storage" "0.11.2" + "@firebase/storage-types" "0.8.0" + "@firebase/util" "1.9.3" tslib "^2.1.0" -"@firebase/storage-types@0.6.0": - version "0.6.0" - resolved "https://registry.yarnpkg.com/@firebase/storage-types/-/storage-types-0.6.0.tgz#0b1af64a2965af46fca138e5b70700e9b7e6312a" - integrity sha512-1LpWhcCb1ftpkP/akhzjzeFxgVefs6eMD2QeKiJJUGH1qOiows2w5o0sKCUSQrvrRQS1lz3SFGvNR1Ck/gqxeA== +"@firebase/storage-types@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@firebase/storage-types/-/storage-types-0.8.0.tgz#f1e40a5361d59240b6e84fac7fbbbb622bfaf707" + integrity sha512-isRHcGrTs9kITJC0AVehHfpraWFui39MPaU7Eo8QfWlqW7YPymBmRgjDrlOgFdURh6Cdeg07zmkLP5tzTKRSpg== -"@firebase/storage@0.9.9": - version "0.9.9" - resolved "https://registry.yarnpkg.com/@firebase/storage/-/storage-0.9.9.tgz#3d0080dd130bc3315731483384a7ef7c00f76e22" - integrity sha512-Zch7srLT2SIh9y2nCVv/4Kne0HULn7OPkmreY70BJTUJ+g5WLRjggBq6x9fV5ls9V38iqMWfn4prxzX8yIc08A== +"@firebase/storage@0.11.2": + version "0.11.2" + resolved "https://registry.yarnpkg.com/@firebase/storage/-/storage-0.11.2.tgz#c5e0316543fe1c4026b8e3910f85ad73f5b77571" + integrity sha512-CtvoFaBI4hGXlXbaCHf8humajkbXhs39Nbh6MbNxtwJiCqxPy9iH3D3CCfXAvP0QvAAwmJUTK3+z9a++Kc4nkA== dependencies: - "@firebase/component" "0.5.17" - "@firebase/util" "1.6.3" + "@firebase/component" "0.6.4" + "@firebase/util" "1.9.3" node-fetch "2.6.7" tslib "^2.1.0" -"@firebase/util@1.6.3": - version "1.6.3" - resolved "https://registry.yarnpkg.com/@firebase/util/-/util-1.6.3.tgz#76128c1b5684c031823e95f6c08a7fb8560655c6" - integrity sha512-FujteO6Zjv6v8A4HS+t7c+PjU0Kaxj+rOnka0BsI/twUaCC9t8EQPmXpWZdk7XfszfahJn2pqsflUWUhtUkRlg== +"@firebase/util@1.7.3": + version "1.7.3" + resolved "https://registry.yarnpkg.com/@firebase/util/-/util-1.7.3.tgz#e71640b6b2970b754f947235ceb10cba3f70e62c" + integrity sha512-wxNqWbqokF551WrJ9BIFouU/V5SL1oYCGx1oudcirdhadnQRFH5v1sjgGL7cUV/UsekSycygphdrF2lxBxOYKg== + dependencies: + tslib "^2.1.0" + +"@firebase/util@1.9.3": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@firebase/util/-/util-1.9.3.tgz#45458dd5cd02d90e55c656e84adf6f3decf4b7ed" + integrity sha512-DY02CRhOZwpzO36fHpuVysz6JZrscPiBXD0fXp6qSrL9oNOx5KWICKdR95C0lSITzxp0TZosVyHqzatE8JbcjA== dependencies: tslib "^2.1.0" -"@firebase/webchannel-wrapper@0.6.2": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.6.2.tgz#6d05fa126104c9907573364dc04147b89b530e15" - integrity sha512-zThUKcqIU6utWzM93uEvhlh8qj8A5LMPFJPvk/ODb+8GSSif19xM2Lw1M2ijyBy8+6skSkQBbavPzOU5Oh/8tQ== +"@firebase/webchannel-wrapper@0.10.1": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.10.1.tgz#60bb2aaf129f9e00621f8d698722ddba6ee1f8ac" + integrity sha512-Dq5rYfEpdeel0bLVN+nfD1VWmzCkK+pJbSjIawGE+RY4+NIJqhbUDDQjvV0NUK84fMfwxvtFoCtEe70HfZjFcw== "@google-cloud/firestore@^5.0.2": version "5.0.2" @@ -1642,20 +1641,19 @@ integrity sha512-HRkZsNmjScY6Li8/kb70wjGlDDyLkVk3KvoEo9uIoxSjYLJasGiCch9+PqRVDOCGUFvEIqyogl+BeqILL4OJHA== "@google-cloud/promisify@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-3.0.0.tgz#5cd6941fc30c4acac18051706aa5af96069bd3e3" - integrity sha512-91ArYvRgXWb73YvEOBMmOcJc0bDRs5yiVHnqkwoG0f3nm7nZuipllz6e7BvFESBvjkDTBC0zMD8QxedUwNLc1A== + version "3.0.1" + resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-3.0.1.tgz#8d724fb280f47d1ff99953aee0c1669b25238c2e" + integrity sha512-z1CjRjtQyBOYL+5Qr9DdYIfrdLBe746jRTYfaYU6MeXkqp7UfYs/jX16lFFVzZ7PGEJvqZNqYUEtb1mvDww4pA== "@google-cloud/storage@^6.1.0": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-6.2.3.tgz#e3dae8708488cf2e0e4fbf0488083d9d279ee097" - integrity sha512-UJqn3Ln8wFBPLuwBaNu3PlhzQDL3EKKfP1+3mzLRQhcFqgpBSMPLDgAXxc6e9S0l0kqsi4GOuAA7fA+l/VAMjQ== + version "6.11.0" + resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-6.11.0.tgz#7217dd06184e609d1c444b7c930d76c6cffeb634" + integrity sha512-p5VX5K2zLTrMXlKdS1CiQNkKpygyn7CBFm5ZvfhVj6+7QUsjWvYx9YDMkYXdarZ6JDt4cxiu451y9QUIH82ZTw== dependencies: "@google-cloud/paginator" "^3.0.7" "@google-cloud/projectify" "^3.0.0" "@google-cloud/promisify" "^3.0.0" abort-controller "^3.0.0" - arrify "^2.0.0" async-retry "^1.3.3" compressible "^2.0.12" duplexify "^4.0.0" @@ -1666,16 +1664,22 @@ mime "^3.0.0" mime-types "^2.0.8" p-limit "^3.0.1" - pumpify "^2.0.0" retry-request "^5.0.0" - stream-events "^1.0.4" teeny-request "^8.0.0" uuid "^8.0.0" -"@grpc/grpc-js@^1.3.2", "@grpc/grpc-js@~1.6.0": - version "1.6.8" - resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.6.8.tgz#77cc8b2d841c34dea8b105d45ff1732caefae4f2" - integrity sha512-Nt5tufF/O5Q310kP0cDzxznWMZW58GCTZhUUiAQ9B0K0ANKNQ4Lj/K9XK0vZg+UBKq5/7z7+8mXHHfrcwoeFJQ== +"@grpc/grpc-js@~1.6.0": + version "1.6.12" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.6.12.tgz#20f710d8a8c5c396b2ae9530ba6c06b984614fdf" + integrity sha512-JmvQ03OTSpVd9JTlj/K3IWHSz4Gk/JMLUTtW7Zb0KvO1LcOYGATh5cNuRYzCAeDR3O8wq+q8FZe97eO9MBrkUw== + dependencies: + "@grpc/proto-loader" "^0.7.0" + "@types/node" ">=12.12.47" + +"@grpc/grpc-js@~1.7.0": + version "1.7.3" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.7.3.tgz#f2ea79f65e31622d7f86d4b4c9ae38f13ccab99a" + integrity sha512-H9l79u4kJ2PVSxUNA08HMYAnUBLj9v6KjYQ7SQ71hOZcEXhShE/y5iQCesP8+6/Ik/7i2O0a10bPquIcYfufog== dependencies: "@grpc/proto-loader" "^0.7.0" "@types/node" ">=12.12.47" @@ -1692,24 +1696,29 @@ yargs "^16.2.0" "@grpc/proto-loader@^0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.7.0.tgz#743cc8a941cc251620c66ebe0d330e1411a33535" - integrity sha512-SGPZtVmqOvNfPFOA/nNPn+0Weqa5wubBgQ56+JgTbeLY2VezwtMjwPPFzh0kvQccwWT3a2TXT0ZGK/pJoOTk1A== + version "0.7.7" + resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.7.7.tgz#d33677a77eea8407f7c66e2abd97589b60eb4b21" + integrity sha512-1TIeXOi8TuSCQprPItwoMymZXxWT0CPxUhkrkeCUH+D8U7QDwQ6b7SUz2MaLuWM2llT+J/TVFLmQI5KtML3BhQ== dependencies: "@types/long" "^4.0.1" lodash.camelcase "^4.3.0" long "^4.0.0" protobufjs "^7.0.0" - yargs "^16.2.0" + yargs "^17.7.2" -"@humanwhocodes/config-array@^0.9.2": - version "0.9.5" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" - integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== +"@humanwhocodes/config-array@^0.11.10": + version "0.11.10" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" + integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" - minimatch "^3.0.4" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^1.2.1": version "1.2.1" @@ -1925,123 +1934,117 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== dependencies: "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@^3.0.3": +"@jridgewell/resolve-uri@3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== -"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": +"@jridgewell/set-array@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -"@jridgewell/source-map@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" - integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" +"@jridgewell/source-map@^0.3.3": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.4.tgz#856a142864530d4059dda415659b48d37db2d556" + integrity sha512-KE/SxsDqNs3rrWwFHcRh15ZLVFrI0YoZtgAdIyIq9k5hUNmiWRXXThPomIxHuL20sLdgzbDFyvkUMna14bvtrw== -"@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/sourcemap-codec@1.4.14": version "1.4.14" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.7", "@jridgewell/trace-mapping@^0.3.8", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.14" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" - integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@next/env@12.2.3": - version "12.2.3" - resolved "https://registry.yarnpkg.com/@next/env/-/env-12.2.3.tgz#64f210e74c137d3d9feea738795b055a7f8aebe2" - integrity sha512-2lWKP5Xcvnor70NaaROZXBvU8z9mFReePCG8NhZw6NyNGnPvC+8s+Cre/63LAB1LKzWw/e9bZJnQUg0gYFRb2Q== - -"@next/swc-android-arm-eabi@12.2.3": - version "12.2.3" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.3.tgz#91388c8ec117d59ee80d2c1d4dc65fdfd267d2d4" - integrity sha512-JxmCW9XB5PYnkGE67BdnBTdqW0SW6oMCiPMHLdjeRi4T3U4JJKJGnjQld99+6TPOfPWigtw3W7Cijp5gc+vJ/w== - -"@next/swc-android-arm64@12.2.3": - version "12.2.3" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.2.3.tgz#9be33553861f6494616b910a23abd5a1b0d7fb4b" - integrity sha512-3l4zXpWnzy0fqoedsFRxzMy/eGlMMqn6IwPEuBmtEQ4h7srmQFHyT+Bk+eVHb0o1RQ7/TloAa+mu8JX5tz/5tA== - -"@next/swc-darwin-arm64@12.2.3": - version "12.2.3" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.3.tgz#ce1a5a7320936b2644b765ace3283e5d1676b6a0" - integrity sha512-eutDO/RH6pf7+8zHo3i2GKLhF0qaMtxWpY8k3Oa1k+CyrcJ0IxwkfH/x3f75jTMeCrThn6Uu8j3WeZOxvhto1Q== - -"@next/swc-darwin-x64@12.2.3": - version "12.2.3" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.3.tgz#f70ce07016501c6f823035bc67296b8f80201145" - integrity sha512-lve+lnTiddXbcT3Lh2ujOFywQSEycTYQhuf6j6JrPu9oLQGS01kjIqqSj3/KMmSoppEnXo3BxkgYu+g2+ecHkA== - -"@next/swc-freebsd-x64@12.2.3": - version "12.2.3" - resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.3.tgz#ccc6fa4588dadec85458091aa19c17bc3e99a10d" - integrity sha512-V4bZU1qBFkULTPW53phY8ypioh3EERzHu9YKAasm9RxU4dj+8c/4s60y+kbFkFEEpIUgEU6yNuYZRR4lHHbUGA== - -"@next/swc-linux-arm-gnueabihf@12.2.3": - version "12.2.3" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.3.tgz#d7a481d3ede14dee85707d0807b4a05cd2300950" - integrity sha512-MWxS/i+XSEKdQE0ZmdYkPPrWKBi4JwMVaXdOW9J/T/sZJsHsLlSC9ErBcNolKAJEVka+tnw9oPRyRCKOj+q0sw== - -"@next/swc-linux-arm64-gnu@12.2.3": - version "12.2.3" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.3.tgz#6d105c971cc0957c25563aa98af475291b4cd8aa" - integrity sha512-ikXkqAmvEcWTzIQFDdmrUHLWzdDAF5s2pVsSpQn9rk/gK1i9webH1GRQd2bSM7JLuPBZSaYrNGvDTyHZdSEYlg== - -"@next/swc-linux-arm64-musl@12.2.3": - version "12.2.3" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.3.tgz#bebfe490130e3cb8746a03d35a5a9e23ac0e6f9b" - integrity sha512-wE45gGFkeLLLnCoveKaBrdpYkkypl3qwNF2YhnfvfVK7etuu1O679LwClhCWinDVBr+KOkmyHok00Z+0uI1ycg== - -"@next/swc-linux-x64-gnu@12.2.3": - version "12.2.3" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.3.tgz#84a3d99f9d656fbc139f3a19f9b1baf73877d18f" - integrity sha512-MbFI6413VSXiREzHwYD8YAJLTknBaC+bmjXgdHEEdloeOuBFQGE3NWn3izOCTy8kV+s98VDQO8au7EKKs+bW0g== - -"@next/swc-linux-x64-musl@12.2.3": - version "12.2.3" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.3.tgz#a283431f8c6c830b4bd61147094f150ea7deeb6e" - integrity sha512-jMBD0Va6fInbPih/dNySlNY2RpjkK6MXS+UGVEvuTswl1MZr+iahvurmshwGKpjaRwVU4DSFMD8+gfWxsTFs1Q== - -"@next/swc-win32-arm64-msvc@12.2.3": - version "12.2.3" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.3.tgz#bab9ba8736d81db128badb70024268469eaa9b34" - integrity sha512-Cq8ToPdc0jQP2C7pjChYctAsEe7+lO/B826ZCK5xFzobuHPiCyJ2Mzx/nEQwCY4SpYkeJQtCbwlCz5iyGW5zGg== - -"@next/swc-win32-ia32-msvc@12.2.3": - version "12.2.3" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.3.tgz#feea6ada1ba3e897f39ded9f2de5006f4e1c928b" - integrity sha512-BtFq4c8IpeB0sDhJMHJFgm86rPkOvmYI8k3De8Y2kgNVWSeLQ0Q929PWf7e+GqcX1015ei/gEB41ZH8Iw49NzA== - -"@next/swc-win32-x64-msvc@12.2.3": - version "12.2.3" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.3.tgz#403e1575a84c31cbd7f3c0ecd51b61bc25b7f808" - integrity sha512-huSNb98KSG77Kl96CoPgCwom28aamuUsPpRmn/4s9L0RNbbHVSkp9E6HA4yOAykZCEuWcdNsRLbVVuAbt8rtIw== +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.18" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@next/env@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/env/-/env-12.3.4.tgz#c787837d36fcad75d72ff8df6b57482027d64a47" + integrity sha512-H/69Lc5Q02dq3o+dxxy5O/oNxFsZpdL6WREtOOtOM1B/weonIwDXkekr1KV5DPVPr12IHFPrMrcJQ6bgPMfn7A== + +"@next/swc-android-arm-eabi@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.4.tgz#fd1c2dafe92066c6120761c6a39d19e666dc5dd0" + integrity sha512-cM42Cw6V4Bz/2+j/xIzO8nK/Q3Ly+VSlZJTa1vHzsocJRYz8KT6MrreXaci2++SIZCF1rVRCDgAg5PpqRibdIA== + +"@next/swc-android-arm64@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.3.4.tgz#11a146dae7b8bca007239b21c616e83f77b19ed4" + integrity sha512-5jf0dTBjL+rabWjGj3eghpLUxCukRhBcEJgwLedewEA/LJk2HyqCvGIwj5rH+iwmq1llCWbOky2dO3pVljrapg== + +"@next/swc-darwin-arm64@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.4.tgz#14ac8357010c95e67327f47082af9c9d75d5be79" + integrity sha512-DqsSTd3FRjQUR6ao0E1e2OlOcrF5br+uegcEGPVonKYJpcr0MJrtYmPxd4v5T6UCJZ+XzydF7eQo5wdGvSZAyA== + +"@next/swc-darwin-x64@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.4.tgz#e7dc63cd2ac26d15fb84d4d2997207fb9ba7da0f" + integrity sha512-PPF7tbWD4k0dJ2EcUSnOsaOJ5rhT3rlEt/3LhZUGiYNL8KvoqczFrETlUx0cUYaXe11dRA3F80Hpt727QIwByQ== + +"@next/swc-freebsd-x64@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.4.tgz#fe7ceec58746fdf03f1fcb37ec1331c28e76af93" + integrity sha512-KM9JXRXi/U2PUM928z7l4tnfQ9u8bTco/jb939pdFUHqc28V43Ohd31MmZD1QzEK4aFlMRaIBQOWQZh4D/E5lQ== + +"@next/swc-linux-arm-gnueabihf@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.4.tgz#d7016934d02bfc8bd69818ffb0ae364b77b17af7" + integrity sha512-3zqD3pO+z5CZyxtKDTnOJ2XgFFRUBciOox6EWkoZvJfc9zcidNAQxuwonUeNts6Xbm8Wtm5YGIRC0x+12YH7kw== + +"@next/swc-linux-arm64-gnu@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.4.tgz#43a7bc409b03487bff5beb99479cacdc7bd29af5" + integrity sha512-kiX0vgJGMZVv+oo1QuObaYulXNvdH/IINmvdZnVzMO/jic/B8EEIGlZ8Bgvw8LCjH3zNVPO3mGrdMvnEEPEhKA== + +"@next/swc-linux-arm64-musl@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.4.tgz#4d1db6de6dc982b974cd1c52937111e3e4a34bd3" + integrity sha512-EETZPa1juczrKLWk5okoW2hv7D7WvonU+Cf2CgsSoxgsYbUCZ1voOpL4JZTOb6IbKMDo6ja+SbY0vzXZBUMvkQ== + +"@next/swc-linux-x64-gnu@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.4.tgz#c3b414d77bab08b35f7dd8943d5586f0adb15e38" + integrity sha512-4csPbRbfZbuWOk3ATyWcvVFdD9/Rsdq5YHKvRuEni68OCLkfy4f+4I9OBpyK1SKJ00Cih16NJbHE+k+ljPPpag== + +"@next/swc-linux-x64-musl@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.4.tgz#187a883ec09eb2442a5ebf126826e19037313c61" + integrity sha512-YeBmI+63Ro75SUiL/QXEVXQ19T++58aI/IINOyhpsRL1LKdyfK/35iilraZEFz9bLQrwy1LYAR5lK200A9Gjbg== + +"@next/swc-win32-arm64-msvc@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.4.tgz#89befa84e453ed2ef9a888f375eba565a0fde80b" + integrity sha512-Sd0qFUJv8Tj0PukAYbCCDbmXcMkbIuhnTeHm9m4ZGjCf6kt7E/RMs55Pd3R5ePjOkN7dJEuxYBehawTR/aPDSQ== + +"@next/swc-win32-ia32-msvc@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.4.tgz#cb50c08f0e40ead63642a7f269f0c8254261f17c" + integrity sha512-rt/vv/vg/ZGGkrkKcuJ0LyliRdbskQU+91bje+PgoYmxTZf/tYs6IfbmgudBJk6gH3QnjHWbkphDdRQrseRefQ== + +"@next/swc-win32-x64-msvc@12.3.4": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.4.tgz#d28ea15a72cdcf96201c60a43e9630cd7fda168f" + integrity sha512-DQ20JEfTBZAgF8QCjYfJhv2/279M6onxFjdG/+5B0Cyj00/EdBxiWb2eGGFgQhrBbNv/lsvzFbbi0Ptf8Vw/bg== "@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3": version "2.1.8-no-fsevents.3" @@ -2061,7 +2064,7 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@nodelib/fs.walk@^1.2.3": +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== @@ -2145,14 +2148,14 @@ integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== "@sinclair/typebox@^0.24.1": - version "0.24.20" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.20.tgz#11a657875de6008622d53f56e063a6347c51a6dd" - integrity sha512-kVaO5aEFZb33nPMTZBxiPEkY+slxiPtqC7QX8f9B3eGOMBvEfuMfxp9DSTTCsRJPumPKjrge4yagyssO4q6qzQ== + version "0.24.51" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f" + integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== "@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== + version "1.8.6" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" + integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== dependencies: type-detect "4.0.8" @@ -2163,25 +2166,25 @@ dependencies: "@sinonjs/commons" "^1.7.0" -"@swc/helpers@0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.3.tgz#16593dfc248c53b699d4b5026040f88ddb497012" - integrity sha512-6JrF+fdUK2zbGpJIlN7G3v966PQjyx/dPt1T9km2wj+EUBqgrxCk3uX4Kct16MIm9gGxfKRcfax2hVf5jvlTzA== +"@swc/helpers@0.4.11": + version "0.4.11" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.11.tgz#db23a376761b3d31c26502122f349a21b592c8de" + integrity sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw== dependencies: tslib "^2.4.0" "@testing-library/dom@^8.5.0": - version "8.16.0" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.16.0.tgz#d6fc50250aed17b1035ca1bd64655e342db3936a" - integrity sha512-uxF4zmnLHHDlmW4l+0WDjcgLVwCvH+OVLpD8Dfp+Bjfz85prwxWGbwXgJdLtkgjD0qfOzkJF9SmA6YZPsMYX4w== + version "8.20.1" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.20.1.tgz#2e52a32e46fc88369eef7eef634ac2a192decd9f" + integrity sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" - "@types/aria-query" "^4.2.0" - aria-query "^5.0.0" + "@types/aria-query" "^5.0.1" + aria-query "5.1.3" chalk "^4.1.0" dom-accessibility-api "^0.5.9" - lz-string "^1.4.4" + lz-string "^1.5.0" pretty-format "^27.0.2" "@testing-library/react-hooks@^8.0.1": @@ -2193,9 +2196,9 @@ react-error-boundary "^3.1.0" "@testing-library/react@^13.3.0": - version "13.3.0" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-13.3.0.tgz#bf298bfbc5589326bbcc8052b211f3bb097a97c5" - integrity sha512-DB79aA426+deFgGSjnf5grczDPiL4taK3hFaa+M5q7q20Kcve9eQottOG5kZ74KEr55v0tU2CQormSSDK87zYQ== + version "13.4.0" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-13.4.0.tgz#6a31e3bf5951615593ad984e96b9e5e2d9380966" + integrity sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw== dependencies: "@babel/runtime" "^7.12.5" "@testing-library/dom" "^8.5.0" @@ -2206,18 +2209,18 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== -"@types/aria-query@^4.2.0": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.2.tgz#ed4e0ad92306a704f9fb132a0cfcf77486dbe2bc" - integrity sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig== +"@types/aria-query@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.1.tgz#3286741fb8f1e1580ac28784add4c7a1d49bdfbc" + integrity sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q== "@types/babel__core@^7.1.14": - version "7.1.19" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460" - integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== + version "7.20.1" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.1.tgz#916ecea274b0c776fec721e333e55762d3a9614b" + integrity sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw== dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" "@types/babel__generator" "*" "@types/babel__template" "*" "@types/babel__traverse" "*" @@ -2238,11 +2241,11 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.17.1" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.17.1.tgz#1a0e73e8c28c7e832656db372b779bfd2ef37314" - integrity sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA== + version "7.20.1" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.1.tgz#dd6f1d2411ae677dcb2db008c962598be31d6acf" + integrity sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg== dependencies: - "@babel/types" "^7.3.0" + "@babel/types" "^7.20.7" "@types/body-parser@*": version "1.19.2" @@ -2278,49 +2281,58 @@ "@types/estree" "*" "@types/eslint@*": - version "8.4.5" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.5.tgz#acdfb7dd36b91cc5d812d7c093811a8f3d9b31e4" - integrity sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ== + version "8.40.2" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.40.2.tgz#2833bc112d809677864a4b0e7d1de4f04d7dac2d" + integrity sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ== dependencies: "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" - integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== - -"@types/estree@^0.0.51": - version "0.0.51" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== +"@types/estree@*", "@types/estree@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" + integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== -"@types/express-serve-static-core@^4.17.18": - version "4.17.29" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz#2a1795ea8e9e9c91b4a4bbe475034b20c1ec711c" - integrity sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q== +"@types/express-serve-static-core@^4.17.33": + version "4.17.35" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz#c95dd4424f0d32e525d23812aa8ab8e4d3906c4f" + integrity sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg== dependencies: "@types/node" "*" "@types/qs" "*" "@types/range-parser" "*" + "@types/send" "*" -"@types/express@*", "@types/express@^4.17.13": - version "4.17.13" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" - integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== +"@types/express@*", "@types/express@^4.17.14": + version "4.17.17" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" + integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== dependencies: "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.18" + "@types/express-serve-static-core" "^4.17.33" "@types/qs" "*" "@types/serve-static" "*" "@types/graceful-fs@^4.1.3": - 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== + version "4.1.6" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" + integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== dependencies: "@types/node" "*" +"@types/hoist-non-react-statics@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" + integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + +"@types/http-errors@*": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.1.tgz#20172f9578b225f6c7da63446f56d4ce108d5a65" + integrity sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ== + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.4" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" @@ -2358,23 +2370,23 @@ "@types/tough-cookie" "*" "@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + version "7.0.12" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" + integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/jsonwebtoken@^8.5.8": - version "8.5.8" - resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-8.5.8.tgz#01b39711eb844777b7af1d1f2b4cf22fda1c0c44" - integrity sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A== +"@types/jsonwebtoken@^8.5.9": + version "8.5.9" + resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz#2c064ecb0b3128d837d2764aa0b117b0ff6e4586" + integrity sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg== dependencies: "@types/node" "*" -"@types/keygrip@*": +"@types/keygrip@*", "@types/keygrip@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.2.tgz#513abfd256d7ad0bf1ee1873606317b33b1b2a72" integrity sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw== @@ -2384,15 +2396,20 @@ resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== +"@types/mime@*": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" + integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== + "@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/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0": - version "18.0.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.6.tgz#0ba49ac517ad69abe7a1508bc9b3a5483df9d5d7" - integrity sha512-/xUq6H2aQm261exT6iZTMifUySEt4GR5KX8eYyY+C4MSNPqSh9oNIP7tz2GLKTlFaiBbgZNxffoR3CVRG+cljw== + version "20.3.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.3.tgz#329842940042d2b280897150e023e604d11657d6" + integrity sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw== "@types/parse5@^6.0.3": version "6.0.3" @@ -2400,9 +2417,9 @@ integrity sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g== "@types/prettier@^2.1.5": - version "2.6.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.3.tgz#68ada76827b0010d0db071f739314fa429943d0a" - integrity sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg== + version "2.7.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== "@types/prop-types@*": version "15.7.5" @@ -2420,34 +2437,55 @@ integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== "@types/react-dom@^18.0.0": - version "18.0.6" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.6.tgz#36652900024842b74607a17786b6662dd1e103a1" - integrity sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA== + version "18.2.6" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.6.tgz#ad621fa71a8db29af7c31b41b2ea3d8a6f4144d1" + integrity sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A== dependencies: "@types/react" "*" "@types/react@*": - version "18.0.15" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.15.tgz#d355644c26832dc27f3e6cbf0c4f4603fc4ab7fe" - integrity sha512-iz3BtLuIYH1uWdsv6wXYdhozhqj20oD4/Hk2DNXIn1kFsmp9x8d9QB6FnPhfkbhd2PgEONt9Q1x/ebkwjfFLow== + version "18.2.14" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.14.tgz#fa7a6fecf1ce35ca94e74874f70c56ce88f7a127" + integrity sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" csstype "^3.0.2" "@types/scheduler@*": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" - integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + version "0.16.3" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" + integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== -"@types/serve-static@*": - version "1.13.10" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" - integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== +"@types/semver@^7.3.12": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" + integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== + +"@types/send@*": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.1.tgz#ed4932b8a2a805f1fe362a70f4e62d0ac994e301" + integrity sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q== dependencies: "@types/mime" "^1" "@types/node" "*" +"@types/serve-static@*": + version "1.15.2" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.2.tgz#3e5419ecd1e40e7405d34093f10befb43f63381a" + integrity sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw== + dependencies: + "@types/http-errors" "*" + "@types/mime" "*" + "@types/node" "*" + +"@types/set-cookie-parser@^2.4.2": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@types/set-cookie-parser/-/set-cookie-parser-2.4.2.tgz#b6a955219b54151bfebd4521170723df5e13caad" + integrity sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w== + dependencies: + "@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" @@ -2464,211 +2502,215 @@ integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== "@types/yargs@^17.0.8": - version "17.0.10" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.10.tgz#591522fce85d8739bca7b8bb90d048e4478d186a" - integrity sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA== + version "17.0.24" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" + integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== dependencies: "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^5.30.7": - version "5.30.7" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.7.tgz#1621dabc1ae4084310e19e9efc80dfdbb97e7493" - integrity sha512-l4L6Do+tfeM2OK0GJsU7TUcM/1oN/N25xHm3Jb4z3OiDU4Lj8dIuxX9LpVMS9riSXQs42D1ieX7b85/r16H9Fw== - dependencies: - "@typescript-eslint/scope-manager" "5.30.7" - "@typescript-eslint/type-utils" "5.30.7" - "@typescript-eslint/utils" "5.30.7" + version "5.60.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.1.tgz#81382d6ecb92b8dda70e91f9035611cb2fecd1c3" + integrity sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.60.1" + "@typescript-eslint/type-utils" "5.60.1" + "@typescript-eslint/utils" "5.60.1" debug "^4.3.4" - functional-red-black-tree "^1.0.1" + grapheme-splitter "^1.0.4" ignore "^5.2.0" - regexpp "^3.2.0" + natural-compare-lite "^1.4.0" semver "^7.3.7" tsutils "^3.21.0" "@typescript-eslint/parser@^5.30.7": - version "5.30.7" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.30.7.tgz#99d09729392aec9e64b1de45cd63cb81a4ddd980" - integrity sha512-Rg5xwznHWWSy7v2o0cdho6n+xLhK2gntImp0rJroVVFkcYFYQ8C8UJTSuTw/3CnExBmPjycjmUJkxVmjXsld6A== + version "5.60.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.60.1.tgz#0f2f58209c0862a73e3d5a56099abfdfa21d0fd3" + integrity sha512-pHWlc3alg2oSMGwsU/Is8hbm3XFbcrb6P5wIxcQW9NsYBfnrubl/GhVVD/Jm/t8HXhA2WncoIRfBtnCgRGV96Q== dependencies: - "@typescript-eslint/scope-manager" "5.30.7" - "@typescript-eslint/types" "5.30.7" - "@typescript-eslint/typescript-estree" "5.30.7" + "@typescript-eslint/scope-manager" "5.60.1" + "@typescript-eslint/types" "5.60.1" + "@typescript-eslint/typescript-estree" "5.60.1" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.30.7": - version "5.30.7" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.30.7.tgz#8269a931ef1e5ae68b5eb80743cc515c4ffe3dd7" - integrity sha512-7BM1bwvdF1UUvt+b9smhqdc/eniOnCKxQT/kj3oXtj3LqnTWCAM0qHRHfyzCzhEfWX0zrW7KqXXeE4DlchZBKw== +"@typescript-eslint/scope-manager@5.60.1": + version "5.60.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz#35abdb47f500c68c08f2f2b4f22c7c79472854bb" + integrity sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ== dependencies: - "@typescript-eslint/types" "5.30.7" - "@typescript-eslint/visitor-keys" "5.30.7" + "@typescript-eslint/types" "5.60.1" + "@typescript-eslint/visitor-keys" "5.60.1" -"@typescript-eslint/type-utils@5.30.7": - version "5.30.7" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.30.7.tgz#5693dc3db6f313f302764282d614cfdbc8a9fcfd" - integrity sha512-nD5qAE2aJX/YLyKMvOU5jvJyku4QN5XBVsoTynFrjQZaDgDV6i7QHFiYCx10wvn7hFvfuqIRNBtsgaLe0DbWhw== +"@typescript-eslint/type-utils@5.60.1": + version "5.60.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.60.1.tgz#17770540e98d65ab4730c7aac618003f702893f4" + integrity sha512-vN6UztYqIu05nu7JqwQGzQKUJctzs3/Hg7E2Yx8rz9J+4LgtIDFWjjl1gm3pycH0P3mHAcEUBd23LVgfrsTR8A== dependencies: - "@typescript-eslint/utils" "5.30.7" + "@typescript-eslint/typescript-estree" "5.60.1" + "@typescript-eslint/utils" "5.60.1" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.30.7": - version "5.30.7" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.30.7.tgz#18331487cc92d0f1fb1a6f580c8ec832528079d0" - integrity sha512-ocVkETUs82+U+HowkovV6uxf1AnVRKCmDRNUBUUo46/5SQv1owC/EBFkiu4MOHeZqhKz2ktZ3kvJJ1uFqQ8QPg== +"@typescript-eslint/types@5.60.1": + version "5.60.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.60.1.tgz#a17473910f6b8d388ea83c9d7051af89c4eb7561" + integrity sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg== -"@typescript-eslint/typescript-estree@5.30.7": - version "5.30.7" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.7.tgz#05da9f1b281985bfedcf62349847f8d168eecc07" - integrity sha512-tNslqXI1ZdmXXrHER83TJ8OTYl4epUzJC0aj2i4DMDT4iU+UqLT3EJeGQvJ17BMbm31x5scSwo3hPM0nqQ1AEA== +"@typescript-eslint/typescript-estree@5.60.1": + version "5.60.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz#8c71824b7165b64d5ebd7aa42968899525959834" + integrity sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw== dependencies: - "@typescript-eslint/types" "5.30.7" - "@typescript-eslint/visitor-keys" "5.30.7" + "@typescript-eslint/types" "5.60.1" + "@typescript-eslint/visitor-keys" "5.60.1" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.30.7", "@typescript-eslint/utils@^5.10.0": - version "5.30.7" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.30.7.tgz#7135be070349e9f7caa262b0ca59dc96123351bb" - integrity sha512-Z3pHdbFw+ftZiGUnm1GZhkJgVqsDL5CYW2yj+TB2mfXDFOMqtbzQi2dNJIyPqPbx9mv2kUxS1gU+r2gKlKi1rQ== +"@typescript-eslint/utils@5.60.1", "@typescript-eslint/utils@^5.10.0": + version "5.60.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.60.1.tgz#6861ebedbefba1ac85482d2bdef6f2ff1eb65b80" + integrity sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ== dependencies: + "@eslint-community/eslint-utils" "^4.2.0" "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.30.7" - "@typescript-eslint/types" "5.30.7" - "@typescript-eslint/typescript-estree" "5.30.7" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.60.1" + "@typescript-eslint/types" "5.60.1" + "@typescript-eslint/typescript-estree" "5.60.1" eslint-scope "^5.1.1" - eslint-utils "^3.0.0" + semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.30.7": - version "5.30.7" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.7.tgz#c093abae75b4fd822bfbad9fc337f38a7a14909a" - integrity sha512-KrRXf8nnjvcpxDFOKej4xkD7657+PClJs5cJVSG7NNoCNnjEdc46juNAQt7AyuWctuCgs6mVRc1xGctEqrjxWw== +"@typescript-eslint/visitor-keys@5.60.1": + version "5.60.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz#19a877358bf96318ec35d90bfe6bd1445cce9434" + integrity sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw== dependencies: - "@typescript-eslint/types" "5.30.7" + "@typescript-eslint/types" "5.60.1" eslint-visitor-keys "^3.3.0" -"@webassemblyjs/ast@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" - integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== +"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" + integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== dependencies: - "@webassemblyjs/helper-numbers" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-numbers" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" -"@webassemblyjs/floating-point-hex-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" - integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== +"@webassemblyjs/floating-point-hex-parser@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" + integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== -"@webassemblyjs/helper-api-error@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" - integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== +"@webassemblyjs/helper-api-error@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" + integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== -"@webassemblyjs/helper-buffer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" - integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== +"@webassemblyjs/helper-buffer@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" + integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== -"@webassemblyjs/helper-numbers@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" - integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== +"@webassemblyjs/helper-numbers@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" + integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/floating-point-hex-parser" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" "@xtuc/long" "4.2.2" -"@webassemblyjs/helper-wasm-bytecode@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" - integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== +"@webassemblyjs/helper-wasm-bytecode@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" + integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== -"@webassemblyjs/helper-wasm-section@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" - integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== +"@webassemblyjs/helper-wasm-section@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" + integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" -"@webassemblyjs/ieee754@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" - integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== +"@webassemblyjs/ieee754@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" + integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" - integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== +"@webassemblyjs/leb128@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" + integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" - integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== - -"@webassemblyjs/wasm-edit@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" - integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/helper-wasm-section" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-opt" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - "@webassemblyjs/wast-printer" "1.11.1" - -"@webassemblyjs/wasm-gen@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" - integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - -"@webassemblyjs/wasm-opt@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" - integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - -"@webassemblyjs/wasm-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" - integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - -"@webassemblyjs/wast-printer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" - integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== - dependencies: - "@webassemblyjs/ast" "1.11.1" +"@webassemblyjs/utf8@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" + integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== + +"@webassemblyjs/wasm-edit@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" + integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-opt" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + "@webassemblyjs/wast-printer" "1.11.6" + +"@webassemblyjs/wasm-gen@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" + integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wasm-opt@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" + integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + +"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" + integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wast-printer@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" + integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== + dependencies: + "@webassemblyjs/ast" "1.11.6" "@xtuc/long" "4.2.2" "@webpack-cli/configtest@^1.2.0": @@ -2718,10 +2760,10 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" -acorn-import-assertions@^1.7.6: - version "1.8.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" - integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== +acorn-import-assertions@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" + integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== acorn-jsx@^5.3.2: version "5.3.2" @@ -2743,10 +2785,10 @@ acorn@^7.1.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.0.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1: - version "8.8.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" - integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== +acorn@^8.0.4, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: + version "8.9.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59" + integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ== agent-base@6: version "6.0.2" @@ -2767,7 +2809,7 @@ ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv-keywords@^5.0.0: +ajv-keywords@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== @@ -2784,10 +2826,10 @@ ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.8.0: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== +ajv@^8.0.0, ajv@^8.9.0: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -2831,9 +2873,9 @@ ansi-styles@^5.0.0: integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== anymatch@^3.0.3, anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" @@ -2863,28 +2905,37 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -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== +aria-query@5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" + integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== dependencies: - "@babel/runtime" "^7.10.2" - "@babel/runtime-corejs3" "^7.10.2" + deep-equal "^2.0.5" -aria-query@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.0.0.tgz#210c21aaf469613ee8c9a62c7f86525e058db52c" - integrity sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg== +aria-query@^5.1.3: + version "5.3.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== + dependencies: + dequal "^2.0.3" -array-includes@^3.1.4, array-includes@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" - integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-includes@^3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== dependencies: call-bind "^1.0.2" define-properties "^1.1.4" - es-abstract "^1.19.5" - get-intrinsic "^1.1.1" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" is-string "^1.0.7" array-union@^2.1.0: @@ -2892,26 +2943,37 @@ array-union@^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.5: - version "1.3.0" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b" - integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw== +array.prototype.flat@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" -array.prototype.flatmap@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz#a7e8ed4225f4788a70cd910abcf0791e76a5534f" - integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg== +array.prototype.flatmap@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" +array.prototype.tosorted@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" + integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.1.3" + arrify@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" @@ -2941,10 +3003,15 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -axe-core@^4.4.3: - version "4.4.3" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.3.tgz#11c74d23d5013c0fa5d183796729bc3482bd2f6f" - integrity sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w== +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +axe-core@^4.6.2: + version "4.7.2" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0" + integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g== axios@0.21.3: version "0.21.3" @@ -2960,10 +3027,12 @@ axios@^0.21.1: dependencies: follow-redirects "^1.14.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== +axobject-query@^3.1.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" + integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== + dependencies: + dequal "^2.0.3" babel-core@^7.0.0-bridge.0: version "7.0.0-bridge.0" @@ -2984,22 +3053,15 @@ babel-jest@^28.1.3: slash "^3.0.0" babel-loader@^8.2.5: - version "8.2.5" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.5.tgz#d45f585e654d5a5d90f5350a779d7647c5ed512e" - integrity sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ== + version "8.3.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8" + integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q== dependencies: find-cache-dir "^3.3.1" loader-utils "^2.0.0" make-dir "^3.1.0" 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.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" @@ -3032,29 +3094,29 @@ babel-plugin-module-resolver@^4.1.0: reselect "^4.0.0" resolve "^1.13.1" -babel-plugin-polyfill-corejs2@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" - integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== +babel-plugin-polyfill-corejs2@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz#75044d90ba5043a5fb559ac98496f62f3eb668fd" + integrity sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw== dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.3.1" + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.4.0" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" - integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== +babel-plugin-polyfill-corejs3@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz#39248263c38191f0d226f928d666e6db1b4b3a8a" + integrity sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" - core-js-compat "^3.21.0" + "@babel/helper-define-polyfill-provider" "^0.4.0" + core-js-compat "^3.30.1" -babel-plugin-polyfill-regenerator@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" - integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== +babel-plugin-polyfill-regenerator@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz#e7344d88d9ef18a3c47ded99362ae4a757609380" + integrity sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" + "@babel/helper-define-polyfill-provider" "^0.4.0" babel-preset-current-node-syntax@^1.0.0: version "1.0.1" @@ -3103,9 +3165,9 @@ big.js@^5.2.2: integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== bignumber.js@^9.0.0: - version "9.0.2" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.2.tgz#71c6c6bed38de64e24a65ebe16cfcf23ae693673" - integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw== + version "9.1.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" + integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== binary-extensions@^2.0.0: version "2.2.0" @@ -3156,25 +3218,15 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserslist@^4.14.5, browserslist@^4.20.2, browserslist@^4.21.2: - version "4.21.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.2.tgz#59a400757465535954946a400b841ed37e2b4ecf" - integrity sha512-MonuOgAtUB46uP5CezYbRaYKBNt2LxP0yX+Pmj4LkcDFGkn9Cbpi83d9sCjwQDErXsIJSzY5oKGDbgOlF/LPAA== - dependencies: - caniuse-lite "^1.0.30001366" - electron-to-chromium "^1.4.188" - node-releases "^2.0.6" - update-browserslist-db "^1.0.4" - -browserslist@^4.21.3: - version "4.21.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" - integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== +browserslist@^4.14.5, browserslist@^4.21.3, browserslist@^4.21.5: + version "4.21.9" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635" + integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== dependencies: - caniuse-lite "^1.0.30001400" - electron-to-chromium "^1.4.251" - node-releases "^2.0.6" - update-browserslist-db "^1.0.9" + caniuse-lite "^1.0.30001503" + electron-to-chromium "^1.4.431" + node-releases "^2.0.12" + update-browserslist-db "^1.0.11" bs-logger@0.x: version "0.2.6" @@ -3278,10 +3330,10 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001332, caniuse-lite@^1.0.30001366, caniuse-lite@^1.0.30001400: - version "1.0.30001489" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz" - integrity sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ== +caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001503: + version "1.0.30001510" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001510.tgz#077b7ceba430473142ffd47ed89a78bd7b10075f" + integrity sha512-z35lD6xjHklPNgjW4P68R30Er5OCIZE0C1bUf8IMXSh34WJYXfIy+GxIEraQXYJ2dvTU8TumjYAeLrPhpMlsuw== chalk@2.1.0: version "2.1.0" @@ -3345,14 +3397,14 @@ ci-env@^1.4.0: integrity sha512-NtTjhgSEqv4Aj90TUYHQLxHdnCPXnjdtuGG1X8lTfp/JqeXTdw0FTWl/vUAPuvbWZTF8QVpv6ASe/XacE+7R2A== ci-info@^3.2.0: - version "3.3.2" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.2.tgz#6d2967ffa407466481c6c90b6e16b3098f080128" - integrity sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg== + version "3.8.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== 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== + version "1.2.3" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" + integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== cliui@^7.0.2: version "7.0.4" @@ -3421,9 +3473,9 @@ color-name@~1.1.4: integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== colorette@^2.0.14: - version "2.0.19" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" - integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== combined-stream@^1.0.8: version "1.0.8" @@ -3475,11 +3527,9 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== convert-source-map@^1.1.0, 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" + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== cookie@^0.5.0: version "0.5.0" @@ -3506,28 +3556,17 @@ copy-webpack-plugin@^11.0.0: schema-utils "^4.0.0" serialize-javascript "^6.0.0" -core-js-compat@^3.21.0, core-js-compat@^3.22.1: - version "3.23.5" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.23.5.tgz#11edce2f1c4f69a96d30ce77c805ce118909cd5b" - integrity sha512-fHYozIFIxd+91IIbXJgWd/igXIc8Mf9is0fusswjnGIWVG96y2cwyUdlCkGOw6rMLHKAxg7xtCIVaHsyOUnJIg== +core-js-compat@^3.30.1, core-js-compat@^3.30.2: + version "3.31.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.31.0.tgz#4030847c0766cc0e803dcdfb30055d7ef2064bf1" + integrity sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw== dependencies: - browserslist "^4.21.2" - semver "7.0.0" - -core-js-pure@^3.20.2: - version "3.23.5" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.23.5.tgz#23daaa9af9230e50f10b0fa4b8e6b87402be4c33" - integrity sha512-8t78LdpKSuCq4pJYCYk8hl7XEkAX+BP16yRIwL3AanTksxuEf7CM83vRyctmiEL8NDZ3jpUcv56fk9/zG3aIuw== - -core-js@3.6.5: - version "3.6.5" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" - integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== + browserslist "^4.21.5" core-js@^3.23.5: - version "3.23.5" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.23.5.tgz#1f82b0de5eece800827a2f59d597509c67650475" - integrity sha512-7Vh11tujtAZy82da4duVreQysIoO2EvVrur7y6IzZkH1IHPSekuDi8Vuw1+YKjkbfWLRD7Nc9ICQ/sIUDutcyg== + version "3.31.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.31.0.tgz#4471dd33e366c79d8c0977ed2d940821719db344" + integrity sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ== core-util-is@~1.0.0: version "1.0.3" @@ -3582,9 +3621,9 @@ cssstyle@^2.3.0: cssom "~0.3.6" csstype@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" - integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== + version "3.1.2" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" + integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== damerau-levenshtein@^1.0.8: version "1.0.8" @@ -3612,13 +3651,6 @@ debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: dependencies: ms "2.1.2" -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.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -3627,9 +3659,9 @@ debug@^3.2.7: ms "^2.1.1" decimal.js@^10.3.1: - version "10.3.1" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" - integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== decompress-response@^4.2.0: version "4.2.1" @@ -3643,20 +3675,44 @@ dedent@^0.7.0: resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== +deep-equal@^2.0.5: + version "2.2.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.1.tgz#c72ab22f3a7d3503a4ca87dde976fe9978816739" + integrity sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + es-get-iterator "^1.1.3" + get-intrinsic "^1.2.0" + is-arguments "^1.1.1" + is-array-buffer "^3.0.2" + is-date-object "^1.0.5" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + isarray "^2.0.5" + object-is "^1.1.5" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.0" + side-channel "^1.0.4" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.9" + 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: +deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 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== + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== default-browser-id@^3.0.0: version "3.0.0" @@ -3681,10 +3737,10 @@ define-lazy-prop@^3.0.0: resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== -define-properties@^1.1.3, define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== +define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== dependencies: has-property-descriptors "^1.0.0" object-keys "^1.1.1" @@ -3704,6 +3760,11 @@ depd@~2.0.0: resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== +dequal@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + detect-libc@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" @@ -3741,9 +3802,9 @@ doctrine@^3.0.0: esutils "^2.0.2" dom-accessibility-api@^0.5.9: - version "0.5.14" - resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz#56082f71b1dc7aac69d83c4285eef39c15d93f56" - integrity sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg== + version "0.5.16" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" + integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== domexception@^4.0.0: version "4.0.0" @@ -3757,7 +3818,7 @@ duplexer@^0.1.1, duplexer@^0.1.2: resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== -duplexify@^4.0.0, duplexify@^4.1.1: +duplexify@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0" integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== @@ -3774,15 +3835,10 @@ ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: dependencies: safe-buffer "^5.0.1" -electron-to-chromium@^1.4.188: - version "1.4.199" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.199.tgz#e0384fde79fdda89880e8be58196a9153e04db3b" - integrity sha512-WIGME0Cs7oob3mxsJwHbeWkH0tYkIE/sjkJ8ML2BYmuRcjhRl/q5kVDXG7W9LOOKwzPU5M0LBlXRq9rlSgnNlg== - -electron-to-chromium@^1.4.251: - version "1.4.283" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.283.tgz#d4f263f5df402fd799c0a06255d580dcf8aa9a8e" - integrity sha512-g6RQ9zCOV+U5QVHW9OpFR7rdk/V7xfopNXnyAamdpFgCHgZ1sjI8VuR1+zG2YG/TZk+tQ8mpNkug4P8FU0fuOA== +electron-to-chromium@^1.4.431: + version "1.4.447" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.447.tgz#ac69d3a7b3713e9ae94bb30ba65c3114e4d76a38" + integrity sha512-sxX0LXh+uL41hSJsujAN86PjhrV/6c79XmpY0TvjZStV6VxIgarf8SRkUoUTuYmFcZQTemsoqo8qXOGw5npWfw== emittery@^0.10.2: version "0.10.2" @@ -3811,18 +3867,10 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" -enhanced-resolve@^5.0.0, enhanced-resolve@^5.12.0: - version "5.14.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.14.1.tgz#de684b6803724477a4af5d74ccae5de52c25f6b3" - integrity sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -enhanced-resolve@^5.9.3: - version "5.10.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz#0dc579c3bb2a1032e357ac45b8f3a6f3ad4fb1e6" - integrity sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ== +enhanced-resolve@^5.0.0, enhanced-resolve@^5.12.0, enhanced-resolve@^5.15.0, enhanced-resolve@^5.7.0: + version "5.15.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" + integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -3833,9 +3881,9 @@ ent@^2.2.0: integrity sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA== envinfo@^7.7.3: - version "7.8.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" - integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + version "7.10.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.10.0.tgz#55146e3909cc5fe63c22da63fb15b05aeac35b13" + integrity sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw== error-ex@^1.3.1: version "1.3.2" @@ -3844,39 +3892,74 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5: - version "1.20.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" - integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== +es-abstract@^1.19.0, es-abstract@^1.20.4: + version "1.21.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" + integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== dependencies: + array-buffer-byte-length "^1.0.0" + available-typed-arrays "^1.0.5" call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" - function-bind "^1.1.1" function.prototype.name "^1.1.5" - get-intrinsic "^1.1.1" + get-intrinsic "^1.2.0" get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" has "^1.0.3" has-property-descriptors "^1.0.0" + has-proto "^1.0.1" has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.4" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" is-negative-zero "^2.0.2" is-regex "^1.1.4" is-shared-array-buffer "^1.0.2" is-string "^1.0.7" + is-typed-array "^1.1.10" is-weakref "^1.0.2" - object-inspect "^1.12.0" + object-inspect "^1.12.3" object-keys "^1.1.1" - object.assign "^4.1.2" + object.assign "^4.1.4" regexp.prototype.flags "^1.4.3" - string.prototype.trimend "^1.0.5" - string.prototype.trimstart "^1.0.5" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.7" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-length "^1.0.4" unbox-primitive "^1.0.2" + which-typed-array "^1.1.9" -es-module-lexer@^0.9.0: - version "0.9.3" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" - integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== +es-get-iterator@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" + integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + is-arguments "^1.1.1" + is-map "^2.0.2" + is-set "^2.0.2" + is-string "^1.0.7" + isarray "^2.0.5" + stop-iteration-iterator "^1.0.0" + +es-module-lexer@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.3.0.tgz#6be9c9e0b4543a60cd166ff6f8b4e9dae0b0c16f" + integrity sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA== + +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" es-shim-unscopables@^1.0.0: version "1.0.0" @@ -3915,14 +3998,13 @@ escape-string-regexp@^4.0.0: integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 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== + version "2.1.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" + integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== dependencies: esprima "^4.0.1" estraverse "^5.2.0" esutils "^2.0.2" - optionator "^0.8.1" optionalDependencies: source-map "~0.6.1" @@ -3946,22 +4028,23 @@ eslint-config-airbnb@^19.0.4: object.entries "^1.1.5" eslint-config-prettier@^8.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" - integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== + version "8.8.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz#bfda738d412adc917fd7b038857110efe98c9348" + integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA== eslint-import-resolver-alias@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/eslint-import-resolver-alias/-/eslint-import-resolver-alias-1.1.2.tgz#297062890e31e4d6651eb5eba9534e1f6e68fc97" integrity sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w== -eslint-import-resolver-node@^0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" - integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== +eslint-import-resolver-node@^0.3.7: + version "0.3.7" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" + integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== dependencies: debug "^3.2.7" - resolve "^1.20.0" + is-core-module "^2.11.0" + resolve "^1.22.1" eslint-import-resolver-typescript@^3.5.5: version "3.5.5" @@ -3977,14 +4060,6 @@ eslint-import-resolver-typescript@^3.5.5: is-glob "^4.0.3" synckit "^0.8.5" -eslint-module-utils@^2.7.3: - version "2.7.3" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee" - integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== - dependencies: - debug "^3.2.7" - find-up "^2.1.0" - eslint-module-utils@^2.7.4: version "2.8.0" resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" @@ -3993,48 +4068,53 @@ eslint-module-utils@^2.7.4: debug "^3.2.7" eslint-plugin-import@^2.26.0: - version "2.26.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" - integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== + version "2.27.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" + integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== dependencies: - array-includes "^3.1.4" - array.prototype.flat "^1.2.5" - debug "^2.6.9" + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + array.prototype.flatmap "^1.3.1" + debug "^3.2.7" doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.6" - eslint-module-utils "^2.7.3" + eslint-import-resolver-node "^0.3.7" + eslint-module-utils "^2.7.4" has "^1.0.3" - is-core-module "^2.8.1" + is-core-module "^2.11.0" is-glob "^4.0.3" minimatch "^3.1.2" - object.values "^1.1.5" - resolve "^1.22.0" + object.values "^1.1.6" + resolve "^1.22.1" + semver "^6.3.0" tsconfig-paths "^3.14.1" eslint-plugin-jest@^26.6.0: - version "26.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-26.6.0.tgz#546804fa42da75d7d58d4d3b278d5186abd3f6c0" - integrity sha512-f8n46/97ZFdU4KqeQYqO8AEVGIhHWvkpgNBWHH3jrM28/y8llnbf3IjfIKv6p2pZIMinK1PCqbbROxs9Eud02Q== + version "26.9.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-26.9.0.tgz#7931c31000b1c19e57dbfb71bbf71b817d1bf949" + integrity sha512-TWJxWGp1J628gxh2KhaH1H1paEdgE2J61BBF1I59c6xWeL5+D1BzMxGDN/nXAfX+aSkR5u80K+XhskK6Gwq9ng== dependencies: "@typescript-eslint/utils" "^5.10.0" eslint-plugin-jsx-a11y@^6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz#93736fc91b83fdc38cc8d115deedfc3091aef1ff" - integrity sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q== - dependencies: - "@babel/runtime" "^7.18.9" - aria-query "^4.2.2" - array-includes "^3.1.5" + version "6.7.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976" + integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA== + dependencies: + "@babel/runtime" "^7.20.7" + aria-query "^5.1.3" + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" ast-types-flow "^0.0.7" - axe-core "^4.4.3" - axobject-query "^2.2.0" + axe-core "^4.6.2" + axobject-query "^3.1.1" damerau-levenshtein "^1.0.8" emoji-regex "^9.2.2" has "^1.0.3" - jsx-ast-utils "^3.3.2" - language-tags "^1.0.5" + jsx-ast-utils "^3.3.3" + language-tags "=1.0.5" minimatch "^3.1.2" + object.entries "^1.1.6" + object.fromentries "^2.0.6" semver "^6.3.0" eslint-plugin-prettier@^4.2.1: @@ -4050,24 +4130,25 @@ eslint-plugin-react-hooks@^4.6.0: integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== eslint-plugin-react@^7.30.1: - version "7.30.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.30.1.tgz#2be4ab23ce09b5949c6631413ba64b2810fd3e22" - integrity sha512-NbEvI9jtqO46yJA3wcRF9Mo0lF9T/jhdHqhCHXiXtD+Zcb98812wvokjWpU7Q4QH5edo6dmqrukxVvWWXHlsUg== + version "7.32.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz#e71f21c7c265ebce01bcbc9d0955170c55571f10" + integrity sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg== dependencies: - array-includes "^3.1.5" - array.prototype.flatmap "^1.3.0" + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" + array.prototype.tosorted "^1.1.1" doctrine "^2.1.0" estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" - object.entries "^1.1.5" - object.fromentries "^2.0.5" - object.hasown "^1.1.1" - object.values "^1.1.5" + object.entries "^1.1.6" + object.fromentries "^2.0.6" + object.hasown "^1.1.2" + object.values "^1.1.6" prop-types "^15.8.1" - resolve "^2.0.0-next.3" + resolve "^2.0.0-next.4" semver "^6.3.0" - string.prototype.matchall "^4.0.7" + string.prototype.matchall "^4.0.8" eslint-scope@5.1.1, eslint-scope@^5.1.1: version "5.1.1" @@ -4077,90 +4158,82 @@ eslint-scope@5.1.1, eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== +eslint-scope@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" + integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-visitor-keys@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" + integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== eslint@^8.20.0: - version "8.20.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.20.0.tgz#048ac56aa18529967da8354a478be4ec0a2bc81b" - integrity sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA== - dependencies: - "@eslint/eslintrc" "^1.3.0" - "@humanwhocodes/config-array" "^0.9.2" + version "8.44.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.44.0.tgz#51246e3889b259bbcd1d7d736a0c10add4f0e500" + integrity sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.4.0" + "@eslint/eslintrc" "^2.1.0" + "@eslint/js" "8.44.0" + "@humanwhocodes/config-array" "^0.11.10" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.3.2" - esquery "^1.4.0" + eslint-scope "^7.2.0" + eslint-visitor-keys "^3.4.1" + espree "^9.6.0" + esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^6.0.1" - globals "^13.15.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" + is-path-inside "^3.0.3" js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" + optionator "^0.9.3" strip-ansi "^6.0.1" strip-json-comments "^3.1.0" text-table "^0.2.0" - v8-compile-cache "^2.0.3" -espree@^9.3.2: - version "9.3.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.2.tgz#f58f77bd334731182801ced3380a8cc859091596" - integrity sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA== +espree@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.0.tgz#80869754b1c6560f32e3b6929194a3fe07c5b82f" + integrity sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A== dependencies: - acorn "^8.7.1" + acorn "^8.9.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^3.4.1" esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: 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== +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" @@ -4258,25 +4331,14 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 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.2.11, fast-glob@^3.2.9: - version "3.2.11" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== -fast-glob@^3.2.12: - version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== +fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9: + version "3.3.0" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0" + integrity sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -4289,25 +4351,25 @@ fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.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: +fast-levenshtein@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fast-text-encoding@^1.0.0, fast-text-encoding@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.4.tgz#bf1898ad800282a4e53c0ea9690704dd26e4298e" - integrity sha512-x6lDDm/tBAzX9kmsPcZsNbvDs3Zey3+scsxaZElS8xWLgUMAg/oFLeewfUz0mu1CblHhhsu15jGkraldkFh8KQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz#0aa25f7f638222e3396d72bf936afcf1d42d6867" + integrity sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w== fastest-levenshtein@^1.0.12: - version "1.0.14" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.14.tgz#9054384e4b7a78c88d01a4432dc18871af0ac859" - integrity sha512-tFfWHjnuUfKE186Tfgr+jtaFc0mZTApEgKDOeyN+FwOqRkO/zK/3h1AiRd8u8CY53owL3CUmGr/oI9p/RdyLTA== + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== dependencies: reusify "^1.0.4" @@ -4319,9 +4381,9 @@ faye-websocket@0.11.4: 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== + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== dependencies: bser "2.1.1" @@ -4365,13 +4427,6 @@ find-cache-dir@^3.3.1: make-dir "^3.0.2" pkg-dir "^4.1.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 sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== - 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" @@ -4387,7 +4442,15 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -firebase-admin@^11.0.0: +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +firebase-admin@11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/firebase-admin/-/firebase-admin-11.0.0.tgz#b10355cd9b142cf305fcb7842b51f918d3745a11" integrity sha512-x56u+Q1P8QDvQKaYRe29ZUM/3f829cP8tsKCDXOhaIX/GbGfgcdjRhPmCafzlwgCWP5wW9NkOgIhnrw94zucvw== @@ -4405,37 +4468,36 @@ firebase-admin@^11.0.0: "@google-cloud/storage" "^6.1.0" firebase@^9.9.1: - version "9.9.1" - resolved "https://registry.yarnpkg.com/firebase/-/firebase-9.9.1.tgz#3a4539ab64176196b981d296f7a0b819bb97530b" - integrity sha512-1saLd91mmfNWOdP3DpkCAyXcrwB0iJXZoYY8S98ljp1erL+eUPHu+AHw8ImjynVIejSX07NHgla3mQP0bIniZA== - dependencies: - "@firebase/analytics" "0.8.0" - "@firebase/analytics-compat" "0.1.13" - "@firebase/app" "0.7.29" - "@firebase/app-check" "0.5.12" - "@firebase/app-check-compat" "0.2.12" - "@firebase/app-compat" "0.1.30" - "@firebase/app-types" "0.7.0" - "@firebase/auth" "0.20.5" - "@firebase/auth-compat" "0.2.18" - "@firebase/database" "0.13.3" - "@firebase/database-compat" "0.2.3" - "@firebase/firestore" "3.4.13" - "@firebase/firestore-compat" "0.1.22" - "@firebase/functions" "0.8.4" - "@firebase/functions-compat" "0.2.4" - "@firebase/installations" "0.5.12" - "@firebase/installations-compat" "0.1.12" - "@firebase/messaging" "0.9.16" - "@firebase/messaging-compat" "0.1.16" - "@firebase/performance" "0.5.12" - "@firebase/performance-compat" "0.1.12" - "@firebase/polyfill" "0.3.36" - "@firebase/remote-config" "0.3.11" - "@firebase/remote-config-compat" "0.1.12" - "@firebase/storage" "0.9.9" - "@firebase/storage-compat" "0.1.17" - "@firebase/util" "1.6.3" + version "9.23.0" + resolved "https://registry.yarnpkg.com/firebase/-/firebase-9.23.0.tgz#71fea60d704bfed8e92162911544fd6564a04d0e" + integrity sha512-/4lUVY0lUvBDIaeY1q6dUYhS8Sd18Qb9CgWkPZICUo9IXpJNCEagfNZXBBFCkMTTN5L5gx2Hjr27y21a9NzUcA== + dependencies: + "@firebase/analytics" "0.10.0" + "@firebase/analytics-compat" "0.2.6" + "@firebase/app" "0.9.13" + "@firebase/app-check" "0.8.0" + "@firebase/app-check-compat" "0.3.7" + "@firebase/app-compat" "0.2.13" + "@firebase/app-types" "0.9.0" + "@firebase/auth" "0.23.2" + "@firebase/auth-compat" "0.4.2" + "@firebase/database" "0.14.4" + "@firebase/database-compat" "0.3.4" + "@firebase/firestore" "3.13.0" + "@firebase/firestore-compat" "0.3.12" + "@firebase/functions" "0.10.0" + "@firebase/functions-compat" "0.3.5" + "@firebase/installations" "0.6.4" + "@firebase/installations-compat" "0.2.4" + "@firebase/messaging" "0.12.4" + "@firebase/messaging-compat" "0.2.4" + "@firebase/performance" "0.6.4" + "@firebase/performance-compat" "0.2.4" + "@firebase/remote-config" "0.4.4" + "@firebase/remote-config-compat" "0.2.4" + "@firebase/storage" "0.11.2" + "@firebase/storage-compat" "0.3.2" + "@firebase/util" "1.9.3" flat-cache@^3.0.4: version "3.0.4" @@ -4446,19 +4508,26 @@ flat-cache@^3.0.4: rimraf "^3.0.2" flatted@^3.1.0: - version "3.2.6" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" - integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== flow-parser@0.*: - version "0.190.0" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.190.0.tgz#8e0706d58d156d9db0b3350b76636eb0a77e754e" - integrity sha512-9jxaqkeeARD//nhwDoN//j+EFcwzKJCGPtTQzUdKZdlZG3JmUdbV6XJFLD9sbWFPUmcCT1mblwILwdoq0mKWQw== + version "0.210.2" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.210.2.tgz#6a61f699676fec37b95a5e125a82e1cbd1184830" + integrity sha512-kQiVau1WnXMCxJziuOF9wk4EoE/sPTU5H7dWOJN+7lsh+tmUh6LXz1dcLE44D+ouVIg8RRnfRZQymZqzKfh5fA== follow-redirects@^1.14.0: - version "1.15.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" - integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +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@^4.0.0: version "4.0.0" @@ -4509,7 +4578,7 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== -functions-have-names@^1.2.2: +functions-have-names@^1.2.2, functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== @@ -4539,15 +4608,15 @@ gaxios@^4.0.0: is-stream "^2.0.0" node-fetch "^2.6.7" -gaxios@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-5.0.1.tgz#50fc76a2d04bc1700ed8c3ff1561e52255dfc6e0" - integrity sha512-keK47BGKHyyOVQxgcUaSaFvr3ehZYAlvhvpHXy0YB2itzZef+GqZR8TBsfVRWghdwlKrYsn+8L8i3eblF7Oviw== +gaxios@^5.0.0, gaxios@^5.0.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-5.1.2.tgz#5c93e0dc94796e8b92e9ca5c22090d2840e8b8c7" + integrity sha512-mPyw3qQq6qoHWTe27CrzhSj7XYKVStTGrpP92a91FfogBWOd9BMW8GT5yS5WhEYGw02AgB1fVQVSAO+JKiQP0w== dependencies: extend "^3.0.2" https-proxy-agent "^5.0.0" is-stream "^2.0.0" - node-fetch "^2.6.7" + node-fetch "^2.6.9" gcp-metadata@^4.2.0: version "4.3.1" @@ -4557,10 +4626,10 @@ gcp-metadata@^4.2.0: gaxios "^4.0.0" json-bigint "^1.0.0" -gcp-metadata@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-5.0.0.tgz#a00f999f60a4461401e7c515f8a3267cfb401ee7" - integrity sha512-gfwuX3yA3nNsHSWUL4KG90UulNiq922Ukj3wLTrcnX33BB7PwB1o0ubR8KVvXu9nJH+P5w1j2SQSNNqto+H0DA== +gcp-metadata@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-5.3.0.tgz#6f45eb473d0cb47d15001476b48b663744d25408" + integrity sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w== dependencies: gaxios "^5.0.0" json-bigint "^1.0.0" @@ -4575,13 +4644,14 @@ get-caller-file@^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.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" - integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== dependencies: function-bind "^1.1.1" has "^1.0.3" + has-proto "^1.0.1" has-symbols "^1.0.3" get-package-type@^0.1.0: @@ -4603,9 +4673,11 @@ get-symbol-description@^1.0.0: get-intrinsic "^1.1.1" get-tsconfig@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.5.0.tgz#6d52d1c7b299bd3ee9cd7638561653399ac77b0f" - integrity sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ== + version "4.6.2" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.6.2.tgz#831879a5e6c2aa24fe79b60340e2233a1e0f472e" + integrity sha512-E5XrT4CbbXcXWy+1jChlZmrmCwd5KGx502kDCXJJ7y898TtWW9FwoG5HfOLVRKmlmDGkWN2HM9Ho+/Y8F0sJDg== + dependencies: + resolve-pkg-maps "^1.0.0" github-build@^1.2.2: version "1.2.3" @@ -4626,7 +4698,7 @@ glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" -glob-parent@^6.0.1: +glob-parent@^6.0.1, glob-parent@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== @@ -4638,7 +4710,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -4655,13 +4727,20 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^13.15.0: - version "13.17.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" - integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== +globals@^13.19.0: + version "13.20.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" + integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== dependencies: type-fest "^0.20.2" +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" @@ -4674,21 +4753,10 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -globby@^13.1.1: - version "13.1.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.2.tgz#29047105582427ab6eca4f905200667b056da515" - integrity sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ== - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.2.11" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^4.0.0" - -globby@^13.1.3: - version "13.1.4" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.4.tgz#2f91c116066bcec152465ba36e5caa4a13c01317" - integrity sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g== +globby@^13.1.1, globby@^13.1.3: + version "13.2.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.1.tgz#986d44187ba6a9fc4aa9b16caf0ab9a04db94ae9" + integrity sha512-DPCBxctI7dN4EeIqjW2KGqgdcUMbrhJ9AzON+PlxCtvppWhubTLD4+a0GFxiym14ZvacUydTPjLPc2DlKz7EIg== dependencies: dir-glob "^3.0.1" fast-glob "^3.2.11" @@ -4712,17 +4780,17 @@ google-auth-library@^7.14.0: lru-cache "^6.0.0" google-auth-library@^8.0.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-8.1.1.tgz#4068d2b1512b812d3d3dfbdc848452a0d5a550de" - integrity sha512-eG3pCfrLgVJe19KhAeZwW0m1LplNEo0FX1GboWf3hu18zD2jq8TUH2K8900AB2YRAuJ7A+1aSXDp1BODjwwRzg== + version "8.9.0" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-8.9.0.tgz#15a271eb2ec35d43b81deb72211bd61b1ef14dd0" + integrity sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg== dependencies: arrify "^2.0.0" base64-js "^1.3.0" ecdsa-sig-formatter "^1.0.11" fast-text-encoding "^1.0.0" gaxios "^5.0.0" - gcp-metadata "^5.0.0" - gtoken "^6.0.0" + gcp-metadata "^5.3.0" + gtoken "^6.1.0" jws "^4.0.0" lru-cache "^6.0.0" @@ -4753,16 +4821,33 @@ google-p12-pem@^3.1.3: node-forge "^1.3.1" google-p12-pem@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-4.0.0.tgz#f46581add1dc6ea0b96160cda6ce37ee35ab8ca3" - integrity sha512-lRTMn5ElBdDixv4a86bixejPSRk1boRtUowNepeKEVvYiFlkLuAJUVpEz6PfObDHYEKnZWq/9a2zC98xu62A9w== + version "4.0.1" + resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-4.0.1.tgz#82841798253c65b7dc2a4e5fe9df141db670172a" + integrity sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ== dependencies: node-forge "^1.3.1" +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.2.4, graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== gtoken@^5.0.4: version "5.3.2" @@ -4773,12 +4858,12 @@ gtoken@^5.0.4: google-p12-pem "^3.1.3" jws "^4.0.0" -gtoken@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-6.1.0.tgz#62938c679b364662ce21077858e0db3cfe025363" - integrity sha512-WPZcFw34wh2LUvbCUWI70GDhOlO7qHpSvFHFqq7d3Wvsf8dIJedE0lnUdOmsKuC0NgflKmF0LxIF38vsGeHHiQ== +gtoken@^6.1.0: + version "6.1.2" + resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-6.1.2.tgz#aeb7bdb019ff4c3ba3ac100bbe7b6e74dce0e8bc" + integrity sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ== dependencies: - gaxios "^4.0.0" + gaxios "^5.0.1" google-p12-pem "^4.0.0" jws "^4.0.0" @@ -4824,7 +4909,12 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" -has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== @@ -4848,7 +4938,7 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hoist-non-react-statics@^3.3.2: +hoist-non-react-statics@^3.3.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== @@ -4916,15 +5006,20 @@ idb@7.0.1: resolved "https://registry.yarnpkg.com/idb/-/idb-7.0.1.tgz#d2875b3a2f205d854ee307f6d196f246fea590a7" integrity sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg== +idb@7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/idb/-/idb-7.1.1.tgz#d910ded866d32c7ced9befc5bfdf36f572ced72b" + integrity sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ== + 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@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== iltorb@^2.4.3: version "2.4.5" @@ -4937,11 +5032,6 @@ iltorb@^2.4.3: prebuild-install "^5.3.3" which-pm-runs "^1.0.0" -immediate@~3.0.5: - version "3.0.6" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" - integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== - import-fresh@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" @@ -4989,12 +5079,12 @@ ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -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== +internal-slot@^1.0.3, internal-slot@^1.0.4, internal-slot@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== dependencies: - get-intrinsic "^1.1.0" + get-intrinsic "^1.2.0" has "^1.0.3" side-channel "^1.0.4" @@ -5003,6 +5093,23 @@ interpret@^2.2.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== +is-arguments@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -5030,26 +5137,19 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-callable@^1.1.4, is-callable@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" - integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.11.0: +is-core-module@^2.11.0, is-core-module@^2.9.0: version "2.12.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== dependencies: has "^1.0.3" -is-core-module@^2.8.1, is-core-module@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" - integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== - dependencies: - has "^1.0.3" - -is-date-object@^1.0.1: +is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== @@ -5107,6 +5207,11 @@ is-inside-container@^1.0.0: dependencies: is-docker "^3.0.0" +is-map@^2.0.1, is-map@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" + integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== + is-negative-zero@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" @@ -5124,6 +5229,11 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + 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" @@ -5144,6 +5254,11 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-set@^2.0.1, is-set@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" + integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== + is-shared-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" @@ -5180,6 +5295,22 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" +is-typed-array@^1.1.10, is-typed-array@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + +is-weakmap@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" + integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== + is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -5187,6 +5318,14 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" +is-weakset@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" + integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.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" @@ -5194,6 +5333,11 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -5215,9 +5359,9 @@ istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz#31d18bdd127f825dd02ea7bfdfd906f8ab840e9f" - integrity sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A== + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== dependencies: "@babel/core" "^7.12.3" "@babel/parser" "^7.14.7" @@ -5450,9 +5594,9 @@ jest-mock@^28.1.3: "@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== + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== jest-regex-util@^28.0.2: version "28.0.2" @@ -5632,10 +5776,10 @@ jest@^28.1.3: import-local "^3.0.2" jest-cli "^28.1.3" -jose@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/jose/-/jose-2.0.5.tgz#29746a18d9fff7dcf9d5d2a6f62cb0c7cd27abd3" - integrity sha512-BAiDNeDKTMgk4tvD0BbxJ8xHEHBZgpeRZ1zGPPsitSyMgjoMWiLGYAE7H7NpP5h0lPppQajQs871E8NHUrzVPA== +jose@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/jose/-/jose-2.0.6.tgz#894ba19169af339d3911be933f913dd02fc57c7c" + integrity sha512-FVoPY7SflDodE4lknJmbAHSUjLCzE2H1F6MS0RYKMQ8SR+lNccpMf8R4eqkNYyyUjR5qZReOzZo5C5YiHOCjjg== dependencies: "@panva/asn1.js" "^1.0.0" @@ -5764,17 +5908,17 @@ json5@^0.5.1: resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" integrity sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw== -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== +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" -json5@^2.1.2, json5@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" - integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== +json5@^2.1.2, json5@^2.2.1, json5@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonwebtoken@^8.5.1: version "8.5.1" @@ -5792,23 +5936,15 @@ jsonwebtoken@^8.5.1: ms "^2.1.1" semver "^5.6.0" -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.2.tgz#afe5efe4332cd3515c065072bd4d6b0aa22152bd" - integrity sha512-4ZCADZHRkno244xlNnn4AOG6sRQ7iBZ5BbgZ4vW4y5IZw7cVUD1PPeblm1xx/nfmMxPdt/LHsXZW8z/j58+l9Q== - dependencies: - array-includes "^3.1.5" - object.assign "^4.1.2" - -jszip@^3.6.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.0.tgz#faf3db2b4b8515425e34effcdbb086750a346061" - integrity sha512-LDfVtOLtOxb9RXkYOwPyNBTQDL4eUbqahtoY6x07GiDJHwSYvn8sHHIw8wINImV3MqbMNve2gSuM1DDqEKk09Q== +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3: + version "3.3.4" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz#b896535fed5b867650acce5a9bd4135ffc7b3bf9" + integrity sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw== dependencies: - lie "~3.3.0" - pako "~1.0.2" - readable-stream "~2.3.6" - setimmediate "^1.0.5" + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" jwa@^1.4.1: version "1.4.1" @@ -5829,14 +5965,14 @@ jwa@^2.0.0: safe-buffer "^5.0.1" jwks-rsa@^2.0.2: - version "2.1.4" - resolved "https://registry.yarnpkg.com/jwks-rsa/-/jwks-rsa-2.1.4.tgz#38ebfbe9cb4cdce3be070e6575796304917bae97" - integrity sha512-mpArfgPkUpX11lNtGxsF/szkasUcbWHGplZl/uFvFO2NuMHmt0dQXIihh0rkPU2yQd5niQtuUHbXnG/WKiXF6Q== + version "2.1.5" + resolved "https://registry.yarnpkg.com/jwks-rsa/-/jwks-rsa-2.1.5.tgz#bb7bf8c5767836bc273bf5b27870066aca39c1bb" + integrity sha512-IODtn1SwEm7n6GQZnQLY0oxKDrMh7n/jRH1MzE8mlxWMrh2NnMyOsXTebu8vJ1qCpmuTJcL4DdiE0E4h8jnwsA== dependencies: - "@types/express" "^4.17.13" - "@types/jsonwebtoken" "^8.5.8" + "@types/express" "^4.17.14" + "@types/jsonwebtoken" "^8.5.9" debug "^4.3.4" - jose "^2.0.5" + jose "^2.0.6" limiter "^1.1.5" lru-memoizer "^2.1.4" @@ -5878,7 +6014,7 @@ language-subtag-registry@~0.3.2: resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== -language-tags@^1.0.5: +language-tags@=1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== @@ -5898,21 +6034,6 @@ levn@^0.4.1: 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 sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lie@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" - integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== - dependencies: - immediate "~3.0.5" - limiter@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/limiter/-/limiter-1.1.5.tgz#8f92a25b3b16c6131293a0cc834b4a838a2aa7c2" @@ -5939,22 +6060,14 @@ loader-runner@^4.2.0: integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== loader-utils@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129" - integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A== + version "2.0.4" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== dependencies: big.js "^5.2.2" emojis-list "^3.0.0" json5 "^2.1.2" -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== - 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" @@ -5970,6 +6083,13 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" @@ -6041,9 +6161,9 @@ long@^4.0.0: integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== long@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/long/-/long-5.2.0.tgz#2696dadf4b4da2ce3f6f6b89186085d94d52fd61" - integrity sha512-9RTUNjK60eJbx3uz+TEGF7fUr29ZDxR5QzXcyDpeSfeH28S9ycINflOgOlppit5U+4kNTe83KQnMEerw7GmE8w== + version "5.2.3" + resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" + integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" @@ -6052,6 +6172,13 @@ loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" +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" @@ -6068,17 +6195,17 @@ lru-cache@~4.0.0: yallist "^2.0.0" lru-memoizer@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/lru-memoizer/-/lru-memoizer-2.1.4.tgz#b864d92b557f00b1eeb322156a0409cb06dafac6" - integrity sha512-IXAq50s4qwrOBrXJklY+KhgZF+5y98PDaNo0gi/v2KQBFLyWr+JyFvijZXkGKjQj/h9c0OwoE+JZbwUXce76hQ== + version "2.2.0" + resolved "https://registry.yarnpkg.com/lru-memoizer/-/lru-memoizer-2.2.0.tgz#b9d90c91637b4b1a423ef76f3156566691293df8" + integrity sha512-QfOZ6jNkxCcM/BkIPnFsqDhtrazLRsghi9mBwFAzol5GCvj4EkFT899Za3+QwikCg5sRX8JstioBDwOxEyzaNw== dependencies: lodash.clonedeep "^4.5.0" lru-cache "~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 sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ== +lz-string@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" + integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" @@ -6162,7 +6289,7 @@ mimic-response@^2.0.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== -minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -6170,9 +6297,9 @@ minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: brace-expansion "^1.1.7" minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: version "0.5.3" @@ -6194,11 +6321,6 @@ mrmime@^1.0.0: resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -6210,20 +6332,25 @@ ms@^2.1.1: integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== nan@^2.14.0: - version "2.16.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.16.0.tgz#664f43e45460fb98faf00edca0bb0d7b8dce7916" - integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA== + version "2.17.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" + integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== nanoid@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" - integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== napi-build-utils@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -6235,38 +6362,38 @@ neo-async@^2.5.0, neo-async@^2.6.2: integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== next-test-api-route-handler@^3.1.6: - version "3.1.6" - resolved "https://registry.yarnpkg.com/next-test-api-route-handler/-/next-test-api-route-handler-3.1.6.tgz#c0b82bf6440aafb4c47b0577b63055d49cec3815" - integrity sha512-pKK1ftOkQEGYodF39jh6iTEHSi8GaSPRB1KUvGkGZKCX+y2+mnTLYcUHueC7ODLN3KhpTwuRYtBQFhdJLSAYPQ== + version "3.1.8" + resolved "https://registry.yarnpkg.com/next-test-api-route-handler/-/next-test-api-route-handler-3.1.8.tgz#a883a765670e939e9c625b8d11e680539a0ab89b" + integrity sha512-8o+TjtlQdvLv7YmR5NOl+AQCM/tEZqB1mvqBeGFQscuGtL+42fOrOsDFv2QsFUWieUMKv7j7NqOmYMpJRPu3/w== dependencies: cookie "^0.5.0" node-fetch "^2.6.7" next@^12.2.3: - version "12.2.3" - resolved "https://registry.yarnpkg.com/next/-/next-12.2.3.tgz#c29d235ce480e589894dfab3120dade25d015a22" - integrity sha512-TA0tmSA6Dk6S6kfvCNbF7CWYW8468gZUxr/3/30z4KvAQbXnl2ASYZElVe7q/hBW/1F1ee0tSBlHa4/sn+ZIBw== + version "12.3.4" + resolved "https://registry.yarnpkg.com/next/-/next-12.3.4.tgz#f2780a6ebbf367e071ce67e24bd8a6e05de2fcb1" + integrity sha512-VcyMJUtLZBGzLKo3oMxrEF0stxh8HwuW976pAzlHhI3t8qJ4SROjCrSh1T24bhrbjw55wfZXAbXPGwPt5FLRfQ== dependencies: - "@next/env" "12.2.3" - "@swc/helpers" "0.4.3" - caniuse-lite "^1.0.30001332" + "@next/env" "12.3.4" + "@swc/helpers" "0.4.11" + caniuse-lite "^1.0.30001406" postcss "8.4.14" - styled-jsx "5.0.2" + styled-jsx "5.0.7" use-sync-external-store "1.2.0" optionalDependencies: - "@next/swc-android-arm-eabi" "12.2.3" - "@next/swc-android-arm64" "12.2.3" - "@next/swc-darwin-arm64" "12.2.3" - "@next/swc-darwin-x64" "12.2.3" - "@next/swc-freebsd-x64" "12.2.3" - "@next/swc-linux-arm-gnueabihf" "12.2.3" - "@next/swc-linux-arm64-gnu" "12.2.3" - "@next/swc-linux-arm64-musl" "12.2.3" - "@next/swc-linux-x64-gnu" "12.2.3" - "@next/swc-linux-x64-musl" "12.2.3" - "@next/swc-win32-arm64-msvc" "12.2.3" - "@next/swc-win32-ia32-msvc" "12.2.3" - "@next/swc-win32-x64-msvc" "12.2.3" + "@next/swc-android-arm-eabi" "12.3.4" + "@next/swc-android-arm64" "12.3.4" + "@next/swc-darwin-arm64" "12.3.4" + "@next/swc-darwin-x64" "12.3.4" + "@next/swc-freebsd-x64" "12.3.4" + "@next/swc-linux-arm-gnueabihf" "12.3.4" + "@next/swc-linux-arm64-gnu" "12.3.4" + "@next/swc-linux-arm64-musl" "12.3.4" + "@next/swc-linux-x64-gnu" "12.3.4" + "@next/swc-linux-x64-musl" "12.3.4" + "@next/swc-win32-arm64-msvc" "12.3.4" + "@next/swc-win32-ia32-msvc" "12.3.4" + "@next/swc-win32-x64-msvc" "12.3.4" nice-try@^1.0.4: version "1.0.5" @@ -6287,13 +6414,20 @@ node-dir@^0.1.17: dependencies: minimatch "^3.0.2" -node-fetch@2.6.7, node-fetch@^2.6.1, node-fetch@^2.6.7: +node-fetch@2.6.7: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== dependencies: whatwg-url "^5.0.0" +node-fetch@^2.6.1, node-fetch@^2.6.7, node-fetch@^2.6.9: + version "2.6.12" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.12.tgz#02eb8e22074018e3d5a83016649d04df0e348fba" + integrity sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g== + dependencies: + whatwg-url "^5.0.0" + node-forge@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" @@ -6304,10 +6438,10 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" - integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== +node-releases@^2.0.12: + version "2.0.12" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039" + integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== noop-logger@^0.1.1: version "0.1.1" @@ -6374,9 +6508,9 @@ number-is-nan@^1.0.0: integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== nwsapi@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.1.tgz#10a9f268fbf4c461249ebcfe38e359aa36e2577c" - integrity sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg== + version "2.2.5" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.5.tgz#a52744c61b3889dd44b0a158687add39b8d935e2" + integrity sha512-6xpotnECFy/og7tKSBVmUNft7J3jyXAka4XvG6AUhFWRz+Q/Ljus7znJAA3bxColfQLdS+XsjoodtJfCgeTEFQ== object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" @@ -6388,60 +6522,68 @@ object-hash@^3.0.0: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== -object-inspect@^1.12.0, object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== +object-inspect@^1.12.3, object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +object-is@^1.1.5: + 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.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.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== +object.assign@^4.1.2, object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" - integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== +object.entries@^1.1.5, object.entries@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" + integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" -object.fromentries@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251" - integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw== +object.fromentries@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" + integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" -object.hasown@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.1.tgz#ad1eecc60d03f49460600430d97f23882cf592a3" - integrity sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A== +object.hasown@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" + integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== dependencies: define-properties "^1.1.4" - es-abstract "^1.19.5" + es-abstract "^1.20.4" -object.values@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" - integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== +object.values@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" @@ -6479,36 +6621,17 @@ opener@^1.5.2: resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== -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== +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" 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-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" @@ -6517,20 +6640,13 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.0.1, p-limit@^3.1.0: +p-limit@^3.0.1, p-limit@^3.0.2, p-limit@^3.1.0: 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 sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== - 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" @@ -6545,21 +6661,18 @@ p-locate@^4.1.0: 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 sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" 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.2: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -6663,9 +6776,9 @@ pify@^4.0.1: integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== pirates@^4.0.4, pirates@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" - integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + version "4.0.6" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== pkg-dir@^3.0.0: version "3.0.0" @@ -6723,11 +6836,6 @@ prelude-ls@^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 sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== - 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" @@ -6771,11 +6879,6 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -promise-polyfill@8.1.3: - version "8.1.3" - resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.1.3.tgz#8c99b3cf53f3a91c68226ffde7bde81d7f904116" - integrity sha512-MG5r82wBzh7pSKDRa9y+vllNHz3e3d4CNj1PQE4BQYxLme0gKYYBm9YENq+UkEikyZ0XbiGWxYlVw3Rl9O/U8g== - prompts@^2.0.1: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" @@ -6820,9 +6923,9 @@ protobufjs@6.11.3, protobufjs@^6.11.2, protobufjs@^6.11.3, protobufjs@^6.8.6: long "^4.0.0" protobufjs@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.0.0.tgz#8c678e1351fd926178fce5a4213913e8d990974f" - integrity sha512-ffNIEm+quOcYtQvHdW406v1NQmZSuqVklxsXk076BtuFnlYZfigLU+JOMrTD8TUOyqHYbRI/fSVNvgd25YeN3w== + version "7.2.4" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.2.4.tgz#3fc1ec0cdc89dd91aef9ba6037ba07408485c3ae" + integrity sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ== dependencies: "@protobufjs/aspromise" "^1.1.2" "@protobufjs/base64" "^1.1.2" @@ -6834,7 +6937,6 @@ protobufjs@^7.0.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 "^5.0.0" @@ -6856,19 +6958,15 @@ pump@^3.0.0: 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== + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +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" @@ -6955,10 +7053,10 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -readable-stream@^2.0.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== +readable-stream@^2.0.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -6969,9 +7067,9 @@ readable-stream@^2.0.6, readable-stream@~2.3.6: util-deprecate "~1.0.1" 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== + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -7001,10 +7099,10 @@ rechoir@^0.7.0: dependencies: resolve "^1.9.0" -regenerate-unicode-properties@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" - integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== +regenerate-unicode-properties@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" + integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== dependencies: regenerate "^1.4.2" @@ -7013,53 +7111,43 @@ regenerate@^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.13.4, regenerator-runtime@^0.13.9: - version "0.13.9" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== +regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.9: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== -regenerator-transform@^0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537" - integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== +regenerator-transform@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" + integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== dependencies: "@babel/runtime" "^7.8.4" -regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== +regexp.prototype.flags@^1.4.3, regexp.prototype.flags@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" + integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" - -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + define-properties "^1.2.0" + functions-have-names "^1.2.3" -regexpu-core@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.1.0.tgz#2f8504c3fd0ebe11215783a41541e21c79942c6d" - integrity sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA== +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== dependencies: + "@babel/regjsgen" "^0.8.0" regenerate "^1.4.2" - regenerate-unicode-properties "^10.0.1" - regjsgen "^0.6.0" - regjsparser "^0.8.2" + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.0.0" - -regjsgen@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" - integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== + unicode-match-property-value-ecmascript "^2.1.0" -regjsparser@^0.8.2: - version "0.8.4" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" - integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== dependencies: jsesc "~0.5.0" @@ -7073,10 +7161,15 @@ require-from-string@^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== +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + reselect@^4.0.0: - version "4.1.6" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.6.tgz#19ca2d3d0b35373a74dc1c98692cdaffb6602656" - integrity sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ== + version "4.1.8" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524" + integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ== resolve-cwd@^3.0.0: version "3.0.0" @@ -7100,21 +7193,26 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + resolve.exports@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" - integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== + version "1.1.1" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" + integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== -resolve@^1.10.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.9.0: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== +resolve@^1.10.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.9.0: + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== dependencies: - is-core-module "^2.9.0" + is-core-module "^2.11.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^2.0.0-next.3: +resolve@^2.0.0-next.4: version "2.0.0-next.4" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== @@ -7132,9 +7230,9 @@ retry-request@^4.0.0: extend "^3.0.2" retry-request@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/retry-request/-/retry-request-5.0.1.tgz#c6be2a4a36f1554ba3251fa8fd945af26ee0e9ec" - integrity sha512-lxFKrlBt0OZzCWh/V0uPEN0vlr3OhdeXnpeY5OES+ckslm791Cb1D5P7lJUSnY7J5hiCjcyaUGmzCnIGDCUBig== + version "5.0.2" + resolved "https://registry.yarnpkg.com/retry-request/-/retry-request-5.0.2.tgz#143d85f90c755af407fcc46b7166a4ba520e44da" + integrity sha512-wfI3pk7EE80lCIXprqh7ym48IHYdwmAAzESdbU8Q9l7pnRCk9LEhpbOTNKjz6FARLm/Bl5m+4F0ABxOkYUujSQ== dependencies: debug "^4.1.1" extend "^3.0.2" @@ -7187,6 +7285,15 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -7215,48 +7322,34 @@ schema-utils@^2.6.5: ajv "^6.12.4" ajv-keywords "^3.5.2" -schema-utils@^3.1.0, schema-utils@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== +schema-utils@^3.1.1, schema-utils@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" + integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== dependencies: "@types/json-schema" "^7.0.8" ajv "^6.12.5" ajv-keywords "^3.5.2" schema-utils@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" - integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== + version "4.2.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" + integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== dependencies: "@types/json-schema" "^7.0.9" - ajv "^8.8.0" + ajv "^8.9.0" ajv-formats "^2.1.1" - ajv-keywords "^5.0.0" - -selenium-webdriver@4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.1.2.tgz#d463b4335632d2ea41a9e988e435a55dc41f5314" - integrity sha512-e4Ap8vQvhipgBB8Ry9zBiKGkU6kHKyNnWiavGGLKkrdW81Zv7NVMtFOL/j3yX0G8QScM7XIXijKssNd4EUxSOw== - dependencies: - jszip "^3.6.0" - tmp "^0.2.1" - ws ">=7.4.6" + ajv-keywords "^5.1.0" "semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, 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.x, semver@^7.3.4: - version "7.5.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" - integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== +semver@7.x, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: + version "7.5.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== dependencies: lru-cache "^6.0.0" @@ -7265,17 +7358,10 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.5, semver@^7.3.7: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" - -serialize-javascript@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== +serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" + integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== dependencies: randombytes "^2.1.0" @@ -7285,14 +7371,9 @@ set-blocking@~2.0.0: integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== set-cookie-parser@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.5.0.tgz#96b59525e1362c94335c3c761100bb6e8f2da4b0" - integrity sha512-cHMAtSXilfyBePduZEBVPTCftTQWz6ehWJD5YNUg4mqvRosrrjKbo4WS8JkB0/RxonMoohHm7cOGH60mDkRQ9w== - -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + version "2.6.0" + resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz#131921e50f62ff1a66a461d7d62d7b21d5d15a51" + integrity sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ== shallow-clone@^3.0.0: version "3.0.1" @@ -7326,9 +7407,9 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.6.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" - integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== side-channel@^1.0.4: version "1.0.4" @@ -7423,9 +7504,9 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 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== + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" @@ -7444,9 +7525,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.11" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" - integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== + version "3.0.13" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" + integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== sprintf-js@~1.0.2: version "1.0.3" @@ -7454,13 +7535,20 @@ sprintf-js@~1.0.2: integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== stack-utils@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" - integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== dependencies: escape-string-regexp "^2.0.0" -stream-events@^1.0.4, stream-events@^1.0.5: +stop-iteration-iterator@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" + integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== + dependencies: + internal-slot "^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== @@ -7498,46 +7586,55 @@ string-width@^1.0.1: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string.prototype.matchall@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" - integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== +string.prototype.matchall@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" + integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - get-intrinsic "^1.1.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" has-symbols "^1.0.3" internal-slot "^1.0.3" - regexp.prototype.flags "^1.4.1" + regexp.prototype.flags "^1.4.3" side-channel "^1.0.4" string.prototype.padend@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz#997a6de12c92c7cb34dc8a201a6c53d9bd88a5f1" - integrity sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg== + version "3.1.4" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz#2c43bb3a89eb54b6750de5942c123d6c98dd65b6" + integrity sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" -string.prototype.trimend@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" - integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== +string.prototype.trim@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" + integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== dependencies: call-bind "^1.0.2" define-properties "^1.1.4" - es-abstract "^1.19.5" + es-abstract "^1.20.4" -string.prototype.trimstart@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" - integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== dependencies: call-bind "^1.0.2" define-properties "^1.1.4" - es-abstract "^1.19.5" + es-abstract "^1.20.4" string_decoder@^1.1.1: version "1.3.0" @@ -7602,10 +7699,10 @@ stubs@^3.0.0: resolved "https://registry.yarnpkg.com/stubs/-/stubs-3.0.0.tgz#e8d2ba1fa9c90570303c030b6900f7d5f89abe5b" integrity sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw== -styled-jsx@5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.0.2.tgz#ff230fd593b737e9e68b630a694d460425478729" - integrity sha512-LqPQrbBh3egD57NBcHET4qcgshPks+yblyhPlH2GY8oaDgKs8SK4C3dBh3oSJjgzJ3G5t1SYEZGHkP+QEpX9EQ== +styled-jsx@5.0.7: + version "5.0.7" + resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.0.7.tgz#be44afc53771b983769ac654d355ca8d019dff48" + integrity sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA== supports-color@^4.0.0: version "4.5.0" @@ -7636,9 +7733,9 @@ supports-color@^8.0.0: 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== + version "2.3.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== dependencies: has-flag "^4.0.0" supports-color "^7.0.0" @@ -7688,15 +7785,15 @@ tar-stream@^2.1.4: readable-stream "^3.1.1" teeny-request@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-8.0.0.tgz#9614410ba70114fd28ba7bf5077dce3e2f02adf7" - integrity sha512-6KEYxXI4lQPSDkXzXpPmJPNmo7oqduFFbhOEHf8sfsLbXyCsb+umUjBtMGAKhaSToD8JNCtQutTRefu29K64JA== + version "8.0.3" + resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-8.0.3.tgz#5cb9c471ef5e59f2fca8280dc3c5909595e6ca24" + integrity sha512-jJZpA5He2y52yUhA7pyAGZlgQpcB+xLjcN0eUFxr9c8hP/H7uOXbBNVo/O0C/xVfJLJs680jvkFgVJEEvk9+ww== dependencies: http-proxy-agent "^5.0.0" https-proxy-agent "^5.0.0" node-fetch "^2.6.1" stream-events "^1.0.5" - uuid "^8.0.0" + uuid "^9.0.0" temp@^0.8.4: version "0.8.4" @@ -7713,24 +7810,24 @@ terminal-link@^2.0.0: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" -terser-webpack-plugin@^5.1.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz#8033db876dd5875487213e87c627bca323e5ed90" - integrity sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ== +terser-webpack-plugin@^5.3.7: + version "5.3.9" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" + integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== dependencies: - "@jridgewell/trace-mapping" "^0.3.7" + "@jridgewell/trace-mapping" "^0.3.17" jest-worker "^27.4.5" schema-utils "^3.1.1" - serialize-javascript "^6.0.0" - terser "^5.7.2" + serialize-javascript "^6.0.1" + terser "^5.16.8" -terser@^5.7.2: - version "5.14.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10" - integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA== +terser@^5.16.8: + version "5.18.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.18.2.tgz#ff3072a0faf21ffd38f99acc9a0ddf7b5f07b948" + integrity sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w== dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" commander "^2.20.0" source-map-support "~0.5.20" @@ -7758,13 +7855,6 @@ titleize@^3.0.0: resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53" integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ== -tmp@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -7788,13 +7878,14 @@ totalist@^1.0.0: integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== 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== + version "4.1.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" + integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== dependencies: psl "^1.1.33" punycode "^2.1.1" - universalify "^0.1.2" + universalify "^0.2.0" + url-parse "^1.5.3" tr46@^3.0.0: version "3.0.0" @@ -7823,22 +7914,40 @@ ts-jest@^28: yargs-parser "^21.0.1" ts-loader@^9.4.3: - version "9.4.3" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.4.3.tgz#55cfa7c28dd82a2de968ae45c3adb75fb888b27e" - integrity sha512-n3hBnm6ozJYzwiwt5YRiJZkzktftRpMiBApHaJPoWLA+qetQBAXkHqCLM6nwSdRDimqVtA5ocIkcTRLMTt7yzA== + version "9.4.4" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.4.4.tgz#6ceaf4d58dcc6979f84125335904920884b7cee4" + integrity sha512-MLukxDHBl8OJ5Dk3y69IsKVFRA/6MwzEqBgh+OXMPB/OD01KQuWPFd1WAQP8a5PeSCAxfnkhiuWqfmFJzJQt9w== dependencies: chalk "^4.1.0" enhanced-resolve "^5.0.0" micromatch "^4.0.0" semver "^7.3.4" +tsconfig-paths-webpack-plugin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.0.1.tgz#a24651d0f69668a1abad38d3c2489855c257460d" + integrity sha512-m5//KzLoKmqu2MVix+dgLKq70MnFi8YL8sdzQZ6DblmCdfuq/y3OqvJd5vMndg2KEVCOeNz8Es4WVZhYInteLw== + dependencies: + chalk "^4.1.0" + enhanced-resolve "^5.7.0" + tsconfig-paths "^4.1.2" + tsconfig-paths@^3.14.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" - integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + version "3.14.2" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" + integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== dependencies: "@types/json5" "^0.0.29" - json5 "^1.0.1" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tsconfig-paths@^4.1.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + dependencies: + json5 "^2.2.2" minimist "^1.2.6" strip-bom "^3.0.0" @@ -7847,15 +7956,10 @@ tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.1, tslib@^2.1.0, tslib@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - -tslib@^2.5.0: - version "2.5.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.2.tgz#1b6f07185c881557b0ffa84b111a0106989e8338" - integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA== +tslib@^2.0.1, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.5.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" + integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== tsscmp@1.0.6: version "1.0.6" @@ -7883,13 +7987,6 @@ type-check@^0.4.0, type-check@~0.4.0: 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 sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== - 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" @@ -7905,10 +8002,19 @@ type-fest@^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== +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + typescript@^4.7.4: - version "4.7.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" - integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== unbox-primitive@^1.0.2: version "1.0.2" @@ -7933,38 +8039,30 @@ unicode-match-property-ecmascript@^2.0.0: unicode-canonical-property-names-ecmascript "^2.0.0" unicode-property-aliases-ecmascript "^2.0.0" -unicode-match-property-value-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" - integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== unicode-property-aliases-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" - integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== -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@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== untildify@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== -update-browserslist-db@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38" - integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -update-browserslist-db@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" - integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== +update-browserslist-db@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== dependencies: escalade "^3.1.1" picocolors "^1.0.0" @@ -7976,6 +8074,14 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +url-parse@^1.5.3: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + use-sync-external-store@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" @@ -7991,15 +8097,15 @@ uuid@^8.0.0, uuid@^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== +uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== v8-to-istanbul@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4" - integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== + version "9.1.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265" + integrity sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA== dependencies: "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" @@ -8034,7 +8140,7 @@ walker@^1.0.8: dependencies: makeerror "1.0.12" -watchpack@^2.3.1: +watchpack@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== @@ -8053,10 +8159,11 @@ webidl-conversions@^7.0.0: integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== webpack-bundle-analyzer@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz#1b0eea2947e73528754a6f9af3e91b2b6e0f79d5" - integrity sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ== + version "4.9.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.0.tgz#fc093c4ab174fd3dcbd1c30b763f56d10141209d" + integrity sha512-+bXGmO1LyiNx0i9enBu3H8mv42sj/BJWhZNFwjz92tVnBa9J3JMGo2an2IXlEleoDOPn/Hofl5hr/xCpObUDtw== dependencies: + "@discoveryjs/json-ext" "0.5.7" acorn "^8.0.4" acorn-walk "^8.0.0" chalk "^4.1.0" @@ -8086,9 +8193,9 @@ webpack-cli@^4.10.0: webpack-merge "^5.7.3" webpack-merge@^5.7.3: - version "5.8.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" - integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== + version "5.9.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.9.0.tgz#dc160a1c4cf512ceca515cc231669e9ddb133826" + integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg== dependencies: clone-deep "^4.0.1" wildcard "^2.0.0" @@ -8104,21 +8211,21 @@ webpack-sources@^3.2.3: integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== webpack@^5.73.0: - version "5.73.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.73.0.tgz#bbd17738f8a53ee5760ea2f59dce7f3431d35d38" - integrity sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA== + version "5.88.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.88.1.tgz#21eba01e81bd5edff1968aea726e2fbfd557d3f8" + integrity sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ== dependencies: "@types/eslint-scope" "^3.7.3" - "@types/estree" "^0.0.51" - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/wasm-edit" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - acorn "^8.4.1" - acorn-import-assertions "^1.7.6" + "@types/estree" "^1.0.0" + "@webassemblyjs/ast" "^1.11.5" + "@webassemblyjs/wasm-edit" "^1.11.5" + "@webassemblyjs/wasm-parser" "^1.11.5" + acorn "^8.7.1" + acorn-import-assertions "^1.9.0" browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.9.3" - es-module-lexer "^0.9.0" + enhanced-resolve "^5.15.0" + es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" @@ -8127,10 +8234,10 @@ webpack@^5.73.0: loader-runner "^4.2.0" mime-types "^2.1.27" neo-async "^2.6.2" - schema-utils "^3.1.0" + schema-utils "^3.2.0" tapable "^2.1.1" - terser-webpack-plugin "^5.1.3" - watchpack "^2.3.1" + terser-webpack-plugin "^5.3.7" + watchpack "^2.4.0" webpack-sources "^3.2.3" websocket-driver@>=0.5.1: @@ -8154,11 +8261,6 @@ whatwg-encoding@^2.0.0: dependencies: iconv-lite "0.6.3" -whatwg-fetch@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" - integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng== - whatwg-mimetype@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" @@ -8199,11 +8301,33 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-collection@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" + integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== + dependencies: + is-map "^2.0.1" + is-set "^2.0.1" + is-weakmap "^2.0.1" + is-weakset "^2.0.1" + which-pm-runs@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.1.0.tgz#35ccf7b1a0fce87bd8b92a478c9d045785d3bf35" integrity sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA== +which-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" + which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -8226,14 +8350,9 @@ wide-align@^1.1.0: string-width "^1.0.2 || 2 || 3 || 4" wildcard@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" - integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== - -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== + version "2.0.1" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== wrap-ansi@^7.0.0: version "7.0.0" @@ -8259,23 +8378,23 @@ write-file-atomic@^2.3.0: signal-exit "^3.0.2" write-file-atomic@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.1.tgz#9faa33a964c1c85ff6f849b80b42a88c2c537c8f" - integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== dependencies: imurmurhash "^0.1.4" signal-exit "^3.0.7" -ws@>=7.4.6, ws@^8.2.3: - version "8.8.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0" - integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== - ws@^7.3.1: version "7.5.9" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== +ws@^8.2.3: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + xml-name-validator@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" @@ -8296,6 +8415,11 @@ yallist@^2.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== +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" @@ -8306,11 +8430,6 @@ yargs-parser@^20.2.2: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-parser@^21.0.0: - version "21.0.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" - integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== - yargs-parser@^21.0.1, yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" @@ -8329,20 +8448,7 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.3.1: - version "17.5.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" - integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.0.0" - -yargs@^17.7.2: +yargs@^17.3.1, yargs@^17.7.2: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==