diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 5ee198b0c5..10afe3c844 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,4 +1,4 @@ -EVG-NNNNN +DEVPROD-NNNNN ### Description diff --git a/package.json b/package.json index de2c9fd9b5..63bc8d1b80 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "spruce", - "version": "3.0.160", + "version": "3.0.164", "private": true, "scripts": { "bootstrap-logkeeper": "./scripts/bootstrap-logkeeper.sh", @@ -64,9 +64,9 @@ "@leafygreen-ui/card": "10.0.5", "@leafygreen-ui/checkbox": "12.0.5", "@leafygreen-ui/code": "14.0.1", - "@leafygreen-ui/combobox": "5.0.7", + "@leafygreen-ui/combobox": "7.0.1", "@leafygreen-ui/confirmation-modal": "5.0.6", - "@leafygreen-ui/emotion": "4.0.3", + "@leafygreen-ui/emotion": "4.0.7", "@leafygreen-ui/expandable-card": "3.0.5", "@leafygreen-ui/guide-cue": "5.0.4", "@leafygreen-ui/icon": "11.12.1", @@ -109,7 +109,7 @@ "deep-object-diff": "1.1.9", "env-cmd": "10.1.0", "graphql": "16.8.1", - "html-react-parser": "4.2.1", + "html-react-parser": "4.2.9", "js-cookie": "3.0.5", "linkify-html": "4.1.1", "linkifyjs": "4.1.0", @@ -150,7 +150,7 @@ "@styled/typescript-styled-plugin": "1.0.0", "@testing-library/jest-dom": "6.1.3", "@testing-library/react": "14.0.0", - "@testing-library/user-event": "14.4.3", + "@testing-library/user-event": "14.5.1", "@types/jest": "29.4.0", "@types/js-cookie": "^3.0.4", "@types/lodash.debounce": "4.0.7", @@ -164,7 +164,7 @@ "@typescript-eslint/eslint-plugin": "5.57.1", "@typescript-eslint/parser": "5.57.1", "@vitejs/plugin-react": "4.0.0", - "babel-jest": "29.5.0", + "babel-jest": "29.7.0", "babel-loader": "^9.1.3", "babel-plugin-import": "^1.13.6", "babel-plugin-import-graphql": "^2.8.1", @@ -178,7 +178,7 @@ "eslint-plugin-import": "2.26.0", "eslint-plugin-jest": "27.2.1", "eslint-plugin-jsdoc": "^46.2.6", - "eslint-plugin-jsx-a11y": "6.6.0", + "eslint-plugin-jsx-a11y": "6.7.1", "eslint-plugin-prettier": "4.2.1", "eslint-plugin-react": "7.30.1", "eslint-plugin-react-hooks": "4.6.0", diff --git a/scripts/deploy/deploy-production.test.ts b/scripts/deploy/deploy-production.test.ts new file mode 100644 index 0000000000..723579df13 --- /dev/null +++ b/scripts/deploy/deploy-production.test.ts @@ -0,0 +1,142 @@ +import prompts from "prompts"; +import { evergreenDeploy, localDeploy, ciDeploy } from "./deploy-production"; +import { runDeploy } from "./utils/deploy"; +import { getCommitMessages, getCurrentlyDeployedCommit } from "./utils/git"; +import { tagUtils } from "./utils/git/tag"; +import { isRunningOnCI } from "./utils/environment"; + +jest.mock("prompts"); +jest.mock("./utils/git/tag"); +jest.mock("./utils/git"); +jest.mock("./utils/deploy"); +jest.mock("./utils/environment"); + +describe("deploy-production", () => { + let consoleLogMock; + let processExitMock; + let consoleErrorMock; + + beforeEach(() => { + consoleLogMock = jest.spyOn(console, "log").mockImplementation(); + consoleErrorMock = jest.spyOn(console, "error").mockImplementation(); + processExitMock = jest + .spyOn(process, "exit") + .mockImplementation(() => undefined as never); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + describe("evergreenDeploy", () => { + it("should force deploy if no new commits and user confirms", async () => { + (getCommitMessages as jest.Mock).mockReturnValue(""); + (prompts as unknown as jest.Mock).mockResolvedValue({ value: true }); + + await evergreenDeploy(); + + expect(tagUtils.deleteTag).toHaveBeenCalled(); + expect(tagUtils.pushTags).toHaveBeenCalled(); + expect(consoleLogMock).toHaveBeenCalledWith( + "Check Evergreen for deploy progress." + ); + }); + + it("should cancel deploy if no new commits and user denies", async () => { + (getCommitMessages as jest.Mock).mockReturnValue(""); + (prompts as unknown as jest.Mock).mockResolvedValue({ value: false }); + await evergreenDeploy(); + expect(tagUtils.deleteTag).not.toHaveBeenCalled(); + expect(tagUtils.pushTags).not.toHaveBeenCalled(); + expect(consoleLogMock).toHaveBeenCalledWith( + "Deploy canceled. If systems are experiencing an outage and you'd like to push the deploy directly to S3, run yarn deploy:prod --local." + ); + }); + + it("should deploy if new commits, user confirms and create tag succeeds", async () => { + (getCommitMessages as jest.Mock).mockReturnValue( + "getCommitMessages result" + ); + (prompts as unknown as jest.Mock).mockResolvedValue({ value: true }); + (tagUtils.createTagAndPush as jest.Mock).mockResolvedValue(true); + const createTagAndPushMock = jest + .spyOn(tagUtils, "createTagAndPush") + .mockImplementation(() => true); + (getCurrentlyDeployedCommit as jest.Mock).mockReturnValue( + "getCurrentlyDeployedCommit mock" + ); + await evergreenDeploy(); + expect(consoleLogMock).toHaveBeenCalledTimes(2); + expect(consoleLogMock).toHaveBeenCalledWith( + "Currently Deployed Commit: getCurrentlyDeployedCommit mock" + ); + expect(consoleLogMock).toHaveBeenCalledWith( + "Commit messages:\ngetCommitMessages result" + ); + expect(createTagAndPushMock).toBeCalledTimes(1); + }); + + it("return exit code 1 if an error is thrown", async () => { + const e = new Error("test error", { cause: "cause of test error" }); + (getCommitMessages as jest.Mock).mockReturnValue( + "getCommitMessages result" + ); + (prompts as unknown as jest.Mock).mockResolvedValue({ value: true }); + (tagUtils.createTagAndPush as jest.Mock).mockImplementation(() => { + throw e; + }); + expect(await evergreenDeploy()); + expect(consoleErrorMock).toHaveBeenCalledWith(e); + expect(consoleLogMock).toHaveBeenCalledWith("Deploy failed."); + expect(processExitMock).toHaveBeenCalledWith(1); + }); + }); + + describe("localDeploy", () => { + it("should run deploy when user confirms", async () => { + (prompts as unknown as jest.Mock).mockResolvedValue({ value: true }); + await localDeploy(); + expect(runDeploy).toHaveBeenCalled(); + }); + + it("should not run deploy when user denies", async () => { + (prompts as unknown as jest.Mock).mockResolvedValue({ value: false }); + await localDeploy(); + expect(runDeploy).not.toHaveBeenCalled(); + }); + + it("logs and error and returns exit code 1 when error is thrown", async () => { + (prompts as unknown as jest.Mock).mockResolvedValue({ value: true }); + const e = new Error("error mock"); + (runDeploy as jest.Mock).mockImplementation(() => { + throw e; + }); + await localDeploy(); + expect(consoleErrorMock).toHaveBeenCalledWith(e); + expect(consoleErrorMock).toHaveBeenCalledWith( + "Local deploy failed. Aborting." + ); + expect(processExitMock).toHaveBeenCalledWith(1); + }); + }); + + describe("ciDeploy", () => { + it("returns exit code 1 when not running in CI", async () => { + (isRunningOnCI as jest.Mock).mockReturnValue(false); + await ciDeploy(); + expect(consoleErrorMock).toHaveBeenCalledWith( + new Error("Not running on CI") + ); + expect(consoleErrorMock).toHaveBeenCalledWith( + "CI deploy failed. Aborting." + ); + expect(processExitMock).toHaveBeenCalledWith(1); + }); + + it("should run deploy when running on CI", async () => { + (isRunningOnCI as jest.Mock).mockReturnValue(true); + await ciDeploy(); + expect(runDeploy).toHaveBeenCalled(); + }); + }); +}); diff --git a/scripts/deploy/deploy-production.ts b/scripts/deploy/deploy-production.ts index dac64cef44..1393f7f52d 100644 --- a/scripts/deploy/deploy-production.ts +++ b/scripts/deploy/deploy-production.ts @@ -1,92 +1,75 @@ import prompts from "prompts"; import { tagUtils } from "./utils/git/tag"; -import { green, underline } from "../utils/colors"; import { isRunningOnCI } from "./utils/environment"; import { getCommitMessages, getCurrentlyDeployedCommit } from "./utils/git"; import { runDeploy } from "./utils/deploy"; -const { createNewTag, deleteTag, getLatestTag, pushTags } = tagUtils; +const { createTagAndPush, deleteTag, getLatestTag, pushTags } = tagUtils; /* Deploy by pushing a git tag, to be picked up and built by Evergreen, and deployed to S3. */ const evergreenDeploy = async () => { - const currentlyDeployedCommit = getCurrentlyDeployedCommit(); - console.log(`Currently Deployed Commit: ${currentlyDeployedCommit}`); + try { + const currentlyDeployedCommit = getCurrentlyDeployedCommit(); + console.log(`Currently Deployed Commit: ${currentlyDeployedCommit}`); - const commitMessages = getCommitMessages(currentlyDeployedCommit); + const commitMessages = getCommitMessages(currentlyDeployedCommit); - // If there are no commit messages, ask the user if they want to delete and re-push the latest tag, thereby forcing a deploy with no new commits. - if (commitMessages.length === 0) { - const latestTag = getLatestTag(); - const response = await prompts({ - type: "confirm", - name: "value", - message: `No new commits. Do you want to trigger a deploy on the most recent existing tag? (${latestTag})`, - initial: false, - }); + // If there are no commit messages, ask the user if they want to delete and re-push the latest tag, thereby forcing a deploy with no new commits. + if (commitMessages.length === 0) { + const latestTag = getLatestTag(); + const { value: shouldForceDeploy } = await prompts({ + type: "confirm", + name: "value", + message: `No new commits. Do you want to trigger a deploy on the most recent existing tag? (${latestTag})`, + initial: false, + }); - const forceDeploy = response.value; - if (forceDeploy) { - console.log(`Deleting tag (${latestTag}) from remote...`); - deleteTag(latestTag); - console.log("Pushing tags..."); - pushTags(); - console.log("Check Evergreen for deploy progress."); + if (shouldForceDeploy) { + deleteTag(latestTag); + pushTags(); + console.log("Check Evergreen for deploy progress."); + } else { + console.log( + "Deploy canceled. If systems are experiencing an outage and you'd like to push the deploy directly to S3, run yarn deploy:prod --local." + ); + } return; } - console.log( - "Deploy canceled. If systems are experiencing an outage and you'd like to push the deploy directly to S3, run yarn deploy:prod --local." - ); - return; - } - - // Print all commits between the last tag and the current commit - console.log(`Commit messages:\n${commitMessages}`); + // Print all commits between the last tag and the current commit + console.log(`Commit messages:\n${commitMessages}`); - const response = await prompts({ - type: "confirm", - name: "value", - message: "Are you sure you want to deploy to production?", - }); + const { value: shouldCreateTagAndPush } = await prompts({ + type: "confirm", + name: "value", + message: "Are you sure you want to deploy to production?", + }); - if (response.value) { - try { - console.log("Creating new tag..."); - createNewTag(); - console.log("Pushing tags..."); - pushTags(); - console.log("Pushed to remote. Should be deploying soon..."); - console.log( - green( - `Track deploy progress at ${underline( - "https://spruce.mongodb.com/commits/spruce?requester=git_tag_request" - )}` - ) - ); - } catch (err) { - console.error(err); - console.error("Creating tag failed. Aborting."); - process.exit(1); + if (shouldCreateTagAndPush) { + createTagAndPush(); } + } catch (err) { + console.error(err); + console.log("Deploy failed."); + process.exit(1); } }; /* Deploy by generating a production build locally and pushing it directly to S3. */ const localDeploy = async () => { - const response = await prompts({ - type: "confirm", - name: "value", - message: - "Are you sure you'd like to build Spruce locally and push directly to S3? This is a high-risk operation that requires a correctly configured local environment.", - }); - - if (response.value) { - try { + try { + const response = await prompts({ + type: "confirm", + name: "value", + message: + "Are you sure you'd like to build Spruce locally and push directly to S3? This is a high-risk operation that requires a correctly configured local environment.", + }); + if (response.value) { runDeploy(); - } catch (err) { - console.error(err); - console.error("Local deploy failed. Aborting."); - process.exit(1); } + } catch (err) { + console.error(err); + console.error("Local deploy failed. Aborting."); + process.exit(1); } }; @@ -94,12 +77,11 @@ const localDeploy = async () => { * `ciDeploy` is a special deploy function that is only run on CI. It does the actual deploy to S3. */ const ciDeploy = async () => { - if (!isRunningOnCI()) { - throw new Error("Not running on CI"); - } try { - const ciDeployOutput = runDeploy(); - console.log(ciDeployOutput); + if (!isRunningOnCI()) { + throw new Error("Not running on CI"); + } + runDeploy(); } catch (err) { console.error(err); console.error("CI deploy failed. Aborting."); diff --git a/scripts/deploy/utils/git/tag/mock-tag-utils.ts b/scripts/deploy/utils/git/tag/mock-tag-utils.ts index cd54f20096..e953b27a04 100644 --- a/scripts/deploy/utils/git/tag/mock-tag-utils.ts +++ b/scripts/deploy/utils/git/tag/mock-tag-utils.ts @@ -1,10 +1,10 @@ import { yellow } from "../../../../utils/colors"; /** - * `createNewTag` is a helper function that creates a new tag. + * `createTagAndPush` is a helper function that creates a new tag and pushes to remote. */ -const createNewTag = () => { - console.log(yellow("Dry run mode enabled. Created new tag.")); +const createTagAndPush = () => { + console.log(yellow("Dry run mode enabled. Created new tag and pushed.")); }; /** @@ -31,4 +31,4 @@ const pushTags = () => { console.log(yellow("Dry run mode enabled. Pushing tags.")); }; -export { createNewTag, getLatestTag, deleteTag, pushTags }; +export { createTagAndPush, getLatestTag, deleteTag, pushTags }; diff --git a/scripts/deploy/utils/git/tag/tag-utils.ts b/scripts/deploy/utils/git/tag/tag-utils.ts index 97d511ff9f..3fc2efe3db 100644 --- a/scripts/deploy/utils/git/tag/tag-utils.ts +++ b/scripts/deploy/utils/git/tag/tag-utils.ts @@ -1,14 +1,29 @@ import { execSync } from "child_process"; import { githubRemote } from "./constants"; +import { green, underline } from "../../../../utils/colors"; /** - * `createNewTag` is a helper function that creates a new tag. + * `createTagAndPush` is a helper function that creates a new tag. + * Pushing occurs in the postversion hook triggered by "yarn version" */ -const createNewTag = () => { - execSync("yarn version --new-version patch", { - encoding: "utf-8", - stdio: "inherit", - }); +const createTagAndPush = () => { + console.log("Creating new tag..."); + try { + execSync("yarn version --new-version patch", { + encoding: "utf-8", + stdio: "inherit", + }); + } catch (err) { + throw new Error("Creating new tag failed.", { cause: err }); + } + console.log("Pushed to remote. Should be deploying soon..."); + console.log( + green( + `Track deploy progress at ${underline( + "https://spruce.mongodb.com/commits/spruce?requester=git_tag_request" + )}` + ) + ); }; /** @@ -16,12 +31,16 @@ const createNewTag = () => { * @returns - the latest tag */ const getLatestTag = () => { - const latestTag = execSync("git describe --tags --abbrev=0", { - encoding: "utf-8", - }) - .toString() - .trim(); - return latestTag; + try { + const latestTag = execSync("git describe --tags --abbrev=0", { + encoding: "utf-8", + }) + .toString() + .trim(); + return latestTag; + } catch (err) { + throw new Error("Getting latest tag failed.", { cause: err }); + } }; /** @@ -29,18 +48,28 @@ const getLatestTag = () => { * @param tag - the tag to delete */ const deleteTag = (tag: string) => { + console.log(`Deleting tag (${tag}) from remote...`); const deleteCommand = `git push --delete ${githubRemote} ${tag}`; - execSync(deleteCommand, { stdio: "inherit", encoding: "utf-8" }); + try { + execSync(deleteCommand, { stdio: "inherit", encoding: "utf-8" }); + } catch (err) { + throw new Error("Deleting tag failed.", { cause: err }); + } }; /** * `pushTags` is a helper function that pushes tags to the remote. */ const pushTags = () => { - execSync(`git push --tags ${githubRemote}`, { - stdio: "inherit", - encoding: "utf-8", - }); + console.log("Pushing tags..."); + try { + execSync(`git push --tags ${githubRemote}`, { + stdio: "inherit", + encoding: "utf-8", + }); + } catch (err) { + throw new Error("Pushing tags failed.", { cause: err }); + } }; -export { createNewTag, getLatestTag, deleteTag, pushTags }; +export { createTagAndPush, getLatestTag, deleteTag, pushTags }; diff --git a/scripts/push-version.sh b/scripts/push-version.sh index 1c5011e38d..024bac9958 100755 --- a/scripts/push-version.sh +++ b/scripts/push-version.sh @@ -3,7 +3,13 @@ WAIT_TIME=9 GITHUB_REMOTE=https://github.com/evergreen-ci/spruce -git push $GITHUB_REMOTE +if git push $GITHUB_REMOTE +then + echo "Successfully pushed to ${GITHUB_REMOTE}" +else + echo "Failed to push to ${GITHUB_REMOTE}" + exit 1 +fi i=$WAIT_TIME while [ $i -gt 0 ] @@ -11,4 +17,11 @@ while [ $i -gt 0 ] done echo "" -git push --tags $GITHUB_REMOTE +if git push --tags $GITHUB_REMOTE +then + echo "Successfully pushed tags to ${GITHUB_REMOTE}" +else + echo "Failed to push tags to ${GITHUB_REMOTE}" + exit 1 +fi + diff --git a/src/analytics/task/useTaskAnalytics.ts b/src/analytics/task/useTaskAnalytics.ts index 81c5e80ae8..dbb7057dd2 100644 --- a/src/analytics/task/useTaskAnalytics.ts +++ b/src/analytics/task/useTaskAnalytics.ts @@ -64,6 +64,10 @@ type Action = parsleyAvailable: boolean; fileName: string; } + | { + name: "Click Task File Parsley Link"; + fileName: string; + } | { name: "Click Trace Link" } | { name: "Click Trace Metrics Link" } | { name: "Submit Previous Commit Selector"; type: CommitType }; @@ -80,6 +84,7 @@ export const useTaskAnalytics = () => { const { failedTestCount, latestExecution, + project: { identifier } = { identifier: null }, status: taskStatus, } = eventData?.task || {}; const isLatestExecution = latestExecution === execution; @@ -90,5 +95,6 @@ export const useTaskAnalytics = () => { isLatestExecution: isLatestExecution.toString(), taskId: id, failedTestCount, + projectIdentifier: identifier, }); }; diff --git a/src/components/Header/Navbar.tsx b/src/components/Header/Navbar.tsx index 730ac0a9f9..cf492e53d1 100644 --- a/src/components/Header/Navbar.tsx +++ b/src/components/Header/Navbar.tsx @@ -7,6 +7,7 @@ import Cookies from "js-cookie"; import { Link, useParams } from "react-router-dom"; import { useNavbarAnalytics } from "analytics"; import Icon from "components/Icon"; +import HalloweenTree from "components/Icon/icons/Halloween.svg"; import { CURRENT_PROJECT } from "constants/cookies"; import { wikiUrl } from "constants/externalResources"; import { getCommitsRoute, getUserPatchesRoute, routes } from "constants/routes"; @@ -60,7 +61,10 @@ export const Navbar: React.FC = () => { to={routes.myPatches} onClick={() => sendEvent({ name: "Click Logo Link" })} > - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/constants/externalResources.test.ts b/src/constants/externalResources.test.ts index 448403e1b2..2beef1584b 100644 --- a/src/constants/externalResources.test.ts +++ b/src/constants/externalResources.test.ts @@ -54,9 +54,13 @@ describe("getParsleyBuildLogURL", () => { describe("getTaskTraceUrl", () => { it("generates the correct url", () => { expect( - getHoneycombTraceUrl("abcdef", new Date("2023-07-07T19:08:41")) + getHoneycombTraceUrl( + "abcdef", + new Date("2023-07-07T19:08:41"), + new Date("2023-07-07T19:09:00") + ) ).toBe( - "/datasets/evergreen-agent/trace?trace_id=abcdef&trace_start_ts=1688756921" + "/datasets/evergreen-agent/trace?trace_id=abcdef&trace_start_ts=1688756921&trace_end_ts=1688756940" ); }); }); diff --git a/src/constants/externalResources.ts b/src/constants/externalResources.ts index 39f6c1507b..8bb18a6a35 100644 --- a/src/constants/externalResources.ts +++ b/src/constants/externalResources.ts @@ -103,10 +103,14 @@ export const getParsleyTestLogURL = (buildId: string, testId: string) => export const getParsleyBuildLogURL = (buildId: string) => `${getParsleyUrl()}/resmoke/${buildId}/all`; -export const getHoneycombTraceUrl = (traceId: string, startTs: Date) => +export const getHoneycombTraceUrl = ( + traceId: string, + startTs: Date, + endTs: Date +) => `${getHoneycombBaseURL()}/datasets/evergreen-agent/trace?trace_id=${traceId}&trace_start_ts=${getUnixTime( new Date(startTs) - )}`; + )}&trace_end_ts=${getUnixTime(new Date(endTs))}`; export const getHoneycombSystemMetricsUrl = ( taskId: string, diff --git a/src/gql/generated/types.ts b/src/gql/generated/types.ts index b7b565d995..88b1794c22 100644 --- a/src/gql/generated/types.ts +++ b/src/gql/generated/types.ts @@ -8132,6 +8132,7 @@ export type TaskFilesQuery = { __typename?: "File"; link: string; name: string; + urlParsley?: string | null; }> | null; }>; }; diff --git a/src/gql/queries/task-files.graphql b/src/gql/queries/task-files.graphql index 39f1dbf0b8..7a05aada40 100644 --- a/src/gql/queries/task-files.graphql +++ b/src/gql/queries/task-files.graphql @@ -7,6 +7,7 @@ query TaskFiles($taskId: String!, $execution: Int) { files { link name + urlParsley } taskName } diff --git a/src/pages/preferences/preferencesTabs/notificationTab/ClearSubscriptions.tsx b/src/pages/preferences/preferencesTabs/notificationTab/ClearSubscriptions.tsx index 5d3edc69e6..2c4d9ec2d3 100644 --- a/src/pages/preferences/preferencesTabs/notificationTab/ClearSubscriptions.tsx +++ b/src/pages/preferences/preferencesTabs/notificationTab/ClearSubscriptions.tsx @@ -1,6 +1,7 @@ import { useState } from "react"; import { useMutation } from "@apollo/client"; import Button, { Variant } from "@leafygreen-ui/button"; +import pluralize from "pluralize"; import { usePreferencesAnalytics } from "analytics"; import { ConfirmationModal } from "components/ConfirmationModal"; import { useToastContext } from "context/toast"; @@ -23,9 +24,10 @@ export const ClearSubscriptions: React.FC = () => { onCompleted: (result) => { setShowModal(false); dispatchToast.success( - `Successfully cleared ${result.clearMySubscriptions} subscription${ - result.clearMySubscriptions !== 1 && "s" - }!` + `Successfully cleared ${result.clearMySubscriptions} ${pluralize( + "subscription", + result.clearMySubscriptions + )}.` ); }, onError: (err) => { diff --git a/src/pages/projectSettings/tabs/ProjectTriggersTab/getFormSchema.ts b/src/pages/projectSettings/tabs/ProjectTriggersTab/getFormSchema.ts index d32ff0706a..28cfb710cc 100644 --- a/src/pages/projectSettings/tabs/ProjectTriggersTab/getFormSchema.ts +++ b/src/pages/projectSettings/tabs/ProjectTriggersTab/getFormSchema.ts @@ -50,6 +50,11 @@ export const getFormSchema = ( title: "Build", enum: [ProjectTriggerLevel.BUILD], }, + { + type: "string" as "string", + title: "Push", + enum: [ProjectTriggerLevel.PUSH], + }, ], }, status: { diff --git a/src/pages/task/metadata/Metadata.test.tsx b/src/pages/task/metadata/Metadata.test.tsx index 5c164be89a..466b1d52ef 100644 --- a/src/pages/task/metadata/Metadata.test.tsx +++ b/src/pages/task/metadata/Metadata.test.tsx @@ -3,7 +3,7 @@ import { addMilliseconds } from "date-fns"; import { getUserMock } from "gql/mocks/getUser"; import { taskQuery } from "gql/mocks/taskData"; import { renderWithRouterMatch as render, screen, userEvent } from "test_utils"; -import { Metadata } from "./index"; +import { Metadata } from "."; const wrapper = ({ children }) => ( {children} diff --git a/src/pages/task/metadata/index.tsx b/src/pages/task/metadata/index.tsx index 4e0975d94a..b2cc51f6e0 100644 --- a/src/pages/task/metadata/index.tsx +++ b/src/pages/task/metadata/index.tsx @@ -371,7 +371,7 @@ export const Metadata: React.FC = ({ error, loading, task, taskId }) => { { onHideCue(); taskAnalytics.sendEvent({ name: "Click Trace Link" }); diff --git a/src/pages/task/taskTabs/FileTable/GroupedFileTable/index.tsx b/src/pages/task/taskTabs/FileTable/GroupedFileTable/index.tsx index cc14e980d0..d67d11c1c8 100644 --- a/src/pages/task/taskTabs/FileTable/GroupedFileTable/index.tsx +++ b/src/pages/task/taskTabs/FileTable/GroupedFileTable/index.tsx @@ -1,6 +1,8 @@ import { useMemo, useRef } from "react"; import styled from "@emotion/styled"; +import Button from "@leafygreen-ui/button"; import { useLeafyGreenTable, LGColumnDef } from "@leafygreen-ui/table/new"; +import Tooltip from "@leafygreen-ui/tooltip"; import { Subtitle } from "@leafygreen-ui/typography"; import { useTaskAnalytics } from "analytics"; import { StyledLink } from "components/styles"; @@ -17,24 +19,53 @@ const columns = ( { accessorKey: "name", header: "Name", - size: 60, + size: 100, enableSorting: true, - cell: (value) => ( - { - taskAnalytics.sendEvent({ - name: "Click Task File Link", - parsleyAvailable: false, - fileName: value.getValue() as GroupedFilesFile["name"], - }); - }} - > - {value.getValue()} - - ), + cell: (value) => { + const fileName = value.getValue() as GroupedFilesFile["name"]; + return ( + + { + taskAnalytics.sendEvent({ + name: "Click Task File Link", + parsleyAvailable: value.row.original.urlParsley !== null, + fileName, + }); + }} + > + {fileName} + + { + taskAnalytics.sendEvent({ + name: "Click Task File Parsley Link", + fileName, + }); + }} + > + Parsley + + } + enabled={value.row.original.urlParsley === null} + align="top" + justify="middle" + > + Only plain text files can be opened in Parsley. + + + ); + }, }, ]; @@ -70,4 +101,11 @@ const GroupedFileTable: React.FC = ({ const Container = styled.div` margin-bottom: ${size.m}; `; + +const CellContainer = styled.div` + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; +`; export default GroupedFileTable; diff --git a/src/pages/task/taskTabs/buildBaronAndAnnotations/FileTicketButton.tsx b/src/pages/task/taskTabs/buildBaronAndAnnotations/FileTicketButton.tsx index 2f646678d7..a440202137 100644 --- a/src/pages/task/taskTabs/buildBaronAndAnnotations/FileTicketButton.tsx +++ b/src/pages/task/taskTabs/buildBaronAndAnnotations/FileTicketButton.tsx @@ -34,6 +34,7 @@ const FileTicketButton: React.FC = ({ execution, taskId }) => { `There was an error filing the ticket: ${error.message}` ); }, + refetchQueries: ["CreatedTickets", "CustomCreatedIssues"], }); const [buttonText, setButtonText] = useState("File ticket"); diff --git a/src/pages/task/taskTabs/testsTable/getColumnsTemplate.tsx b/src/pages/task/taskTabs/testsTable/getColumnsTemplate.tsx index deda39fd71..db6236a42f 100644 --- a/src/pages/task/taskTabs/testsTable/getColumnsTemplate.tsx +++ b/src/pages/task/taskTabs/testsTable/getColumnsTemplate.tsx @@ -73,9 +73,8 @@ export const getColumnsTemplate = ({ }, }), sorter: true, - render: (status: string): JSX.Element => ( - - ), + render: (status: string): JSX.Element => + status && , }, { title: Time, diff --git a/src/pages/taskHistory/ColumnHeaders/index.tsx b/src/pages/taskHistory/ColumnHeaders/index.tsx index e346e415dc..0bcb56ee93 100644 --- a/src/pages/taskHistory/ColumnHeaders/index.tsx +++ b/src/pages/taskHistory/ColumnHeaders/index.tsx @@ -44,7 +44,7 @@ const ColumnHeaders: React.FC = ({ if (!buildVariantsForTaskName) { reportError( new Error("No build variants found for task name") - ).severe(); + ).warning(); dispatchToast.error(`No build variants found for task: ${taskName}`); } }, diff --git a/src/pages/variantHistory/ColumnHeaders.tsx b/src/pages/variantHistory/ColumnHeaders.tsx index aaeba13247..8319d9aacc 100644 --- a/src/pages/variantHistory/ColumnHeaders.tsx +++ b/src/pages/variantHistory/ColumnHeaders.tsx @@ -44,8 +44,10 @@ const ColumnHeaders: React.FC = ({ if (!taskNamesForBuildVariant) { reportError( new Error("No task names found for build variant") - ).severe(); - dispatchToast.error(`No tasks found for buildVariant: ${variantName}}`); + ).warning(); + dispatchToast.error( + `No tasks found for build variant: ${variantName}}` + ); } }, }); diff --git a/yarn.lock b/yarn.lock index d91b6df896..91608b9d55 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1663,14 +1663,6 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime-corejs3@^7.10.2": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.22.10.tgz#5ecc3d32faa70009f084cc2e087d79e5f5cdcca9" - integrity sha512-IcixfV2Jl3UrqZX4c81+7lVg5++2ufYJyAFW3Aux/ZTvY6LVYYhJ9rMgnbX0zGVq6eqfVpnoatTjZdVki/GmWA== - dependencies: - core-js-pure "^3.30.2" - regenerator-runtime "^0.14.0" - "@babel/runtime@^7.0.0", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8" @@ -3035,6 +3027,13 @@ dependencies: "@sinclair/typebox" "^0.27.8" +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + "@jest/source-map@^29.6.0": version "29.6.0" resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.0.tgz#bd34a05b5737cb1a99d43e1957020ac8e5b9ddb1" @@ -3064,22 +3063,22 @@ jest-haste-map "^29.6.2" slash "^3.0.0" -"@jest/transform@^29.3.1", "@jest/transform@^29.5.0", "@jest/transform@^29.6.2": - version "29.6.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.6.2.tgz#522901ebbb211af08835bc3bcdf765ab778094e3" - integrity sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg== +"@jest/transform@^29.3.1", "@jest/transform@^29.6.2", "@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== dependencies: "@babel/core" "^7.11.6" - "@jest/types" "^29.6.1" + "@jest/types" "^29.6.3" "@jridgewell/trace-mapping" "^0.3.18" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" convert-source-map "^2.0.0" fast-json-stable-stringify "^2.1.0" graceful-fs "^4.2.9" - jest-haste-map "^29.6.2" - jest-regex-util "^29.4.3" - jest-util "^29.6.2" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" @@ -3108,6 +3107,18 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + "@joshwooding/vite-plugin-react-docgen-typescript@0.2.1": version "0.2.1" resolved "https://registry.yarnpkg.com/@joshwooding/vite-plugin-react-docgen-typescript/-/vite-plugin-react-docgen-typescript-0.2.1.tgz#930f6f0382520e4ba349eea1b152f9ae49364516" @@ -3175,7 +3186,7 @@ resolved "https://registry.yarnpkg.com/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz#8ace5259254426ccef57f3175bc64ed7095ed919" integrity sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw== -"@leafygreen-ui/a11y@^1.3.4", "@leafygreen-ui/a11y@^1.4.10", "@leafygreen-ui/a11y@^1.4.11", "@leafygreen-ui/a11y@^1.4.2", "@leafygreen-ui/a11y@^1.4.3", "@leafygreen-ui/a11y@^1.4.4", "@leafygreen-ui/a11y@^1.4.7", "@leafygreen-ui/a11y@^1.4.8", "@leafygreen-ui/a11y@^1.4.9": +"@leafygreen-ui/a11y@^1.3.4", "@leafygreen-ui/a11y@^1.4.10", "@leafygreen-ui/a11y@^1.4.11", "@leafygreen-ui/a11y@^1.4.2", "@leafygreen-ui/a11y@^1.4.3", "@leafygreen-ui/a11y@^1.4.7", "@leafygreen-ui/a11y@^1.4.8", "@leafygreen-ui/a11y@^1.4.9": version "1.4.11" resolved "https://registry.yarnpkg.com/@leafygreen-ui/a11y/-/a11y-1.4.11.tgz#5ebaa4a4a1bf99e2c3d6d9cb08f6b4983f2b2d59" integrity sha512-mzNMR4ci3ExdCY3Ec1kr7xH4nV02uamoohbWxcI9qSd41TFskaDAZSXO9PL9S8JosQXjpRkt0f470XvVE0kEXQ== @@ -3337,19 +3348,31 @@ "@leafygreen-ui/typography" "^17.0.0" react-transition-group "^4.4.5" -"@leafygreen-ui/checkbox@^12.0.4": - version "12.0.12" - resolved "https://registry.yarnpkg.com/@leafygreen-ui/checkbox/-/checkbox-12.0.12.tgz#837dd5add2675f39dd21ce3b4fbf2782ac12a039" - integrity sha512-4mOQAmSlnaSmd5U6Sk59+L8cWd0DCfY33w1PxezXR5un65FLXSnHBPdHgk4+lOZNrkG19pKBo36AKhfWhC8FzQ== +"@leafygreen-ui/checkbox@^12.0.20": + version "12.0.20" + resolved "https://registry.yarnpkg.com/@leafygreen-ui/checkbox/-/checkbox-12.0.20.tgz#8969b106f27ab30d3e5ff742682130a21c471409" + integrity sha512-H811SnLrrW2jwwno92AtpdqCNcmvHJCu0X+TjnPcYAUjvXPtGUBw+aJLpwQ+S4qtss6TavnsXQ75xJWnyM2w8A== dependencies: - "@leafygreen-ui/a11y" "^1.4.4" - "@leafygreen-ui/emotion" "^4.0.4" - "@leafygreen-ui/hooks" "^7.7.5" - "@leafygreen-ui/lib" "^10.4.0" - "@leafygreen-ui/palette" "^4.0.3" - "@leafygreen-ui/tokens" "^2.1.1" - "@leafygreen-ui/typography" "^16.5.1" - react-transition-group "^4.4.1" + "@leafygreen-ui/a11y" "^1.4.11" + "@leafygreen-ui/emotion" "^4.0.7" + "@leafygreen-ui/hooks" "^8.0.0" + "@leafygreen-ui/lib" "^13.0.0" + "@leafygreen-ui/palette" "^4.0.7" + "@leafygreen-ui/tokens" "^2.2.0" + "@leafygreen-ui/typography" "^18.0.0" + react-transition-group "^4.4.5" + +"@leafygreen-ui/chip@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@leafygreen-ui/chip/-/chip-1.0.0.tgz#d20aaa3cb86c3db1e3fae9f8dca8171b30cc3df4" + integrity sha512-Fldepy/oxO3izeLX4Mc8dgmZ95HngjtcTk+B/DR9SUGzL96l57PWrNiJd2PbRtSYjkic3af6cBGiDSvtHiPNNA== + dependencies: + "@leafygreen-ui/emotion" "^4.0.7" + "@leafygreen-ui/icon" "^11.23.0" + "@leafygreen-ui/inline-definition" "^6.0.11" + "@leafygreen-ui/lib" "^11.0.0" + "@leafygreen-ui/palette" "^4.0.7" + "@leafygreen-ui/tokens" "^2.2.0" "@leafygreen-ui/code@14.0.1": version "14.0.1" @@ -3373,22 +3396,24 @@ lodash "^4.17.21" polished "^4.2.2" -"@leafygreen-ui/combobox@5.0.7": - version "5.0.7" - resolved "https://registry.yarnpkg.com/@leafygreen-ui/combobox/-/combobox-5.0.7.tgz#149df876e5115a8173092ef71cfa543daee1e979" - integrity sha512-at1fYVog2ACDTAt8LM5PlaJ4DQoURUwEF9q50jCQTeoIioMGIkM+bllwdr/xEuqAx4PusF+SggIl2vR6BO5jOw== +"@leafygreen-ui/combobox@7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@leafygreen-ui/combobox/-/combobox-7.0.1.tgz#25a97f4ffe0d404d73aff0a2cbb847e477368fde" + integrity sha512-LFbqxZ4SSdK3Z9hdFUZ8UDFapq2g9iZ4xdb8Qn0TcHpyU1vEUTtmfEeh3LTA4VX5O35PwWbDGAHjb1Mp25d59g== dependencies: - "@leafygreen-ui/checkbox" "^12.0.4" - "@leafygreen-ui/emotion" "^4.0.3" - "@leafygreen-ui/hooks" "^7.3.3" - "@leafygreen-ui/icon" "^11.12.4" - "@leafygreen-ui/icon-button" "^15.0.4" - "@leafygreen-ui/inline-definition" "^6.0.2" - "@leafygreen-ui/lib" "^10.1.0" - "@leafygreen-ui/palette" "^3.4.7" - "@leafygreen-ui/popover" "^11.0.5" - "@leafygreen-ui/tokens" "^2.0.0" - "@leafygreen-ui/typography" "^16.0.0" + "@leafygreen-ui/checkbox" "^12.0.20" + "@leafygreen-ui/chip" "^1.0.0" + "@leafygreen-ui/emotion" "^4.0.7" + "@leafygreen-ui/hooks" "^8.0.0" + "@leafygreen-ui/icon" "^11.23.0" + "@leafygreen-ui/icon-button" "^15.0.19" + "@leafygreen-ui/inline-definition" "^6.0.13" + "@leafygreen-ui/input-option" "^1.0.13" + "@leafygreen-ui/lib" "^13.0.0" + "@leafygreen-ui/palette" "^4.0.7" + "@leafygreen-ui/popover" "^11.1.1" + "@leafygreen-ui/tokens" "^2.2.0" + "@leafygreen-ui/typography" "^18.0.0" chalk "^4.1.2" lodash "^4.17.21" polished "^4.2.2" @@ -3408,15 +3433,7 @@ "@leafygreen-ui/tokens" "^2.1.4" "@leafygreen-ui/typography" "^17.0.0" -"@leafygreen-ui/emotion@4.0.3": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@leafygreen-ui/emotion/-/emotion-4.0.3.tgz#f93cf9c4471551f3d54e21670e80e6e6c019550a" - integrity sha512-GXVHswpN68rwBv7s1FKDIBserh2WYRsXfuRSWk9Nq5SKyl74JVuvEfMIwrJLNzAy0+G3j+vskCGkH22dgPCPhA== - dependencies: - "@emotion/css" "^11.1.3" - "@emotion/server" "^11.4.0" - -"@leafygreen-ui/emotion@^4.0.3", "@leafygreen-ui/emotion@^4.0.4", "@leafygreen-ui/emotion@^4.0.7": +"@leafygreen-ui/emotion@4.0.7", "@leafygreen-ui/emotion@^4.0.3", "@leafygreen-ui/emotion@^4.0.4", "@leafygreen-ui/emotion@^4.0.7": version "4.0.7" resolved "https://registry.yarnpkg.com/@leafygreen-ui/emotion/-/emotion-4.0.7.tgz#035dceb7c9c71aa244e44dd66d25549aafb23541" integrity sha512-OxBgzEqmnZHxH9sAn6421zGKCgZ/nSf3Ryg/Ihvqz9NJEuPmKFMt/Kign4TeoaWZraIXAiWTt8q0QVBzu8ChVg== @@ -3551,15 +3568,15 @@ "@leafygreen-ui/palette" "^3.4.4" "@leafygreen-ui/tooltip" "^9.0.0" -"@leafygreen-ui/inline-definition@^6.0.2": - version "6.0.7" - resolved "https://registry.yarnpkg.com/@leafygreen-ui/inline-definition/-/inline-definition-6.0.7.tgz#b0614059b6469c68c0cee5e507b83848d0d9510a" - integrity sha512-0P4BWrfkyY8INSO10uvB3CJchPs3W/zlow9ETk4lmZgvZr1zY39/pUBZN/RTHJuNkjiCR9MIwC/E6zOMpeOagA== +"@leafygreen-ui/inline-definition@^6.0.11", "@leafygreen-ui/inline-definition@^6.0.13": + version "6.0.13" + resolved "https://registry.yarnpkg.com/@leafygreen-ui/inline-definition/-/inline-definition-6.0.13.tgz#cf5010793edcc1cc911c944ee660243b2ed2447f" + integrity sha512-auHv9UwJwZeqbT08BvTcRuzfxRIiSvsPM3kPcdsnDvtJiEO6WwxH33UKhQ+CFY3xz+70qfCW3CInwPIQF/ea0A== dependencies: - "@leafygreen-ui/emotion" "^4.0.4" - "@leafygreen-ui/lib" "^10.4.0" - "@leafygreen-ui/palette" "^4.0.3" - "@leafygreen-ui/tooltip" "^10.0.4" + "@leafygreen-ui/emotion" "^4.0.7" + "@leafygreen-ui/lib" "^13.0.0" + "@leafygreen-ui/palette" "^4.0.7" + "@leafygreen-ui/tooltip" "^10.1.0" "@leafygreen-ui/input-option@^1.0.13": version "1.0.13" @@ -3760,7 +3777,7 @@ "@leafygreen-ui/tokens" "^2.2.0" react-transition-group "^4.4.5" -"@leafygreen-ui/popover@^11.0.12", "@leafygreen-ui/popover@^11.0.15", "@leafygreen-ui/popover@^11.0.17", "@leafygreen-ui/popover@^11.0.4", "@leafygreen-ui/popover@^11.0.5", "@leafygreen-ui/popover@^11.0.8", "@leafygreen-ui/popover@^11.1.1": +"@leafygreen-ui/popover@^11.0.12", "@leafygreen-ui/popover@^11.0.15", "@leafygreen-ui/popover@^11.0.17", "@leafygreen-ui/popover@^11.0.4", "@leafygreen-ui/popover@^11.0.8", "@leafygreen-ui/popover@^11.1.1": version "11.1.1" resolved "https://registry.yarnpkg.com/@leafygreen-ui/popover/-/popover-11.1.1.tgz#fe0ee8b6f83e28d87f000af6089f021a48f774b7" integrity sha512-isXdPQQM/sdygDt1Wp89ekyXKLW6AMENTC4C6DVuRAAmdRZLtcb724K1KMOkiooa0h/CXWxdLslqJsdzsicAuA== @@ -4124,7 +4141,7 @@ lodash "^4.17.21" polished "^4.2.2" -"@leafygreen-ui/tooltip@^10.0.11", "@leafygreen-ui/tooltip@^10.0.4", "@leafygreen-ui/tooltip@^10.1.0": +"@leafygreen-ui/tooltip@^10.0.11", "@leafygreen-ui/tooltip@^10.1.0": version "10.1.0" resolved "https://registry.yarnpkg.com/@leafygreen-ui/tooltip/-/tooltip-10.1.0.tgz#4832a8b688ab0d88803e15b319a00c3e788c397a" integrity sha512-jgrETmJveRDzDtz1qYI18Pkc53XGp/38l10MWPl8mv+/ahCCgNED2idmCjCwJ3/ju14t6ASSzs0SuH1jokNcAA== @@ -5695,10 +5712,10 @@ "@testing-library/dom" "^9.0.0" "@types/react-dom" "^18.0.0" -"@testing-library/user-event@14.4.3", "@testing-library/user-event@^14.0.0": - version "14.4.3" - resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.4.3.tgz#af975e367743fa91989cd666666aec31a8f50591" - integrity sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q== +"@testing-library/user-event@14.5.1", "@testing-library/user-event@^14.0.0": + version "14.5.1" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.5.1.tgz#27337d72046d5236b32fd977edee3f74c71d332f" + integrity sha512-UCcUKrUYGj7ClomOo2SpNVvx4/fkd/2BbIHDCle8A0ax+P3bU7yJwDBDrS6ZwdTMARWTGODX1hEsCcO+7beJjg== "@tootallnate/once@2": version "2.0.0" @@ -6753,15 +6770,7 @@ aria-query@5.1.3: dependencies: deep-equal "^2.0.5" -aria-query@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" - integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== - dependencies: - "@babel/runtime" "^7.10.2" - "@babel/runtime-corejs3" "^7.10.2" - -aria-query@^5.0.0: +aria-query@^5.0.0, aria-query@^5.1.3: version "5.3.0" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== @@ -6812,14 +6821,14 @@ array.prototype.flat@^1.2.5, array.prototype.flat@^1.3.1: es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" -array.prototype.flatmap@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" - integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== +array.prototype.flatmap@^1.3.0, array.prototype.flatmap@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" arraybuffer.prototype.slice@^1.0.1: @@ -6834,6 +6843,19 @@ arraybuffer.prototype.slice@^1.0.1: is-array-buffer "^3.0.2" is-shared-array-buffer "^1.0.2" +arraybuffer.prototype.slice@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" + integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -6951,10 +6973,10 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== -axe-core@^4.4.2: - version "4.7.2" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0" - integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g== +axe-core@^4.6.2: + version "4.8.2" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.8.2.tgz#2f6f3cde40935825cf4465e3c1c9e77b240ff6ae" + integrity sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g== axios@1.3.6: version "1.3.6" @@ -6965,38 +6987,27 @@ axios@1.3.6: form-data "^4.0.0" proxy-from-env "^1.1.0" -axobject-query@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" - integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== +axobject-query@^3.1.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" + integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== + dependencies: + dequal "^2.0.3" babel-core@^7.0.0-bridge.0: version "7.0.0-bridge.0" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== -babel-jest@29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.5.0.tgz#3fe3ddb109198e78b1c88f9ebdecd5e4fc2f50a5" - integrity sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q== - dependencies: - "@jest/transform" "^29.5.0" - "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^29.5.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" - -babel-jest@^29.6.2: - version "29.6.2" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.6.2.tgz#cada0a59e07f5acaeb11cbae7e3ba92aec9c1126" - integrity sha512-BYCzImLos6J3BH/+HvUCHG1dTf2MzmAB4jaVxHV+29RZLjR29XuYTmsf2sdDwkrb+FczkGo3kOhE7ga6sI0P4A== +babel-jest@29.7.0, babel-jest@^29.6.2: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== dependencies: - "@jest/transform" "^29.6.2" + "@jest/transform" "^29.7.0" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^29.5.0" + babel-preset-jest "^29.6.3" chalk "^4.0.0" graceful-fs "^4.2.9" slash "^3.0.0" @@ -7034,10 +7045,10 @@ babel-plugin-istanbul@^6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz#a97db437936f441ec196990c9738d4b88538618a" - integrity sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w== +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" @@ -7138,12 +7149,12 @@ babel-preset-fbjs@^3.4.0: "@babel/plugin-transform-template-literals" "^7.0.0" babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0" -babel-preset-jest@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz#57bc8cc88097af7ff6a5ab59d1cd29d52a5916e2" - integrity sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg== +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== dependencies: - babel-plugin-jest-hoist "^29.5.0" + babel-plugin-jest-hoist "^29.6.3" babel-preset-current-node-syntax "^1.0.0" babel-preset-react-app@^10.0.1: @@ -7373,6 +7384,15 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" +call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== + dependencies: + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -7863,7 +7883,7 @@ core-js-compat@^3.31.0: dependencies: browserslist "^4.21.9" -core-js-pure@^3.30.2, core-js-pure@^3.6.5: +core-js-pure@^3.6.5: version "3.32.0" resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.32.0.tgz#5d79f85da7a4373e9a06494ccbef995a4c639f8b" integrity sha512-qsev1H+dTNYpDUEURRuOXMvpdtAnNEvQWS/FMJ2Vb5AY8ZP4rAPQldkE27joykZPJTe0+IVgHZYh1P5Xu1/i1g== @@ -8168,6 +8188,15 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + define-lazy-prop@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" @@ -8541,6 +8570,51 @@ es-abstract@^1.19.0, es-abstract@^1.20.4: unbox-primitive "^1.0.2" which-typed-array "^1.1.10" +es-abstract@^1.22.1: + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== + dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.2" + available-typed-arrays "^1.0.5" + call-bind "^1.0.5" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.2" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.12" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.1" + safe-array-concat "^1.0.1" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.13" + es-get-iterator@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" @@ -8910,23 +8984,26 @@ eslint-plugin-jsdoc@^46.2.6: semver "^7.5.4" spdx-expression-parse "^3.0.1" -eslint-plugin-jsx-a11y@6.6.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.0.tgz#2c5ac12e013eb98337b9aa261c3b355275cc6415" - integrity sha512-kTeLuIzpNhXL2CwLlc8AHI0aFRwWHcg483yepO9VQiHzM9bZwJdzTkzBszbuPrbgGmq2rlX/FaT2fJQsjUSHsw== +eslint-plugin-jsx-a11y@6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976" + integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA== dependencies: - "@babel/runtime" "^7.18.3" - aria-query "^4.2.2" - array-includes "^3.1.5" + "@babel/runtime" "^7.20.7" + aria-query "^5.1.3" + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" ast-types-flow "^0.0.7" - axe-core "^4.4.2" - axobject-query "^2.2.0" + axe-core "^4.6.2" + axobject-query "^3.1.1" damerau-levenshtein "^1.0.8" emoji-regex "^9.2.2" has "^1.0.3" - jsx-ast-utils "^3.3.1" - language-tags "^1.0.5" + jsx-ast-utils "^3.3.3" + language-tags "=1.0.5" minimatch "^3.1.2" + object.entries "^1.1.6" + object.fromentries "^2.0.6" semver "^6.3.0" eslint-plugin-prettier@4.2.1: @@ -9651,6 +9728,11 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + function.prototype.name@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" @@ -9661,6 +9743,16 @@ function.prototype.name@^1.1.5: es-abstract "^1.19.0" functions-have-names "^1.2.2" +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + 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" @@ -9691,6 +9783,16 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@ has-proto "^1.0.1" has-symbols "^1.0.3" +get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== + dependencies: + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + get-nonce@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" @@ -10043,6 +10145,13 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" + header-case@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/header-case/-/header-case-2.0.4.tgz#5a42e63b55177349cf405beb8d775acabb92c063" @@ -10073,10 +10182,10 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -html-dom-parser@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/html-dom-parser/-/html-dom-parser-4.0.0.tgz#dc382fbbc9306f8c9b5aae4e3f2822e113a48709" - integrity sha512-TUa3wIwi80f5NF8CVWzkopBVqVAtlawUzJoLwVLHns0XSJGynss4jiY0mTWpiDOsuyw+afP+ujjMgRh9CoZcXw== +html-dom-parser@5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/html-dom-parser/-/html-dom-parser-5.0.2.tgz#0bd0a78112bf30b471f215fe8d3acd6e6dccb05f" + integrity sha512-TPsxRbmzLQP4umvzRnI3US/DuqoHTX3QOGTsH9pNST6z1tm/ZOP4eWRqvGrv6rvOX42QRPF6opbOBoHM2UfTFQ== dependencies: domhandler "5.0.3" htmlparser2 "9.0.0" @@ -10093,15 +10202,15 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -html-react-parser@4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/html-react-parser/-/html-react-parser-4.2.1.tgz#5fcccc9d7d61ef145c6a0c69c6531094188d9682" - integrity sha512-Dxzdowj5Zu/+7mr8X8PzCFbPXGuwCwGB2u4cB6oxZGES9inw85qlvnlfPD75VGKUGjcgsXs+9Dpj+THWNQyOBw== +html-react-parser@4.2.9: + version "4.2.9" + resolved "https://registry.yarnpkg.com/html-react-parser/-/html-react-parser-4.2.9.tgz#d9596adc2f35a1bf8f4dab29e427fb282c9c177c" + integrity sha512-LgF0h+hM//79kePyGMWqgAGdvLCyV52GS96fYeQ5UhJJm+jccjZ8G5SQlprJTMj3v3XR2cBxNF2JhyC1R6gieA== dependencies: domhandler "5.0.3" - html-dom-parser "4.0.0" - react-property "2.0.0" - style-to-js "1.1.3" + html-dom-parser "5.0.2" + react-property "2.0.2" + style-to-js "1.1.8" html-tags@^3.1.0: version "3.3.1" @@ -10314,10 +10423,10 @@ ini@2.0.0: resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== -inline-style-parser@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" - integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== +inline-style-parser@0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.2.2.tgz#d498b4e6de0373458fc610ff793f6b14ebf45633" + integrity sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ== inquirer@^8.0.0: version "8.2.6" @@ -10638,7 +10747,7 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typed-array@^1.1.10, is-typed-array@^1.1.3, is-typed-array@^1.1.9: +is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.3, is-typed-array@^1.1.9: version "1.1.12" resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== @@ -10973,6 +11082,25 @@ jest-haste-map@^29.6.2: optionalDependencies: fsevents "^2.3.2" +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== + dependencies: + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + jest-junit@15.0.0: version "15.0.0" resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-15.0.0.tgz#a47544ab42e9f8fe7ada56306c218e09e52bd690" @@ -11048,6 +11176,11 @@ jest-regex-util@^29.0.0, jest-regex-util@^29.4.3: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.4.3.tgz#a42616141e0cae052cfa32c169945d00c0aa0bb8" integrity sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg== +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== + jest-resolve-dependencies@^29.6.2: version "29.6.2" resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.2.tgz#36435269b6672c256bcc85fb384872c134cc4cf2" @@ -11171,6 +11304,18 @@ jest-util@^29.5.0, jest-util@^29.6.2: graceful-fs "^4.2.9" picomatch "^2.2.3" +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== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + jest-validate@^29.6.2: version "29.6.2" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.6.2.tgz#25d972af35b2415b83b1373baf1a47bb266c1082" @@ -11220,6 +11365,16 @@ jest-worker@^29.6.2: merge-stream "^2.0.0" supports-color "^8.0.0" +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== + dependencies: + "@types/node" "*" + jest-util "^29.7.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + jest@29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest/-/jest-29.5.0.tgz#f75157622f5ce7ad53028f2f8888ab53e1f1f24e" @@ -11466,7 +11621,7 @@ jsprim@^2.0.2: json-schema "0.4.0" verror "1.10.0" -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.1: +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3: version "3.3.5" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== @@ -11486,17 +11641,17 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -language-subtag-registry@^0.3.20: +language-subtag-registry@~0.3.2: version "0.3.22" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== -language-tags@^1.0.5: - version "1.0.8" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.8.tgz#042b4bdb0d4e771a9f8cc2fdc9bb26a52a367312" - integrity sha512-aWAZwgPLS8hJ20lNPm9HNVs4inexz6S2sQa3wx/+ycuutMNE5/IfYxiWYBbi+9UWCQVaXYCOPUl6gFrPR7+jGg== +language-tags@=1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== dependencies: - language-subtag-registry "^0.3.20" + language-subtag-registry "~0.3.2" lazy-ass@^1.6.0: version "1.6.0" @@ -12223,6 +12378,11 @@ object-inspect@^1.12.2, object-inspect@^1.12.3, object-inspect@^1.9.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + object-is@^1.0.1, object-is@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" @@ -12251,23 +12411,23 @@ object.assign@^4.1.2, object.assign@^4.1.4: has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" - integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== +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== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" -object.fromentries@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" - integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== +object.fromentries@^2.0.5, object.fromentries@^2.0.6: + version "2.0.7" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" + integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" object.hasown@^1.1.1: version "1.1.2" @@ -13440,10 +13600,10 @@ react-lottie-player@^1.5.4: lottie-web "^5.7.6" rfdc "^1.3.0" -react-property@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/react-property/-/react-property-2.0.0.tgz#2156ba9d85fa4741faf1918b38efc1eae3c6a136" - integrity sha512-kzmNjIgU32mO4mmH5+iUyrqlpFQhF8K2k7eZ4fdLSOPFrD1XgEuSBv9LDEgxRXTMBqMd8ppT0x6TIzqE5pdGdw== +react-property@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/react-property/-/react-property-2.0.2.tgz#d5ac9e244cef564880a610bc8d868bd6f60fdda6" + integrity sha512-+PbtI3VuDV0l6CleQMsx2gtK0JZbZKbpdu5ynr+lbsuvtmgbNcS3VM0tuY2QjFNOcWxvXeHjDpy42RO+4U2rug== react-refresh@^0.14.0: version "0.14.0" @@ -13669,6 +13829,15 @@ regexp.prototype.flags@^1.4.3, regexp.prototype.flags@^1.5.0: define-properties "^1.2.0" functions-have-names "^1.2.3" +regexp.prototype.flags@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + set-function-name "^2.0.0" + regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" @@ -13913,6 +14082,16 @@ safe-array-concat@^1.0.0: has-symbols "^1.0.3" isarray "^2.0.5" +safe-array-concat@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" + integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + isarray "^2.0.5" + safe-buffer@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" @@ -14073,6 +14252,25 @@ set-blocking@^2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +set-function-name@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" + setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -14427,6 +14625,15 @@ string.prototype.trim@^1.2.7: define-properties "^1.1.4" es-abstract "^1.20.4" +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + string.prototype.trimend@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" @@ -14436,6 +14643,15 @@ string.prototype.trimend@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + string.prototype.trimstart@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" @@ -14445,6 +14661,15 @@ string.prototype.trimstart@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -14510,19 +14735,19 @@ strip-json-comments@^3.0.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1 resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -style-to-js@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/style-to-js/-/style-to-js-1.1.3.tgz#2012d75dc89bf400edc29c545ed61c8626b00184" - integrity sha512-zKI5gN/zb7LS/Vm0eUwjmjrXWw8IMtyA8aPBJZdYiQTXj4+wQ3IucOLIOnF7zCHxvW8UhIGh/uZh/t9zEHXNTQ== +style-to-js@1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/style-to-js/-/style-to-js-1.1.8.tgz#b3357ad6cbd7cc1216a432ce89c31e554d0861a7" + integrity sha512-bPSspCXkkhETLXnEgDbaoWRWyv3lF2bj32YIc8IElok2IIMHUlZtQUrxYmAkKUNxpluhH0qnKWrmuoXUyTY12g== dependencies: - style-to-object "0.4.1" + style-to-object "1.0.3" -style-to-object@0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.4.1.tgz#53cf856f7cf7f172d72939d9679556469ba5de37" - integrity sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw== +style-to-object@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.3.tgz#5ce90eb7f03ef5044bd70a3a23a3c1387fcac5b4" + integrity sha512-xOpx7S53E0V3DpVsvt7ySvoiumRpfXiC99PUXLqGB3wiAnN9ybEIpuzlZ8LAZg+h1sl9JkEUwtSQXxcCgFqbbg== dependencies: - inline-style-parser "0.1.1" + inline-style-parser "0.2.2" stylis@4.2.0: version "4.2.0" @@ -15545,6 +15770,17 @@ which-typed-array@^1.1.10, which-typed-array@^1.1.11, which-typed-array@^1.1.2, gopd "^1.0.1" has-tostringtag "^1.0.0" +which-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.4" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"