diff --git a/.eslintrc.json b/.eslintrc.json index 028e671e..c2e5c214 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,5 +1,11 @@ { - "ignorePatterns": ["node_modules/*","dist/*","build/*"], + "ignorePatterns": [ + ".eslintrc.js", + "node_modules/*", + "dist/*", + "build/*", + "coverage/*" + ], "env": { "browser": true, "es2021": true, @@ -20,7 +26,8 @@ }, "plugins": [ "react", - "@typescript-eslint" + "@typescript-eslint", + "import" ], "rules": { "linebreak-style": [ @@ -35,11 +42,21 @@ "error", "always" ], + "import/no-extraneous-dependencies": [ + "error", {"devDependencies": true} + ], + "@typescript-eslint/no-explicit-any": "error", + "react/react-in-jsx-scope": "off", + "react/require-default-props": "off", + "no-spaced-func": "off", + "max-len": ["error", { "code": 180 }], "no-undef": "off" }, "overrides": [ { - "files": ["*.js"], + "files": [ + "*.js" + ], "rules": { "@typescript-eslint/no-var-requires": "off" } @@ -49,8 +66,8 @@ "react": { "createClass": "createReactClass", // Regex for Component Factory to use, // default to "createReactClass" - "pragma": "React", // Pragma to use, default to "React" - "fragment": "Fragment", // Fragment to use (may be a property of ), default to "Fragment" + "pragma": "React", // Pragma to use, default to "React" + "fragment": "Fragment", // Fragment to use (may be a property of ), default to "Fragment" "version": "detect", // React version. "detect" automatically picks the version you have installed. // You can also use `16.0`, `16.3`, etc, if you want to override the detected value. // default to latest and warns if missing @@ -58,4 +75,4 @@ "flowVersion": "0.53" // Flow version } } -} +} \ No newline at end of file diff --git a/.github/workflows/test.js.yml b/.github/workflows/test.js.yml index e0d341c3..5048deac 100644 --- a/.github/workflows/test.js.yml +++ b/.github/workflows/test.js.yml @@ -26,3 +26,17 @@ jobs: token: ${{ secrets.CODECOV_TOKEN }} file: ./coverage/coverage-final.json fail_ci_if_error: true + + lint: + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [ 16.x ] + steps: + - uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - run: yarn install + - run: yarn run lint \ No newline at end of file diff --git a/jest.config.js b/jest.config.js index 3bb6eb42..a0addb24 100644 --- a/jest.config.js +++ b/jest.config.js @@ -14,5 +14,16 @@ module.exports = { ], "setupFilesAfterEnv": [ "jest-extended" - ] + ], + "preset": "ts-jest", + "moduleNameMapper": { + "\\.(css|less|scss)$": "identity-obj-proxy" + }, + "testEnvironmentOptions": { + "html": "", + "url": "https://jestjs.io/", + "userAgent": "Agent/007" + }, + transformIgnorePatterns: ["/node_modules/(?!crypto-random-string/)"], + modulePathIgnorePatterns: ["/dist/"] }; \ No newline at end of file diff --git a/package.json b/package.json index 935a0d6a..53689245 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,8 @@ "start-react": "react-scripts start", "build-react": "react-scripts build", "test": "jest --coverage --watchAll=false", + "lint": "yarn eslint .", + "lint-fix": "yarn eslint . --fix", "gcp-build": "react-scripts build && tsc --project tsconfig.server.json", "dev": "concurrently --kill-others-on-fail \"yarn start-server\" \"yarn start-react\"" }, @@ -38,32 +40,42 @@ "express": "^4.17.1", "formik": "^2.2.9", "google-auth-library": "^8.7.0", + "history": "^4.9.0", "jest-cucumber": "^3.0.0", "jsonwebtoken": "^9.0.0", "lodash": "^4.17.20", + "node-fetch": "^3.3.2", "pino": "^8.7.0", "pino-http": "^8.1.1", "react": "^17.0.0", "react-dom": "^17.0.0", "react-router-dom": "^5.2.0", "react-scripts": "5.0.1", - "typescript": "^4.9.4" + "typescript": "~4.3.5" }, "devDependencies": { "@babel/core": "^7.20.5", + "@babel/plugin-proposal-private-property-in-object": "^7.21.11", "@babel/plugin-transform-react-jsx": "^7.12.1", "@babel/preset-typescript": "^7.12.1", "@types/ejs": "^3.0.5", "@types/lodash": "^4.14.165", "@types/react-router-dom": "^5.1.6", "@types/supertest": "^2.0.12", - "@typescript-eslint/eslint-plugin": "^4.6.1", + "@typescript-eslint/eslint-plugin": "^5.43.0", "@typescript-eslint/parser": "^4.6.1", "axios-mock-adapter": "^1.21.1", - "eslint": "^7.13.0", - "eslint-plugin-react": "^7.21.5", + "eslint": "^8.0.1", + "eslint-config-airbnb": "^19.0.4", + "eslint-config-airbnb-typescript": "^17.0.0", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-n": "^15.0.0", + "eslint-plugin-promise": "^6.0.0", + "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react-hooks": "^4.6.0", "jest-extended": "^0.11.5", "supertest": "^6.3.3", + "ts-jest": "^29.1.1", "typemoq": "^2.1.0" }, "browserslist": { diff --git a/server/Functions.ts b/server/Functions.ts index 1a9ea1e3..21f2767e 100644 --- a/server/Functions.ts +++ b/server/Functions.ts @@ -1,5 +1,5 @@ -function isNumber(n: any) { - return !isNaN(parseFloat(n)) && isFinite(n); +function isNumber(n: number | string) { + return !isNaN(parseFloat(String(n))) && isFinite(Number(n)); } function fieldPeriodFromInstrument(instrument_name: string): string { diff --git a/server/Logger.ts b/server/Logger.ts index 78297906..8415770a 100644 --- a/server/Logger.ts +++ b/server/Logger.ts @@ -1,3 +1,6 @@ +import pino from "pino-http"; +module.exports = pino({}); + import { P } from "pino"; export interface Logger { diff --git a/server/Questionnaires/index.test.ts b/server/Questionnaires/index.test.ts index b5cbbff1..420aa8ae 100644 --- a/server/Questionnaires/index.test.ts +++ b/server/Questionnaires/index.test.ts @@ -26,25 +26,25 @@ describe("QuestionnaireRouter", () => { }; app.use((req: Request, res: Response, next: NextFunction) => { - req["log"] = log as P.Logger; + req.log = log as P.Logger; next(); }); const environmentVariables: EnvironmentVariables = { - VM_EXTERNAL_WEB_URL: "vm.com", - BIMS_CLIENT_ID: "bims-id", + VM_EXTERNAL_WEB_URL: "vm.com", + BIMS_CLIENT_ID: "bims-id", BIMS_API_URL: "http://bims.com", VM_EXTERNAL_CLIENT_URL: "", BLAISE_API_URL: "", CATI_DASHBOARD_URL: "" - } + }; app.use(QuestionnaireRouter( environmentVariables, blaiseApiMock.object )); - const request = supertest(app); + const request = supertest(app); const today = new Date(); const tomorrow = new Date(); @@ -61,10 +61,10 @@ describe("QuestionnaireRouter", () => { it("returns 500 when questionnaires endpoint errors", async () => { // aarnge blaiseApiMock.setup((api) => api.getAllQuestionnairesWithCatiData()).throws(new Error()); - + // act const response = await request.get("/questionnaires"); - + // assert expect(response.status).toBe(500); expect(log.error).toHaveBeenCalledWith("Failed to retrieve instrument list"); @@ -88,7 +88,7 @@ describe("QuestionnaireRouter", () => { sentHeaders = headers; return [200, { tostartdate: today.toISOString() }]; }); - + // act await request.get("/questionnaires"); @@ -117,7 +117,7 @@ describe("QuestionnaireRouter", () => { // act const response = await request.get("/questionnaires"); - + // assert expect(response.status).toBe(200); @@ -148,7 +148,7 @@ describe("QuestionnaireRouter", () => { // act const response = await request.get("/questionnaires"); - + // assert expect(response.status).toBe(200); expect(response.body).toEqual([]); @@ -176,14 +176,14 @@ describe("QuestionnaireRouter", () => { activeToday: true }; - blaiseApiMock.setup((api) => api.getAllQuestionnairesWithCatiData()).returns(async () => [questionnaire]); + blaiseApiMock.setup((api) => api.getAllQuestionnairesWithCatiData()).returns(async () => [questionnaire]); mockHttp .onGet(`http://bims.com/tostartdate/${questionnaire.name}`) .reply(200, {}, { "content-type": "text/html" }); - + // act const response = await request.get("/questionnaires"); - + // assert expect(response.status).toBe(200); expect(response.body).toEqual([ @@ -218,10 +218,10 @@ describe("QuestionnaireRouter", () => { activeToday: true }; - blaiseApiMock.setup((api) => api.getAllQuestionnairesWithCatiData()).returns(async () => [questionnaire]); + blaiseApiMock.setup((api) => api.getAllQuestionnairesWithCatiData()).returns(async () => [questionnaire]); mockHttp .onGet(`http://bims.com/tostartdate/${questionnaire.name}`) - .reply(200, { tostartdate: today.toISOString() }, { "content-type": "application/json" }); + .reply(200, { tostartdate: today.toISOString() }, { "content-type": "application/json" }); // act const response = await request.get("/questionnaires"); @@ -251,20 +251,20 @@ describe("QuestionnaireRouter", () => { activeToday: false }; - blaiseApiMock.setup((api) => api.getAllQuestionnairesWithCatiData()).returns(async () => [questionnaire]); + blaiseApiMock.setup((api) => api.getAllQuestionnairesWithCatiData()).returns(async () => [questionnaire]); mockHttp - .onGet(`http://bims.com/tostartdate/${questionnaire.name}`) - .reply(200, { tostartdate: today.toISOString() }, { "content-type": "application/json" }); + .onGet(`http://bims.com/tostartdate/${questionnaire.name}`) + .reply(200, { tostartdate: today.toISOString() }, { "content-type": "application/json" }); // act const response = await request.get("/questionnaires"); - + // assert expect(response.status).toBe(200); expect(response.body).toEqual([]); expect(log.debug).toHaveBeenCalledWith("The BIMS request responded with a status of 200 and a body of [object Object]"); expect(log.debug).toHaveBeenCalledWith(expect.stringMatching(/the instrument OPN2211A is live for TO \(TO start date = .*\) \(Active today = false\)/)); - expect(log.info).toHaveBeenCalledWith( "Retrieved active instruments, 0 item/s"); + expect(log.info).toHaveBeenCalledWith("Retrieved active instruments, 0 item/s"); expect(log.warn).not.toHaveBeenCalled(); expect(log.error).not.toHaveBeenCalled(); }); @@ -280,14 +280,14 @@ describe("QuestionnaireRouter", () => { activeToday: true }; - blaiseApiMock.setup((api) => api.getAllQuestionnairesWithCatiData()).returns(async () => [questionnaire]); + blaiseApiMock.setup((api) => api.getAllQuestionnairesWithCatiData()).returns(async () => [questionnaire]); mockHttp - .onGet(`http://bims.com/tostartdate/${questionnaire.name}`) - .reply(200, { tostartdate: tomorrow.toISOString() }, { "content-type": "application/json" }); + .onGet(`http://bims.com/tostartdate/${questionnaire.name}`) + .reply(200, { tostartdate: tomorrow.toISOString() }, { "content-type": "application/json" }); // act const response = await request.get("/questionnaires"); - + // assert expect(response.status).toBe(200); expect(response.body).toEqual([]); @@ -307,14 +307,14 @@ describe("QuestionnaireRouter", () => { activeToday: false }; - blaiseApiMock.setup((api) => api.getAllQuestionnairesWithCatiData()).returns(async () => [questionnaire]); + blaiseApiMock.setup((api) => api.getAllQuestionnairesWithCatiData()).returns(async () => [questionnaire]); mockHttp - .onGet(`http://bims.com/tostartdate/${questionnaire.name}`) + .onGet(`http://bims.com/tostartdate/${questionnaire.name}`) .reply(200, { tostartdate: tomorrow.toISOString() }, { "content-type": "application/json" }); // act const response = await request.get("/questionnaires"); - + // assert expect(response.status).toBe(200); expect(response.body).toEqual([]); @@ -344,9 +344,9 @@ describe("QuestionnaireRouter", () => { activeToday: true }; - blaiseApiMock.setup((api) => api.getAllQuestionnairesWithCatiData()).returns(async () => [questionnaire]); + blaiseApiMock.setup((api) => api.getAllQuestionnairesWithCatiData()).returns(async () => [questionnaire]); mockHttp - .onGet(`http://bims.com/tostartdate/${questionnaire.name}`) + .onGet(`http://bims.com/tostartdate/${questionnaire.name}`) .reply(200, { tostartdate: today.toISOString() }, { "content-type": "application/json" }); // act @@ -377,14 +377,14 @@ describe("QuestionnaireRouter", () => { activeToday: false }; - blaiseApiMock.setup((api) => api.getAllQuestionnairesWithCatiData()).returns(async () => [questionnaire]); + blaiseApiMock.setup((api) => api.getAllQuestionnairesWithCatiData()).returns(async () => [questionnaire]); mockHttp - .onGet(`http://bims.com/tostartdate/${questionnaire.name}`) + .onGet(`http://bims.com/tostartdate/${questionnaire.name}`) .reply(200, { tostartdate: today.toISOString() }, { "content-type": "application/json" }); - + // act const response = await request.get("/questionnaires"); - + // assert expect(response.status).toBe(200); expect(response.body).toEqual([]); @@ -404,9 +404,9 @@ describe("QuestionnaireRouter", () => { activeToday: true }; - blaiseApiMock.setup((api) => api.getAllQuestionnairesWithCatiData()).returns(async () => [questionnaire]); + blaiseApiMock.setup((api) => api.getAllQuestionnairesWithCatiData()).returns(async () => [questionnaire]); mockHttp - .onGet(`http://bims.com/tostartdate/${questionnaire.name}`) + .onGet(`http://bims.com/tostartdate/${questionnaire.name}`) .reply(200, { tostartdate: today.toISOString() }, { "content-type": "application/json" }); // act @@ -428,5 +428,5 @@ describe("QuestionnaireRouter", () => { survey: "XXX" } ]); - }); + }); }); diff --git a/server/server.ts b/server/server.ts index be68dc21..a2d38a86 100644 --- a/server/server.ts +++ b/server/server.ts @@ -1,4 +1,4 @@ -import express, {NextFunction, Request, Response, Express} from "express"; +import express, { Request, Response, Express } from "express"; import axios from "axios"; import path from "path"; import ejs from "ejs"; @@ -9,48 +9,49 @@ import BlaiseApiClient from "blaise-api-node-client"; import { EnvironmentVariables } from "./Config"; export default function nodeServer(environmentVariables: EnvironmentVariables, blaiseApiClient: BlaiseApiClient): Express { -const server = express(); + const server = express(); -axios.defaults.timeout = 15000; + axios.defaults.timeout = 15000; -if (process.env.NODE_ENV !== "production") { - dotenv.config(); -} + if (process.env.NODE_ENV !== "production") { + dotenv.config(); + } -// where ever the react built package is -const buildFolder = "../build"; + // where ever the react built package is + const buildFolder = "../build"; -server.use(pinoLogger()); + server.use(pinoLogger()); -// treat the index.html as a template and substitute the values at runtime -server.set("views", path.join(__dirname, buildFolder)); -server.engine("html", ejs.renderFile); -server.use( - "/static", - express.static(path.join(__dirname, `${buildFolder}/static`)), -); + // treat the index.html as a template and substitute the values at runtime + server.set("views", path.join(__dirname, buildFolder)); + server.engine("html", ejs.renderFile); + server.use( + "/static", + express.static(path.join(__dirname, `${buildFolder}/static`)), + ); -// Load api Instruments routes from QuestionnaireRouter -server.use("/api", QuestionnaireRouter(environmentVariables, blaiseApiClient)); + // Load api Instruments routes from QuestionnaireRouter + server.use("/api", QuestionnaireRouter(environmentVariables, blaiseApiClient)); -// Health Check endpoint -server.get("/tobi-ui/:version/health", async function (req: Request, res: Response) { - res.status(200).json({healthy: true}); -}); + // Health Check endpoint + server.get("/tobi-ui/:version/health", async function (req: Request, res: Response) { + res.status(200).json({ healthy: true }); + }); -server.get("*", function (req: Request, res: Response) { - const clientUrl = environmentVariables.VM_EXTERNAL_CLIENT_URL; - const dashboardUrl = environmentVariables.CATI_DASHBOARD_URL; - res.render("index.html", { - clientUrl, dashboardUrl + server.get("*", function (req: Request, res: Response) { + const clientUrl = environmentVariables.VM_EXTERNAL_CLIENT_URL; + const dashboardUrl = environmentVariables.CATI_DASHBOARD_URL; + res.render("index.html", { + clientUrl, dashboardUrl + }); }); -}); -server.use(function (err: Error, req: Request, res: Response, next: NextFunction) { - req.log.error(err.stack); - res.render("../views/500.html", {}); -}); + server.use(function (err: Error, req: Request, res: Response) { + req.log.error(err.stack); + res.status(500); + res.render("../views/500.html", {}); + }); -return server; + return server; } diff --git a/server/tests/functions.test.js b/server/tests/functions.test.ts similarity index 94% rename from server/tests/functions.test.js rename to server/tests/functions.test.ts index c1d9ff1c..e762394e 100644 --- a/server/tests/functions.test.js +++ b/server/tests/functions.test.ts @@ -1,4 +1,4 @@ -import { fieldPeriodToText } from "../Functions"; +import {fieldPeriodToText} from "../Functions"; describe("Field period to text test", () => { it("should return 'April 2020' for field period 2004", () => { diff --git a/server/tests/index.test.ts b/server/tests/index.test.ts index 2a942b26..49196080 100644 --- a/server/tests/index.test.ts +++ b/server/tests/index.test.ts @@ -1,5 +1,5 @@ import supertest from "supertest"; -import { IMock, Mock, It } from 'typemoq'; +import { IMock, Mock} from "typemoq"; import BlaiseApiClient from "blaise-api-node-client"; import nodeServer from "../server"; import { EnvironmentVariables } from "../Config"; diff --git a/server/tests/server.test.ts b/server/tests/server.test.ts index a92b6aa3..05ef2c17 100644 --- a/server/tests/server.test.ts +++ b/server/tests/server.test.ts @@ -4,8 +4,8 @@ import supertest from "supertest"; import MockAdapter from "axios-mock-adapter"; import axios from "axios"; -import { IMock, Mock } from 'typemoq'; -import BlaiseApiClient from "blaise-api-node-client"; +import { IMock, Mock } from "typemoq"; +import BlaiseApiClient, { Survey } from "blaise-api-node-client"; import nodeServer from "../server"; import { QuestionnaireHelper } from "./helpers/questionnaire-helper"; require("jest-extended"); @@ -182,9 +182,9 @@ describe("Get list of instruments endpoint fails", () => { }); it("should return a 500 status and an error message", async () => { - const response = await request.get("/api/questionnaires"); + const response = await request.get("/api/questionnaires"); - expect(response.statusCode).toEqual(500); + expect(response.statusCode).toEqual(500); }); afterAll(() => { @@ -206,36 +206,36 @@ const feature = loadFeature("./src/features/TO_Interviewer_Happy_Path.feature", defineFeature(feature, test => { //Scenario 3b - let response:any; + let response: Survey[]; const liveDateUrl = new RegExp(`${process.env.BIMS_API_URL}/tostartdate/.*`); const questionnaireName = "OPN2007T"; - const questionnaireHasATelOpsStartDateOfToday = (given:DefineStepFunction) => { + const questionnaireHasATelOpsStartDateOfToday = (given: DefineStepFunction) => { given("a survey questionnaire has a TelOps start date of today", async () => { mock.onGet(liveDateUrl).reply(200, { tostartdate: IsoDateHelper.today() }, { "content-type": "application/json" }); }); }; - const questionnaireHasATelOpsStartDateInThePast = (given:DefineStepFunction) => { + const questionnaireHasATelOpsStartDateInThePast = (given: DefineStepFunction) => { given("a survey questionnaire has a TelOps start date in the past", async () => { mock.onGet(liveDateUrl).reply(200, { tostartdate: IsoDateHelper.yesterday() }, { "content-type": "application/json" }); }); }; - const questionnaireHasATelOpsStartDateInTheFuture = (given:DefineStepFunction) => { + const questionnaireHasATelOpsStartDateInTheFuture = (given: DefineStepFunction) => { given("a survey questionnaire has a TelOps start date is in the future", async () => { mock.onGet(liveDateUrl).reply(200, { tostartdate: IsoDateHelper.tomorrow() }, { "content-type": "application/json" }); }); }; - const questionnaireDoesNotHaveATelOpsStartDate = (given:DefineStepFunction) => { + const questionnaireDoesNotHaveATelOpsStartDate = (given: DefineStepFunction) => { given("a survey questionnaire does not have a TelOps start date", async () => { mock.onGet(liveDateUrl).reply(404, null, { "content-type": "application/json" }); } ); }; - const questionnaireHasAnActiveSurveyDay = (given:DefineStepFunction) => { + const questionnaireHasAnActiveSurveyDay = (given: DefineStepFunction) => { given("an active survey day", async () => { const apiQuestionnaireList = [QuestionnaireHelper.apiQuestionnaire(questionnaireName, true)]; @@ -243,7 +243,7 @@ defineFeature(feature, test => { }); }; - const questionnaireDoesNotHaveAnActiveSurveyDay = (given:DefineStepFunction) => { + const questionnaireDoesNotHaveAnActiveSurveyDay = (given: DefineStepFunction) => { given("does not have an active survey day", async () => { const apiQuestionnaireList = [QuestionnaireHelper.apiQuestionnaire(questionnaireName, false)]; @@ -251,28 +251,29 @@ defineFeature(feature, test => { }); }; - const iSelectTheSurveyIAmWorkingOn = (when:DefineStepFunction) => { + const iSelectTheSurveyIAmWorkingOn = (when: DefineStepFunction) => { when("I select the survey I am working on", async () => { - response = await request.get("/api/questionnaires"); + response = (await request.get("/api/questionnaires")).body; }); }; - const thenIWillSeeTheQuestionnaireListed = (then:DefineStepFunction) => { + const thenIWillSeeTheQuestionnaireListed = (then: DefineStepFunction) => { then("I will see that questionnaire listed for the survey", () => { // The survey is returned - let selectedSurvey = response.body[0].questionnaires; + const selectedSurvey = response[0].questionnaires; expect(selectedSurvey).toHaveLength(1); - const questionnaireListReturned = [QuestionnaireHelper.Questionnaire(questionnaireName, true, "July 2020", "OPN", "https://external-web-url/OPN2007T?LayoutSet=CATI-Interviewer_Large")]; + const questionnaireListReturned = [QuestionnaireHelper.Questionnaire( + questionnaireName, true, "July 2020", "OPN", "https://external-web-url/OPN2007T?LayoutSet=CATI-Interviewer_Large")]; expect(selectedSurvey).toEqual(questionnaireListReturned); }); }; - const thenIWillNotSeeTheQuestionnaireListed = (then:DefineStepFunction) => { + const thenIWillNotSeeTheQuestionnaireListed = (then: DefineStepFunction) => { then("I will not see that questionnaire listed for the survey", () => { // The questionnaire is not returned - expect(response.body).toEqual([]); + expect(response).toEqual([]); }); }; diff --git a/src/App.test.tsx b/src/App.test.tsx index 711a3f73..5e1e92fe 100644 --- a/src/App.test.tsx +++ b/src/App.test.tsx @@ -1,12 +1,12 @@ import React from "react"; -import {render, waitFor, fireEvent, screen, cleanup} from "@testing-library/react"; +import { render, waitFor, fireEvent, screen, cleanup } from "@testing-library/react"; import App from "./App"; import "@testing-library/jest-dom"; import flushPromises from "./tests/utils"; -import {act} from "react-dom/test-utils"; -import {createMemoryHistory} from "history"; -import {Router} from "react-router"; -import {Survey} from "blaise-api-node-client"; +import { act } from "react-dom/test-utils"; +import { createMemoryHistory } from "history"; +import { Router } from "react-router-dom"; +import { Survey } from "blaise-api-node-client"; const surveyListReturned: Survey[] = [ { @@ -25,15 +25,23 @@ const surveyListReturned: Survey[] = [ } ]; -function mock_server_request(returnedStatus: number, returnedJSON: any) { - //@ts-ignore +function mock_server_request(returnedStatus: number, returnedJSON: Survey[]) { global.fetch = jest.fn(() => Promise.resolve({ status: returnedStatus, json: () => Promise.resolve(returnedJSON), }) - ); + ) as jest.Mock; } +function mock_server_malformed_response(returnedStatus: number, returnedJSON: { text: string }) { + global.fetch = jest.fn(() => + Promise.resolve({ + status: returnedStatus, + json: () => Promise.resolve(returnedJSON), + }) + ) as jest.Mock; +} + describe("React homepage", () => { @@ -46,7 +54,7 @@ describe("React homepage", () => { const history = createMemoryHistory(); const wrapper = render( - + ); @@ -63,7 +71,7 @@ describe("React homepage", () => { const history = createMemoryHistory(); const wrapper = render( - + ); @@ -85,9 +93,9 @@ describe("React homepage", () => { it("should render correctly", async () => { const history = createMemoryHistory(); - const {getByText, queryByText } = render( + const { getByText, queryByText } = render( - + ); @@ -123,14 +131,14 @@ describe("React homepage", () => { describe("Given the API returns malformed json", () => { beforeAll(() => { - mock_server_request(200, {text: "Hello"}); + mock_server_malformed_response(200, { text: "Hello" }); }); it("it should render with the error message displayed", async () => { const history = createMemoryHistory(); - const {getByText, queryByText } = render( + const { getByText, queryByText } = render( - + ); @@ -158,9 +166,9 @@ describe("Given the API returns an empty list", () => { it("it should render with a message to inform the user in the list", async () => { const history = createMemoryHistory(); - const {getByText, queryByText } = render( + const { getByText, queryByText } = render( - + ); diff --git a/src/Components/InstrumentList.tsx b/src/Components/InstrumentList.tsx index 734c596c..37a23e7d 100644 --- a/src/Components/InstrumentList.tsx +++ b/src/Components/InstrumentList.tsx @@ -73,7 +73,7 @@ function InstrumentList(props: Props): ReactElement { diff --git a/src/features/step_definitions/TO_Interviewer_Exception_Paths.test.tsx b/src/features/step_definitions/TO_Interviewer_Exception_Paths.test.tsx index 08c56778..604b2244 100644 --- a/src/features/step_definitions/TO_Interviewer_Exception_Paths.test.tsx +++ b/src/features/step_definitions/TO_Interviewer_Exception_Paths.test.tsx @@ -1,36 +1,35 @@ -import {defineFeature, loadFeature} from "jest-cucumber"; -import {Survey} from "blaise-api-node-client"; -import {createMemoryHistory} from "history"; -import {render, screen, waitFor} from "@testing-library/react"; -import {Router} from "react-router"; +import { defineFeature, loadFeature } from "jest-cucumber"; +import { Survey } from "blaise-api-node-client"; +import { createMemoryHistory } from "history"; +import { render, screen, waitFor } from "@testing-library/react"; +import { Router } from "react-router-dom"; import App from "../../App"; -import {act} from "react-dom/test-utils"; +import { act } from "react-dom/test-utils"; import flushPromises from "../../tests/utils"; import React from "react"; const feature = loadFeature( "./src/features/TO_Interviewer_Exception_Paths.feature", - {tagFilter: "not @server and not @integration"} + { tagFilter: "not @server and not @integration" } ); function mock_server_request(returnedStatus: number, returnedJSON: Survey[]) { - //@ts-ignore global.fetch = jest.fn(() => Promise.resolve({ status: returnedStatus, json: () => Promise.resolve(returnedJSON), }) - ); + ) as jest.Mock; } defineFeature(feature, test => { - test("Accessing Blaise via Blaise 5 User Interface: Blaise is down/not responding", ({given, when, then}) => { + test("Accessing Blaise via Blaise 5 User Interface: Blaise is down/not responding", ({ given, when, then }) => { given("I am a Blaise user trying to access via TOBI", () => { mock_server_request(500, []); const history = createMemoryHistory(); render( - + ); }); diff --git a/src/features/step_definitions/TO_Interviewer_Happy_Path.test.tsx b/src/features/step_definitions/TO_Interviewer_Happy_Path.test.tsx index 13cd03eb..1a3106a0 100644 --- a/src/features/step_definitions/TO_Interviewer_Happy_Path.test.tsx +++ b/src/features/step_definitions/TO_Interviewer_Happy_Path.test.tsx @@ -1,11 +1,11 @@ // React import React from "react"; // Test modules -import {defineFeature, loadFeature} from "jest-cucumber"; -import {cleanup, fireEvent, render, screen, waitFor} from "@testing-library/react"; -import {act} from "react-dom/test-utils"; -import {createMemoryHistory} from "history"; -import {Router} from "react-router"; +import { defineFeature, loadFeature } from "jest-cucumber"; +import { cleanup, fireEvent, render, screen, waitFor } from "@testing-library/react"; +import { act } from "react-dom/test-utils"; +import { createMemoryHistory } from "history"; +import { Router } from "react-router-dom"; import flushPromises from "../../tests/utils"; // Mock elements import { @@ -20,17 +20,16 @@ import { Survey } from "blaise-api-node-client"; // Load in feature details from .feature file const feature = loadFeature( "./src/features/TO_Interviewer_Happy_Path.feature", - {tagFilter: "not @server and not @integration"} + { tagFilter: "not @server and not @integration" } ); function mock_server_request(returnedStatus: number, returnedJSON: Survey[]) { - //@ts-ignore global.fetch = jest.fn(() => Promise.resolve({ status: returnedStatus, json: () => Promise.resolve(returnedJSON), }) - ); + ) as jest.Mock; } defineFeature(feature, test => { @@ -49,7 +48,7 @@ defineFeature(feature, test => { /** * Scenario 2 **/ - test("View live survey list in TOBI", ({given, when, then}) => { + test("View live survey list in TOBI", ({ given, when, then }) => { given("I am a Telephone Operations TO Interviewer", () => { mock_server_request( 200, @@ -61,7 +60,7 @@ defineFeature(feature, test => { const history = createMemoryHistory(); render( - + ); await act(async () => { @@ -80,7 +79,7 @@ defineFeature(feature, test => { /** * Scenario 2 **/ - test("Select survey", ({given, when, then, and}) => { + test("Select survey", ({ given, when, then, and }) => { given("I can view a list of surveys on Blaise within TOBI", async () => { mock_server_request( @@ -90,7 +89,7 @@ defineFeature(feature, test => { const history = createMemoryHistory(); render( - + ); await act(async () => { @@ -141,7 +140,7 @@ defineFeature(feature, test => { /** * Scenario 3c **/ - test("Return to select survey", ({given, when, then}) => { + test("Return to select survey", ({ given, when, then }) => { given("I have selected a survey", async () => { mock_server_request( 200, @@ -150,7 +149,7 @@ defineFeature(feature, test => { const history = createMemoryHistory(); render( - + ); diff --git a/src/tests/utils/index.ts b/src/tests/utils/index.ts index 945b5877..db94bf6e 100644 --- a/src/tests/utils/index.ts +++ b/src/tests/utils/index.ts @@ -1,4 +1,3 @@ -// @ts-ignore -const flushPromises = () => new Promise(setTimeout); +const flushPromises = () => new Promise(resolve => setTimeout(resolve, 0)); export default () => flushPromises().then(flushPromises); diff --git a/yarn.lock b/yarn.lock index c93988e3..22e77b2c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -34,13 +34,6 @@ jsonpointer "^5.0.0" leven "^3.1.0" -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.8.3": version "7.22.13" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" @@ -94,7 +87,7 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.22.5": +"@babel/helper-annotate-as-pure@^7.18.6", "@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== @@ -119,7 +112,7 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.22.5": +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0", "@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.22.5": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== @@ -283,7 +276,7 @@ "@babel/traverse" "^7.23.0" "@babel/types" "^7.23.0" -"@babel/highlight@^7.10.4", "@babel/highlight@^7.22.13": +"@babel/highlight@^7.22.13": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== @@ -370,6 +363,16 @@ 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.21.11": + version "7.21.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz#69d597086b6760c4126525cfa154f34631ff272c" + integrity sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" @@ -1294,24 +1297,9 @@ eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": - version "4.9.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.9.0.tgz#7ccb5f58703fa61ffdcbf39e2c604a109e781162" - integrity sha512-zJmuCWj2VLBt4c25CfBIbMZLGLyhkvs7LznyVX5HfpzeocThgIj5XQK4L+g3U36mMcx8bPMhGyPpwCATamC4jQ== - -"@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== - dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" + version "4.9.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.9.1.tgz#449dfa81a57a1d755b09aa58d826c1262e4283b4" + integrity sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA== "@eslint/eslintrc@^2.1.2": version "2.1.2" @@ -1333,6 +1321,11 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.50.0.tgz#9e93b850f0f3fa35f5fa59adfd03adae8488e484" integrity sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ== +"@eslint/js@8.51.0": + version "8.51.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.51.0.tgz#6d419c240cfb2b66da37df230f7e7eef801c32fa" + integrity sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg== + "@google-cloud/common@^4.0.0": version "4.0.3" resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-4.0.3.tgz#d4324ac83087385d727593f7e1b6d81ee66442cf" @@ -1434,21 +1427,12 @@ debug "^4.1.1" minimatch "^3.0.5" -"@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== - dependencies: - "@humanwhocodes/object-schema" "^1.2.0" - debug "^4.1.1" - minimatch "^3.0.4" - "@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.0", "@humanwhocodes/object-schema@^1.2.1": +"@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== @@ -2538,7 +2522,7 @@ jest-diff "^26.0.0" pretty-format "^26.0.0" -"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.13" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.13.tgz#02c24f4363176d2d18fc8b70b9f3c54aba178a85" integrity sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ== @@ -2836,21 +2820,7 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^4.6.1": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276" - integrity sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg== - dependencies: - "@typescript-eslint/experimental-utils" "4.33.0" - "@typescript-eslint/scope-manager" "4.33.0" - debug "^4.3.1" - functional-red-black-tree "^1.0.1" - ignore "^5.1.8" - regexpp "^3.1.0" - semver "^7.3.5" - tsutils "^3.21.0" - -"@typescript-eslint/eslint-plugin@^5.5.0": +"@typescript-eslint/eslint-plugin@^5.43.0", "@typescript-eslint/eslint-plugin@^5.5.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== @@ -2866,18 +2836,6 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd" - integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q== - dependencies: - "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.33.0" - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/typescript-estree" "4.33.0" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - "@typescript-eslint/experimental-utils@^5.0.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz#14559bf73383a308026b427a4a6129bae2146741" @@ -3166,7 +3124,7 @@ acorn-import-assertions@^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.1, acorn-jsx@^5.3.2: +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== @@ -3176,7 +3134,7 @@ acorn-walk@^7.1.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^7.1.1, acorn@^7.4.0: +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== @@ -3225,7 +3183,7 @@ ajv-keywords@^5.1.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -3235,7 +3193,7 @@ ajv@^6.10.0, ajv@^6.12.2, 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.0.1, ajv@^8.6.0, ajv@^8.9.0: +ajv@^8.0.0, ajv@^8.6.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== @@ -3245,11 +3203,6 @@ ajv@^8.0.0, ajv@^8.0.1, ajv@^8.6.0, ajv@^8.9.0: require-from-string "^2.0.2" uri-js "^4.2.2" -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" @@ -3507,11 +3460,6 @@ ast-types-flow@^0.0.7: resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - async@^3.2.3: version "3.2.4" resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" @@ -3945,6 +3893,13 @@ browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4 node-releases "^2.0.13" update-browserslist-db "^1.0.13" +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -3975,6 +3930,13 @@ builtin-modules@^3.1.0: resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== +builtins@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" + integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + dependencies: + semver "^7.0.0" + bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -4362,7 +4324,7 @@ concurrently@^7.6.0: tree-kill "^1.2.2" yargs "^17.3.1" -confusing-browser-globals@^1.0.11: +confusing-browser-globals@^1.0.10, confusing-browser-globals@^1.0.11: version "1.0.11" resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== @@ -4702,6 +4664,11 @@ damerau-levenshtein@^1.0.8: resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== +data-uri-to-buffer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" + integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== + data-urls@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" @@ -4725,7 +4692,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0: 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== @@ -5144,14 +5111,6 @@ enhanced-resolve@^5.15.0: graceful-fs "^4.2.4" tapable "^2.2.0" -enquirer@^2.3.5: - version "2.4.1" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" - integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== - dependencies: - ansi-colors "^4.1.1" - strip-ansi "^6.0.1" - ent@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" @@ -5329,6 +5288,32 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" +eslint-config-airbnb-base@^15.0.0: + version "15.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236" + integrity sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig== + dependencies: + confusing-browser-globals "^1.0.10" + object.assign "^4.1.2" + object.entries "^1.1.5" + semver "^6.3.0" + +eslint-config-airbnb-typescript@^17.0.0: + version "17.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.1.0.tgz#fda960eee4a510f092a9a1c139035ac588937ddc" + integrity sha512-GPxI5URre6dDpJ0CtcthSZVBAfI+Uw7un5OYNVxP2EYi3H81Jw701yFP7AU+/vCE7xBtFmjge7kfhhk4+RAiig== + dependencies: + eslint-config-airbnb-base "^15.0.0" + +eslint-config-airbnb@^19.0.4: + version "19.0.4" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz#84d4c3490ad70a0ffa571138ebcdea6ab085fdc3" + integrity sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew== + dependencies: + eslint-config-airbnb-base "^15.0.0" + object.assign "^4.1.2" + object.entries "^1.1.5" + eslint-config-react-app@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz#73ba3929978001c5c86274c017ea57eb5fa644b4" @@ -5365,6 +5350,14 @@ eslint-module-utils@^2.8.0: dependencies: debug "^3.2.7" +eslint-plugin-es@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz#f0822f0c18a535a97c3e714e89f88586a7641ec9" + integrity sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ== + dependencies: + eslint-utils "^2.0.0" + regexpp "^3.0.0" + eslint-plugin-flowtype@^8.0.3: version "8.0.3" resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz#e1557e37118f24734aa3122e7536a038d34a4912" @@ -5373,7 +5366,7 @@ eslint-plugin-flowtype@^8.0.3: lodash "^4.17.21" string-natural-compare "^3.0.1" -eslint-plugin-import@^2.25.3: +eslint-plugin-import@^2.25.3, eslint-plugin-import@^2.28.1: version "2.28.1" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz#63b8b5b3c409bfc75ebaf8fb206b07ab435482c4" integrity sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A== @@ -5425,12 +5418,31 @@ eslint-plugin-jsx-a11y@^6.5.1: object.fromentries "^2.0.6" semver "^6.3.0" -eslint-plugin-react-hooks@^4.3.0: +eslint-plugin-n@^15.0.0: + version "15.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz#e29221d8f5174f84d18f2eb94765f2eeea033b90" + integrity sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q== + dependencies: + builtins "^5.0.1" + eslint-plugin-es "^4.1.0" + eslint-utils "^3.0.0" + ignore "^5.1.1" + is-core-module "^2.11.0" + minimatch "^3.1.2" + resolve "^1.22.1" + semver "^7.3.8" + +eslint-plugin-promise@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816" + integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== + +eslint-plugin-react-hooks@^4.3.0, eslint-plugin-react-hooks@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== -eslint-plugin-react@^7.21.5, eslint-plugin-react@^7.27.1: +eslint-plugin-react@^7.27.1, eslint-plugin-react@^7.32.2: version "7.33.2" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== @@ -5475,7 +5487,7 @@ eslint-scope@^7.2.2: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-utils@^2.1.0: +eslint-utils@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== @@ -5489,7 +5501,7 @@ eslint-utils@^3.0.0: dependencies: eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: +eslint-visitor-keys@^1.1.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== @@ -5515,51 +5527,48 @@ eslint-webpack-plugin@^3.1.1: normalize-path "^3.0.0" schema-utils "^4.0.0" -eslint@^7.13.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== +eslint@^8.0.1: + version "8.51.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.51.0.tgz#4a82dae60d209ac89a5cff1604fea978ba4950f3" + integrity sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA== dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" - ajv "^6.10.0" + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.2" + "@eslint/js" "8.51.0" + "@humanwhocodes/config-array" "^0.11.11" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.12.4" 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" - esquery "^1.4.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + 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 "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-yaml "^3.13.1" + 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.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" - strip-json-comments "^3.1.0" - table "^6.0.9" + optionator "^0.9.3" + strip-ansi "^6.0.1" text-table "^0.2.0" - v8-compile-cache "^2.0.3" eslint@^8.3.0: version "8.50.0" @@ -5604,15 +5613,6 @@ eslint@^8.3.0: strip-ansi "^6.0.1" text-table "^0.2.0" -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - espree@^9.0.0, espree@^9.6.0, espree@^9.6.1: version "9.6.1" resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" @@ -5632,7 +5632,7 @@ esprima@^4.0.0, esprima@^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, esquery@^1.4.2: +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== @@ -5891,7 +5891,7 @@ fast-glob@^3.2.12, fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -5937,6 +5937,14 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" +fetch-blob@^3.1.2, fetch-blob@^3.1.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" + integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -6037,15 +6045,15 @@ findit2@^2.2.3: integrity sha512-lg/Moejf4qXovVutL0Lz4IsaPoNYMuxt4PA0nGqFxnJ1CTTGGlEO2wKgoDpwknhvZ8k4Q2F+eesgkLbG2Mxfog== flat-cache@^3.0.4: - version "3.1.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.0.tgz#0e54ab4a1a60fe87e2946b6b00657f1c99e1af3f" - integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew== + version "3.1.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.1.tgz#a02a15fdec25a8f844ff7cc658f03dd99eb4609b" + integrity sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q== dependencies: - flatted "^3.2.7" + flatted "^3.2.9" keyv "^4.5.3" rimraf "^3.0.2" -flatted@^3.2.7: +flatted@^3.2.9: version "3.2.9" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== @@ -6104,6 +6112,13 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +formdata-polyfill@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== + dependencies: + fetch-blob "^3.1.2" + formidable@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/formidable/-/formidable-2.1.2.tgz#fa973a2bec150e4ce7cac15589d7a25fc30ebd89" @@ -6206,11 +6221,6 @@ function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: es-abstract "^1.22.1" functions-have-names "^1.2.3" -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - 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" @@ -6414,10 +6424,10 @@ 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.19.0, globals@^13.6.0, globals@^13.9.0: - version "13.22.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.22.0.tgz#0c9fcb9c48a2494fbb5edbfee644285543eba9d8" - integrity sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw== +globals@^13.19.0: + version "13.23.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02" + integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== dependencies: type-fest "^0.20.2" @@ -6865,12 +6875,7 @@ ieee754@^1.2.1: 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: +ignore@^5.1.1, ignore@^5.2.0: version "5.2.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== @@ -6880,7 +6885,7 @@ immer@^9.0.7: resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176" integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== -import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: +import-fresh@^3.1.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -7027,7 +7032,7 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-core-module@^2.13.0, is-core-module@^2.9.0: +is-core-module@^2.11.0, is-core-module@^2.13.0: version "2.13.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== @@ -8240,7 +8245,7 @@ jest-util@^28.1.3: graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-util@^29.7.0: +jest-util@^29.0.0, jest-util@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== @@ -8619,9 +8624,9 @@ jws@^4.0.0: safe-buffer "^5.0.1" keyv@^4.5.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" @@ -8810,7 +8815,7 @@ lodash.isstring@^4.0.1: resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== -lodash.memoize@^4.1.2: +lodash.memoize@4.x, lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== @@ -8830,11 +8835,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.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -8909,6 +8909,11 @@ make-dir@^4.0.0: dependencies: semver "^7.5.3" +make-error@1.x: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + makeerror@1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" @@ -9218,6 +9223,11 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" +node-domexception@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== + node-fetch@^2.6.1, node-fetch@^2.6.7, node-fetch@^2.6.9: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" @@ -9225,6 +9235,15 @@ node-fetch@^2.6.1, node-fetch@^2.6.7, node-fetch@^2.6.9: dependencies: whatwg-url "^5.0.0" +node-fetch@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" + integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== + dependencies: + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" + node-forge@^1, node-forge@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" @@ -9370,7 +9389,7 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.1.4: +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== @@ -9380,7 +9399,7 @@ object.assign@^4.1.4: has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.6: +object.entries@^1.1.5, object.entries@^1.1.6: version "1.1.7" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== @@ -9500,7 +9519,7 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" -optionator@^0.9.1, optionator@^0.9.3: +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== @@ -10443,11 +10462,6 @@ 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== - promise@^8.1.0: version "8.3.0" resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" @@ -10976,7 +10990,7 @@ regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: define-properties "^1.2.0" set-function-name "^2.0.0" -regexpp@^3.1.0: +regexpp@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== @@ -11101,7 +11115,7 @@ resolve.exports@^1.1.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== -resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.18.1, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.2, resolve@^1.22.4: +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.18.1, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.2: version "1.22.6" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362" integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== @@ -11110,12 +11124,21 @@ resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.18.1, resolve@^1.19 path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.22.1, resolve@^1.22.4: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + 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== + version "2.0.0-next.5" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" + integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== dependencies: - is-core-module "^2.9.0" + is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -11338,7 +11361,7 @@ semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.0.0, semver@^7.1.2, semver@^7.2.1, semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: +semver@^7.0.0, semver@^7.1.2, semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -11503,15 +11526,6 @@ slash@^4.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -12044,17 +12058,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.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" - integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== - 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" - tailwindcss@^3.0.2: version "3.3.3" resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.3.tgz#90da807393a2859189e48e9e7000e6880a736daf" @@ -12323,6 +12326,20 @@ ts-interface-checker@^0.1.9: resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== +ts-jest@^29.1.1: + version "29.1.1" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.1.tgz#f58fe62c63caf7bfcc5cc6472082f79180f0815b" + integrity sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA== + dependencies: + bs-logger "0.x" + fast-json-stable-stringify "2.x" + jest-util "^29.0.0" + json5 "^2.2.3" + lodash.memoize "4.x" + make-error "1.x" + semver "^7.5.3" + yargs-parser "^21.0.1" + tsconfig-paths@^3.14.2: version "3.14.2" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" @@ -12457,16 +12474,16 @@ typemoq@^2.1.0: lodash "^4.17.4" postinstall-build "^5.0.1" -typescript@^4.9.4: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - typescript@~4.2.2: version "4.2.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.4.tgz#8610b59747de028fda898a8aef0e103f156d0961" integrity sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg== +typescript@~4.3.5: + version "4.3.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" + integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== + uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" @@ -12643,11 +12660,6 @@ uuid@^9.0.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== -v8-compile-cache@^2.0.3: - version "2.4.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz#cdada8bec61e15865f05d097c5f4fd30e94dc128" - integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw== - v8-to-istanbul@^7.0.0: version "7.1.2" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1" @@ -12720,6 +12732,11 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" +web-streams-polyfill@^3.0.3: + 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" @@ -13254,7 +13271,7 @@ 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.1.1: +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" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==