diff --git a/packages_rs/nextclade-web/package.json b/packages_rs/nextclade-web/package.json index 5adc69e4c..8b5c6cbfe 100644 --- a/packages_rs/nextclade-web/package.json +++ b/packages_rs/nextclade-web/package.json @@ -297,9 +297,10 @@ "i18next-parser": "6.3.0", "identity-obj-proxy": "3.0.0", "is-interactive": "1.0.0", - "jest": "28.0.1", + "jest": "27.5.1", "jest-axe": "6.0.0", - "jest-chain": "1.1.5", + "jest-chain": "1.1.6", + "jest-environment-jsdom": "27.5.1", "jest-extended": "2.0.0", "jest-raw-loader": "1.0.1", "jest-runner-eslint": "1.0.0", diff --git a/packages_rs/nextclade-web/src/components/Error/ErrorContent.tsx b/packages_rs/nextclade-web/src/components/Error/ErrorContent.tsx index 322ed311d..0ab256631 100644 --- a/packages_rs/nextclade-web/src/components/Error/ErrorContent.tsx +++ b/packages_rs/nextclade-web/src/components/Error/ErrorContent.tsx @@ -43,7 +43,7 @@ export function ErrorContentMessage({ error }: { error: Error }) { const url = error.url ?? 'Unknown URL' const { status, statusText, message } = error - if (!status) { + if (!status || status === 'ERR_BAD_REQUEST') { return } const text = message ?? statusText ?? 'Unknown status' diff --git a/packages_rs/nextclade-web/src/constants.ts b/packages_rs/nextclade-web/src/constants.ts index 7dfb427de..f1dedd6bd 100644 --- a/packages_rs/nextclade-web/src/constants.ts +++ b/packages_rs/nextclade-web/src/constants.ts @@ -33,6 +33,9 @@ export const URL_CLADE_SCHEMA_REPO = 'https://github.com/nextstrain/ncov-clades- export const URL_CLADE_SCHEMA_SVG = 'https://raw.githubusercontent.com/nextstrain/ncov-clades-schema/master/clades.svg' export const URL_GITHUB_DATA_RAW = 'https://raw.githubusercontent.com/nextstrain/nextclade_data' as const +export const DEFAULT_DATA_OWNER = 'nextstrain' as const +export const DEFAULT_DATA_REPO = 'nextclade_data' as const +export const DEFAULT_DATA_REPO_PATH = 'data_output' as const export const SUPPORT_EMAIL = 'hello@nextstrain.org' diff --git a/packages_rs/nextclade-web/src/helpers/ErrorFatal.ts b/packages_rs/nextclade-web/src/helpers/ErrorFatal.ts new file mode 100644 index 000000000..28b42f501 --- /dev/null +++ b/packages_rs/nextclade-web/src/helpers/ErrorFatal.ts @@ -0,0 +1,5 @@ +export class ErrorFatal extends Error { + public constructor(message: string) { + super(message) + } +} diff --git a/packages_rs/nextclade-web/src/helpers/jestUtils.ts b/packages_rs/nextclade-web/src/helpers/jestUtils.ts new file mode 100644 index 000000000..5b4df582b --- /dev/null +++ b/packages_rs/nextclade-web/src/helpers/jestUtils.ts @@ -0,0 +1,3 @@ +export function getTestName(): string { + return expect.getState().currentTestName.split(' ')[1] +} diff --git a/packages_rs/nextclade-web/src/io/__tests__/getDatasetServerUrl.test.ts b/packages_rs/nextclade-web/src/io/__tests__/getDatasetServerUrl.test.ts new file mode 100644 index 000000000..37e881790 --- /dev/null +++ b/packages_rs/nextclade-web/src/io/__tests__/getDatasetServerUrl.test.ts @@ -0,0 +1,78 @@ +import { getDatasetServerUrl } from 'src/io/fetchDatasets' + +describe('parseGitHubRepoShortcut', () => { + const OLD_ENV = process.env + + beforeEach(() => { + jest.resetModules() + process.env = { ...OLD_ENV, BRANCH_NAME: 'default-branch' } + }) + + afterAll(() => { + process.env = OLD_ENV + }) + + it.each([ + ['gh', 'https://raw.githubusercontent.com/nextstrain/nextclade_data/default-branch/data_output'], + ['gh:', 'https://raw.githubusercontent.com/nextstrain/nextclade_data/default-branch/data_output'], + ['gh', 'https://raw.githubusercontent.com/nextstrain/nextclade_data/default-branch/data_output'], + ['gh:', 'https://raw.githubusercontent.com/nextstrain/nextclade_data/default-branch/data_output'], + ['gh:@test-branch@', 'https://raw.githubusercontent.com/nextstrain/nextclade_data/test-branch/data_output'], + ['gh:aaa/bbb', 'https://raw.githubusercontent.com/aaa/bbb/master/'], + ['gh:aaa/bbb/', 'https://raw.githubusercontent.com/aaa/bbb/master/'], + ['gh:aaa/bbb@test-branch@', 'https://raw.githubusercontent.com/aaa/bbb/test-branch/'], + ['gh:aaa/bbb@test-branch@my/path/dir', 'https://raw.githubusercontent.com/aaa/bbb/test-branch/my/path/dir'], + ['gh:aaa/bbb@test-branch@/my/path/dir', 'https://raw.githubusercontent.com/aaa/bbb/test-branch/my/path/dir'], + ['gh:aaa/bbb@test-branch@my/path/dir/', 'https://raw.githubusercontent.com/aaa/bbb/test-branch/my/path/dir'], + ['gh:aaa/bbb@test-branch@/my/path/dir/', 'https://raw.githubusercontent.com/aaa/bbb/test-branch/my/path/dir'], + ['gh:aaa/bbb@branch/slashes@/my/path/dir', 'https://raw.githubusercontent.com/aaa/bbb/branch/slashes/my/path/dir'], + ['https://github.com/aaa/bbb', 'https://raw.githubusercontent.com/aaa/bbb/master/'], + ['https://github.com/aaa/bbb/', 'https://raw.githubusercontent.com/aaa/bbb/master/'], + ['https://github.com/aaa/bbb/tree/test-branch', 'https://raw.githubusercontent.com/aaa/bbb/test-branch/'], + ['https://github.com/aaa/bbb/tree/test-branch/', 'https://raw.githubusercontent.com/aaa/bbb/test-branch/'], + [ + 'https://github.com/aaa/bbb/tree/test-branch/dirname', + 'https://raw.githubusercontent.com/aaa/bbb/test-branch/dirname', + ], + [ + 'https://github.com/aaa/bbb/tree/test-branch/dirname/', + 'https://raw.githubusercontent.com/aaa/bbb/test-branch/dirname', + ], + [ + 'https://github.com/aaa/bbb/tree/test-branch/dirname//', + 'https://raw.githubusercontent.com/aaa/bbb/test-branch/dirname', + ], + ['https://github.com/aaa/bbb/blob/test-branch', 'https://raw.githubusercontent.com/aaa/bbb/test-branch/'], + ['https://github.com/aaa/bbb/blob/test-branch/', 'https://raw.githubusercontent.com/aaa/bbb/test-branch/'], + [ + 'https://github.com/aaa/bbb/blob/test-branch/dirname', + 'https://raw.githubusercontent.com/aaa/bbb/test-branch/dirname', + ], + [ + 'https://github.com/aaa/bbb/blob/test-branch/my/path/dir/', + 'https://raw.githubusercontent.com/aaa/bbb/test-branch/my/path/dir', + ], + [ + 'https://github.com/aaa/bbb/blob/test-branch/dirname/filename.json', + 'https://raw.githubusercontent.com/aaa/bbb/test-branch/dirname/filename.json', + ], + [ + 'https://github.com/aaa/bbb/blob/branch/slashes/dirname/filename.json', + 'https://raw.githubusercontent.com/aaa/bbb/branch/slashes/dirname/filename.json', + ], + [ + 'https://github.com/aaa/bbb/blob/test-branch/dirname//', + 'https://raw.githubusercontent.com/aaa/bbb/test-branch/dirname', + ], + [ + 'https://github.com/nextstrain/nextclade_data/tree/master/data_output/nextstrain/rsv/a/EPI_ISL_412866/unreleased', + 'https://raw.githubusercontent.com/nextstrain/nextclade_data/master/data_output/nextstrain/rsv/a/EPI_ISL_412866/unreleased', + ], + [ + 'https://github.com/nextstrain/nextclade_data/tree/release/data_output/nextstrain/rsv/a/EPI_ISL_412866/unreleased', + 'https://raw.githubusercontent.com/nextstrain/nextclade_data/release/data_output/nextstrain/rsv/a/EPI_ISL_412866/unreleased', + ], + ])('%p', async (input: string, result: string) => { + expect(await getDatasetServerUrl({ 'dataset-server': input })).toBe(result) + }) +}) diff --git a/packages_rs/nextclade-web/src/io/__tests__/parseGitHubRepoShortcut.test.ts b/packages_rs/nextclade-web/src/io/__tests__/parseGitHubRepoShortcut.test.ts new file mode 100644 index 000000000..250aa0e76 --- /dev/null +++ b/packages_rs/nextclade-web/src/io/__tests__/parseGitHubRepoShortcut.test.ts @@ -0,0 +1,106 @@ +import { DEFAULT_DATA_OWNER, DEFAULT_DATA_REPO, DEFAULT_DATA_REPO_PATH } from 'src/constants' +import { getTestName } from 'src/helpers/jestUtils' +import { parseGitHubRepoShortcut } from 'src/io/fetchSingleDatasetFromGithub' + +describe('parseGitHubRepoShortcut', () => { + const OLD_ENV = process.env + + beforeEach(() => { + jest.resetModules() + process.env = { ...OLD_ENV, BRANCH_NAME: 'default-branch' } + }) + + afterAll(() => { + process.env = OLD_ENV + }) + + it('gh', async () => { + expect(await parseGitHubRepoShortcut(getTestName())).toStrictEqual({ + owner: DEFAULT_DATA_OWNER, + repo: DEFAULT_DATA_REPO, + branch: 'default-branch', + path: DEFAULT_DATA_REPO_PATH, + }) + }) + + it('gh:', async () => { + expect(await parseGitHubRepoShortcut(getTestName())).toStrictEqual({ + owner: DEFAULT_DATA_OWNER, + repo: DEFAULT_DATA_REPO, + branch: 'default-branch', + path: DEFAULT_DATA_REPO_PATH, + }) + }) + + it('gh:@test-branch@', async () => { + expect(await parseGitHubRepoShortcut(getTestName())).toStrictEqual({ + owner: DEFAULT_DATA_OWNER, + repo: DEFAULT_DATA_REPO, + branch: 'test-branch', + path: DEFAULT_DATA_REPO_PATH, + }) + }) + + it('gh:aaa/bbb', async () => { + expect(await parseGitHubRepoShortcut(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'default-branch', + path: '/', + }) + }) + + it('gh:aaa/bbb/', async () => { + expect(await parseGitHubRepoShortcut(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'default-branch', + path: '/', + }) + }) + + it('gh:aaa/bbb@test-branch@', async () => { + expect(await parseGitHubRepoShortcut(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: '/', + }) + }) + + it('gh:aaa/bbb@test-branch@my/path/dir', async () => { + expect(await parseGitHubRepoShortcut(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: 'my/path/dir', + }) + }) + + it('gh:aaa/bbb@test-branch@/my/path/dir', async () => { + expect(await parseGitHubRepoShortcut(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: 'my/path/dir', + }) + }) + + it('gh:aaa/bbb@test-branch@my/path/dir/', async () => { + expect(await parseGitHubRepoShortcut(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: 'my/path/dir', + }) + }) + + it('gh:aaa/bbb@test-branch@/my/path/dir/', async () => { + expect(await parseGitHubRepoShortcut(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: 'my/path/dir', + }) + }) +}) diff --git a/packages_rs/nextclade-web/src/io/__tests__/parseGitHubRepoShortcutComponents.test.ts b/packages_rs/nextclade-web/src/io/__tests__/parseGitHubRepoShortcutComponents.test.ts new file mode 100644 index 000000000..1cd0e5ef4 --- /dev/null +++ b/packages_rs/nextclade-web/src/io/__tests__/parseGitHubRepoShortcutComponents.test.ts @@ -0,0 +1,148 @@ +import { getTestName } from 'src/helpers/jestUtils' +import { parseGitHubRepoShortcutComponents } from 'src/io/fetchSingleDatasetFromGithub' + +describe('parseGitHubRepoShortcutComponents', () => { + it('gh', async () => { + expect(parseGitHubRepoShortcutComponents(getTestName())).toStrictEqual({ + owner: undefined, + repo: undefined, + branch: undefined, + path: undefined, + }) + }) + + it('gh:', async () => { + expect(parseGitHubRepoShortcutComponents(getTestName())).toStrictEqual({ + owner: undefined, + repo: undefined, + branch: undefined, + path: undefined, + }) + }) + + it('gh:@test-branch@', async () => { + expect(parseGitHubRepoShortcutComponents(getTestName())).toStrictEqual({ + owner: undefined, + repo: undefined, + branch: 'test-branch', + path: undefined, + }) + }) + + it('gh:aaa/bbb', async () => { + expect(parseGitHubRepoShortcutComponents(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: undefined, + path: undefined, + }) + }) + + it('gh:aaa/bbb/', async () => { + expect(parseGitHubRepoShortcutComponents(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: undefined, + path: '/', + }) + }) + + it('gh:aaa/bbb@test-branch@', async () => { + expect(parseGitHubRepoShortcutComponents(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: undefined, + }) + }) + + it('gh:aaa/bbb@branch/slashes@', async () => { + expect(parseGitHubRepoShortcutComponents(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'branch/slashes', + path: undefined, + }) + }) + + it('gh:aaa/bbb@branch/more/slashes@', async () => { + expect(parseGitHubRepoShortcutComponents(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'branch/more/slashes', + path: undefined, + }) + }) + + it('gh:aaa/bbb@test-branch@my/path/dir', async () => { + expect(parseGitHubRepoShortcutComponents(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: 'my/path/dir', + }) + }) + + it('gh:aaa/bbb@test-branch@/my/path/dir', async () => { + expect(parseGitHubRepoShortcutComponents(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: 'my/path/dir', + }) + }) + + it('gh:aaa/bbb@branch/slashes@/my/path/dir', async () => { + expect(parseGitHubRepoShortcutComponents(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'branch/slashes', + path: 'my/path/dir', + }) + }) + + it('gh:aaa/bbb@branch/more/slashes@/my/path/dir', async () => { + expect(parseGitHubRepoShortcutComponents(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'branch/more/slashes', + path: 'my/path/dir', + }) + }) + + it('gh:aaa/bbb@test-branch@my/path/dir/', async () => { + expect(parseGitHubRepoShortcutComponents(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: 'my/path/dir', + }) + }) + + it('gh:aaa/bbb@test-branch@/my/path/dir/', async () => { + expect(parseGitHubRepoShortcutComponents(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: 'my/path/dir', + }) + }) + + it('gh:aaa/bbb/my/path/dir', async () => { + expect(parseGitHubRepoShortcutComponents(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: undefined, + path: 'my/path/dir', + }) + }) + + it('gh:aaa/bbb/my/path/dir/', async () => { + expect(parseGitHubRepoShortcutComponents(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: undefined, + path: 'my/path/dir', + }) + }) +}) diff --git a/packages_rs/nextclade-web/src/io/__tests__/parseGithubRepoUrl.test.ts b/packages_rs/nextclade-web/src/io/__tests__/parseGithubRepoUrl.test.ts new file mode 100644 index 000000000..6b48ac1ec --- /dev/null +++ b/packages_rs/nextclade-web/src/io/__tests__/parseGithubRepoUrl.test.ts @@ -0,0 +1,145 @@ +import { getTestName } from 'src/helpers/jestUtils' +import { parseGithubRepoUrl } from 'src/io/fetchSingleDatasetFromGithub' + +describe('parseGithubRepoUrl', () => { + const OLD_ENV = process.env + + beforeEach(() => { + jest.resetModules() + process.env = { ...OLD_ENV, BRANCH_NAME: 'default-branch' } + }) + + afterAll(() => { + process.env = OLD_ENV + }) + + it('https://github.com/aaa/bbb', async () => { + expect(await parseGithubRepoUrl(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'master', + path: '/', + }) + }) + + it('https://github.com/aaa/bbb/', async () => { + expect(await parseGithubRepoUrl(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'master', + path: '/', + }) + }) + + it('https://github.com/aaa/bbb/tree/test-branch', async () => { + expect(await parseGithubRepoUrl(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: '/', + }) + }) + + it('https://github.com/aaa/bbb/tree/test-branch/', async () => { + expect(await parseGithubRepoUrl(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: '/', + }) + }) + + it('https://github.com/aaa/bbb/tree/test-branch/dirname', async () => { + expect(await parseGithubRepoUrl(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: 'dirname', + }) + }) + + it('https://github.com/aaa/bbb/tree/test-branch/dirname/', async () => { + expect(await parseGithubRepoUrl(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: 'dirname', + }) + }) + + it('https://github.com/aaa/bbb/tree/test-branch/dirname//', async () => { + expect(await parseGithubRepoUrl(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: 'dirname', + }) + }) + + it('https://github.com/aaa/bbb/blob/test-branch', async () => { + expect(await parseGithubRepoUrl(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: '/', + }) + }) + + it('https://github.com/aaa/bbb/blob/test-branch/', async () => { + expect(await parseGithubRepoUrl(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: '/', + }) + }) + + it('https://github.com/aaa/bbb/blob/test-branch/dirname', async () => { + expect(await parseGithubRepoUrl(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: 'dirname', + }) + }) + + it('https://github.com/aaa/bbb/blob/test-branch/dirname/', async () => { + expect(await parseGithubRepoUrl(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: 'dirname', + }) + }) + + it('https://github.com/aaa/bbb/blob/test-branch/dirname/filename.json', async () => { + // NOTE: for URLs in this format there is no way to tell where branch name ends and where path starts. + // So we assume first component is the branch and the remainder are the path. + expect(await parseGithubRepoUrl(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: 'dirname/filename.json', + }) + }) + + it('https://github.com/aaa/bbb/blob/branch/slashes/dirname/filename.json', async () => { + // NOTE: for URLs in this format there is no way to tell where branch name ends and where path starts. + // So we assume first component is the branch and the remainder are the path. + expect(await parseGithubRepoUrl(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'branch', + path: 'slashes/dirname/filename.json', + }) + }) + + it('https://github.com/aaa/bbb/blob/test-branch/dirname//', async () => { + expect(await parseGithubRepoUrl(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: 'dirname', + }) + }) +}) diff --git a/packages_rs/nextclade-web/src/io/__tests__/parseGithubRepoUrlComponents.test.ts b/packages_rs/nextclade-web/src/io/__tests__/parseGithubRepoUrlComponents.test.ts new file mode 100644 index 000000000..ff5e42dc6 --- /dev/null +++ b/packages_rs/nextclade-web/src/io/__tests__/parseGithubRepoUrlComponents.test.ts @@ -0,0 +1,134 @@ +import { getTestName } from 'src/helpers/jestUtils' +import { parseGithubRepoUrlComponents } from 'src/io/fetchSingleDatasetFromGithub' + +describe('parseGithubRepoUrlComponents', () => { + it('https://github.com/aaa/bbb', async () => { + expect(parseGithubRepoUrlComponents(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: undefined, + path: undefined, + }) + }) + + it('https://github.com/aaa/bbb/', async () => { + expect(parseGithubRepoUrlComponents(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: undefined, + path: undefined, + }) + }) + + it('https://github.com/aaa/bbb/tree/test-branch', async () => { + expect(parseGithubRepoUrlComponents(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: undefined, + }) + }) + + it('https://github.com/aaa/bbb/tree/test-branch/', async () => { + expect(parseGithubRepoUrlComponents(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: '/', + }) + }) + + it('https://github.com/aaa/bbb/tree/test-branch/dirname', async () => { + expect(parseGithubRepoUrlComponents(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: 'dirname', + }) + }) + + it('https://github.com/aaa/bbb/tree/test-branch/dirname/', async () => { + expect(parseGithubRepoUrlComponents(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: 'dirname/', + }) + }) + + it('https://github.com/aaa/bbb/tree/test-branch/dirname//', async () => { + expect(parseGithubRepoUrlComponents(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: 'dirname//', + }) + }) + + it('https://github.com/aaa/bbb/blob/test-branch', async () => { + expect(parseGithubRepoUrlComponents(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: undefined, + }) + }) + + it('https://github.com/aaa/bbb/blob/test-branch/', async () => { + expect(parseGithubRepoUrlComponents(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: '/', + }) + }) + + it('https://github.com/aaa/bbb/blob/test-branch/dirname', async () => { + expect(parseGithubRepoUrlComponents(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: 'dirname', + }) + }) + + it('https://github.com/aaa/bbb/blob/test-branch/dirname/filename.json', async () => { + // NOTE: for URLs in this format there is no way to tell where branch name ends and where path starts. + // So we assume first component is the branch and the remainder are the path. + expect(parseGithubRepoUrlComponents(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: 'dirname/filename.json', + }) + }) + + it('https://github.com/aaa/bbb/blob/branch/slashes/dirname/filename.json', async () => { + // NOTE: for URLs in this format there is no way to tell where branch name ends and where path starts. + // So we assume first component is the branch and the remainder are the path. + expect(parseGithubRepoUrlComponents(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'branch', + path: 'slashes/dirname/filename.json', + }) + }) + + it('https://github.com/aaa/bbb/blob/test-branch/dirname/', async () => { + expect(parseGithubRepoUrlComponents(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: 'dirname/', + }) + }) + + it('https://github.com/aaa/bbb/blob/test-branch/dirname//', async () => { + expect(parseGithubRepoUrlComponents(getTestName())).toStrictEqual({ + owner: 'aaa', + repo: 'bbb', + branch: 'test-branch', + path: 'dirname//', + }) + }) +}) diff --git a/packages_rs/nextclade-web/src/io/axiosFetch.ts b/packages_rs/nextclade-web/src/io/axiosFetch.ts index 0af824ec5..11376e3f4 100644 --- a/packages_rs/nextclade-web/src/io/axiosFetch.ts +++ b/packages_rs/nextclade-web/src/io/axiosFetch.ts @@ -1,6 +1,6 @@ import axios, { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios' import { isNil } from 'lodash' -import { ErrorInternal } from 'src/helpers/ErrorInternal' +import { ErrorFatal } from 'src/helpers/ErrorFatal' import { sanitizeError } from 'src/helpers/sanitizeError' export class HttpRequestError extends Error { @@ -16,13 +16,31 @@ export class HttpRequestError extends Error { } } +export function isValidHttpUrl(s: string) { + let url + try { + url = new URL(s) + } catch { + return false + } + return url.protocol === 'http:' || url.protocol === 'https:' +} + +export function validateUrl(url?: string): string { + if (isNil(url)) { + throw new ErrorFatal(`Attempted to fetch from an empty URL`) + } + if (!isValidHttpUrl(url)) { + throw new ErrorFatal(`Attempted to fetch from an invalid URL: '${url}'`) + } + return url +} + export async function axiosFetch( - url: string | undefined, + url_: string | undefined, options?: AxiosRequestConfig, ): Promise { - if (isNil(url)) { - throw new ErrorInternal(`Attempted to fetch from an invalid URL: '${url}'`) - } + const url = validateUrl(url_) let res try { @@ -72,7 +90,7 @@ export async function axiosFetchRawMaybe(url?: string): Promise { if (isNil(url)) { - throw new ErrorInternal(`Attempted to fetch from an invalid URL: '${url}'`) + throw new ErrorFatal(`Attempted to fetch from an invalid URL: '${url}'`) } try { diff --git a/packages_rs/nextclade-web/src/io/createInputFromUrlParamMaybe.ts b/packages_rs/nextclade-web/src/io/createInputFromUrlParamMaybe.ts index 3344ec5d4..da77d9fc7 100644 --- a/packages_rs/nextclade-web/src/io/createInputFromUrlParamMaybe.ts +++ b/packages_rs/nextclade-web/src/io/createInputFromUrlParamMaybe.ts @@ -1,34 +1,40 @@ +import { concurrent } from 'fasy' import type { ParsedUrlQuery } from 'querystring' import { AlgorithmInputDefault, AlgorithmInputUrl } from 'src/io/AlgorithmInput' +import { isGithubUrlOrShortcut, parseGitHubRepoUrlOrShortcut } from 'src/io/fetchSingleDatasetFromGithub' import { getQueryParamMaybe } from 'src/io/getQueryParamMaybe' import { takeArray } from 'src/helpers/takeFirstMaybe' import { AlgorithmInput, Dataset } from 'src/types' import { isString } from 'lodash' import { notUndefinedOrNull } from 'src/helpers/notUndefined' -export function createInputFromUrlParamMaybe(urlQuery: ParsedUrlQuery, paramName: string) { +export async function createInputFromUrlParamMaybe(urlQuery: ParsedUrlQuery, paramName: string) { const url = getQueryParamMaybe(urlQuery, paramName) if (!url) { return undefined } + if (isGithubUrlOrShortcut(url)) { + const { directUrl } = await parseGitHubRepoUrlOrShortcut(url) + return new AlgorithmInputUrl(directUrl) + } return new AlgorithmInputUrl(url) } -export function createInputFastasFromUrlParam( +export async function createInputFastasFromUrlParam( urlQuery: ParsedUrlQuery, dataset: Dataset | undefined, -): AlgorithmInput[] { +): Promise { const urls = takeArray(urlQuery?.['input-fasta']) - return urls - .map((url) => { - if (url === 'example') { - return dataset ? new AlgorithmInputDefault(dataset) : undefined - } - if (isString(url)) { - return new AlgorithmInputUrl(url) - } - return undefined - }) - .filter(notUndefinedOrNull) + const inputs = await concurrent.map(async (url) => { + if (url === 'example') { + return dataset ? new AlgorithmInputDefault(dataset) : undefined + } + if (isString(url) && isGithubUrlOrShortcut(url)) { + const { directUrl } = await parseGitHubRepoUrlOrShortcut(url) + return new AlgorithmInputUrl(directUrl) + } + return undefined + }, urls) + return inputs.filter(notUndefinedOrNull) } diff --git a/packages_rs/nextclade-web/src/io/fetchDatasets.ts b/packages_rs/nextclade-web/src/io/fetchDatasets.ts index de8da1bb3..5aacc77f8 100644 --- a/packages_rs/nextclade-web/src/io/fetchDatasets.ts +++ b/packages_rs/nextclade-web/src/io/fetchDatasets.ts @@ -2,7 +2,12 @@ import type { ParsedUrlQuery } from 'querystring' import { findSimilarStrings } from 'src/helpers/string' import { axiosHeadOrUndefined } from 'src/io/axiosFetch' -import { isGithubUrlOrShortcut, parseGitHubRepoUrlOrShortcut } from 'src/io/fetchSingleDatasetFromGithub' +import { + isGithubShortcut, + isGithubUrl, + parseGitHubRepoShortcut, + parseGithubRepoUrl, +} from 'src/io/fetchSingleDatasetFromGithub' import { Dataset } from 'src/types' import { @@ -83,14 +88,21 @@ export async function getDatasetServerUrl(urlQuery: ParsedUrlQuery) { let datasetServerUrl = getQueryParamMaybe(urlQuery, 'dataset-server') // If the URL is formatted as a GitHub URL or as a GitHub URL shortcut, use it without any checking - if (datasetServerUrl && isGithubUrlOrShortcut(datasetServerUrl)) { - const { owner, repo, branch, path } = await parseGitHubRepoUrlOrShortcut(datasetServerUrl) - return urljoin('https://raw.githubusercontent.com', owner, repo, branch, path) + if (datasetServerUrl) { + if (isGithubShortcut(datasetServerUrl)) { + const { owner, repo, branch, path } = await parseGitHubRepoShortcut(datasetServerUrl) + return urljoin('https://raw.githubusercontent.com', owner, repo, branch, path) + } + + if (isGithubUrl(datasetServerUrl)) { + const { owner, repo, branch, path } = await parseGithubRepoUrl(datasetServerUrl) + return urljoin('https://raw.githubusercontent.com', owner, repo, branch, path) + } } // If requested to try GitHub-hosted datasets either using `DATA_TRY_GITHUB_BRANCH` env var (e.g. from // `.env` file), or using `&dataset-server=gh` or `&dataset-server=github` URL parameters, then check if the - // corresponding branch in the default data repo on GitHub contains an `index.json` file. And and if yes, use it. + // corresponding branch in the default data repo on GitHub contains an `index.json` file. And if yes, use it. const datasetServerTryGithubBranch = (isNil(datasetServerUrl) && process.env.DATA_TRY_GITHUB_BRANCH === '1') || (datasetServerUrl && ['gh', 'github'].includes(datasetServerUrl)) diff --git a/packages_rs/nextclade-web/src/io/fetchSingleDataset.ts b/packages_rs/nextclade-web/src/io/fetchSingleDataset.ts index 1453fc364..c6258dedd 100644 --- a/packages_rs/nextclade-web/src/io/fetchSingleDataset.ts +++ b/packages_rs/nextclade-web/src/io/fetchSingleDataset.ts @@ -1,21 +1,16 @@ import type { ParsedUrlQuery } from 'querystring' - import { getQueryParamMaybe } from 'src/io/getQueryParamMaybe' import { fetchSingleDatasetFromUrl } from 'src/io/fetchSingleDatasetFromUrl' import { isGithubUrlOrShortcut, parseGitHubRepoUrlOrShortcut } from 'src/io/fetchSingleDatasetFromGithub' export async function fetchSingleDataset(urlQuery: ParsedUrlQuery) { const datasetUrl = getQueryParamMaybe(urlQuery, 'dataset-url') - if (!datasetUrl) { return undefined } - if (isGithubUrlOrShortcut(datasetUrl)) { - const { owner, repo, branch, path } = await parseGitHubRepoUrlOrShortcut(datasetUrl) - const datasetGithubRawUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/${path}` - return fetchSingleDatasetFromUrl(datasetGithubRawUrl, { datasetOriginalUrl: datasetUrl }) + const { directUrl } = await parseGitHubRepoUrlOrShortcut(datasetUrl) + return fetchSingleDatasetFromUrl(directUrl, { datasetOriginalUrl: datasetUrl }) } - return fetchSingleDatasetFromUrl(datasetUrl) } diff --git a/packages_rs/nextclade-web/src/io/fetchSingleDatasetFromGithub.ts b/packages_rs/nextclade-web/src/io/fetchSingleDatasetFromGithub.ts index 050ad9b45..79319eb97 100644 --- a/packages_rs/nextclade-web/src/io/fetchSingleDatasetFromGithub.ts +++ b/packages_rs/nextclade-web/src/io/fetchSingleDatasetFromGithub.ts @@ -1,7 +1,9 @@ -import { isNil } from 'lodash' +/* eslint-disable security/detect-unsafe-regex,prefer-const */ +import type { Optional } from 'utility-types' +import { isEmpty, isNil, trim } from 'lodash' import pMemoize from 'p-memoize' - -import { removeLeadingAndTrailing, removeTrailingSlash } from 'src/io/url' +import { DEFAULT_DATA_OWNER, DEFAULT_DATA_REPO, DEFAULT_DATA_REPO_PATH } from 'src/constants' +import { removeTrailingSlash } from 'src/io/url' import { axiosFetch } from 'src/io/axiosFetch' import { sanitizeError } from 'src/helpers/sanitizeError' @@ -24,77 +26,124 @@ export async function githubRepoGetDefaultBranch_(owner: string, repo: string): export const githubRepoGetDefaultBranch = pMemoize(githubRepoGetDefaultBranch_) export interface GitHubRepoUrlComponents { + originalUrl: string owner: string repo: string branch: string path: string } -export async function parseGitHubRepoUrl(datasetGithubUrl_: string): Promise { - const datasetGithubUrl = removeTrailingSlash(datasetGithubUrl_) +export interface GitHubRepoUrlResult extends GitHubRepoUrlComponents { + directUrl: string +} + +export function parseGithubRepoUrlComponents(url: string): Optional { + // NOTE: for URLs in format + // / / + // there is no way to tell where branch name ends and where path starts. + // So we assume first component is the branch and the remainder are the path, but this is not universal. const GITHUB_URL_REGEX = - // eslint-disable-next-line security/detect-unsafe-regex - /^https?:\/\/github.com\/(?.*?)\/(?.*?)\/(?tree|branch?)\/(?.*?)(\/?.*?)?\/?$/ + /^(?:https?:\/\/)?github\.com\/+(?[^/]+)\/+(?[^/]+)(?:\/+(tree|blob)\/+(?[^/]+)(?:\/*(?.+))?)?\/*?$/ + const match = GITHUB_URL_REGEX.exec(url) + const { owner, repo, branch, path } = match?.groups ?? {} + return { owner, repo, branch, path, originalUrl: url } +} + +export async function parseGithubRepoUrl(url_: string): Promise { + const url = removeTrailingSlash(url_) + let { owner, repo, path, branch } = parseGithubRepoUrlComponents(url) - const match = GITHUB_URL_REGEX.exec(datasetGithubUrl) - if (!match?.groups) { - return undefined + // If owner and repo are omitted, use official data repo + if (!owner || !repo) { + throw new ErrorDatasetGithubUrlComponentsInvalid(url, { owner, repo, branch, path }) + } else if (!branch) { + try { + branch = await githubRepoGetDefaultBranch(owner, repo) + } catch { + branch = 'master' + } } - const { owner, repo, branch } = match.groups - if (!owner || !repo || !branch) { - throw new ErrorDatasetGithubUrlComponentsInvalid(datasetGithubUrl, { owner, repo, branch }) + path = trim(path, '/') + if (isNil(path) || isEmpty(path)) { + path = '/' } - const path = match.groups.path ?? '/' - return { owner, repo, branch, path } + const directUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/${path}` + return { owner, repo, branch, path, directUrl, originalUrl: url_ } } -export async function parseGitHubRepoShortcut(datasetGithubUrl_: string): Promise { - const datasetGithubUrl = removeTrailingSlash(datasetGithubUrl_) - +export function parseGitHubRepoShortcutComponents(shortcut: string): Optional { const GITHUB_URL_REGEX = - // eslint-disable-next-line security/detect-unsafe-regex - /^(github|gh):(?[^/@]+)\/(?[^/@]+)(?@.+?@)?(?\/.*)?$/ + /^(gh|github):((?[^/@]+)\/(?[^/@]+))?(@(?[^@]+)@?)?(\/*(?[^@]+?)\/*)?$/ + const match = GITHUB_URL_REGEX.exec(shortcut) + const { owner, repo, branch, path } = match?.groups ?? {} + return { owner, repo, branch, path, originalUrl: shortcut } +} - const match = GITHUB_URL_REGEX.exec(datasetGithubUrl) - if (!match?.groups) { - return undefined - } +export async function parseGitHubRepoShortcut(shortcut: string): Promise { + const datasetGithubUrl = removeTrailingSlash(shortcut) + let { owner, repo, branch, path } = parseGitHubRepoShortcutComponents(datasetGithubUrl) - const { owner, repo } = match.groups + // If owner and repo are omitted, use official data repo if (!owner || !repo) { - throw new ErrorDatasetGithubUrlComponentsInvalid(datasetGithubUrl, { owner, repo }) + owner = DEFAULT_DATA_OWNER + repo = DEFAULT_DATA_REPO + } else if (!branch) { + try { + branch = await githubRepoGetDefaultBranch(owner, repo) + } catch { + branch = 'master' + } } - let path = match.groups.path ?? '//' - path = removeTrailingSlash(path) + if (!branch) { + if (owner === DEFAULT_DATA_OWNER && repo === DEFAULT_DATA_REPO) { + branch = process.env.BRANCH_NAME ?? 'master' + } else { + try { + branch = await githubRepoGetDefaultBranch(owner, repo) + } catch { + branch = 'master' + } + } + } - let branch = match.groups.branch ?? (await githubRepoGetDefaultBranch(owner, repo)) - branch = removeLeadingAndTrailing(branch, '@') + // If path is omitted and owner and repo point to the official data repo, then use the default data repo path + if (!path && owner === DEFAULT_DATA_OWNER && repo === DEFAULT_DATA_REPO) { + path = DEFAULT_DATA_REPO_PATH + } - return { owner, repo, branch, path } + path = !isNil(path) && path !== '/' && path !== '' ? trim(path, '/') : '/' + const directUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/${path}` + return { owner, repo, branch, path, originalUrl: shortcut, directUrl } } -export async function parseGitHubRepoUrlOrShortcut(datasetGithubUrl_: string): Promise { - const datasetGithubUrl = removeTrailingSlash(datasetGithubUrl_) - - const urlComponents = - (await parseGitHubRepoShortcut(datasetGithubUrl_)) ?? (await parseGitHubRepoUrl(datasetGithubUrl_)) - - if (!urlComponents) { - throw new ErrorDatasetGithubUrlPatternInvalid(datasetGithubUrl) +export async function parseGitHubRepoUrlOrShortcut(url_: string): Promise { + const url = removeTrailingSlash(url_) + if (isGithubShortcut(url)) { + return parseGitHubRepoShortcut(url) } + if (isGithubUrl(url)) { + return parseGithubRepoUrl(url) + } + throw new ErrorDatasetGithubUrlPatternInvalid(url) +} + +export function isGithubUrl(url: string): boolean { + return !isNil(/^https?:\/\/github.com\/.*/.exec(url)) +} - return urlComponents +export function isGithubShortcut(url: string): boolean { + return !isNil(/^(github|gh).*/.exec(url)) } export function isGithubUrlOrShortcut(url: string): boolean { - return !isNil(/^(github:|gh:|https?:\/\/github.com).*/.exec(url)) + return isGithubUrl(url) || isGithubShortcut(url) } -const GITHUB_URL_ERROR_HINTS = ` Check the correctness of the URL. If it's a full GitHub URL, please try to navigate to it - you should see a GitHub repo branch with your files listed. If it's a GitHub URL shortcut, please double check the syntax. See documentation for the correct syntax and examples. If you don't intend to use custom datasets, remove the parameter from the address or restart the application.` +const GITHUB_URL_ERROR_HINTS = ` Check the correctness of the URL. If it's a full GitHub URL, please try to navigate to it - you should see a GitHub repo branch with your files listed. If it's a GitHub URL shortcut, please double-check the syntax. See documentation for the correct syntax and examples. If you don't intend to use custom datasets, remove the parameter from the address or restart the application.` export class ErrorDatasetGithubUrlPatternInvalid extends Error { public readonly datasetGithubUrl: string @@ -112,7 +161,7 @@ export class ErrorDatasetGithubUrlComponentsInvalid extends Error { constructor(datasetGithubUrl: string, parsedRepoUrlComponents: Partial) { const componentsListStr = Object.entries(parsedRepoUrlComponents) .map(([key, val]) => `${key}='${val}'`) - .join(',') + .join(', ') super( `Dataset GitHub URL is invalid: '${datasetGithubUrl}'. Detected the following components ${componentsListStr}.${GITHUB_URL_ERROR_HINTS}`, diff --git a/packages_rs/nextclade-web/src/io/fetchSingleDatasetFromUrl.ts b/packages_rs/nextclade-web/src/io/fetchSingleDatasetFromUrl.ts index 55ef22b40..a2045ce81 100644 --- a/packages_rs/nextclade-web/src/io/fetchSingleDatasetFromUrl.ts +++ b/packages_rs/nextclade-web/src/io/fetchSingleDatasetFromUrl.ts @@ -1,3 +1,4 @@ +import axios from 'axios' import urljoin from 'url-join' import { mapValues } from 'lodash' import { concurrent } from 'fasy' @@ -28,7 +29,7 @@ async function fetchPathogenJson(datasetRootUrl: string) { try { pathogen = await axiosFetch(urljoin(datasetRootUrl, 'pathogen.json')) } catch (error: unknown) { - if (await checkDatasetV2FilesExist(datasetRootUrl)) { + if (axios.isAxiosError(error) && error.status === '404' && (await checkDatasetV2FilesExist(datasetRootUrl))) { throw new NextcladeV2Error(datasetRootUrl) } throw error diff --git a/packages_rs/nextclade-web/src/pages/_app.tsx b/packages_rs/nextclade-web/src/pages/_app.tsx index 42690a671..7ca35a9fb 100644 --- a/packages_rs/nextclade-web/src/pages/_app.tsx +++ b/packages_rs/nextclade-web/src/pages/_app.tsx @@ -96,17 +96,15 @@ export function RecoilStateInitializer() { set(localeAtom, locale.key) }) .then(async () => { - const datasetInfo = await fetchSingleDataset(urlQuery) + const datasetServerUrl = await getDatasetServerUrl(urlQuery) + set(datasetServerUrlAtom, datasetServerUrl) + const { datasets, currentDataset, minimizerIndexVersion } = await initializeDatasets(datasetServerUrl, urlQuery) + const datasetInfo = await fetchSingleDataset(urlQuery) if (!isNil(datasetInfo)) { const { datasets, currentDataset } = datasetInfo return { datasets, currentDataset, minimizerIndexVersion: undefined } } - - const datasetServerUrl = await getDatasetServerUrl(urlQuery) - set(datasetServerUrlAtom, datasetServerUrl) - - const { datasets, currentDataset, minimizerIndexVersion } = await initializeDatasets(datasetServerUrl, urlQuery) return { datasets, currentDataset, minimizerIndexVersion } }) .catch((error) => { @@ -123,19 +121,19 @@ export function RecoilStateInitializer() { set(minimizerIndexVersionAtom, minimizerIndexVersion) return dataset }) - .then((dataset) => { - const inputFastas = createInputFastasFromUrlParam(urlQuery, dataset) + .then(async (dataset) => { + const inputFastas = await createInputFastasFromUrlParam(urlQuery, dataset) if (!isEmpty(inputFastas)) { set(qrySeqInputsStorageAtom, inputFastas) } - set(refSeqInputAtom, createInputFromUrlParamMaybe(urlQuery, 'input-ref')) - set(geneMapInputAtom, createInputFromUrlParamMaybe(urlQuery, 'input-annotation')) - set(refTreeInputAtom, createInputFromUrlParamMaybe(urlQuery, 'input-tree')) - set(virusPropertiesInputAtom, createInputFromUrlParamMaybe(urlQuery, 'input-pathogen-json')) + set(refSeqInputAtom, await createInputFromUrlParamMaybe(urlQuery, 'input-ref')) + set(geneMapInputAtom, await createInputFromUrlParamMaybe(urlQuery, 'input-annotation')) + set(refTreeInputAtom, await createInputFromUrlParamMaybe(urlQuery, 'input-tree')) + set(virusPropertiesInputAtom, await createInputFromUrlParamMaybe(urlQuery, 'input-pathogen-json')) - if (!isEmpty(inputFastas)) { + if (!isEmpty(inputFastas) && !isEmpty(dataset)) { run() } diff --git a/packages_rs/nextclade-web/yarn.lock b/packages_rs/nextclade-web/yarn.lock index a3c29efe9..07851d9b1 100644 --- a/packages_rs/nextclade-web/yarn.lock +++ b/packages_rs/nextclade-web/yarn.lock @@ -10,6 +10,14 @@ "@jridgewell/gen-mapping" "^0.1.0" "@jridgewell/trace-mapping" "^0.3.9" +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + "@aws-crypto/ie11-detection@^2.0.0": version "2.0.2" resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz#9c39f4a5558196636031a933ec1b4792de959d6a" @@ -655,11 +663,24 @@ dependencies: "@babel/highlight" "^7.16.7" +"@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== + dependencies: + "@babel/highlight" "^7.23.4" + chalk "^2.4.2" + "@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.0", "@babel/compat-data@^7.17.7": version "7.17.7" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.7.tgz#078d8b833fbbcc95286613be8c716cef2b519fa2" integrity sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ== +"@babel/compat-data@^7.22.9": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== + "@babel/core@7.12.9": version "7.12.9" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" @@ -682,7 +703,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@7.17.9", "@babel/core@>=7.9.0", "@babel/core@^7.1.0", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.15.5", "@babel/core@^7.16.0", "@babel/core@^7.3.4": +"@babel/core@7.17.9", "@babel/core@>=7.9.0", "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.15.5", "@babel/core@^7.16.0", "@babel/core@^7.3.4": version "7.17.9" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.9.tgz#6bae81a06d95f4d0dec5bb9d74bbc1f58babdcfe" integrity sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw== @@ -725,6 +746,27 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/core@^7.7.2", "@babel/core@^7.8.0": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.5.tgz#6e23f2acbcb77ad283c5ed141f824fd9f70101c7" + integrity sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.5" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.5" + "@babel/parser" "^7.23.5" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.5" + "@babel/types" "^7.23.5" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + "@babel/eslint-parser@^7.16.3": version "7.17.0" resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.17.0.tgz#eabb24ad9f0afa80e5849f8240d0e5facc2d90d6" @@ -743,6 +785,16 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.5.tgz#17d0a1ea6b62f351d281350a5f80b87a810c4755" + integrity sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA== + dependencies: + "@babel/types" "^7.23.5" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@^7.15.4", "@babel/helper-annotate-as-pure@^7.16.0", "@babel/helper-annotate-as-pure@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" @@ -768,6 +820,17 @@ browserslist "^4.17.5" semver "^6.3.0" +"@babel/helper-compilation-targets@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" + integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== + dependencies: + "@babel/compat-data" "^7.22.9" + "@babel/helper-validator-option" "^7.22.15" + browserslist "^4.21.9" + lru-cache "^5.1.1" + semver "^6.3.1" + "@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7", "@babel/helper-create-class-features-plugin@^7.17.6", "@babel/helper-create-class-features-plugin@^7.17.9", "@babel/helper-create-class-features-plugin@^7.8.3": version "7.17.9" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz#71835d7fb9f38bd9f1378e40a4c0902fdc2ea49d" @@ -810,6 +873,11 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== + "@babel/helper-explode-assignable-expression@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" @@ -825,6 +893,14 @@ "@babel/template" "^7.16.7" "@babel/types" "^7.17.0" +"@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== + dependencies: + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" + "@babel/helper-hoist-variables@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" @@ -832,6 +908,13 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + "@babel/helper-member-expression-to-functions@^7.16.7", "@babel/helper-member-expression-to-functions@^7.17.7": version "7.17.7" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz#a34013b57d8542a8c4ff8ba3f747c02452a4d8c4" @@ -846,6 +929,13 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-module-imports@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" + integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== + dependencies: + "@babel/types" "^7.22.15" + "@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.16.7", "@babel/helper-module-transforms@^7.17.7", "@babel/helper-module-transforms@^7.9.0": version "7.17.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz#3943c7f777139e7954a5355c815263741a9c1cbd" @@ -860,6 +950,17 @@ "@babel/traverse" "^7.17.3" "@babel/types" "^7.17.0" +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-optimise-call-expression@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" @@ -904,6 +1005,13 @@ dependencies: "@babel/types" "^7.17.0" +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" @@ -918,16 +1026,38 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== + "@babel/helper-validator-identifier@^7.15.7", "@babel/helper-validator-identifier@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + "@babel/helper-validator-option@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== +"@babel/helper-validator-option@^7.22.15": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== + "@babel/helper-wrap-function@^7.16.8": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" @@ -947,6 +1077,15 @@ "@babel/traverse" "^7.17.9" "@babel/types" "^7.17.0" +"@babel/helpers@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.5.tgz#52f522840df8f1a848d06ea6a79b79eefa72401e" + integrity sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg== + dependencies: + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.5" + "@babel/types" "^7.23.5" + "@babel/highlight@^7.10.4", "@babel/highlight@^7.16.7": version "7.17.9" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.9.tgz#61b2ee7f32ea0454612def4fccdae0de232b73e3" @@ -956,6 +1095,15 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + "@babel/node@7.16.8": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.16.8.tgz#57ba1dfa63dbcc72d477f05597ce07f1c4f8b558" @@ -978,6 +1126,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.9.tgz#9c94189a6062f0291418ca021077983058e171ef" integrity sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg== +"@babel/parser@^7.22.15", "@babel/parser@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.5.tgz#37dee97c4752af148e1d38c34b856b2507660563" + integrity sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ== + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" @@ -1853,6 +2006,15 @@ "@babel/parser" "^7.16.7" "@babel/types" "^7.16.7" +"@babel/template@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" + integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" + "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.3", "@babel/traverse@^7.17.9", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.2", "@babel/traverse@^7.8.3", "@babel/traverse@^7.9.0": version "7.17.9" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.9.tgz#1f9b207435d9ae4a8ed6998b2b82300d83c37a0d" @@ -1869,6 +2031,22 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.5.tgz#f546bf9aba9ef2b042c0e00d245990c15508e7ec" + integrity sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.23.5" + "@babel/types" "^7.23.5" + debug "^4.1.0" + globals "^11.1.0" + "@babel/types@7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" @@ -1885,6 +2063,15 @@ "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" +"@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.5.tgz#48d730a00c95109fa4393352705954d74fb5b602" + integrity sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w== + dependencies: + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" + "@bcherny/json-schema-ref-parser@10.0.5-fork": version "10.0.5-fork" resolved "https://registry.yarnpkg.com/@bcherny/json-schema-ref-parser/-/json-schema-ref-parser-10.0.5-fork.tgz#9b5e1e7e07964ea61840174098e634edbe8197bc" @@ -2231,6 +2418,18 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== +"@jest/console@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" + integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^27.5.1" + jest-util "^27.5.1" + slash "^3.0.0" + "@jest/console@^28.0.1": version "28.0.1" resolved "https://registry.yarnpkg.com/@jest/console/-/console-28.0.1.tgz#4869cecbc5ffddbd03feaaeddcc73110d9e23f49" @@ -2243,115 +2442,101 @@ jest-util "^28.0.1" slash "^3.0.0" -"@jest/core@^28.0.1": - version "28.0.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-28.0.1.tgz#9d3cd1f157f3e53c0e61e242ae39a1872befc374" - integrity sha512-hTxTpwJPOwHpCFwo4s6QVHq423RtZNaBsb/JQdicLzGvQuxnAzvaA7H3NFiv+TB6ExSOdW5aG2Q5nz/IwYCHIQ== +"@jest/core@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" + integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== dependencies: - "@jest/console" "^28.0.1" - "@jest/reporters" "^28.0.1" - "@jest/test-result" "^28.0.1" - "@jest/transform" "^28.0.1" - "@jest/types" "^28.0.1" + "@jest/console" "^27.5.1" + "@jest/reporters" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - ci-info "^3.2.0" + emittery "^0.8.1" exit "^0.1.2" graceful-fs "^4.2.9" - jest-changed-files "^28.0.0" - jest-config "^28.0.1" - jest-haste-map "^28.0.1" - jest-message-util "^28.0.1" - jest-regex-util "^28.0.0" - jest-resolve "^28.0.1" - jest-resolve-dependencies "^28.0.1" - jest-runner "^28.0.1" - jest-runtime "^28.0.1" - jest-snapshot "^28.0.1" - jest-util "^28.0.1" - jest-validate "^28.0.1" - jest-watcher "^28.0.1" + jest-changed-files "^27.5.1" + jest-config "^27.5.1" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-resolve-dependencies "^27.5.1" + jest-runner "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + jest-watcher "^27.5.1" micromatch "^4.0.4" - pretty-format "^28.0.1" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^28.0.1": - version "28.0.1" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-28.0.1.tgz#a50cefc75329b7f499b65694fc405509bd3a8ec9" - integrity sha512-PuN3TBNFSUKNgEgFgJxb15/GOyhXc46wbyCobUcf8ijUgteEmVXD4FfUZpe5QXg/bpmydufzx/02BRlUfkM44Q== +"@jest/environment@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" + integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== dependencies: - "@jest/fake-timers" "^28.0.1" - "@jest/types" "^28.0.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" - jest-mock "^28.0.1" - -"@jest/expect-utils@^28.0.1": - version "28.0.1" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-28.0.1.tgz#c6aa0fb629e3d205384406c2e6cb00b7916c597a" - integrity sha512-ctuvt7SeoVlG3P2eemtq3/TF5a7ncnpC18Ctv1BjCfBjkjVKtAkDblw6qhx24tZlYdhm0lrihwK80pkzmkUctw== - dependencies: - jest-get-type "^28.0.0" - -"@jest/expect@^28.0.1": - version "28.0.1" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-28.0.1.tgz#eb836dc95686e724de3419bf08e43f12466a9fb2" - integrity sha512-qRAiC7/gJ/1z2O+TnGCVUTJ/HkqXhDCSm4R7ydfY/rOMryvFzccpALmHdI8joovGRQvkHStM/wwHRHRQTc8+zQ== - dependencies: - expect "^28.0.1" - jest-snapshot "^28.0.1" + jest-mock "^27.5.1" -"@jest/fake-timers@^28.0.1": - version "28.0.1" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-28.0.1.tgz#e0a95401a06b28224475fe0a124835d6e689869b" - integrity sha512-w7JleyVymoVWMvsnRRpM/ySM+K6qq+cLwK33VbFAghKTHp14oBiOio1Hh1egUyFdNybmKZxQvBBwB0M/48LgGQ== +"@jest/fake-timers@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" + integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== dependencies: - "@jest/types" "^28.0.1" - "@sinonjs/fake-timers" "^9.1.1" + "@jest/types" "^27.5.1" + "@sinonjs/fake-timers" "^8.0.1" "@types/node" "*" - jest-message-util "^28.0.1" - jest-mock "^28.0.1" - jest-util "^28.0.1" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-util "^27.5.1" -"@jest/globals@^28.0.1": - version "28.0.1" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-28.0.1.tgz#165eced7e768c595c2eba5ae8e6d9784224328e9" - integrity sha512-KBWuQ1PQjm8IKUObSSQAGlGguJZHKaVCHWY99FSGwjyf58hT9yCYH2wFfLhWocy4Y5otK2gZbsCwWVX6WXft2Q== +"@jest/globals@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" + integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== dependencies: - "@jest/environment" "^28.0.1" - "@jest/expect" "^28.0.1" - "@jest/types" "^28.0.1" + "@jest/environment" "^27.5.1" + "@jest/types" "^27.5.1" + expect "^27.5.1" -"@jest/reporters@^28.0.1": - version "28.0.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-28.0.1.tgz#711145ea5e6c29c9f8050cb65d3ef98fe68a8290" - integrity sha512-XMjv+E0fi2QA1qbV1q/NiODueljjfM9i2SpOFqGLc8pHeAcfYfFAZIWI6DXe+2dL4RylDiAlV6Ll5KU4GyUuvA== +"@jest/reporters@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" + integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^28.0.1" - "@jest/test-result" "^28.0.1" - "@jest/transform" "^28.0.1" - "@jest/types" "^28.0.1" - "@jridgewell/trace-mapping" "^0.3.7" + "@jest/console" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" - glob "^7.1.3" + glob "^7.1.2" graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" istanbul-lib-instrument "^5.1.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-util "^28.0.1" - jest-worker "^28.0.1" + jest-haste-map "^27.5.1" + jest-resolve "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" slash "^3.0.0" + source-map "^0.6.0" string-length "^4.0.1" terminal-link "^2.0.0" - v8-to-istanbul "^9.0.0" + v8-to-istanbul "^8.1.0" "@jest/schemas@^28.0.0": version "28.0.0" @@ -2360,14 +2545,24 @@ dependencies: "@sinclair/typebox" "^0.23.3" -"@jest/source-map@^28.0.0": - version "28.0.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-28.0.0.tgz#d026fc1cd7e95fd7ce788d0b27838d9796da0a74" - integrity sha512-yeD/Y94j6UJPiaZTG5Sdww7pbHvEc7RlTucoVAdXaBaSuNcyrAkLlJonAb/xX/efCugDOEbFJdATsSnDEh45Nw== +"@jest/source-map@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" + integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== dependencies: - "@jridgewell/trace-mapping" "^0.3.7" callsites "^3.0.0" graceful-fs "^4.2.9" + source-map "^0.6.0" + +"@jest/test-result@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" + integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== + dependencies: + "@jest/console" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" "@jest/test-result@^28.0.1": version "28.0.1" @@ -2379,15 +2574,15 @@ "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^28.0.1": - version "28.0.1" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-28.0.1.tgz#7260db16c12f055f80809348740c2fd2d903f6e0" - integrity sha512-PbXoEP9aovOC+KunEy65vuSAB/ZMLNcBVdMUIH2hsfFDWhQx/8OnHsz3dr3g1U6qNuCpXzD1fyM8/1TrUU0uFw== +"@jest/test-sequencer@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" + integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== dependencies: - "@jest/test-result" "^28.0.1" + "@jest/test-result" "^27.5.1" graceful-fs "^4.2.9" - jest-haste-map "^28.0.1" - slash "^3.0.0" + jest-haste-map "^27.5.1" + jest-runtime "^27.5.1" "@jest/transform@^27.5.1": version "27.5.1" @@ -2410,27 +2605,6 @@ source-map "^0.6.1" write-file-atomic "^3.0.0" -"@jest/transform@^28.0.1": - version "28.0.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-28.0.1.tgz#44fced5a366af7cc5f69745c92014bf45c408d90" - integrity sha512-45fxjycts6CTPMeusSICYhMkMgFAs1opvgEBYcMmukucJw/AgVEMsGFqheWyDzlU6GJ+h9cpft/zkTGPJtzRGQ== - dependencies: - "@babel/core" "^7.11.6" - "@jest/types" "^28.0.1" - "@jridgewell/trace-mapping" "^0.3.7" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^28.0.1" - jest-regex-util "^28.0.0" - jest-util "^28.0.1" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - write-file-atomic "^4.0.1" - "@jest/types@^27.5.1": version "27.5.1" resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" @@ -2462,22 +2636,54 @@ "@jridgewell/set-array" "1.0.0" "@jridgewell/sourcemap-codec" "^1.4.10" +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/resolve-uri@^3.0.3": version "3.0.6" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.6.tgz#4ac237f4dabc8dd93330386907b97591801f7352" integrity sha512-R7xHtBSNm+9SyvpJkdQl+qrM3Hm2fea3Ef197M3mUug+v+yR+Rhfbs7PBtcBUVnIWJ4JcAdjvij+c8hXS9p5aw== +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + "@jridgewell/set-array@1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.0.0.tgz#6a8e62049ab198c5f7daf8047e71947ef46c11c8" integrity sha512-LcqVnHCjOAj8BTCtjpwYZCMTn4yArusbdObCVRUYvBHhrR5fVLVyENG+UVWM4T4H/ufv7NiBLdprllxWs/5PaQ== +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.11" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec" integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== -"@jridgewell/trace-mapping@^0.3.7", "@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.17": + version "0.3.20" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" + integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@jridgewell/trace-mapping@^0.3.9": version "0.3.9" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== @@ -2811,10 +3017,10 @@ dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^9.1.1": - version "9.1.2" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz#4eaab737fab77332ab132d396a3c0d364bd0ea8c" - integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== +"@sinonjs/fake-timers@^8.0.1": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" + integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== dependencies: "@sinonjs/commons" "^1.7.0" @@ -2987,6 +3193,11 @@ resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.1.1.tgz#e1ff6118896e4b22af31e5ea2f9da956adde23d8" integrity sha512-XrjH/iEUqNl9lF2HX9YhPNV7Amntkcnpw0Bo1KkRzowNDcgSN9i0nm4Q8Oi5wupgdfPaJNMAWa61A+voD6Kmwg== +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + "@tootallnate/once@2": version "2.0.0" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" @@ -3035,6 +3246,13 @@ dependencies: "@babel/types" "^7.3.0" +"@types/babel__traverse@^7.0.4": + version "7.20.4" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.4.tgz#ec2c06fed6549df8bc0eb4615b683749a4a92e1b" + integrity sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA== + dependencies: + "@babel/types" "^7.20.7" + "@types/body-parser@*": version "1.19.2" resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" @@ -3209,7 +3427,7 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/graceful-fs@^4.1.2", "@types/graceful-fs@^4.1.3": +"@types/graceful-fs@^4.1.2": version "4.1.5" resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== @@ -3937,7 +4155,7 @@ JSONStream@^1.0.4: jsonparse "^1.2.0" through ">=2.2.7 <3" -abab@^2.0.5: +abab@^2.0.3, abab@^2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== @@ -3962,6 +4180,14 @@ accepts@~1.3.5, accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + acorn-import-assertions@^1.7.6: version "1.8.0" resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" @@ -3982,6 +4208,11 @@ acorn@^7.1.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.2.4: + version "8.11.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" + integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== + acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.0: version "8.7.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" @@ -4483,7 +4714,7 @@ axobject-query@^2.2.0: resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== -babel-jest@^27.0.1: +babel-jest@^27.0.1, babel-jest@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== @@ -4497,19 +4728,6 @@ babel-jest@^27.0.1: graceful-fs "^4.2.9" slash "^3.0.0" -babel-jest@^28.0.1: - version "28.0.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.0.1.tgz#effa686f25551d930bf3b645d7513091094f8968" - integrity sha512-UbL+4xVftxnIcPKzCqmwZHwaPG8DyKOCXoWPeuKrvUFtyeUpePy6VtRiMN1Dv001NbEMNP4FVjfKwv1xe2PWZQ== - dependencies: - "@jest/transform" "^28.0.1" - "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^28.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" - babel-loader@^8.0.4: version "8.2.5" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.5.tgz#d45f585e654d5a5d90f5350a779d7647c5ed512e" @@ -4563,16 +4781,6 @@ babel-plugin-jest-hoist@^27.5.1: "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-plugin-jest-hoist@^28.0.0: - version "28.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.0.0.tgz#7429bb64b97170822dce58ee763555ebc983cbdc" - integrity sha512-Eu+TDlmKd2SsnvmlooVeHFryVHHom6ffCLSZuqrN8WpIHE0H6qiIPW5h5rFlzIZQmVqnZR2qHnbm2eQWIP7hZg== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.1.14" - "@types/babel__traverse" "^7.0.6" - babel-plugin-lodash@^3.3.4: version "3.3.4" resolved "https://registry.yarnpkg.com/babel-plugin-lodash/-/babel-plugin-lodash-3.3.4.tgz#4f6844358a1340baed182adbeffa8df9967bc196" @@ -4700,14 +4908,6 @@ babel-preset-jest@^27.5.1: babel-plugin-jest-hoist "^27.5.1" babel-preset-current-node-syntax "^1.0.0" -babel-preset-jest@^28.0.0: - version "28.0.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-28.0.0.tgz#9e7c5f4097b63a3e9edb8f59b8030eca6901771c" - integrity sha512-JLyjfCmqCWS3tXUw86ei5fQwuwn34slNBPTluNbhoqHVI1Cbw6MsmvgEl54jPjbyzkmA6XAHJTg3EGNY7rnr4A== - dependencies: - babel-plugin-jest-hoist "^28.0.0" - babel-preset-current-node-syntax "^1.0.0" - babel-preset-react-app@^10.0.1: version "10.0.1" resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz#ed6005a20a24f2c88521809fa9aea99903751584" @@ -4970,6 +5170,11 @@ broccoli-plugin@^4.0.7: rimraf "^3.0.2" symlink-or-copy "^1.3.1" +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.1, browserslist@^4.16.6, browserslist@^4.17.5, browserslist@^4.20.2, browserslist@^4.20.3: version "4.20.3" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.3.tgz#eb7572f49ec430e054f56d52ff0ebe9be915f8bf" @@ -4981,6 +5186,16 @@ browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.1, browserslist@^ node-releases "^2.0.3" picocolors "^1.0.0" +browserslist@^4.21.9: + version "4.22.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" + integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== + dependencies: + caniuse-lite "^1.0.30001565" + electron-to-chromium "^1.4.601" + node-releases "^2.0.14" + 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" @@ -5129,6 +5344,11 @@ caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001179, caniuse-lite@^1.0.300013 resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz#39476d3aa8d83ea76359c70302eafdd4a1d727dd" integrity sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw== +caniuse-lite@^1.0.30001565: + version "1.0.30001568" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001568.tgz#53fa9297273c9a977a560663f48cbea1767518b7" + integrity sha512-vSUkH84HontZJ88MiNrOau1EBrCqEQYgkC5gIySiDlpsm8sGVrhU7Kx4V6h0tnqaHzIHZv08HlJIwPbL4XL9+A== + ccount@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" @@ -5166,7 +5386,7 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.3.2, chalk@^2.4.1: +chalk@^2.0.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -5850,6 +6070,11 @@ convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, dependencies: safe-buffer "~5.1.1" +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -6156,6 +6381,23 @@ csso@^4.0.2, csso@^4.2.0: dependencies: css-tree "^1.1.2" +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + csstype@^3.0.2: version "3.0.11" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.11.tgz#d66700c5eacfac1940deb4e3ee5642792d85cd33" @@ -6371,6 +6613,15 @@ dargs@^7.0.0: resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + dateformat@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" @@ -6406,6 +6657,11 @@ decimal.js-light@^2.4.1: resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934" integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== +decimal.js@^10.2.1: + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== + decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" @@ -6567,11 +6823,6 @@ diff-sequences@^27.5.1: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== -diff-sequences@^28.0.0: - version "28.0.0" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-28.0.0.tgz#06d253f0005463bf203d96fdbd6296c5f1d1888c" - integrity sha512-GTIQPn2pPa1DMoEH70P9yQgYLcGW8bjPR5EOL2JO9/7DQHX+9tTFJee3UmlGWuyUvIqMgpXXssrckLubiEUZTg== - dir-glob@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" @@ -6680,6 +6931,13 @@ domelementtype@^2.0.1, domelementtype@^2.2.0: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + domhandler@^2.3.0: version "2.4.2" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" @@ -6800,11 +7058,21 @@ electron-to-chromium@^1.4.118: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.123.tgz#de88ea7fd29d7c868e63c88f129e91494bcf3266" integrity sha512-0pHGE53WkYoFbsgwYcVKEpWa6jbzlvkohIEA2CUoZ9b5KC+w/zlMiQHvW/4IBcOh7YoEFqRNavgTk02TBoUTUw== +electron-to-chromium@^1.4.601: + version "1.4.609" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.609.tgz#5790a70aaa96de232501b56e14b64d17aff93988" + integrity sha512-ihiCP7PJmjoGNuLpl7TjNA8pCQWu09vGyjlPYw1Rqww4gvNuCcmvl+44G+2QyJ6S2K4o+wbTS++Xz0YN8Q9ERw== + emittery@^0.10.2: version "0.10.2" resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933" integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== +emittery@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" + integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -7612,16 +7880,15 @@ expand-template@^2.0.3: resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== -expect@^28.0.1: - version "28.0.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-28.0.1.tgz#7bfac95d375d4310d5061f7e9b7f2afa55a1c1c0" - integrity sha512-sJjuHVbveEUczNITHKgHUepbEyj+UzjACMNuEln5tZI6b9L/y8jTXAN8VnOCnMoK7vuQPSttO/5HlKB+G3Enpw== +expect@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" + integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== dependencies: - "@jest/expect-utils" "^28.0.1" - jest-get-type "^28.0.0" - jest-matcher-utils "^28.0.1" - jest-message-util "^28.0.1" - jest-util "^28.0.1" + "@jest/types" "^27.5.1" + jest-get-type "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" express-naked-redirect@^0.1.9: version "0.1.9" @@ -8010,6 +8277,15 @@ fork-ts-checker-webpack-plugin@6.5.1: semver "^7.3.2" tapable "^1.0.0" +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -8901,6 +9177,13 @@ hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: dependencies: lru-cache "^6.0.0" +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + html-entities@^2.1.0, html-entities@^2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" @@ -8994,6 +9277,15 @@ http-errors@2.0.0, http-errors@^2.0.0: statuses "2.0.1" toidentifier "1.0.1" +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + http-proxy-agent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" @@ -9575,6 +9867,11 @@ is-plain-object@^5.0.0: resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + is-promise@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" @@ -9786,87 +10083,90 @@ jest-axe@6.0.0: jest-matcher-utils "27.0.2" lodash.merge "4.6.2" -jest-chain@1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/jest-chain/-/jest-chain-1.1.5.tgz#57b804d7d23f7c8455b62051795cfe5c444fa262" - integrity sha512-bTx51vQP/6/XVDrMtz0WmT3wZoXvj5QAAnw1to+o6pvtjcwTIVuB6uR5URRXH/9rHf1WuM1UgsfVTWhTC/QAzw== +jest-chain@1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/jest-chain/-/jest-chain-1.1.6.tgz#24637e9d5136b6c15aa3c2e05c3e55a816523108" + integrity sha512-eIkGzVBGQ1VuEErDceMYAET53pcwYVVTXtJEbY+x60Dwi+2M2uOt4rhKAej+wfVOAlE4G0plI9mstmv6GBtJjw== -jest-changed-files@^28.0.0: - version "28.0.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-28.0.0.tgz#f06ad666ef6ec766a77e13cb3f55bd5c0dec0461" - integrity sha512-9hFz/LuADUTv7zN+t0Ig+J/as2mtILTmgoT2XQdG/ezGbA1tfqoSwEKCXFcDaldzkskZddbh+QI2sACQGaxg6Q== +jest-changed-files@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" + integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== dependencies: + "@jest/types" "^27.5.1" execa "^5.0.0" throat "^6.0.1" -jest-circus@^28.0.1: - version "28.0.1" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-28.0.1.tgz#5bad5888e4965735e765188fc21e6c73ffe8d984" - integrity sha512-33Ulac556FQcgQkDEXVVDag4PGQd+lWP9bxsuVg4q+b4x1cMiWNMCUjN5Dv1q/n90PvGzWxqXuN5X3gF93msew== +jest-circus@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" + integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== dependencies: - "@jest/environment" "^28.0.1" - "@jest/expect" "^28.0.1" - "@jest/test-result" "^28.0.1" - "@jest/types" "^28.0.1" + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" + expect "^27.5.1" is-generator-fn "^2.0.0" - jest-each "^28.0.1" - jest-matcher-utils "^28.0.1" - jest-message-util "^28.0.1" - jest-runtime "^28.0.1" - jest-snapshot "^28.0.1" - jest-util "^28.0.1" - pretty-format "^28.0.1" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" slash "^3.0.0" stack-utils "^2.0.3" throat "^6.0.1" -jest-cli@^28.0.1: - version "28.0.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-28.0.1.tgz#0d1b90e6726dab104cb5f5e7e8fcdef20ba75644" - integrity sha512-N6m5FwG0E0sFuhT6eRhskvfPrm+e5UXoErdR1cw2csIlpZpzvnl+bP60JH/UAG9KW1wYNDo2N3tVYn/zoMbhOA== +jest-cli@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" + integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== dependencies: - "@jest/core" "^28.0.1" - "@jest/test-result" "^28.0.1" - "@jest/types" "^28.0.1" + "@jest/core" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^28.0.1" - jest-util "^28.0.1" - jest-validate "^28.0.1" + jest-config "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" prompts "^2.0.1" - yargs "^17.3.1" + yargs "^16.2.0" -jest-config@^28.0.1: - version "28.0.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-28.0.1.tgz#69bc6304edd7f44746d59393acb9ce6e55c00ef4" - integrity sha512-Zp7hsNMxhBrMYx9R+OXWXElX4TDRotgilwGwkRT7YZ4wE8d0w5LKS0mKrd9sExoIWc+cFii/WAeDXlt8/AtfCA== +jest-config@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" + integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== dependencies: - "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^28.0.1" - "@jest/types" "^28.0.1" - babel-jest "^28.0.1" + "@babel/core" "^7.8.0" + "@jest/test-sequencer" "^27.5.1" + "@jest/types" "^27.5.1" + babel-jest "^27.5.1" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" - glob "^7.1.3" + glob "^7.1.1" graceful-fs "^4.2.9" - jest-circus "^28.0.1" - jest-environment-node "^28.0.1" - jest-get-type "^28.0.0" - jest-regex-util "^28.0.0" - jest-resolve "^28.0.1" - jest-runner "^28.0.1" - jest-util "^28.0.1" - jest-validate "^28.0.1" + jest-circus "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-get-type "^27.5.1" + jest-jasmine2 "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runner "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^28.0.1" + pretty-format "^27.5.1" slash "^3.0.0" strip-json-comments "^3.1.1" @@ -9880,45 +10180,48 @@ jest-diff@^27.0.2, jest-diff@^27.2.5, jest-diff@^27.5.1: jest-get-type "^27.5.1" pretty-format "^27.5.1" -jest-diff@^28.0.1: - version "28.0.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-28.0.1.tgz#fe29002a53c0a663c6cb395cad91ea0b82b0c826" - integrity sha512-XtUUND9AlP6y+O5gnxm54rcFxs65isB1NahScgBU+NqiUYdKK9qXMXAotkTJHui6GUdjApXq0zvSXB6zQh9CNg== - dependencies: - chalk "^4.0.0" - diff-sequences "^28.0.0" - jest-get-type "^28.0.0" - pretty-format "^28.0.1" - -jest-docblock@^28.0.0: - version "28.0.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-28.0.0.tgz#7f39dc998da47dac243157fbe7fbc1e993ab0eb8" - integrity sha512-88od+z1QkHyvtpj1gRA6QGysopOzImocHNNlvvM7OydDe9ER6z1siLtHJXbKEfi5FoxMpYqDtszYIS50JVs0WA== +jest-docblock@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" + integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== dependencies: detect-newline "^3.0.0" -jest-each@^28.0.1: - version "28.0.1" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-28.0.1.tgz#bd8d78f066df0366cfd351a5f9ba5acfa119ef89" - integrity sha512-C7ftacESgAPcs2CydQYJKBFi0T0jkuxZWds2f901coi0SJ4M9ONhFHR2WmfJpHiPWGhAl3N9E8qn8QCZhCk9fA== +jest-each@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" + integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== dependencies: - "@jest/types" "^28.0.1" + "@jest/types" "^27.5.1" chalk "^4.0.0" - jest-get-type "^28.0.0" - jest-util "^28.0.1" - pretty-format "^28.0.1" + jest-get-type "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" -jest-environment-node@^28.0.1: - version "28.0.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-28.0.1.tgz#d2eacc122481438102a324b3f83216b873773a18" - integrity sha512-oGlrqMpLyHgpUThI/8hdDQfcWXKtXuWcFVTKYAeVWvD14btGUn90RlIeCqTbGv197t7NwV51PHDZBFbp1RWceQ== +jest-environment-jsdom@27.5.1, jest-environment-jsdom@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" + integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== dependencies: - "@jest/environment" "^28.0.1" - "@jest/fake-timers" "^28.0.1" - "@jest/types" "^28.0.1" + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" - jest-mock "^28.0.1" - jest-util "^28.0.1" + jest-mock "^27.5.1" + jest-util "^27.5.1" + jsdom "^16.6.0" + +jest-environment-node@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" + integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + jest-util "^27.5.1" jest-extended@2.0.0: version "2.0.0" @@ -9933,11 +10236,6 @@ jest-get-type@^27.0.1, jest-get-type@^27.0.6, jest-get-type@^27.5.1: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== -jest-get-type@^28.0.0: - version "28.0.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-28.0.0.tgz#8d36b49c151bc3a9e078a2e92d502e778ed49164" - integrity sha512-754LtawzW+Qk4o5rC+eDqfcQ9dV8z9uvbaVenmK8pju11PBGfuMDvQwRxoPews0LCaumNmYHjcAwmkYINTlhIA== - jest-haste-map@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" @@ -9958,32 +10256,36 @@ jest-haste-map@^27.5.1: optionalDependencies: fsevents "^2.3.2" -jest-haste-map@^28.0.1: - version "28.0.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-28.0.1.tgz#48fa7e2c9f205118a713b04bd80c07de2795d281" - integrity sha512-qjpK9NDBiwlSHbKS0rDUDOTTDSHT4tNnJbUewfMsSiWFAOAqgcBDG3o5f1N9Srx5Hz14QsdnDuK9oy6oyQqJ9g== +jest-jasmine2@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" + integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== dependencies: - "@jest/types" "^28.0.1" - "@types/graceful-fs" "^4.1.3" + "@jest/environment" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^28.0.0" - jest-util "^28.0.1" - jest-worker "^28.0.1" - micromatch "^4.0.4" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.3.2" + chalk "^4.0.0" + co "^4.6.0" + expect "^27.5.1" + is-generator-fn "^2.0.0" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + throat "^6.0.1" -jest-leak-detector@^28.0.1: - version "28.0.1" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-28.0.1.tgz#26e4737145ee6b2aef871eda2f9606bd63fb33ca" - integrity sha512-g+0cRjOeNy0Wy/9LfgzyyVjKNnkFddEXisac+5arM3JwdW4hjZJR+5lwiIuMxuPtacldLWhu0pN63KV+Z33smQ== +jest-leak-detector@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" + integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== dependencies: - jest-get-type "^28.0.0" - pretty-format "^28.0.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" jest-matcher-utils@27.0.2: version "27.0.2" @@ -9995,7 +10297,7 @@ jest-matcher-utils@27.0.2: jest-get-type "^27.0.1" pretty-format "^27.0.2" -jest-matcher-utils@^27.0.0: +jest-matcher-utils@^27.0.0, jest-matcher-utils@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== @@ -10005,15 +10307,20 @@ jest-matcher-utils@^27.0.0: jest-get-type "^27.5.1" pretty-format "^27.5.1" -jest-matcher-utils@^28.0.1: - version "28.0.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.0.1.tgz#9a19300603dac3fbeadc95a6e7f6285466735e22" - integrity sha512-AE1oD7mFC/rcdKYa3Nebd+zo9HOUq+x5l3ol9EHgVanxffPcDxuQELvDGDUG6jq4w/x8IDmvPHjZ42ZD5iGwCg== +jest-message-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" + integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^27.5.1" + "@types/stack-utils" "^2.0.0" chalk "^4.0.0" - jest-diff "^28.0.1" - jest-get-type "^28.0.0" - pretty-format "^28.0.1" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^27.5.1" + slash "^3.0.0" + stack-utils "^2.0.3" jest-message-util@^28.0.1: version "28.0.1" @@ -10030,12 +10337,12 @@ jest-message-util@^28.0.1: slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^28.0.1: - version "28.0.1" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-28.0.1.tgz#74d1e303e0825a83c54dceaf0f5095100667eeaa" - integrity sha512-pEi1eywUvu7Ko8T5QX6l4X4694cd9NqzyeFFnH7QYDEm4INKxNbgBKLnaNmp025SlH9WHHDkHTeY4zRHPicMHw== +jest-mock@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" + integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== dependencies: - "@jest/types" "^28.0.1" + "@jest/types" "^27.5.1" "@types/node" "*" jest-pnp-resolver@^1.2.2: @@ -10058,25 +10365,27 @@ jest-regex-util@^28.0.0: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-28.0.0.tgz#b8d0bf9761328ae21900ab3f3b0ce8c4d392a73a" integrity sha512-VqrjkteNiucN3ctI/AtBzO7iitfk5YGArPwU2cJ3WyT5Z6kGFHw/HQp0fSTkOUHdwVdJkFzbI5nh0yC82f9Kfg== -jest-resolve-dependencies@^28.0.1: - version "28.0.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-28.0.1.tgz#4448647423f16d7e27438d0704b091858741838e" - integrity sha512-ypEOCjf1OoDOmfotDWeMuMxOgT1WipFmFfS2pHnM4WMNaHBPpQtTRYSRyJN3tqSt4g1+1iP4Ldx2UgLyr3qZWQ== +jest-resolve-dependencies@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" + integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== dependencies: - jest-regex-util "^28.0.0" - jest-snapshot "^28.0.1" + "@jest/types" "^27.5.1" + jest-regex-util "^27.5.1" + jest-snapshot "^27.5.1" -jest-resolve@^28.0.1: - version "28.0.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-28.0.1.tgz#8d51581b52028df3d10746605e13b4a46ba7a37d" - integrity sha512-nQahkVO8flCRsXtlq3JZb+pElJ+9s2L9TQ0xs6x1DLXgZ3FvB3XRfQGnsqtxyMKEAbbEfypGQv1rUVpIrWfssg== +jest-resolve@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" + integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== dependencies: + "@jest/types" "^27.5.1" chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^28.0.1" + jest-haste-map "^27.5.1" jest-pnp-resolver "^1.2.2" - jest-util "^28.0.1" - jest-validate "^28.0.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" resolve "^1.20.0" resolve.exports "^1.1.0" slash "^3.0.0" @@ -10091,58 +10400,58 @@ jest-runner-eslint@1.0.0: create-jest-runner "^0.6.0" dot-prop "^5.3.0" -jest-runner@^28.0.1: - version "28.0.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-28.0.1.tgz#006e2b483e67a7bbba46d82bdcb1e84d9d9ec6b4" - integrity sha512-aVRI4Ngaa9hxDg60tAm4ebqJcaI2vUyR04TuNSArI6MZh8Rfio4mP0tjqVI28TzK8RKH3JMg3ARf66nlAwOl7g== +jest-runner@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" + integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== dependencies: - "@jest/console" "^28.0.1" - "@jest/environment" "^28.0.1" - "@jest/test-result" "^28.0.1" - "@jest/transform" "^28.0.1" - "@jest/types" "^28.0.1" + "@jest/console" "^27.5.1" + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" - emittery "^0.10.2" + emittery "^0.8.1" graceful-fs "^4.2.9" - jest-docblock "^28.0.0" - jest-environment-node "^28.0.1" - jest-haste-map "^28.0.1" - jest-leak-detector "^28.0.1" - jest-message-util "^28.0.1" - jest-resolve "^28.0.1" - jest-runtime "^28.0.1" - jest-util "^28.0.1" - jest-watcher "^28.0.1" - jest-worker "^28.0.1" - source-map-support "0.5.13" + jest-docblock "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-haste-map "^27.5.1" + jest-leak-detector "^27.5.1" + jest-message-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runtime "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + source-map-support "^0.5.6" throat "^6.0.1" -jest-runtime@^28.0.1: - version "28.0.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-28.0.1.tgz#2b33b86c26a14bcba9d3be0ded50010e559ba2be" - integrity sha512-bC22PNBaMK/tX6rMIUf7Usn9V1DallrRyA5QzTqRjz0E2E1UZMUZzKWzhbV6opCI1QSgr5srn0qNUl0MpgWm1g== - dependencies: - "@jest/environment" "^28.0.1" - "@jest/fake-timers" "^28.0.1" - "@jest/globals" "^28.0.1" - "@jest/source-map" "^28.0.0" - "@jest/test-result" "^28.0.1" - "@jest/transform" "^28.0.1" - "@jest/types" "^28.0.1" +jest-runtime@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" + integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/globals" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" execa "^5.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^28.0.1" - jest-message-util "^28.0.1" - jest-mock "^28.0.1" - jest-regex-util "^28.0.0" - jest-resolve "^28.0.1" - jest-snapshot "^28.0.1" - jest-util "^28.0.1" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" slash "^3.0.0" strip-bom "^4.0.0" @@ -10154,34 +10463,33 @@ jest-serializer@^27.5.1: "@types/node" "*" graceful-fs "^4.2.9" -jest-snapshot@^28.0.1: - version "28.0.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-28.0.1.tgz#864d5445323c3a8c4124941394825c7f3b1874b0" - integrity sha512-xaNY3ZZtOBYIpYSAqLpClZJs66wWVpKgsQiFvu8xxjjQBRmwYwu2CAmdaiL5wmd9KxrGX+viLm2vI964hIiIcw== +jest-snapshot@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" + integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== dependencies: - "@babel/core" "^7.11.6" + "@babel/core" "^7.7.2" "@babel/generator" "^7.7.2" "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" - "@babel/types" "^7.3.3" - "@jest/expect-utils" "^28.0.1" - "@jest/transform" "^28.0.1" - "@jest/types" "^28.0.1" - "@types/babel__traverse" "^7.0.6" + "@babel/types" "^7.0.0" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/babel__traverse" "^7.0.4" "@types/prettier" "^2.1.5" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^28.0.1" + expect "^27.5.1" graceful-fs "^4.2.9" - jest-diff "^28.0.1" - jest-get-type "^28.0.0" - jest-haste-map "^28.0.1" - jest-matcher-utils "^28.0.1" - jest-message-util "^28.0.1" - jest-util "^28.0.1" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + jest-haste-map "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-util "^27.5.1" natural-compare "^1.4.0" - pretty-format "^28.0.1" - semver "^7.3.5" + pretty-format "^27.5.1" + semver "^7.3.2" jest-styled-components@7.0.8: version "7.0.8" @@ -10228,17 +10536,17 @@ jest-util@^28.0.1: graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^28.0.1: - version "28.0.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-28.0.1.tgz#7f360030a2c8eeb91b62de92ab00829119a0ad73" - integrity sha512-1mWGDluyjCSGc5u/gw0JKo6SlVfALiho5bLTfqmStOsdy3k69k7/dp18dq49WctHwQ9C+i4SkqpbQG7l63nxiw== +jest-validate@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" + integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== dependencies: - "@jest/types" "^28.0.1" + "@jest/types" "^27.5.1" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^28.0.0" + jest-get-type "^27.5.1" leven "^3.1.0" - pretty-format "^28.0.1" + pretty-format "^27.5.1" jest-watch-typeahead@1.1.0: version "1.1.0" @@ -10253,7 +10561,20 @@ jest-watch-typeahead@1.1.0: string-length "^5.0.1" strip-ansi "^7.0.1" -jest-watcher@^28.0.0, jest-watcher@^28.0.1: +jest-watcher@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" + integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== + dependencies: + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^27.5.1" + string-length "^4.0.1" + +jest-watcher@^28.0.0: version "28.0.1" resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-28.0.1.tgz#1460553913120ddfe3045fda7e80144819cc576e" integrity sha512-tKyjsQal10vBomcyn79ZTutv0N0/dSfYJ+WRFJ3nlaMejiDlLKjMGQ/QrcwcXIXMXQyt0tJG1ycmqLbJg5AK6A== @@ -10284,23 +10605,14 @@ jest-worker@^27.4.5, jest-worker@^27.5.1: merge-stream "^2.0.0" supports-color "^8.0.0" -jest-worker@^28.0.1: - version "28.0.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.0.1.tgz#7abc005335a5937e6a4f8d24c980c7630a849012" - integrity sha512-Z3j1jfZwtt2ruKwU391a4/kKdYEId7Vy9+6Jeeq5Xl0glJDnOAvO5ixNmgMokMmbpet41jc4MpUx71ciyeTB/A== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest@28.0.1: - version "28.0.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-28.0.1.tgz#064ab082ba3af4c09fc0b227c14b17858083eda7" - integrity sha512-rqP6qSiZ00LUpajUBJIBKjCSE2tOy4x0Y/HI4EJntg51tND02VEiKjKkzgebFyMsFs85H+HGxLgezwOwa1bfwA== +jest@27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" + integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== dependencies: - "@jest/core" "^28.0.1" + "@jest/core" "^27.5.1" import-local "^3.0.2" - jest-cli "^28.0.1" + jest-cli "^27.5.1" js-base64@^2.1.9: version "2.6.4" @@ -10337,6 +10649,39 @@ jschardet@3.0.0: resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-3.0.0.tgz#898d2332e45ebabbdb6bf2feece9feea9a99e882" integrity sha512-lJH6tJ77V8Nzd5QWRkFYCLc13a3vADkh3r/Fi8HupZGWk2OVVDfnZP8V/VgQgZ+lzW0kG2UGb5hFgt3V3ndotQ== +jsdom@^16.6.0: + version "16.7.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" + integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== + dependencies: + abab "^2.0.5" + acorn "^8.2.4" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.3.0" + data-urls "^2.0.0" + decimal.js "^10.2.1" + domexception "^2.0.1" + escodegen "^2.0.0" + form-data "^3.0.0" + html-encoding-sniffer "^2.0.1" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.0" + parse5 "6.0.1" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.5.0" + ws "^7.4.6" + xml-name-validator "^3.0.0" + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -10454,6 +10799,11 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + jsonc-parser@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.0.0.tgz#abdd785701c7e7eaca8a9ec8cf070ca51a745a22" @@ -10839,7 +11189,7 @@ lodash.uniqueid@^4.0.1: resolved "https://registry.yarnpkg.com/lodash.uniqueid/-/lodash.uniqueid-4.0.1.tgz#3268f26a7c88e4f4b1758d679271814e31fa5b26" integrity sha1-MmjyanyI5PSxdY1nknGBTjH6WyY= -lodash@4.17.21, lodash@^4.1.0, lodash@^4.11.2, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4: +lodash@4.17.21, lodash@^4.1.0, lodash@^4.11.2, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -10898,6 +11248,13 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -11703,6 +12060,11 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== + node-releases@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.3.tgz#225ee7488e4a5e636da8da52854844f9d716ca96" @@ -11856,6 +12218,11 @@ numbro@2.3.6: dependencies: bignumber.js "^8.1.1" +nwsapi@^2.2.0: + version "2.2.7" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" + integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== + object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -12231,7 +12598,7 @@ parse5-htmlparser2-tree-adapter@^6.0.1: dependencies: parse5 "^6.0.1" -parse5@^6.0.0, parse5@^6.0.1: +parse5@6.0.1, parse5@^6.0.0, parse5@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== @@ -13079,6 +13446,11 @@ prr@~1.0.1: resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= +psl@^1.1.33: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + pstree.remy@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" @@ -13141,6 +13513,11 @@ query-string@^4.2.3: object-assign "^4.1.0" strict-uri-encode "^1.0.0" +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -14161,6 +14538,11 @@ requireindex@~1.1.0: resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.1.0.tgz#e5404b81557ef75db6e49c5a72004893fe03e162" integrity sha1-5UBLgVV+91225JxacgBIk/4D4WI= +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + reselect@4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.5.tgz#852c361247198da6756d07d9296c2b51eddb79f6" @@ -14346,6 +14728,13 @@ sax@~1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + scheduler@^0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" @@ -14443,6 +14832,11 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semve resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + send@0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" @@ -14677,15 +15071,7 @@ source-map-resolve@^0.6.0: atob "^2.1.2" decode-uri-component "^0.2.0" -source-map-support@0.5.13: - version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-support@^0.5.16, source-map-support@~0.5.12, source-map-support@~0.5.20: +source-map-support@^0.5.16, source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -15449,6 +15835,11 @@ svgo@2.8.0, svgo@^2.5.0: picocolors "^1.0.0" stable "^0.1.8" +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + symlink-or-copy@^1.1.8, symlink-or-copy@^1.2.0, symlink-or-copy@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/symlink-or-copy/-/symlink-or-copy-1.3.1.tgz#9506dd64d8e98fa21dcbf4018d1eab23e77f71fe" @@ -15792,6 +16183,16 @@ touch@^3.1.0: dependencies: nopt "~1.0.10" +tough-cookie@^4.0.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" + integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" + tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" @@ -15799,6 +16200,13 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" +tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== + dependencies: + punycode "^2.1.1" + tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -16196,6 +16604,11 @@ universalify@^0.1.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + universalify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" @@ -16227,6 +16640,14 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + update-notifier@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" @@ -16280,6 +16701,14 @@ url-parse-lax@^3.0.0: dependencies: prepend-http "^2.0.0" +url-parse@^1.5.3: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + use-debounce@7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/use-debounce/-/use-debounce-7.0.1.tgz#380e6191cc13ad29f8e2149a12b5c37cc2891190" @@ -16348,14 +16777,14 @@ v8-compile-cache@^2.0.3, v8-compile-cache@^2.3.0: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== -v8-to-istanbul@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.0.tgz#be0dae58719fc53cb97e5c7ac1d7e6d4f5b19511" - integrity sha512-HcvgY/xaRm7isYmyx+lFKA4uQmfUbN0J4M0nNItvzTvH/iQ9kW5j/t4YSR+Ge323/lrgDAWJoF46tzGQHwBHFw== +v8-to-istanbul@^8.1.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" + integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== dependencies: - "@jridgewell/trace-mapping" "^0.3.7" "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" + source-map "^0.7.3" v8flags@^3.1.1: version "3.2.0" @@ -16497,6 +16926,20 @@ vue-template-compiler@^2.6.11: de-indent "^1.0.2" he "^1.1.0" +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + walk-sync@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/walk-sync/-/walk-sync-2.2.0.tgz#80786b0657fcc8c0e1c0b1a042a09eae2966387a" @@ -16551,6 +16994,16 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + webpack-bundle-analyzer@^3.9.0: version "3.9.0" resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz#f6f94db108fb574e415ad313de41a2707d33ef3c" @@ -16669,11 +17122,23 @@ webpackbar@5.0.2: pretty-time "^1.1.0" std-env "^3.0.1" +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + whatwg-fetch@^0.10.1: version "0.10.1" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-0.10.1.tgz#365125d40b36823feac8ab41b71c4d56e84a531f" integrity sha1-NlEl1As2gj/qyKtBtxxNVuhKUx8= +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -16691,6 +17156,15 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -16808,6 +17282,11 @@ ws@^6.0.0: dependencies: async-limiter "~1.0.0" +ws@^7.4.6: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + xdg-basedir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" @@ -16826,6 +17305,16 @@ xlsx@^0.17.1: wmf "~1.0.1" word "~0.3.0" +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + "xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -16841,6 +17330,11 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" @@ -16891,7 +17385,7 @@ yargs-parser@^21.0.0: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== -yargs@17.4.1, yargs@^17.3.1: +yargs@17.4.1: version "17.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.4.1.tgz#ebe23284207bb75cee7c408c33e722bfb27b5284" integrity sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==