diff --git a/jest.config.ts b/jest.config.ts index 0f1912a3..31d4f988 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -1,4 +1,5 @@ module.exports = { + setupFiles: ['/test-env-vars.ts'], collectCoverage: true, // on node 14.x coverage provider v8 offers good speed and more or less good report coverageProvider: 'v8', @@ -30,6 +31,7 @@ module.exports = { // setupFilesAfterEnv: ['/jest.setup.js'], testPathIgnorePatterns: ['/node_modules/', '/.next/'], testEnvironment: 'jsdom', + testTimeout: 30000, transform: { // Use babel-jest to transpile tests with the next/babel preset // https://jestjs.io/docs/configuration#transform-objectstring-pathtotransformer--pathtotransformer-object diff --git a/jest.setup.ts b/jest.setup.ts index 666127af..f7b5c651 100644 --- a/jest.setup.ts +++ b/jest.setup.ts @@ -1 +1,2 @@ import '@testing-library/jest-dom/extend-expect'; +import '@inrupt/jest-jsdom-polyfills'; diff --git a/jest/index.ts b/jest/index.ts new file mode 100644 index 00000000..2bd584ff --- /dev/null +++ b/jest/index.ts @@ -0,0 +1,43 @@ +import { Collection, Db, MongoClient } from 'mongodb'; +import { User, SingletonDefinition } from '../common/types'; + +export type NextAuthVerificationToken = { + identifier: string; + token: string; + expires: Date; +}; +export type JestMongoCtx = { + client: MongoClient; + serverDb: { + db: Db; + userDataCollection: Collection; + singletonDataCollection: Collection; + }; + nextAuthDb: { + db: Db; + verificationTokens: Collection; + }; +}; + +// can't use normal connectToDatabase because we don't have access to env vars +export const jestConnectToDatabase = async (): Promise => { + const port = 27017; + const username = 'admin'; + const password = 'password'; + const connectionString = `mongodb://${username}:${password}@localhost:${port}`; + const client = await new MongoClient(connectionString).connect(); + const serverDb = client.db('HackbeanpotCluster'); + const nextAuthDb = client.db('next-auth'); + return { + client, + serverDb: { + db: serverDb, + userDataCollection: serverDb.collection('applicant_data'), + singletonDataCollection: serverDb.collection('singleton_data'), + }, + nextAuthDb: { + db: nextAuthDb, + verificationTokens: nextAuthDb.collection('verification_tokens'), + }, + }; +}; diff --git a/package.json b/package.json index 3858dabc..889f715b 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ }, "dependencies": { "@google-cloud/storage": "^6.5.2", + "@inrupt/jest-jsdom-polyfills": "^1.3.0", "@next-auth/mongodb-adapter": "0.0.2-next.281", "@rollbar/react": "^0.8.0", "antd": "^4.18.2", @@ -26,6 +27,7 @@ "mongodb": "^4.1.2", "next": "^11.0.1", "next-auth": "4.0.0-beta.4", + "node-mocks-http": "^1.11.0", "nodemailer": "^6.7.0", "react": "^17.0.2", "react-dom": "^17.0.2", @@ -43,7 +45,7 @@ "@typescript-eslint/eslint-plugin": "^4.28.3", "babel-jest": "^29.1.2", "cypress": "^9.2.0", - "eslint": "^7.30.0", + "eslint": "^8.26.0", "eslint-config-next": "^11.0.1", "eslint-config-prettier": "^8.3.0", "husky": ">=6", diff --git a/pages/api/v1/dates/confirm-by/index.test.ts b/pages/api/v1/dates/confirm-by/index.test.ts new file mode 100644 index 00000000..ba9e0a9c --- /dev/null +++ b/pages/api/v1/dates/confirm-by/index.test.ts @@ -0,0 +1,52 @@ +import { expect, it, beforeEach, afterEach } from '@jest/globals'; +import { jestConnectToDatabase, JestMongoCtx } from '../../../../../jest'; +import { DateSingleton, SingletonType } from '../../../../../common/types'; + +describe('confirmByDate', () => { + let ctx: JestMongoCtx; + const initialConfirmByDate = '2022-10-01T22:40:02.000Z'; + const updatedConfirmByDate = '2022-10-04T22:40:02.000Z'; + + beforeEach(async () => { + ctx = await jestConnectToDatabase(); + await ctx.serverDb.singletonDataCollection.updateOne( + { type: SingletonType.ConfirmBy }, + { + $set: { value: initialConfirmByDate }, + }, + { upsert: true } + ); + }); + + it('is correctly fetched from mongodb', async () => { + const getConfirmByDate = (await ctx.serverDb.singletonDataCollection.findOne({ + type: SingletonType.ConfirmBy, + })) as DateSingleton; + expect(getConfirmByDate.value).toBe(initialConfirmByDate); + }); + + it('is posted correctly to mongodb', async () => { + let getConfirmByDate = (await ctx.serverDb.singletonDataCollection.findOne({ + type: SingletonType.ConfirmBy, + })) as DateSingleton; + expect(getConfirmByDate.value).toBe(initialConfirmByDate); + + await ctx.serverDb.singletonDataCollection.updateOne( + { type: SingletonType.ConfirmBy }, + { + $set: { value: updatedConfirmByDate }, + }, + { upsert: true } + ); + + getConfirmByDate = (await ctx.serverDb.singletonDataCollection.findOne({ + type: SingletonType.ConfirmBy, + })) as DateSingleton; + expect(getConfirmByDate.value).toBe(updatedConfirmByDate); + }); + + afterEach(async () => { + await ctx.serverDb.singletonDataCollection.deleteOne({type: SingletonType.ConfirmBy}); + await ctx.client.close(); + }); +}); diff --git a/pages/api/v1/dates/confirm-by.ts b/pages/api/v1/dates/confirm-by/index.ts similarity index 69% rename from pages/api/v1/dates/confirm-by.ts rename to pages/api/v1/dates/confirm-by/index.ts index 900c2fe2..e71ddea2 100644 --- a/pages/api/v1/dates/confirm-by.ts +++ b/pages/api/v1/dates/confirm-by/index.ts @@ -1,7 +1,7 @@ import { NextApiHandler } from 'next'; -import { protect } from '../../../../server/protect'; -import { getDate, postDate } from '../../../../server/dates'; -import { SingletonType } from '../../../../common/types'; +import { protect } from '../../../../../server/protect'; +import { getDate, postDate } from '../../../../../server/dates/dates'; +import { SingletonType } from '../../../../../common/types'; const confirmByHandler: NextApiHandler = async (req, res) => { switch (req.method) { diff --git a/pages/api/v1/dates/registration-closed/index.test.ts b/pages/api/v1/dates/registration-closed/index.test.ts new file mode 100644 index 00000000..172dd862 --- /dev/null +++ b/pages/api/v1/dates/registration-closed/index.test.ts @@ -0,0 +1,52 @@ +import { expect, it, beforeEach, afterEach } from '@jest/globals'; +import { jestConnectToDatabase, JestMongoCtx } from '../../../../../jest'; +import { DateSingleton, SingletonType } from '../../../../../common/types'; + +describe('registrationClosedDate', () => { + let ctx: JestMongoCtx; + const initialRegistrationClosedDate = '2022-10-01T22:40:02.000Z'; + const updatedRegistrationClosedDate = '2022-10-04T22:40:02.000Z'; + + beforeEach(async () => { + ctx = await jestConnectToDatabase(); + await ctx.serverDb.singletonDataCollection.updateOne( + { type: SingletonType.RegistrationClosed }, + { + $set: { value: initialRegistrationClosedDate }, + }, + { upsert: true } + ); + }); + + it('is correctly fetched from mongodb', async () => { + const getConfirmByDate = (await ctx.serverDb.singletonDataCollection.findOne({ + type: SingletonType.RegistrationClosed, + })) as DateSingleton; + expect(getConfirmByDate.value).toBe(initialRegistrationClosedDate); + }); + + it('is posted correctly to mongodb', async () => { + let getRegistrationClosedDate = (await ctx.serverDb.singletonDataCollection.findOne({ + type: SingletonType.RegistrationClosed, + })) as DateSingleton; + expect(getRegistrationClosedDate.value).toBe(initialRegistrationClosedDate); + + await ctx.serverDb.singletonDataCollection.updateOne( + { type: SingletonType.RegistrationClosed }, + { + $set: { value: updatedRegistrationClosedDate }, + }, + { upsert: true } + ); + + getRegistrationClosedDate = (await ctx.serverDb.singletonDataCollection.findOne({ + type: SingletonType.RegistrationClosed, + })) as DateSingleton; + expect(getRegistrationClosedDate.value).toBe(updatedRegistrationClosedDate); + }); + + afterEach(async () => { + await ctx.serverDb.singletonDataCollection.deleteOne({type: SingletonType.RegistrationClosed}); + await ctx.client.close(); + }); +}); diff --git a/pages/api/v1/dates/registration-closed.ts b/pages/api/v1/dates/registration-closed/index.ts similarity index 70% rename from pages/api/v1/dates/registration-closed.ts rename to pages/api/v1/dates/registration-closed/index.ts index 805f46a3..1b90318b 100644 --- a/pages/api/v1/dates/registration-closed.ts +++ b/pages/api/v1/dates/registration-closed/index.ts @@ -1,7 +1,7 @@ import { NextApiHandler } from 'next'; -import { protect } from '../../../../server/protect'; -import { getDate, postDate } from '../../../../server/dates'; -import { SingletonType } from '../../../../common/types'; +import { protect } from '../../../../../server/protect'; +import { getDate, postDate } from '../../../../../server/dates/dates'; +import { SingletonType } from '../../../../../common/types'; const regClosedHandler: NextApiHandler = async (req, res) => { switch (req.method) { diff --git a/pages/api/v1/dates/registration-open/index.test.ts b/pages/api/v1/dates/registration-open/index.test.ts new file mode 100644 index 00000000..8a22ed75 --- /dev/null +++ b/pages/api/v1/dates/registration-open/index.test.ts @@ -0,0 +1,52 @@ +import { expect, it, beforeEach, afterEach } from '@jest/globals'; +import { jestConnectToDatabase, JestMongoCtx } from '../../../../../jest'; +import { DateSingleton, SingletonType } from '../../../../../common/types'; + +describe('registrationOpenDate', () => { + let ctx: JestMongoCtx; + const initialRegistrationOpenDate = '2022-10-01T22:40:02.000Z'; + const updatedRegistrationOpenDate = '2022-10-04T22:40:02.000Z'; + + beforeEach(async () => { + ctx = await jestConnectToDatabase(); + await ctx.serverDb.singletonDataCollection.updateOne( + { type: SingletonType.RegistrationOpen }, + { + $set: { value: initialRegistrationOpenDate }, + }, + { upsert: true } + ); + }); + + it('is correctly fetched from mongodb', async () => { + const getRegistrationOpenDate = (await ctx.serverDb.singletonDataCollection.findOne({ + type: SingletonType.RegistrationOpen, + })) as DateSingleton; + expect(getRegistrationOpenDate.value).toBe(initialRegistrationOpenDate); + }); + + it('is posted correctly to mongodb', async () => { + let getRegistrationOpenDate = (await ctx.serverDb.singletonDataCollection.findOne({ + type: SingletonType.RegistrationOpen, + })) as DateSingleton; + expect(getRegistrationOpenDate.value).toBe(initialRegistrationOpenDate); + + await ctx.serverDb.singletonDataCollection.updateOne( + { type: SingletonType.RegistrationOpen }, + { + $set: { value: updatedRegistrationOpenDate }, + }, + { upsert: true } + ); + + getRegistrationOpenDate = (await ctx.serverDb.singletonDataCollection.findOne({ + type: SingletonType.RegistrationOpen, + })) as DateSingleton; + expect(getRegistrationOpenDate.value).toBe(updatedRegistrationOpenDate); + }); + + afterEach(async () => { + await ctx.serverDb.singletonDataCollection.deleteOne({type: SingletonType.RegistrationOpen}); + await ctx.client.close(); + }); +}); diff --git a/pages/api/v1/dates/registration-open.ts b/pages/api/v1/dates/registration-open/index.ts similarity index 70% rename from pages/api/v1/dates/registration-open.ts rename to pages/api/v1/dates/registration-open/index.ts index 6c5b34bf..79a51f54 100644 --- a/pages/api/v1/dates/registration-open.ts +++ b/pages/api/v1/dates/registration-open/index.ts @@ -1,7 +1,7 @@ import { NextApiHandler } from 'next'; -import { getDate, postDate } from '../../../../server/dates'; -import { protect } from '../../../../server/protect'; -import { SingletonType } from '../../../../common/types'; +import { getDate, postDate } from '../../../../../server/dates/dates'; +import { protect } from '../../../../../server/protect'; +import { SingletonType } from '../../../../../common/types'; const regOpenHandler: NextApiHandler = async (req, res) => { switch (req.method) { diff --git a/pages/api/v1/post-acceptance.ts b/pages/api/v1/post-acceptance.ts index 8ebe8ed3..0f16c166 100644 --- a/pages/api/v1/post-acceptance.ts +++ b/pages/api/v1/post-acceptance.ts @@ -6,13 +6,13 @@ import { SingletonType, User, } from '../../../common/types'; -import { queryDate } from '../../../server/dates'; import { makeQuestionResponseSchemas } from '../../../server/validators/validators'; import Joi from 'joi'; import { connectToDatabase } from '../../../server/mongoDB'; import { assumeLoggedInGetEmail, protect } from '../../../server/protect'; import { getConfirmByState } from '../../../common/utils/utils'; import { PostAcceptanceFormQuestions } from '../../../common/questions'; +import { queryDate } from '../../../server/dates/dates'; const postAcceptanceHandler: NextApiHandler = async (req, res) => { switch (req.method) { diff --git a/pages/api/v1/registration.ts b/pages/api/v1/registration.ts index 58f90aaf..5b12d3f9 100644 --- a/pages/api/v1/registration.ts +++ b/pages/api/v1/registration.ts @@ -9,7 +9,7 @@ import { connectToDatabase } from '../../../server/mongoDB'; import { assumeLoggedInGetEmail, protect } from '../../../server/protect'; import { attemptToValidateRegistrationApiRequest } from '../../../server/validators/validators'; import Joi from 'joi'; -import { queryDate } from '../../../server/dates'; +import { queryDate } from '../../../server/dates/dates'; import { isBefore } from 'date-fns'; import { uploadApplicantResume } from '../../../server/upload/upload'; diff --git a/server/dates/dates.test.ts b/server/dates/dates.test.ts new file mode 100644 index 00000000..c380d213 --- /dev/null +++ b/server/dates/dates.test.ts @@ -0,0 +1,172 @@ +import { expect, it, beforeEach, afterEach } from '@jest/globals'; +import { NextApiRequest, NextApiResponse } from 'next'; +import { createMocks, RequestMethod } from 'node-mocks-http'; +import { DateSingleton, SingletonType } from '../../common/types'; +import { JestMongoCtx, jestConnectToDatabase } from '../../jest'; +import * as protect from '../protect'; +import { getDate, postDate, queryDate } from './dates'; + +describe('Dates function', () => { + let ctx: JestMongoCtx; + const initialRegistrationOpenDate = '2022-09-01T22:40:02.000Z'; + const initialRegistrationClosedDate = '2022-09-15T22:40:02.000Z'; + const initialConfirmByDate = '2022-10-01T22:40:02.000Z'; + const updatedRegistrationOpenDate = '2022-10-02T22:40:02.000Z'; + const updatedRegistrationClosedDate = '2022-10-05T22:40:02.000Z'; + const updatedConfirmByDate = '2022-11-01T22:40:02.000Z'; + + function mockRequestResponse(method: RequestMethod = 'GET') { + const { req, res }: { req: NextApiRequest; res: NextApiResponse } = createMocks({ method }); + return { req, res }; + } + + beforeEach(async () => { + ctx = await jestConnectToDatabase(); + await ctx.serverDb.singletonDataCollection.updateOne( + { type: SingletonType.ConfirmBy }, + { + $set: { value: initialConfirmByDate }, + }, + { upsert: true } + ); + await ctx.serverDb.singletonDataCollection.updateOne( + { type: SingletonType.RegistrationOpen }, + { + $set: { value: initialRegistrationOpenDate }, + }, + { upsert: true } + ); + await ctx.serverDb.singletonDataCollection.updateOne( + { type: SingletonType.RegistrationClosed }, + { + $set: { value: initialRegistrationClosedDate }, + }, + { upsert: true } + ); + }); + + afterEach(async () => { + await ctx.serverDb.singletonDataCollection.deleteOne({type: SingletonType.ConfirmBy}); + await ctx.serverDb.singletonDataCollection.deleteOne({type: SingletonType.RegistrationClosed}); + await ctx.serverDb.singletonDataCollection.deleteOne({type: SingletonType.RegistrationOpen}); + await ctx.client.close(); + jest.clearAllMocks(); + }); + + describe('queryDate', () => { + it('fetches the correct ConfirmBy date', async () => { + const date = await queryDate(SingletonType.ConfirmBy); + expect(date).toBe(initialConfirmByDate); + }); + it('fetches the correct RegistrationOpen date', async () => { + const date = await queryDate(SingletonType.RegistrationOpen); + expect(date).toBe(initialRegistrationOpenDate); + }); + it('fetches the correct RegistrationClosed date', async () => { + const date = await queryDate(SingletonType.RegistrationClosed); + expect(date).toBe(initialRegistrationClosedDate); + }); + }); + + describe('getDate', () => { + const { req, res } = mockRequestResponse(); + it('successfully fetches the ConfirmBy date', async () => { + await getDate(req, res, SingletonType.ConfirmBy); + expect(res.statusCode).toBe(200); + expect(res.getHeaders()).toEqual({ 'content-type': 'application/json' }); + expect(res.statusMessage).toEqual('OK'); + }); + it('successfully fetches the RegistrationOpen date', async () => { + await getDate(req, res, SingletonType.RegistrationOpen); + expect(res.statusCode).toBe(200); + expect(res.getHeaders()).toEqual({ 'content-type': 'application/json' }); + expect(res.statusMessage).toEqual('OK'); + }); + it('successfully fetches the RegistrationClosed date', async () => { + await getDate(req, res, SingletonType.RegistrationClosed); + expect(res.statusCode).toBe(200); + expect(res.getHeaders()).toEqual({ 'content-type': 'application/json' }); + expect(res.statusMessage).toEqual('OK'); + }); + }); + + describe('postDate', () => { + function mockRequestResponse(method: RequestMethod = 'GET') { + const { req, res }: { req: NextApiRequest; res: NextApiResponse } = createMocks({ method }); + return { req, res }; + } + const { req, res } = mockRequestResponse(); + describe('ConfirmBy date', () => { + it('fails to post when isAdmin is false', async () => { + jest.spyOn(protect, 'isAdmin').mockResolvedValueOnce(false); + req.body.date = updatedConfirmByDate; + await postDate(req, res, SingletonType.ConfirmBy); + const getConfirmByDate = (await ctx.serverDb.singletonDataCollection.findOne({ + type: SingletonType.ConfirmBy, + })) as DateSingleton; + expect(res.statusCode).toBe(401); + expect(res.statusMessage).toEqual('OK'); + expect(getConfirmByDate.value).toBe(initialConfirmByDate); + }); + it('successfully posts when isAdmin is true', async () => { + jest.spyOn(protect, 'isAdmin').mockResolvedValueOnce(true); + req.body.date = updatedConfirmByDate; + await postDate(req, res, SingletonType.ConfirmBy); + const getUpdatedConfirmByDate = (await ctx.serverDb.singletonDataCollection.findOne({ + type: SingletonType.ConfirmBy, + })) as DateSingleton; + expect(res.statusCode).toBe(200); + expect(res.statusMessage).toEqual('OK'); + expect(getUpdatedConfirmByDate.value).toBe(`"${updatedConfirmByDate}"`); + }); + }); + describe('RegistrationOpen date', () => { + it('fails to post when isAdmin is false', async () => { + jest.spyOn(protect, 'isAdmin').mockResolvedValueOnce(false); + req.body.date = updatedConfirmByDate; + await postDate(req, res, SingletonType.RegistrationOpen); + const getRegistrationOpenDate = (await ctx.serverDb.singletonDataCollection.findOne({ + type: SingletonType.RegistrationOpen, + })) as DateSingleton; + expect(res.statusCode).toBe(401); + expect(res.statusMessage).toEqual('OK'); + expect(getRegistrationOpenDate.value).toBe(initialRegistrationOpenDate); + }); + it('successfully posts when isAdmin is true', async () => { + jest.spyOn(protect, 'isAdmin').mockResolvedValueOnce(true); + req.body.date = updatedRegistrationOpenDate; + await postDate(req, res, SingletonType.RegistrationOpen); + const getRegistrationOpenDate = (await ctx.serverDb.singletonDataCollection.findOne({ + type: SingletonType.RegistrationOpen, + })) as DateSingleton; + expect(res.statusCode).toBe(200); + expect(res.statusMessage).toEqual('OK'); + expect(getRegistrationOpenDate.value).toBe(`"${updatedRegistrationOpenDate}"`); + }); + }); + describe('RegistrationClosed date', () => { + it('fails to post when isAdmin is false', async () => { + jest.spyOn(protect, 'isAdmin').mockResolvedValueOnce(false); + req.body.date = updatedConfirmByDate; + await postDate(req, res, SingletonType.RegistrationClosed); + const getRegistrationClosedDate = (await ctx.serverDb.singletonDataCollection.findOne({ + type: SingletonType.RegistrationClosed, + })) as DateSingleton; + expect(res.statusCode).toBe(401); + expect(res.statusMessage).toEqual('OK'); + expect(getRegistrationClosedDate.value).toBe(initialRegistrationClosedDate); + }); + it('successfully posts when isAdmin is true', async () => { + jest.spyOn(protect, 'isAdmin').mockResolvedValueOnce(true); + req.body.date = updatedRegistrationClosedDate; + await postDate(req, res, SingletonType.RegistrationClosed); + const getRegistrationClosedDate = (await ctx.serverDb.singletonDataCollection.findOne({ + type: SingletonType.RegistrationClosed, + })) as DateSingleton; + expect(res.statusCode).toBe(200); + expect(res.statusMessage).toEqual('OK'); + expect(getRegistrationClosedDate.value).toBe(`"${updatedRegistrationClosedDate}"`); + }); + }); + }); +}); diff --git a/server/dates.ts b/server/dates/dates.ts similarity index 89% rename from server/dates.ts rename to server/dates/dates.ts index 31149e83..9a9f39f8 100644 --- a/server/dates.ts +++ b/server/dates/dates.ts @@ -1,7 +1,7 @@ import { NextApiRequest, NextApiResponse } from 'next'; -import { connectToDatabase } from './mongoDB'; -import { DateSingleton } from '../common/types'; -import { isAdmin } from './protect'; +import { connectToDatabase } from '../mongoDB'; +import { DateSingleton } from '../../common/types'; +import { isAdmin } from '../protect'; export const queryDate = async (dateName: DateSingleton['type']): Promise => { const { singletonDataCollection } = await connectToDatabase(); diff --git a/server/mongoDB.ts b/server/mongoDB.ts index c6a4eef1..8149e80c 100644 --- a/server/mongoDB.ts +++ b/server/mongoDB.ts @@ -1,5 +1,7 @@ import { MongoClient, Db, Collection } from 'mongodb'; import { SingletonDefinition, User } from '../common/types'; +import { TextEncoder } from 'util'; +global.TextEncoder = TextEncoder; const retrieveEnvVarChecked = (s: string) => { const envVar = process.env[s] || ''; diff --git a/test-env-vars.ts b/test-env-vars.ts new file mode 100644 index 00000000..25637670 --- /dev/null +++ b/test-env-vars.ts @@ -0,0 +1,7 @@ +process.env.NEXTAUTH_URL = 'http://localhost:3000'; +process.env.MONGO_DEV_PORT = '27017'; +process.env.MONGO_DEV_USERNAME = 'admin'; +process.env.MONGO_DEV_PASSWORD = 'password'; +process.env.MONGO_SERVER_DBNAME = 'HackbeanpotCluster'; + +export {}; diff --git a/tsconfig.json b/tsconfig.json index 7a5752e3..8baf22eb 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,29 +1,29 @@ -{ - "compilerOptions": { - "target": "es5", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve" - }, - "include": [ - "next-env.d.ts", - "**/*.ts", - "**/*.tsx" - ], - "exclude": [ - "node_modules" - ] -} +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve" + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx" +, ".env.test.local.ts" ], + "exclude": [ + "node_modules" + ] +} diff --git a/yarn.lock b/yarn.lock index 984f4f06..6d869c0f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -422,19 +422,19 @@ debug "^3.1.0" lodash.once "^4.1.1" -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== +"@eslint/eslintrc@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95" + integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg== dependencies: ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.15.0" + ignore "^5.2.0" import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" + js-yaml "^4.1.0" + minimatch "^3.1.2" strip-json-comments "^3.1.1" "@google-cloud/paginator@^3.0.7": @@ -456,15 +456,14 @@ integrity sha512-z1CjRjtQyBOYL+5Qr9DdYIfrdLBe746jRTYfaYU6MeXkqp7UfYs/jX16lFFVzZ7PGEJvqZNqYUEtb1mvDww4pA== "@google-cloud/storage@^6.5.2": - version "6.5.2" - resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-6.5.2.tgz#0db4eebb947256925db06365cfdab412062b504b" - integrity sha512-n4HVE5bGGFdXlPUN2tP+wEnVH2XbYnv9PVrHirbAJPHk8EM7bm1G86+IhLha8KH4PpHLhjCPML173Sr6PWCXIQ== + version "6.5.4" + resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-6.5.4.tgz#c43742ac12787df39c07725f131f199bb80e0b58" + integrity sha512-7ntxYkceJo0FzKvHZU988Vy+PFRErSiqEIgcErJ+Hg8vU+nCw0dhg2K0uJJSnUJoEPJLz4DFAMqYCme0WhD2uA== 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" @@ -506,20 +505,33 @@ dependencies: "@hapi/hoek" "^9.0.0" -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== +"@humanwhocodes/config-array@^0.11.6": + version "0.11.6" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.6.tgz#6a51d603a3aaf8d4cf45b42b3f2ac9318a4adc4b" + integrity sha512-jJr+hPTJYKyDILJfhNSHsjiwXYf26Flsz8DvNndOsHs5pwSnpGUEy8yzF0JYhCEvTDdV2vuOK5tt8BVhwO5/hg== dependencies: - "@humanwhocodes/object-schema" "^1.2.0" + "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" minimatch "^3.0.4" -"@humanwhocodes/object-schema@^1.2.0": +"@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" resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@inrupt/jest-jsdom-polyfills@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@inrupt/jest-jsdom-polyfills/-/jest-jsdom-polyfills-1.3.0.tgz#f95c4d739d60b7afcf436bd2ab74080e03e1702c" + integrity sha512-ynGhXWGbbyf0h5YrEV5ndzpwkgAQzgyhiJ4/psZKcb5Ra+pkTjBNMe1In1VeNs0uJJRH99LCAvI47FJagyTVyQ== + dependencies: + "@web-std/blob" "^3.0.4" + "@web-std/file" "^3.0.2" + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -889,7 +901,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== @@ -1325,6 +1337,33 @@ "@typescript-eslint/types" "4.33.0" eslint-visitor-keys "^2.0.0" +"@web-std/blob@^3.0.3", "@web-std/blob@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@web-std/blob/-/blob-3.0.4.tgz#dd67a685547331915428d69e723c7da2015c3fc5" + integrity sha512-+dibyiw+uHYK4dX5cJ7HA+gtDAaUUe6JsOryp2ZpAC7h4ICsh49E34JwHoEKPlPvP0llCrNzz45vvD+xX5QDBg== + dependencies: + "@web-std/stream" "1.0.0" + web-encoding "1.1.5" + +"@web-std/file@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@web-std/file/-/file-3.0.2.tgz#b84cc9ed754608b18dcf78ac62c40dbcc6a94692" + integrity sha512-pIH0uuZsmY8YFvSHP1NsBIiMT/1ce0suPrX74fEeO3Wbr1+rW0fUGEe4d0R99iLwXtyCwyserqCFI4BJkJlkRA== + dependencies: + "@web-std/blob" "^3.0.3" + +"@web-std/stream@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@web-std/stream/-/stream-1.0.0.tgz#01066f40f536e4329d9b696dc29872f3a14b93c1" + integrity sha512-jyIbdVl+0ZJyKGTV0Ohb9E6UnxP+t7ZzX4Do3AHjZKxUXKMs9EmqnBDQgHF7bEw0EzbQygOjtt/7gvtmi//iCQ== + dependencies: + web-streams-polyfill "^3.1.1" + +"@zxing/text-encoding@0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@zxing/text-encoding/-/text-encoding-0.9.0.tgz#fb50ffabc6c7c66a0c96b4c03e3d9be74864b70b" + integrity sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA== + abab@^2.0.3, abab@^2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" @@ -1337,6 +1376,14 @@ abort-controller@^3.0.0: dependencies: event-target-shim "^5.0.0" +accepts@^1.3.7: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + acorn-globals@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" @@ -1345,7 +1392,7 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" -acorn-jsx@^5.3.1: +acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== @@ -1360,12 +1407,12 @@ acorn-walk@^8.1.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^7.1.1, acorn@^7.4.0: +acorn@^7.1.1: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.2.4, acorn@^8.4.1: +acorn@^8.2.4, acorn@^8.4.1, acorn@^8.8.0: version "8.8.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== @@ -1395,16 +1442,6 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.1: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - anser@1.4.9: version "1.4.9" resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.9.tgz#1f85423a5dcf8da4631a341665ff675b96845760" @@ -1531,6 +1568,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "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" @@ -2344,6 +2386,13 @@ constants-browserify@1.0.0, constants-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ== +content-disposition@^0.5.3: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + convert-source-map@1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" @@ -2572,7 +2621,7 @@ debug@2, debug@^2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -2643,7 +2692,7 @@ denque@^2.1.0: resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== -depd@~1.1.2: +depd@^1.1.0, depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== @@ -2815,7 +2864,7 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" -enquirer@^2.3.5, enquirer@^2.3.6: +enquirer@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -3041,12 +3090,13 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== +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== dependencies: - eslint-visitor-keys "^1.1.0" + esrecurse "^4.3.0" + estraverse "^5.2.0" eslint-utils@^3.0.0: version "3.0.0" @@ -3055,70 +3105,69 @@ eslint-utils@^3.0.0: dependencies: eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - eslint-visitor-keys@^2.0.0: version "2.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@^7.30.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" +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@^8.26.0: + version "8.26.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.26.0.tgz#2bcc8836e6c424c4ac26a5674a70d44d84f2181d" + integrity sha512-kzJkpaw1Bfwheq4VXUezFriD1GxszX6dUekM7Z3aC2o4hju+tsR/XyTC3RcoSD7jmy9VkPU3+N6YjVU2e96Oyg== + dependencies: + "@eslint/eslintrc" "^1.3.3" + "@humanwhocodes/config-array" "^0.11.6" + "@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.0.1" + debug "^4.3.2" doctrine "^3.0.0" - enquirer "^2.3.5" escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" esquery "^1.4.0" 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 "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.15.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-yaml "^3.13.1" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" - minimatch "^3.0.4" + minimatch "^3.1.2" natural-compare "^1.4.0" optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" + regexpp "^3.2.0" + strip-ansi "^6.0.1" strip-json-comments "^3.1.0" - table "^6.0.9" text-table "^0.2.0" - v8-compile-cache "^2.0.3" -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== +espree@^9.4.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.0.tgz#cd4bc3d6e9336c433265fc0aa016fc1aaf182f8a" + integrity sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw== dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" @@ -3381,6 +3430,14 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.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" + find@^0.2.4: version "0.2.9" resolved "https://registry.yarnpkg.com/find/-/find-0.2.9.tgz#4b73f1ff9e56ad91b76e716407fe5ffe6554bb8c" @@ -3436,6 +3493,11 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" +fresh@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" @@ -3576,6 +3638,13 @@ glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2: dependencies: is-glob "^4.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== + dependencies: + is-glob "^4.0.3" + glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" @@ -3617,7 +3686,7 @@ 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.6.0, globals@^13.9.0: +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== @@ -3680,6 +3749,11 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.9: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== +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== + gtoken@^6.1.0: version "6.1.2" resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-6.1.2.tgz#aeb7bdb019ff4c3ba3ac100bbe7b6e74dce0e8bc" @@ -3888,11 +3962,6 @@ ieee754@^1.1.13, ieee754@^1.1.4: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - ignore@^5.1.8, ignore@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" @@ -4106,7 +4175,7 @@ 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.2: +is-path-inside@^3.0.2, 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== @@ -4770,6 +4839,11 @@ jose@^2.0.5: dependencies: "@panva/asn1.js" "^1.0.0" +js-sdsl@^4.1.4: + version "4.1.5" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.1.5.tgz#1ff1645e6b4d1b028cd3f862db88c9d887f26e2a" + integrity sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -4783,6 +4857,13 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -4848,11 +4929,6 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - json-schema@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" @@ -5054,6 +5130,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.memoize@4.x: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -5074,11 +5157,6 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== - lodash@^4.17.15, lodash@^4.17.21, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -5159,6 +5237,11 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + memoize-one@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045" @@ -5169,6 +5252,11 @@ memory-pager@^1.0.2: resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== +merge-descriptors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -5179,6 +5267,11 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +methods@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" @@ -5200,13 +5293,18 @@ mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.0.8, mime-types@^2.1.12, mime-types@~2.1.19: +mime-types@^2.0.8, mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" +mime@^1.3.4: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + mime@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" @@ -5316,6 +5414,11 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + next-auth@4.0.0-beta.4: version "4.0.0-beta.4" resolved "https://registry.yarnpkg.com/next-auth/-/next-auth-4.0.0-beta.4.tgz#f69438c92e06da3b9e2331b71f65e58076b13b2e" @@ -5443,6 +5546,22 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" +node-mocks-http@^1.11.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/node-mocks-http/-/node-mocks-http-1.11.0.tgz#defc0febf6b935f08245397d47534a8de592996e" + integrity sha512-jS/WzSOcKbOeGrcgKbenZeNhxUNnP36Yw11+hL4TTxQXErGfqYZ+MaYNNvhaTiGIJlzNSqgQkk9j8dSu1YWSuw== + dependencies: + accepts "^1.3.7" + content-disposition "^0.5.3" + depd "^1.1.0" + fresh "^0.5.2" + merge-descriptors "^1.0.1" + methods "^1.1.2" + mime "^1.3.4" + parseurl "^1.3.3" + range-parser "^1.2.0" + type-is "^1.6.18" + node-releases@^1.1.71: version "1.1.77" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.77.tgz#50b0cfede855dd374e7585bf228ff34e57c1c32e" @@ -5643,7 +5762,7 @@ p-cancelable@^2.0.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== -p-limit@3.1.0, p-limit@^3.0.1: +p-limit@3.1.0, p-limit@^3.0.1, p-limit@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== @@ -5664,6 +5783,13 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" +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-map@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" @@ -5714,6 +5840,11 @@ parse5@6.0.1: resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== +parseurl@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + path-browserify@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" @@ -5893,11 +6024,6 @@ process@0.11.10, process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - prompts@^2.0.1: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" @@ -6017,6 +6143,11 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" +range-parser@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + raw-body@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" @@ -6491,7 +6622,7 @@ regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: define-properties "^1.1.3" functions-have-names "^1.2.2" -regexpp@^3.1.0: +regexpp@^3.1.0, 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== @@ -6515,11 +6646,6 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" @@ -6657,7 +6783,7 @@ rxjs@^7.5.1, rxjs@^7.5.5: dependencies: tslib "^2.1.0" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -6719,7 +6845,7 @@ scroll-into-view-if-needed@^2.2.25: dependencies: compute-scroll-into-view "^1.0.17" -semver@7.x, semver@^7.2.1, semver@^7.3.2, semver@^7.3.5: +semver@7.x, semver@^7.3.2, semver@^7.3.5: version "7.3.8" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== @@ -7004,7 +7130,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -7194,17 +7320,6 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@^6.0.9: - version "6.8.0" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" - integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - teeny-request@^8.0.0: version "8.0.2" resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-8.0.2.tgz#c06a75101cf782788ba8f9a2ed5f2ac84c1c4e15" @@ -7474,6 +7589,14 @@ type-fest@^0.7.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== +type-is@^1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -7566,7 +7689,7 @@ util@0.10.3: dependencies: inherits "2.0.1" -util@0.12.4, util@^0.12.0: +util@0.12.4, util@^0.12.0, util@^0.12.3: version "0.12.4" resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253" integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== @@ -7600,11 +7723,6 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - v8-to-istanbul@^8.1.0: version "8.1.1" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" @@ -7657,6 +7775,20 @@ watchpack@2.1.1: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" +web-encoding@1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/web-encoding/-/web-encoding-1.1.5.tgz#fc810cf7667364a6335c939913f5051d3e0c4864" + integrity sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA== + dependencies: + util "^0.12.3" + optionalDependencies: + "@zxing/text-encoding" "0.9.0" + +web-streams-polyfill@^3.1.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" + integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"