From 21b60c8f6ff69bf114779a767a3ac3355f69a34f Mon Sep 17 00:00:00 2001 From: Sebastian Date: Tue, 26 Oct 2021 12:08:03 -0300 Subject: added core validators, worked on look and feel --- packages/anastasis-core/src/index.ts | 1 + packages/anastasis-core/src/reducer-types.ts | 3 +++ packages/anastasis-core/src/validators.ts | 28 ++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 packages/anastasis-core/src/validators.ts (limited to 'packages/anastasis-core/src') diff --git a/packages/anastasis-core/src/index.ts b/packages/anastasis-core/src/index.ts index b4e911ffb..c9e2bcf36 100644 --- a/packages/anastasis-core/src/index.ts +++ b/packages/anastasis-core/src/index.ts @@ -77,6 +77,7 @@ import { EscrowMethod, RecoveryDocument } from "./recovery-document-types.js"; const { fetch, Request, Response, Headers } = fetchPonyfill({}); export * from "./reducer-types.js"; +export * as validators from './validators.js'; function getContinents(): ContinentInfo[] { const continentSet = new Set(); diff --git a/packages/anastasis-core/src/reducer-types.ts b/packages/anastasis-core/src/reducer-types.ts index 1a443bf9b..2e1154fca 100644 --- a/packages/anastasis-core/src/reducer-types.ts +++ b/packages/anastasis-core/src/reducer-types.ts @@ -93,6 +93,9 @@ export interface UserAttributeSpec { type: string; uuid: string; widget: string; + optional?: boolean; + 'validation-regex': string | undefined; + 'validation-logic': string | undefined; } export interface RecoveryInternalData { diff --git a/packages/anastasis-core/src/validators.ts b/packages/anastasis-core/src/validators.ts new file mode 100644 index 000000000..1c04bfdb3 --- /dev/null +++ b/packages/anastasis-core/src/validators.ts @@ -0,0 +1,28 @@ +function isPrime(num: number): boolean { + for (let i = 2, s = Math.sqrt(num); i <= s; i++) + if (num % i === 0) return false; + return num > 1; +} + +export function AL_NID_check(s: string): boolean { return true } +export function BE_NRN_check(s: string): boolean { return true } +export function CH_AHV_check(s: string): boolean { return true } +export function CZ_BN_check(s: string): boolean { return true } +export function DE_TIN_check(s: string): boolean { return true } +export function DE_SVN_check(s: string): boolean { return true } +export function ES_DNI_check(s: string): boolean { return true } +export function IN_AADHAR_check(s: string): boolean { return true } +export function IT_CF_check(s: string): boolean { + return true +} + +export function XX_SQUARE_check(s: string): boolean { + const n = parseInt(s, 10) + const r = Math.sqrt(n) + return n === r * r; +} +export function XY_PRIME_check(s: string): boolean { + const n = parseInt(s, 10) + return isPrime(n) +} + -- cgit v1.2.3 From 404c8c8a73c53a8f5432db9838326753864b7136 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Tue, 26 Oct 2021 17:33:51 +0200 Subject: reducer: remove property --- packages/anastasis-core/src/reducer-types.ts | 2 -- 1 file changed, 2 deletions(-) (limited to 'packages/anastasis-core/src') diff --git a/packages/anastasis-core/src/reducer-types.ts b/packages/anastasis-core/src/reducer-types.ts index 2e1154fca..d70712709 100644 --- a/packages/anastasis-core/src/reducer-types.ts +++ b/packages/anastasis-core/src/reducer-types.ts @@ -164,8 +164,6 @@ export interface ReducerStateRecovery { }; authentication_providers?: { [url: string]: AuthenticationProviderStatus }; - - recovery_error?: any; } export interface ChallengeFeedback { -- cgit v1.2.3 From 88d142d2098ad87613222e9a0c6df478a78f6528 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Mon, 1 Nov 2021 16:10:49 -0300 Subject: more styling added placeholders for inputs import declaration for png next button now has tooltip providing info about whats missing a lot more of examples for UI testing added qr dependency for totp rendering added email and field input types added all auth method setup screens added modal when there is not auth provider merge continent and country into location section others improvements as well... --- packages/anastasis-core/src/reducer-types.ts | 6 +- packages/anastasis-webui/package.json | 3 +- packages/anastasis-webui/src/assets/empty.png | Bin 0 -> 2785 bytes .../anastasis-webui/src/assets/example/id1.jpg | Bin 0 -> 103558 bytes .../src/assets/icons/auth_method/email.svg | 1 + .../src/assets/icons/auth_method/postal.svg | 1 + .../src/assets/icons/auth_method/question.svg | 1 + .../src/assets/icons/auth_method/sms.svg | 1 + .../src/assets/icons/auth_method/video.svg | 1 + packages/anastasis-webui/src/components/QR.tsx | 35 ++++ .../src/components/fields/DateInput.tsx | 5 +- .../src/components/fields/EmailInput.tsx | 44 +++++ .../src/components/fields/FileInput.tsx | 81 ++++++++ .../src/components/fields/ImageInput.tsx | 81 ++++++++ .../src/components/fields/NumberInput.tsx | 2 + .../src/components/fields/TextInput.tsx | 2 + .../src/components/menu/SideBar.tsx | 5 +- packages/anastasis-webui/src/declaration.d.ts | 4 + .../src/pages/home/AttributeEntryScreen.tsx | 84 +++++---- .../src/pages/home/AuthMethodEmailSetup.tsx | 43 ----- .../src/pages/home/AuthMethodPostSetup.tsx | 69 ------- .../src/pages/home/AuthMethodQuestionSetup.tsx | 47 ----- .../src/pages/home/AuthMethodSmsSetup.tsx | 51 ----- .../home/AuthenticationEditorScreen.stories.tsx | 55 ++++++ .../src/pages/home/AuthenticationEditorScreen.tsx | 199 ++++++++++++++------ .../pages/home/BackupFinishedScreen.stories.tsx | 2 +- .../src/pages/home/BackupFinishedScreen.tsx | 30 +-- .../src/pages/home/ChallengeOverviewScreen.tsx | 3 +- .../src/pages/home/ChallengePayingScreen.tsx | 2 +- .../src/pages/home/ContinentSelectionScreen.tsx | 102 +++++++++- .../src/pages/home/CountrySelectionScreen.tsx | 2 +- .../src/pages/home/PoliciesPayingScreen.tsx | 2 +- .../src/pages/home/RecoveryFinishedScreen.tsx | 4 +- .../pages/home/ReviewPoliciesScreen.stories.tsx | 208 ++++++++++++++++++--- .../src/pages/home/ReviewPoliciesScreen.tsx | 52 +++--- .../src/pages/home/SecretEditorScreen.tsx | 5 + .../src/pages/home/SecretSelectionScreen.tsx | 2 +- .../src/pages/home/SolveScreen.stories.tsx | 12 +- .../anastasis-webui/src/pages/home/SolveScreen.tsx | 26 +-- .../AuthMethodEmailSetup.stories.tsx | 66 +++++++ .../home/authMethodSetup/AuthMethodEmailSetup.tsx | 62 ++++++ .../AuthMethodIbanSetup.stories.tsx | 65 +++++++ .../home/authMethodSetup/AuthMethodIbanSetup.tsx | 68 +++++++ .../AuthMethodPostSetup.stories.tsx | 66 +++++++ .../home/authMethodSetup/AuthMethodPostSetup.tsx | 102 ++++++++++ .../AuthMethodQuestionSetup.stories.tsx | 66 +++++++ .../authMethodSetup/AuthMethodQuestionSetup.tsx | 70 +++++++ .../authMethodSetup/AuthMethodSmsSetup.stories.tsx | 66 +++++++ .../home/authMethodSetup/AuthMethodSmsSetup.tsx | 63 +++++++ .../AuthMethodTotpSetup.stories.tsx | 64 +++++++ .../home/authMethodSetup/AuthMethodTotpSetup.tsx | 47 +++++ .../AuthMethodVideoSetup.stories.tsx | 66 +++++++ .../home/authMethodSetup/AuthMethodVideoSetup.tsx | 56 ++++++ .../src/pages/home/authMethodSetup/index.tsx | 68 +++++++ packages/anastasis-webui/src/pages/home/index.tsx | 23 +-- packages/anastasis-webui/src/scss/main.scss | 8 +- packages/anastasis-webui/src/utils/index.tsx | 8 +- pnpm-lock.yaml | 2 + 58 files changed, 1882 insertions(+), 427 deletions(-) create mode 100644 packages/anastasis-webui/src/assets/empty.png create mode 100644 packages/anastasis-webui/src/assets/example/id1.jpg create mode 100644 packages/anastasis-webui/src/assets/icons/auth_method/email.svg create mode 100644 packages/anastasis-webui/src/assets/icons/auth_method/postal.svg create mode 100644 packages/anastasis-webui/src/assets/icons/auth_method/question.svg create mode 100644 packages/anastasis-webui/src/assets/icons/auth_method/sms.svg create mode 100644 packages/anastasis-webui/src/assets/icons/auth_method/video.svg create mode 100644 packages/anastasis-webui/src/components/QR.tsx create mode 100644 packages/anastasis-webui/src/components/fields/EmailInput.tsx create mode 100644 packages/anastasis-webui/src/components/fields/FileInput.tsx create mode 100644 packages/anastasis-webui/src/components/fields/ImageInput.tsx delete mode 100644 packages/anastasis-webui/src/pages/home/AuthMethodEmailSetup.tsx delete mode 100644 packages/anastasis-webui/src/pages/home/AuthMethodPostSetup.tsx delete mode 100644 packages/anastasis-webui/src/pages/home/AuthMethodQuestionSetup.tsx delete mode 100644 packages/anastasis-webui/src/pages/home/AuthMethodSmsSetup.tsx create mode 100644 packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodEmailSetup.stories.tsx create mode 100644 packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodEmailSetup.tsx create mode 100644 packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodIbanSetup.stories.tsx create mode 100644 packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodIbanSetup.tsx create mode 100644 packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodPostSetup.stories.tsx create mode 100644 packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodPostSetup.tsx create mode 100644 packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodQuestionSetup.stories.tsx create mode 100644 packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodQuestionSetup.tsx create mode 100644 packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodSmsSetup.stories.tsx create mode 100644 packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodSmsSetup.tsx create mode 100644 packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodTotpSetup.stories.tsx create mode 100644 packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodTotpSetup.tsx create mode 100644 packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodVideoSetup.stories.tsx create mode 100644 packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodVideoSetup.tsx create mode 100644 packages/anastasis-webui/src/pages/home/authMethodSetup/index.tsx (limited to 'packages/anastasis-core/src') diff --git a/packages/anastasis-core/src/reducer-types.ts b/packages/anastasis-core/src/reducer-types.ts index d70712709..57f67f0d0 100644 --- a/packages/anastasis-core/src/reducer-types.ts +++ b/packages/anastasis-core/src/reducer-types.ts @@ -47,7 +47,7 @@ export interface ReducerStateBackup { code?: undefined; currencies?: string[]; continents?: ContinentInfo[]; - countries?: any; + countries?: CountryInfo[]; identity_attributes?: { [n: string]: string }; authentication_providers?: { [url: string]: AuthenticationProviderStatus }; authentication_methods?: AuthMethod[]; @@ -129,8 +129,8 @@ export interface ReducerStateRecovery { identity_attributes?: { [n: string]: string }; - continents?: any; - countries?: any; + continents?: ContinentInfo[]; + countries?: CountryInfo[]; selected_continent?: string; selected_country?: string; diff --git a/packages/anastasis-webui/package.json b/packages/anastasis-webui/package.json index 4cdb00243..2f2577a92 100644 --- a/packages/anastasis-webui/package.json +++ b/packages/anastasis-webui/package.json @@ -29,7 +29,8 @@ "jed": "1.1.1", "preact": "^10.3.1", "preact-render-to-string": "^5.1.4", - "preact-router": "^3.2.1" + "preact-router": "^3.2.1", + "qrcode-generator": "^1.4.4" }, "devDependencies": { "@creativebulma/bulma-tooltip": "^1.2.0", diff --git a/packages/anastasis-webui/src/assets/empty.png b/packages/anastasis-webui/src/assets/empty.png new file mode 100644 index 000000000..5120d3138 Binary files /dev/null and b/packages/anastasis-webui/src/assets/empty.png differ diff --git a/packages/anastasis-webui/src/assets/example/id1.jpg b/packages/anastasis-webui/src/assets/example/id1.jpg new file mode 100644 index 000000000..5d022a379 Binary files /dev/null and b/packages/anastasis-webui/src/assets/example/id1.jpg differ diff --git a/packages/anastasis-webui/src/assets/icons/auth_method/email.svg b/packages/anastasis-webui/src/assets/icons/auth_method/email.svg new file mode 100644 index 000000000..3e44b8779 --- /dev/null +++ b/packages/anastasis-webui/src/assets/icons/auth_method/email.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/anastasis-webui/src/assets/icons/auth_method/postal.svg b/packages/anastasis-webui/src/assets/icons/auth_method/postal.svg new file mode 100644 index 000000000..3787b8350 --- /dev/null +++ b/packages/anastasis-webui/src/assets/icons/auth_method/postal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/anastasis-webui/src/assets/icons/auth_method/question.svg b/packages/anastasis-webui/src/assets/icons/auth_method/question.svg new file mode 100644 index 000000000..a346556b2 --- /dev/null +++ b/packages/anastasis-webui/src/assets/icons/auth_method/question.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/anastasis-webui/src/assets/icons/auth_method/sms.svg b/packages/anastasis-webui/src/assets/icons/auth_method/sms.svg new file mode 100644 index 000000000..ed15679bf --- /dev/null +++ b/packages/anastasis-webui/src/assets/icons/auth_method/sms.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/anastasis-webui/src/assets/icons/auth_method/video.svg b/packages/anastasis-webui/src/assets/icons/auth_method/video.svg new file mode 100644 index 000000000..69de5e0b4 --- /dev/null +++ b/packages/anastasis-webui/src/assets/icons/auth_method/video.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/anastasis-webui/src/components/QR.tsx b/packages/anastasis-webui/src/components/QR.tsx new file mode 100644 index 000000000..48f1a7c12 --- /dev/null +++ b/packages/anastasis-webui/src/components/QR.tsx @@ -0,0 +1,35 @@ +/* + This file is part of GNU Taler + (C) 2021 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see + */ + +import { h, VNode } from "preact"; +import { useEffect, useRef } from "preact/hooks"; +import qrcode from "qrcode-generator"; + +export function QR({ text }: { text: string }): VNode { + const divRef = useRef(null); + useEffect(() => { + const qr = qrcode(0, 'L'); + qr.addData(text); + qr.make(); + if (divRef.current) divRef.current.innerHTML = qr.createSvgTag({ + scalable: true, + }); + }); + + return
+
+
; +} diff --git a/packages/anastasis-webui/src/components/fields/DateInput.tsx b/packages/anastasis-webui/src/components/fields/DateInput.tsx index e1c354f7b..69a05fcf3 100644 --- a/packages/anastasis-webui/src/components/fields/DateInput.tsx +++ b/packages/anastasis-webui/src/components/fields/DateInput.tsx @@ -25,7 +25,7 @@ export function DateInput(props: DateInputProps): VNode { setOpened2(v) } - const value = props.bind[0]; + const value = props.bind[0] || ""; const [dirty, setDirty] = useState(false) const showError = dirty && props.error @@ -40,7 +40,8 @@ export function DateInput(props: DateInputProps): VNode { { setOpened(true) }} + readonly + onFocus={() => { setOpened(true) } } value={value} ref={inputRef} /> diff --git a/packages/anastasis-webui/src/components/fields/EmailInput.tsx b/packages/anastasis-webui/src/components/fields/EmailInput.tsx new file mode 100644 index 000000000..e0fca0f46 --- /dev/null +++ b/packages/anastasis-webui/src/components/fields/EmailInput.tsx @@ -0,0 +1,44 @@ +import { h, VNode } from "preact"; +import { useLayoutEffect, useRef, useState } from "preact/hooks"; + +export interface TextInputProps { + label: string; + grabFocus?: boolean; + error?: string; + placeholder?: string; + tooltip?: string; + bind: [string, (x: string) => void]; +} + +export function EmailInput(props: TextInputProps): VNode { + const inputRef = useRef(null); + useLayoutEffect(() => { + if (props.grabFocus) { + inputRef.current?.focus(); + } + }, [props.grabFocus]); + const value = props.bind[0]; + const [dirty, setDirty] = useState(false) + const showError = dirty && props.error + return (
+ +
+ {setDirty(true); props.bind[1]((e.target as HTMLInputElement).value)}} + ref={inputRef} + style={{ display: "block" }} /> +
+ {showError &&

{props.error}

} +
+ ); +} diff --git a/packages/anastasis-webui/src/components/fields/FileInput.tsx b/packages/anastasis-webui/src/components/fields/FileInput.tsx new file mode 100644 index 000000000..8b144ea43 --- /dev/null +++ b/packages/anastasis-webui/src/components/fields/FileInput.tsx @@ -0,0 +1,81 @@ +/* + This file is part of GNU Taler + (C) 2021 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ +import { h, VNode } from "preact"; +import { useLayoutEffect, useRef, useState } from "preact/hooks"; +import { TextInputProps } from "./TextInput"; + +const MAX_IMAGE_UPLOAD_SIZE = 1024 * 1024 + +export function FileInput(props: TextInputProps): VNode { + const inputRef = useRef(null); + useLayoutEffect(() => { + if (props.grabFocus) { + inputRef.current?.focus(); + } + }, [props.grabFocus]); + + const value = props.bind[0]; + // const [dirty, setDirty] = useState(false) + const image = useRef(null) + const [sizeError, setSizeError] = useState(false) + function onChange(v: string): void { + // setDirty(true); + props.bind[1](v); + } + return
+ +
+ { + const f: FileList | null = e.currentTarget.files + if (!f || f.length != 1) { + return onChange("") + } + if (f[0].size > MAX_IMAGE_UPLOAD_SIZE) { + setSizeError(true) + return onChange("") + } + setSizeError(false) + return f[0].arrayBuffer().then(b => { + const b64 = btoa( + new Uint8Array(b) + .reduce((data, byte) => data + String.fromCharCode(byte), '') + ) + return onChange(`data:${f[0].type};base64,${b64}` as any) + }) + }} /> + {props.error &&

{props.error}

} + {sizeError &&

+ File should be smaller than 1 MB +

} +
+
+} + diff --git a/packages/anastasis-webui/src/components/fields/ImageInput.tsx b/packages/anastasis-webui/src/components/fields/ImageInput.tsx new file mode 100644 index 000000000..d5bf643d4 --- /dev/null +++ b/packages/anastasis-webui/src/components/fields/ImageInput.tsx @@ -0,0 +1,81 @@ +/* + This file is part of GNU Taler + (C) 2021 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ +import { h, VNode } from "preact"; +import { useLayoutEffect, useRef, useState } from "preact/hooks"; +import emptyImage from "../../assets/empty.png"; +import { TextInputProps } from "./TextInput"; + +const MAX_IMAGE_UPLOAD_SIZE = 1024 * 1024 + +export function ImageInput(props: TextInputProps): VNode { + const inputRef = useRef(null); + useLayoutEffect(() => { + if (props.grabFocus) { + inputRef.current?.focus(); + } + }, [props.grabFocus]); + + const value = props.bind[0]; + // const [dirty, setDirty] = useState(false) + const image = useRef(null) + const [sizeError, setSizeError] = useState(false) + function onChange(v: string): void { + // setDirty(true); + props.bind[1](v); + } + return
+ +
+ image.current?.click()} /> + { + const f: FileList | null = e.currentTarget.files + if (!f || f.length != 1) { + return onChange(emptyImage) + } + if (f[0].size > MAX_IMAGE_UPLOAD_SIZE) { + setSizeError(true) + return onChange(emptyImage) + } + setSizeError(false) + return f[0].arrayBuffer().then(b => { + const b64 = btoa( + new Uint8Array(b) + .reduce((data, byte) => data + String.fromCharCode(byte), '') + ) + return onChange(`data:${f[0].type};base64,${b64}` as any) + }) + }} /> + {props.error &&

{props.error}

} + {sizeError &&

+ Image should be smaller than 1 MB +

} +
+
+} + diff --git a/packages/anastasis-webui/src/components/fields/NumberInput.tsx b/packages/anastasis-webui/src/components/fields/NumberInput.tsx index af9bbe66b..2b6cdcd2c 100644 --- a/packages/anastasis-webui/src/components/fields/NumberInput.tsx +++ b/packages/anastasis-webui/src/components/fields/NumberInput.tsx @@ -5,6 +5,7 @@ export interface TextInputProps { label: string; grabFocus?: boolean; error?: string; + placeholder?: string; tooltip?: string; bind: [string, (x: string) => void]; } @@ -30,6 +31,7 @@ export function NumberInput(props: TextInputProps): VNode { {setDirty(true); props.bind[1]((e.target as HTMLInputElement).value)}} ref={inputRef} diff --git a/packages/anastasis-webui/src/components/fields/TextInput.tsx b/packages/anastasis-webui/src/components/fields/TextInput.tsx index fa6fd9792..4bb785cd3 100644 --- a/packages/anastasis-webui/src/components/fields/TextInput.tsx +++ b/packages/anastasis-webui/src/components/fields/TextInput.tsx @@ -5,6 +5,7 @@ export interface TextInputProps { label: string; grabFocus?: boolean; error?: string; + placeholder?: string; tooltip?: string; bind: [string, (x: string) => void]; } @@ -29,6 +30,7 @@ export function TextInput(props: TextInputProps): VNode {
{setDirty(true); props.bind[1]((e.target as HTMLInputElement).value)}} ref={inputRef} diff --git a/packages/anastasis-webui/src/components/menu/SideBar.tsx b/packages/anastasis-webui/src/components/menu/SideBar.tsx index 87e771009..35720e0f1 100644 --- a/packages/anastasis-webui/src/components/menu/SideBar.tsx +++ b/packages/anastasis-webui/src/components/menu/SideBar.tsx @@ -33,6 +33,7 @@ interface Props { export function Sidebar({ mobile }: Props): VNode { // const config = useConfigContext(); const config = { version: 'none' } + // FIXME: add replacement for __VERSION__ with the current version const process = { env: { __VERSION__: '0.0.0' } } const reducer = useAnastasisContext()! @@ -105,12 +106,12 @@ export function Sidebar({ mobile }: Props): VNode { Backup completed
-
  • + {/*
  • Truth Paying
    -
  • + */} : (reducer.currentReducerState && reducer.currentReducerState?.recovery_state &&
  • diff --git a/packages/anastasis-webui/src/declaration.d.ts b/packages/anastasis-webui/src/declaration.d.ts index b32fb70fc..edd3a07a3 100644 --- a/packages/anastasis-webui/src/declaration.d.ts +++ b/packages/anastasis-webui/src/declaration.d.ts @@ -10,6 +10,10 @@ declare module '*.jpeg' { const content: any; export default content; } +declare module '*.png' { + const content: any; + export default content; +} declare module 'jed' { const x: any; export = x; diff --git a/packages/anastasis-webui/src/pages/home/AttributeEntryScreen.tsx b/packages/anastasis-webui/src/pages/home/AttributeEntryScreen.tsx index f74dcefba..2c7f54c5b 100644 --- a/packages/anastasis-webui/src/pages/home/AttributeEntryScreen.tsx +++ b/packages/anastasis-webui/src/pages/home/AttributeEntryScreen.tsx @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/camelcase */ import { UserAttributeSpec, validators } from "anastasis-core"; -import { h, VNode } from "preact"; +import { Fragment, h, VNode } from "preact"; import { useState } from "preact/hooks"; import { useAnastasisContext } from "../../context/anastasis"; import { AnastasisClientFrame, withProcessLabel } from "./index"; @@ -20,53 +20,38 @@ export function AttributeEntryScreen(): VNode { if (!reducer.currentReducerState || !("required_attributes" in reducer.currentReducerState)) { return
    invalid state
    } + const reqAttr = reducer.currentReducerState.required_attributes || [] + let hasErrors = false; + const fieldList: VNode[] = reqAttr.map((spec, i: number) => { + const value = attrs[spec.name] + const error = checkIfValid(value, spec) + hasErrors = hasErrors || error !== undefined + return ( + setAttrs({ ...attrs, [spec.name]: v })} + spec={spec} + errorMessage={error} + value={value} /> + ); + }) return ( reducer.transition("enter_user_attributes", { identity_attributes: attrs, })} >
    - - {reducer.currentReducerState.required_attributes?.map((x, i: number) => { - const value = attrs[x.name] - function checkIfValid(): string | undefined { - const pattern = x['validation-regex'] - if (pattern) { - const re = new RegExp(pattern) - if (!re.test(value)) return 'The value is invalid' - } - const logic = x['validation-logic'] - if (logic) { - const func = (validators as any)[logic]; - if (func && typeof func === 'function' && !func(value)) return 'Please check the value' - } - const optional = x.optional - console.log('optiona', optional) - if (!optional && !value) { - return 'This value is required' - } - return undefined - } - - return ( - setAttrs({ ...attrs, [x.name]: v })} - spec={x} - isValid={checkIfValid} - value={value} /> - ); - })} - + {fieldList}
    -

    This personal information will help to locate your secret in the first place

    +

    This personal information will help to locate your secret.

    This stay private

    The information you have entered here:

    @@ -92,14 +77,13 @@ interface AttributeEntryFieldProps { value: string; setValue: (newValue: string) => void; spec: UserAttributeSpec; - isValid: () => string | undefined; + errorMessage: string | undefined; } const possibleBirthdayYear: Array = [] -for (let i = 0; i < 100; i++ ) { +for (let i = 0; i < 100; i++) { possibleBirthdayYear.push(2020 - i) } function AttributeEntryField(props: AttributeEntryFieldProps): VNode { - const errorMessage = props.isValid() return (
    @@ -108,14 +92,14 @@ function AttributeEntryField(props: AttributeEntryFieldProps): VNode { grabFocus={props.isFirst} label={props.spec.label} years={possibleBirthdayYear} - error={errorMessage} + error={props.errorMessage} bind={[props.value, props.setValue]} />} {props.spec.type === 'number' && } @@ -123,7 +107,7 @@ function AttributeEntryField(props: AttributeEntryFieldProps): VNode { } @@ -136,3 +120,21 @@ function AttributeEntryField(props: AttributeEntryFieldProps): VNode {
    ); } + +function checkIfValid(value: string, spec: UserAttributeSpec): string | undefined { + const pattern = spec['validation-regex'] + if (pattern) { + const re = new RegExp(pattern) + if (!re.test(value)) return 'The value is invalid' + } + const logic = spec['validation-logic'] + if (logic) { + const func = (validators as any)[logic]; + if (func && typeof func === 'function' && !func(value)) return 'Please check the value' + } + const optional = spec.optional + if (!optional && !value) { + return 'This value is required' + } + return undefined +} diff --git a/packages/anastasis-webui/src/pages/home/AuthMethodEmailSetup.tsx b/packages/anastasis-webui/src/pages/home/AuthMethodEmailSetup.tsx deleted file mode 100644 index c3783ea6c..000000000 --- a/packages/anastasis-webui/src/pages/home/AuthMethodEmailSetup.tsx +++ /dev/null @@ -1,43 +0,0 @@ -/* eslint-disable @typescript-eslint/camelcase */ -import { - encodeCrock, - stringToBytes -} from "@gnu-taler/taler-util"; -import { h, VNode } from "preact"; -import { useState } from "preact/hooks"; -import { AuthMethodSetupProps } from "./AuthenticationEditorScreen"; -import { AnastasisClientFrame } from "./index"; -import { TextInput } from "../../components/fields/TextInput"; - -export function AuthMethodEmailSetup(props: AuthMethodSetupProps): VNode { - const [email, setEmail] = useState(""); - return ( - -

    - For email authentication, you need to provide an email address. When - recovering your secret, you will need to enter the code you receive by - email. -

    -
    - -
    -
    - - -
    -
    - ); -} diff --git a/packages/anastasis-webui/src/pages/home/AuthMethodPostSetup.tsx b/packages/anastasis-webui/src/pages/home/AuthMethodPostSetup.tsx deleted file mode 100644 index c4ddeff91..000000000 --- a/packages/anastasis-webui/src/pages/home/AuthMethodPostSetup.tsx +++ /dev/null @@ -1,69 +0,0 @@ -/* eslint-disable @typescript-eslint/camelcase */ -import { - canonicalJson, encodeCrock, - stringToBytes -} from "@gnu-taler/taler-util"; -import { h, VNode } from "preact"; -import { useState } from "preact/hooks"; -import { AuthMethodSetupProps } from "./AuthenticationEditorScreen"; -import { TextInput } from "../../components/fields/TextInput"; - -export function AuthMethodPostSetup(props: AuthMethodSetupProps): VNode { - const [fullName, setFullName] = useState(""); - const [street, setStreet] = useState(""); - const [city, setCity] = useState(""); - const [postcode, setPostcode] = useState(""); - const [country, setCountry] = useState(""); - - const addPostAuth = () => { - const challengeJson = { - full_name: fullName, - street, - city, - postcode, - country, - }; - props.addAuthMethod({ - authentication_method: { - type: "email", - instructions: `Letter to address in postal code ${postcode}`, - challenge: encodeCrock(stringToBytes(canonicalJson(challengeJson))), - }, - }); - }; - - return ( -
    -

    Add {props.method} authentication

    -
    -

    - For postal letter authentication, you need to provide a postal - address. When recovering your secret, you will be asked to enter a - code that you will receive in a letter to that address. -

    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - - -
    -
    -
    - ); -} diff --git a/packages/anastasis-webui/src/pages/home/AuthMethodQuestionSetup.tsx b/packages/anastasis-webui/src/pages/home/AuthMethodQuestionSetup.tsx deleted file mode 100644 index f1bab94ab..000000000 --- a/packages/anastasis-webui/src/pages/home/AuthMethodQuestionSetup.tsx +++ /dev/null @@ -1,47 +0,0 @@ -/* eslint-disable @typescript-eslint/camelcase */ -import { - encodeCrock, - stringToBytes -} from "@gnu-taler/taler-util"; -import { h, VNode } from "preact"; -import { useState } from "preact/hooks"; -import { AuthMethodSetupProps } from "./AuthenticationEditorScreen"; -import { AnastasisClientFrame } from "./index"; -import { TextInput } from "../../components/fields/TextInput"; - -export function AuthMethodQuestionSetup(props: AuthMethodSetupProps): VNode { - const [questionText, setQuestionText] = useState(""); - const [answerText, setAnswerText] = useState(""); - const addQuestionAuth = (): void => props.addAuthMethod({ - authentication_method: { - type: "question", - instructions: questionText, - challenge: encodeCrock(stringToBytes(answerText)), - }, - }); - return ( - -
    -

    - For security question authentication, you need to provide a question - and its answer. When recovering your secret, you will be shown the - question and you will need to type the answer exactly as you typed it - here. -

    -
    - -
    -
    - -
    -
    - - -
    -
    -
    - ); -} diff --git a/packages/anastasis-webui/src/pages/home/AuthMethodSmsSetup.tsx b/packages/anastasis-webui/src/pages/home/AuthMethodSmsSetup.tsx deleted file mode 100644 index 6f4797275..000000000 --- a/packages/anastasis-webui/src/pages/home/AuthMethodSmsSetup.tsx +++ /dev/null @@ -1,51 +0,0 @@ -/* eslint-disable @typescript-eslint/camelcase */ -import { - encodeCrock, - stringToBytes -} from "@gnu-taler/taler-util"; -import { h, VNode } from "preact"; -import { useState, useRef, useLayoutEffect } from "preact/hooks"; -import { AuthMethodSetupProps } from "./AuthenticationEditorScreen"; -import { AnastasisClientFrame } from "./index"; - -export function AuthMethodSmsSetup(props: AuthMethodSetupProps): VNode { - const [mobileNumber, setMobileNumber] = useState(""); - const addSmsAuth = (): void => { - props.addAuthMethod({ - authentication_method: { - type: "sms", - instructions: `SMS to ${mobileNumber}`, - challenge: encodeCrock(stringToBytes(mobileNumber)), - }, - }); - }; - const inputRef = useRef(null); - useLayoutEffect(() => { - inputRef.current?.focus(); - }, []); - return ( - -
    -

    - For SMS authentication, you need to provide a mobile number. When - recovering your secret, you will be asked to enter the code you - receive via SMS. -

    - -
    - - -
    -
    -
    - ); -} diff --git a/packages/anastasis-webui/src/pages/home/AuthenticationEditorScreen.stories.tsx b/packages/anastasis-webui/src/pages/home/AuthenticationEditorScreen.stories.tsx index 8f86831a9..5077c3eb0 100644 --- a/packages/anastasis-webui/src/pages/home/AuthenticationEditorScreen.stories.tsx +++ b/packages/anastasis-webui/src/pages/home/AuthenticationEditorScreen.stories.tsx @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/camelcase */ /* This file is part of GNU Taler (C) 2021 Taler Systems S.A. @@ -19,6 +20,7 @@ * @author Sebastian Javier Marchano (sebasjm) */ +import { ReducerState } from 'anastasis-core'; import { createExample, reducerStatesExample } from '../../utils'; import { AuthenticationEditorScreen as TestedComponent } from './AuthenticationEditorScreen'; @@ -36,3 +38,56 @@ export default { }; export const Example = createExample(TestedComponent, reducerStatesExample.authEditing); +export const OneAuthMethodConfigured = createExample(TestedComponent, { + ...reducerStatesExample.authEditing, + authentication_methods: [{ + type: 'question', + instructions: 'what time is it?', + challenge: 'asd', + }] +} as ReducerState); + + +export const SomeMoreAuthMethodConfigured = createExample(TestedComponent, { + ...reducerStatesExample.authEditing, + authentication_methods: [{ + type: 'question', + instructions: 'what time is it?', + challenge: 'asd', + },{ + type: 'question', + instructions: 'what time is it?', + challenge: 'qwe', + },{ + type: 'sms', + instructions: 'what time is it?', + challenge: 'asd', + },{ + type: 'email', + instructions: 'what time is it?', + challenge: 'asd', + },{ + type: 'email', + instructions: 'what time is it?', + challenge: 'asd', + },{ + type: 'email', + instructions: 'what time is it?', + challenge: 'asd', + },{ + type: 'email', + instructions: 'what time is it?', + challenge: 'asd', + }] +} as ReducerState); + +export const NoAuthMethodProvided = createExample(TestedComponent, { + ...reducerStatesExample.authEditing, + authentication_providers: {}, + authentication_methods: [] +} as ReducerState); + + // type: string; + // instructions: string; + // challenge: string; + // mime_type?: string; diff --git a/packages/anastasis-webui/src/pages/home/AuthenticationEditorScreen.tsx b/packages/anastasis-webui/src/pages/home/AuthenticationEditorScreen.tsx index e9ffccbac..f4d2aee58 100644 --- a/packages/anastasis-webui/src/pages/home/AuthenticationEditorScreen.tsx +++ b/packages/anastasis-webui/src/pages/home/AuthenticationEditorScreen.tsx @@ -1,19 +1,19 @@ /* eslint-disable @typescript-eslint/camelcase */ -import { AuthMethod, ReducerStateBackup } from "anastasis-core"; -import { h, VNode } from "preact"; +import { AuthMethod } from "anastasis-core"; +import { ComponentChildren, h, VNode } from "preact"; import { useState } from "preact/hooks"; import { useAnastasisContext } from "../../context/anastasis"; -import { AnastasisReducerApi } from "../../hooks/use-anastasis-reducer"; -import { AuthMethodEmailSetup } from "./AuthMethodEmailSetup"; -import { AuthMethodPostSetup } from "./AuthMethodPostSetup"; -import { AuthMethodQuestionSetup } from "./AuthMethodQuestionSetup"; -import { AuthMethodSmsSetup } from "./AuthMethodSmsSetup"; +import { authMethods, KnownAuthMethods } from "./authMethodSetup"; import { AnastasisClientFrame } from "./index"; + + +const getKeys = Object.keys as (obj: T) => Array + export function AuthenticationEditorScreen(): VNode { - const [selectedMethod, setSelectedMethod] = useState( - undefined - ); + const [noProvidersAck, setNoProvidersAck] = useState(false) + const [selectedMethod, setSelectedMethod] = useState(undefined); + const reducer = useAnastasisContext() if (!reducer) { return
    no reducer in context
    @@ -21,7 +21,29 @@ export function AuthenticationEditorScreen(): VNode { if (!reducer.currentReducerState || reducer.currentReducerState.backup_state === undefined) { return
    invalid state
    } + const configuredAuthMethods: AuthMethod[] = reducer.currentReducerState.authentication_methods ?? []; + const haveMethodsConfigured = configuredAuthMethods.length > 0; + + function removeByIndex(index: number): void { + if (reducer) reducer.transition("delete_authentication", { + authentication_method: index, + }) + } + + const camByType: { [s: string]: AuthMethodWithRemove[] } = {} + for (let index = 0; index < configuredAuthMethods.length; index++) { + const cam = { + ...configuredAuthMethods[index], + remove: () => removeByIndex(index) + } + const prevValue = camByType[cam.type] || [] + prevValue.push(cam) + camByType[cam.type] = prevValue; + } + + const providers = reducer.currentReducerState.authentication_providers!; + const authAvailableSet = new Set(); for (const provKey of Object.keys(providers)) { const p = providers[provKey]; @@ -31,79 +53,106 @@ export function AuthenticationEditorScreen(): VNode { } } } + if (selectedMethod) { const cancel = (): void => setSelectedMethod(undefined); const addMethod = (args: any): void => { reducer.transition("add_authentication", args); setSelectedMethod(undefined); }; - const methodMap: Record< - string, (props: AuthMethodSetupProps) => h.JSX.Element - > = { - sms: AuthMethodSmsSetup, - question: AuthMethodQuestionSetup, - email: AuthMethodEmailSetup, - post: AuthMethodPostSetup, - }; - const AuthSetup = methodMap[selectedMethod] ?? AuthMethodNotImplemented; + + const AuthSetup = authMethods[selectedMethod].screen ?? AuthMethodNotImplemented; return ( ); } - function MethodButton(props: { method: string; label: string }): VNode { + function MethodButton(props: { method: KnownAuthMethods }): VNode { return ( - +
    + +
    ); } - const configuredAuthMethods: AuthMethod[] = reducer.currentReducerState.authentication_methods ?? []; - const haveMethodsConfigured = configuredAuthMethods.length; + const errors = !haveMethodsConfigured ? "There is not enough authentication methods." : undefined; return ( - -
    - - - - - - -
    -

    Configured authentication methods

    - {haveMethodsConfigured ? ( - configuredAuthMethods.map((x, i) => { - return ( -

    - {x.type} ({x.instructions}){" "} - + +

    +
    +
    + {getKeys(authMethods).map(method => )} +
    + {authAvailableSet.size === 0 && setNoProvidersAck(true)} description="No providers founds" label="Add a provider manually"> + We have found no trusted cloud providers for your recovery secret. You can add a provider manually. + To add a provider you must know the provider URL (e.g. https://provider.com) +

    + More about cloud providers

    - ); - }) - ) : ( -

    No authentication methods configured yet.

    - )} +
    } + + {/* {haveMethodsConfigured && ( + configuredAuthMethods.map((x, i) => { + return ( +

    + {x.type} ({x.instructions}){" "} + +

    + ); + }) + )} */} +
    +
    + When recovering your wallet, you will be asked to verify your identity via the methods you configure here. +
    +
    ); } +type AuthMethodWithRemove = AuthMethod & { remove: () => void } export interface AuthMethodSetupProps { method: string; addAuthMethod: (x: any) => void; + configured: AuthMethodWithRemove[]; cancel: () => void; } @@ -116,8 +165,36 @@ function AuthMethodNotImplemented(props: AuthMethodSetupProps): VNode { ); } -interface AuthenticationEditorProps { - reducer: AnastasisReducerApi; - backupState: ReducerStateBackup; + +function ConfirmModal({ active, description, onCancel, onConfirm, children, danger, disabled, label = 'Confirm' }: Props): VNode { + return
    + } +interface Props { + active?: boolean; + description?: string; + onCancel?: () => void; + onConfirm?: () => void; + label?: string; + children?: ComponentChildren; + danger?: boolean; + disabled?: boolean; +} diff --git a/packages/anastasis-webui/src/pages/home/BackupFinishedScreen.stories.tsx b/packages/anastasis-webui/src/pages/home/BackupFinishedScreen.stories.tsx index 0c9d007bc..b71a79727 100644 --- a/packages/anastasis-webui/src/pages/home/BackupFinishedScreen.stories.tsx +++ b/packages/anastasis-webui/src/pages/home/BackupFinishedScreen.stories.tsx @@ -37,7 +37,7 @@ export default { }, }; -export const Simple = createExample(TestedComponent, reducerStatesExample.backupFinished); +export const WithoutName = createExample(TestedComponent, reducerStatesExample.backupFinished); export const WithName = createExample(TestedComponent, {...reducerStatesExample.backupFinished, secret_name: 'super_secret', diff --git a/packages/anastasis-webui/src/pages/home/BackupFinishedScreen.tsx b/packages/anastasis-webui/src/pages/home/BackupFinishedScreen.tsx index 218f1d1fd..70ac8157d 100644 --- a/packages/anastasis-webui/src/pages/home/BackupFinishedScreen.tsx +++ b/packages/anastasis-webui/src/pages/home/BackupFinishedScreen.tsx @@ -1,3 +1,4 @@ +import { format } from "date-fns"; import { h, VNode } from "preact"; import { useAnastasisContext } from "../../context/anastasis"; import { AnastasisClientFrame } from "./index"; @@ -11,23 +12,30 @@ export function BackupFinishedScreen(): VNode { return
    invalid state
    } const details = reducer.currentReducerState.success_details - return ( -

    - Your backup of secret "{reducer.currentReducerState.secret_name ?? "??"}" was + + return ( + {reducer.currentReducerState.secret_name ?

    + Your backup of secret "{reducer.currentReducerState.secret_name}" was successful. -

    -

    The backup is stored by the following providers:

    +

    : +

    + Your secret was successfully backed up. +

    } - {details &&
      + {details &&
      +

      The backup is stored by the following providers:

      {Object.keys(details).map((x, i) => { const sd = details[x]; return ( -
    • - {x} (Policy version {sd.policy_version}) -
    • +
      + {x} +

      + version {sd.policy_version} + {sd.policy_expiration.t_ms !== 'never' ? ` expires at: ${format(sd.policy_expiration.t_ms, 'dd/MM/yyyy')}` : ' without expiration date'} +

      +
      ); })} -
    } - +
    } ); } diff --git a/packages/anastasis-webui/src/pages/home/ChallengeOverviewScreen.tsx b/packages/anastasis-webui/src/pages/home/ChallengeOverviewScreen.tsx index 3bb3fb837..cf44d5bf4 100644 --- a/packages/anastasis-webui/src/pages/home/ChallengeOverviewScreen.tsx +++ b/packages/anastasis-webui/src/pages/home/ChallengeOverviewScreen.tsx @@ -47,8 +47,9 @@ export function ChallengeOverviewScreen(): VNode { const atLeastThereIsOnePolicySolved = policiesWithInfo.find(p => p.isPolicySolved) !== undefined + const errors = !atLeastThereIsOnePolicySolved ? "Solve one policy before proceeding" : undefined; return ( - + {!policies.length ?

    No policies found, try with another version of the secret

    : (policies.length === 1 ?

    diff --git a/packages/anastasis-webui/src/pages/home/ChallengePayingScreen.tsx b/packages/anastasis-webui/src/pages/home/ChallengePayingScreen.tsx index d87afdf46..84896a2ec 100644 --- a/packages/anastasis-webui/src/pages/home/ChallengePayingScreen.tsx +++ b/packages/anastasis-webui/src/pages/home/ChallengePayingScreen.tsx @@ -13,7 +13,7 @@ export function ChallengePayingScreen(): VNode { const payments = ['']; //reducer.currentReducerState.payments ?? return (

    diff --git a/packages/anastasis-webui/src/pages/home/ContinentSelectionScreen.tsx b/packages/anastasis-webui/src/pages/home/ContinentSelectionScreen.tsx index 94c0409da..713655625 100644 --- a/packages/anastasis-webui/src/pages/home/ContinentSelectionScreen.tsx +++ b/packages/anastasis-webui/src/pages/home/ContinentSelectionScreen.tsx @@ -1,20 +1,108 @@ +/* eslint-disable @typescript-eslint/camelcase */ +import { BackupStates, ContinentInfo, RecoveryStates } from "anastasis-core"; import { h, VNode } from "preact"; +import { useState } from "preact/hooks"; import { useAnastasisContext } from "../../context/anastasis"; import { AnastasisClientFrame, withProcessLabel } from "./index"; export function ContinentSelectionScreen(): VNode { const reducer = useAnastasisContext() + + //FIXME: remove this when #7056 is fixed + const [countryCode, setCountryCode] = useState("") + if (!reducer || !reducer.currentReducerState || !("continents" in reducer.currentReducerState)) { return

    } - const select = (continent: string) => (): void => reducer.transition("select_continent", { continent }); + const selectContinent = (continent: string): void => { + reducer.transition("select_continent", { continent }) + }; + const selectCountry = (country: string): void => { + setCountryCode(country) + }; + + + const continentList = reducer.currentReducerState.continents || []; + const countryList = reducer.currentReducerState.countries || []; + const theContinent = reducer.currentReducerState.selected_continent || "" + // const cc = reducer.currentReducerState.selected_country || ""; + const theCountry = countryList.find(c => c.code === countryCode) + const selectCountryAction = () => { + //selection should be when the select box changes it value + if (!theCountry) return; + reducer.transition("select_country", { + country_code: countryCode, + currencies: [theCountry.currency], + }) + } + + const step1 = reducer.currentReducerState.backup_state === BackupStates.ContinentSelecting || + reducer.currentReducerState.recovery_state === RecoveryStates.ContinentSelecting; + + const errors = !theCountry ? "Select a country" : undefined + return ( - - {reducer.currentReducerState.continents.map((x: any) => ( - - ))} + +
    +
    +
    + +
    +
    + +
    + +
    +
    + {!step1 && + reducer.back()}> + X + + } +
    +
    + +
    + +
    +
    + +
    + +
    +
    +
    +
    + + {theCountry &&
    + +
    + +
    +
    } +
    +
    +

    + A location will help to define a common information that will be use to locate your secret and a currency + for payments if needed. +

    +
    +
    +
    ); } diff --git a/packages/anastasis-webui/src/pages/home/CountrySelectionScreen.tsx b/packages/anastasis-webui/src/pages/home/CountrySelectionScreen.tsx index 417c08633..77329f4fa 100644 --- a/packages/anastasis-webui/src/pages/home/CountrySelectionScreen.tsx +++ b/packages/anastasis-webui/src/pages/home/CountrySelectionScreen.tsx @@ -18,7 +18,7 @@ export function CountrySelectionScreen(): VNode { return (
    - {reducer.currentReducerState.countries.map((x: any) => ( + {reducer.currentReducerState.countries!.map((x: any) => (
    +
    ); })} diff --git a/packages/anastasis-webui/src/pages/home/SecretEditorScreen.tsx b/packages/anastasis-webui/src/pages/home/SecretEditorScreen.tsx index 79a46761c..915465c3f 100644 --- a/packages/anastasis-webui/src/pages/home/SecretEditorScreen.tsx +++ b/packages/anastasis-webui/src/pages/home/SecretEditorScreen.tsx @@ -6,6 +6,7 @@ import { useAnastasisContext } from "../../context/anastasis"; import { AnastasisClientFrame} from "./index"; import { TextInput } from "../../components/fields/TextInput"; +import { FileInput } from "../../components/fields/FileInput"; export function SecretEditorScreen(): VNode { const reducer = useAnastasisContext() @@ -57,6 +58,10 @@ export function SecretEditorScreen(): VNode { or import a file +
    diff --git a/packages/anastasis-webui/src/pages/home/SecretSelectionScreen.tsx b/packages/anastasis-webui/src/pages/home/SecretSelectionScreen.tsx index 5d67ee472..d0b83bda5 100644 --- a/packages/anastasis-webui/src/pages/home/SecretSelectionScreen.tsx +++ b/packages/anastasis-webui/src/pages/home/SecretSelectionScreen.tsx @@ -37,7 +37,7 @@ export function SecretSelectionScreen(): VNode { const recoveryDocument = reducer.currentReducerState.recovery_document if (!recoveryDocument) { return ( - +

    No recovery document found, try with another provider

    diff --git a/packages/anastasis-webui/src/pages/home/SolveScreen.stories.tsx b/packages/anastasis-webui/src/pages/home/SolveScreen.stories.tsx index c05c36b07..cb6561b3f 100644 --- a/packages/anastasis-webui/src/pages/home/SolveScreen.stories.tsx +++ b/packages/anastasis-webui/src/pages/home/SolveScreen.stories.tsx @@ -44,7 +44,7 @@ export const NotSupportedChallenge = createExample(TestedComponent, { recovery_information: { challenges: [{ cost: 'USD:1', - instructions: 'follow htis instructions', + instructions: 'does P equals NP?', type: 'chall-type', uuid: 'ASDASDSAD!1' }], @@ -58,7 +58,7 @@ export const MismatchedChallengeId = createExample(TestedComponent, { recovery_information: { challenges: [{ cost: 'USD:1', - instructions: 'follow htis instructions', + instructions: 'does P equals NP?', type: 'chall-type', uuid: 'ASDASDSAD!1' }], @@ -72,7 +72,7 @@ export const SmsChallenge = createExample(TestedComponent, { recovery_information: { challenges: [{ cost: 'USD:1', - instructions: 'follow htis instructions', + instructions: 'SMS to 555-5555', type: 'sms', uuid: 'ASDASDSAD!1' }], @@ -86,7 +86,7 @@ export const QuestionChallenge = createExample(TestedComponent, { recovery_information: { challenges: [{ cost: 'USD:1', - instructions: 'follow htis instructions', + instructions: 'does P equals NP?', type: 'question', uuid: 'ASDASDSAD!1' }], @@ -100,7 +100,7 @@ export const EmailChallenge = createExample(TestedComponent, { recovery_information: { challenges: [{ cost: 'USD:1', - instructions: 'follow htis instructions', + instructions: 'Email to sebasjm@some-domain.com', type: 'email', uuid: 'ASDASDSAD!1' }], @@ -114,7 +114,7 @@ export const PostChallenge = createExample(TestedComponent, { recovery_information: { challenges: [{ cost: 'USD:1', - instructions: 'follow htis instructions', + instructions: 'Letter to address in postal code ABC123', type: 'post', uuid: 'ASDASDSAD!1' }], diff --git a/packages/anastasis-webui/src/pages/home/SolveScreen.tsx b/packages/anastasis-webui/src/pages/home/SolveScreen.tsx index 077726e02..b0cfa9bb0 100644 --- a/packages/anastasis-webui/src/pages/home/SolveScreen.tsx +++ b/packages/anastasis-webui/src/pages/home/SolveScreen.tsx @@ -8,26 +8,26 @@ import { useAnastasisContext } from "../../context/anastasis"; export function SolveScreen(): VNode { const reducer = useAnastasisContext() const [answer, setAnswer] = useState(""); - + if (!reducer) { - return + return
    no reducer in context
    } if (!reducer.currentReducerState || reducer.currentReducerState.recovery_state === undefined) { - return + return
    invalid state
    } if (!reducer.currentReducerState.recovery_information) { - return + return
    no recovery information found
    } if (!reducer.currentReducerState.selected_challenge_uuid) { - return -
    no selected uuid
    + return +
    invalid state
    } @@ -55,7 +55,7 @@ export function SolveScreen(): VNode { function onCancel(): void { reducer?.back() } - + return (
    - - -
    + + +
    ); } @@ -82,13 +82,13 @@ export interface SolveEntryProps { challenge: ChallengeInfo; feedback?: ChallengeFeedback; answer: string; - setAnswer: (s:string) => void; + setAnswer: (s: string) => void; } function SolveSmsEntry({ challenge, answer, setAnswer }: SolveEntryProps): VNode { return ( -

    An sms has been sent to "{challenge.instructions}". Type the code below

    - +

    An sms has been sent to "{challenge.instructions}". Type the code below

    +
    ); } diff --git a/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodEmailSetup.stories.tsx b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodEmailSetup.stories.tsx new file mode 100644 index 000000000..e178a4955 --- /dev/null +++ b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodEmailSetup.stories.tsx @@ -0,0 +1,66 @@ +/* eslint-disable @typescript-eslint/camelcase */ +/* + This file is part of GNU Taler + (C) 2021 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { createExample, reducerStatesExample } from '../../../utils'; +import { authMethods as TestedComponent, KnownAuthMethods } from './index'; + + +export default { + title: 'Pages/backup/authMethods/email', + component: TestedComponent, + args: { + order: 5, + }, + argTypes: { + onUpdate: { action: 'onUpdate' }, + onBack: { action: 'onBack' }, + }, +}; + +const type: KnownAuthMethods = 'email' + +export const Empty = createExample(TestedComponent[type].screen, reducerStatesExample.authEditing, { + configured: [] +}); + +export const WithOneExample = createExample(TestedComponent[type].screen, reducerStatesExample.authEditing, { + configured: [{ + challenge: 'qwe', + type, + instructions: 'Email to sebasjm@email.com ', + remove: () => null + }] +}); + +export const WithMoreExamples = createExample(TestedComponent[type].screen, reducerStatesExample.authEditing, { + configured: [{ + challenge: 'qwe', + type, + instructions: 'Email to sebasjm@email.com', + remove: () => null + },{ + challenge: 'qwe', + type, + instructions: 'Email to someone@sebasjm.com', + remove: () => null + }] +}); diff --git a/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodEmailSetup.tsx b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodEmailSetup.tsx new file mode 100644 index 000000000..e8cee9cb4 --- /dev/null +++ b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodEmailSetup.tsx @@ -0,0 +1,62 @@ +/* eslint-disable @typescript-eslint/camelcase */ +import { + encodeCrock, + stringToBytes +} from "@gnu-taler/taler-util"; +import { Fragment, h, VNode } from "preact"; +import { useState } from "preact/hooks"; +import { AuthMethodSetupProps } from "../AuthenticationEditorScreen"; +import { AnastasisClientFrame } from "../index"; +import { TextInput } from "../../../components/fields/TextInput"; +import { EmailInput } from "../../../components/fields/EmailInput"; + +const EMAIL_PATTERN = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ + +export function AuthMethodEmailSetup({ cancel, addAuthMethod, configured }: AuthMethodSetupProps): VNode { + const [email, setEmail] = useState(""); + const addEmailAuth = (): void => addAuthMethod({ + authentication_method: { + type: "email", + instructions: `Email to ${email}`, + challenge: encodeCrock(stringToBytes(email)), + }, + }); + const emailError = !EMAIL_PATTERN.test(email) ? 'Email address is not valid' : undefined + const errors = !email ? 'Add your email' : emailError + + return ( + +

    + For email authentication, you need to provide an email address. When + recovering your secret, you will need to enter the code you receive by + email. +

    +
    + +
    + {configured.length > 0 &&
    +
    + Your emails: +
    + {configured.map((c, i) => { + return
    +

    {c.instructions}

    +
    +
    + })} +
    } +
    +
    + + + + +
    +
    +
    + ); +} diff --git a/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodIbanSetup.stories.tsx b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodIbanSetup.stories.tsx new file mode 100644 index 000000000..71f618646 --- /dev/null +++ b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodIbanSetup.stories.tsx @@ -0,0 +1,65 @@ +/* eslint-disable @typescript-eslint/camelcase */ +/* + This file is part of GNU Taler + (C) 2021 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { createExample, reducerStatesExample } from '../../../utils'; +import { authMethods as TestedComponent, KnownAuthMethods } from './index'; + + +export default { + title: 'Pages/backup/authMethods/IBAN', + component: TestedComponent, + args: { + order: 5, + }, + argTypes: { + onUpdate: { action: 'onUpdate' }, + onBack: { action: 'onBack' }, + }, +}; + +const type: KnownAuthMethods = 'iban' + +export const Empty = createExample(TestedComponent[type].screen, reducerStatesExample.authEditing, { + configured: [] +}); + +export const WithOneExample = createExample(TestedComponent[type].screen, reducerStatesExample.authEditing, { + configured: [{ + challenge: 'qwe', + type, + instructions: 'Wire transfer from QWEASD123123 with holder Sebastian', + remove: () => null + }] +}); +export const WithMoreExamples = createExample(TestedComponent[type].screen, reducerStatesExample.authEditing, { + configured: [{ + challenge: 'qwe', + type, + instructions: 'Wire transfer from QWEASD123123 with holder Javier', + remove: () => null + },{ + challenge: 'qwe', + type, + instructions: 'Wire transfer from QWEASD123123 with holder Sebastian', + remove: () => null + }] +},); diff --git a/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodIbanSetup.tsx b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodIbanSetup.tsx new file mode 100644 index 000000000..c9edbfa07 --- /dev/null +++ b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodIbanSetup.tsx @@ -0,0 +1,68 @@ +/* eslint-disable @typescript-eslint/camelcase */ +import { + canonicalJson, + encodeCrock, + stringToBytes +} from "@gnu-taler/taler-util"; +import { h, VNode } from "preact"; +import { useState } from "preact/hooks"; +import { TextInput } from "../../../components/fields/TextInput"; +import { AuthMethodSetupProps } from "../AuthenticationEditorScreen"; +import { AnastasisClientFrame } from "../index"; + +export function AuthMethodIbanSetup({ addAuthMethod, cancel, configured }: AuthMethodSetupProps): VNode { + const [name, setName] = useState(""); + const [account, setAccount] = useState(""); + const addIbanAuth = (): void => addAuthMethod({ + authentication_method: { + type: "iban", + instructions: `Wire transfer from ${account} with holder ${name}`, + challenge: encodeCrock(stringToBytes(canonicalJson({ + name, account + }))), + }, + }); + const errors = !name ? 'Add an account name' : ( + !account ? 'Add an account IBAN number' : undefined + ) + return ( + +

    + For bank transfer authentication, you need to provide a bank + account (account holder name and IBAN). When recovering your + secret, you will be asked to pay the recovery fee via bank + transfer from the account you provided here. +

    +
    + + +
    + {configured.length > 0 &&
    +
    + Your bank accounts: +
    + {configured.map((c, i) => { + return
    +

    {c.instructions}

    +
    +
    + })} +
    } +
    +
    + + + + +
    +
    +
    + ); +} diff --git a/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodPostSetup.stories.tsx b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodPostSetup.stories.tsx new file mode 100644 index 000000000..0f1c17495 --- /dev/null +++ b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodPostSetup.stories.tsx @@ -0,0 +1,66 @@ +/* eslint-disable @typescript-eslint/camelcase */ +/* + This file is part of GNU Taler + (C) 2021 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { createExample, reducerStatesExample } from '../../../utils'; +import { authMethods as TestedComponent, KnownAuthMethods } from './index'; + + +export default { + title: 'Pages/backup/authMethods/Post', + component: TestedComponent, + args: { + order: 5, + }, + argTypes: { + onUpdate: { action: 'onUpdate' }, + onBack: { action: 'onBack' }, + }, +}; + +const type: KnownAuthMethods = 'post' + +export const Empty = createExample(TestedComponent[type].screen, reducerStatesExample.authEditing, { + configured: [] +}); + +export const WithOneExample = createExample(TestedComponent[type].screen, reducerStatesExample.authEditing, { + configured: [{ + challenge: 'qwe', + type, + instructions: 'Letter to address in postal code QWE456', + remove: () => null + }] +}); + +export const WithMoreExamples = createExample(TestedComponent[type].screen, reducerStatesExample.authEditing, { + configured: [{ + challenge: 'qwe', + type, + instructions: 'Letter to address in postal code QWE456', + remove: () => null + },{ + challenge: 'qwe', + type, + instructions: 'Letter to address in postal code ABC123', + remove: () => null + }] +}); diff --git a/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodPostSetup.tsx b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodPostSetup.tsx new file mode 100644 index 000000000..bfeaaa832 --- /dev/null +++ b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodPostSetup.tsx @@ -0,0 +1,102 @@ +/* eslint-disable @typescript-eslint/camelcase */ +import { + canonicalJson, encodeCrock, + stringToBytes +} from "@gnu-taler/taler-util"; +import { Fragment, h, VNode } from "preact"; +import { useState } from "preact/hooks"; +import { AuthMethodSetupProps } from "../AuthenticationEditorScreen"; +import { TextInput } from "../../../components/fields/TextInput"; +import { AnastasisClientFrame } from ".."; + +export function AuthMethodPostSetup({ addAuthMethod, cancel, configured }: AuthMethodSetupProps): VNode { + const [fullName, setFullName] = useState(""); + const [street, setStreet] = useState(""); + const [city, setCity] = useState(""); + const [postcode, setPostcode] = useState(""); + const [country, setCountry] = useState(""); + + const addPostAuth = () => { + const challengeJson = { + full_name: fullName, + street, + city, + postcode, + country, + }; + addAuthMethod({ + authentication_method: { + type: "post", + instructions: `Letter to address in postal code ${postcode}`, + challenge: encodeCrock(stringToBytes(canonicalJson(challengeJson))), + }, + }); + }; + + const errors = !fullName ? 'The full name is missing' : ( + !street ? 'The street is missing' : ( + !city ? 'The city is missing' : ( + !postcode ? 'The postcode is missing' : ( + !country ? 'The country is missing' : undefined + ) + ) + ) + ) + return ( + +

    + For postal letter authentication, you need to provide a postal + address. When recovering your secret, you will be asked to enter a + code that you will receive in a letter to that address. +

    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    + + {configured.length > 0 &&
    +
    + Your postal code: +
    + {configured.map((c, i) => { + return
    +

    {c.instructions}

    +
    +
    + })} +
    +
    } +
    + + + + +
    +
    + ); +} diff --git a/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodQuestionSetup.stories.tsx b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodQuestionSetup.stories.tsx new file mode 100644 index 000000000..3ba4a84ca --- /dev/null +++ b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodQuestionSetup.stories.tsx @@ -0,0 +1,66 @@ +/* eslint-disable @typescript-eslint/camelcase */ +/* + This file is part of GNU Taler + (C) 2021 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { createExample, reducerStatesExample } from '../../../utils'; +import { authMethods as TestedComponent, KnownAuthMethods } from './index'; + + +export default { + title: 'Pages/backup/authMethods/Question', + component: TestedComponent, + args: { + order: 5, + }, + argTypes: { + onUpdate: { action: 'onUpdate' }, + onBack: { action: 'onBack' }, + }, +}; + +const type: KnownAuthMethods = 'question' + +export const Empty = createExample(TestedComponent[type].screen, reducerStatesExample.authEditing, { + configured: [] +}); + +export const WithOneExample = createExample(TestedComponent[type].screen, reducerStatesExample.authEditing, { + configured: [{ + challenge: 'qwe', + type, + instructions: 'Is integer factorization polynomial? (non-quantum computer)', + remove: () => null + }] +}); + +export const WithMoreExamples = createExample(TestedComponent[type].screen, reducerStatesExample.authEditing, { + configured: [{ + challenge: 'qwe', + type, + instructions: 'Does P equal NP?', + remove: () => null + },{ + challenge: 'asd', + type, + instructions: 'Are continuous groups automatically differential groups?', + remove: () => null + }] +}); diff --git a/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodQuestionSetup.tsx b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodQuestionSetup.tsx new file mode 100644 index 000000000..eab800e35 --- /dev/null +++ b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodQuestionSetup.tsx @@ -0,0 +1,70 @@ +/* eslint-disable @typescript-eslint/camelcase */ +import { + encodeCrock, + stringToBytes +} from "@gnu-taler/taler-util"; +import { Fragment, h, VNode } from "preact"; +import { useState } from "preact/hooks"; +import { AuthMethodSetupProps } from "../AuthenticationEditorScreen"; +import { AnastasisClientFrame } from "../index"; +import { TextInput } from "../../../components/fields/TextInput"; + +export function AuthMethodQuestionSetup({ cancel, addAuthMethod, configured }: AuthMethodSetupProps): VNode { + const [questionText, setQuestionText] = useState(""); + const [answerText, setAnswerText] = useState(""); + const addQuestionAuth = (): void => addAuthMethod({ + authentication_method: { + type: "question", + instructions: questionText, + challenge: encodeCrock(stringToBytes(answerText)), + }, + }); + + const errors = !questionText ? "Add your security question" : ( + !answerText ? 'Add the answer to your question' : undefined + ) + return ( + +
    +

    + For security question authentication, you need to provide a question + and its answer. When recovering your secret, you will be shown the + question and you will need to type the answer exactly as you typed it + here. +

    +
    + +
    +
    + +
    + + {configured.length > 0 &&
    +
    + Your security questions: +
    + {configured.map((c, i) => { + return
    +

    {c.instructions}

    +
    +
    + })} +
    } +
    + + + + +
    +
    +
    + ); +} diff --git a/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodSmsSetup.stories.tsx b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodSmsSetup.stories.tsx new file mode 100644 index 000000000..ae8297ef7 --- /dev/null +++ b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodSmsSetup.stories.tsx @@ -0,0 +1,66 @@ +/* eslint-disable @typescript-eslint/camelcase */ +/* + This file is part of GNU Taler + (C) 2021 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { createExample, reducerStatesExample } from '../../../utils'; +import { authMethods as TestedComponent, KnownAuthMethods } from './index'; + + +export default { + title: 'Pages/backup/authMethods/Sms', + component: TestedComponent, + args: { + order: 5, + }, + argTypes: { + onUpdate: { action: 'onUpdate' }, + onBack: { action: 'onBack' }, + }, +}; + +const type: KnownAuthMethods = 'sms' + +export const Empty = createExample(TestedComponent[type].screen, reducerStatesExample.authEditing, { + configured: [] +}); + +export const WithOneExample = createExample(TestedComponent[type].screen, reducerStatesExample.authEditing, { + configured: [{ + challenge: 'qwe', + type, + instructions: 'SMS to +11-1234-2345', + remove: () => null + }] +}); + +export const WithMoreExamples = createExample(TestedComponent[type].screen, reducerStatesExample.authEditing, { + configured: [{ + challenge: 'qwe', + type, + instructions: 'SMS to +11-1234-2345', + remove: () => null + },{ + challenge: 'qwe', + type, + instructions: 'SMS to +11-5555-2345', + remove: () => null + }] +}); diff --git a/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodSmsSetup.tsx b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodSmsSetup.tsx new file mode 100644 index 000000000..9e85af2b2 --- /dev/null +++ b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodSmsSetup.tsx @@ -0,0 +1,63 @@ +/* eslint-disable @typescript-eslint/camelcase */ +import { + encodeCrock, + stringToBytes +} from "@gnu-taler/taler-util"; +import { Fragment, h, VNode } from "preact"; +import { useLayoutEffect, useRef, useState } from "preact/hooks"; +import { NumberInput } from "../../../components/fields/NumberInput"; +import { AuthMethodSetupProps } from "../AuthenticationEditorScreen"; +import { AnastasisClientFrame } from "../index"; + +export function AuthMethodSmsSetup({ addAuthMethod, cancel, configured }: AuthMethodSetupProps): VNode { + const [mobileNumber, setMobileNumber] = useState(""); + const addSmsAuth = (): void => { + addAuthMethod({ + authentication_method: { + type: "sms", + instructions: `SMS to ${mobileNumber}`, + challenge: encodeCrock(stringToBytes(mobileNumber)), + }, + }); + }; + const inputRef = useRef(null); + useLayoutEffect(() => { + inputRef.current?.focus(); + }, []); + const errors = !mobileNumber ? 'Add a mobile number' : undefined + return ( + +
    +

    + For SMS authentication, you need to provide a mobile number. When + recovering your secret, you will be asked to enter the code you + receive via SMS. +

    +
    + +
    + {configured.length > 0 &&
    +
    + Your mobile numbers: +
    + {configured.map((c, i) => { + return
    +

    {c.instructions}

    +
    +
    + })} +
    } +
    + + + + +
    +
    +
    + ); +} diff --git a/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodTotpSetup.stories.tsx b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodTotpSetup.stories.tsx new file mode 100644 index 000000000..3447e3d61 --- /dev/null +++ b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodTotpSetup.stories.tsx @@ -0,0 +1,64 @@ +/* eslint-disable @typescript-eslint/camelcase */ +/* + This file is part of GNU Taler + (C) 2021 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { createExample, reducerStatesExample } from '../../../utils'; +import { authMethods as TestedComponent, KnownAuthMethods } from './index'; + + +export default { + title: 'Pages/backup/authMethods/TOTP', + component: TestedComponent, + args: { + order: 5, + }, + argTypes: { + onUpdate: { action: 'onUpdate' }, + onBack: { action: 'onBack' }, + }, +}; + +const type: KnownAuthMethods = 'totp' + +export const Empty = createExample(TestedComponent[type].screen, reducerStatesExample.authEditing, { + configured: [] +}); +export const WithOneExample = createExample(TestedComponent[type].screen, reducerStatesExample.authEditing, { + configured: [{ + challenge: 'qwe', + type, + instructions: 'instr', + remove: () => null + }] +}); +export const WithMoreExample = createExample(TestedComponent[type].screen, reducerStatesExample.authEditing, { + configured: [{ + challenge: 'qwe', + type, + instructions: 'instr', + remove: () => null + },{ + challenge: 'qwe', + type, + instructions: 'instr', + remove: () => null + }] +}); diff --git a/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodTotpSetup.tsx b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodTotpSetup.tsx new file mode 100644 index 000000000..bbffedad6 --- /dev/null +++ b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodTotpSetup.tsx @@ -0,0 +1,47 @@ +/* eslint-disable @typescript-eslint/camelcase */ +import { + encodeCrock, + stringToBytes +} from "@gnu-taler/taler-util"; +import { h, VNode } from "preact"; +import { useState } from "preact/hooks"; +import { AuthMethodSetupProps } from "../AuthenticationEditorScreen"; +import { AnastasisClientFrame } from "../index"; +import { TextInput } from "../../../components/fields/TextInput"; +import { QR } from "../../../components/QR"; + +export function AuthMethodTotpSetup({addAuthMethod, cancel, configured}: AuthMethodSetupProps): VNode { + const [name, setName] = useState(""); + const addTotpAuth = (): void => addAuthMethod({ + authentication_method: { + type: "totp", + instructions: `Enter code for ${name}`, + challenge: encodeCrock(stringToBytes(name)), + }, + }); + const errors = !name ? 'The TOTP name is missing' : undefined; + return ( + +

    + For Time-based One-Time Password (TOTP) authentication, you need to set + a name for the TOTP secret. Then, you must scan the generated QR code + with your TOTP App to import the TOTP secret into your TOTP App. +

    +
    + +
    + +
    +
    + + + + +
    +
    +
    + ); +} diff --git a/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodVideoSetup.stories.tsx b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodVideoSetup.stories.tsx new file mode 100644 index 000000000..3c4c7bf39 --- /dev/null +++ b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodVideoSetup.stories.tsx @@ -0,0 +1,66 @@ +/* eslint-disable @typescript-eslint/camelcase */ +/* + This file is part of GNU Taler + (C) 2021 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { createExample, reducerStatesExample } from '../../../utils'; +import { authMethods as TestedComponent, KnownAuthMethods } from './index'; +import logoImage from '../../../assets/logo.jpeg' + +export default { + title: 'Pages/backup/authMethods/Video', + component: TestedComponent, + args: { + order: 5, + }, + argTypes: { + onUpdate: { action: 'onUpdate' }, + onBack: { action: 'onBack' }, + }, +}; + +const type: KnownAuthMethods = 'video' + +export const Empty = createExample(TestedComponent[type].screen, reducerStatesExample.authEditing, { + configured: [] +}); + +export const WithOneExample = createExample(TestedComponent[type].screen, reducerStatesExample.authEditing, { + configured: [{ + challenge: 'qwe', + type, + instructions: logoImage, + remove: () => null + }] +}); + +export const WithMoreExamples = createExample(TestedComponent[type].screen, reducerStatesExample.authEditing, { + configured: [{ + challenge: 'qwe', + type, + instructions: logoImage, + remove: () => null + },{ + challenge: 'qwe', + type, + instructions: logoImage, + remove: () => null + }] +}); diff --git a/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodVideoSetup.tsx b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodVideoSetup.tsx new file mode 100644 index 000000000..d292a9d24 --- /dev/null +++ b/packages/anastasis-webui/src/pages/home/authMethodSetup/AuthMethodVideoSetup.tsx @@ -0,0 +1,56 @@ +/* eslint-disable @typescript-eslint/camelcase */ +import { + encodeCrock, + stringToBytes +} from "@gnu-taler/taler-util"; +import { h, VNode } from "preact"; +import { useState } from "preact/hooks"; +import { ImageInput } from "../../../components/fields/ImageInput"; +import { AuthMethodSetupProps } from "../AuthenticationEditorScreen"; +import { AnastasisClientFrame } from "../index"; + +export function AuthMethodVideoSetup({cancel, addAuthMethod, configured}: AuthMethodSetupProps): VNode { + const [image, setImage] = useState(""); + const addVideoAuth = (): void => { + addAuthMethod({ + authentication_method: { + type: "video", + instructions: image, + challenge: encodeCrock(stringToBytes(image)), + }, + }) + }; + return ( + +

    + For video identification, you need to provide a passport-style + photograph. When recovering your secret, you will be asked to join a + video call. During that call, a human will use the photograph to + verify your identity. +

    +
    + +
    + {configured.length > 0 &&
    +
    + Your photographs: +
    + {configured.map((c, i) => { + return
    + +
    +
    + })} +
    } +
    +
    + + +
    +
    +
    + ); +} diff --git a/packages/anastasis-webui/src/pages/home/authMethodSetup/index.tsx b/packages/anastasis-webui/src/pages/home/authMethodSetup/index.tsx new file mode 100644 index 000000000..1e1d7bc03 --- /dev/null +++ b/packages/anastasis-webui/src/pages/home/authMethodSetup/index.tsx @@ -0,0 +1,68 @@ +import { h, VNode } from "preact"; +import { AuthMethodSetupProps } from "../AuthenticationEditorScreen"; + +import { AuthMethodEmailSetup as EmailScreen } from "./AuthMethodEmailSetup"; +import { AuthMethodIbanSetup as IbanScreen } from "./AuthMethodIbanSetup"; +import { AuthMethodPostSetup as PostalScreen } from "./AuthMethodPostSetup"; +import { AuthMethodQuestionSetup as QuestionScreen } from "./AuthMethodQuestionSetup"; +import { AuthMethodSmsSetup as SmsScreen } from "./AuthMethodSmsSetup"; +import { AuthMethodTotpSetup as TotpScreen } from "./AuthMethodTotpSetup"; +import { AuthMethodVideoSetup as VideScreen } from "./AuthMethodVideoSetup"; +import postalIcon from '../../../assets/icons/auth_method/postal.svg'; +import questionIcon from '../../../assets/icons/auth_method/question.svg'; +import smsIcon from '../../../assets/icons/auth_method/sms.svg'; +import videoIcon from '../../../assets/icons/auth_method/video.svg'; + +interface AuthMethodConfiguration { + icon: VNode; + label: string; + screen: (props: AuthMethodSetupProps) => VNode; +} +export type KnownAuthMethods = "sms" | "email" | "post" | "question" | "video" | "totp" | "iban"; + +type KnowMethodConfig = { + [name in KnownAuthMethods]: AuthMethodConfiguration; +}; + +export const authMethods: KnowMethodConfig = { + question: { + icon: , + label: "Question", + screen: QuestionScreen + }, + sms: { + icon: , + label: "SMS", + screen: SmsScreen + }, + email: { + icon: , + label: "Email", + screen: EmailScreen + + }, + iban: { + icon: , + label: "IBAN", + screen: IbanScreen + + }, + post: { + icon: , + label: "Physical mail", + screen: PostalScreen + + }, + totp: { + icon: , + label: "TOTP", + screen: TotpScreen + + }, + video: { + icon: , + label: "Video", + screen: VideScreen + + } +} \ No newline at end of file diff --git a/packages/anastasis-webui/src/pages/home/index.tsx b/packages/anastasis-webui/src/pages/home/index.tsx index 5cef4ee9c..fefaa184c 100644 --- a/packages/anastasis-webui/src/pages/home/index.tsx +++ b/packages/anastasis-webui/src/pages/home/index.tsx @@ -11,7 +11,8 @@ import { VNode } from "preact"; import { - useErrorBoundary} from "preact/hooks"; + useErrorBoundary +} from "preact/hooks"; import { Menu } from "../../components/menu"; import { AnastasisProvider, useAnastasisContext } from "../../context/anastasis"; import { @@ -59,7 +60,7 @@ interface AnastasisClientFrameProps { /** * Hide only the "next" button. */ - hideNext?: boolean; + hideNext?: string; } function ErrorBoundary(props: { @@ -112,13 +113,15 @@ export function AnastasisClientFrame(props: AnastasisClientFrameProps): VNode {
    handleKeyPress(e)}> -

    {props.title}

    +

    {props.title}

    {props.children} {!props.hideNav ? ( -
    +
    - {!props.hideNext ? : null} + + +
    ) : null}
    @@ -151,18 +154,12 @@ const AnastasisClientImpl: FunctionalComponent = () => { if ( state.backup_state === BackupStates.ContinentSelecting || - state.recovery_state === RecoveryStates.ContinentSelecting - ) { - return ( - - ); - } - if ( + state.recovery_state === RecoveryStates.ContinentSelecting || state.backup_state === BackupStates.CountrySelecting || state.recovery_state === RecoveryStates.CountrySelecting ) { return ( - + ); } if ( diff --git a/packages/anastasis-webui/src/scss/main.scss b/packages/anastasis-webui/src/scss/main.scss index 2e60bf6f9..1e0d3fded 100644 --- a/packages/anastasis-webui/src/scss/main.scss +++ b/packages/anastasis-webui/src/scss/main.scss @@ -198,10 +198,10 @@ div[data-tooltip]::before { max-width: 40em; } -.home div { - margin-top: 0.5em; - margin-bottom: 0.5em; -} +// .home div { +// margin-top: 0.5em; +// margin-bottom: 0.5em; +// } .policy { padding: 0.5em; diff --git a/packages/anastasis-webui/src/utils/index.tsx b/packages/anastasis-webui/src/utils/index.tsx index 670e229cd..48ac47544 100644 --- a/packages/anastasis-webui/src/utils/index.tsx +++ b/packages/anastasis-webui/src/utils/index.tsx @@ -86,7 +86,13 @@ const base = { { type: "question", usage_fee: "COL:0" - } + },{ + type: "sms", + usage_fee: "COL:0" + },{ + type: "email", + usage_fee: "COL:0" + }, ], salt: "WBMDD76BR1E90YQ5AHBMKPH7GW", storage_limit_in_megabytes: 16, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 283dafaf2..e38b0e856 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -61,6 +61,7 @@ importers: preact-cli: ^3.2.2 preact-render-to-string: ^5.1.4 preact-router: ^3.2.1 + qrcode-generator: ^1.4.4 sass: ^1.32.13 sass-loader: ^10.1.1 sirv-cli: ^1.0.0-next.3 @@ -73,6 +74,7 @@ importers: preact: 10.5.14 preact-render-to-string: 5.1.19_preact@10.5.14 preact-router: 3.2.1_preact@10.5.14 + qrcode-generator: 1.4.4 devDependencies: '@creativebulma/bulma-tooltip': 1.2.0 '@storybook/addon-a11y': 6.3.7 -- cgit v1.2.3 From aa78c1105e7b6b74d6185cc33daa42f93ccbea58 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Tue, 2 Nov 2021 16:20:39 +0100 Subject: anastasis-core: provide reducer CLI, refactor state machine --- package.json | 6 +- .../anastasis-core/bin/anastasis-ts-reducer.js | 14 + packages/anastasis-core/package.json | 16 +- packages/anastasis-core/rollup.config.js | 30 + packages/anastasis-core/src/cli.ts | 64 ++ packages/anastasis-core/src/index.node.ts | 2 + packages/anastasis-core/src/index.ts | 835 +++++++------- packages/anastasis-core/src/reducer-types.ts | 83 +- packages/taler-util/src/clk.ts | 620 ++++++++++ packages/taler-util/src/index.node.ts | 1 + pnpm-lock.yaml | 1205 +++++++++++++++++++- 11 files changed, 2428 insertions(+), 448 deletions(-) create mode 100755 packages/anastasis-core/bin/anastasis-ts-reducer.js create mode 100644 packages/anastasis-core/rollup.config.js create mode 100644 packages/anastasis-core/src/cli.ts create mode 100644 packages/anastasis-core/src/index.node.ts create mode 100644 packages/taler-util/src/clk.ts (limited to 'packages/anastasis-core/src') diff --git a/package.json b/package.json index 95ef6f5e1..b6e27b997 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,8 @@ "check": "pnpm run --filter '{packages}' --if-present test" }, "devDependencies": { - "@linaria/esbuild": "^3.0.0-beta.7", - "@linaria/shaker": "^3.0.0-beta.7", - "esbuild": "^0.12.21" + "@linaria/esbuild": "^3.0.0-beta.13", + "@linaria/shaker": "^3.0.0-beta.13", + "esbuild": "^0.12.29" } } diff --git a/packages/anastasis-core/bin/anastasis-ts-reducer.js b/packages/anastasis-core/bin/anastasis-ts-reducer.js new file mode 100755 index 000000000..9e1120516 --- /dev/null +++ b/packages/anastasis-core/bin/anastasis-ts-reducer.js @@ -0,0 +1,14 @@ +#!/usr/bin/env node + +async function r() { + try { + (await import("source-map-support")).install(); + } catch (e) { + console.warn("can't load souremaps"); + // Do nothing. + } + + (await import("../dist/anastasis-cli.js")).reducerCliMain(); +} + +r(); diff --git a/packages/anastasis-core/package.json b/packages/anastasis-core/package.json index 8dbef2d45..7e4fba9e3 100644 --- a/packages/anastasis-core/package.json +++ b/packages/anastasis-core/package.json @@ -6,8 +6,8 @@ "module": "./lib/index.js", "types": "./lib/index.d.ts", "scripts": { - "prepare": "tsc", - "compile": "tsc", + "prepare": "tsc && rollup -c", + "compile": "tsc && rollup -c", "pretty": "prettier --write src", "test": "tsc && ava", "coverage": "tsc && nyc ava", @@ -17,15 +17,23 @@ "license": "AGPL-3-or-later", "type": "module", "devDependencies": { + "@rollup/plugin-commonjs": "^21.0.1", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-node-resolve": "^13.0.6", "ava": "^3.15.0", - "typescript": "^4.4.3" + "rimraf": "^3.0.2", + "rollup": "^2.59.0", + "rollup-plugin-sourcemaps": "^0.6.3", + "source-map-support": "^0.5.19", + "typescript": "^4.4.4" }, "dependencies": { "@gnu-taler/taler-util": "workspace:^0.8.3", "fetch-ponyfill": "^7.1.0", "fflate": "^0.6.0", "hash-wasm": "^4.9.0", - "node-fetch": "^3.0.0" + "node-fetch": "^3.0.0", + "tslib": "^2.1.0" }, "ava": { "files": [ diff --git a/packages/anastasis-core/rollup.config.js b/packages/anastasis-core/rollup.config.js new file mode 100644 index 000000000..59998c93b --- /dev/null +++ b/packages/anastasis-core/rollup.config.js @@ -0,0 +1,30 @@ +// rollup.config.js +import commonjs from "@rollup/plugin-commonjs"; +import nodeResolve from "@rollup/plugin-node-resolve"; +import json from "@rollup/plugin-json"; +import builtins from "builtin-modules"; +import sourcemaps from "rollup-plugin-sourcemaps"; + +export default { + input: "lib/index.node.js", + output: { + file: "dist/anastasis-cli.js", + format: "es", + sourcemap: true, + }, + external: builtins, + plugins: [ + nodeResolve({ + preferBuiltins: true, + }), + + sourcemaps(), + + commonjs({ + sourceMap: true, + transformMixedEsModules: true, + }), + + json(), + ], +}; diff --git a/packages/anastasis-core/src/cli.ts b/packages/anastasis-core/src/cli.ts new file mode 100644 index 000000000..5ab7af6db --- /dev/null +++ b/packages/anastasis-core/src/cli.ts @@ -0,0 +1,64 @@ +import { clk } from "@gnu-taler/taler-util"; +import { + getBackupStartState, + getRecoveryStartState, + reduceAction, +} from "./index.js"; +import fs from "fs"; + +export const reducerCli = clk + .program("reducer", { + help: "Command line interface for the GNU Taler wallet.", + }) + .flag("initBackup", ["-b", "--backup"]) + .flag("initRecovery", ["-r", "--restore"]) + .maybeOption("argumentsJson", ["-a", "--arguments"], clk.STRING) + .maybeArgument("action", clk.STRING) + .maybeArgument("stateFile", clk.STRING); + +async function read(stream: NodeJS.ReadStream): Promise { + const chunks = []; + for await (const chunk of stream) { + chunks.push(chunk); + } + return Buffer.concat(chunks).toString("utf8"); +} + +reducerCli.action(async (x) => { + if (x.reducer.initBackup) { + console.log(JSON.stringify(await getBackupStartState())); + return; + } else if (x.reducer.initRecovery) { + console.log(JSON.stringify(await getRecoveryStartState())); + return; + } + + const action = x.reducer.action; + if (!action) { + console.log("action required"); + return; + } + + let lastState: any; + if (x.reducer.stateFile) { + const s = fs.readFileSync(x.reducer.stateFile, { encoding: "utf-8" }); + lastState = JSON.parse(s); + } else { + const s = await read(process.stdin); + lastState = JSON.parse(s); + } + + let args: any; + if (x.reducer.argumentsJson) { + args = JSON.parse(x.reducer.argumentsJson); + } else { + args = {}; + } + + const nextState = await reduceAction(lastState, action, args); + console.log(JSON.stringify(nextState)); +}); + +export function reducerCliMain() { + reducerCli.run(); +} diff --git a/packages/anastasis-core/src/index.node.ts b/packages/anastasis-core/src/index.node.ts new file mode 100644 index 000000000..d08906a22 --- /dev/null +++ b/packages/anastasis-core/src/index.node.ts @@ -0,0 +1,2 @@ +export * from "./index.js"; +export { reducerCliMain } from "./cli.js"; diff --git a/packages/anastasis-core/src/index.ts b/packages/anastasis-core/src/index.ts index c9e2bcf36..07f8122e3 100644 --- a/packages/anastasis-core/src/index.ts +++ b/packages/anastasis-core/src/index.ts @@ -9,6 +9,8 @@ import { encodeCrock, getRandomBytes, hash, + j2s, + Logger, stringToBytes, TalerErrorCode, TalerSignaturePurpose, @@ -26,12 +28,22 @@ import { ActionArgEnterSecret, ActionArgEnterSecretName, ActionArgEnterUserAttributes, + ActionArgsAddPolicy, + ActionArgSelectContinent, + ActionArgSelectCountry, ActionArgsSelectChallenge, ActionArgsSolveChallengeRequest, + ActionArgsUpdateExpiration, AuthenticationProviderStatus, AuthenticationProviderStatusOk, AuthMethod, BackupStates, + codecForActionArgEnterUserAttributes, + codecForActionArgsAddPolicy, + codecForActionArgSelectChallenge, + codecForActionArgSelectContinent, + codecForActionArgSelectCountry, + codecForActionArgsUpdateExpiration, ContinentInfo, CountryInfo, MethodSpec, @@ -46,6 +58,7 @@ import { ReducerStateError, ReducerStateRecovery, SuccessDetails, + UserAttributeSpec, } from "./reducer-types.js"; import fetchPonyfill from "fetch-ponyfill"; import { @@ -61,8 +74,6 @@ import { PolicySalt, TruthSalt, secureAnswerHash, - TruthKey, - TruthUuid, UserIdentifier, userIdentifierDerive, typedArrayConcat, @@ -74,10 +85,12 @@ import { import { unzlibSync, zlibSync } from "fflate"; import { EscrowMethod, RecoveryDocument } from "./recovery-document-types.js"; -const { fetch, Request, Response, Headers } = fetchPonyfill({}); +const { fetch } = fetchPonyfill({}); export * from "./reducer-types.js"; -export * as validators from './validators.js'; +export * as validators from "./validators.js"; + +const logger = new Logger("anastasis-core:index.ts"); function getContinents(): ContinentInfo[] { const continentSet = new Set(); @@ -95,10 +108,40 @@ function getContinents(): ContinentInfo[] { return continents; } +interface ErrorDetails { + code: TalerErrorCode; + message?: string; + hint?: string; +} + +export class ReducerError extends Error { + constructor(public errorJson: ErrorDetails) { + super( + errorJson.message ?? + errorJson.hint ?? + `${TalerErrorCode[errorJson.code]}`, + ); + + // Set the prototype explicitly. + Object.setPrototypeOf(this, ReducerError.prototype); + } +} + +/** + * Get countries for a continent, abort with ReducerError + * exception when continent doesn't exist. + */ function getCountries(continent: string): CountryInfo[] { - return anastasisData.countriesList.countries.filter( + const countries = anastasisData.countriesList.countries.filter( (x) => x.continent === continent, ); + if (countries.length <= 0) { + throw new ReducerError({ + code: TalerErrorCode.ANASTASIS_REDUCER_INPUT_INVALID, + hint: "continent not found", + }); + } + return countries; } export async function getBackupStartState(): Promise { @@ -115,19 +158,27 @@ export async function getRecoveryStartState(): Promise { }; } -async function backupSelectCountry( - state: ReducerStateBackup, - countryCode: string, - currencies: string[], -): Promise { +async function selectCountry( + selectedContinent: string, + args: ActionArgSelectCountry, +): Promise & Partial> { + const countryCode = args.country_code; + const currencies = args.currencies; const country = anastasisData.countriesList.countries.find( (x) => x.code === countryCode, ); if (!country) { - return { + throw new ReducerError({ code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID, hint: "invalid country selected", - }; + }); + } + + if (country.continent !== selectedContinent) { + throw new ReducerError({ + code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID, + hint: "selected country is not in selected continent", + }); } const providers: { [x: string]: {} } = {}; @@ -141,8 +192,6 @@ async function backupSelectCountry( .required_attributes; return { - ...state, - backup_state: BackupStates.UserAttributesCollecting, selected_country: countryCode, currencies, required_attributes: ra, @@ -150,38 +199,25 @@ async function backupSelectCountry( }; } +async function backupSelectCountry( + state: ReducerStateBackup, + args: ActionArgSelectCountry, +): Promise { + return { + ...state, + ...(await selectCountry(state.selected_continent!, args)), + backup_state: BackupStates.UserAttributesCollecting, + }; +} + async function recoverySelectCountry( state: ReducerStateRecovery, - countryCode: string, - currencies: string[], + args: ActionArgSelectCountry, ): Promise { - const country = anastasisData.countriesList.countries.find( - (x) => x.code === countryCode, - ); - if (!country) { - return { - code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID, - hint: "invalid country selected", - }; - } - - const providers: { [x: string]: {} } = {}; - for (const prov of anastasisData.providersList.anastasis_provider) { - if (currencies.includes(prov.currency)) { - providers[prov.url] = {}; - } - } - - const ra = (anastasisData.countryDetails as any)[countryCode] - .required_attributes; - return { ...state, recovery_state: RecoveryStates.UserAttributesCollecting, - selected_country: countryCode, - currencies, - required_attributes: ra, - authentication_providers: providers, + ...(await selectCountry(state.selected_continent!, args)), }; } @@ -231,8 +267,9 @@ async function getProviderInfo( async function backupEnterUserAttributes( state: ReducerStateBackup, - attributes: Record, + args: ActionArgEnterUserAttributes, ): Promise { + const attributes = args.identity_attributes; const providerUrls = Object.keys(state.authentication_providers ?? {}); const newProviders = state.authentication_providers ?? {}; for (const url of providerUrls) { @@ -336,7 +373,7 @@ function suggestPolicies( } const policies: Policy[] = []; const selections = enumerateSelections(numSel, numMethods); - console.log("selections", selections); + logger.info(`selections: ${j2s(selections)}`); for (const sel of selections) { const p = assignProviders(methods, providers, sel); if (p) { @@ -409,7 +446,7 @@ async function getTruthValue( * Compress the recovery document and add a size header. */ async function compressRecoveryDoc(rd: any): Promise { - console.log("recovery document", rd); + logger.info(`recovery document: ${j2s(rd)}`); const docBytes = stringToBytes(JSON.stringify(rd)); const sizeHeaderBuf = new ArrayBuffer(4); const dvbuf = new DataView(sizeHeaderBuf); @@ -509,10 +546,6 @@ async function uploadSecret( ? bytesToString(decodeCrock(authMethod.challenge)) : undefined, ); - console.log( - "encrypted key share len", - decodeCrock(encryptedKeyShare).length, - ); const tur: TruthUploadRequest = { encrypted_truth: encryptedTruth, key_share_data: encryptedKeyShare, @@ -550,8 +583,6 @@ async function uploadSecret( // the state, since it's possible that we'll run into // a provider that requests a payment. - console.log("policy UUIDs", policyUuids); - const rd: RecoveryDocument = { secret_name: secretName, encrypted_core_secret: csr.encCoreSecret, @@ -662,7 +693,6 @@ async function downloadPolicy( const rd: RecoveryDocument = await uncompressRecoveryDoc( decodeCrock(bodyDecrypted), ); - console.log("rd", rd); let policyVersion = 0; try { policyVersion = Number(resp.headers.get("Anastasis-Version") ?? "0"); @@ -683,7 +713,6 @@ async function downloadPolicy( } const recoveryInfo: RecoveryInformation = { challenges: recoveryDoc.escrow_methods.map((x) => { - console.log("providers", newProviderStatus); const prov = newProviderStatus[x.url] as AuthenticationProviderStatusOk; return { cost: prov.methods.find((m) => m.type === x.escrow_type)?.usage_fee!, @@ -777,8 +806,6 @@ async function solveChallenge( }, }); - console.log(resp); - if (resp.status !== 200) { return { code: TalerErrorCode.ANASTASIS_TRUTH_CHALLENGE_FAILED, @@ -825,12 +852,12 @@ async function solveChallenge( async function recoveryEnterUserAttributes( state: ReducerStateRecovery, - attributes: Record, + args: ActionArgEnterUserAttributes, ): Promise { // FIXME: validate attributes const st: ReducerStateRecovery = { ...state, - identity_attributes: attributes, + identity_attributes: args.identity_attributes, }; return downloadPolicy(st); } @@ -853,8 +880,6 @@ async function selectChallenge( }, }); - console.log(resp); - return { ...state, recovery_state: RecoveryStates.ChallengeSolving, @@ -862,352 +887,386 @@ async function selectChallenge( }; } -export async function reduceAction( - state: ReducerState, - action: string, - args: any, -): Promise { - console.log(`ts reducer: handling action ${action}`); - if (state.backup_state === BackupStates.ContinentSelecting) { - if (action === "select_continent") { - const continent: string = args.continent; - if (typeof continent !== "string") { - return { - code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID, - hint: "continent required", - }; - } - return { - ...state, - backup_state: BackupStates.CountrySelecting, - countries: getCountries(continent), - selected_continent: continent, - }; - } else { - return { - code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID, - hint: `Unsupported action '${action}'`, - }; - } - } - if (state.backup_state === BackupStates.CountrySelecting) { - if (action === "back") { - return { - ...state, - backup_state: BackupStates.ContinentSelecting, - countries: undefined, - }; - } else if (action === "select_country") { - const countryCode = args.country_code; - if (typeof countryCode !== "string") { - return { - code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID, - hint: "country_code required", - }; - } - const currencies = args.currencies; - return backupSelectCountry(state, countryCode, currencies); - } else { - return { - code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID, - hint: `Unsupported action '${action}'`, - }; - } - } - if (state.backup_state === BackupStates.UserAttributesCollecting) { - if (action === "back") { - return { - ...state, - backup_state: BackupStates.CountrySelecting, - }; - } else if (action === "enter_user_attributes") { - const ta = args as ActionArgEnterUserAttributes; - return backupEnterUserAttributes(state, ta.identity_attributes); - } else { - return { - code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID, - hint: `Unsupported action '${action}'`, - }; - } - } - if (state.backup_state === BackupStates.AuthenticationsEditing) { - if (action === "back") { - return { - ...state, - backup_state: BackupStates.UserAttributesCollecting, - }; - } else if (action === "add_authentication") { - const ta = args as ActionArgAddAuthentication; - return { - ...state, - authentication_methods: [ - ...(state.authentication_methods ?? []), - ta.authentication_method, - ], - }; - } else if (action === "delete_authentication") { - const ta = args as ActionArgDeleteAuthentication; - const m = state.authentication_methods ?? []; - m.splice(ta.authentication_method, 1); - return { - ...state, - authentication_methods: m, - }; - } else if (action === "next") { - const methods = state.authentication_methods ?? []; - const providers: ProviderInfo[] = []; - for (const provUrl of Object.keys(state.authentication_providers ?? {})) { - const prov = state.authentication_providers![provUrl]; - if ("error_code" in prov) { - continue; - } - if (!("http_status" in prov && prov.http_status === 200)) { - continue; - } - const methodCost: Record = {}; - for (const meth of prov.methods) { - methodCost[meth.type] = meth.usage_fee; - } - providers.push({ - methodCost, - url: provUrl, - }); - } - const pol = suggestPolicies(methods, providers); - console.log("policies", pol); - return { - ...state, - backup_state: BackupStates.PoliciesReviewing, - ...pol, - }; - } else { - return { - code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID, - hint: `Unsupported action '${action}'`, - }; - } +async function backupSelectContinent( + state: ReducerStateBackup, + args: ActionArgSelectContinent, +): Promise { + const countries = getCountries(args.continent); + if (countries.length <= 0) { + return { + code: TalerErrorCode.ANASTASIS_REDUCER_INPUT_INVALID, + hint: "continent not found", + }; } - if (state.backup_state === BackupStates.PoliciesReviewing) { - if (action === "back") { - return { - ...state, - backup_state: BackupStates.AuthenticationsEditing, - }; - } else if (action === "delete_policy") { - const ta = args as ActionArgDeletePolicy; - const policies = [...(state.policies ?? [])]; - policies.splice(ta.policy_index, 1); - return { - ...state, - policies, - }; - } else if (action === "next") { - return { - ...state, - backup_state: BackupStates.SecretEditing, - }; - } else { - return { - code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID, - hint: `Unsupported action '${action}'`, - }; + return { + ...state, + backup_state: BackupStates.CountrySelecting, + countries, + selected_continent: args.continent, + }; +} + +async function recoverySelectContinent( + state: ReducerStateRecovery, + args: ActionArgSelectContinent, +): Promise { + const countries = getCountries(args.continent); + return { + ...state, + recovery_state: RecoveryStates.CountrySelecting, + countries, + selected_continent: args.continent, + }; +} + +interface TransitionImpl { + argCodec: Codec; + handler: (s: S, args: T) => Promise; +} + +interface Transition { + [x: string]: TransitionImpl; +} + +function transition( + action: string, + argCodec: Codec, + handler: (s: S, args: T) => Promise, +): Transition { + return { + [action]: { + argCodec, + handler, + }, + }; +} + +function transitionBackupJump( + action: string, + st: BackupStates, +): Transition { + return { + [action]: { + argCodec: codecForAny(), + handler: async (s, a) => ({ ...s, backup_state: st }), + }, + }; +} + +function transitionRecoveryJump( + action: string, + st: RecoveryStates, +): Transition { + return { + [action]: { + argCodec: codecForAny(), + handler: async (s, a) => ({ ...s, recovery_state: st }), + }, + }; +} + +async function addAuthentication( + state: ReducerStateBackup, + args: ActionArgAddAuthentication, +): Promise { + return { + ...state, + authentication_methods: [ + ...(state.authentication_methods ?? []), + args.authentication_method, + ], + }; +} + +async function deleteAuthentication( + state: ReducerStateBackup, + args: ActionArgDeleteAuthentication, +): Promise { + const m = state.authentication_methods ?? []; + m.splice(args.authentication_method, 1); + return { + ...state, + authentication_methods: m, + }; +} + +async function deletePolicy( + state: ReducerStateBackup, + args: ActionArgDeletePolicy, +): Promise { + const policies = [...(state.policies ?? [])]; + policies.splice(args.policy_index, 1); + return { + ...state, + policies, + }; +} + +async function addPolicy( + state: ReducerStateBackup, + args: ActionArgsAddPolicy, +): Promise { + return { + ...state, + policies: [ + ...(state.policies ?? []), + { + methods: args.policy, + }, + ], + }; +} + +async function nextFromAuthenticationsEditing( + state: ReducerStateBackup, + args: {}, +): Promise { + const methods = state.authentication_methods ?? []; + const providers: ProviderInfo[] = []; + for (const provUrl of Object.keys(state.authentication_providers ?? {})) { + const prov = state.authentication_providers![provUrl]; + if ("error_code" in prov) { + continue; } - } - if (state.backup_state === BackupStates.SecretEditing) { - if (action === "back") { - return { - ...state, - backup_state: BackupStates.PoliciesReviewing, - }; - } else if (action === "enter_secret_name") { - const ta = args as ActionArgEnterSecretName; - return { - ...state, - secret_name: ta.name, - }; - } else if (action === "enter_secret") { - const ta = args as ActionArgEnterSecret; - return { - ...state, - expiration: ta.expiration, - core_secret: { - mime: ta.secret.mime ?? "text/plain", - value: ta.secret.value, - }, - }; - } else if (action === "next") { - return uploadSecret(state); - } else { - return { - code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID, - hint: `Unsupported action '${action}'`, - }; + if (!("http_status" in prov && prov.http_status === 200)) { + continue; } - } - if (state.backup_state === BackupStates.BackupFinished) { - if (action === "back") { - return { - ...state, - backup_state: BackupStates.SecretEditing, - }; - } else { - return { - code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID, - hint: `Unsupported action '${action}'`, - }; + const methodCost: Record = {}; + for (const meth of prov.methods) { + methodCost[meth.type] = meth.usage_fee; } + providers.push({ + methodCost, + url: provUrl, + }); } + const pol = suggestPolicies(methods, providers); + return { + ...state, + backup_state: BackupStates.PoliciesReviewing, + ...pol, + }; +} - if (state.recovery_state === RecoveryStates.ContinentSelecting) { - if (action === "select_continent") { - const continent: string = args.continent; - if (typeof continent !== "string") { - return { - code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID, - hint: "continent required", - }; - } - return { - ...state, - recovery_state: RecoveryStates.CountrySelecting, - countries: getCountries(continent), - selected_continent: continent, - }; - } else { - return { - code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID, - hint: `Unsupported action '${action}'`, - }; +async function updateUploadFees( + state: ReducerStateBackup, +): Promise { + for (const prov of state.policy_providers ?? []) { + const info = state.authentication_providers![prov.provider_url]; + if (!("currency" in info)) { + continue; } } + return { ...state, upload_fees: [] }; +} - if (state.recovery_state === RecoveryStates.CountrySelecting) { - if (action === "back") { - return { - ...state, - recovery_state: RecoveryStates.ContinentSelecting, - countries: undefined, - }; - } else if (action === "select_country") { - const countryCode = args.country_code; - if (typeof countryCode !== "string") { - return { - code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID, - hint: "country_code required", - }; - } - const currencies = args.currencies; - return recoverySelectCountry(state, countryCode, currencies); - } else { - return { - code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID, - hint: `Unsupported action '${action}'`, - }; - } - } +async function enterSecret( + state: ReducerStateBackup, + args: ActionArgEnterSecret, +): Promise { + return { + ...state, + expiration: args.expiration, + core_secret: { + mime: args.secret.mime ?? "text/plain", + value: args.secret.value, + }, + }; +} - if (state.recovery_state === RecoveryStates.UserAttributesCollecting) { - if (action === "back") { - return { - ...state, - recovery_state: RecoveryStates.CountrySelecting, - }; - } else if (action === "enter_user_attributes") { - const ta = args as ActionArgEnterUserAttributes; - return recoveryEnterUserAttributes(state, ta.identity_attributes); - } else { - return { - code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID, - hint: `Unsupported action '${action}'`, - }; - } +async function nextFromChallengeSelecting( + state: ReducerStateRecovery, + args: void, +): Promise { + const s2 = await tryRecoverSecret(state); + if (s2.recovery_state === RecoveryStates.RecoveryFinished) { + return s2; } + return { + code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID, + hint: "Not enough challenges solved", + }; +} - if (state.recovery_state === RecoveryStates.SecretSelecting) { - if (action === "back") { - return { - ...state, - recovery_state: RecoveryStates.UserAttributesCollecting, - }; - } else if (action === "next") { - return { - ...state, - recovery_state: RecoveryStates.ChallengeSelecting, - }; - } else { - return { - code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID, - hint: `Unsupported action '${action}'`, - }; - } - } +async function enterSecretName( + state: ReducerStateBackup, + args: ActionArgEnterSecretName, +): Promise { + return { + ...state, + secret_name: args.name, + }; +} - if (state.recovery_state === RecoveryStates.ChallengeSelecting) { - if (action === "select_challenge") { - const ta: ActionArgsSelectChallenge = args; - return selectChallenge(state, ta); - } else if (action === "back") { - return { - ...state, - recovery_state: RecoveryStates.SecretSelecting, - }; - } else if (action === "next") { - const s2 = await tryRecoverSecret(state); - if (s2.recovery_state === RecoveryStates.RecoveryFinished) { - return s2; - } - return { - code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID, - hint: "Not enough challenges solved", - }; - } else { - return { - code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID, - hint: `Unsupported action '${action}'`, - }; - } - } +async function updateSecretExpiration( + state: ReducerStateBackup, + args: ActionArgsUpdateExpiration, +): Promise { + // FIXME: implement! + return { + ...state, + expiration: args.expiration, + }; +} - if (state.recovery_state === RecoveryStates.ChallengeSolving) { - if (action === "back") { - const ta: ActionArgsSelectChallenge = args; - return { - ...state, - selected_challenge_uuid: undefined, - recovery_state: RecoveryStates.ChallengeSelecting, - }; - } else if (action === "solve_challenge") { - const ta: ActionArgsSolveChallengeRequest = args; - return solveChallenge(state, ta); - } else { - return { - code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID, - hint: `Unsupported action '${action}'`, - }; - } - } +const backupTransitions: Record< + BackupStates, + Transition +> = { + [BackupStates.ContinentSelecting]: { + ...transition( + "select_continent", + codecForActionArgSelectContinent(), + backupSelectContinent, + ), + }, + [BackupStates.CountrySelecting]: { + ...transitionBackupJump("back", BackupStates.ContinentSelecting), + ...transition( + "select_country", + codecForActionArgSelectCountry(), + backupSelectCountry, + ), + ...transition( + "select_continent", + codecForActionArgSelectContinent(), + backupSelectContinent, + ), + }, + [BackupStates.UserAttributesCollecting]: { + ...transitionBackupJump("back", BackupStates.CountrySelecting), + ...transition( + "enter_user_attributes", + codecForActionArgEnterUserAttributes(), + backupEnterUserAttributes, + ), + }, + [BackupStates.AuthenticationsEditing]: { + ...transitionBackupJump("back", BackupStates.UserAttributesCollecting), + ...transition("add_authentication", codecForAny(), addAuthentication), + ...transition("delete_authentication", codecForAny(), deleteAuthentication), + ...transition("next", codecForAny(), nextFromAuthenticationsEditing), + }, + [BackupStates.PoliciesReviewing]: { + ...transitionBackupJump("back", BackupStates.AuthenticationsEditing), + ...transitionBackupJump("next", BackupStates.SecretEditing), + ...transition("add_policy", codecForActionArgsAddPolicy(), addPolicy), + ...transition("delete_policy", codecForAny(), deletePolicy), + }, + [BackupStates.SecretEditing]: { + ...transitionBackupJump("back", BackupStates.PoliciesPaying), + ...transition("next", codecForAny(), uploadSecret), + ...transition("enter_secret", codecForAny(), enterSecret), + ...transition( + "update_expiration", + codecForActionArgsUpdateExpiration(), + updateSecretExpiration, + ), + ...transition("enter_secret_name", codecForAny(), enterSecretName), + }, + [BackupStates.PoliciesPaying]: {}, + [BackupStates.TruthsPaying]: {}, + [BackupStates.PoliciesPaying]: {}, + [BackupStates.BackupFinished]: { + ...transitionBackupJump("back", BackupStates.SecretEditing), + }, +}; + +const recoveryTransitions: Record< + RecoveryStates, + Transition +> = { + [RecoveryStates.ContinentSelecting]: { + ...transition( + "select_continent", + codecForActionArgSelectContinent(), + recoverySelectContinent, + ), + }, + [RecoveryStates.CountrySelecting]: { + ...transitionRecoveryJump("back", RecoveryStates.ContinentSelecting), + ...transition( + "select_country", + codecForActionArgSelectCountry(), + recoverySelectCountry, + ), + ...transition( + "select_continent", + codecForActionArgSelectContinent(), + recoverySelectContinent, + ), + }, + [RecoveryStates.UserAttributesCollecting]: { + ...transitionRecoveryJump("back", RecoveryStates.CountrySelecting), + ...transition( + "enter_user_attributes", + codecForActionArgEnterUserAttributes(), + recoveryEnterUserAttributes, + ), + }, + [RecoveryStates.SecretSelecting]: { + ...transitionRecoveryJump("back", RecoveryStates.UserAttributesCollecting), + ...transitionRecoveryJump("next", RecoveryStates.ChallengeSelecting), + }, + [RecoveryStates.ChallengeSelecting]: { + ...transitionRecoveryJump("back", RecoveryStates.SecretSelecting), + ...transition( + "select_challenge", + codecForActionArgSelectChallenge(), + selectChallenge, + ), + ...transition("next", codecForAny(), nextFromChallengeSelecting), + }, + [RecoveryStates.ChallengeSolving]: { + ...transitionRecoveryJump("back", RecoveryStates.ChallengeSelecting), + ...transition("solve_challenge", codecForAny(), solveChallenge), + }, + [RecoveryStates.ChallengePaying]: {}, + [RecoveryStates.RecoveryFinished]: {}, +}; - if (state.recovery_state === RecoveryStates.RecoveryFinished) { - if (action === "back") { - const ta: ActionArgsSelectChallenge = args; - return { - ...state, - selected_challenge_uuid: undefined, - recovery_state: RecoveryStates.ChallengeSelecting, - }; - } else if (action === "solve_challenge") { - const ta: ActionArgsSolveChallengeRequest = args; - return solveChallenge(state, ta); - } else { - return { - code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID, - hint: `Unsupported action '${action}'`, - }; +export async function reduceAction( + state: ReducerState, + action: string, + args: any, +): Promise { + let h: TransitionImpl; + let stateName: string; + if ("backup_state" in state && state.backup_state) { + stateName = state.backup_state; + h = backupTransitions[state.backup_state][action]; + } else if ("recovery_state" in state && state.recovery_state) { + stateName = state.recovery_state; + h = recoveryTransitions[state.recovery_state][action]; + } else { + return { + code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID, + hint: `Invalid state (needs backup_state or recovery_state)`, + }; + } + if (!h) { + return { + code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID, + hint: `Unsupported action '${action}' in state '${stateName}'`, + }; + } + let parsedArgs: any; + try { + parsedArgs = h.argCodec.decode(args); + } catch (e: any) { + return { + code: TalerErrorCode.ANASTASIS_REDUCER_INPUT_INVALID, + hint: "argument validation failed", + message: e.toString(), + }; + } + try { + return await h.handler(state, parsedArgs); + } catch (e) { + logger.error("action handler failed"); + if (e instanceof ReducerError) { + return e.errorJson; } + throw e; } - - return { - code: TalerErrorCode.ANASTASIS_REDUCER_ACTION_INVALID, - hint: "Reducer action invalid", - }; } diff --git a/packages/anastasis-core/src/reducer-types.ts b/packages/anastasis-core/src/reducer-types.ts index 57f67f0d0..03883ce17 100644 --- a/packages/anastasis-core/src/reducer-types.ts +++ b/packages/anastasis-core/src/reducer-types.ts @@ -1,4 +1,14 @@ -import { Duration, Timestamp } from "@gnu-taler/taler-util"; +import { + AmountString, + buildCodecForObject, + codecForAny, + codecForList, + codecForNumber, + codecForString, + codecForTimestamp, + Duration, + Timestamp, +} from "@gnu-taler/taler-util"; import { KeyShare } from "./crypto.js"; import { RecoveryDocument } from "./recovery-document-types.js"; @@ -23,7 +33,7 @@ export interface Policy { authentication_method: number; provider: string; }[]; -} +} export interface PolicyProvider { provider_url: string; @@ -70,7 +80,9 @@ export interface ReducerStateBackup { core_secret?: CoreSecret; - expiration?: Duration; + expiration?: Timestamp; + + upload_fees?: AmountString[]; } export interface AuthMethod { @@ -94,8 +106,8 @@ export interface UserAttributeSpec { uuid: string; widget: string; optional?: boolean; - 'validation-regex': string | undefined; - 'validation-logic': string | undefined; + "validation-regex": string | undefined; + "validation-logic": string | undefined; } export interface RecoveryInternalData { @@ -244,6 +256,11 @@ export interface ActionArgEnterUserAttributes { identity_attributes: Record; } +export const codecForActionArgEnterUserAttributes = () => + buildCodecForObject() + .property("identity_attributes", codecForAny()) + .build("ActionArgEnterUserAttributes"); + export interface ActionArgAddAuthentication { authentication_method: { type: string; @@ -270,15 +287,69 @@ export interface ActionArgEnterSecret { value: string; mime?: string; }; - expiration: Duration; + expiration: Timestamp; +} + +export interface ActionArgSelectContinent { + continent: string; } +export const codecForActionArgSelectContinent = () => + buildCodecForObject() + .property("continent", codecForString()) + .build("ActionArgSelectContinent"); + +export interface ActionArgSelectCountry { + country_code: string; + currencies: string[]; +} + +export const codecForActionArgSelectCountry = () => + buildCodecForObject() + .property("country_code", codecForString()) + .property("currencies", codecForList(codecForString())) + .build("ActionArgSelectCountry"); + export interface ActionArgsSelectChallenge { uuid: string; } +export const codecForActionArgSelectChallenge = () => + buildCodecForObject() + .property("uuid", codecForString()) + .build("ActionArgSelectChallenge"); + export type ActionArgsSolveChallengeRequest = SolveChallengeAnswerRequest; export interface SolveChallengeAnswerRequest { answer: string; } + +export interface PolicyMember { + authentication_method: number; + provider: string; +} + +export interface ActionArgsAddPolicy { + policy: PolicyMember[]; +} + +export const codecForPolicyMember = () => + buildCodecForObject() + .property("authentication_method", codecForNumber()) + .property("provider", codecForString()) + .build("PolicyMember"); + +export const codecForActionArgsAddPolicy = () => + buildCodecForObject() + .property("policy", codecForList(codecForPolicyMember())) + .build("ActionArgsAddPolicy"); + +export interface ActionArgsUpdateExpiration { + expiration: Timestamp; +} + +export const codecForActionArgsUpdateExpiration = () => + buildCodecForObject() + .property("expiration", codecForTimestamp) + .build("ActionArgsUpdateExpiration"); diff --git a/packages/taler-util/src/clk.ts b/packages/taler-util/src/clk.ts new file mode 100644 index 000000000..d172eed48 --- /dev/null +++ b/packages/taler-util/src/clk.ts @@ -0,0 +1,620 @@ +/* + This file is part of GNU Taler + (C) 2019 GNUnet e.V. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see + */ + +/** + * Imports. + */ +import process from "process"; +import path from "path"; +import readline from "readline"; + +export namespace clk { + class Converter {} + + export const INT = new Converter(); + export const STRING: Converter = new Converter(); + + export interface OptionArgs { + help?: string; + default?: T; + onPresentHandler?: (v: T) => void; + } + + export interface ArgumentArgs { + metavar?: string; + help?: string; + default?: T; + } + + export interface SubcommandArgs { + help?: string; + } + + export interface FlagArgs { + help?: string; + } + + export interface ProgramArgs { + help?: string; + } + + interface ArgumentDef { + name: string; + conv: Converter; + args: ArgumentArgs; + required: boolean; + } + + interface SubcommandDef { + commandGroup: CommandGroup; + name: string; + args: SubcommandArgs; + } + + type ActionFn = (x: TG) => void; + + type SubRecord = { + [Y in S]: { [X in N]: V }; + }; + + interface OptionDef { + name: string; + flagspec: string[]; + /** + * Converter, only present for options, not for flags. + */ + conv?: Converter; + args: OptionArgs; + isFlag: boolean; + required: boolean; + } + + function splitOpt(opt: string): { key: string; value?: string } { + const idx = opt.indexOf("="); + if (idx == -1) { + return { key: opt }; + } + return { key: opt.substring(0, idx), value: opt.substring(idx + 1) }; + } + + function formatListing(key: string, value?: string): string { + const res = " " + key; + if (!value) { + return res; + } + if (res.length >= 25) { + return res + "\n" + " " + value; + } else { + return res.padEnd(24) + " " + value; + } + } + + export class CommandGroup { + private shortOptions: { [name: string]: OptionDef } = {}; + private longOptions: { [name: string]: OptionDef } = {}; + private subcommandMap: { [name: string]: SubcommandDef } = {}; + private subcommands: SubcommandDef[] = []; + private options: OptionDef[] = []; + private arguments: ArgumentDef[] = []; + + private myAction?: ActionFn; + + constructor( + private argKey: string, + private name: string | null, + private scArgs: SubcommandArgs, + ) {} + + action(f: ActionFn): void { + if (this.myAction) { + throw Error("only one action supported per command"); + } + this.myAction = f; + } + + requiredOption( + name: N, + flagspec: string[], + conv: Converter, + args: OptionArgs = {}, + ): CommandGroup> { + const def: OptionDef = { + args: args, + conv: conv, + flagspec: flagspec, + isFlag: false, + required: true, + name: name as string, + }; + this.options.push(def); + for (const flag of flagspec) { + if (flag.startsWith("--")) { + const flagname = flag.substring(2); + this.longOptions[flagname] = def; + } else if (flag.startsWith("-")) { + const flagname = flag.substring(1); + this.shortOptions[flagname] = def; + } else { + throw Error("option must start with '-' or '--'"); + } + } + return this as any; + } + + maybeOption( + name: N, + flagspec: string[], + conv: Converter, + args: OptionArgs = {}, + ): CommandGroup> { + const def: OptionDef = { + args: args, + conv: conv, + flagspec: flagspec, + isFlag: false, + required: false, + name: name as string, + }; + this.options.push(def); + for (const flag of flagspec) { + if (flag.startsWith("--")) { + const flagname = flag.substring(2); + this.longOptions[flagname] = def; + } else if (flag.startsWith("-")) { + const flagname = flag.substring(1); + this.shortOptions[flagname] = def; + } else { + throw Error("option must start with '-' or '--'"); + } + } + return this as any; + } + + requiredArgument( + name: N, + conv: Converter, + args: ArgumentArgs = {}, + ): CommandGroup> { + const argDef: ArgumentDef = { + args: args, + conv: conv, + name: name as string, + required: true, + }; + this.arguments.push(argDef); + return this as any; + } + + maybeArgument( + name: N, + conv: Converter, + args: ArgumentArgs = {}, + ): CommandGroup> { + const argDef: ArgumentDef = { + args: args, + conv: conv, + name: name as string, + required: false, + }; + this.arguments.push(argDef); + return this as any; + } + + flag( + name: N, + flagspec: string[], + args: OptionArgs = {}, + ): CommandGroup> { + const def: OptionDef = { + args: args, + flagspec: flagspec, + isFlag: true, + required: false, + name: name as string, + }; + this.options.push(def); + for (const flag of flagspec) { + if (flag.startsWith("--")) { + const flagname = flag.substring(2); + this.longOptions[flagname] = def; + } else if (flag.startsWith("-")) { + const flagname = flag.substring(1); + this.shortOptions[flagname] = def; + } else { + throw Error("option must start with '-' or '--'"); + } + } + return this as any; + } + + subcommand( + argKey: GN, + name: string, + args: SubcommandArgs = {}, + ): CommandGroup { + const cg = new CommandGroup(argKey as string, name, args); + const def: SubcommandDef = { + commandGroup: cg, + name: name as string, + args: args, + }; + cg.flag("help", ["-h", "--help"], { + help: "Show this message and exit.", + }); + this.subcommandMap[name as string] = def; + this.subcommands.push(def); + this.subcommands = this.subcommands.sort((x1, x2) => { + const a = x1.name; + const b = x2.name; + if (a === b) { + return 0; + } else if (a < b) { + return -1; + } else { + return 1; + } + }); + return cg as any; + } + + printHelp(progName: string, parents: CommandGroup[]): void { + let usageSpec = ""; + for (const p of parents) { + usageSpec += (p.name ?? progName) + " "; + if (p.arguments.length >= 1) { + usageSpec += " "; + } + } + usageSpec += (this.name ?? progName) + " "; + if (this.subcommands.length != 0) { + usageSpec += "COMMAND "; + } + for (const a of this.arguments) { + const argName = a.args.metavar ?? a.name; + usageSpec += `<${argName}> `; + } + usageSpec = usageSpec.trimRight(); + console.log(`Usage: ${usageSpec}`); + if (this.scArgs.help) { + console.log(); + console.log(this.scArgs.help); + } + if (this.options.length != 0) { + console.log(); + console.log("Options:"); + for (const opt of this.options) { + let optSpec = opt.flagspec.join(", "); + if (!opt.isFlag) { + optSpec = optSpec + "=VALUE"; + } + console.log(formatListing(optSpec, opt.args.help)); + } + } + + if (this.subcommands.length != 0) { + console.log(); + console.log("Commands:"); + for (const subcmd of this.subcommands) { + console.log(formatListing(subcmd.name, subcmd.args.help)); + } + } + } + + /** + * Run the (sub-)command with the given command line parameters. + */ + run( + progname: string, + parents: CommandGroup[], + unparsedArgs: string[], + parsedArgs: any, + ): void { + let posArgIndex = 0; + let argsTerminated = false; + let i; + let foundSubcommand: CommandGroup | undefined = undefined; + const myArgs: any = (parsedArgs[this.argKey] = {}); + const foundOptions: { [name: string]: boolean } = {}; + const currentName = this.name ?? progname; + for (i = 0; i < unparsedArgs.length; i++) { + const argVal = unparsedArgs[i]; + if (argsTerminated == false) { + if (argVal === "--") { + argsTerminated = true; + continue; + } + if (argVal.startsWith("--")) { + const opt = argVal.substring(2); + const r = splitOpt(opt); + const d = this.longOptions[r.key]; + if (!d) { + console.error( + `error: unknown option '--${r.key}' for ${currentName}`, + ); + process.exit(-1); + throw Error("not reached"); + } + if (d.isFlag) { + if (r.value !== undefined) { + console.error(`error: flag '--${r.key}' does not take a value`); + process.exit(-1); + throw Error("not reached"); + } + foundOptions[d.name] = true; + myArgs[d.name] = true; + } else { + if (r.value === undefined) { + if (i === unparsedArgs.length - 1) { + console.error(`error: option '--${r.key}' needs an argument`); + process.exit(-1); + throw Error("not reached"); + } + myArgs[d.name] = unparsedArgs[i + 1]; + i++; + } else { + myArgs[d.name] = r.value; + } + foundOptions[d.name] = true; + } + continue; + } + if (argVal.startsWith("-") && argVal != "-") { + const optShort = argVal.substring(1); + for (let si = 0; si < optShort.length; si++) { + const chr = optShort[si]; + const opt = this.shortOptions[chr]; + if (!opt) { + console.error(`error: option '-${chr}' not known`); + process.exit(-1); + } + if (opt.isFlag) { + myArgs[opt.name] = true; + foundOptions[opt.name] = true; + } else { + if (si == optShort.length - 1) { + if (i === unparsedArgs.length - 1) { + console.error(`error: option '-${chr}' needs an argument`); + process.exit(-1); + throw Error("not reached"); + } else { + myArgs[opt.name] = unparsedArgs[i + 1]; + i++; + } + } else { + myArgs[opt.name] = optShort.substring(si + 1); + } + foundOptions[opt.name] = true; + break; + } + } + continue; + } + } + if (this.subcommands.length != 0) { + const subcmd = this.subcommandMap[argVal]; + if (!subcmd) { + console.error(`error: unknown command '${argVal}'`); + process.exit(-1); + throw Error("not reached"); + } + foundSubcommand = subcmd.commandGroup; + break; + } else { + const d = this.arguments[posArgIndex]; + if (!d) { + console.error(`error: too many arguments for ${currentName}`); + process.exit(-1); + throw Error("not reached"); + } + myArgs[d.name] = unparsedArgs[i]; + posArgIndex++; + } + } + + if (parsedArgs[this.argKey].help) { + this.printHelp(progname, parents); + process.exit(0); + throw Error("not reached"); + } + + for (let i = posArgIndex; i < this.arguments.length; i++) { + const d = this.arguments[i]; + if (d.required) { + if (d.args.default !== undefined) { + myArgs[d.name] = d.args.default; + } else { + console.error( + `error: missing positional argument '${d.name}' for ${currentName}`, + ); + process.exit(-1); + throw Error("not reached"); + } + } + } + + for (const option of this.options) { + if (option.isFlag == false && option.required == true) { + if (!foundOptions[option.name]) { + if (option.args.default !== undefined) { + myArgs[option.name] = option.args.default; + } else { + const name = option.flagspec.join(","); + console.error(`error: missing option '${name}'`); + process.exit(-1); + throw Error("not reached"); + } + } + } + } + + for (const option of this.options) { + const ph = option.args.onPresentHandler; + if (ph && foundOptions[option.name]) { + ph(myArgs[option.name]); + } + } + + if (foundSubcommand) { + foundSubcommand.run( + progname, + Array.prototype.concat(parents, [this]), + unparsedArgs.slice(i + 1), + parsedArgs, + ); + } else if (this.myAction) { + let r; + try { + r = this.myAction(parsedArgs); + } catch (e) { + console.error(`An error occurred while running ${currentName}`); + console.error(e); + process.exit(1); + } + Promise.resolve(r).catch((e) => { + console.error(`An error occurred while running ${currentName}`); + console.error(e); + process.exit(1); + }); + } else { + this.printHelp(progname, parents); + process.exit(-1); + throw Error("not reached"); + } + } + } + + export class Program { + private mainCommand: CommandGroup; + + constructor(argKey: string, args: ProgramArgs = {}) { + this.mainCommand = new CommandGroup(argKey, null, { + help: args.help, + }); + this.mainCommand.flag("help", ["-h", "--help"], { + help: "Show this message and exit.", + }); + } + + run(): void { + const args = process.argv; + if (args.length < 2) { + console.error( + "Error while parsing command line arguments: not enough arguments", + ); + process.exit(-1); + } + const progname = path.basename(args[1]); + const rest = args.slice(2); + + this.mainCommand.run(progname, [], rest, {}); + } + + subcommand( + argKey: GN, + name: string, + args: SubcommandArgs = {}, + ): CommandGroup { + const cmd = this.mainCommand.subcommand(argKey, name as string, args); + return cmd as any; + } + + requiredOption( + name: N, + flagspec: string[], + conv: Converter, + args: OptionArgs = {}, + ): Program> { + this.mainCommand.requiredOption(name, flagspec, conv, args); + return this as any; + } + + maybeOption( + name: N, + flagspec: string[], + conv: Converter, + args: OptionArgs = {}, + ): Program> { + this.mainCommand.maybeOption(name, flagspec, conv, args); + return this as any; + } + + /** + * Add a flag (option without value) to the program. + */ + flag( + name: N, + flagspec: string[], + args: OptionArgs = {}, + ): Program> { + this.mainCommand.flag(name, flagspec, args); + return this as any; + } + + /** + * Add a required positional argument to the program. + */ + requiredArgument( + name: N, + conv: Converter, + args: ArgumentArgs = {}, + ): Program> { + this.mainCommand.requiredArgument(name, conv, args); + return this as any; + } + + /** + * Add an optional argument to the program. + */ + maybeArgument( + name: N, + conv: Converter, + args: ArgumentArgs = {}, + ): Program> { + this.mainCommand.maybeArgument(name, conv, args); + return this as any; + } + + action(f: ActionFn): void { + this.mainCommand.action(f); + } + } + + export type GetArgType = T extends Program + ? AT + : T extends CommandGroup + ? AT + : any; + + export function program( + argKey: PN, + args: ProgramArgs = {}, + ): Program { + return new Program(argKey as string, args); + } + + export function prompt(question: string): Promise { + const stdinReadline = readline.createInterface({ + input: process.stdin, + output: process.stdout, + }); + return new Promise((resolve, reject) => { + stdinReadline.question(question, (res) => { + resolve(res); + stdinReadline.close(); + }); + }); + } +} diff --git a/packages/taler-util/src/index.node.ts b/packages/taler-util/src/index.node.ts index 018b4767f..bd59f320a 100644 --- a/packages/taler-util/src/index.node.ts +++ b/packages/taler-util/src/index.node.ts @@ -21,3 +21,4 @@ initNodePrng(); export * from "./index.js"; export * from "./talerconfig.js"; export * from "./globbing/minimatch.js"; +export { clk } from "./clk.js"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e22c3067a..ed921a04c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,32 +4,48 @@ importers: .: specifiers: - '@linaria/esbuild': ^3.0.0-beta.7 - '@linaria/shaker': ^3.0.0-beta.7 - esbuild: ^0.12.21 + '@linaria/esbuild': ^3.0.0-beta.13 + '@linaria/shaker': ^3.0.0-beta.13 + esbuild: ^0.12.29 devDependencies: - '@linaria/esbuild': 3.0.0-beta.7 - '@linaria/shaker': 3.0.0-beta.7 - esbuild: 0.12.21 + '@linaria/esbuild': 3.0.0-beta.13 + '@linaria/shaker': 3.0.0-beta.13 + esbuild: 0.12.29 packages/anastasis-core: specifiers: '@gnu-taler/taler-util': workspace:^0.8.3 + '@rollup/plugin-commonjs': ^21.0.1 + '@rollup/plugin-json': ^4.1.0 + '@rollup/plugin-node-resolve': ^13.0.6 ava: ^3.15.0 fetch-ponyfill: ^7.1.0 fflate: ^0.6.0 hash-wasm: ^4.9.0 node-fetch: ^3.0.0 - typescript: ^4.4.3 + rimraf: ^3.0.2 + rollup: ^2.59.0 + rollup-plugin-sourcemaps: ^0.6.3 + source-map-support: ^0.5.19 + tslib: ^2.1.0 + typescript: ^4.4.4 dependencies: '@gnu-taler/taler-util': link:../taler-util fetch-ponyfill: 7.1.0 fflate: 0.6.0 hash-wasm: 4.9.0 node-fetch: 3.0.0 + tslib: 2.3.1 devDependencies: + '@rollup/plugin-commonjs': 21.0.1_rollup@2.59.0 + '@rollup/plugin-json': 4.1.0_rollup@2.59.0 + '@rollup/plugin-node-resolve': 13.0.6_rollup@2.59.0 ava: 3.15.0 - typescript: 4.4.3 + rimraf: 3.0.2 + rollup: 2.59.0 + rollup-plugin-sourcemaps: 0.6.3_rollup@2.59.0 + source-map-support: 0.5.19 + typescript: 4.4.4 packages/anastasis-webui: specifiers: @@ -449,11 +465,23 @@ packages: '@babel/highlight': 7.14.5 dev: true + /@babel/code-frame/7.16.0: + resolution: {integrity: sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.16.0 + dev: true + /@babel/compat-data/7.15.0: resolution: {integrity: sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==} engines: {node: '>=6.9.0'} dev: true + /@babel/compat-data/7.16.0: + resolution: {integrity: sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/core/7.12.9: resolution: {integrity: sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==} engines: {node: '>=6.9.0'} @@ -533,6 +561,15 @@ packages: source-map: 0.5.7 dev: true + /@babel/generator/7.16.0: + resolution: {integrity: sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.16.0 + jsesc: 2.5.2 + source-map: 0.5.7 + dev: true + /@babel/helper-annotate-as-pure/7.14.5: resolution: {integrity: sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==} engines: {node: '>=6.9.0'} @@ -540,6 +577,13 @@ packages: '@babel/types': 7.15.0 dev: true + /@babel/helper-annotate-as-pure/7.16.0: + resolution: {integrity: sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.16.0 + dev: true + /@babel/helper-builder-binary-assignment-operator-visitor/7.14.5: resolution: {integrity: sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==} engines: {node: '>=6.9.0'} @@ -548,6 +592,14 @@ packages: '@babel/types': 7.15.0 dev: true + /@babel/helper-builder-binary-assignment-operator-visitor/7.16.0: + resolution: {integrity: sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-explode-assignable-expression': 7.16.0 + '@babel/types': 7.16.0 + dev: true + /@babel/helper-compilation-targets/7.15.0: resolution: {integrity: sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==} engines: {node: '>=6.9.0'} @@ -586,6 +638,18 @@ packages: semver: 6.3.0 dev: true + /@babel/helper-compilation-targets/7.16.0: + resolution: {integrity: sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.16.0 + '@babel/helper-validator-option': 7.14.5 + browserslist: 4.17.5 + semver: 6.3.0 + dev: true + /@babel/helper-create-class-features-plugin/7.15.0: resolution: {integrity: sha512-MdmDXgvTIi4heDVX/e9EFfeGpugqm9fobBVg/iioE8kueXrOHdRDe36FAY7SnE9xXLVeYCoJR/gdrBEIHRC83Q==} engines: {node: '>=6.9.0'} @@ -636,6 +700,22 @@ packages: - supports-color dev: true + /@babel/helper-create-class-features-plugin/7.16.0: + resolution: {integrity: sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/helper-annotate-as-pure': 7.16.0 + '@babel/helper-function-name': 7.16.0 + '@babel/helper-member-expression-to-functions': 7.16.0 + '@babel/helper-optimise-call-expression': 7.16.0 + '@babel/helper-replace-supers': 7.16.0 + '@babel/helper-split-export-declaration': 7.16.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-create-regexp-features-plugin/7.14.5: resolution: {integrity: sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==} engines: {node: '>=6.9.0'} @@ -668,6 +748,16 @@ packages: regexpu-core: 4.7.1 dev: true + /@babel/helper-create-regexp-features-plugin/7.16.0: + resolution: {integrity: sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/helper-annotate-as-pure': 7.16.0 + regexpu-core: 4.8.0 + dev: true + /@babel/helper-define-polyfill-provider/0.1.5_@babel+core@7.15.0: resolution: {integrity: sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==} peerDependencies: @@ -739,6 +829,23 @@ packages: - supports-color dev: true + /@babel/helper-define-polyfill-provider/0.2.4: + resolution: {integrity: sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ==} + peerDependencies: + '@babel/core': ^7.4.0-0 + dependencies: + '@babel/helper-compilation-targets': 7.16.0 + '@babel/helper-module-imports': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/traverse': 7.16.0 + debug: 4.3.2 + lodash.debounce: 4.0.8 + resolve: 1.20.0 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-explode-assignable-expression/7.14.5: resolution: {integrity: sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==} engines: {node: '>=6.9.0'} @@ -746,6 +853,13 @@ packages: '@babel/types': 7.15.0 dev: true + /@babel/helper-explode-assignable-expression/7.16.0: + resolution: {integrity: sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.16.0 + dev: true + /@babel/helper-function-name/7.14.5: resolution: {integrity: sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==} engines: {node: '>=6.9.0'} @@ -755,6 +869,15 @@ packages: '@babel/types': 7.15.0 dev: true + /@babel/helper-function-name/7.16.0: + resolution: {integrity: sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-get-function-arity': 7.16.0 + '@babel/template': 7.16.0 + '@babel/types': 7.16.0 + dev: true + /@babel/helper-get-function-arity/7.14.5: resolution: {integrity: sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==} engines: {node: '>=6.9.0'} @@ -762,6 +885,13 @@ packages: '@babel/types': 7.15.0 dev: true + /@babel/helper-get-function-arity/7.16.0: + resolution: {integrity: sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.16.0 + dev: true + /@babel/helper-hoist-variables/7.14.5: resolution: {integrity: sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==} engines: {node: '>=6.9.0'} @@ -769,6 +899,13 @@ packages: '@babel/types': 7.15.0 dev: true + /@babel/helper-hoist-variables/7.16.0: + resolution: {integrity: sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.16.0 + dev: true + /@babel/helper-member-expression-to-functions/7.15.0: resolution: {integrity: sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==} engines: {node: '>=6.9.0'} @@ -776,6 +913,13 @@ packages: '@babel/types': 7.15.0 dev: true + /@babel/helper-member-expression-to-functions/7.16.0: + resolution: {integrity: sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.16.0 + dev: true + /@babel/helper-module-imports/7.14.5: resolution: {integrity: sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==} engines: {node: '>=6.9.0'} @@ -783,6 +927,13 @@ packages: '@babel/types': 7.15.0 dev: true + /@babel/helper-module-imports/7.16.0: + resolution: {integrity: sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.16.0 + dev: true + /@babel/helper-module-transforms/7.15.0: resolution: {integrity: sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==} engines: {node: '>=6.9.0'} @@ -799,6 +950,22 @@ packages: - supports-color dev: true + /@babel/helper-module-transforms/7.16.0: + resolution: {integrity: sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-module-imports': 7.16.0 + '@babel/helper-replace-supers': 7.16.0 + '@babel/helper-simple-access': 7.16.0 + '@babel/helper-split-export-declaration': 7.16.0 + '@babel/helper-validator-identifier': 7.15.7 + '@babel/template': 7.16.0 + '@babel/traverse': 7.16.0 + '@babel/types': 7.16.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-optimise-call-expression/7.14.5: resolution: {integrity: sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==} engines: {node: '>=6.9.0'} @@ -806,6 +973,13 @@ packages: '@babel/types': 7.15.0 dev: true + /@babel/helper-optimise-call-expression/7.16.0: + resolution: {integrity: sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.16.0 + dev: true + /@babel/helper-plugin-utils/7.10.4: resolution: {integrity: sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==} dev: true @@ -826,6 +1000,17 @@ packages: - supports-color dev: true + /@babel/helper-remap-async-to-generator/7.16.0: + resolution: {integrity: sha512-MLM1IOMe9aQBqMWxcRw8dcb9jlM86NIw7KA0Wri91Xkfied+dE0QuBFSBjMNvqzmS0OSIDsMNC24dBEkPUi7ew==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-annotate-as-pure': 7.16.0 + '@babel/helper-wrap-function': 7.16.0 + '@babel/types': 7.16.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-replace-supers/7.15.0: resolution: {integrity: sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==} engines: {node: '>=6.9.0'} @@ -838,6 +1023,18 @@ packages: - supports-color dev: true + /@babel/helper-replace-supers/7.16.0: + resolution: {integrity: sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-member-expression-to-functions': 7.16.0 + '@babel/helper-optimise-call-expression': 7.16.0 + '@babel/traverse': 7.16.0 + '@babel/types': 7.16.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-simple-access/7.14.8: resolution: {integrity: sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==} engines: {node: '>=6.9.0'} @@ -845,6 +1042,13 @@ packages: '@babel/types': 7.15.0 dev: true + /@babel/helper-simple-access/7.16.0: + resolution: {integrity: sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.16.0 + dev: true + /@babel/helper-skip-transparent-expression-wrappers/7.14.5: resolution: {integrity: sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==} engines: {node: '>=6.9.0'} @@ -852,6 +1056,13 @@ packages: '@babel/types': 7.15.0 dev: true + /@babel/helper-skip-transparent-expression-wrappers/7.16.0: + resolution: {integrity: sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.16.0 + dev: true + /@babel/helper-split-export-declaration/7.14.5: resolution: {integrity: sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==} engines: {node: '>=6.9.0'} @@ -859,6 +1070,13 @@ packages: '@babel/types': 7.15.0 dev: true + /@babel/helper-split-export-declaration/7.16.0: + resolution: {integrity: sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.16.0 + dev: true + /@babel/helper-validator-identifier/7.12.11: resolution: {integrity: sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==} dev: true @@ -872,6 +1090,11 @@ packages: engines: {node: '>=6.9.0'} dev: true + /@babel/helper-validator-identifier/7.15.7: + resolution: {integrity: sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-validator-option/7.14.5: resolution: {integrity: sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==} engines: {node: '>=6.9.0'} @@ -889,6 +1112,18 @@ packages: - supports-color dev: true + /@babel/helper-wrap-function/7.16.0: + resolution: {integrity: sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-function-name': 7.16.0 + '@babel/template': 7.16.0 + '@babel/traverse': 7.16.0 + '@babel/types': 7.16.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helpers/7.15.3: resolution: {integrity: sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g==} engines: {node: '>=6.9.0'} @@ -925,12 +1160,36 @@ packages: js-tokens: 4.0.0 dev: true + /@babel/highlight/7.16.0: + resolution: {integrity: sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.15.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + /@babel/parser/7.15.3: resolution: {integrity: sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==} engines: {node: '>=6.0.0'} hasBin: true dev: true + /@babel/parser/7.16.2: + resolution: {integrity: sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw==} + engines: {node: '>=6.0.0'} + hasBin: true + dev: true + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.16.2: + resolution: {integrity: sha512-h37CvpLSf8gb2lIJ2CgC3t+EjFbi0t8qS7LCS1xcJIlEXE4czlofwaW7W1HA8zpgOCzI9C1nmoqNR1zWkk0pQg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.14.5: resolution: {integrity: sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==} engines: {node: '>=6.9.0'} @@ -966,6 +1225,17 @@ packages: '@babel/plugin-proposal-optional-chaining': 7.14.5_@babel+core@7.15.0 dev: true + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.16.0: + resolution: {integrity: sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 + '@babel/plugin-proposal-optional-chaining': 7.16.0 + dev: true + /@babel/plugin-proposal-async-generator-functions/7.14.9: resolution: {integrity: sha512-d1lnh+ZnKrFKwtTYdw320+sQWCTwgkB9fmUhNXRADA4akR6wLjaruSGnIEUjpt9HCOwTr4ynFTKu19b7rFRpmw==} engines: {node: '>=6.9.0'} @@ -1007,6 +1277,19 @@ packages: - supports-color dev: true + /@babel/plugin-proposal-async-generator-functions/7.16.0: + resolution: {integrity: sha512-nyYmIo7ZqKsY6P4lnVmBlxp9B3a96CscbLotlsNuktMHahkDwoPYEjXrZHU0Tj844Z9f1IthVxQln57mhkcExw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-remap-async-to-generator': 7.16.0 + '@babel/plugin-syntax-async-generators': 7.8.4 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-proposal-class-properties/7.14.5: resolution: {integrity: sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==} engines: {node: '>=6.9.0'} @@ -1045,6 +1328,18 @@ packages: - supports-color dev: true + /@babel/plugin-proposal-class-properties/7.16.0: + resolution: {integrity: sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-create-class-features-plugin': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-proposal-class-static-block/7.14.5: resolution: {integrity: sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==} engines: {node: '>=6.9.0'} @@ -1086,6 +1381,19 @@ packages: - supports-color dev: true + /@babel/plugin-proposal-class-static-block/7.16.0: + resolution: {integrity: sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/helper-create-class-features-plugin': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-class-static-block': 7.14.5 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-proposal-decorators/7.14.5_@babel+core@7.15.0: resolution: {integrity: sha512-LYz5nvQcvYeRVjui1Ykn28i+3aUiXwQ/3MGoEy0InTaz1pJo/lAzmIDXX+BQny/oufgHzJ6vnEEiXQ8KZjEVFg==} engines: {node: '>=6.9.0'} @@ -1132,6 +1440,16 @@ packages: '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.15.0 dev: true + /@babel/plugin-proposal-dynamic-import/7.16.0: + resolution: {integrity: sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3 + dev: true + /@babel/plugin-proposal-export-default-from/7.14.5_@babel+core@7.15.0: resolution: {integrity: sha512-T8KZ5abXvKMjF6JcoXjgac3ElmXf0AWzJwi2O/42Jk+HmCky3D9+i1B7NPP1FblyceqTevKeV/9szeikFoaMDg==} engines: {node: '>=6.9.0'} @@ -1175,6 +1493,16 @@ packages: '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.15.0 dev: true + /@babel/plugin-proposal-export-namespace-from/7.16.0: + resolution: {integrity: sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3 + dev: true + /@babel/plugin-proposal-json-strings/7.14.5: resolution: {integrity: sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==} engines: {node: '>=6.9.0'} @@ -1207,6 +1535,16 @@ packages: '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.15.0 dev: true + /@babel/plugin-proposal-json-strings/7.16.0: + resolution: {integrity: sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-json-strings': 7.8.3 + dev: true + /@babel/plugin-proposal-logical-assignment-operators/7.14.5: resolution: {integrity: sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==} engines: {node: '>=6.9.0'} @@ -1239,6 +1577,16 @@ packages: '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.15.0 dev: true + /@babel/plugin-proposal-logical-assignment-operators/7.16.0: + resolution: {integrity: sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4 + dev: true + /@babel/plugin-proposal-nullish-coalescing-operator/7.14.5: resolution: {integrity: sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==} engines: {node: '>=6.9.0'} @@ -1271,6 +1619,16 @@ packages: '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.15.0 dev: true + /@babel/plugin-proposal-nullish-coalescing-operator/7.16.0: + resolution: {integrity: sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3 + dev: true + /@babel/plugin-proposal-numeric-separator/7.14.5: resolution: {integrity: sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==} engines: {node: '>=6.9.0'} @@ -1303,6 +1661,16 @@ packages: '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.15.0 dev: true + /@babel/plugin-proposal-numeric-separator/7.16.0: + resolution: {integrity: sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4 + dev: true + /@babel/plugin-proposal-object-rest-spread/7.12.1_@babel+core@7.12.9: resolution: {integrity: sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==} peerDependencies: @@ -1355,6 +1723,19 @@ packages: '@babel/plugin-transform-parameters': 7.14.5_@babel+core@7.15.0 dev: true + /@babel/plugin-proposal-object-rest-spread/7.16.0: + resolution: {integrity: sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.16.0 + '@babel/helper-compilation-targets': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3 + '@babel/plugin-transform-parameters': 7.16.0 + dev: true + /@babel/plugin-proposal-optional-catch-binding/7.14.5: resolution: {integrity: sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==} engines: {node: '>=6.9.0'} @@ -1387,6 +1768,16 @@ packages: '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.15.0 dev: true + /@babel/plugin-proposal-optional-catch-binding/7.16.0: + resolution: {integrity: sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3 + dev: true + /@babel/plugin-proposal-optional-chaining/7.14.5: resolution: {integrity: sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==} engines: {node: '>=6.9.0'} @@ -1422,6 +1813,17 @@ packages: '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.15.0 dev: true + /@babel/plugin-proposal-optional-chaining/7.16.0: + resolution: {integrity: sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 + '@babel/plugin-syntax-optional-chaining': 7.8.3 + dev: true + /@babel/plugin-proposal-private-methods/7.14.5: resolution: {integrity: sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==} engines: {node: '>=6.9.0'} @@ -1460,6 +1862,18 @@ packages: - supports-color dev: true + /@babel/plugin-proposal-private-methods/7.16.0: + resolution: {integrity: sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-create-class-features-plugin': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-proposal-private-property-in-object/7.14.5: resolution: {integrity: sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==} engines: {node: '>=6.9.0'} @@ -1504,6 +1918,20 @@ packages: - supports-color dev: true + /@babel/plugin-proposal-private-property-in-object/7.16.0: + resolution: {integrity: sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-annotate-as-pure': 7.16.0 + '@babel/helper-create-class-features-plugin': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-proposal-unicode-property-regex/7.14.5: resolution: {integrity: sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==} engines: {node: '>=4'} @@ -1536,6 +1964,16 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-proposal-unicode-property-regex/7.16.0: + resolution: {integrity: sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g==} + engines: {node: '>=4'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-create-regexp-features-plugin': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-syntax-async-generators/7.8.4: resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: @@ -2043,6 +2481,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-transform-arrow-functions/7.16.0: + resolution: {integrity: sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-transform-async-to-generator/7.14.5: resolution: {integrity: sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==} engines: {node: '>=6.9.0'} @@ -2084,6 +2531,19 @@ packages: - supports-color dev: true + /@babel/plugin-transform-async-to-generator/7.16.0: + resolution: {integrity: sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-module-imports': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-remap-async-to-generator': 7.16.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-transform-block-scoped-functions/7.14.5: resolution: {integrity: sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==} engines: {node: '>=6.9.0'} @@ -2113,6 +2573,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-transform-block-scoped-functions/7.16.0: + resolution: {integrity: sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-transform-block-scoping/7.15.3: resolution: {integrity: sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==} engines: {node: '>=6.9.0'} @@ -2142,6 +2611,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-transform-block-scoping/7.16.0: + resolution: {integrity: sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-transform-classes/7.14.9: resolution: {integrity: sha512-NfZpTcxU3foGWbl4wxmZ35mTsYJy8oQocbeIMoDAGGFarAmSQlL+LWMkDx/tj6pNotpbX3rltIA4dprgAPOq5A==} engines: {node: '>=6.9.0'} @@ -2195,6 +2673,23 @@ packages: - supports-color dev: true + /@babel/plugin-transform-classes/7.16.0: + resolution: {integrity: sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-annotate-as-pure': 7.16.0 + '@babel/helper-function-name': 7.16.0 + '@babel/helper-optimise-call-expression': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-replace-supers': 7.16.0 + '@babel/helper-split-export-declaration': 7.16.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-transform-computed-properties/7.14.5: resolution: {integrity: sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==} engines: {node: '>=6.9.0'} @@ -2224,6 +2719,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-transform-computed-properties/7.16.0: + resolution: {integrity: sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-transform-destructuring/7.14.7: resolution: {integrity: sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==} engines: {node: '>=6.9.0'} @@ -2253,6 +2757,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-transform-destructuring/7.16.0: + resolution: {integrity: sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-transform-dotall-regex/7.14.5: resolution: {integrity: sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==} engines: {node: '>=6.9.0'} @@ -2285,6 +2798,16 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-transform-dotall-regex/7.16.0: + resolution: {integrity: sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-create-regexp-features-plugin': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-transform-duplicate-keys/7.14.5: resolution: {integrity: sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==} engines: {node: '>=6.9.0'} @@ -2314,6 +2837,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-transform-duplicate-keys/7.16.0: + resolution: {integrity: sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-transform-exponentiation-operator/7.14.5: resolution: {integrity: sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==} engines: {node: '>=6.9.0'} @@ -2346,6 +2878,16 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-transform-exponentiation-operator/7.16.0: + resolution: {integrity: sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-builder-binary-assignment-operator-visitor': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-transform-for-of/7.14.5: resolution: {integrity: sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==} engines: {node: '>=6.9.0'} @@ -2375,6 +2917,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-transform-for-of/7.16.0: + resolution: {integrity: sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-transform-function-name/7.14.5: resolution: {integrity: sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==} engines: {node: '>=6.9.0'} @@ -2407,6 +2958,16 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-transform-function-name/7.16.0: + resolution: {integrity: sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-function-name': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-transform-literals/7.14.5: resolution: {integrity: sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==} engines: {node: '>=6.9.0'} @@ -2436,6 +2997,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-transform-literals/7.16.0: + resolution: {integrity: sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-transform-member-expression-literals/7.14.5: resolution: {integrity: sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==} engines: {node: '>=6.9.0'} @@ -2465,6 +3035,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-transform-member-expression-literals/7.16.0: + resolution: {integrity: sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-transform-modules-amd/7.14.5: resolution: {integrity: sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==} engines: {node: '>=6.9.0'} @@ -2506,6 +3085,19 @@ packages: - supports-color dev: true + /@babel/plugin-transform-modules-amd/7.16.0: + resolution: {integrity: sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-module-transforms': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + babel-plugin-dynamic-import-node: 2.3.3 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-transform-modules-commonjs/7.15.0: resolution: {integrity: sha512-3H/R9s8cXcOGE8kgMlmjYYC9nqr5ELiPkJn4q0mypBrjhYQoc+5/Maq69vV4xRPWnkzZuwJPf5rArxpB/35Cig==} engines: {node: '>=6.9.0'} @@ -2550,6 +3142,20 @@ packages: - supports-color dev: true + /@babel/plugin-transform-modules-commonjs/7.16.0: + resolution: {integrity: sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-module-transforms': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-simple-access': 7.16.0 + babel-plugin-dynamic-import-node: 2.3.3 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-transform-modules-systemjs/7.14.5: resolution: {integrity: sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==} engines: {node: '>=6.9.0'} @@ -2597,6 +3203,21 @@ packages: - supports-color dev: true + /@babel/plugin-transform-modules-systemjs/7.16.0: + resolution: {integrity: sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-hoist-variables': 7.16.0 + '@babel/helper-module-transforms': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-validator-identifier': 7.15.7 + babel-plugin-dynamic-import-node: 2.3.3 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-transform-modules-umd/7.14.5: resolution: {integrity: sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==} engines: {node: '>=6.9.0'} @@ -2635,6 +3256,18 @@ packages: - supports-color dev: true + /@babel/plugin-transform-modules-umd/7.16.0: + resolution: {integrity: sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-module-transforms': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-transform-named-capturing-groups-regex/7.14.9: resolution: {integrity: sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==} engines: {node: '>=6.9.0'} @@ -2664,6 +3297,15 @@ packages: '@babel/helper-create-regexp-features-plugin': 7.14.5_@babel+core@7.15.0 dev: true + /@babel/plugin-transform-named-capturing-groups-regex/7.16.0: + resolution: {integrity: sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/helper-create-regexp-features-plugin': 7.16.0 + dev: true + /@babel/plugin-transform-new-target/7.14.5: resolution: {integrity: sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==} engines: {node: '>=6.9.0'} @@ -2693,6 +3335,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-transform-new-target/7.16.0: + resolution: {integrity: sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-transform-object-assign/7.14.5_@babel+core@7.15.0: resolution: {integrity: sha512-lvhjk4UN9xJJYB1mI5KC0/o1D5EcJXdbhVe+4fSk08D6ZN+iuAIs7LJC+71h8av9Ew4+uRq9452v9R93SFmQlQ==} engines: {node: '>=6.9.0'} @@ -2741,6 +3392,18 @@ packages: - supports-color dev: true + /@babel/plugin-transform-object-super/7.16.0: + resolution: {integrity: sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-replace-supers': 7.16.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-transform-parameters/7.14.5: resolution: {integrity: sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==} engines: {node: '>=6.9.0'} @@ -2780,6 +3443,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-transform-parameters/7.16.0: + resolution: {integrity: sha512-XgnQEm1CevKROPx+udOi/8f8TiGhrUWiHiaUCIp47tE0tpFDjzXNTZc9E5CmCwxNjXTWEVqvRfWZYOTFvMa/ZQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-transform-property-literals/7.14.5: resolution: {integrity: sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==} engines: {node: '>=6.9.0'} @@ -2809,6 +3481,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-transform-property-literals/7.16.0: + resolution: {integrity: sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-transform-react-display-name/7.15.1_@babel+core@7.15.0: resolution: {integrity: sha512-yQZ/i/pUCJAHI/LbtZr413S3VT26qNrEm0M5RRxQJA947/YNYwbZbBaXGDrq6CG5QsZycI1VIP6d7pQaBfP+8Q==} engines: {node: '>=6.9.0'} @@ -2920,6 +3601,15 @@ packages: regenerator-transform: 0.14.5 dev: true + /@babel/plugin-transform-regenerator/7.16.0: + resolution: {integrity: sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + regenerator-transform: 0.14.5 + dev: true + /@babel/plugin-transform-reserved-words/7.14.5: resolution: {integrity: sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==} engines: {node: '>=6.9.0'} @@ -2949,17 +3639,26 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-transform-runtime/7.15.0: - resolution: {integrity: sha512-sfHYkLGjhzWTq6xsuQ01oEsUYjkHRux9fW1iUA68dC7Qd8BS1Unq4aZ8itmQp95zUzIcyR2EbNMTzAicFj+guw==} + /@babel/plugin-transform-reserved-words/7.16.0: + resolution: {integrity: sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-module-imports': 7.14.5 '@babel/helper-plugin-utils': 7.14.5 - babel-plugin-polyfill-corejs2: 0.2.2 - babel-plugin-polyfill-corejs3: 0.2.4 - babel-plugin-polyfill-regenerator: 0.2.2 + dev: true + + /@babel/plugin-transform-runtime/7.16.0: + resolution: {integrity: sha512-zlPf1/XFn5+vWdve3AAhf+Sxl+MVa5VlwTwWgnLx23u4GlatSRQJ3Eoo9vllf0a9il3woQsT4SK+5Z7c06h8ag==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-module-imports': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + babel-plugin-polyfill-corejs2: 0.2.3 + babel-plugin-polyfill-corejs3: 0.3.0 + babel-plugin-polyfill-regenerator: 0.2.3 semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -2984,13 +3683,22 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-transform-shorthand-properties/7.14.5_@babel+core@7.15.0: - resolution: {integrity: sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==} + /@babel/plugin-transform-shorthand-properties/7.14.5_@babel+core@7.15.0: + resolution: {integrity: sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-transform-shorthand-properties/7.16.0: + resolution: {integrity: sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.15.0 '@babel/helper-plugin-utils': 7.14.5 dev: true @@ -3026,6 +3734,16 @@ packages: '@babel/helper-skip-transparent-expression-wrappers': 7.14.5 dev: true + /@babel/plugin-transform-spread/7.16.0: + resolution: {integrity: sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 + dev: true + /@babel/plugin-transform-sticky-regex/7.14.5: resolution: {integrity: sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==} engines: {node: '>=6.9.0'} @@ -3055,6 +3773,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-transform-sticky-regex/7.16.0: + resolution: {integrity: sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-transform-template-literals/7.14.5: resolution: {integrity: sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==} engines: {node: '>=6.9.0'} @@ -3084,6 +3811,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-transform-template-literals/7.16.0: + resolution: {integrity: sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-transform-typeof-symbol/7.14.5: resolution: {integrity: sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==} engines: {node: '>=6.9.0'} @@ -3113,6 +3849,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-transform-typeof-symbol/7.16.0: + resolution: {integrity: sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-transform-typescript/7.15.0_@babel+core@7.13.16: resolution: {integrity: sha512-WIIEazmngMEEHDaPTx0IZY48SaAmjVWe3TRSX7cmJXn0bEv9midFzAjxiruOWYIVf5iQ10vFx7ASDpgEO08L5w==} engines: {node: '>=6.9.0'} @@ -3170,6 +3915,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-transform-unicode-escapes/7.16.0: + resolution: {integrity: sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-transform-unicode-regex/7.14.5: resolution: {integrity: sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==} engines: {node: '>=6.9.0'} @@ -3202,6 +3956,16 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-transform-unicode-regex/7.16.0: + resolution: {integrity: sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-create-regexp-features-plugin': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/preset-env/7.15.0: resolution: {integrity: sha512-FhEpCNFCcWW3iZLg0L2NPE9UerdtsCR6ZcsGHUX6Om6kbCQeL5QZDqFDmeNHC6/fy6UH3jEge7K4qG5uC9In0Q==} engines: {node: '>=6.9.0'} @@ -3453,6 +4217,90 @@ packages: - supports-color dev: true + /@babel/preset-env/7.16.0: + resolution: {integrity: sha512-cdTu/W0IrviamtnZiTfixPfIncr2M1VqRrkjzZWlr1B4TVYimCFK5jkyOdP4qw2MrlKHi+b3ORj6x8GoCew8Dg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.16.0 + '@babel/helper-compilation-targets': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-validator-option': 7.14.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.16.2 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.16.0 + '@babel/plugin-proposal-async-generator-functions': 7.16.0 + '@babel/plugin-proposal-class-properties': 7.16.0 + '@babel/plugin-proposal-class-static-block': 7.16.0 + '@babel/plugin-proposal-dynamic-import': 7.16.0 + '@babel/plugin-proposal-export-namespace-from': 7.16.0 + '@babel/plugin-proposal-json-strings': 7.16.0 + '@babel/plugin-proposal-logical-assignment-operators': 7.16.0 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.16.0 + '@babel/plugin-proposal-numeric-separator': 7.16.0 + '@babel/plugin-proposal-object-rest-spread': 7.16.0 + '@babel/plugin-proposal-optional-catch-binding': 7.16.0 + '@babel/plugin-proposal-optional-chaining': 7.16.0 + '@babel/plugin-proposal-private-methods': 7.16.0 + '@babel/plugin-proposal-private-property-in-object': 7.16.0 + '@babel/plugin-proposal-unicode-property-regex': 7.16.0 + '@babel/plugin-syntax-async-generators': 7.8.4 + '@babel/plugin-syntax-class-properties': 7.12.13 + '@babel/plugin-syntax-class-static-block': 7.14.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3 + '@babel/plugin-syntax-export-namespace-from': 7.8.3 + '@babel/plugin-syntax-json-strings': 7.8.3 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3 + '@babel/plugin-syntax-numeric-separator': 7.10.4 + '@babel/plugin-syntax-object-rest-spread': 7.8.3 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3 + '@babel/plugin-syntax-optional-chaining': 7.8.3 + '@babel/plugin-syntax-private-property-in-object': 7.14.5 + '@babel/plugin-syntax-top-level-await': 7.14.5 + '@babel/plugin-transform-arrow-functions': 7.16.0 + '@babel/plugin-transform-async-to-generator': 7.16.0 + '@babel/plugin-transform-block-scoped-functions': 7.16.0 + '@babel/plugin-transform-block-scoping': 7.16.0 + '@babel/plugin-transform-classes': 7.16.0 + '@babel/plugin-transform-computed-properties': 7.16.0 + '@babel/plugin-transform-destructuring': 7.16.0 + '@babel/plugin-transform-dotall-regex': 7.16.0 + '@babel/plugin-transform-duplicate-keys': 7.16.0 + '@babel/plugin-transform-exponentiation-operator': 7.16.0 + '@babel/plugin-transform-for-of': 7.16.0 + '@babel/plugin-transform-function-name': 7.16.0 + '@babel/plugin-transform-literals': 7.16.0 + '@babel/plugin-transform-member-expression-literals': 7.16.0 + '@babel/plugin-transform-modules-amd': 7.16.0 + '@babel/plugin-transform-modules-commonjs': 7.16.0 + '@babel/plugin-transform-modules-systemjs': 7.16.0 + '@babel/plugin-transform-modules-umd': 7.16.0 + '@babel/plugin-transform-named-capturing-groups-regex': 7.16.0 + '@babel/plugin-transform-new-target': 7.16.0 + '@babel/plugin-transform-object-super': 7.16.0 + '@babel/plugin-transform-parameters': 7.16.0 + '@babel/plugin-transform-property-literals': 7.16.0 + '@babel/plugin-transform-regenerator': 7.16.0 + '@babel/plugin-transform-reserved-words': 7.16.0 + '@babel/plugin-transform-shorthand-properties': 7.16.0 + '@babel/plugin-transform-spread': 7.16.0 + '@babel/plugin-transform-sticky-regex': 7.16.0 + '@babel/plugin-transform-template-literals': 7.16.0 + '@babel/plugin-transform-typeof-symbol': 7.16.0 + '@babel/plugin-transform-unicode-escapes': 7.16.0 + '@babel/plugin-transform-unicode-regex': 7.16.0 + '@babel/preset-modules': 0.1.5 + '@babel/types': 7.16.0 + babel-plugin-polyfill-corejs2: 0.2.3 + babel-plugin-polyfill-corejs3: 0.3.0 + babel-plugin-polyfill-regenerator: 0.2.3 + core-js-compat: 3.19.0 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/preset-modules/0.1.4: resolution: {integrity: sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==} peerDependencies: @@ -3491,6 +4339,18 @@ packages: esutils: 2.0.3 dev: true + /@babel/preset-modules/0.1.5: + resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-proposal-unicode-property-regex': 7.16.0 + '@babel/plugin-transform-dotall-regex': 7.16.0 + '@babel/types': 7.16.0 + esutils: 2.0.3 + dev: true + /@babel/preset-react/7.14.5_@babel+core@7.15.0: resolution: {integrity: sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==} engines: {node: '>=6.9.0'} @@ -3568,6 +4428,13 @@ packages: dependencies: regenerator-runtime: 0.13.9 + /@babel/runtime/7.16.0: + resolution: {integrity: sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.9 + dev: true + /@babel/template/7.14.5: resolution: {integrity: sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==} engines: {node: '>=6.9.0'} @@ -3577,6 +4444,15 @@ packages: '@babel/types': 7.15.0 dev: true + /@babel/template/7.16.0: + resolution: {integrity: sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.16.0 + '@babel/parser': 7.16.2 + '@babel/types': 7.16.0 + dev: true + /@babel/traverse/7.15.0: resolution: {integrity: sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==} engines: {node: '>=6.9.0'} @@ -3594,6 +4470,23 @@ packages: - supports-color dev: true + /@babel/traverse/7.16.0: + resolution: {integrity: sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.16.0 + '@babel/generator': 7.16.0 + '@babel/helper-function-name': 7.16.0 + '@babel/helper-hoist-variables': 7.16.0 + '@babel/helper-split-export-declaration': 7.16.0 + '@babel/parser': 7.16.2 + '@babel/types': 7.16.0 + debug: 4.3.2 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/types/7.15.0: resolution: {integrity: sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==} engines: {node: '>=6.9.0'} @@ -3602,6 +4495,14 @@ packages: to-fast-properties: 2.0.0 dev: true + /@babel/types/7.16.0: + resolution: {integrity: sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.15.7 + to-fast-properties: 2.0.0 + dev: true + /@base2/pretty-print-object/1.0.0: resolution: {integrity: sha512-4Th98KlMHr5+JkxfcoDT//6vY8vM+iSPrLNpHhRyLx2CFYi8e2RfqPLdpbnpo0Q5lQC5hNB79yes07zb02fvCw==} dev: true @@ -4027,36 +4928,36 @@ packages: chalk: 4.1.2 dev: true - /@linaria/babel-preset/3.0.0-beta.4_@babel+core@7.13.16: - resolution: {integrity: sha512-Bjsk4VZUQXK3u04MuLlyP/+/tDd7bWeLXYCOnq4US9H2QFRdka97fm6hH34SRinoHm9fSPCHrj9d+KtY8ge2wg==} + /@linaria/babel-preset/3.0.0-beta.13: + resolution: {integrity: sha512-UeurIwmORp1lG+f69bKquRug7ZFVSrQha6TJWvHmGQIFwFx5qpMCXJLhOp2dUpM4y7/NhbKYXqj58RtG3wi4ZQ==} peerDependencies: '@babel/core': '>=7' dependencies: - '@babel/core': 7.13.16 - '@babel/generator': 7.15.0 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.13.16 - '@babel/template': 7.14.5 - '@linaria/core': 3.0.0-beta.4 + '@babel/generator': 7.16.0 + '@babel/plugin-syntax-dynamic-import': 7.8.3 + '@babel/template': 7.16.0 + '@linaria/core': 3.0.0-beta.13 '@linaria/logger': 3.0.0-beta.3 cosmiconfig: 5.2.1 - source-map: 0.6.1 + source-map: 0.7.3 stylis: 3.5.4 transitivePeerDependencies: - supports-color dev: true - /@linaria/babel-preset/3.0.0-beta.7: - resolution: {integrity: sha512-NE5f//T9ywXZA+W+Pw1YjWKdzskUpaV7GVkxXhkxLM2la1+S4xOoZR1rzW77bR1C9GFFwzZTeb8XP85whb2ZqQ==} + /@linaria/babel-preset/3.0.0-beta.4_@babel+core@7.13.16: + resolution: {integrity: sha512-Bjsk4VZUQXK3u04MuLlyP/+/tDd7bWeLXYCOnq4US9H2QFRdka97fm6hH34SRinoHm9fSPCHrj9d+KtY8ge2wg==} peerDependencies: '@babel/core': '>=7' dependencies: + '@babel/core': 7.13.16 '@babel/generator': 7.15.0 - '@babel/plugin-syntax-dynamic-import': 7.8.3 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.13.16 '@babel/template': 7.14.5 '@linaria/core': 3.0.0-beta.4 '@linaria/logger': 3.0.0-beta.3 cosmiconfig: 5.2.1 - source-map: 0.7.3 + source-map: 0.6.1 stylis: 3.5.4 transitivePeerDependencies: - supports-color @@ -4080,17 +4981,21 @@ packages: - supports-color dev: true + /@linaria/core/3.0.0-beta.13: + resolution: {integrity: sha512-3zEi5plBCOsEzUneRVuQb+2SAx3qaC1dj0FfFAI6zIJQoDWu0dlSwKijMRack7oO9tUWrchfj3OkKQAd1LBdVg==} + dev: true + /@linaria/core/3.0.0-beta.4: resolution: {integrity: sha512-NzxeMDxRt57nR6tLFZ8xIstp5ld9JQPIyp9+TKtQZhoX3oJuUru+S4vXPr1Gach6VaqKKKT5T6fmJgJl9MMprw==} dev: true - /@linaria/esbuild/3.0.0-beta.7: - resolution: {integrity: sha512-ImgwFz/dEe3ea3s4m3QiZV7ssEv8oQVgeMxju0FrkEDg02mWBS8tvU3WTJy0hjb9mUfR8fqJbOZSV33dTrtcww==} + /@linaria/esbuild/3.0.0-beta.13: + resolution: {integrity: sha512-sHG2KNSQ8G96YdY0WgR8nmB49GOvlCMHCFOg2qV5vRgRgF5BepKenZn5a0f7O2KY+J/sp8NnhGe5YO0bFUeQaQ==} peerDependencies: '@babel/core': '>=7' dependencies: - '@linaria/babel-preset': 3.0.0-beta.7 - esbuild: 0.12.21 + '@linaria/babel-preset': 3.0.0-beta.13 + esbuild: 0.12.29 transitivePeerDependencies: - supports-color dev: true @@ -4103,12 +5008,12 @@ packages: - supports-color dev: true - /@linaria/preeval/3.0.0-beta.7: - resolution: {integrity: sha512-fTFgxtjBGKh9P2rsqhBnHTqFo1d8VzznmXKpILM0ClAclVn+FB+KJl+nWyEbQ8nT9/ceRoTwbdZHZ/M3DFHG+w==} + /@linaria/preeval/3.0.0-beta.13: + resolution: {integrity: sha512-0tia6DHxJ9h3/9LWWxseZw8z2wuB0OHwakQrDFV138m3ym3LwHnRalk9VUpIESnnFOiATya20+drUSx0GRxq/Q==} peerDependencies: '@babel/core': '>=7' dependencies: - '@linaria/babel-preset': 3.0.0-beta.7 + '@linaria/babel-preset': 3.0.0-beta.13 transitivePeerDependencies: - supports-color dev: true @@ -4134,19 +5039,20 @@ packages: - supports-color dev: true - /@linaria/shaker/3.0.0-beta.7: - resolution: {integrity: sha512-fWDbbKcS8EiAnoNhTQa+2Or7QyR3Ofyqjtcrb1aeLN2ecVI2u7B5jAZgVPg9euTnhQ2ieUU3G9hh1INkoGKS/A==} + /@linaria/shaker/3.0.0-beta.13: + resolution: {integrity: sha512-/ejyBA63pY5OnGK4VxrcD7FxYdQ/weRuPZyy8YEWgh0vVkyeXegwrfupfn+Nt7Lodnej+hrMexloKjxe2NTKfA==} peerDependencies: '@babel/core': '>=7' dependencies: - '@babel/generator': 7.15.0 - '@babel/plugin-transform-runtime': 7.15.0 - '@babel/plugin-transform-template-literals': 7.14.5 - '@babel/preset-env': 7.15.0 - '@linaria/babel-preset': 3.0.0-beta.7 + '@babel/generator': 7.16.0 + '@babel/plugin-transform-runtime': 7.16.0 + '@babel/plugin-transform-template-literals': 7.16.0 + '@babel/preset-env': 7.16.0 + '@linaria/babel-preset': 3.0.0-beta.13 '@linaria/logger': 3.0.0-beta.3 - '@linaria/preeval': 3.0.0-beta.7 + '@linaria/preeval': 3.0.0-beta.13 babel-plugin-transform-react-remove-prop-types: 0.4.24 + ts-invariant: 0.9.3 transitivePeerDependencies: - supports-color dev: true @@ -4507,6 +5413,22 @@ packages: rollup: 2.56.2 dev: true + /@rollup/plugin-commonjs/21.0.1_rollup@2.59.0: + resolution: {integrity: sha512-EA+g22lbNJ8p5kuZJUYyhhDK7WgJckW5g4pNN7n4mAFUM96VuwUnNT3xr2Db2iCZPI1pJPbGyfT5mS9T1dHfMg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^2.38.3 + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.59.0 + commondir: 1.0.1 + estree-walker: 2.0.2 + glob: 7.1.7 + is-reference: 1.2.1 + magic-string: 0.25.7 + resolve: 1.20.0 + rollup: 2.59.0 + dev: true + /@rollup/plugin-image/2.1.0_rollup@2.56.2: resolution: {integrity: sha512-IiRhjv65A4Rb/9R+gTP2JdIciumkc8c+3xFoUfw3PUkX77SqqzvJ028AfX856E3ZdExMrqY9C9ZVXN46w6rh9A==} engines: {node: '>= 8.0.0'} @@ -4545,6 +5467,15 @@ packages: rollup: 2.56.2 dev: true + /@rollup/plugin-json/4.1.0_rollup@2.59.0: + resolution: {integrity: sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.59.0 + rollup: 2.59.0 + dev: true + /@rollup/plugin-node-resolve/11.1.0_rollup@2.37.1: resolution: {integrity: sha512-ouBBppRdWJKCllDXGzJ7ZIkYbaq+5TmyP0smt1vdJCFfoZhLi31vhpmjLhyo8lreHf4RoeSNllaWrvSqHpHRog==} engines: {node: '>= 10.0.0'} @@ -4605,6 +5536,21 @@ packages: rollup: 2.56.2 dev: true + /@rollup/plugin-node-resolve/13.0.6_rollup@2.59.0: + resolution: {integrity: sha512-sFsPDMPd4gMqnh2gS0uIxELnoRUp5kBl5knxD2EO0778G1oOJv4G1vyT2cpWz75OU2jDVcXhjVUuTAczGyFNKA==} + engines: {node: '>= 10.0.0'} + peerDependencies: + rollup: ^2.42.0 + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.59.0 + '@types/resolve': 1.17.1 + builtin-modules: 3.2.0 + deepmerge: 4.2.2 + is-module: 1.0.0 + resolve: 1.20.0 + rollup: 2.59.0 + dev: true + /@rollup/plugin-replace/2.3.4_rollup@2.37.1: resolution: {integrity: sha512-waBhMzyAtjCL1GwZes2jaE9MjuQ/DQF2BatH3fRivUF3z0JBFrU0U6iBNC/4WR+2rLKhaAhPWDNPYp4mI6RqdQ==} peerDependencies: @@ -4671,6 +5617,18 @@ packages: rollup: 2.56.2 dev: true + /@rollup/pluginutils/3.1.0_rollup@2.59.0: + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.0 + rollup: 2.59.0 + dev: true + /@rollup/pluginutils/4.1.1: resolution: {integrity: sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ==} engines: {node: '>= 8.0.0'} @@ -9034,6 +9992,18 @@ packages: - supports-color dev: true + /babel-plugin-polyfill-corejs2/0.2.3: + resolution: {integrity: sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.16.0 + '@babel/helper-define-polyfill-provider': 0.2.4 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + /babel-plugin-polyfill-corejs3/0.1.7_@babel+core@7.15.0: resolution: {integrity: sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==} peerDependencies: @@ -9081,6 +10051,17 @@ packages: - supports-color dev: true + /babel-plugin-polyfill-corejs3/0.3.0: + resolution: {integrity: sha512-JLwi9vloVdXLjzACL80j24bG6/T1gYxwowG44dg6HN/7aTPdyPbJJidf6ajoA3RPHHtW0j9KMrSOLpIZpAnPpg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-define-polyfill-provider': 0.2.4 + core-js-compat: 3.19.0 + transitivePeerDependencies: + - supports-color + dev: true + /babel-plugin-polyfill-regenerator/0.2.2: resolution: {integrity: sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==} peerDependencies: @@ -9113,6 +10094,16 @@ packages: - supports-color dev: true + /babel-plugin-polyfill-regenerator/0.2.3: + resolution: {integrity: sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-define-polyfill-provider': 0.2.4 + transitivePeerDependencies: + - supports-color + dev: true + /babel-plugin-syntax-jsx/6.18.0: resolution: {integrity: sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=} dev: true @@ -9458,6 +10449,18 @@ packages: node-releases: 1.1.75 dev: true + /browserslist/4.17.5: + resolution: {integrity: sha512-I3ekeB92mmpctWBoLXe0d5wPS2cBuRvvW0JyyJHMrk9/HmP2ZjrTboNAZ8iuGqaEIlKguljbQY32OkOJIRrgoA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001274 + electron-to-chromium: 1.3.886 + escalade: 3.1.1 + node-releases: 2.0.1 + picocolors: 1.0.0 + dev: true + /bser/2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: @@ -9691,6 +10694,10 @@ packages: resolution: {integrity: sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A==} dev: true + /caniuse-lite/1.0.30001274: + resolution: {integrity: sha512-+Nkvv0fHyhISkiMIjnyjmf5YJcQ1IQHZN6U9TLUMroWR38FNwpsC51Gb68yueafX1V6ifOisInSgP9WJFS13ew==} + dev: true + /capture-exit/2.0.0: resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==} engines: {node: 6.* || 8.* || >= 10.*} @@ -10346,6 +11353,13 @@ packages: semver: 7.0.0 dev: true + /core-js-compat/3.19.0: + resolution: {integrity: sha512-R09rKZ56ccGBebjTLZHvzDxhz93YPT37gBm6qUhnwj3Kt7aCjjZWD1injyNbyeFHxNKfeZBSyds6O9n3MKq1sw==} + dependencies: + browserslist: 4.17.5 + semver: 7.0.0 + dev: true + /core-js-pure/3.16.2: resolution: {integrity: sha512-oxKe64UH049mJqrKkynWp6Vu0Rlm/BTXO/bJZuN2mmR3RtOFNepLlSWDd1eo16PzHpQAoNG97rLU1V/YxesJjw==} requiresBuild: true @@ -11404,6 +12418,10 @@ packages: resolution: {integrity: sha512-YcSRImHt6JZZ2sSuQ4Bzajtk98igQ0iKkksqlzZLzbh4p0OIyJRSvUbsgqfcR8txdfsoYCc4ym306t4p2kP/aw==} dev: true + /electron-to-chromium/1.3.886: + resolution: {integrity: sha512-+vYdeBosI63VkCtNWnEVFjgNd/IZwvnsWkKyPtWAvrhA+XfByKoBJcbsMgudVU/bUcGAF9Xp3aXn96voWlc3oQ==} + dev: true + /element-resize-detector/1.2.3: resolution: {integrity: sha512-+dhNzUgLpq9ol5tyhoG7YLoXL3ssjfFW+0gpszXPwRU6NjGr1fVHMEAF8fVzIiRJq57Nre0RFeIjJwI8Nh2NmQ==} dependencies: @@ -11696,8 +12714,8 @@ packages: resolution: {integrity: sha512-EmTr31wppcaIAgblChZiuN/l9Y7DPyw8Xtbg7fIVngn6zMW+IEBJDJngeKC3x6wr0V/vcA2wqeFnaw1bFJbDdA==} dev: true - /esbuild/0.12.21: - resolution: {integrity: sha512-7hyXbU3g94aREufI/5nls7Xcc+RGQeZWZApm6hoBaFvt2BPtpT4TjFMQ9Tb1jU8XyBGz00ShmiyflCogphMHFQ==} + /esbuild/0.12.29: + resolution: {integrity: sha512-w/XuoBCSwepyiZtIRsKsetiLDUVGPVw1E/R3VTFSecIy8UR7Cq3SOtwKHJMFoVqqVG36aGkzh4e8BvpO1Fdc7g==} hasBin: true requiresBuild: true dev: true @@ -16294,6 +17312,10 @@ packages: resolution: {integrity: sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==} dev: true + /node-releases/2.0.1: + resolution: {integrity: sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==} + dev: true + /nodent-compiler/3.2.13: resolution: {integrity: sha512-nzzWPXZwSdsWie34om+4dLrT/5l1nT/+ig1v06xuSgMtieJVAnMQFuZihUwREM+M7dFso9YoHfDmweexEXXrrw==} engines: {'0': n, '1': o, '2': d, '3': e, '4': ' ', '5': '>', '6': '=', '7': ' ', '8': '0', '9': ., '10': '1', '11': '0', '12': ., '13': '0'} @@ -17054,6 +18076,10 @@ packages: resolution: {integrity: sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=} dev: true + /picocolors/1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + /picomatch/2.2.2: resolution: {integrity: sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==} engines: {node: '>=8.6'} @@ -18891,6 +19917,13 @@ packages: regenerate: 1.4.2 dev: true + /regenerate-unicode-properties/9.0.0: + resolution: {integrity: sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + dev: true + /regenerate/1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} dev: true @@ -18909,7 +19942,7 @@ packages: /regenerator-transform/0.14.5: resolution: {integrity: sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==} dependencies: - '@babel/runtime': 7.15.3 + '@babel/runtime': 7.16.0 dev: true /regex-not/1.0.2: @@ -18950,6 +19983,18 @@ packages: unicode-match-property-value-ecmascript: 1.2.0 dev: true + /regexpu-core/4.8.0: + resolution: {integrity: sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 9.0.0 + regjsgen: 0.5.2 + regjsparser: 0.7.0 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.0.0 + dev: true + /registry-auth-token/4.2.1: resolution: {integrity: sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==} engines: {node: '>=6.0.0'} @@ -18975,6 +20020,13 @@ packages: jsesc: 0.5.0 dev: true + /regjsparser/0.7.0: + resolution: {integrity: sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: true + /relateurl/0.2.7: resolution: {integrity: sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=} engines: {node: '>= 0.10'} @@ -19328,6 +20380,21 @@ packages: source-map-resolve: 0.6.0 dev: true + /rollup-plugin-sourcemaps/0.6.3_rollup@2.59.0: + resolution: {integrity: sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==} + engines: {node: '>=10.0.0'} + peerDependencies: + '@types/node': '>=10.0.0' + rollup: '>=0.31.2' + peerDependenciesMeta: + '@types/node': + optional: true + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.59.0 + rollup: 2.59.0 + source-map-resolve: 0.6.0 + dev: true + /rollup-plugin-terser/7.0.2_rollup@2.37.1: resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} peerDependencies: @@ -19388,6 +20455,14 @@ packages: fsevents: 2.3.2 dev: true + /rollup/2.59.0: + resolution: {integrity: sha512-l7s90JQhCQ6JyZjKgo7Lq1dKh2RxatOM+Jr6a9F7WbS9WgKbocyUSeLmZl8evAse7y96Ae98L2k1cBOwWD8nHw==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + /rst-selector-parser/2.2.3: resolution: {integrity: sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=} dependencies: @@ -20927,6 +22002,13 @@ packages: resolution: {integrity: sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w==} dev: true + /ts-invariant/0.9.3: + resolution: {integrity: sha512-HinBlTbFslQI0OHP07JLsSXPibSegec6r9ai5xxq/qHYCsIQbzpymLpDhAUsnXcSrDEcd0L62L8vsOEdzM0qlA==} + engines: {node: '>=8'} + dependencies: + tslib: 2.3.1 + dev: true + /ts-pnp/1.2.0_typescript@4.3.5: resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==} engines: {node: '>=6'} @@ -21137,6 +22219,12 @@ packages: hasBin: true dev: true + /typescript/4.4.4: + resolution: {integrity: sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + /uglify-js/3.12.5: resolution: {integrity: sha512-SgpgScL4T7Hj/w/GexjnBHi3Ien9WS1Rpfg5y91WXMj9SY997ZCQU76mH4TpLwwfmMvoOU8wiaRkIf6NaH3mtg==} engines: {node: '>=0.8.0'} @@ -21182,6 +22270,11 @@ packages: engines: {node: '>=4'} dev: true + /unicode-canonical-property-names-ecmascript/2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + dev: true + /unicode-match-property-ecmascript/1.0.4: resolution: {integrity: sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==} engines: {node: '>=4'} @@ -21190,16 +22283,34 @@ packages: unicode-property-aliases-ecmascript: 1.1.0 dev: true + /unicode-match-property-ecmascript/2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-property-aliases-ecmascript: 2.0.0 + dev: true + /unicode-match-property-value-ecmascript/1.2.0: resolution: {integrity: sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==} engines: {node: '>=4'} dev: true + /unicode-match-property-value-ecmascript/2.0.0: + resolution: {integrity: sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==} + engines: {node: '>=4'} + dev: true + /unicode-property-aliases-ecmascript/1.1.0: resolution: {integrity: sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==} engines: {node: '>=4'} dev: true + /unicode-property-aliases-ecmascript/2.0.0: + resolution: {integrity: sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==} + engines: {node: '>=4'} + dev: true + /unified/9.2.0: resolution: {integrity: sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==} dependencies: -- cgit v1.2.3 From 83b63d1cc076dced82a235d7ca37ff04357ddb73 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Tue, 2 Nov 2021 12:44:22 -0300 Subject: FIXING: Insufficient Rollup version: @rollup/plugin-commonjs requires at least rollup@2.38 but found rollup@2.37.1. --- packages/anastasis-core/src/cli.ts | 2 +- packages/taler-wallet-core/package.json | 2 +- pnpm-lock.yaml | 24 ++++++++++++++++++++---- 3 files changed, 22 insertions(+), 6 deletions(-) (limited to 'packages/anastasis-core/src') diff --git a/packages/anastasis-core/src/cli.ts b/packages/anastasis-core/src/cli.ts index 5ab7af6db..517f2876d 100644 --- a/packages/anastasis-core/src/cli.ts +++ b/packages/anastasis-core/src/cli.ts @@ -8,7 +8,7 @@ import fs from "fs"; export const reducerCli = clk .program("reducer", { - help: "Command line interface for the GNU Taler wallet.", + help: "Command line interface for Anastasis.", }) .flag("initBackup", ["-b", "--backup"]) .flag("initRecovery", ["-r", "--restore"]) diff --git a/packages/taler-wallet-core/package.json b/packages/taler-wallet-core/package.json index 0d726a6d7..d8b344f2c 100644 --- a/packages/taler-wallet-core/package.json +++ b/packages/taler-wallet-core/package.json @@ -54,7 +54,7 @@ "po2json": "^0.4.5", "prettier": "^2.2.1", "rimraf": "^3.0.2", - "rollup": "^2.37.1", + "rollup": "^2.38", "rollup-plugin-sourcemaps": "^0.6.3", "source-map-resolve": "^0.6.0", "typedoc": "^0.20.16", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ed921a04c..4126ee854 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -245,7 +245,7 @@ importers: po2json: ^0.4.5 prettier: ^2.2.1 rimraf: ^3.0.2 - rollup: ^2.37.1 + rollup: ^2.38 rollup-plugin-sourcemaps: ^0.6.3 source-map-resolve: ^0.6.0 source-map-support: ^0.5.19 @@ -279,8 +279,8 @@ importers: po2json: 0.4.5 prettier: 2.2.1 rimraf: 3.0.2 - rollup: 2.37.1 - rollup-plugin-sourcemaps: 0.6.3_38ff52cc32daa1ae80c428f8a47a4e22 + rollup: 2.59.0 + rollup-plugin-sourcemaps: 0.6.3_57eeb328ceff0756ae1d32f4d22d60f9 source-map-resolve: 0.6.0 typedoc: 0.20.16_typescript@4.1.3 typescript: 4.1.3 @@ -5625,7 +5625,7 @@ packages: dependencies: '@types/estree': 0.0.39 estree-walker: 1.0.1 - picomatch: 2.3.0 + picomatch: 2.2.2 rollup: 2.59.0 dev: true @@ -20348,6 +20348,22 @@ packages: source-map-resolve: 0.6.0 dev: true + /rollup-plugin-sourcemaps/0.6.3_57eeb328ceff0756ae1d32f4d22d60f9: + resolution: {integrity: sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==} + engines: {node: '>=10.0.0'} + peerDependencies: + '@types/node': '>=10.0.0' + rollup: '>=0.31.2' + peerDependenciesMeta: + '@types/node': + optional: true + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.59.0 + '@types/node': 14.14.22 + rollup: 2.59.0 + source-map-resolve: 0.6.0 + dev: true + /rollup-plugin-sourcemaps/0.6.3_6efbbae6640434994627e0ab519821c6: resolution: {integrity: sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==} engines: {node: '>=10.0.0'} -- cgit v1.2.3 From fdc36b4fb75201e23023a583b8eebd05b1f24f77 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Tue, 2 Nov 2021 17:02:04 +0100 Subject: anastasis-core: compute upload fees --- packages/anastasis-core/src/index.ts | 60 +++++++++++++++++++++++----- packages/anastasis-core/src/reducer-types.ts | 3 +- packages/taler-util/src/amounts.ts | 3 +- packages/taler-util/src/time.ts | 14 +++++++ 4 files changed, 68 insertions(+), 12 deletions(-) (limited to 'packages/anastasis-core/src') diff --git a/packages/anastasis-core/src/index.ts b/packages/anastasis-core/src/index.ts index 07f8122e3..9bb4e347a 100644 --- a/packages/anastasis-core/src/index.ts +++ b/packages/anastasis-core/src/index.ts @@ -1,13 +1,19 @@ import { + AmountJson, + AmountLike, + Amounts, AmountString, buildSigPS, bytesToString, Codec, codecForAny, decodeCrock, + Duration, eddsaSign, encodeCrock, + getDurationRemaining, getRandomBytes, + getTimestampNow, hash, j2s, Logger, @@ -1051,27 +1057,62 @@ async function nextFromAuthenticationsEditing( async function updateUploadFees( state: ReducerStateBackup, ): Promise { - for (const prov of state.policy_providers ?? []) { - const info = state.authentication_providers![prov.provider_url]; - if (!("currency" in info)) { - continue; + const expiration = state.expiration; + if (!expiration) { + return { ...state }; + } + logger.info("updating upload fees"); + const feePerCurrency: Record = {}; + const coveredProviders = new Set(); + const addFee = (x: AmountLike) => { + x = Amounts.jsonifyAmount(x); + feePerCurrency[x.currency] = Amounts.add( + feePerCurrency[x.currency] ?? Amounts.getZero(x.currency), + x, + ).amount; + }; + const years = Duration.toIntegerYears(Duration.getRemaining(expiration)); + logger.info(`computing fees for ${years} years`); + for (const x of state.policies ?? []) { + for (const m of x.methods) { + const prov = state.authentication_providers![ + m.provider + ] as AuthenticationProviderStatusOk; + const authMethod = state.authentication_methods![m.authentication_method]; + if (!coveredProviders.has(m.provider)) { + const annualFee = Amounts.mult(prov.annual_fee, years).amount; + logger.info(`adding annual fee ${Amounts.stringify(annualFee)}`); + addFee(annualFee); + coveredProviders.add(m.provider); + } + for (const pm of prov.methods) { + if (pm.type === authMethod.type) { + addFee(pm.usage_fee); + break; + } + } } } - return { ...state, upload_fees: [] }; + return { + ...state, + upload_fees: Object.values(feePerCurrency).map((x) => ({ + fee: Amounts.stringify(x), + })), + }; } async function enterSecret( state: ReducerStateBackup, args: ActionArgEnterSecret, ): Promise { - return { + return updateUploadFees({ ...state, expiration: args.expiration, core_secret: { mime: args.secret.mime ?? "text/plain", value: args.secret.value, }, - }; + }); } async function nextFromChallengeSelecting( @@ -1102,11 +1143,10 @@ async function updateSecretExpiration( state: ReducerStateBackup, args: ActionArgsUpdateExpiration, ): Promise { - // FIXME: implement! - return { + return updateUploadFees({ ...state, expiration: args.expiration, - }; + }); } const backupTransitions: Record< diff --git a/packages/anastasis-core/src/reducer-types.ts b/packages/anastasis-core/src/reducer-types.ts index 03883ce17..2f0d324ae 100644 --- a/packages/anastasis-core/src/reducer-types.ts +++ b/packages/anastasis-core/src/reducer-types.ts @@ -66,6 +66,7 @@ export interface ReducerStateBackup { selected_country?: string; secret_name?: string; policies?: Policy[]; + /** * Policy providers are providers that we checked to be functional * and that are actually used in policies. @@ -82,7 +83,7 @@ export interface ReducerStateBackup { expiration?: Timestamp; - upload_fees?: AmountString[]; + upload_fees?: { fee: AmountString }[]; } export interface AuthMethod { diff --git a/packages/taler-util/src/amounts.ts b/packages/taler-util/src/amounts.ts index 5a8c7f06f..41fd14bee 100644 --- a/packages/taler-util/src/amounts.ts +++ b/packages/taler-util/src/amounts.ts @@ -349,7 +349,8 @@ export class Amounts { } } - static mult(a: AmountJson, n: number): Result { + static mult(a: AmountLike, n: number): Result { + a = this.jsonifyAmount(a); if (!Number.isInteger(n)) { throw Error("amount can only be multipied by an integer"); } diff --git a/packages/taler-util/src/time.ts b/packages/taler-util/src/time.ts index c0858ada6..856db8a57 100644 --- a/packages/taler-util/src/time.ts +++ b/packages/taler-util/src/time.ts @@ -69,6 +69,20 @@ export function getDurationRemaining( return { d_ms: deadline.t_ms - now.t_ms }; } +export namespace Duration { + export const getRemaining = getDurationRemaining; + export function toIntegerYears(d: Duration): number { + if (typeof d.d_ms !== "number") { + throw Error("infinite duration"); + } + return Math.ceil(d.d_ms / 1000 / 60 / 60 / 24 / 365); + } +} + +export namespace Timestamp { + export const min = timestampMin; +} + export function timestampMin(t1: Timestamp, t2: Timestamp): Timestamp { if (t1.t_ms === "never") { return { t_ms: t2.t_ms }; -- cgit v1.2.3 From 03518ced4816ec9be0fcebf2a04bd0ef0cbdb8a6 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Tue, 2 Nov 2021 17:22:11 +0100 Subject: anastasis: more verbose hint --- packages/anastasis-core/src/index.ts | 4 ++-- packages/anastasis-core/src/reducer-types.ts | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) (limited to 'packages/anastasis-core/src') diff --git a/packages/anastasis-core/src/index.ts b/packages/anastasis-core/src/index.ts index 9bb4e347a..4323df9c2 100644 --- a/packages/anastasis-core/src/index.ts +++ b/packages/anastasis-core/src/index.ts @@ -570,7 +570,7 @@ async function uploadSecret( if (resp.status !== 204) { return { code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED, - hint: "could not upload policy", + hint: `could not upload truth (HTTP status ${resp.status})`, }; } @@ -631,7 +631,7 @@ async function uploadSecret( if (resp.status !== 204) { return { code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED, - hint: "could not upload policy", + hint: `could not upload policy (http status ${resp.status})`, }; } let policyVersion = 0; diff --git a/packages/anastasis-core/src/reducer-types.ts b/packages/anastasis-core/src/reducer-types.ts index 2f0d324ae..b415bdfc4 100644 --- a/packages/anastasis-core/src/reducer-types.ts +++ b/packages/anastasis-core/src/reducer-types.ts @@ -73,7 +73,14 @@ export interface ReducerStateBackup { */ policy_providers?: PolicyProvider[]; success_details?: SuccessDetails; + + /** + * Currently requested payments. + * + * List of taler://pay URIs. + */ payments?: string[]; + policy_payment_requests?: { payto: string; provider: string; -- cgit v1.2.3 From f4ec05c33a098774f789a4672a9f034bbf9a5c1c Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Tue, 2 Nov 2021 17:31:16 +0100 Subject: anastasis-core: fix transition --- packages/anastasis-core/src/index.ts | 2 +- packages/anastasis-core/src/reducer-types.ts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) (limited to 'packages/anastasis-core/src') diff --git a/packages/anastasis-core/src/index.ts b/packages/anastasis-core/src/index.ts index 4323df9c2..786d8b76a 100644 --- a/packages/anastasis-core/src/index.ts +++ b/packages/anastasis-core/src/index.ts @@ -1194,7 +1194,7 @@ const backupTransitions: Record< ...transition("delete_policy", codecForAny(), deletePolicy), }, [BackupStates.SecretEditing]: { - ...transitionBackupJump("back", BackupStates.PoliciesPaying), + ...transitionBackupJump("back", BackupStates.PoliciesReviewing), ...transition("next", codecForAny(), uploadSecret), ...transition("enter_secret", codecForAny(), enterSecret), ...transition( diff --git a/packages/anastasis-core/src/reducer-types.ts b/packages/anastasis-core/src/reducer-types.ts index b415bdfc4..948268704 100644 --- a/packages/anastasis-core/src/reducer-types.ts +++ b/packages/anastasis-core/src/reducer-types.ts @@ -6,7 +6,6 @@ import { codecForNumber, codecForString, codecForTimestamp, - Duration, Timestamp, } from "@gnu-taler/taler-util"; import { KeyShare } from "./crypto.js"; -- cgit v1.2.3 From 082bef334659502b6b27b4f61d6f58aab90a7710 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Wed, 3 Nov 2021 10:44:10 +0100 Subject: anastasis-core: maximize diversity in provider selection --- packages/anastasis-core/src/index.ts | 104 +------------- packages/anastasis-core/src/policy-suggestion.ts | 169 +++++++++++++++++++++++ 2 files changed, 170 insertions(+), 103 deletions(-) create mode 100644 packages/anastasis-core/src/policy-suggestion.ts (limited to 'packages/anastasis-core/src') diff --git a/packages/anastasis-core/src/index.ts b/packages/anastasis-core/src/index.ts index 786d8b76a..db99db610 100644 --- a/packages/anastasis-core/src/index.ts +++ b/packages/anastasis-core/src/index.ts @@ -90,6 +90,7 @@ import { } from "./crypto.js"; import { unzlibSync, zlibSync } from "fflate"; import { EscrowMethod, RecoveryDocument } from "./recovery-document-types.js"; +import { ProviderInfo, suggestPolicies } from "./policy-suggestion.js"; const { fetch } = fetchPonyfill({}); @@ -290,109 +291,6 @@ async function backupEnterUserAttributes( return newState; } -interface PolicySelectionResult { - policies: Policy[]; - policy_providers: PolicyProvider[]; -} - -type MethodSelection = number[]; - -function enumerateSelections(n: number, m: number): MethodSelection[] { - const selections: MethodSelection[] = []; - const a = new Array(n); - const sel = (i: number) => { - if (i === n) { - selections.push([...a]); - return; - } - const start = i == 0 ? 0 : a[i - 1] + 1; - for (let j = start; j < m; j++) { - a[i] = j; - sel(i + 1); - } - }; - sel(0); - return selections; -} - -/** - * Provider information used during provider/method mapping. - */ -interface ProviderInfo { - url: string; - methodCost: Record; -} - -/** - * Assign providers to a method selection. - */ -function assignProviders( - methods: AuthMethod[], - providers: ProviderInfo[], - methodSelection: number[], -): Policy | undefined { - const selectedProviders: string[] = []; - for (const mi of methodSelection) { - const m = methods[mi]; - let found = false; - for (const prov of providers) { - if (prov.methodCost[m.type]) { - selectedProviders.push(prov.url); - found = true; - break; - } - } - if (!found) { - /* No provider found for this method */ - return undefined; - } - } - return { - methods: methodSelection.map((x, i) => { - return { - authentication_method: x, - provider: selectedProviders[i], - }; - }), - }; -} - -function suggestPolicies( - methods: AuthMethod[], - providers: ProviderInfo[], -): PolicySelectionResult { - const numMethods = methods.length; - if (numMethods === 0) { - throw Error("no methods"); - } - let numSel: number; - if (numMethods <= 2) { - numSel = numMethods; - } else if (numMethods <= 4) { - numSel = numMethods - 1; - } else if (numMethods <= 6) { - numSel = numMethods - 2; - } else if (numMethods == 7) { - numSel = numMethods - 3; - } else { - numSel = 4; - } - const policies: Policy[] = []; - const selections = enumerateSelections(numSel, numMethods); - logger.info(`selections: ${j2s(selections)}`); - for (const sel of selections) { - const p = assignProviders(methods, providers, sel); - if (p) { - policies.push(p); - } - } - return { - policies, - policy_providers: providers.map((x) => ({ - provider_url: x.url, - })), - }; -} /** * Truth data as stored in the reducer. diff --git a/packages/anastasis-core/src/policy-suggestion.ts b/packages/anastasis-core/src/policy-suggestion.ts new file mode 100644 index 000000000..623921466 --- /dev/null +++ b/packages/anastasis-core/src/policy-suggestion.ts @@ -0,0 +1,169 @@ +import { AmountString, j2s, Logger } from "@gnu-taler/taler-util"; +import { AuthMethod, Policy, PolicyProvider } from "./reducer-types.js"; + +const logger = new Logger("anastasis-core:policy-suggestion.ts"); + +/** + * Provider information used during provider/method mapping. + */ +export interface ProviderInfo { + url: string; + methodCost: Record; +} + +export function suggestPolicies( + methods: AuthMethod[], + providers: ProviderInfo[], +): PolicySelectionResult { + const numMethods = methods.length; + if (numMethods === 0) { + throw Error("no methods"); + } + let numSel: number; + if (numMethods <= 2) { + numSel = numMethods; + } else if (numMethods <= 4) { + numSel = numMethods - 1; + } else if (numMethods <= 6) { + numSel = numMethods - 2; + } else if (numMethods == 7) { + numSel = numMethods - 3; + } else { + numSel = 4; + } + const policies: Policy[] = []; + const selections = enumerateMethodSelections(numSel, numMethods); + logger.info(`selections: ${j2s(selections)}`); + for (const sel of selections) { + const p = assignProviders(policies, methods, providers, sel); + if (p) { + policies.push(p); + } + } + return { + policies, + policy_providers: providers.map((x) => ({ + provider_url: x.url, + })), + }; +} + +/** + * Assign providers to a method selection. + * + * The evaluation of the assignment is made with respect to + * previously generated policies. + */ +function assignProviders( + existingPolicies: Policy[], + methods: AuthMethod[], + providers: ProviderInfo[], + methodSelection: number[], +): Policy | undefined { + const providerSelections = enumerateProviderMappings( + methodSelection.length, + providers.length, + ); + + let bestProvSel: ProviderSelection | undefined; + let bestDiversity = 0; + + for (const provSel of providerSelections) { + // First, check if selection is even possible with the methods offered + let possible = true; + for (const methIndex in provSel) { + const provIndex = provSel[methIndex]; + const meth = methods[methIndex]; + const prov = providers[provIndex]; + if (!prov.methodCost[meth.type]) { + possible = false; + break; + } + } + if (!possible) { + continue; + } + + // Evaluate diversity, always prefer policies + // that increase diversity. + const providerSet = new Set(); + for (const pol of existingPolicies) { + for (const m of pol.methods) { + providerSet.add(m.provider); + } + } + for (const provIndex of provSel) { + const prov = providers[provIndex]; + providerSet.add(prov.url); + } + + const diversity = providerSet.size; + if (!bestProvSel || diversity > bestDiversity) { + bestProvSel = provSel; + bestDiversity = diversity; + } + // TODO: also evaluate costs and duplicates (same challenge at same provider) + } + + if (!bestProvSel) { + return undefined; + } + + return { + methods: bestProvSel.map((x, i) => ({ + authentication_method: methodSelection[i], + provider: providers[x].url, + })), + }; +} + +type ProviderSelection = number[]; + +/** + * Compute provider mappings. + * Enumerates all n-combinations with repetition of m providers. + */ +function enumerateProviderMappings(n: number, m: number): ProviderSelection[] { + const selections: ProviderSelection[] = []; + const a = new Array(n); + const sel = (i: number, start: number = 0) => { + if (i === n) { + selections.push([...a]); + return; + } + for (let j = start; j < m; j++) { + a[i] = j; + sel(i + 1, j); + } + }; + sel(0); + return selections; +} + +interface PolicySelectionResult { + policies: Policy[]; + policy_providers: PolicyProvider[]; +} + +type MethodSelection = number[]; + +/** + * Compute method selections. + * Enumerates all n-combinations without repetition of m methods. + */ +function enumerateMethodSelections(n: number, m: number): MethodSelection[] { + const selections: MethodSelection[] = []; + const a = new Array(n); + const sel = (i: number, start: number = 0) => { + if (i === n) { + selections.push([...a]); + return; + } + for (let j = start; j < m; j++) { + a[i] = j; + sel(i + 1, j + 1); + } + }; + sel(0); + return selections; +} -- cgit v1.2.3 From 04356cd23fef76d2020338d2b2b394095fdc2b14 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Wed, 3 Nov 2021 13:34:57 +0100 Subject: anastasis: refactor feedback types --- .../anastasis-core/src/challenge-feedback-types.ts | 149 ++++++++++++++++++++ packages/anastasis-core/src/index.ts | 150 ++++++++++++--------- packages/anastasis-core/src/reducer-types.ts | 35 +++-- 3 files changed, 249 insertions(+), 85 deletions(-) create mode 100644 packages/anastasis-core/src/challenge-feedback-types.ts (limited to 'packages/anastasis-core/src') diff --git a/packages/anastasis-core/src/challenge-feedback-types.ts b/packages/anastasis-core/src/challenge-feedback-types.ts new file mode 100644 index 000000000..d6a2e3e80 --- /dev/null +++ b/packages/anastasis-core/src/challenge-feedback-types.ts @@ -0,0 +1,149 @@ +import { AmountString, HttpStatusCode } from "@gnu-taler/taler-util"; + +export enum ChallengeFeedbackStatus { + Solved = "solved", + ServerFailure = "server-failure", + TruthUnknown = "truth-unknown", + Redirect = "redirect", + Payment = "payment", + Pending = "pending", + Message = "message", + Unsupported = "unsupported", + RateLimitExceeded = "rate-limit-exceeded", + AuthIban = "auth-iban", +} + +export type ChallengeFeedback = + | ChallengeFeedbackSolved + | ChallengeFeedbackPending + | ChallengeFeedbackPayment + | ChallengeFeedbackServerFailure + | ChallengeFeedbackRateLimitExceeded + | ChallengeFeedbackTruthUnknown + | ChallengeFeedbackRedirect + | ChallengeFeedbackMessage + | ChallengeFeedbackUnsupported + | ChallengeFeedbackAuthIban; + +/** + * Challenge has been solved and the key share has + * been retrieved. + */ +export interface ChallengeFeedbackSolved { + state: ChallengeFeedbackStatus.Solved; +} + +/** + * The challenge given by the server is unsupported + * by the current anastasis client. + */ +export interface ChallengeFeedbackUnsupported { + state: ChallengeFeedbackStatus.Unsupported; + http_status: HttpStatusCode; + /** + * Human-readable identifier of the unsupported method. + */ + unsupported_method: string; +} + +/** + * The user tried to answer too often with a wrong answer. + */ +export interface ChallengeFeedbackRateLimitExceeded { + state: ChallengeFeedbackStatus.RateLimitExceeded; +} + +/** + * Instructions for performing authentication via an + * IBAN bank transfer. + */ +export interface ChallengeFeedbackAuthIban { + state: ChallengeFeedbackStatus.AuthIban; + + /** + * Amount that should be transfered for a successful authentication. + */ + challenge_amount: AmountString; + + /** + * Account that should be credited. + */ + credit_iban: string; + + /** + * Creditor name. + */ + business_name: string; + + /** + * Unstructured remittance information that should + * be contained in the bank transfer. + */ + wire_transfer_subject: string; +} + +/** + * Challenge still needs to be solved. + */ +export interface ChallengeFeedbackPending { + state: ChallengeFeedbackStatus.Pending; +} + +/** + * Human-readable response from the provider + * after the user failed to solve the challenge + * correctly. + */ +export interface ChallengeFeedbackMessage { + state: ChallengeFeedbackStatus.Message; + message: string; +} + +/** + * The server experienced a temporary failure. + */ +export interface ChallengeFeedbackServerFailure { + state: ChallengeFeedbackStatus.ServerFailure; + http_status: HttpStatusCode | 0; + + /** + * Taler-style error response, if available. + */ + error_response?: any; +} + +/** + * The truth is unknown to the provider. There + * is no reason to continue trying to solve any + * challenges in the policy. + */ +export interface ChallengeFeedbackTruthUnknown { + state: ChallengeFeedbackStatus.TruthUnknown; +} + +/** + * The user should be asked to go to a URL + * to complete the authentication there. + */ +export interface ChallengeFeedbackRedirect { + state: ChallengeFeedbackStatus.Redirect; + http_status: number; + redirect_url: string; +} + +/** + * A payment is required before the user can + * even attempt to solve the challenge. + */ +export interface ChallengeFeedbackPayment { + state: ChallengeFeedbackStatus.Payment; + + taler_pay_uri: string; + + provider: string; + + /** + * FIXME: Why is this required?! + */ + payment_secret: string; +} diff --git a/packages/anastasis-core/src/index.ts b/packages/anastasis-core/src/index.ts index db99db610..859dd083b 100644 --- a/packages/anastasis-core/src/index.ts +++ b/packages/anastasis-core/src/index.ts @@ -11,10 +11,9 @@ import { Duration, eddsaSign, encodeCrock, - getDurationRemaining, getRandomBytes, - getTimestampNow, hash, + HttpStatusCode, j2s, Logger, stringToBytes, @@ -91,6 +90,7 @@ import { import { unzlibSync, zlibSync } from "fflate"; import { EscrowMethod, RecoveryDocument } from "./recovery-document-types.js"; import { ProviderInfo, suggestPolicies } from "./policy-suggestion.js"; +import { ChallengeFeedback, ChallengeFeedbackStatus } from "./challenge-feedback-types.js"; const { fetch } = fetchPonyfill({}); @@ -291,7 +291,6 @@ async function backupEnterUserAttributes( return newState; } - /** * Truth data as stored in the reducer. */ @@ -551,6 +550,7 @@ async function uploadSecret( return { ...state, + core_secret: undefined, backup_state: BackupStates.BackupFinished, success_details: successDetails, }; @@ -684,25 +684,24 @@ async function tryRecoverSecret( return { ...state }; } -async function solveChallenge( +/** + * Request a truth, optionally with a challenge solution + * provided by the user. + */ +async function requestTruth( state: ReducerStateRecovery, - ta: ActionArgsSolveChallengeRequest, + truth: EscrowMethod, + solveRequest?: ActionArgsSolveChallengeRequest, ): Promise { - const recDoc: RecoveryDocument = state.verbatim_recovery_document!; - const truth = recDoc.escrow_methods.find( - (x) => x.uuid === state.selected_challenge_uuid, - ); - if (!truth) { - throw "truth for challenge not found"; - } - const url = new URL(`/truth/${truth.uuid}`, truth.url); - // FIXME: This isn't correct for non-question truth responses. - url.searchParams.set( - "response", - await secureAnswerHash(ta.answer, truth.uuid, truth.truth_salt), - ); + if (solveRequest) { + // FIXME: This isn't correct for non-question truth responses. + url.searchParams.set( + "response", + await secureAnswerHash(solveRequest.answer, truth.uuid, truth.truth_salt), + ); + } const resp = await fetch(url.href, { headers: { @@ -710,48 +709,79 @@ async function solveChallenge( }, }); - if (resp.status !== 200) { - return { - code: TalerErrorCode.ANASTASIS_TRUTH_CHALLENGE_FAILED, - hint: "got non-200 response", - http_status: resp.status, - } as ReducerStateError; - } + if (resp.status === HttpStatusCode.Ok) { + const answerSalt = + solveRequest && truth.escrow_type === "question" + ? solveRequest.answer + : undefined; - const answerSalt = truth.escrow_type === "question" ? ta.answer : undefined; + const userId = await userIdentifierDerive( + state.identity_attributes, + truth.provider_salt, + ); - const userId = await userIdentifierDerive( - state.identity_attributes, - truth.provider_salt, - ); + const respBody = new Uint8Array(await resp.arrayBuffer()); + const keyShare = await decryptKeyShare( + encodeCrock(respBody), + userId, + answerSalt, + ); - const respBody = new Uint8Array(await resp.arrayBuffer()); - const keyShare = await decryptKeyShare( - encodeCrock(respBody), - userId, - answerSalt, - ); + const recoveredKeyShares = { + ...(state.recovered_key_shares ?? {}), + [truth.uuid]: keyShare, + }; - const recoveredKeyShares = { - ...(state.recovered_key_shares ?? {}), - [truth.uuid]: keyShare, - }; + const challengeFeedback: { [x: string]: ChallengeFeedback } = { + ...state.challenge_feedback, + [truth.uuid]: { + state: ChallengeFeedbackStatus.Solved, + }, + }; - const challengeFeedback = { - ...state.challenge_feedback, - [truth.uuid]: { - state: "solved", - }, - }; + const newState: ReducerStateRecovery = { + ...state, + recovery_state: RecoveryStates.ChallengeSelecting, + challenge_feedback: challengeFeedback, + recovered_key_shares: recoveredKeyShares, + }; - const newState: ReducerStateRecovery = { - ...state, - recovery_state: RecoveryStates.ChallengeSelecting, - challenge_feedback: challengeFeedback, - recovered_key_shares: recoveredKeyShares, - }; + return tryRecoverSecret(newState); + } + + if (resp.status === HttpStatusCode.Forbidden) { + return { + ...state, + recovery_state: RecoveryStates.ChallengeSolving, + challenge_feedback: { + ...state.challenge_feedback, + [truth.uuid]: { + state: ChallengeFeedbackStatus.Message, + message: "Challenge should be solved", + }, + }, + }; + } - return tryRecoverSecret(newState); + return { + code: TalerErrorCode.ANASTASIS_TRUTH_CHALLENGE_FAILED, + hint: "got unexpected /truth/ response status", + http_status: resp.status, + } as ReducerStateError; +} + +async function solveChallenge( + state: ReducerStateRecovery, + ta: ActionArgsSolveChallengeRequest, +): Promise { + const recDoc: RecoveryDocument = state.verbatim_recovery_document!; + const truth = recDoc.escrow_methods.find( + (x) => x.uuid === state.selected_challenge_uuid, + ); + if (!truth) { + throw Error("truth for challenge not found"); + } + return requestTruth(state, truth, ta); } async function recoveryEnterUserAttributes( @@ -776,19 +806,7 @@ async function selectChallenge( throw "truth for challenge not found"; } - const url = new URL(`/truth/${truth.uuid}`, truth.url); - - const resp = await fetch(url.href, { - headers: { - "Anastasis-Truth-Decryption-Key": truth.truth_key, - }, - }); - - return { - ...state, - recovery_state: RecoveryStates.ChallengeSolving, - selected_challenge_uuid: ta.uuid, - }; + return requestTruth({ ...state, selected_challenge_uuid: ta.uuid }, truth); } async function backupSelectContinent( diff --git a/packages/anastasis-core/src/reducer-types.ts b/packages/anastasis-core/src/reducer-types.ts index 948268704..69feb6b64 100644 --- a/packages/anastasis-core/src/reducer-types.ts +++ b/packages/anastasis-core/src/reducer-types.ts @@ -8,6 +8,7 @@ import { codecForTimestamp, Timestamp, } from "@gnu-taler/taler-util"; +import { ChallengeFeedback } from "./challenge-feedback-types.js"; import { KeyShare } from "./crypto.js"; import { RecoveryDocument } from "./recovery-document-types.js"; @@ -185,10 +186,6 @@ export interface ReducerStateRecovery { authentication_providers?: { [url: string]: AuthenticationProviderStatus }; } -export interface ChallengeFeedback { - state: string; -} - export interface ReducerStateError { backup_state?: undefined; recovery_state?: undefined; @@ -311,21 +308,10 @@ export interface ActionArgSelectCountry { currencies: string[]; } -export const codecForActionArgSelectCountry = () => - buildCodecForObject() - .property("country_code", codecForString()) - .property("currencies", codecForList(codecForString())) - .build("ActionArgSelectCountry"); - export interface ActionArgsSelectChallenge { uuid: string; } -export const codecForActionArgSelectChallenge = () => - buildCodecForObject() - .property("uuid", codecForString()) - .build("ActionArgSelectChallenge"); - export type ActionArgsSolveChallengeRequest = SolveChallengeAnswerRequest; export interface SolveChallengeAnswerRequest { @@ -341,6 +327,10 @@ export interface ActionArgsAddPolicy { policy: PolicyMember[]; } +export interface ActionArgsUpdateExpiration { + expiration: Timestamp; +} + export const codecForPolicyMember = () => buildCodecForObject() .property("authentication_method", codecForNumber()) @@ -352,11 +342,18 @@ export const codecForActionArgsAddPolicy = () => .property("policy", codecForList(codecForPolicyMember())) .build("ActionArgsAddPolicy"); -export interface ActionArgsUpdateExpiration { - expiration: Timestamp; -} - export const codecForActionArgsUpdateExpiration = () => buildCodecForObject() .property("expiration", codecForTimestamp) .build("ActionArgsUpdateExpiration"); + +export const codecForActionArgSelectChallenge = () => + buildCodecForObject() + .property("uuid", codecForString()) + .build("ActionArgSelectChallenge"); + +export const codecForActionArgSelectCountry = () => + buildCodecForObject() + .property("country_code", codecForString()) + .property("currencies", codecForList(codecForString())) + .build("ActionArgSelectCountry"); -- cgit v1.2.3 From 7d24d2254b49010eb0e6e6af54a0f381cfdc4b53 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Wed, 3 Nov 2021 18:26:57 +0100 Subject: anastasis-webui: make it compile again --- packages/anastasis-core/src/index.ts | 1 + .../pages/home/ChallengeOverviewScreen.stories.tsx | 339 ++++++++++----------- .../src/pages/home/ChallengeOverviewScreen.tsx | 157 ++++++---- .../src/pages/home/CountrySelectionScreen.tsx | 2 +- .../src/pages/home/TruthsPayingScreen.tsx | 2 +- 5 files changed, 265 insertions(+), 236 deletions(-) (limited to 'packages/anastasis-core/src') diff --git a/packages/anastasis-core/src/index.ts b/packages/anastasis-core/src/index.ts index 859dd083b..3b73aa002 100644 --- a/packages/anastasis-core/src/index.ts +++ b/packages/anastasis-core/src/index.ts @@ -96,6 +96,7 @@ const { fetch } = fetchPonyfill({}); export * from "./reducer-types.js"; export * as validators from "./validators.js"; +export * from "./challenge-feedback-types.js"; const logger = new Logger("anastasis-core:index.ts"); diff --git a/packages/anastasis-webui/src/pages/home/ChallengeOverviewScreen.stories.tsx b/packages/anastasis-webui/src/pages/home/ChallengeOverviewScreen.stories.tsx index a89b5640c..48115c798 100644 --- a/packages/anastasis-webui/src/pages/home/ChallengeOverviewScreen.stories.tsx +++ b/packages/anastasis-webui/src/pages/home/ChallengeOverviewScreen.stories.tsx @@ -16,218 +16,201 @@ */ /** -* -* @author Sebastian Javier Marchano (sebasjm) -*/ - -import { RecoveryStates, ReducerState } from 'anastasis-core'; -import { createExample, reducerStatesExample } from '../../utils'; -import { ChallengeOverviewScreen as TestedComponent } from './ChallengeOverviewScreen'; + * + * @author Sebastian Javier Marchano (sebasjm) + */ +import { RecoveryStates, ReducerState } from "anastasis-core"; +import { createExample, reducerStatesExample } from "../../utils"; +import { ChallengeOverviewScreen as TestedComponent } from "./ChallengeOverviewScreen"; export default { - title: 'Pages/recovery/ChallengeOverviewScreen', + title: "Pages/recovery/ChallengeOverviewScreen", component: TestedComponent, args: { order: 5, }, argTypes: { - onUpdate: { action: 'onUpdate' }, - onBack: { action: 'onBack' }, + onUpdate: { action: "onUpdate" }, + onBack: { action: "onBack" }, }, }; export const OneUnsolvedPolicy = createExample(TestedComponent, { ...reducerStatesExample.challengeSelecting, recovery_information: { - policies: [[{ uuid: '1' }]], - challenges: [{ - cost: 'USD:1', - instructions: 'just go for it', - type: 'question', - uuid: '1', - }] + policies: [[{ uuid: "1" }]], + challenges: [ + { + cost: "USD:1", + instructions: "just go for it", + type: "question", + uuid: "1", + }, + ], }, } as ReducerState); export const SomePoliciesOneSolved = createExample(TestedComponent, { ...reducerStatesExample.challengeSelecting, recovery_information: { - policies: [[{ uuid: '1' }, { uuid: '2' }], [{ uuid: 'uuid-3' }]], - challenges: [{ - cost: 'USD:1', - instructions: 'this question cost 1 USD', - type: 'question', - uuid: '1', - }, { - cost: 'USD:0', - instructions: 'answering this question is free', - type: 'question', - uuid: '2', - }, { - cost: 'USD:1', - instructions: 'this question is already answered', - type: 'question', - uuid: 'uuid-3', - }] + policies: [[{ uuid: "1" }, { uuid: "2" }], [{ uuid: "uuid-3" }]], + challenges: [ + { + cost: "USD:1", + instructions: "this question cost 1 USD", + type: "question", + uuid: "1", + }, + { + cost: "USD:0", + instructions: "answering this question is free", + type: "question", + uuid: "2", + }, + { + cost: "USD:1", + instructions: "this question is already answered", + type: "question", + uuid: "uuid-3", + }, + ], }, challenge_feedback: { - 'uuid-3': { - state: 'solved' - } + "uuid-3": { + state: "solved", + }, }, } as ReducerState); export const OneBadConfiguredPolicy = createExample(TestedComponent, { ...reducerStatesExample.challengeSelecting, recovery_information: { - policies: [[{ uuid: '1' }, { uuid: '2' }]], - challenges: [{ - cost: 'USD:1', - instructions: 'this policy has a missing uuid (the other auth method)', - type: 'totp', - uuid: '1', - }], + policies: [[{ uuid: "1" }, { uuid: "2" }]], + challenges: [ + { + cost: "USD:1", + instructions: "this policy has a missing uuid (the other auth method)", + type: "totp", + uuid: "1", + }, + ], }, } as ReducerState); export const OnePolicyWithAllTheChallenges = createExample(TestedComponent, { ...reducerStatesExample.challengeSelecting, recovery_information: { - policies: [[ - { uuid: '1' }, - { uuid: '2' }, - { uuid: '3' }, - { uuid: '4' }, - { uuid: '5' }, - { uuid: '6' }, - { uuid: '7' }, - { uuid: '8' }, - ]], - challenges: [{ - cost: 'USD:1', - instructions: 'Does P equals NP?', - type: 'question', - uuid: '1', - },{ - cost: 'USD:1', - instructions: 'SMS to 555-555', - type: 'sms', - uuid: '2', - },{ - cost: 'USD:1', - instructions: 'Email to qwe@asd.com', - type: 'email', - uuid: '3', - },{ - cost: 'USD:1', - instructions: 'Enter 8 digits code for "Anastasis"', - type: 'totp', - uuid: '4', - },{// - cost: 'USD:0', - instructions: 'Wire transfer from ASDXCVQWE123123 with holder Florian', - type: 'iban', - uuid: '5', - },{ - cost: 'USD:1', - instructions: 'Join a video call', - type: 'video',//Enter 8 digits code for "Anastasis" - uuid: '7', - },{ - },{ - cost: 'USD:1', - instructions: 'Letter to address in postal code DE123123', - type: 'post',//Enter 8 digits code for "Anastasis" - uuid: '8', - },{ - cost: 'USD:1', - instructions: 'instruction for an unknown type of challenge', - type: 'new-type-of-challenge', - uuid: '6', - }], + policies: [ + [ + { uuid: "1" }, + { uuid: "2" }, + { uuid: "3" }, + { uuid: "4" }, + { uuid: "5" }, + { uuid: "6" }, + { uuid: "7" }, + { uuid: "8" }, + ], + ], + challenges: [ + { + cost: "USD:1", + instructions: "Does P equals NP?", + type: "question", + uuid: "1", + }, + { + cost: "USD:1", + instructions: "SMS to 555-555", + type: "sms", + uuid: "2", + }, + { + cost: "USD:1", + instructions: "Email to qwe@asd.com", + type: "email", + uuid: "3", + }, + { + cost: "USD:1", + instructions: 'Enter 8 digits code for "Anastasis"', + type: "totp", + uuid: "4", + }, + { + // + cost: "USD:0", + instructions: "Wire transfer from ASDXCVQWE123123 with holder Florian", + type: "iban", + uuid: "5", + }, + { + cost: "USD:1", + instructions: "Join a video call", + type: "video", //Enter 8 digits code for "Anastasis" + uuid: "7", + }, + {}, + { + cost: "USD:1", + instructions: "Letter to address in postal code DE123123", + type: "post", //Enter 8 digits code for "Anastasis" + uuid: "8", + }, + { + cost: "USD:1", + instructions: "instruction for an unknown type of challenge", + type: "new-type-of-challenge", + uuid: "6", + }, + ], }, } as ReducerState); - -export const OnePolicyWithAllTheChallengesInDifferentState = createExample(TestedComponent, { - ...reducerStatesExample.challengeSelecting, - recovery_information: { - policies: [[ - { uuid: '1' }, - { uuid: '2' }, - { uuid: '3' }, - { uuid: '4' }, - { uuid: '5' }, - { uuid: '6' }, - { uuid: '7' }, - { uuid: '8' }, - { uuid: '9' }, - { uuid: '10' }, - ]], - challenges: [{ - cost: 'USD:1', - instructions: 'in state "solved"', - type: 'question', - uuid: '1', - },{ - cost: 'USD:1', - instructions: 'in state "hint"', - type: 'question', - uuid: '2', - },{ - cost: 'USD:1', - instructions: 'in state "details"', - type: 'question', - uuid: '3', - },{ - cost: 'USD:1', - instructions: 'in state "body"', - type: 'question', - uuid: '4', - },{ - cost: 'USD:1', - instructions: 'in state "redirect"', - type: 'question', - uuid: '5', - },{ - cost: 'USD:1', - instructions: 'in state "server-failure"', - type: 'question', - uuid: '6', - },{ - cost: 'USD:1', - instructions: 'in state "truth-unknown"', - type: 'question', - uuid: '7', - },{ - cost: 'USD:1', - instructions: 'in state "rate-limit-exceeded"', - type: 'question', - uuid: '8', - },{ - cost: 'USD:1', - instructions: 'in state "authentication-timeout"', - type: 'question', - uuid: '9', - },{ - cost: 'USD:1', - instructions: 'in state "external-instructions"', - type: 'question', - uuid: '10', - }], - }, - challenge_feedback: { - 1: { state: 'solved' }, - 2: { state: 'hint' }, - 3: { state: 'details' }, - 4: { state: 'body' }, - 5: { state: 'redirect' }, - 6: { state: 'server-failure' }, - 7: { state: 'truth-unknown' }, - 8: { state: 'rate-limit-exceeded' }, - 9: { state: 'authentication-timeout' }, - 10: { state: 'external-instructions' }, - } -} as ReducerState); -export const NoPolicies = createExample(TestedComponent, reducerStatesExample.challengeSelecting); +export const OnePolicyWithAllTheChallengesInDifferentState = createExample( + TestedComponent, + { + ...reducerStatesExample.challengeSelecting, + recovery_state: RecoveryStates.ChallengeSelecting, + recovery_information: { + policies: [ + [ + { uuid: "1" }, + { uuid: "2" }, + { uuid: "3" }, + { uuid: "4" }, + { uuid: "5" }, + { uuid: "6" }, + { uuid: "7" }, + { uuid: "8" }, + { uuid: "9" }, + { uuid: "10" }, + ], + ], + challenges: [ + { + cost: "USD:1", + instructions: 'in state "solved"', + type: "question", + uuid: "1", + }, + { + cost: "USD:1", + instructions: 'in state "message"', + type: "question", + uuid: "2", + }, + ], + }, + challenge_feedback: { + 1: { state: "solved" }, + 2: { state: "message", message: "Security question was not solved correctly" }, + // FIXME: add missing feedback states here! + }, + } as ReducerState, +); +export const NoPolicies = createExample( + TestedComponent, + reducerStatesExample.challengeSelecting, +); diff --git a/packages/anastasis-webui/src/pages/home/ChallengeOverviewScreen.tsx b/packages/anastasis-webui/src/pages/home/ChallengeOverviewScreen.tsx index 7b9b060ce..c63f19eb6 100644 --- a/packages/anastasis-webui/src/pages/home/ChallengeOverviewScreen.tsx +++ b/packages/anastasis-webui/src/pages/home/ChallengeOverviewScreen.tsx @@ -1,23 +1,29 @@ /* eslint-disable @typescript-eslint/camelcase */ -import { ChallengeFeedback } from "anastasis-core"; +import { ChallengeFeedback, ChallengeFeedbackStatus } from "anastasis-core"; import { h, VNode } from "preact"; import { useAnastasisContext } from "../../context/anastasis"; import { AnastasisClientFrame } from "./index"; import { authMethods, KnownAuthMethods } from "./authMethod"; export function ChallengeOverviewScreen(): VNode { - const reducer = useAnastasisContext() + const reducer = useAnastasisContext(); if (!reducer) { - return
    no reducer in context
    + return
    no reducer in context
    ; } - if (!reducer.currentReducerState || reducer.currentReducerState.recovery_state === undefined) { - return
    invalid state
    + if ( + !reducer.currentReducerState || + reducer.currentReducerState.recovery_state === undefined + ) { + return
    invalid state
    ; } - const policies = reducer.currentReducerState.recovery_information?.policies ?? []; - const knownChallengesArray = reducer.currentReducerState.recovery_information?.challenges ?? []; - const challengeFeedback = reducer.currentReducerState?.challenge_feedback ?? {}; + const policies = + reducer.currentReducerState.recovery_information?.policies ?? []; + const knownChallengesArray = + reducer.currentReducerState.recovery_information?.challenges ?? []; + const challengeFeedback = + reducer.currentReducerState?.challenge_feedback ?? {}; const knownChallengesMap: { [uuid: string]: { @@ -32,51 +38,80 @@ export function ChallengeOverviewScreen(): VNode { type: ch.type, cost: ch.cost, instructions: ch.instructions, - feedback: challengeFeedback[ch.uuid] + feedback: challengeFeedback[ch.uuid], }; } - const policiesWithInfo = policies.map(row => { - let isPolicySolved = true - const challenges = row.map(({ uuid }) => { - const info = knownChallengesMap[uuid]; - const isChallengeSolved = info?.feedback?.state === 'solved' - isPolicySolved = isPolicySolved && isChallengeSolved - return { info, uuid, isChallengeSolved } - }).filter(ch => ch.info !== undefined) + const policiesWithInfo = policies.map((row) => { + let isPolicySolved = true; + const challenges = row + .map(({ uuid }) => { + const info = knownChallengesMap[uuid]; + const isChallengeSolved = info?.feedback?.state === "solved"; + isPolicySolved = isPolicySolved && isChallengeSolved; + return { info, uuid, isChallengeSolved }; + }) + .filter((ch) => ch.info !== undefined); - return { isPolicySolved, challenges } - }) + return { isPolicySolved, challenges }; + }); - const atLeastThereIsOnePolicySolved = policiesWithInfo.find(p => p.isPolicySolved) !== undefined + const atLeastThereIsOnePolicySolved = + policiesWithInfo.find((p) => p.isPolicySolved) !== undefined; - const errors = !atLeastThereIsOnePolicySolved ? "Solve one policy before proceeding" : undefined; + const errors = !atLeastThereIsOnePolicySolved + ? "Solve one policy before proceeding" + : undefined; return ( - {!policies.length ?

    - No policies found, try with another version of the secret -

    : (policies.length === 1 ?

    - One policy found for this secret. You need to solve all the challenges in order to recover your secret. -

    :

    - We have found {policies.length} polices. You need to solve all the challenges from one policy in order - to recover your secret. -

    )} + {!policies.length ? ( +

    + No policies found, try with another version of the secret +

    + ) : policies.length === 1 ? ( +

    + One policy found for this secret. You need to solve all the challenges + in order to recover your secret. +

    + ) : ( +

    + We have found {policies.length} polices. You need to solve all the + challenges from one policy in order to recover your secret. +

    + )} {policiesWithInfo.map((policy, policy_index) => { const tableBody = policy.challenges.map(({ info, uuid }) => { - const isFree = !info.cost || info.cost.endsWith(':0') - const method = authMethods[info.type as KnownAuthMethods] + const isFree = !info.cost || info.cost.endsWith(":0"); + const method = authMethods[info.type as KnownAuthMethods]; return ( -
    -
    - - {method?.icon} - - - {info.instructions} - +
    +
    +
    + {method?.icon} + {info.instructions} +
    + {info.feedback?.state === ChallengeFeedbackStatus.Message ? ( +
    +

    {info.feedback.message}

    +
    + ) : null}
    {method && info.feedback?.state !== "solved" ? ( - reducer.transition("select_challenge", { uuid })}> + + reducer.transition("select_challenge", { uuid }) + } + > {isFree ? "Solve" : `Pay and Solve`} ) : null} @@ -86,26 +121,36 @@ export function ChallengeOverviewScreen(): VNode {
    ); - }) - - const policyName = policy.challenges.map(x => x.info.type).join(" + "); - const opa = !atLeastThereIsOnePolicySolved ? undefined : ( policy.isPolicySolved ? undefined : '0.6') + }); + + const policyName = policy.challenges + .map((x) => x.info.type) + .join(" + "); + const opa = !atLeastThereIsOnePolicySolved + ? undefined + : policy.isPolicySolved + ? undefined + : "0.6"; return ( -
    +

    Policy #{policy_index + 1}: {policyName}

    - {policy.challenges.length === 0 &&

    - This policy doesn't have challenges. -

    } - {policy.challenges.length === 1 &&

    - This policy just have one challenge. -

    } - {policy.challenges.length > 1 &&

    - This policy have {policy.challenges.length} challenges. -

    } + {policy.challenges.length === 0 && ( +

    This policy doesn't have challenges.

    + )} + {policy.challenges.length === 1 && ( +

    This policy just have one challenge.

    + )} + {policy.challenges.length > 1 && ( +

    This policy have {policy.challenges.length} challenges.

    + )} {tableBody}
    ); diff --git a/packages/anastasis-webui/src/pages/home/CountrySelectionScreen.tsx b/packages/anastasis-webui/src/pages/home/CountrySelectionScreen.tsx index 77329f4fa..b64e1a096 100644 --- a/packages/anastasis-webui/src/pages/home/CountrySelectionScreen.tsx +++ b/packages/anastasis-webui/src/pages/home/CountrySelectionScreen.tsx @@ -16,7 +16,7 @@ export function CountrySelectionScreen(): VNode { currencies: [x.currency], }); return ( - +
    {reducer.currentReducerState.countries!.map((x: any) => (
    diff --git a/packages/anastasis-webui/src/pages/home/TruthsPayingScreen.tsx b/packages/anastasis-webui/src/pages/home/TruthsPayingScreen.tsx index 098a8ba8d..0b32e0db5 100644 --- a/packages/anastasis-webui/src/pages/home/TruthsPayingScreen.tsx +++ b/packages/anastasis-webui/src/pages/home/TruthsPayingScreen.tsx @@ -13,7 +13,7 @@ export function TruthsPayingScreen(): VNode { const payments = reducer.currentReducerState.payments ?? []; return (

    -- cgit v1.2.3 From 83622bd65a0ebd7c22555fb2cfdb542e20d044b9 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Thu, 4 Nov 2021 16:25:02 +0100 Subject: anastasis-core: type naming consistency --- packages/anastasis-core/src/index.ts | 50 ++++++++++++++-------------- packages/anastasis-core/src/reducer-types.ts | 30 ++++++++--------- 2 files changed, 40 insertions(+), 40 deletions(-) (limited to 'packages/anastasis-core/src') diff --git a/packages/anastasis-core/src/index.ts b/packages/anastasis-core/src/index.ts index 3b73aa002..fd04eb4d7 100644 --- a/packages/anastasis-core/src/index.ts +++ b/packages/anastasis-core/src/index.ts @@ -27,15 +27,15 @@ import { TruthUploadRequest, } from "./provider-types.js"; import { - ActionArgAddAuthentication, - ActionArgDeleteAuthentication, - ActionArgDeletePolicy, - ActionArgEnterSecret, - ActionArgEnterSecretName, - ActionArgEnterUserAttributes, + ActionArgsAddAuthentication, + ActionArgsDeleteAuthentication, + ActionArgsDeletePolicy, + ActionArgsEnterSecret, + ActionArgsEnterSecretName, + ActionArgsEnterUserAttributes, ActionArgsAddPolicy, - ActionArgSelectContinent, - ActionArgSelectCountry, + ActionArgsSelectContinent, + ActionArgsSelectCountry, ActionArgsSelectChallenge, ActionArgsSolveChallengeRequest, ActionArgsUpdateExpiration, @@ -43,9 +43,9 @@ import { AuthenticationProviderStatusOk, AuthMethod, BackupStates, - codecForActionArgEnterUserAttributes, + codecForActionArgsEnterUserAttributes, codecForActionArgsAddPolicy, - codecForActionArgSelectChallenge, + codecForActionArgsSelectChallenge, codecForActionArgSelectContinent, codecForActionArgSelectCountry, codecForActionArgsUpdateExpiration, @@ -168,7 +168,7 @@ export async function getRecoveryStartState(): Promise { async function selectCountry( selectedContinent: string, - args: ActionArgSelectCountry, + args: ActionArgsSelectCountry, ): Promise & Partial> { const countryCode = args.country_code; const currencies = args.currencies; @@ -209,7 +209,7 @@ async function selectCountry( async function backupSelectCountry( state: ReducerStateBackup, - args: ActionArgSelectCountry, + args: ActionArgsSelectCountry, ): Promise { return { ...state, @@ -220,7 +220,7 @@ async function backupSelectCountry( async function recoverySelectCountry( state: ReducerStateRecovery, - args: ActionArgSelectCountry, + args: ActionArgsSelectCountry, ): Promise { return { ...state, @@ -275,7 +275,7 @@ async function getProviderInfo( async function backupEnterUserAttributes( state: ReducerStateBackup, - args: ActionArgEnterUserAttributes, + args: ActionArgsEnterUserAttributes, ): Promise { const attributes = args.identity_attributes; const providerUrls = Object.keys(state.authentication_providers ?? {}); @@ -787,7 +787,7 @@ async function solveChallenge( async function recoveryEnterUserAttributes( state: ReducerStateRecovery, - args: ActionArgEnterUserAttributes, + args: ActionArgsEnterUserAttributes, ): Promise { // FIXME: validate attributes const st: ReducerStateRecovery = { @@ -812,7 +812,7 @@ async function selectChallenge( async function backupSelectContinent( state: ReducerStateBackup, - args: ActionArgSelectContinent, + args: ActionArgsSelectContinent, ): Promise { const countries = getCountries(args.continent); if (countries.length <= 0) { @@ -831,7 +831,7 @@ async function backupSelectContinent( async function recoverySelectContinent( state: ReducerStateRecovery, - args: ActionArgSelectContinent, + args: ActionArgsSelectContinent, ): Promise { const countries = getCountries(args.continent); return { @@ -890,7 +890,7 @@ function transitionRecoveryJump( async function addAuthentication( state: ReducerStateBackup, - args: ActionArgAddAuthentication, + args: ActionArgsAddAuthentication, ): Promise { return { ...state, @@ -903,7 +903,7 @@ async function addAuthentication( async function deleteAuthentication( state: ReducerStateBackup, - args: ActionArgDeleteAuthentication, + args: ActionArgsDeleteAuthentication, ): Promise { const m = state.authentication_methods ?? []; m.splice(args.authentication_method, 1); @@ -915,7 +915,7 @@ async function deleteAuthentication( async function deletePolicy( state: ReducerStateBackup, - args: ActionArgDeletePolicy, + args: ActionArgsDeletePolicy, ): Promise { const policies = [...(state.policies ?? [])]; policies.splice(args.policy_index, 1); @@ -1020,7 +1020,7 @@ async function updateUploadFees( async function enterSecret( state: ReducerStateBackup, - args: ActionArgEnterSecret, + args: ActionArgsEnterSecret, ): Promise { return updateUploadFees({ ...state, @@ -1048,7 +1048,7 @@ async function nextFromChallengeSelecting( async function enterSecretName( state: ReducerStateBackup, - args: ActionArgEnterSecretName, + args: ActionArgsEnterSecretName, ): Promise { return { ...state, @@ -1094,7 +1094,7 @@ const backupTransitions: Record< ...transitionBackupJump("back", BackupStates.CountrySelecting), ...transition( "enter_user_attributes", - codecForActionArgEnterUserAttributes(), + codecForActionArgsEnterUserAttributes(), backupEnterUserAttributes, ), }, @@ -1157,7 +1157,7 @@ const recoveryTransitions: Record< ...transitionRecoveryJump("back", RecoveryStates.CountrySelecting), ...transition( "enter_user_attributes", - codecForActionArgEnterUserAttributes(), + codecForActionArgsEnterUserAttributes(), recoveryEnterUserAttributes, ), }, @@ -1169,7 +1169,7 @@ const recoveryTransitions: Record< ...transitionRecoveryJump("back", RecoveryStates.SecretSelecting), ...transition( "select_challenge", - codecForActionArgSelectChallenge(), + codecForActionArgsSelectChallenge(), selectChallenge, ), ...transition("next", codecForAny(), nextFromChallengeSelecting), diff --git a/packages/anastasis-core/src/reducer-types.ts b/packages/anastasis-core/src/reducer-types.ts index 69feb6b64..e0d311e88 100644 --- a/packages/anastasis-core/src/reducer-types.ts +++ b/packages/anastasis-core/src/reducer-types.ts @@ -256,16 +256,16 @@ export interface ReducerStateBackupUserAttributesCollecting authentication_providers: { [url: string]: AuthenticationProviderStatus }; } -export interface ActionArgEnterUserAttributes { +export interface ActionArgsEnterUserAttributes { identity_attributes: Record; } -export const codecForActionArgEnterUserAttributes = () => - buildCodecForObject() +export const codecForActionArgsEnterUserAttributes = () => + buildCodecForObject() .property("identity_attributes", codecForAny()) - .build("ActionArgEnterUserAttributes"); + .build("ActionArgsEnterUserAttributes"); -export interface ActionArgAddAuthentication { +export interface ActionArgsAddAuthentication { authentication_method: { type: string; instructions: string; @@ -274,19 +274,19 @@ export interface ActionArgAddAuthentication { }; } -export interface ActionArgDeleteAuthentication { +export interface ActionArgsDeleteAuthentication { authentication_method: number; } -export interface ActionArgDeletePolicy { +export interface ActionArgsDeletePolicy { policy_index: number; } -export interface ActionArgEnterSecretName { +export interface ActionArgsEnterSecretName { name: string; } -export interface ActionArgEnterSecret { +export interface ActionArgsEnterSecret { secret: { value: string; mime?: string; @@ -294,16 +294,16 @@ export interface ActionArgEnterSecret { expiration: Timestamp; } -export interface ActionArgSelectContinent { +export interface ActionArgsSelectContinent { continent: string; } export const codecForActionArgSelectContinent = () => - buildCodecForObject() + buildCodecForObject() .property("continent", codecForString()) .build("ActionArgSelectContinent"); -export interface ActionArgSelectCountry { +export interface ActionArgsSelectCountry { country_code: string; currencies: string[]; } @@ -347,13 +347,13 @@ export const codecForActionArgsUpdateExpiration = () => .property("expiration", codecForTimestamp) .build("ActionArgsUpdateExpiration"); -export const codecForActionArgSelectChallenge = () => +export const codecForActionArgsSelectChallenge = () => buildCodecForObject() .property("uuid", codecForString()) - .build("ActionArgSelectChallenge"); + .build("ActionArgsSelectChallenge"); export const codecForActionArgSelectCountry = () => - buildCodecForObject() + buildCodecForObject() .property("country_code", codecForString()) .property("currencies", codecForList(codecForString())) .build("ActionArgSelectCountry"); -- cgit v1.2.3 From 6d6679e33849d551b9da07d5058dc09c474c66b7 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Thu, 4 Nov 2021 16:53:04 +0100 Subject: anastasis-core: support pin-type answers --- packages/anastasis-core/src/crypto.ts | 5 ++ packages/anastasis-core/src/index.ts | 68 ++++++++++++++++++---- .../anastasis-core/src/recovery-document-types.ts | 13 ++++- packages/anastasis-core/src/reducer-types.ts | 36 +++++++++++- 4 files changed, 106 insertions(+), 16 deletions(-) (limited to 'packages/anastasis-core/src') diff --git a/packages/anastasis-core/src/crypto.ts b/packages/anastasis-core/src/crypto.ts index da8338636..9689e4f2d 100644 --- a/packages/anastasis-core/src/crypto.ts +++ b/packages/anastasis-core/src/crypto.ts @@ -10,6 +10,7 @@ import { crypto_sign_keyPair_fromSeed, stringToBytes, secretbox_open, + hash, } from "@gnu-taler/taler-util"; import { gzipSync } from "fflate"; import { argon2id } from "hash-wasm"; @@ -283,6 +284,10 @@ export async function coreSecretEncrypt( }; } +export async function pinAnswerHash(pin: number): Promise { + return encodeCrock(hash(stringToBytes(pin.toString()))); +} + export async function secureAnswerHash( answer: string, truthUuid: TruthUuid, diff --git a/packages/anastasis-core/src/index.ts b/packages/anastasis-core/src/index.ts index fd04eb4d7..4c8ac0d31 100644 --- a/packages/anastasis-core/src/index.ts +++ b/packages/anastasis-core/src/index.ts @@ -86,11 +86,19 @@ import { decryptKeyShare, KeyShare, coreSecretRecover, + pinAnswerHash, } from "./crypto.js"; import { unzlibSync, zlibSync } from "fflate"; -import { EscrowMethod, RecoveryDocument } from "./recovery-document-types.js"; +import { + ChallengeType, + EscrowMethod, + RecoveryDocument, +} from "./recovery-document-types.js"; import { ProviderInfo, suggestPolicies } from "./policy-suggestion.js"; -import { ChallengeFeedback, ChallengeFeedbackStatus } from "./challenge-feedback-types.js"; +import { + ChallengeFeedback, + ChallengeFeedbackStatus, +} from "./challenge-feedback-types.js"; const { fetch } = fetchPonyfill({}); @@ -473,7 +481,7 @@ async function uploadSecret( } escrowMethods.push({ - escrow_type: authMethod.type, + escrow_type: authMethod.type as any, instructions: authMethod.instructions, provider_salt: provider.salt, truth_salt: tm.truth_salt, @@ -697,11 +705,43 @@ async function requestTruth( const url = new URL(`/truth/${truth.uuid}`, truth.url); if (solveRequest) { - // FIXME: This isn't correct for non-question truth responses. - url.searchParams.set( - "response", - await secureAnswerHash(solveRequest.answer, truth.uuid, truth.truth_salt), - ); + let respHash: string; + switch (truth.escrow_type) { + case ChallengeType.Question: + if ("answer" in solveRequest) { + respHash = await secureAnswerHash( + solveRequest.answer, + truth.uuid, + truth.truth_salt, + ); + } else { + throw Error("unsupported answer request"); + } + break; + case ChallengeType.Email: + case ChallengeType.Sms: + case ChallengeType.Post: + case ChallengeType.Totp: { + if ("answer" in solveRequest) { + const s = solveRequest.answer.trim().replace(/^A-/, ""); + let pin: number; + try { + pin = Number.parseInt(s); + } catch (e) { + throw Error("invalid pin format"); + } + respHash = await pinAnswerHash(pin); + } else if ("pin" in solveRequest) { + respHash = await pinAnswerHash(solveRequest.pin); + } else { + throw Error("unsupported answer request"); + } + break; + } + default: + throw Error("unsupported challenge type"); + } + url.searchParams.set("response", respHash); } const resp = await fetch(url.href, { @@ -711,10 +751,14 @@ async function requestTruth( }); if (resp.status === HttpStatusCode.Ok) { - const answerSalt = - solveRequest && truth.escrow_type === "question" - ? solveRequest.answer - : undefined; + let answerSalt: string | undefined = undefined; + if ( + solveRequest && + truth.escrow_type === "question" && + "answer" in solveRequest + ) { + answerSalt = solveRequest.answer; + } const userId = await userIdentifierDerive( state.identity_attributes, diff --git a/packages/anastasis-core/src/recovery-document-types.ts b/packages/anastasis-core/src/recovery-document-types.ts index 74003ccb1..3dc4481ff 100644 --- a/packages/anastasis-core/src/recovery-document-types.ts +++ b/packages/anastasis-core/src/recovery-document-types.ts @@ -1,5 +1,14 @@ import { TruthKey, TruthSalt, TruthUuid } from "./crypto.js"; +export enum ChallengeType { + Question = "question", + Sms = "sms", + Email = "email", + Post = "post", + Totp = "totp", + Iban = "iban", +} + export interface RecoveryDocument { /** * Human-readable name of the secret @@ -9,7 +18,7 @@ export interface RecoveryDocument { /** * Encrypted core secret. - * + * * Variable-size length, base32-crock encoded. */ encrypted_core_secret: string; @@ -56,7 +65,7 @@ export interface EscrowMethod { /** * Type of the escrow method (e.g. security question, SMS etc.). */ - escrow_type: string; + escrow_type: ChallengeType; /** * UUID of the escrow method. diff --git a/packages/anastasis-core/src/reducer-types.ts b/packages/anastasis-core/src/reducer-types.ts index e0d311e88..19f7d431a 100644 --- a/packages/anastasis-core/src/reducer-types.ts +++ b/packages/anastasis-core/src/reducer-types.ts @@ -312,12 +312,44 @@ export interface ActionArgsSelectChallenge { uuid: string; } -export type ActionArgsSolveChallengeRequest = SolveChallengeAnswerRequest; - +export type ActionArgsSolveChallengeRequest = + | SolveChallengeAnswerRequest + | SolveChallengePinRequest + | SolveChallengeHashRequest; + +/** + * Answer to a challenge. + * + * For "question" challenges, this is a string with the answer. + * + * For "sms" / "email" / "post" this is a numeric code with optionally + * the "A-" prefix. + */ export interface SolveChallengeAnswerRequest { answer: string; } +/** + * Answer to a challenge that requires a numeric response. + * + * XXX: Should be deprecated in favor of just "answer". + */ +export interface SolveChallengePinRequest { + pin: number; +} + +/** + * Answer to a challenge by directly providing the hash. + * + * XXX: When / why is this even used? + */ + export interface SolveChallengeHashRequest { + /** + * Base32-crock encoded hash code. + */ + hash: string; +} + export interface PolicyMember { authentication_method: number; provider: string; -- cgit v1.2.3 From 4aa813babeb9052da4a249c3fff7a5663345ea70 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Thu, 4 Nov 2021 17:02:56 +0100 Subject: update dependencies --- packages/anastasis-core/src/index.ts | 3 +- packages/anastasis-webui/package.json | 44 +- pnpm-lock.yaml | 6496 ++++++++++++++++++++++++--------- 3 files changed, 4757 insertions(+), 1786 deletions(-) (limited to 'packages/anastasis-core/src') diff --git a/packages/anastasis-core/src/index.ts b/packages/anastasis-core/src/index.ts index 4c8ac0d31..c1a6d3ff0 100644 --- a/packages/anastasis-core/src/index.ts +++ b/packages/anastasis-core/src/index.ts @@ -707,7 +707,7 @@ async function requestTruth( if (solveRequest) { let respHash: string; switch (truth.escrow_type) { - case ChallengeType.Question: + case ChallengeType.Question: { if ("answer" in solveRequest) { respHash = await secureAnswerHash( solveRequest.answer, @@ -718,6 +718,7 @@ async function requestTruth( throw Error("unsupported answer request"); } break; + } case ChallengeType.Email: case ChallengeType.Sms: case ChallengeType.Post: diff --git a/packages/anastasis-webui/package.json b/packages/anastasis-webui/package.json index ebb61aecb..10efa17c2 100644 --- a/packages/anastasis-webui/package.json +++ b/packages/anastasis-webui/package.json @@ -25,40 +25,40 @@ "dependencies": { "@gnu-taler/taler-util": "workspace:^0.8.3", "anastasis-core": "workspace:^0.0.1", - "date-fns": "2.22.1", + "date-fns": "2.25.0", "jed": "1.1.1", - "preact": "^10.3.1", - "preact-render-to-string": "^5.1.4", + "preact": "^10.5.15", + "preact-render-to-string": "^5.1.19", "preact-router": "^3.2.1", "qrcode-generator": "^1.4.4" }, "devDependencies": { "@creativebulma/bulma-tooltip": "^1.2.0", - "@storybook/addon-a11y": "^6.2.9", - "@storybook/addon-actions": "^6.2.9", - "@storybook/addon-essentials": "^6.2.9", - "@storybook/addon-links": "^6.2.9", - "@storybook/preact": "^6.2.9", + "@storybook/addon-a11y": "^6.3.12", + "@storybook/addon-actions": "^6.3.12", + "@storybook/addon-essentials": "^6.3.12", + "@storybook/addon-links": "^6.3.12", + "@storybook/preact": "^6.3.12", "@storybook/preset-scss": "^1.0.3", - "@types/enzyme": "^3.10.5", - "@types/jest": "^26.0.8", - "@typescript-eslint/eslint-plugin": "^2.25.0", - "@typescript-eslint/parser": "^2.25.0", + "@types/enzyme": "^3.10.10", + "@types/jest": "^27.0.2", + "@typescript-eslint/eslint-plugin": "^5.3.0", + "@typescript-eslint/parser": "^5.3.0", "bulma": "^0.9.3", "bulma-checkbox": "^1.1.1", "bulma-radio": "^1.1.1", "enzyme": "^3.11.0", - "enzyme-adapter-preact-pure": "^3.1.0", - "eslint": "^6.8.0", - "eslint-config-preact": "^1.1.1", - "jest": "^26.2.2", - "jest-preset-preact": "^4.0.2", + "enzyme-adapter-preact-pure": "^3.2.0", + "eslint": "^8.1.0", + "eslint-config-preact": "^1.2.0", + "jest": "^27.3.1", + "jest-preset-preact": "^4.0.5", "jssha": "^3.2.0", - "preact-cli": "^3.2.2", - "sass": "1.32.13", - "sass-loader": "^10.1.1", - "sirv-cli": "^1.0.0-next.3", - "typescript": "^3.7.5" + "preact-cli": "^3.3.1", + "sass": "1.43.4", + "sass-loader": "^10", + "sirv-cli": "^1.0.14", + "typescript": "^4.4.4" }, "jest": { "preset": "jest-preset-preact", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0d6693cb0..210922fa5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -51,74 +51,74 @@ importers: specifiers: '@creativebulma/bulma-tooltip': ^1.2.0 '@gnu-taler/taler-util': workspace:^0.8.3 - '@storybook/addon-a11y': ^6.2.9 - '@storybook/addon-actions': ^6.2.9 - '@storybook/addon-essentials': ^6.2.9 - '@storybook/addon-links': ^6.2.9 - '@storybook/preact': ^6.2.9 + '@storybook/addon-a11y': ^6.3.12 + '@storybook/addon-actions': ^6.3.12 + '@storybook/addon-essentials': ^6.3.12 + '@storybook/addon-links': ^6.3.12 + '@storybook/preact': ^6.3.12 '@storybook/preset-scss': ^1.0.3 - '@types/enzyme': ^3.10.5 - '@types/jest': ^26.0.8 - '@typescript-eslint/eslint-plugin': ^2.25.0 - '@typescript-eslint/parser': ^2.25.0 + '@types/enzyme': ^3.10.10 + '@types/jest': ^27.0.2 + '@typescript-eslint/eslint-plugin': ^5.3.0 + '@typescript-eslint/parser': ^5.3.0 anastasis-core: workspace:^0.0.1 bulma: ^0.9.3 bulma-checkbox: ^1.1.1 bulma-radio: ^1.1.1 - date-fns: 2.22.1 + date-fns: 2.25.0 enzyme: ^3.11.0 - enzyme-adapter-preact-pure: ^3.1.0 - eslint: ^6.8.0 - eslint-config-preact: ^1.1.1 + enzyme-adapter-preact-pure: ^3.2.0 + eslint: ^8.1.0 + eslint-config-preact: ^1.2.0 jed: 1.1.1 - jest: ^26.2.2 - jest-preset-preact: ^4.0.2 + jest: ^27.3.1 + jest-preset-preact: ^4.0.5 jssha: ^3.2.0 - preact: ^10.3.1 - preact-cli: ^3.2.2 - preact-render-to-string: ^5.1.4 + preact: ^10.5.15 + preact-cli: ^3.3.1 + preact-render-to-string: ^5.1.19 preact-router: ^3.2.1 qrcode-generator: ^1.4.4 - sass: 1.32.13 - sass-loader: ^10.1.1 - sirv-cli: ^1.0.0-next.3 - typescript: ^3.7.5 + sass: 1.43.4 + sass-loader: ^10 + sirv-cli: ^1.0.14 + typescript: ^4.4.4 dependencies: '@gnu-taler/taler-util': link:../taler-util anastasis-core: link:../anastasis-core - date-fns: 2.22.1 + date-fns: 2.25.0 jed: 1.1.1 - preact: 10.5.14 - preact-render-to-string: 5.1.19_preact@10.5.14 - preact-router: 3.2.1_preact@10.5.14 + preact: 10.5.15 + preact-render-to-string: 5.1.19_preact@10.5.15 + preact-router: 3.2.1_preact@10.5.15 qrcode-generator: 1.4.4 devDependencies: '@creativebulma/bulma-tooltip': 1.2.0 - '@storybook/addon-a11y': 6.3.7 - '@storybook/addon-actions': 6.3.7 - '@storybook/addon-essentials': 6.3.7_typescript@3.9.10 + '@storybook/addon-a11y': 6.3.12 + '@storybook/addon-actions': 6.3.12 + '@storybook/addon-essentials': 6.3.12_eslint@8.1.0+typescript@4.4.4 '@storybook/addon-links': 6.3.12 - '@storybook/preact': 6.3.7_preact@10.5.14+typescript@3.9.10 + '@storybook/preact': 6.3.12_95076c79c13120062fc2121e56d666e8 '@storybook/preset-scss': 1.0.3_sass-loader@10.2.0 - '@types/enzyme': 3.10.9 - '@types/jest': 26.0.24 - '@typescript-eslint/eslint-plugin': 2.34.0_2b015b1c4b7c4a3ed9a197dc233b1a35 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.10 + '@types/enzyme': 3.10.10 + '@types/jest': 27.0.2 + '@typescript-eslint/eslint-plugin': 5.3.0_f8873316f48f7781ccc3e081fc76e214 + '@typescript-eslint/parser': 5.3.0_eslint@8.1.0+typescript@4.4.4 bulma: 0.9.3 bulma-checkbox: 1.1.1 bulma-radio: 1.1.1 enzyme: 3.11.0 - enzyme-adapter-preact-pure: 3.1.0_enzyme@3.11.0+preact@10.5.14 - eslint: 6.8.0 - eslint-config-preact: 1.1.4_eslint@6.8.0+typescript@3.9.10 - jest: 26.6.3 - jest-preset-preact: 4.0.2_9b3f24ae35a87c3c82fffbe3fdf70e1e + enzyme-adapter-preact-pure: 3.2.0_enzyme@3.11.0+preact@10.5.15 + eslint: 8.1.0 + eslint-config-preact: 1.2.0_eslint@8.1.0+typescript@4.4.4 + jest: 27.3.1 + jest-preset-preact: 4.0.5_726380f5f23d12d9b6cc402fef7b8b84 jssha: 3.2.0 - preact-cli: 3.2.2_8d1b4ee21ca5a56b4aabd4a3e659b2d7 - sass: 1.32.13 - sass-loader: 10.2.0_sass@1.32.13 + preact-cli: 3.3.1_bb0f676d04cdcea3d812adbcf5208138 + sass: 1.43.4 + sass-loader: 10.2.0_sass@1.43.4 sirv-cli: 1.0.14 - typescript: 3.9.10 + typescript: 4.4.4 packages/idb-bridge: specifiers: @@ -433,6 +433,18 @@ packages: leven: 3.1.0 dev: true + /@apideck/better-ajv-errors/0.2.6_ajv@8.6.3: + resolution: {integrity: sha512-FvGcbFUdbPLexAhdvihkroCA3LQa7kGMa8Qj9f32BiOcV1Thscg/QCxp/kJibsFrhUrlKOzd07uJFOGTN0/awQ==} + engines: {node: '>=10'} + peerDependencies: + ajv: '>=8' + dependencies: + ajv: 8.6.3 + json-schema: 0.3.0 + jsonpointer: 4.1.0 + leven: 3.1.0 + dev: true + /@ava/typescript/1.1.1: resolution: {integrity: sha512-KbLUAe2cWXK63WLK6LnOJonjwEDU/8MNXCOA1ooX/YFZgKRmeAD1kZu+2K0ks5fnOCEcckNQAooyBNGdZUmMQA==} engines: {node: '>=10.18.0 <11 || >=12.14.0 <13 || >=13.5.0'} @@ -443,7 +455,7 @@ packages: /@babel/code-frame/7.10.4: resolution: {integrity: sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==} dependencies: - '@babel/highlight': 7.14.5 + '@babel/highlight': 7.16.0 dev: true /@babel/code-frame/7.12.11: @@ -486,14 +498,14 @@ packages: resolution: {integrity: sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.14.5 - '@babel/generator': 7.15.0 - '@babel/helper-module-transforms': 7.15.0 - '@babel/helpers': 7.15.3 - '@babel/parser': 7.15.3 - '@babel/template': 7.14.5 - '@babel/traverse': 7.15.0 - '@babel/types': 7.15.0 + '@babel/code-frame': 7.16.0 + '@babel/generator': 7.16.0 + '@babel/helper-module-transforms': 7.16.0 + '@babel/helpers': 7.16.0 + '@babel/parser': 7.16.2 + '@babel/template': 7.16.0 + '@babel/traverse': 7.16.0 + '@babel/types': 7.16.0 convert-source-map: 1.8.0 debug: 4.3.2 gensync: 1.0.0-beta.2 @@ -552,6 +564,43 @@ packages: - supports-color dev: true + /@babel/core/7.16.0: + resolution: {integrity: sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.16.0 + '@babel/generator': 7.16.0 + '@babel/helper-compilation-targets': 7.16.0_@babel+core@7.16.0 + '@babel/helper-module-transforms': 7.16.0 + '@babel/helpers': 7.16.0 + '@babel/parser': 7.16.2 + '@babel/template': 7.16.0 + '@babel/traverse': 7.16.0 + '@babel/types': 7.16.0 + convert-source-map: 1.8.0 + debug: 4.3.2 + gensync: 1.0.0-beta.2 + json5: 2.2.0 + semver: 6.3.0 + source-map: 0.5.7 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/eslint-parser/7.16.0_@babel+core@7.16.0+eslint@8.1.0: + resolution: {integrity: sha512-c+AsYOHjI+FgCa+ifLd8sDXp4U4mjkfFgL9NdQWhuA731kAUJs0WdJIXET4A14EJAR9Jv9FFF/MzPWJfV9Oirw==} + engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} + peerDependencies: + '@babel/core': '>=7.11.0' + eslint: ^7.5.0 || ^8.0.0 + dependencies: + '@babel/core': 7.16.0 + eslint: 8.1.0 + eslint-scope: 5.1.1 + eslint-visitor-keys: 2.1.0 + semver: 6.3.0 + dev: true + /@babel/generator/7.15.0: resolution: {integrity: sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==} engines: {node: '>=6.9.0'} @@ -600,70 +649,68 @@ packages: '@babel/types': 7.16.0 dev: true - /@babel/helper-compilation-targets/7.15.0: + /@babel/helper-compilation-targets/7.15.0_@babel+core@7.13.16: resolution: {integrity: sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/compat-data': 7.15.0 + '@babel/core': 7.13.16 '@babel/helper-validator-option': 7.14.5 browserslist: 4.16.8 semver: 6.3.0 dev: true - /@babel/helper-compilation-targets/7.15.0_@babel+core@7.13.16: + /@babel/helper-compilation-targets/7.15.0_@babel+core@7.15.0: resolution: {integrity: sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/compat-data': 7.15.0 - '@babel/core': 7.13.16 + '@babel/core': 7.15.0 '@babel/helper-validator-option': 7.14.5 browserslist: 4.16.8 semver: 6.3.0 dev: true - /@babel/helper-compilation-targets/7.15.0_@babel+core@7.15.0: - resolution: {integrity: sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==} + /@babel/helper-compilation-targets/7.16.0: + resolution: {integrity: sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.15.0 - '@babel/core': 7.15.0 + '@babel/compat-data': 7.16.0 '@babel/helper-validator-option': 7.14.5 - browserslist: 4.16.8 + browserslist: 4.17.6 semver: 6.3.0 dev: true - /@babel/helper-compilation-targets/7.16.0: + /@babel/helper-compilation-targets/7.16.0_@babel+core@7.15.0: resolution: {integrity: sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/compat-data': 7.16.0 + '@babel/core': 7.15.0 '@babel/helper-validator-option': 7.14.5 - browserslist: 4.17.5 + browserslist: 4.17.6 semver: 6.3.0 dev: true - /@babel/helper-create-class-features-plugin/7.15.0: - resolution: {integrity: sha512-MdmDXgvTIi4heDVX/e9EFfeGpugqm9fobBVg/iioE8kueXrOHdRDe36FAY7SnE9xXLVeYCoJR/gdrBEIHRC83Q==} + /@babel/helper-compilation-targets/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/helper-annotate-as-pure': 7.14.5 - '@babel/helper-function-name': 7.14.5 - '@babel/helper-member-expression-to-functions': 7.15.0 - '@babel/helper-optimise-call-expression': 7.14.5 - '@babel/helper-replace-supers': 7.15.0 - '@babel/helper-split-export-declaration': 7.14.5 - transitivePeerDependencies: - - supports-color + '@babel/compat-data': 7.16.0 + '@babel/core': 7.16.0 + '@babel/helper-validator-option': 7.14.5 + browserslist: 4.17.6 + semver: 6.3.0 dev: true /@babel/helper-create-class-features-plugin/7.15.0_@babel+core@7.13.16: @@ -716,14 +763,21 @@ packages: - supports-color dev: true - /@babel/helper-create-regexp-features-plugin/7.14.5: - resolution: {integrity: sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==} + /@babel/helper-create-class-features-plugin/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/helper-annotate-as-pure': 7.14.5 - regexpu-core: 4.7.1 + '@babel/core': 7.16.0 + '@babel/helper-annotate-as-pure': 7.16.0 + '@babel/helper-function-name': 7.16.0 + '@babel/helper-member-expression-to-functions': 7.16.0 + '@babel/helper-optimise-call-expression': 7.16.0 + '@babel/helper-replace-supers': 7.16.0 + '@babel/helper-split-export-declaration': 7.16.0 + transitivePeerDependencies: + - supports-color dev: true /@babel/helper-create-regexp-features-plugin/7.14.5_@babel+core@7.13.16: @@ -758,16 +812,27 @@ packages: regexpu-core: 4.8.0 dev: true + /@babel/helper-create-regexp-features-plugin/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-annotate-as-pure': 7.16.0 + regexpu-core: 4.8.0 + dev: true + /@babel/helper-define-polyfill-provider/0.1.5_@babel+core@7.15.0: resolution: {integrity: sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==} peerDependencies: '@babel/core': ^7.4.0-0 dependencies: '@babel/core': 7.15.0 - '@babel/helper-compilation-targets': 7.15.0_@babel+core@7.15.0 - '@babel/helper-module-imports': 7.14.5 + '@babel/helper-compilation-targets': 7.16.0_@babel+core@7.15.0 + '@babel/helper-module-imports': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/traverse': 7.15.0 + '@babel/traverse': 7.16.0 debug: 4.3.2 lodash.debounce: 4.0.8 resolve: 1.20.0 @@ -776,15 +841,16 @@ packages: - supports-color dev: true - /@babel/helper-define-polyfill-provider/0.2.3: - resolution: {integrity: sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==} + /@babel/helper-define-polyfill-provider/0.1.5_@babel+core@7.16.0: + resolution: {integrity: sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==} peerDependencies: '@babel/core': ^7.4.0-0 dependencies: - '@babel/helper-compilation-targets': 7.15.0 - '@babel/helper-module-imports': 7.14.5 + '@babel/core': 7.16.0 + '@babel/helper-compilation-targets': 7.16.0_@babel+core@7.16.0 + '@babel/helper-module-imports': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/traverse': 7.15.0 + '@babel/traverse': 7.16.0 debug: 4.3.2 lodash.debounce: 4.0.8 resolve: 1.20.0 @@ -846,6 +912,24 @@ packages: - supports-color dev: true + /@babel/helper-define-polyfill-provider/0.2.4_@babel+core@7.16.0: + resolution: {integrity: sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ==} + peerDependencies: + '@babel/core': ^7.4.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-compilation-targets': 7.16.0_@babel+core@7.16.0 + '@babel/helper-module-imports': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/traverse': 7.16.0 + debug: 4.3.2 + lodash.debounce: 4.0.8 + resolve: 1.20.0 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-explode-assignable-expression/7.14.5: resolution: {integrity: sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==} engines: {node: '>=6.9.0'} @@ -1135,6 +1219,17 @@ packages: - supports-color dev: true + /@babel/helpers/7.16.0: + resolution: {integrity: sha512-dVRM0StFMdKlkt7cVcGgwD8UMaBfWJHl3A83Yfs8GQ3MO0LHIIIMvK7Fa0RGOGUQ10qikLaX6D7o5htcQWgTMQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.16.0 + '@babel/traverse': 7.16.0 + '@babel/types': 7.16.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/highlight/7.10.4: resolution: {integrity: sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==} dependencies: @@ -1190,15 +1285,14 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.14.5: - resolution: {integrity: sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==} + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.16.2_@babel+core@7.16.0: + resolution: {integrity: sha512-h37CvpLSf8gb2lIJ2CgC3t+EjFbi0t8qS7LCS1xcJIlEXE4czlofwaW7W1HA8zpgOCzI9C1nmoqNR1zWkk0pQg==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.13.0 + '@babel/core': ^7.0.0 dependencies: + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.14.5 - '@babel/plugin-proposal-optional-chaining': 7.14.5 dev: true /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.14.5_@babel+core@7.13.16: @@ -1236,17 +1330,16 @@ packages: '@babel/plugin-proposal-optional-chaining': 7.16.0 dev: true - /@babel/plugin-proposal-async-generator-functions/7.14.9: - resolution: {integrity: sha512-d1lnh+ZnKrFKwtTYdw320+sQWCTwgkB9fmUhNXRADA4akR6wLjaruSGnIEUjpt9HCOwTr4ynFTKu19b7rFRpmw==} + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.13.0 dependencies: + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/helper-remap-async-to-generator': 7.14.5 - '@babel/plugin-syntax-async-generators': 7.8.4 - transitivePeerDependencies: - - supports-color + '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 + '@babel/plugin-proposal-optional-chaining': 7.16.0_@babel+core@7.16.0 dev: true /@babel/plugin-proposal-async-generator-functions/7.14.9_@babel+core@7.13.16: @@ -1290,14 +1383,16 @@ packages: - supports-color dev: true - /@babel/plugin-proposal-class-properties/7.14.5: - resolution: {integrity: sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==} + /@babel/plugin-proposal-async-generator-functions/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-nyYmIo7ZqKsY6P4lnVmBlxp9B3a96CscbLotlsNuktMHahkDwoPYEjXrZHU0Tj844Z9f1IthVxQln57mhkcExw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-create-class-features-plugin': 7.15.0 + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-remap-async-to-generator': 7.16.0 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.16.0 transitivePeerDependencies: - supports-color dev: true @@ -1340,15 +1435,15 @@ packages: - supports-color dev: true - /@babel/plugin-proposal-class-static-block/7.14.5: - resolution: {integrity: sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==} + /@babel/plugin-proposal-class-properties/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.12.0 + '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-create-class-features-plugin': 7.15.0 + '@babel/core': 7.16.0 + '@babel/helper-create-class-features-plugin': 7.16.0_@babel+core@7.16.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-syntax-class-static-block': 7.14.5 transitivePeerDependencies: - supports-color dev: true @@ -1394,6 +1489,20 @@ packages: - supports-color dev: true + /@babel/plugin-proposal-class-static-block/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-create-class-features-plugin': 7.16.0_@babel+core@7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.16.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-proposal-decorators/7.14.5_@babel+core@7.15.0: resolution: {integrity: sha512-LYz5nvQcvYeRVjui1Ykn28i+3aUiXwQ/3MGoEy0InTaz1pJo/lAzmIDXX+BQny/oufgHzJ6vnEEiXQ8KZjEVFg==} engines: {node: '>=6.9.0'} @@ -1408,14 +1517,18 @@ packages: - supports-color dev: true - /@babel/plugin-proposal-dynamic-import/7.14.5: - resolution: {integrity: sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==} + /@babel/plugin-proposal-decorators/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-ttvhKuVnQwoNQrcTd1oe6o49ahaZ1kns1fsJKzTVOaS/FJDJoK4qzgVS68xzJhYUMgTnbXW6z/T6rlP3lL7tJw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.16.0 + '@babel/helper-create-class-features-plugin': 7.16.0_@babel+core@7.16.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3 + '@babel/plugin-syntax-decorators': 7.16.0_@babel+core@7.16.0 + transitivePeerDependencies: + - supports-color dev: true /@babel/plugin-proposal-dynamic-import/7.14.5_@babel+core@7.13.16: @@ -1450,6 +1563,17 @@ packages: '@babel/plugin-syntax-dynamic-import': 7.8.3 dev: true + /@babel/plugin-proposal-dynamic-import/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.16.0 + dev: true + /@babel/plugin-proposal-export-default-from/7.14.5_@babel+core@7.15.0: resolution: {integrity: sha512-T8KZ5abXvKMjF6JcoXjgac3ElmXf0AWzJwi2O/42Jk+HmCky3D9+i1B7NPP1FblyceqTevKeV/9szeikFoaMDg==} engines: {node: '>=6.9.0'} @@ -1461,14 +1585,15 @@ packages: '@babel/plugin-syntax-export-default-from': 7.14.5_@babel+core@7.15.0 dev: true - /@babel/plugin-proposal-export-namespace-from/7.14.5: - resolution: {integrity: sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==} + /@babel/plugin-proposal-export-default-from/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-kFAhaIbh5qbBwETRNa/cgGmPJ/BicXhIyrZhAkyYhf/Z9LXCTRGO1mvUwczto0Hl1q4YtzP9cRtTKT4wujm38Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3 + '@babel/plugin-syntax-export-default-from': 7.16.0_@babel+core@7.16.0 dev: true /@babel/plugin-proposal-export-namespace-from/7.14.5_@babel+core@7.13.16: @@ -1503,14 +1628,15 @@ packages: '@babel/plugin-syntax-export-namespace-from': 7.8.3 dev: true - /@babel/plugin-proposal-json-strings/7.14.5: - resolution: {integrity: sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==} + /@babel/plugin-proposal-export-namespace-from/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-syntax-json-strings': 7.8.3 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.16.0 dev: true /@babel/plugin-proposal-json-strings/7.14.5_@babel+core@7.13.16: @@ -1545,14 +1671,15 @@ packages: '@babel/plugin-syntax-json-strings': 7.8.3 dev: true - /@babel/plugin-proposal-logical-assignment-operators/7.14.5: - resolution: {integrity: sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==} + /@babel/plugin-proposal-json-strings/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.16.0 dev: true /@babel/plugin-proposal-logical-assignment-operators/7.14.5_@babel+core@7.13.16: @@ -1587,14 +1714,15 @@ packages: '@babel/plugin-syntax-logical-assignment-operators': 7.10.4 dev: true - /@babel/plugin-proposal-nullish-coalescing-operator/7.14.5: - resolution: {integrity: sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==} + /@babel/plugin-proposal-logical-assignment-operators/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.16.0 dev: true /@babel/plugin-proposal-nullish-coalescing-operator/7.14.5_@babel+core@7.13.16: @@ -1629,14 +1757,15 @@ packages: '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3 dev: true - /@babel/plugin-proposal-numeric-separator/7.14.5: - resolution: {integrity: sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==} + /@babel/plugin-proposal-nullish-coalescing-operator/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.16.0 dev: true /@babel/plugin-proposal-numeric-separator/7.14.5_@babel+core@7.13.16: @@ -1671,28 +1800,26 @@ packages: '@babel/plugin-syntax-numeric-separator': 7.10.4 dev: true - /@babel/plugin-proposal-object-rest-spread/7.12.1_@babel+core@7.12.9: - resolution: {integrity: sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==} + /@babel/plugin-proposal-numeric-separator/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.10.4 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.12.9 - '@babel/plugin-transform-parameters': 7.14.5_@babel+core@7.12.9 + '@babel/core': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.16.0 dev: true - /@babel/plugin-proposal-object-rest-spread/7.14.7: - resolution: {integrity: sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==} - engines: {node: '>=6.9.0'} + /@babel/plugin-proposal-object-rest-spread/7.12.1_@babel+core@7.12.9: + resolution: {integrity: sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.15.0 - '@babel/helper-compilation-targets': 7.15.0 - '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3 - '@babel/plugin-transform-parameters': 7.14.5 + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.10.4 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.12.9 + '@babel/plugin-transform-parameters': 7.16.0_@babel+core@7.12.9 dev: true /@babel/plugin-proposal-object-rest-spread/7.14.7_@babel+core@7.13.16: @@ -1736,14 +1863,18 @@ packages: '@babel/plugin-transform-parameters': 7.16.0 dev: true - /@babel/plugin-proposal-optional-catch-binding/7.14.5: - resolution: {integrity: sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==} + /@babel/plugin-proposal-object-rest-spread/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/compat-data': 7.16.0 + '@babel/core': 7.16.0 + '@babel/helper-compilation-targets': 7.16.0_@babel+core@7.16.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.16.0 + '@babel/plugin-transform-parameters': 7.16.0_@babel+core@7.16.0 dev: true /@babel/plugin-proposal-optional-catch-binding/7.14.5_@babel+core@7.13.16: @@ -1778,15 +1909,15 @@ packages: '@babel/plugin-syntax-optional-catch-binding': 7.8.3 dev: true - /@babel/plugin-proposal-optional-chaining/7.14.5: - resolution: {integrity: sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==} + /@babel/plugin-proposal-optional-catch-binding/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.14.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.16.0 dev: true /@babel/plugin-proposal-optional-chaining/7.14.5_@babel+core@7.13.16: @@ -1824,16 +1955,16 @@ packages: '@babel/plugin-syntax-optional-chaining': 7.8.3 dev: true - /@babel/plugin-proposal-private-methods/7.14.5: - resolution: {integrity: sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==} + /@babel/plugin-proposal-optional-chaining/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-create-class-features-plugin': 7.15.0 + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 - transitivePeerDependencies: - - supports-color + '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.16.0 dev: true /@babel/plugin-proposal-private-methods/7.14.5_@babel+core@7.13.16: @@ -1874,16 +2005,15 @@ packages: - supports-color dev: true - /@babel/plugin-proposal-private-property-in-object/7.14.5: - resolution: {integrity: sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==} + /@babel/plugin-proposal-private-methods/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-annotate-as-pure': 7.14.5 - '@babel/helper-create-class-features-plugin': 7.15.0 + '@babel/core': 7.16.0 + '@babel/helper-create-class-features-plugin': 7.16.0_@babel+core@7.16.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5 transitivePeerDependencies: - supports-color dev: true @@ -1932,14 +2062,19 @@ packages: - supports-color dev: true - /@babel/plugin-proposal-unicode-property-regex/7.14.5: - resolution: {integrity: sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==} - engines: {node: '>=4'} + /@babel/plugin-proposal-private-property-in-object/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-create-regexp-features-plugin': 7.14.5 + '@babel/core': 7.16.0 + '@babel/helper-annotate-as-pure': 7.16.0 + '@babel/helper-create-class-features-plugin': 7.16.0_@babel+core@7.16.0 '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.16.0 + transitivePeerDependencies: + - supports-color dev: true /@babel/plugin-proposal-unicode-property-regex/7.14.5_@babel+core@7.13.16: @@ -1974,8 +2109,19 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-syntax-async-generators/7.8.4: - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + /@babel/plugin-proposal-unicode-property-regex/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g==} + engines: {node: '>=4'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-create-regexp-features-plugin': 7.16.0_@babel+core@7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-syntax-async-generators/7.8.4: + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -2000,6 +2146,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.16.0: + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.15.0: resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: @@ -2009,6 +2164,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.16.0: + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-syntax-class-properties/7.12.13: resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: @@ -2035,6 +2199,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.16.0: + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-syntax-class-static-block/7.14.5: resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} @@ -2064,6 +2237,16 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.16.0: + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-syntax-decorators/7.14.5_@babel+core@7.15.0: resolution: {integrity: sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw==} engines: {node: '>=6.9.0'} @@ -2074,6 +2257,16 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-syntax-decorators/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-nxnnngZClvlY13nHJAIDow0S7Qzhq64fQ/NlqS+VER3kjW/4F0jLhXjeL8jcwSwz6Ca3rotT5NJD2T9I7lcv7g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-syntax-dynamic-import/7.8.3: resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: @@ -2100,6 +2293,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.16.0: + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-syntax-export-default-from/7.14.5_@babel+core@7.15.0: resolution: {integrity: sha512-snWDxjuaPEobRBnhpqEfZ8RMxDbHt8+87fiEioGuE+Uc0xAKgSD8QiuL3lF93hPVQfZFAcYwrrf+H5qUhike3Q==} engines: {node: '>=6.9.0'} @@ -2110,6 +2312,16 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-syntax-export-default-from/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-xllLOdBj77mFSw8s02I+2SSQGHOftbWTlGmagheuNk/gjQsk7IrYsR/EosXVAVpgIUFffLckB/iPRioQYLHSrQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-syntax-export-namespace-from/7.8.3: resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: @@ -2136,6 +2348,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.16.0: + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.15.0: resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: @@ -2145,6 +2366,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.16.0: + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-syntax-json-strings/7.8.3: resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: @@ -2171,21 +2401,21 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-syntax-jsx/7.12.1_@babel+core@7.12.9: - resolution: {integrity: sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==} + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.16.0: + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.9 + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-syntax-jsx/7.14.5: - resolution: {integrity: sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-jsx/7.12.1_@babel+core@7.12.9: + resolution: {integrity: sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.14.5 dev: true @@ -2209,6 +2439,25 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-syntax-jsx/7.16.0: + resolution: {integrity: sha512-8zv2+xiPHwly31RK4RmnEYY5zziuF3O7W2kIDW+07ewWDh6Oi0dRq8kwvulRkFgt6DB97RlKs5c1y068iPlCUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-syntax-jsx/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-8zv2+xiPHwly31RK4RmnEYY5zziuF3O7W2kIDW+07ewWDh6Oi0dRq8kwvulRkFgt6DB97RlKs5c1y068iPlCUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-syntax-logical-assignment-operators/7.10.4: resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: @@ -2235,6 +2484,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.16.0: + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3: resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: @@ -2261,6 +2519,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.16.0: + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-syntax-numeric-separator/7.10.4: resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: @@ -2287,6 +2554,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.16.0: + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-syntax-object-rest-spread/7.8.3: resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: @@ -2322,6 +2598,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.16.0: + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-syntax-optional-catch-binding/7.8.3: resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: @@ -2348,6 +2633,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.16.0: + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-syntax-optional-chaining/7.8.3: resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: @@ -2374,6 +2668,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.16.0: + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-syntax-private-property-in-object/7.14.5: resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} @@ -2403,6 +2706,16 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.16.0: + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-syntax-top-level-await/7.14.5: resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} @@ -2432,6 +2745,16 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.16.0: + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-syntax-typescript/7.14.5_@babel+core@7.13.16: resolution: {integrity: sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==} engines: {node: '>=6.9.0'} @@ -2452,12 +2775,13 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-transform-arrow-functions/7.14.5: - resolution: {integrity: sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==} + /@babel/plugin-syntax-typescript/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-Xv6mEXqVdaqCBfJFyeab0fH2DnUoMsDmhamxsSi4j8nLd4Vtw213WMJr55xxqipC/YVWyPY3K0blJncPYji+dQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 dev: true @@ -2490,17 +2814,14 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-transform-async-to-generator/7.14.5: - resolution: {integrity: sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==} + /@babel/plugin-transform-arrow-functions/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-module-imports': 7.14.5 + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/helper-remap-async-to-generator': 7.14.5 - transitivePeerDependencies: - - supports-color dev: true /@babel/plugin-transform-async-to-generator/7.14.5_@babel+core@7.13.16: @@ -2544,13 +2865,18 @@ packages: - supports-color dev: true - /@babel/plugin-transform-block-scoped-functions/7.14.5: - resolution: {integrity: sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==} + /@babel/plugin-transform-async-to-generator/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.16.0 + '@babel/helper-module-imports': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-remap-async-to-generator': 7.16.0 + transitivePeerDependencies: + - supports-color dev: true /@babel/plugin-transform-block-scoped-functions/7.14.5_@babel+core@7.13.16: @@ -2582,12 +2908,13 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-transform-block-scoping/7.15.3: - resolution: {integrity: sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==} + /@babel/plugin-transform-block-scoped-functions/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 dev: true @@ -2620,21 +2947,14 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-transform-classes/7.14.9: - resolution: {integrity: sha512-NfZpTcxU3foGWbl4wxmZ35mTsYJy8oQocbeIMoDAGGFarAmSQlL+LWMkDx/tj6pNotpbX3rltIA4dprgAPOq5A==} + /@babel/plugin-transform-block-scoping/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-annotate-as-pure': 7.14.5 - '@babel/helper-function-name': 7.14.5 - '@babel/helper-optimise-call-expression': 7.14.5 + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/helper-replace-supers': 7.15.0 - '@babel/helper-split-export-declaration': 7.14.5 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color dev: true /@babel/plugin-transform-classes/7.14.9_@babel+core@7.13.16: @@ -2690,13 +3010,22 @@ packages: - supports-color dev: true - /@babel/plugin-transform-computed-properties/7.14.5: - resolution: {integrity: sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==} + /@babel/plugin-transform-classes/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.16.0 + '@babel/helper-annotate-as-pure': 7.16.0 + '@babel/helper-function-name': 7.16.0 + '@babel/helper-optimise-call-expression': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-replace-supers': 7.16.0 + '@babel/helper-split-export-declaration': 7.16.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color dev: true /@babel/plugin-transform-computed-properties/7.14.5_@babel+core@7.13.16: @@ -2728,12 +3057,13 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-transform-destructuring/7.14.7: - resolution: {integrity: sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==} + /@babel/plugin-transform-computed-properties/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 dev: true @@ -2766,13 +3096,13 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-transform-dotall-regex/7.14.5: - resolution: {integrity: sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==} + /@babel/plugin-transform-destructuring/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-create-regexp-features-plugin': 7.14.5 + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 dev: true @@ -2808,12 +3138,14 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-transform-duplicate-keys/7.14.5: - resolution: {integrity: sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==} + /@babel/plugin-transform-dotall-regex/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.16.0 + '@babel/helper-create-regexp-features-plugin': 7.16.0_@babel+core@7.16.0 '@babel/helper-plugin-utils': 7.14.5 dev: true @@ -2846,13 +3178,13 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-transform-exponentiation-operator/7.14.5: - resolution: {integrity: sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==} + /@babel/plugin-transform-duplicate-keys/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-builder-binary-assignment-operator-visitor': 7.14.5 + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 dev: true @@ -2888,12 +3220,14 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-transform-for-of/7.14.5: - resolution: {integrity: sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==} + /@babel/plugin-transform-exponentiation-operator/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.16.0 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 dev: true @@ -2926,13 +3260,13 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-transform-function-name/7.14.5: - resolution: {integrity: sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==} + /@babel/plugin-transform-for-of/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-function-name': 7.14.5 + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 dev: true @@ -2968,12 +3302,14 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-transform-literals/7.14.5: - resolution: {integrity: sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==} + /@babel/plugin-transform-function-name/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.16.0 + '@babel/helper-function-name': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 dev: true @@ -3006,12 +3342,13 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-transform-member-expression-literals/7.14.5: - resolution: {integrity: sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==} + /@babel/plugin-transform-literals/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 dev: true @@ -3044,17 +3381,14 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-transform-modules-amd/7.14.5: - resolution: {integrity: sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==} + /@babel/plugin-transform-member-expression-literals/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-module-transforms': 7.15.0 + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 - babel-plugin-dynamic-import-node: 2.3.3 - transitivePeerDependencies: - - supports-color dev: true /@babel/plugin-transform-modules-amd/7.14.5_@babel+core@7.13.16: @@ -3098,15 +3432,15 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-commonjs/7.15.0: - resolution: {integrity: sha512-3H/R9s8cXcOGE8kgMlmjYYC9nqr5ELiPkJn4q0mypBrjhYQoc+5/Maq69vV4xRPWnkzZuwJPf5rArxpB/35Cig==} + /@babel/plugin-transform-modules-amd/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-module-transforms': 7.15.0 + '@babel/core': 7.16.0 + '@babel/helper-module-transforms': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/helper-simple-access': 7.14.8 babel-plugin-dynamic-import-node: 2.3.3 transitivePeerDependencies: - supports-color @@ -3156,16 +3490,16 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-systemjs/7.14.5: - resolution: {integrity: sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==} + /@babel/plugin-transform-modules-commonjs/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-hoist-variables': 7.14.5 - '@babel/helper-module-transforms': 7.15.0 + '@babel/core': 7.16.0 + '@babel/helper-module-transforms': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/helper-validator-identifier': 7.14.9 + '@babel/helper-simple-access': 7.16.0 babel-plugin-dynamic-import-node: 2.3.3 transitivePeerDependencies: - supports-color @@ -3218,14 +3552,18 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-umd/7.14.5: - resolution: {integrity: sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==} + /@babel/plugin-transform-modules-systemjs/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-module-transforms': 7.15.0 + '@babel/core': 7.16.0 + '@babel/helper-hoist-variables': 7.16.0 + '@babel/helper-module-transforms': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-validator-identifier': 7.15.7 + babel-plugin-dynamic-import-node: 2.3.3 transitivePeerDependencies: - supports-color dev: true @@ -3268,13 +3606,17 @@ packages: - supports-color dev: true - /@babel/plugin-transform-named-capturing-groups-regex/7.14.9: - resolution: {integrity: sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==} + /@babel/plugin-transform-modules-umd/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0 + '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-create-regexp-features-plugin': 7.14.5 + '@babel/core': 7.16.0 + '@babel/helper-module-transforms': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + transitivePeerDependencies: + - supports-color dev: true /@babel/plugin-transform-named-capturing-groups-regex/7.14.9_@babel+core@7.13.16: @@ -3306,13 +3648,14 @@ packages: '@babel/helper-create-regexp-features-plugin': 7.16.0 dev: true - /@babel/plugin-transform-new-target/7.14.5: - resolution: {integrity: sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==} + /@babel/plugin-transform-named-capturing-groups-regex/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.0.0 dependencies: - '@babel/helper-plugin-utils': 7.14.5 + '@babel/core': 7.16.0 + '@babel/helper-create-regexp-features-plugin': 7.16.0_@babel+core@7.16.0 dev: true /@babel/plugin-transform-new-target/7.14.5_@babel+core@7.13.16: @@ -3344,26 +3687,34 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-transform-object-assign/7.14.5_@babel+core@7.15.0: - resolution: {integrity: sha512-lvhjk4UN9xJJYB1mI5KC0/o1D5EcJXdbhVe+4fSk08D6ZN+iuAIs7LJC+71h8av9Ew4+uRq9452v9R93SFmQlQ==} + /@babel/plugin-transform-new-target/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.15.0 + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-transform-object-super/7.14.5: - resolution: {integrity: sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==} + /@babel/plugin-transform-object-assign/7.14.5_@babel+core@7.15.0: + resolution: {integrity: sha512-lvhjk4UN9xJJYB1mI5KC0/o1D5EcJXdbhVe+4fSk08D6ZN+iuAIs7LJC+71h8av9Ew4+uRq9452v9R93SFmQlQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.15.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-transform-object-assign/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-TftKY6Hxo5Uf/EIoC3BKQyLvlH46tbtK4xub90vzi9+yS8z1+O/52YHyywCZvYeLPOvv//1j3BPokLuHTWPcbg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/helper-replace-supers': 7.15.0 - transitivePeerDependencies: - - supports-color dev: true /@babel/plugin-transform-object-super/7.14.5_@babel+core@7.13.16: @@ -3404,60 +3755,65 @@ packages: - supports-color dev: true - /@babel/plugin-transform-parameters/7.14.5: - resolution: {integrity: sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==} + /@babel/plugin-transform-object-super/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-replace-supers': 7.16.0 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-parameters/7.14.5_@babel+core@7.12.9: + /@babel/plugin-transform-parameters/7.14.5_@babel+core@7.13.16: resolution: {integrity: sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.9 + '@babel/core': 7.13.16 '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-transform-parameters/7.14.5_@babel+core@7.13.16: + /@babel/plugin-transform-parameters/7.14.5_@babel+core@7.15.0: resolution: {integrity: sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.13.16 + '@babel/core': 7.15.0 '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-transform-parameters/7.14.5_@babel+core@7.15.0: - resolution: {integrity: sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==} + /@babel/plugin-transform-parameters/7.16.0: + resolution: {integrity: sha512-XgnQEm1CevKROPx+udOi/8f8TiGhrUWiHiaUCIp47tE0tpFDjzXNTZc9E5CmCwxNjXTWEVqvRfWZYOTFvMa/ZQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.15.0 '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-transform-parameters/7.16.0: + /@babel/plugin-transform-parameters/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-XgnQEm1CevKROPx+udOi/8f8TiGhrUWiHiaUCIp47tE0tpFDjzXNTZc9E5CmCwxNjXTWEVqvRfWZYOTFvMa/ZQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-transform-property-literals/7.14.5: - resolution: {integrity: sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==} + /@babel/plugin-transform-parameters/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-XgnQEm1CevKROPx+udOi/8f8TiGhrUWiHiaUCIp47tE0tpFDjzXNTZc9E5CmCwxNjXTWEVqvRfWZYOTFvMa/ZQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 dev: true @@ -3490,6 +3846,16 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-transform-property-literals/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-transform-react-display-name/7.15.1_@babel+core@7.15.0: resolution: {integrity: sha512-yQZ/i/pUCJAHI/LbtZr413S3VT26qNrEm0M5RRxQJA947/YNYwbZbBaXGDrq6CG5QsZycI1VIP6d7pQaBfP+8Q==} engines: {node: '>=6.9.0'} @@ -3500,6 +3866,16 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-transform-react-display-name/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-FJFdJAqaCpndL+pIf0aeD/qlQwT7QXOvR6Cc8JPvNhKJBi2zc/DPc4g05Y3fbD/0iWAMQFGij4+Xw+4L/BMpTg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-transform-react-jsx-development/7.14.5_@babel+core@7.15.0: resolution: {integrity: sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==} engines: {node: '>=6.9.0'} @@ -3510,27 +3886,24 @@ packages: '@babel/plugin-transform-react-jsx': 7.14.9_@babel+core@7.15.0 dev: true - /@babel/plugin-transform-react-jsx-source/7.14.5_@babel+core@7.13.16: - resolution: {integrity: sha512-1TpSDnD9XR/rQ2tzunBVPThF5poaYT9GqP+of8fAtguYuI/dm2RkrMBDemsxtY0XBzvW7nXjYM0hRyKX9QYj7Q==} + /@babel/plugin-transform-react-jsx-development/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-qq65iSqBRq0Hr3wq57YG2AmW0H6wgTnIzpffTphrUWUgLCOK+zf1f7G0vuOiXrp7dU1qq+fQBoqZ3wCDAkhFzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.14.5 + '@babel/core': 7.16.0 + '@babel/plugin-transform-react-jsx': 7.16.0_@babel+core@7.16.0 dev: true - /@babel/plugin-transform-react-jsx/7.14.9: - resolution: {integrity: sha512-30PeETvS+AeD1f58i1OVyoDlVYQhap/K20ZrMjLmmzmC2AYR/G43D4sdJAaDAqCD3MYpSWbmrz3kES158QSLjw==} + /@babel/plugin-transform-react-jsx-source/7.14.5_@babel+core@7.13.16: + resolution: {integrity: sha512-1TpSDnD9XR/rQ2tzunBVPThF5poaYT9GqP+of8fAtguYuI/dm2RkrMBDemsxtY0XBzvW7nXjYM0hRyKX9QYj7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-annotate-as-pure': 7.14.5 - '@babel/helper-module-imports': 7.14.5 + '@babel/core': 7.13.16 '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-syntax-jsx': 7.14.5 - '@babel/types': 7.15.0 dev: true /@babel/plugin-transform-react-jsx/7.14.9_@babel+core@7.13.16: @@ -3561,6 +3934,33 @@ packages: '@babel/types': 7.15.0 dev: true + /@babel/plugin-transform-react-jsx/7.16.0: + resolution: {integrity: sha512-rqDgIbukZ44pqq7NIRPGPGNklshPkvlmvqjdx3OZcGPk4zGIenYkxDTvl3LsSL8gqcc3ZzGmXPE6hR/u/voNOw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/helper-annotate-as-pure': 7.16.0 + '@babel/helper-module-imports': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-jsx': 7.16.0 + '@babel/types': 7.16.0 + dev: true + + /@babel/plugin-transform-react-jsx/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-rqDgIbukZ44pqq7NIRPGPGNklshPkvlmvqjdx3OZcGPk4zGIenYkxDTvl3LsSL8gqcc3ZzGmXPE6hR/u/voNOw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-annotate-as-pure': 7.16.0 + '@babel/helper-module-imports': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-jsx': 7.16.0_@babel+core@7.16.0 + '@babel/types': 7.16.0 + dev: true + /@babel/plugin-transform-react-pure-annotations/7.14.5_@babel+core@7.15.0: resolution: {integrity: sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==} engines: {node: '>=6.9.0'} @@ -3572,13 +3972,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-transform-regenerator/7.14.5: - resolution: {integrity: sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==} + /@babel/plugin-transform-react-pure-annotations/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-NC/Bj2MG+t8Ef5Pdpo34Ay74X4Rt804h5y81PwOpfPtmAK3i6CizmQqwyBQzIepz1Yt8wNr2Z2L7Lu3qBMfZMA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - regenerator-transform: 0.14.5 + '@babel/core': 7.16.0 + '@babel/helper-annotate-as-pure': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 dev: true /@babel/plugin-transform-regenerator/7.14.5_@babel+core@7.13.16: @@ -3610,13 +4012,14 @@ packages: regenerator-transform: 0.14.5 dev: true - /@babel/plugin-transform-reserved-words/7.14.5: - resolution: {integrity: sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==} + /@babel/plugin-transform-regenerator/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-plugin-utils': 7.14.5 + '@babel/core': 7.16.0 + regenerator-transform: 0.14.5 dev: true /@babel/plugin-transform-reserved-words/7.14.5_@babel+core@7.13.16: @@ -3648,6 +4051,16 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-transform-reserved-words/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-transform-runtime/7.16.0: resolution: {integrity: sha512-zlPf1/XFn5+vWdve3AAhf+Sxl+MVa5VlwTwWgnLx23u4GlatSRQJ3Eoo9vllf0a9il3woQsT4SK+5Z7c06h8ag==} engines: {node: '>=6.9.0'} @@ -3664,15 +4077,6 @@ packages: - supports-color dev: true - /@babel/plugin-transform-shorthand-properties/7.14.5: - resolution: {integrity: sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - dev: true - /@babel/plugin-transform-shorthand-properties/7.14.5_@babel+core@7.13.16: resolution: {integrity: sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==} engines: {node: '>=6.9.0'} @@ -3702,14 +4106,14 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-transform-spread/7.14.6: - resolution: {integrity: sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==} + /@babel/plugin-transform-shorthand-properties/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.14.5 dev: true /@babel/plugin-transform-spread/7.14.6_@babel+core@7.13.16: @@ -3744,13 +4148,15 @@ packages: '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 dev: true - /@babel/plugin-transform-sticky-regex/7.14.5: - resolution: {integrity: sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==} + /@babel/plugin-transform-spread/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 dev: true /@babel/plugin-transform-sticky-regex/7.14.5_@babel+core@7.13.16: @@ -3782,12 +4188,13 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-transform-template-literals/7.14.5: - resolution: {integrity: sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==} + /@babel/plugin-transform-sticky-regex/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 dev: true @@ -3820,12 +4227,13 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-transform-typeof-symbol/7.14.5: - resolution: {integrity: sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==} + /@babel/plugin-transform-template-literals/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 dev: true @@ -3858,6 +4266,16 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true + /@babel/plugin-transform-typeof-symbol/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + /@babel/plugin-transform-typescript/7.15.0_@babel+core@7.13.16: resolution: {integrity: sha512-WIIEazmngMEEHDaPTx0IZY48SaAmjVWe3TRSX7cmJXn0bEv9midFzAjxiruOWYIVf5iQ10vFx7ASDpgEO08L5w==} engines: {node: '>=6.9.0'} @@ -3886,13 +4304,18 @@ packages: - supports-color dev: true - /@babel/plugin-transform-unicode-escapes/7.14.5: - resolution: {integrity: sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==} + /@babel/plugin-transform-typescript/7.16.1_@babel+core@7.16.0: + resolution: {integrity: sha512-NO4XoryBng06jjw/qWEU2LhcLJr1tWkhpMam/H4eas/CDKMX/b2/Ylb6EI256Y7+FVPCawwSM1rrJNOpDiz+Lg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.16.0 + '@babel/helper-create-class-features-plugin': 7.16.0_@babel+core@7.16.0 '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-typescript': 7.16.0_@babel+core@7.16.0 + transitivePeerDependencies: + - supports-color dev: true /@babel/plugin-transform-unicode-escapes/7.14.5_@babel+core@7.13.16: @@ -3924,13 +4347,13 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-transform-unicode-regex/7.14.5: - resolution: {integrity: sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==} + /@babel/plugin-transform-unicode-escapes/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-create-regexp-features-plugin': 7.14.5 + '@babel/core': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 dev: true @@ -3966,87 +4389,15 @@ packages: '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/preset-env/7.15.0: - resolution: {integrity: sha512-FhEpCNFCcWW3iZLg0L2NPE9UerdtsCR6ZcsGHUX6Om6kbCQeL5QZDqFDmeNHC6/fy6UH3jEge7K4qG5uC9In0Q==} + /@babel/plugin-transform-unicode-regex/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.15.0 - '@babel/helper-compilation-targets': 7.15.0 + '@babel/core': 7.16.0 + '@babel/helper-create-regexp-features-plugin': 7.16.0_@babel+core@7.16.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/helper-validator-option': 7.14.5 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.14.5 - '@babel/plugin-proposal-async-generator-functions': 7.14.9 - '@babel/plugin-proposal-class-properties': 7.14.5 - '@babel/plugin-proposal-class-static-block': 7.14.5 - '@babel/plugin-proposal-dynamic-import': 7.14.5 - '@babel/plugin-proposal-export-namespace-from': 7.14.5 - '@babel/plugin-proposal-json-strings': 7.14.5 - '@babel/plugin-proposal-logical-assignment-operators': 7.14.5 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.14.5 - '@babel/plugin-proposal-numeric-separator': 7.14.5 - '@babel/plugin-proposal-object-rest-spread': 7.14.7 - '@babel/plugin-proposal-optional-catch-binding': 7.14.5 - '@babel/plugin-proposal-optional-chaining': 7.14.5 - '@babel/plugin-proposal-private-methods': 7.14.5 - '@babel/plugin-proposal-private-property-in-object': 7.14.5 - '@babel/plugin-proposal-unicode-property-regex': 7.14.5 - '@babel/plugin-syntax-async-generators': 7.8.4 - '@babel/plugin-syntax-class-properties': 7.12.13 - '@babel/plugin-syntax-class-static-block': 7.14.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3 - '@babel/plugin-syntax-export-namespace-from': 7.8.3 - '@babel/plugin-syntax-json-strings': 7.8.3 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3 - '@babel/plugin-syntax-numeric-separator': 7.10.4 - '@babel/plugin-syntax-object-rest-spread': 7.8.3 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3 - '@babel/plugin-syntax-optional-chaining': 7.8.3 - '@babel/plugin-syntax-private-property-in-object': 7.14.5 - '@babel/plugin-syntax-top-level-await': 7.14.5 - '@babel/plugin-transform-arrow-functions': 7.14.5 - '@babel/plugin-transform-async-to-generator': 7.14.5 - '@babel/plugin-transform-block-scoped-functions': 7.14.5 - '@babel/plugin-transform-block-scoping': 7.15.3 - '@babel/plugin-transform-classes': 7.14.9 - '@babel/plugin-transform-computed-properties': 7.14.5 - '@babel/plugin-transform-destructuring': 7.14.7 - '@babel/plugin-transform-dotall-regex': 7.14.5 - '@babel/plugin-transform-duplicate-keys': 7.14.5 - '@babel/plugin-transform-exponentiation-operator': 7.14.5 - '@babel/plugin-transform-for-of': 7.14.5 - '@babel/plugin-transform-function-name': 7.14.5 - '@babel/plugin-transform-literals': 7.14.5 - '@babel/plugin-transform-member-expression-literals': 7.14.5 - '@babel/plugin-transform-modules-amd': 7.14.5 - '@babel/plugin-transform-modules-commonjs': 7.15.0 - '@babel/plugin-transform-modules-systemjs': 7.14.5 - '@babel/plugin-transform-modules-umd': 7.14.5 - '@babel/plugin-transform-named-capturing-groups-regex': 7.14.9 - '@babel/plugin-transform-new-target': 7.14.5 - '@babel/plugin-transform-object-super': 7.14.5 - '@babel/plugin-transform-parameters': 7.14.5 - '@babel/plugin-transform-property-literals': 7.14.5 - '@babel/plugin-transform-regenerator': 7.14.5 - '@babel/plugin-transform-reserved-words': 7.14.5 - '@babel/plugin-transform-shorthand-properties': 7.14.5 - '@babel/plugin-transform-spread': 7.14.6 - '@babel/plugin-transform-sticky-regex': 7.14.5 - '@babel/plugin-transform-template-literals': 7.14.5 - '@babel/plugin-transform-typeof-symbol': 7.14.5 - '@babel/plugin-transform-unicode-escapes': 7.14.5 - '@babel/plugin-transform-unicode-regex': 7.14.5 - '@babel/preset-modules': 0.1.4 - '@babel/types': 7.15.0 - babel-plugin-polyfill-corejs2: 0.2.2 - babel-plugin-polyfill-corejs3: 0.2.4 - babel-plugin-polyfill-regenerator: 0.2.2 - core-js-compat: 3.16.2 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color dev: true /@babel/preset-env/7.15.0_@babel+core@7.13.16: @@ -4295,22 +4646,95 @@ packages: babel-plugin-polyfill-corejs2: 0.2.3 babel-plugin-polyfill-corejs3: 0.3.0 babel-plugin-polyfill-regenerator: 0.2.3 - core-js-compat: 3.19.0 + core-js-compat: 3.19.1 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-modules/0.1.4: - resolution: {integrity: sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==} + /@babel/preset-env/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-cdTu/W0IrviamtnZiTfixPfIncr2M1VqRrkjzZWlr1B4TVYimCFK5jkyOdP4qw2MrlKHi+b3ORj6x8GoCew8Dg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/compat-data': 7.16.0 + '@babel/core': 7.16.0 + '@babel/helper-compilation-targets': 7.16.0_@babel+core@7.16.0 '@babel/helper-plugin-utils': 7.14.5 - '@babel/plugin-proposal-unicode-property-regex': 7.14.5 - '@babel/plugin-transform-dotall-regex': 7.14.5 - '@babel/types': 7.15.0 - esutils: 2.0.3 + '@babel/helper-validator-option': 7.14.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.16.2_@babel+core@7.16.0 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-async-generator-functions': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-class-properties': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-class-static-block': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-dynamic-import': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-export-namespace-from': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-json-strings': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-logical-assignment-operators': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-numeric-separator': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-object-rest-spread': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-optional-catch-binding': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-optional-chaining': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-private-methods': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-private-property-in-object': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-unicode-property-regex': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.16.0 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.16.0 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.16.0 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.16.0 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.16.0 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.16.0 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.16.0 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.16.0 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.16.0 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.16.0 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.16.0 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.16.0 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.16.0 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.16.0 + '@babel/plugin-transform-arrow-functions': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-async-to-generator': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-block-scoped-functions': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-block-scoping': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-classes': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-computed-properties': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-destructuring': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-dotall-regex': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-duplicate-keys': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-exponentiation-operator': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-for-of': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-function-name': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-literals': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-member-expression-literals': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-modules-amd': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-modules-commonjs': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-modules-systemjs': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-modules-umd': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-named-capturing-groups-regex': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-new-target': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-object-super': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-parameters': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-property-literals': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-regenerator': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-reserved-words': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-shorthand-properties': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-spread': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-sticky-regex': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-template-literals': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-typeof-symbol': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-unicode-escapes': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-unicode-regex': 7.16.0_@babel+core@7.16.0 + '@babel/preset-modules': 0.1.5_@babel+core@7.16.0 + '@babel/types': 7.16.0 + babel-plugin-polyfill-corejs2: 0.2.3_@babel+core@7.16.0 + babel-plugin-polyfill-corejs3: 0.3.0_@babel+core@7.16.0 + babel-plugin-polyfill-regenerator: 0.2.3_@babel+core@7.16.0 + core-js-compat: 3.19.1 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color dev: true /@babel/preset-modules/0.1.4_@babel+core@7.13.16: @@ -4351,6 +4775,19 @@ packages: esutils: 2.0.3 dev: true + /@babel/preset-modules/0.1.5_@babel+core@7.16.0: + resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-proposal-unicode-property-regex': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-dotall-regex': 7.16.0_@babel+core@7.16.0 + '@babel/types': 7.16.0 + esutils: 2.0.3 + dev: true + /@babel/preset-react/7.14.5_@babel+core@7.15.0: resolution: {integrity: sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==} engines: {node: '>=6.9.0'} @@ -4366,6 +4803,21 @@ packages: '@babel/plugin-transform-react-pure-annotations': 7.14.5_@babel+core@7.15.0 dev: true + /@babel/preset-react/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-d31IFW2bLRB28uL1WoElyro8RH5l6531XfxMtCeCmp6RVAF1uTfxxUA0LH1tXl+psZdwfmIbwoG4U5VwgbhtLw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-validator-option': 7.14.5 + '@babel/plugin-transform-react-display-name': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-react-jsx': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-react-jsx-development': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-react-pure-annotations': 7.16.0_@babel+core@7.16.0 + dev: true + /@babel/preset-typescript/7.15.0_@babel+core@7.13.16: resolution: {integrity: sha512-lt0Y/8V3y06Wq/8H/u0WakrqciZ7Fz7mwPDHWUJAXlABL5hiUG42BNlRXiELNjeWjO5rWmnNKlx+yzJvxezHow==} engines: {node: '>=6.9.0'} @@ -4394,6 +4846,20 @@ packages: - supports-color dev: true + /@babel/preset-typescript/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-txegdrZYgO9DlPbv+9QOVpMnKbOtezsLHWsnsRF4AjbSIsVaujrq1qg8HK0mxQpWv0jnejt0yEoW1uWpvbrDTg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-validator-option': 7.14.5 + '@babel/plugin-transform-typescript': 7.16.1_@babel+core@7.16.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/register/7.15.3_@babel+core@7.15.0: resolution: {integrity: sha512-mj4IY1ZJkorClxKTImccn4T81+UKTo4Ux0+OFSV9hME1ooqS9UV+pJ6BjD0qXPK4T3XW/KNa79XByjeEMZz+fw==} engines: {node: '>=6.9.0'} @@ -4408,6 +4874,20 @@ packages: source-map-support: 0.5.19 dev: true + /@babel/register/7.16.0_@babel+core@7.16.0: + resolution: {integrity: sha512-lzl4yfs0zVXnooeLE0AAfYaT7F3SPA8yB2Bj4W1BiZwLbMS3MZH35ZvCWSRHvneUugwuM+Wsnrj7h0F7UmU3NQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + clone-deep: 4.0.1 + find-cache-dir: 2.1.0 + make-dir: 2.1.0 + pirates: 4.0.1 + source-map-support: 0.5.20 + dev: true + /@babel/runtime-corejs3/7.15.3: resolution: {integrity: sha512-30A3lP+sRL6ml8uhoJSs+8jwpKzbw8CqBvDc1laeptxPm5FahumJxirigcbD2qTs71Sonvj1cyZB0OKGAmxQ+A==} engines: {node: '>=6.9.0'} @@ -4507,6 +4987,10 @@ packages: resolution: {integrity: sha512-4Th98KlMHr5+JkxfcoDT//6vY8vM+iSPrLNpHhRyLx2CFYi8e2RfqPLdpbnpo0Q5lQC5hNB79yes07zb02fvCw==} dev: true + /@base2/pretty-print-object/1.0.1: + resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} + dev: true + /@bcoe/v8-coverage/0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true @@ -4531,6 +5015,11 @@ packages: resolution: {integrity: sha512-ooImbeXEBxf77cttbzA7X5rC5aAWm9UsXIGViFOnsqB+6M944GkB28S5R4UWRqjFd2iW4zGEkEifAU+q43pt2w==} dev: true + /@discoveryjs/json-ext/0.5.5: + resolution: {integrity: sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==} + engines: {node: '>=10.0.0'} + dev: true + /@emotion/cache/10.0.29: resolution: {integrity: sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==} dependencies: @@ -4545,7 +5034,7 @@ packages: peerDependencies: react: '>=16.3.0' dependencies: - '@babel/runtime': 7.15.3 + '@babel/runtime': 7.16.0 '@emotion/cache': 10.0.29 '@emotion/css': 10.0.27 '@emotion/serialize': 0.11.16 @@ -4558,7 +5047,7 @@ packages: peerDependencies: react: '>=16.3.0' dependencies: - '@babel/runtime': 7.15.3 + '@babel/runtime': 7.16.0 '@emotion/cache': 10.0.29 '@emotion/css': 10.0.27 '@emotion/serialize': 0.11.16 @@ -4596,7 +5085,7 @@ packages: '@emotion/memoize': 0.7.4 '@emotion/unitless': 0.7.5 '@emotion/utils': 0.11.3 - csstype: 2.6.17 + csstype: 2.6.18 dev: true /@emotion/sheet/0.9.4: @@ -4609,7 +5098,7 @@ packages: '@emotion/core': ^10.0.28 react: '>=16.3.0' dependencies: - '@babel/runtime': 7.15.3 + '@babel/runtime': 7.16.0 '@emotion/core': 10.1.1_react@16.14.0 '@emotion/is-prop-valid': 0.8.8 '@emotion/serialize': 0.11.16 @@ -4623,7 +5112,7 @@ packages: '@emotion/core': ^10.0.28 react: '>=16.3.0' dependencies: - '@babel/runtime': 7.15.3 + '@babel/runtime': 7.16.0 '@emotion/core': 10.1.1 '@emotion/is-prop-valid': 0.8.8 '@emotion/serialize': 0.11.16 @@ -4687,6 +5176,42 @@ packages: - supports-color dev: true + /@eslint/eslintrc/1.0.3: + resolution: {integrity: sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.2 + espree: 9.0.0 + globals: 13.12.0 + ignore: 4.0.6 + import-fresh: 3.3.0 + js-yaml: 3.14.1 + minimatch: 3.0.4 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@gar/promisify/1.1.2: + resolution: {integrity: sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==} + dev: true + + /@humanwhocodes/config-array/0.6.0: + resolution: {integrity: sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.2 + minimatch: 3.0.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/object-schema/1.2.1: + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + dev: true + /@istanbuljs/load-nyc-config/1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} @@ -4732,6 +5257,18 @@ packages: slash: 3.0.0 dev: true + /@jest/console/27.3.1: + resolution: {integrity: sha512-RkFNWmv0iui+qsOr/29q9dyfKTTT5DCuP31kUwg7rmOKPT/ozLeGLKJKVIiOfbiKyleUZKIrHwhmiZWVe8IMdw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.2.5 + '@types/node': 16.11.6 + chalk: 4.1.2 + jest-message-util: 27.3.1 + jest-util: 27.3.1 + slash: 3.0.0 + dev: true + /@jest/core/26.6.3: resolution: {integrity: sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==} engines: {node: '>= 10.14.2'} @@ -4772,21 +5309,76 @@ packages: - utf-8-validate dev: true - /@jest/environment/26.6.2: - resolution: {integrity: sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==} - engines: {node: '>= 10.14.2'} - dependencies: - '@jest/fake-timers': 26.6.2 - '@jest/types': 26.6.2 - '@types/node': 14.17.10 - jest-mock: 26.6.2 - dev: true - - /@jest/fake-timers/26.6.2: - resolution: {integrity: sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==} - engines: {node: '>= 10.14.2'} + /@jest/core/27.3.1: + resolution: {integrity: sha512-DMNE90RR5QKx0EA+wqe3/TNEwiRpOkhshKNxtLxd4rt3IZpCt+RSL+FoJsGeblRZmqdK4upHA/mKKGPPRAifhg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true dependencies: - '@jest/types': 26.6.2 + '@jest/console': 27.3.1 + '@jest/reporters': 27.3.1 + '@jest/test-result': 27.3.1 + '@jest/transform': 27.3.1 + '@jest/types': 27.2.5 + '@types/node': 16.11.6 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.8.1 + exit: 0.1.2 + graceful-fs: 4.2.8 + jest-changed-files: 27.3.0 + jest-config: 27.3.1 + jest-haste-map: 27.3.1 + jest-message-util: 27.3.1 + jest-regex-util: 27.0.6 + jest-resolve: 27.3.1 + jest-resolve-dependencies: 27.3.1 + jest-runner: 27.3.1 + jest-runtime: 27.3.1 + jest-snapshot: 27.3.1 + jest-util: 27.3.1 + jest-validate: 27.3.1 + jest-watcher: 27.3.1 + micromatch: 4.0.4 + rimraf: 3.0.2 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + dev: true + + /@jest/environment/26.6.2: + resolution: {integrity: sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==} + engines: {node: '>= 10.14.2'} + dependencies: + '@jest/fake-timers': 26.6.2 + '@jest/types': 26.6.2 + '@types/node': 14.17.10 + jest-mock: 26.6.2 + dev: true + + /@jest/environment/27.3.1: + resolution: {integrity: sha512-BCKCj4mOVLme6Tanoyc9k0ultp3pnmuyHw73UHRPeeZxirsU/7E3HC4le/VDb/SMzE1JcPnto+XBKFOcoiJzVw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/fake-timers': 27.3.1 + '@jest/types': 27.2.5 + '@types/node': 16.11.6 + jest-mock: 27.3.0 + dev: true + + /@jest/fake-timers/26.6.2: + resolution: {integrity: sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==} + engines: {node: '>= 10.14.2'} + dependencies: + '@jest/types': 26.6.2 '@sinonjs/fake-timers': 6.0.1 '@types/node': 14.17.10 jest-message-util: 26.6.2 @@ -4794,6 +5386,18 @@ packages: jest-util: 26.6.2 dev: true + /@jest/fake-timers/27.3.1: + resolution: {integrity: sha512-M3ZFgwwlqJtWZ+QkBG5NmC23A9w+A6ZxNsO5nJxJsKYt4yguBd3i8TpjQz5NfCX91nEve1KqD9RA2Q+Q1uWqoA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.2.5 + '@sinonjs/fake-timers': 8.1.0 + '@types/node': 16.11.6 + jest-message-util: 27.3.1 + jest-mock: 27.3.0 + jest-util: 27.3.1 + dev: true + /@jest/globals/26.6.2: resolution: {integrity: sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==} engines: {node: '>= 10.14.2'} @@ -4803,6 +5407,15 @@ packages: expect: 26.6.2 dev: true + /@jest/globals/27.3.1: + resolution: {integrity: sha512-Q651FWiWQAIFiN+zS51xqhdZ8g9b88nGCobC87argAxA7nMfNQq0Q0i9zTfQYgLa6qFXk2cGANEqfK051CZ8Pg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.3.1 + '@jest/types': 27.2.5 + expect: 27.3.1 + dev: true + /@jest/reporters/26.6.2: resolution: {integrity: sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==} engines: {node: '>= 10.14.2'} @@ -4837,6 +5450,44 @@ packages: - supports-color dev: true + /@jest/reporters/27.3.1: + resolution: {integrity: sha512-m2YxPmL9Qn1emFVgZGEiMwDntDxRRQ2D58tiDQlwYTg5GvbFOKseYCcHtn0WsI8CG4vzPglo3nqbOiT8ySBT/w==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 27.3.1 + '@jest/test-result': 27.3.1 + '@jest/transform': 27.3.1 + '@jest/types': 27.2.5 + '@types/node': 16.11.6 + chalk: 4.1.2 + collect-v8-coverage: 1.0.1 + exit: 0.1.2 + glob: 7.2.0 + graceful-fs: 4.2.8 + istanbul-lib-coverage: 3.2.0 + istanbul-lib-instrument: 4.0.3 + istanbul-lib-report: 3.0.0 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.0.5 + jest-haste-map: 27.3.1 + jest-resolve: 27.3.1 + jest-util: 27.3.1 + jest-worker: 27.3.1 + slash: 3.0.0 + source-map: 0.6.1 + string-length: 4.0.2 + terminal-link: 2.1.1 + v8-to-istanbul: 8.1.0 + transitivePeerDependencies: + - supports-color + dev: true + /@jest/source-map/26.6.2: resolution: {integrity: sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==} engines: {node: '>= 10.14.2'} @@ -4846,6 +5497,15 @@ packages: source-map: 0.6.1 dev: true + /@jest/source-map/27.0.6: + resolution: {integrity: sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + callsites: 3.1.0 + graceful-fs: 4.2.8 + source-map: 0.6.1 + dev: true + /@jest/test-result/26.6.2: resolution: {integrity: sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==} engines: {node: '>= 10.14.2'} @@ -4866,6 +5526,16 @@ packages: collect-v8-coverage: 1.0.1 dev: true + /@jest/test-result/27.3.1: + resolution: {integrity: sha512-mLn6Thm+w2yl0opM8J/QnPTqrfS4FoXsXF2WIWJb2O/GBSyResL71BRuMYbYRsGt7ELwS5JGcEcGb52BNrumgg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/console': 27.3.1 + '@jest/types': 27.2.5 + '@types/istanbul-lib-coverage': 2.0.3 + collect-v8-coverage: 1.0.1 + dev: true + /@jest/test-sequencer/26.6.3: resolution: {integrity: sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==} engines: {node: '>= 10.14.2'} @@ -4883,13 +5553,25 @@ packages: - utf-8-validate dev: true + /@jest/test-sequencer/27.3.1: + resolution: {integrity: sha512-siySLo07IMEdSjA4fqEnxfIX8lB/lWYsBPwNFtkOvsFQvmBrL3yj3k3uFNZv/JDyApTakRpxbKLJ3CT8UGVCrA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/test-result': 27.3.1 + graceful-fs: 4.2.8 + jest-haste-map: 27.3.1 + jest-runtime: 27.3.1 + transitivePeerDependencies: + - supports-color + dev: true + /@jest/transform/26.6.2: resolution: {integrity: sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==} engines: {node: '>= 10.14.2'} dependencies: - '@babel/core': 7.15.0 + '@babel/core': 7.16.0 '@jest/types': 26.6.2 - babel-plugin-istanbul: 6.0.0 + babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 1.8.0 fast-json-stable-stringify: 2.1.0 @@ -4906,13 +5588,36 @@ packages: - supports-color dev: true + /@jest/transform/27.3.1: + resolution: {integrity: sha512-3fSvQ02kuvjOI1C1ssqMVBKJpZf6nwoCiSu00zAKh5nrp3SptNtZy/8s5deayHnqxhjD9CWDJ+yqQwuQ0ZafXQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/core': 7.16.0 + '@jest/types': 27.2.5 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 1.8.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.8 + jest-haste-map: 27.3.1 + jest-regex-util: 27.0.6 + jest-util: 27.3.1 + micromatch: 4.0.4 + pirates: 4.0.1 + slash: 3.0.0 + source-map: 0.6.1 + write-file-atomic: 3.0.3 + transitivePeerDependencies: + - supports-color + dev: true + /@jest/types/26.6.2: resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==} engines: {node: '>= 10.14.2'} dependencies: '@types/istanbul-lib-coverage': 2.0.3 '@types/istanbul-reports': 3.0.1 - '@types/node': 14.17.10 + '@types/node': 16.11.6 '@types/yargs': 15.0.14 chalk: 4.1.2 dev: true @@ -4928,6 +5633,17 @@ packages: chalk: 4.1.2 dev: true + /@jest/types/27.2.5: + resolution: {integrity: sha512-nmuM4VuDtCZcY+eTpw+0nvstwReMsjPoj7ZR80/BbixulhLaiX+fbv8oeLW8WZlJMcsGQsTmMKT/iTZu1Uy/lQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@types/istanbul-lib-coverage': 2.0.3 + '@types/istanbul-reports': 3.0.1 + '@types/node': 16.11.6 + '@types/yargs': 16.0.4 + chalk: 4.1.2 + dev: true + /@linaria/babel-preset/3.0.0-beta.13: resolution: {integrity: sha512-UeurIwmORp1lG+f69bKquRug7ZFVSrQha6TJWvHmGQIFwFx5qpMCXJLhOp2dUpM4y7/NhbKYXqj58RtG3wi4ZQ==} peerDependencies: @@ -5236,7 +5952,14 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.12.0 + fastq: 1.13.0 + dev: true + + /@npmcli/fs/1.0.0: + resolution: {integrity: sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==} + dependencies: + '@gar/promisify': 1.1.2 + semver: 7.3.5 dev: true /@npmcli/move-file/1.1.2: @@ -5251,6 +5974,14 @@ packages: resolution: {integrity: sha512-0p1rCgM3LLbAdwBnc7gqgnvjHg9KpbhcSphergHShlkWz8EdPawoMJ3/VbezI0mGC5eKCDzMaPgF9Yca6cKvrg==} dev: true + /@polka/url/1.0.0-next.21: + resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} + dev: true + + /@popperjs/core/2.10.2: + resolution: {integrity: sha512-IXf3XA7+XyN7CP9gGh/XB0UxVMlvARGEgGXLubFICsUMGz6Q+DU+i4gGlpOxTjKvXjkJDJC8YdqdKkDj9qZHEQ==} + dev: true + /@popperjs/core/2.9.3: resolution: {integrity: sha512-xDu17cEfh7Kid/d95kB6tZsLOmSWKCZKtprnhVepjsSaCij+lM3mItSJDuuHDMbCWTh8Ejmebwb+KONcCJ0eXQ==} dev: true @@ -5262,10 +5993,21 @@ packages: preact: '>= 10.0.0' dependencies: kleur: 4.1.4 - loader-utils: 2.0.0 + loader-utils: 2.0.2 preact: 10.5.14 dev: true + /@preact/async-loader/3.0.1_preact@10.5.15: + resolution: {integrity: sha512-BoUN24hxEfAQYnWjliAmkZLuliv+ONQi7AWn+/+VOJHTIHmbFiXrvmSxITf7PDkKiK0a5xy4OErZtVVLlk96Tg==} + engines: {node: '>=8'} + peerDependencies: + preact: '>= 10.0.0' + dependencies: + kleur: 4.1.4 + loader-utils: 2.0.2 + preact: 10.5.15 + dev: true + /@prefresh/babel-plugin/0.4.1: resolution: {integrity: sha512-gj3ekiYtHlZNz0zFI1z6a9mcYX80Qacw84+2++7V1skvO7kQoV2ux56r8bJkTBbKMVxwAgaYrxxIdUCYlclE7Q==} dev: true @@ -5278,10 +6020,32 @@ packages: preact: 10.5.14 dev: true + /@prefresh/core/1.3.2_preact@10.5.15: + resolution: {integrity: sha512-Iv+uI698KDgWsrKpLvOgN3hmAMyvhVgn09mcnhZ98BUNdg/qrxE7tcUf5yFCImkgqED5/Dcn8G5hFy4IikEDvg==} + peerDependencies: + preact: ^10.0.0 + dependencies: + preact: 10.5.15 + dev: true + /@prefresh/utils/1.1.1: resolution: {integrity: sha512-MUhT5m2XNN5NsZl4GnpuvlzLo6VSTa/+wBfBd3fiWUvHGhv0GF9hnA1pd//v0uJaKwUnVRQ1hYElxCV7DtYsCQ==} dev: true + /@prefresh/webpack/3.3.2_7b676851c8ef63627f17dcf4dd469116: + resolution: {integrity: sha512-1cX0t5G7IXWO2164sl2O32G02BzDl6C4UUZWfDb0x1CQM1g3It9PSLWd+rIlHfSg4MEU9YHM8e6/OK8uavRJhA==} + peerDependencies: + '@prefresh/babel-plugin': ^0.4.0 + preact: ^10.4.0 + webpack: ^4.0.0 || ^5.0.0 + dependencies: + '@prefresh/babel-plugin': 0.4.1 + '@prefresh/core': 1.3.2_preact@10.5.15 + '@prefresh/utils': 1.1.1 + preact: 10.5.15 + webpack: 4.46.0 + dev: true + /@prefresh/webpack/3.3.2_b4d84c08f02729896cbfdece19209372: resolution: {integrity: sha512-1cX0t5G7IXWO2164sl2O32G02BzDl6C4UUZWfDb0x1CQM1g3It9PSLWd+rIlHfSg4MEU9YHM8e6/OK8uavRJhA==} peerDependencies: @@ -5344,11 +6108,28 @@ packages: optional: true dependencies: '@babel/core': 7.15.0 - '@babel/helper-module-imports': 7.14.5 + '@babel/helper-module-imports': 7.16.0 '@rollup/pluginutils': 3.1.0_rollup@2.56.2 rollup: 2.56.2 dev: true + /@rollup/plugin-babel/5.3.0_@babel+core@7.16.0+rollup@2.59.0: + resolution: {integrity: sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==} + engines: {node: '>= 10.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0 + peerDependenciesMeta: + '@types/babel__core': + optional: true + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-module-imports': 7.16.0 + '@rollup/pluginutils': 3.1.0_rollup@2.59.0 + rollup: 2.59.0 + dev: true + /@rollup/plugin-commonjs/17.0.0_rollup@2.37.1: resolution: {integrity: sha512-/omBIJG1nHQc+bgkYDuLpb/V08QyutP9amOrJRUSlYJZP+b/68gM//D8sxJe3Yry2QnYIr3QjR3x4AlxJEN3GA==} engines: {node: '>= 8.0.0'} @@ -5536,6 +6317,21 @@ packages: rollup: 2.56.2 dev: true + /@rollup/plugin-node-resolve/11.2.1_rollup@2.59.0: + resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} + engines: {node: '>= 10.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.59.0 + '@types/resolve': 1.17.1 + builtin-modules: 3.2.0 + deepmerge: 4.2.2 + is-module: 1.0.0 + resolve: 1.20.0 + rollup: 2.59.0 + dev: true + /@rollup/plugin-node-resolve/13.0.6_rollup@2.59.0: resolution: {integrity: sha512-sFsPDMPd4gMqnh2gS0uIxELnoRUp5kBl5knxD2EO0778G1oOJv4G1vyT2cpWz75OU2jDVcXhjVUuTAczGyFNKA==} engines: {node: '>= 10.0.0'} @@ -5581,6 +6377,16 @@ packages: rollup: 2.56.2 dev: true + /@rollup/plugin-replace/2.4.2_rollup@2.59.0: + resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.59.0 + magic-string: 0.25.7 + rollup: 2.59.0 + dev: true + /@rollup/pluginutils/3.1.0_rollup@2.37.1: resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} engines: {node: '>= 8.0.0'} @@ -5685,6 +6491,43 @@ packages: '@sinonjs/commons': 1.8.3 dev: true + /@sinonjs/fake-timers/8.1.0: + resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} + dependencies: + '@sinonjs/commons': 1.8.3 + dev: true + + /@storybook/addon-a11y/6.3.12: + resolution: {integrity: sha512-q1NdRHFJV6sLEEJw0hatCc5ZIthELqM/AWdrEWDyhcJNyiq7Tq4nKqQBMTQSYwHiUAmxVgw7i4oa1vM2M51/3g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/addons': 6.3.12 + '@storybook/api': 6.3.12 + '@storybook/channels': 6.3.12 + '@storybook/client-api': 6.3.12 + '@storybook/client-logger': 6.3.12 + '@storybook/components': 6.3.12 + '@storybook/core-events': 6.3.12 + '@storybook/theming': 6.3.12 + axe-core: 4.3.5 + core-js: 3.19.1 + global: 4.4.0 + lodash: 4.17.21 + react-sizeme: 3.0.2 + regenerator-runtime: 0.13.9 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + transitivePeerDependencies: + - '@types/react' + dev: true + /@storybook/addon-a11y/6.3.7: resolution: {integrity: sha512-Z5Lhxm8r5CkPW9FYf6zmAk9c7IhUeUQZxKZeEWGZdOvcjQ32rtg4IYvO2SHgWNrEKBdxxFm3pMiyK3wylQLfsQ==} peerDependencies: @@ -5716,8 +6559,8 @@ packages: - '@types/react' dev: true - /@storybook/addon-actions/6.3.7: - resolution: {integrity: sha512-CEAmztbVt47Gw1o6Iw0VP20tuvISCEKk9CS/rCjHtb4ubby6+j/bkp3pkEUQIbyLdHiLWFMz0ZJdyA/U6T6jCw==} + /@storybook/addon-actions/6.3.12: + resolution: {integrity: sha512-mzuN4Ano4eyicwycM2PueGzzUCAEzt9/6vyptWEIVJu0sjK0J9KtBRlqFi1xGQxmCfimDR/n/vWBBkc7fp2uJA==} peerDependencies: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 @@ -5727,13 +6570,13 @@ packages: react-dom: optional: true dependencies: - '@storybook/addons': 6.3.7 - '@storybook/api': 6.3.7 - '@storybook/client-api': 6.3.7 - '@storybook/components': 6.3.7 - '@storybook/core-events': 6.3.7 - '@storybook/theming': 6.3.7 - core-js: 3.16.2 + '@storybook/addons': 6.3.12 + '@storybook/api': 6.3.12 + '@storybook/client-api': 6.3.12 + '@storybook/components': 6.3.12 + '@storybook/core-events': 6.3.12 + '@storybook/theming': 6.3.12 + core-js: 3.19.1 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.21 @@ -5748,8 +6591,8 @@ packages: - '@types/react' dev: true - /@storybook/addon-backgrounds/6.3.7: - resolution: {integrity: sha512-NH95pDNILgCXeegbckG+P3zxT5SPmgkAq29P+e3gX7YBOTc6885YCFMJLFpuDMwW4lA0ovXosp4PaUHLsBnLDg==} + /@storybook/addon-actions/6.3.7: + resolution: {integrity: sha512-CEAmztbVt47Gw1o6Iw0VP20tuvISCEKk9CS/rCjHtb4ubby6+j/bkp3pkEUQIbyLdHiLWFMz0ZJdyA/U6T6jCw==} peerDependencies: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 @@ -5761,22 +6604,27 @@ packages: dependencies: '@storybook/addons': 6.3.7 '@storybook/api': 6.3.7 - '@storybook/client-logger': 6.3.7 + '@storybook/client-api': 6.3.7 '@storybook/components': 6.3.7 '@storybook/core-events': 6.3.7 '@storybook/theming': 6.3.7 core-js: 3.16.2 + fast-deep-equal: 3.1.3 global: 4.4.0 - memoizerific: 1.11.3 + lodash: 4.17.21 + polished: 4.1.3 + prop-types: 15.7.2 + react-inspector: 5.1.1 regenerator-runtime: 0.13.9 ts-dedent: 2.2.0 util-deprecate: 1.0.2 + uuid-browser: 3.1.0 transitivePeerDependencies: - '@types/react' dev: true - /@storybook/addon-controls/6.3.7: - resolution: {integrity: sha512-VHOv5XZ0MQ45k6X7AUrMIxGkm7sgIiPwsvajnoeMe7UwS3ngbTb0Q0raLqI/L5jLM/jyQwfpUO9isA6cztGTEQ==} + /@storybook/addon-backgrounds/6.3.12: + resolution: {integrity: sha512-51cHBx0HV7K/oRofJ/1pE05qti6sciIo8m4iPred1OezXIrJ/ckzP+gApdaUdzgcLAr6/MXQWLk0sJuImClQ6w==} peerDependencies: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 @@ -5786,25 +6634,102 @@ packages: react-dom: optional: true dependencies: - '@storybook/addons': 6.3.7 - '@storybook/api': 6.3.7 - '@storybook/client-api': 6.3.7 - '@storybook/components': 6.3.7 - '@storybook/node-logger': 6.3.7 - '@storybook/theming': 6.3.7 - core-js: 3.16.2 + '@storybook/addons': 6.3.12 + '@storybook/api': 6.3.12 + '@storybook/client-logger': 6.3.12 + '@storybook/components': 6.3.12 + '@storybook/core-events': 6.3.12 + '@storybook/theming': 6.3.12 + core-js: 3.19.1 + global: 4.4.0 + memoizerific: 1.11.3 + regenerator-runtime: 0.13.9 ts-dedent: 2.2.0 + util-deprecate: 1.0.2 transitivePeerDependencies: - '@types/react' dev: true - /@storybook/addon-docs/6.3.7_typescript@3.9.10: - resolution: {integrity: sha512-cyuyoLuB5ELhbrXgnZneDCHqNq1wSdWZ4dzdHy1E5WwLPEhLlD6INfEsm8gnDIb4IncYuzMhK3XYBDd7d3ijOg==} + /@storybook/addon-backgrounds/6.3.7: + resolution: {integrity: sha512-NH95pDNILgCXeegbckG+P3zxT5SPmgkAq29P+e3gX7YBOTc6885YCFMJLFpuDMwW4lA0ovXosp4PaUHLsBnLDg==} peerDependencies: - '@storybook/angular': 6.3.7 - '@storybook/vue': 6.3.7 - '@storybook/vue3': 6.3.7 - '@storybook/web-components': 6.3.7 + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/addons': 6.3.7 + '@storybook/api': 6.3.7 + '@storybook/client-logger': 6.3.7 + '@storybook/components': 6.3.7 + '@storybook/core-events': 6.3.7 + '@storybook/theming': 6.3.7 + core-js: 3.16.2 + global: 4.4.0 + memoizerific: 1.11.3 + regenerator-runtime: 0.13.9 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + transitivePeerDependencies: + - '@types/react' + dev: true + + /@storybook/addon-controls/6.3.12: + resolution: {integrity: sha512-WO/PbygE4sDg3BbstJ49q0uM3Xu5Nw4lnHR5N4hXSvRAulZt1d1nhphRTHjfX+CW+uBcfzkq9bksm6nKuwmOyw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/addons': 6.3.12 + '@storybook/api': 6.3.12 + '@storybook/client-api': 6.3.12 + '@storybook/components': 6.3.12 + '@storybook/node-logger': 6.3.12 + '@storybook/theming': 6.3.12 + core-js: 3.19.1 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@types/react' + dev: true + + /@storybook/addon-controls/6.3.7: + resolution: {integrity: sha512-VHOv5XZ0MQ45k6X7AUrMIxGkm7sgIiPwsvajnoeMe7UwS3ngbTb0Q0raLqI/L5jLM/jyQwfpUO9isA6cztGTEQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/addons': 6.3.7 + '@storybook/api': 6.3.7 + '@storybook/client-api': 6.3.7 + '@storybook/components': 6.3.7 + '@storybook/node-logger': 6.3.7 + '@storybook/theming': 6.3.7 + core-js: 3.16.2 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@types/react' + dev: true + + /@storybook/addon-docs/6.3.12_eslint@8.1.0+typescript@4.4.4: + resolution: {integrity: sha512-iUrqJBMTOn2PgN8AWNQkfxfIPkh8pEg27t8UndMgfOpeGK/VWGw2UEifnA82flvntcilT4McxmVbRHkeBY9K5A==} + peerDependencies: + '@storybook/angular': 6.3.12 + '@storybook/vue': 6.3.12 + '@storybook/vue3': 6.3.12 + '@storybook/web-components': 6.3.12 lit: ^2.0.0-rc.1 lit-html: ^1.4.1 || ^2.0.0-rc.3 react: ^16.8.0 || ^17.0.0 @@ -5839,45 +6764,45 @@ packages: webpack: optional: true dependencies: - '@babel/core': 7.15.0 - '@babel/generator': 7.15.0 - '@babel/parser': 7.15.3 - '@babel/plugin-transform-react-jsx': 7.14.9_@babel+core@7.15.0 - '@babel/preset-env': 7.15.0_@babel+core@7.15.0 + '@babel/core': 7.16.0 + '@babel/generator': 7.16.0 + '@babel/parser': 7.16.2 + '@babel/plugin-transform-react-jsx': 7.16.0_@babel+core@7.16.0 + '@babel/preset-env': 7.16.0_@babel+core@7.16.0 '@jest/transform': 26.6.2 '@mdx-js/loader': 1.6.22 '@mdx-js/mdx': 1.6.22 '@mdx-js/react': 1.6.22 - '@storybook/addons': 6.3.7 - '@storybook/api': 6.3.7 - '@storybook/builder-webpack4': 6.3.7_typescript@3.9.10 - '@storybook/client-api': 6.3.7 - '@storybook/client-logger': 6.3.7 - '@storybook/components': 6.3.7 - '@storybook/core': 6.3.7_36f75bb62e0c484c1a06658ad2872463 - '@storybook/core-events': 6.3.7 + '@storybook/addons': 6.3.12 + '@storybook/api': 6.3.12 + '@storybook/builder-webpack4': 6.3.12_eslint@8.1.0+typescript@4.4.4 + '@storybook/client-api': 6.3.12 + '@storybook/client-logger': 6.3.12 + '@storybook/components': 6.3.12 + '@storybook/core': 6.3.12_7f5de251797ed618e165bdd143385062 + '@storybook/core-events': 6.3.12 '@storybook/csf': 0.0.1 - '@storybook/csf-tools': 6.3.7_@babel+core@7.15.0 - '@storybook/node-logger': 6.3.7 - '@storybook/postinstall': 6.3.7 - '@storybook/source-loader': 6.3.7 - '@storybook/theming': 6.3.7 + '@storybook/csf-tools': 6.3.12_@babel+core@7.16.0 + '@storybook/node-logger': 6.3.12 + '@storybook/postinstall': 6.3.12 + '@storybook/source-loader': 6.3.12 + '@storybook/theming': 6.3.12 acorn: 7.4.1 acorn-jsx: 5.3.2_acorn@7.4.1 acorn-walk: 7.2.0 - core-js: 3.16.2 + core-js: 3.19.1 doctrine: 3.0.0 escodegen: 2.0.0 fast-deep-equal: 3.1.3 global: 4.4.0 html-tags: 3.1.0 js-string-escape: 1.0.1 - loader-utils: 2.0.0 + loader-utils: 2.0.2 lodash: 4.17.21 p-limit: 3.1.0 prettier: 2.2.1 prop-types: 15.7.2 - react-element-to-jsx-string: 14.3.2 + react-element-to-jsx-string: 14.3.4 regenerator-runtime: 0.13.9 remark-external-links: 8.0.0 remark-slug: 6.1.0 @@ -5887,8 +6812,10 @@ packages: - '@storybook/builder-webpack5' - '@storybook/manager-webpack5' - '@types/react' + - eslint - supports-color - typescript + - vue-template-compiler - webpack-cli - webpack-command dev: true @@ -5988,12 +6915,12 @@ packages: - webpack-command dev: true - /@storybook/addon-essentials/6.3.7_d95124e751df81c32a1d4f8e491e43a1: - resolution: {integrity: sha512-ZWAW3qMFrrpfSekmCZibp/ivnohFLJdJweiIA0CLnuCNuuK9kQdpFahWdvyBy5NlCj3UJwB7epTZYZyHqYW7UQ==} + /@storybook/addon-essentials/6.3.12_eslint@8.1.0+typescript@4.4.4: + resolution: {integrity: sha512-PK0pPE0xkq00kcbBcFwu/5JGHQTu4GvLIHfwwlEGx6GWNQ05l6Q+1Z4nE7xJGv2PSseSx3CKcjn8qykNLe6O6g==} peerDependencies: '@babel/core': ^7.9.6 - '@storybook/vue': 6.3.7 - '@storybook/web-components': 6.3.7 + '@storybook/vue': 6.3.12 + '@storybook/web-components': 6.3.12 babel-loader: ^8.0.0 lit-html: ^1.4.1 || ^2.0.0-rc.3 react: ^16.8.0 || ^17.0.0 @@ -6013,19 +6940,17 @@ packages: webpack: optional: true dependencies: - '@babel/core': 7.13.16 - '@storybook/addon-actions': 6.3.7 - '@storybook/addon-backgrounds': 6.3.7 - '@storybook/addon-controls': 6.3.7 - '@storybook/addon-docs': 6.3.7_typescript@4.3.5 - '@storybook/addon-measure': 2.0.0_a4b77c99d63b159b69a1438c89904ed9 - '@storybook/addon-toolbars': 6.3.7 - '@storybook/addon-viewport': 6.3.7 - '@storybook/addons': 6.3.7 - '@storybook/api': 6.3.7 - '@storybook/node-logger': 6.3.7 - babel-loader: 8.2.2_@babel+core@7.13.16 - core-js: 3.16.2 + '@storybook/addon-actions': 6.3.12 + '@storybook/addon-backgrounds': 6.3.12 + '@storybook/addon-controls': 6.3.12 + '@storybook/addon-docs': 6.3.12_eslint@8.1.0+typescript@4.4.4 + '@storybook/addon-measure': 2.0.0_82d9b0872a2218920e65ea68c1250a0f + '@storybook/addon-toolbars': 6.3.12 + '@storybook/addon-viewport': 6.3.12 + '@storybook/addons': 6.3.12 + '@storybook/api': 6.3.12 + '@storybook/node-logger': 6.3.12 + core-js: 3.19.1 regenerator-runtime: 0.13.9 storybook-addon-outline: 1.4.1 ts-dedent: 2.2.0 @@ -6038,17 +6963,19 @@ packages: - '@storybook/theming' - '@storybook/vue3' - '@types/react' + - eslint - lit - supports-color - svelte - sveltedoc-parser - typescript - vue + - vue-template-compiler - webpack-cli - webpack-command dev: true - /@storybook/addon-essentials/6.3.7_typescript@3.9.10: + /@storybook/addon-essentials/6.3.7_d95124e751df81c32a1d4f8e491e43a1: resolution: {integrity: sha512-ZWAW3qMFrrpfSekmCZibp/ivnohFLJdJweiIA0CLnuCNuuK9kQdpFahWdvyBy5NlCj3UJwB7epTZYZyHqYW7UQ==} peerDependencies: '@babel/core': ^7.9.6 @@ -6073,16 +7000,18 @@ packages: webpack: optional: true dependencies: + '@babel/core': 7.13.16 '@storybook/addon-actions': 6.3.7 '@storybook/addon-backgrounds': 6.3.7 '@storybook/addon-controls': 6.3.7 - '@storybook/addon-docs': 6.3.7_typescript@3.9.10 + '@storybook/addon-docs': 6.3.7_typescript@4.3.5 '@storybook/addon-measure': 2.0.0_a4b77c99d63b159b69a1438c89904ed9 '@storybook/addon-toolbars': 6.3.7 '@storybook/addon-viewport': 6.3.7 '@storybook/addons': 6.3.7 '@storybook/api': 6.3.7 '@storybook/node-logger': 6.3.7 + babel-loader: 8.2.2_@babel+core@7.13.16 core-js: 3.16.2 regenerator-runtime: 0.13.9 storybook-addon-outline: 1.4.1 @@ -6123,7 +7052,7 @@ packages: '@storybook/csf': 0.0.1 '@storybook/router': 6.3.12 '@types/qs': 6.9.7 - core-js: 3.16.2 + core-js: 3.19.1 global: 4.4.0 prop-types: 15.7.2 qs: 6.10.1 @@ -6131,6 +7060,26 @@ packages: ts-dedent: 2.2.0 dev: true + /@storybook/addon-measure/2.0.0_82d9b0872a2218920e65ea68c1250a0f: + resolution: {integrity: sha512-ZhdT++cX+L9LwjhGYggvYUUVQH/MGn2rwbrAwCMzA/f2QTFvkjxzX8nDgMxIhaLCDC+gHIxfJG2wrWN0jkBr3g==} + peerDependencies: + '@storybook/addons': ^6.3.0 + '@storybook/api': ^6.3.0 + '@storybook/components': ^6.3.0 + '@storybook/core-events': ^6.3.0 + '@storybook/theming': ^6.3.0 + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/addons': 6.3.12 + '@storybook/api': 6.3.12 + dev: true + /@storybook/addon-measure/2.0.0_a4b77c99d63b159b69a1438c89904ed9: resolution: {integrity: sha512-ZhdT++cX+L9LwjhGYggvYUUVQH/MGn2rwbrAwCMzA/f2QTFvkjxzX8nDgMxIhaLCDC+gHIxfJG2wrWN0jkBr3g==} peerDependencies: @@ -6151,6 +7100,28 @@ packages: '@storybook/api': 6.3.7 dev: true + /@storybook/addon-toolbars/6.3.12: + resolution: {integrity: sha512-8GvP6zmAfLPRnYRARSaIwLkQClLIRbflRh4HZoFk6IMjQLXZb4NL3JS5OLFKG+HRMMU2UQzfoSDqjI7k7ptyRw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/addons': 6.3.12 + '@storybook/api': 6.3.12 + '@storybook/client-api': 6.3.12 + '@storybook/components': 6.3.12 + '@storybook/theming': 6.3.12 + core-js: 3.19.1 + regenerator-runtime: 0.13.9 + transitivePeerDependencies: + - '@types/react' + dev: true + /@storybook/addon-toolbars/6.3.7: resolution: {integrity: sha512-UTIurbl2WXj/jSOj7ndqQ/WtG7kSpGp62T7gwEZTZ+h/3sJn+bixofBD/7+sXa4hWW07YgTXV547DMhzp5bygg==} peerDependencies: @@ -6173,6 +7144,32 @@ packages: - '@types/react' dev: true + /@storybook/addon-viewport/6.3.12: + resolution: {integrity: sha512-TRjyfm85xouOPmXxeLdEIzXLfJZZ1ePQ7p/5yphDGBHdxMU4m4qiZr8wYpUaxHsRu/UB3dKfaOyGT+ivogbnbw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/addons': 6.3.12 + '@storybook/api': 6.3.12 + '@storybook/client-logger': 6.3.12 + '@storybook/components': 6.3.12 + '@storybook/core-events': 6.3.12 + '@storybook/theming': 6.3.12 + core-js: 3.19.1 + global: 4.4.0 + memoizerific: 1.11.3 + prop-types: 15.7.2 + regenerator-runtime: 0.13.9 + transitivePeerDependencies: + - '@types/react' + dev: true + /@storybook/addon-viewport/6.3.7: resolution: {integrity: sha512-Hdv2QoVVfe/YuMVQKVVnfCCuEoTqTa8Ck7AOKz31VSAliBFhXewP51oKhw9F6mTyvCozMHX6EBtBzN06KyrPyw==} peerDependencies: @@ -6211,11 +7208,30 @@ packages: '@storybook/core-events': 6.3.12 '@storybook/router': 6.3.12 '@storybook/theming': 6.3.12 - core-js: 3.16.2 + core-js: 3.19.1 global: 4.4.0 regenerator-runtime: 0.13.9 dev: true + /@storybook/addons/6.3.12_react-dom@16.14.0+react@16.14.0: + resolution: {integrity: sha512-UgoMyr7Qr0FS3ezt8u6hMEcHgyynQS9ucr5mAwZky3wpXRPFyUTmMto9r4BBUdqyUvTUj/LRKIcmLBfj+/l0Fg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + dependencies: + '@storybook/api': 6.3.12_react-dom@16.14.0+react@16.14.0 + '@storybook/channels': 6.3.12 + '@storybook/client-logger': 6.3.12 + '@storybook/core-events': 6.3.12 + '@storybook/router': 6.3.12_react-dom@16.14.0+react@16.14.0 + '@storybook/theming': 6.3.12_react-dom@16.14.0+react@16.14.0 + core-js: 3.19.1 + global: 4.4.0 + react: 16.14.0 + react-dom: 16.14.0_react@16.14.0 + regenerator-runtime: 0.13.9 + dev: true + /@storybook/addons/6.3.7: resolution: {integrity: sha512-9stVjTcc52bqqh7YQex/LpSjJ4e2Czm4/ZYDjIiNy0p4OZEx+yLhL5mZzMWh2NQd6vv+pHASBSxf2IeaR5511A==} peerDependencies: @@ -6267,12 +7283,42 @@ packages: '@storybook/semver': 7.3.2 '@storybook/theming': 6.3.12 '@types/reach__router': 1.3.9 - core-js: 3.16.2 + core-js: 3.19.1 + fast-deep-equal: 3.1.3 + global: 4.4.0 + lodash: 4.17.21 + memoizerific: 1.11.3 + qs: 6.10.1 + regenerator-runtime: 0.13.9 + store2: 2.12.0 + telejson: 5.3.3 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + dev: true + + /@storybook/api/6.3.12_react-dom@16.14.0+react@16.14.0: + resolution: {integrity: sha512-LScRXUeCWEW/OP+jiooNMQICVdusv7azTmULxtm72fhkXFRiQs2CdRNTiqNg46JLLC9z95f1W+pGK66X6HiiQA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + dependencies: + '@reach/router': 1.3.4_react-dom@16.14.0+react@16.14.0 + '@storybook/channels': 6.3.12 + '@storybook/client-logger': 6.3.12 + '@storybook/core-events': 6.3.12 + '@storybook/csf': 0.0.1 + '@storybook/router': 6.3.12_react-dom@16.14.0+react@16.14.0 + '@storybook/semver': 7.3.2 + '@storybook/theming': 6.3.12_react-dom@16.14.0+react@16.14.0 + '@types/reach__router': 1.3.9 + core-js: 3.19.1 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.21 memoizerific: 1.11.3 qs: 6.10.1 + react: 16.14.0 + react-dom: 16.14.0_react@16.14.0 regenerator-runtime: 0.13.9 store2: 2.12.0 telejson: 5.3.3 @@ -6338,8 +7384,8 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/builder-webpack4/6.3.7_6b8328ae33be7bccbaedcbeca6bc1253: - resolution: {integrity: sha512-M5envblMzAUrNqP1+ouKiL8iSIW/90+kBRU2QeWlZoZl1ib+fiFoKk06cgbaC70Bx1lU8nOnI/VBvB5pLhXLaw==} + /@storybook/builder-webpack4/6.3.12_e909896d3b3be82f296f6253d3893b12: + resolution: {integrity: sha512-Dlm5Fc1svqpFDnVPZdAaEBiM/IDZHMV3RfEGbUTY/ZC0q8b/Ug1czzp/w0aTIjOFRuBDcG6IcplikaqHL8CJLg==} peerDependencies: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 @@ -6348,63 +7394,63 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.15.0 - '@babel/plugin-proposal-class-properties': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-proposal-decorators': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-proposal-export-default-from': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-proposal-object-rest-spread': 7.14.7_@babel+core@7.15.0 - '@babel/plugin-proposal-optional-chaining': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-proposal-private-methods': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.15.0 - '@babel/plugin-transform-arrow-functions': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-transform-block-scoping': 7.15.3_@babel+core@7.15.0 - '@babel/plugin-transform-classes': 7.14.9_@babel+core@7.15.0 - '@babel/plugin-transform-destructuring': 7.14.7_@babel+core@7.15.0 - '@babel/plugin-transform-for-of': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-transform-parameters': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-transform-shorthand-properties': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-transform-spread': 7.14.6_@babel+core@7.15.0 - '@babel/plugin-transform-template-literals': 7.14.5_@babel+core@7.15.0 - '@babel/preset-env': 7.15.0_@babel+core@7.15.0 - '@babel/preset-react': 7.14.5_@babel+core@7.15.0 - '@babel/preset-typescript': 7.15.0_@babel+core@7.15.0 - '@storybook/addons': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@storybook/api': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@storybook/channel-postmessage': 6.3.7 - '@storybook/channels': 6.3.7 - '@storybook/client-api': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@storybook/client-logger': 6.3.7 - '@storybook/components': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@storybook/core-common': 6.3.7_6b8328ae33be7bccbaedcbeca6bc1253 - '@storybook/core-events': 6.3.7 - '@storybook/node-logger': 6.3.7 - '@storybook/router': 6.3.7_react-dom@16.14.0+react@16.14.0 + '@babel/core': 7.16.0 + '@babel/plugin-proposal-class-properties': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-decorators': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-export-default-from': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-object-rest-spread': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-optional-chaining': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-private-methods': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.16.0 + '@babel/plugin-transform-arrow-functions': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-block-scoping': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-classes': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-destructuring': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-for-of': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-parameters': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-shorthand-properties': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-spread': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-template-literals': 7.16.0_@babel+core@7.16.0 + '@babel/preset-env': 7.16.0_@babel+core@7.16.0 + '@babel/preset-react': 7.16.0_@babel+core@7.16.0 + '@babel/preset-typescript': 7.16.0_@babel+core@7.16.0 + '@storybook/addons': 6.3.12_react-dom@16.14.0+react@16.14.0 + '@storybook/api': 6.3.12_react-dom@16.14.0+react@16.14.0 + '@storybook/channel-postmessage': 6.3.12 + '@storybook/channels': 6.3.12 + '@storybook/client-api': 6.3.12_react-dom@16.14.0+react@16.14.0 + '@storybook/client-logger': 6.3.12 + '@storybook/components': 6.3.12_react-dom@16.14.0+react@16.14.0 + '@storybook/core-common': 6.3.12_e909896d3b3be82f296f6253d3893b12 + '@storybook/core-events': 6.3.12 + '@storybook/node-logger': 6.3.12 + '@storybook/router': 6.3.12_react-dom@16.14.0+react@16.14.0 '@storybook/semver': 7.3.2 - '@storybook/theming': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@storybook/ui': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@types/node': 14.17.10 - '@types/webpack': 4.41.30 - autoprefixer: 9.8.6 - babel-loader: 8.2.2_be352a5a80662835a7707f972edfcfde + '@storybook/theming': 6.3.12_react-dom@16.14.0+react@16.14.0 + '@storybook/ui': 6.3.12_react-dom@16.14.0+react@16.14.0 + '@types/node': 14.17.32 + '@types/webpack': 4.41.31 + autoprefixer: 9.8.8 + babel-loader: 8.2.3_1bd60a6cd0f7024f034efd75ae733a3f babel-plugin-macros: 2.8.0 - babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.15.0 + babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.16.0 case-sensitive-paths-webpack-plugin: 2.4.0 - core-js: 3.16.2 + core-js: 3.19.1 css-loader: 3.6.0_webpack@4.46.0 dotenv-webpack: 1.8.0_webpack@4.46.0 file-loader: 6.2.0_webpack@4.46.0 find-up: 5.0.0 fork-ts-checker-webpack-plugin: 4.1.6 fs-extra: 9.1.0 - glob: 7.1.7 - glob-promise: 3.4.0_glob@7.1.7 + glob: 7.2.0 + glob-promise: 3.4.0_glob@7.2.0 global: 4.4.0 html-webpack-plugin: 4.5.2_webpack@4.46.0 - pnp-webpack-plugin: 1.6.4_typescript@3.9.10 - postcss: 7.0.36 + pnp-webpack-plugin: 1.6.4_typescript@4.4.4 + postcss: 7.0.39 postcss-flexbugs-fixes: 4.2.1 - postcss-loader: 4.3.0_postcss@7.0.36+webpack@4.46.0 + postcss-loader: 4.3.0_postcss@7.0.39+webpack@4.46.0 raw-loader: 4.0.2_webpack@4.46.0 react: 16.14.0 react-dev-utils: 11.0.4 @@ -6413,23 +7459,25 @@ packages: style-loader: 1.3.0_webpack@4.46.0 terser-webpack-plugin: 4.2.3_webpack@4.46.0 ts-dedent: 2.2.0 - typescript: 3.9.10 + typescript: 4.4.4 url-loader: 4.1.1_file-loader@6.2.0+webpack@4.46.0 util-deprecate: 1.0.2 webpack: 4.46.0 webpack-dev-middleware: 3.7.3_webpack@4.46.0 webpack-filter-warnings-plugin: 1.2.1_webpack@4.46.0 - webpack-hot-middleware: 2.25.0 + webpack-hot-middleware: 2.25.1 webpack-virtual-modules: 0.2.2 transitivePeerDependencies: - '@types/react' + - eslint - supports-color + - vue-template-compiler - webpack-cli - webpack-command dev: true - /@storybook/builder-webpack4/6.3.7_8073bd74a106ff14517e8eecceb690e6: - resolution: {integrity: sha512-M5envblMzAUrNqP1+ouKiL8iSIW/90+kBRU2QeWlZoZl1ib+fiFoKk06cgbaC70Bx1lU8nOnI/VBvB5pLhXLaw==} + /@storybook/builder-webpack4/6.3.12_eslint@8.1.0+typescript@4.4.4: + resolution: {integrity: sha512-Dlm5Fc1svqpFDnVPZdAaEBiM/IDZHMV3RfEGbUTY/ZC0q8b/Ug1czzp/w0aTIjOFRuBDcG6IcplikaqHL8CJLg==} peerDependencies: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 @@ -6438,87 +7486,87 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.15.0 - '@babel/plugin-proposal-class-properties': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-proposal-decorators': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-proposal-export-default-from': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-proposal-object-rest-spread': 7.14.7_@babel+core@7.15.0 - '@babel/plugin-proposal-optional-chaining': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-proposal-private-methods': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.15.0 - '@babel/plugin-transform-arrow-functions': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-transform-block-scoping': 7.15.3_@babel+core@7.15.0 - '@babel/plugin-transform-classes': 7.14.9_@babel+core@7.15.0 - '@babel/plugin-transform-destructuring': 7.14.7_@babel+core@7.15.0 - '@babel/plugin-transform-for-of': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-transform-parameters': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-transform-shorthand-properties': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-transform-spread': 7.14.6_@babel+core@7.15.0 - '@babel/plugin-transform-template-literals': 7.14.5_@babel+core@7.15.0 - '@babel/preset-env': 7.15.0_@babel+core@7.15.0 - '@babel/preset-react': 7.14.5_@babel+core@7.15.0 - '@babel/preset-typescript': 7.15.0_@babel+core@7.15.0 - '@storybook/addons': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@storybook/api': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@storybook/channel-postmessage': 6.3.7 - '@storybook/channels': 6.3.7 - '@storybook/client-api': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@storybook/client-logger': 6.3.7 - '@storybook/components': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@storybook/core-common': 6.3.7_8073bd74a106ff14517e8eecceb690e6 - '@storybook/core-events': 6.3.7 - '@storybook/node-logger': 6.3.7 - '@storybook/router': 6.3.7_react-dom@16.14.0+react@16.14.0 + '@babel/core': 7.16.0 + '@babel/plugin-proposal-class-properties': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-decorators': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-export-default-from': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-object-rest-spread': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-optional-chaining': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-private-methods': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.16.0 + '@babel/plugin-transform-arrow-functions': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-block-scoping': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-classes': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-destructuring': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-for-of': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-parameters': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-shorthand-properties': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-spread': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-template-literals': 7.16.0_@babel+core@7.16.0 + '@babel/preset-env': 7.16.0_@babel+core@7.16.0 + '@babel/preset-react': 7.16.0_@babel+core@7.16.0 + '@babel/preset-typescript': 7.16.0_@babel+core@7.16.0 + '@storybook/addons': 6.3.12 + '@storybook/api': 6.3.12 + '@storybook/channel-postmessage': 6.3.12 + '@storybook/channels': 6.3.12 + '@storybook/client-api': 6.3.12 + '@storybook/client-logger': 6.3.12 + '@storybook/components': 6.3.12 + '@storybook/core-common': 6.3.12_eslint@8.1.0+typescript@4.4.4 + '@storybook/core-events': 6.3.12 + '@storybook/node-logger': 6.3.12 + '@storybook/router': 6.3.12 '@storybook/semver': 7.3.2 - '@storybook/theming': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@storybook/ui': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@types/node': 14.17.10 - '@types/webpack': 4.41.30 - autoprefixer: 9.8.6 - babel-loader: 8.2.2_be352a5a80662835a7707f972edfcfde + '@storybook/theming': 6.3.12 + '@storybook/ui': 6.3.12 + '@types/node': 14.17.32 + '@types/webpack': 4.41.31 + autoprefixer: 9.8.8 + babel-loader: 8.2.3_1bd60a6cd0f7024f034efd75ae733a3f babel-plugin-macros: 2.8.0 - babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.15.0 + babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.16.0 case-sensitive-paths-webpack-plugin: 2.4.0 - core-js: 3.16.2 + core-js: 3.19.1 css-loader: 3.6.0_webpack@4.46.0 dotenv-webpack: 1.8.0_webpack@4.46.0 file-loader: 6.2.0_webpack@4.46.0 find-up: 5.0.0 fork-ts-checker-webpack-plugin: 4.1.6 fs-extra: 9.1.0 - glob: 7.1.7 - glob-promise: 3.4.0_glob@7.1.7 + glob: 7.2.0 + glob-promise: 3.4.0_glob@7.2.0 global: 4.4.0 html-webpack-plugin: 4.5.2_webpack@4.46.0 - pnp-webpack-plugin: 1.6.4_typescript@4.3.5 - postcss: 7.0.36 + pnp-webpack-plugin: 1.6.4_typescript@4.4.4 + postcss: 7.0.39 postcss-flexbugs-fixes: 4.2.1 - postcss-loader: 4.3.0_postcss@7.0.36+webpack@4.46.0 + postcss-loader: 4.3.0_postcss@7.0.39+webpack@4.46.0 raw-loader: 4.0.2_webpack@4.46.0 - react: 16.14.0 react-dev-utils: 11.0.4 - react-dom: 16.14.0_react@16.14.0 stable: 0.1.8 style-loader: 1.3.0_webpack@4.46.0 terser-webpack-plugin: 4.2.3_webpack@4.46.0 ts-dedent: 2.2.0 - typescript: 4.3.5 + typescript: 4.4.4 url-loader: 4.1.1_file-loader@6.2.0+webpack@4.46.0 util-deprecate: 1.0.2 webpack: 4.46.0 webpack-dev-middleware: 3.7.3_webpack@4.46.0 webpack-filter-warnings-plugin: 1.2.1_webpack@4.46.0 - webpack-hot-middleware: 2.25.0 + webpack-hot-middleware: 2.25.1 webpack-virtual-modules: 0.2.2 transitivePeerDependencies: - '@types/react' + - eslint - supports-color + - vue-template-compiler - webpack-cli - webpack-command dev: true - /@storybook/builder-webpack4/6.3.7_typescript@3.9.10: + /@storybook/builder-webpack4/6.3.7_8073bd74a106ff14517e8eecceb690e6: resolution: {integrity: sha512-M5envblMzAUrNqP1+ouKiL8iSIW/90+kBRU2QeWlZoZl1ib+fiFoKk06cgbaC70Bx1lU8nOnI/VBvB5pLhXLaw==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -6549,20 +7597,20 @@ packages: '@babel/preset-env': 7.15.0_@babel+core@7.15.0 '@babel/preset-react': 7.14.5_@babel+core@7.15.0 '@babel/preset-typescript': 7.15.0_@babel+core@7.15.0 - '@storybook/addons': 6.3.7 - '@storybook/api': 6.3.7 + '@storybook/addons': 6.3.7_react-dom@16.14.0+react@16.14.0 + '@storybook/api': 6.3.7_react-dom@16.14.0+react@16.14.0 '@storybook/channel-postmessage': 6.3.7 '@storybook/channels': 6.3.7 - '@storybook/client-api': 6.3.7 + '@storybook/client-api': 6.3.7_react-dom@16.14.0+react@16.14.0 '@storybook/client-logger': 6.3.7 - '@storybook/components': 6.3.7 - '@storybook/core-common': 6.3.7_typescript@3.9.10 + '@storybook/components': 6.3.7_react-dom@16.14.0+react@16.14.0 + '@storybook/core-common': 6.3.7_8073bd74a106ff14517e8eecceb690e6 '@storybook/core-events': 6.3.7 '@storybook/node-logger': 6.3.7 - '@storybook/router': 6.3.7 + '@storybook/router': 6.3.7_react-dom@16.14.0+react@16.14.0 '@storybook/semver': 7.3.2 - '@storybook/theming': 6.3.7 - '@storybook/ui': 6.3.7 + '@storybook/theming': 6.3.7_react-dom@16.14.0+react@16.14.0 + '@storybook/ui': 6.3.7_react-dom@16.14.0+react@16.14.0 '@types/node': 14.17.10 '@types/webpack': 4.41.30 autoprefixer: 9.8.6 @@ -6581,17 +7629,19 @@ packages: glob-promise: 3.4.0_glob@7.1.7 global: 4.4.0 html-webpack-plugin: 4.5.2_webpack@4.46.0 - pnp-webpack-plugin: 1.6.4_typescript@3.9.10 + pnp-webpack-plugin: 1.6.4_typescript@4.3.5 postcss: 7.0.36 postcss-flexbugs-fixes: 4.2.1 postcss-loader: 4.3.0_postcss@7.0.36+webpack@4.46.0 raw-loader: 4.0.2_webpack@4.46.0 + react: 16.14.0 react-dev-utils: 11.0.4 + react-dom: 16.14.0_react@16.14.0 stable: 0.1.8 style-loader: 1.3.0_webpack@4.46.0 terser-webpack-plugin: 4.2.3_webpack@4.46.0 ts-dedent: 2.2.0 - typescript: 3.9.10 + typescript: 4.3.5 url-loader: 4.1.1_file-loader@6.2.0+webpack@4.46.0 util-deprecate: 1.0.2 webpack: 4.46.0 @@ -6694,6 +7744,18 @@ packages: - webpack-command dev: true + /@storybook/channel-postmessage/6.3.12: + resolution: {integrity: sha512-Ou/2Ga3JRTZ/4sSv7ikMgUgLTeZMsXXWLXuscz4oaYhmOqAU9CrJw0G1NitwBgK/+qC83lEFSLujHkWcoQDOKg==} + dependencies: + '@storybook/channels': 6.3.12 + '@storybook/client-logger': 6.3.12 + '@storybook/core-events': 6.3.12 + core-js: 3.19.1 + global: 4.4.0 + qs: 6.10.1 + telejson: 5.3.3 + dev: true + /@storybook/channel-postmessage/6.3.7: resolution: {integrity: sha512-Cmw8HRkeSF1yUFLfEIUIkUICyCXX8x5Ol/5QPbiW9HPE2hbZtYROCcg4bmWqdq59N0Tp9FQNSn+9ZygPgqQtNw==} dependencies: @@ -6709,7 +7771,7 @@ packages: /@storybook/channels/6.3.12: resolution: {integrity: sha512-l4sA+g1PdUV8YCbgs47fIKREdEQAKNdQIZw0b7BfTvY9t0x5yfBywgQhYON/lIeiNGz2OlIuD+VUtqYfCtNSyw==} dependencies: - core-js: 3.16.2 + core-js: 3.19.1 ts-dedent: 2.2.0 util-deprecate: 1.0.2 dev: true @@ -6722,6 +7784,60 @@ packages: util-deprecate: 1.0.2 dev: true + /@storybook/client-api/6.3.12: + resolution: {integrity: sha512-xnW+lKKK2T774z+rOr9Wopt1aYTStfb86PSs9p3Fpnc2Btcftln+C3NtiHZl8Ccqft8Mz/chLGgewRui6tNI8g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + dependencies: + '@storybook/addons': 6.3.12 + '@storybook/channel-postmessage': 6.3.12 + '@storybook/channels': 6.3.12 + '@storybook/client-logger': 6.3.12 + '@storybook/core-events': 6.3.12 + '@storybook/csf': 0.0.1 + '@types/qs': 6.9.7 + '@types/webpack-env': 1.16.3 + core-js: 3.19.1 + global: 4.4.0 + lodash: 4.17.21 + memoizerific: 1.11.3 + qs: 6.10.1 + regenerator-runtime: 0.13.9 + stable: 0.1.8 + store2: 2.12.0 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + dev: true + + /@storybook/client-api/6.3.12_react-dom@16.14.0+react@16.14.0: + resolution: {integrity: sha512-xnW+lKKK2T774z+rOr9Wopt1aYTStfb86PSs9p3Fpnc2Btcftln+C3NtiHZl8Ccqft8Mz/chLGgewRui6tNI8g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + dependencies: + '@storybook/addons': 6.3.12_react-dom@16.14.0+react@16.14.0 + '@storybook/channel-postmessage': 6.3.12 + '@storybook/channels': 6.3.12 + '@storybook/client-logger': 6.3.12 + '@storybook/core-events': 6.3.12 + '@storybook/csf': 0.0.1 + '@types/qs': 6.9.7 + '@types/webpack-env': 1.16.3 + core-js: 3.19.1 + global: 4.4.0 + lodash: 4.17.21 + memoizerific: 1.11.3 + qs: 6.10.1 + react: 16.14.0 + react-dom: 16.14.0_react@16.14.0 + regenerator-runtime: 0.13.9 + stable: 0.1.8 + store2: 2.12.0 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + dev: true + /@storybook/client-api/6.3.7: resolution: {integrity: sha512-8wOH19cMIwIIYhZy5O5Wl8JT1QOL5kNuamp9GPmg5ff4DtnG+/uUslskRvsnKyjPvl+WbIlZtBVWBiawVdd/yQ==} peerDependencies: @@ -6779,7 +7895,7 @@ packages: /@storybook/client-logger/6.3.12: resolution: {integrity: sha512-zNDsamZvHnuqLznDdP9dUeGgQ9TyFh4ray3t1VGO7ZqWVZ2xtVCCXjDvMnOXI2ifMpX5UsrOvshIPeE9fMBmiQ==} dependencies: - core-js: 3.16.2 + core-js: 3.19.1 global: 4.4.0 dev: true @@ -6790,6 +7906,76 @@ packages: global: 4.4.0 dev: true + /@storybook/components/6.3.12: + resolution: {integrity: sha512-kdQt8toUjynYAxDLrJzuG7YSNL6as1wJoyzNUaCfG06YPhvIAlKo7le9tS2mThVFN5e9nbKrW3N1V1sp6ypZXQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + dependencies: + '@popperjs/core': 2.10.2 + '@storybook/client-logger': 6.3.12 + '@storybook/csf': 0.0.1 + '@storybook/theming': 6.3.12 + '@types/color-convert': 2.0.0 + '@types/overlayscrollbars': 1.12.1 + '@types/react-syntax-highlighter': 11.0.5 + color-convert: 2.0.1 + core-js: 3.19.1 + fast-deep-equal: 3.1.3 + global: 4.4.0 + lodash: 4.17.21 + markdown-to-jsx: 7.1.3 + memoizerific: 1.11.3 + overlayscrollbars: 1.13.1 + polished: 4.1.3 + prop-types: 15.7.2 + react-colorful: 5.5.0 + react-popper-tooltip: 3.1.1 + react-syntax-highlighter: 13.5.3 + react-textarea-autosize: 8.3.3 + regenerator-runtime: 0.13.9 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + transitivePeerDependencies: + - '@types/react' + dev: true + + /@storybook/components/6.3.12_react-dom@16.14.0+react@16.14.0: + resolution: {integrity: sha512-kdQt8toUjynYAxDLrJzuG7YSNL6as1wJoyzNUaCfG06YPhvIAlKo7le9tS2mThVFN5e9nbKrW3N1V1sp6ypZXQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + dependencies: + '@popperjs/core': 2.10.2 + '@storybook/client-logger': 6.3.12 + '@storybook/csf': 0.0.1 + '@storybook/theming': 6.3.12_react-dom@16.14.0+react@16.14.0 + '@types/color-convert': 2.0.0 + '@types/overlayscrollbars': 1.12.1 + '@types/react-syntax-highlighter': 11.0.5 + color-convert: 2.0.1 + core-js: 3.19.1 + fast-deep-equal: 3.1.3 + global: 4.4.0 + lodash: 4.17.21 + markdown-to-jsx: 7.1.3_react@16.14.0 + memoizerific: 1.11.3 + overlayscrollbars: 1.13.1 + polished: 4.1.3 + prop-types: 15.7.2 + react: 16.14.0 + react-colorful: 5.5.0_react-dom@16.14.0+react@16.14.0 + react-dom: 16.14.0_react@16.14.0 + react-popper-tooltip: 3.1.1_react-dom@16.14.0+react@16.14.0 + react-syntax-highlighter: 13.5.3_react@16.14.0 + react-textarea-autosize: 8.3.3_react@16.14.0 + regenerator-runtime: 0.13.9 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + transitivePeerDependencies: + - '@types/react' + dev: true + /@storybook/components/6.3.7: resolution: {integrity: sha512-O7LIg9Z18G0AJqXX7Shcj0uHqwXlSA5UkHgaz9A7mqqqJNl6m6FwwTWcxR1acUfYVNkO+czgpqZHNrOF6rky1A==} peerDependencies: @@ -6860,8 +8046,8 @@ packages: - '@types/react' dev: true - /@storybook/core-client/6.3.7_3c33386fd9b1d5f07f48f07869b17b73: - resolution: {integrity: sha512-M/4A65yV+Y4lsCQXX4BtQO/i3BcMPrU5FkDG8qJd3dkcx2fUlFvGWqQPkcTZE+MPVvMEGl/AsEZSADzah9+dAg==} + /@storybook/core-client/6.3.12_98e8b17cafa08f66f5b84f6b58d34f3e: + resolution: {integrity: sha512-8Smd9BgZHJpAdevLKQYinwtjSyCZAuBMoetP4P5hnn53mWl0NFbrHFaAdT+yNchDLZQUbf7Y18VmIqEH+RCR5w==} peerDependencies: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 @@ -6871,16 +8057,16 @@ packages: typescript: optional: true dependencies: - '@storybook/addons': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@storybook/channel-postmessage': 6.3.7 - '@storybook/client-api': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@storybook/client-logger': 6.3.7 - '@storybook/core-events': 6.3.7 + '@storybook/addons': 6.3.12_react-dom@16.14.0+react@16.14.0 + '@storybook/channel-postmessage': 6.3.12 + '@storybook/client-api': 6.3.12_react-dom@16.14.0+react@16.14.0 + '@storybook/client-logger': 6.3.12 + '@storybook/core-events': 6.3.12 '@storybook/csf': 0.0.1 - '@storybook/ui': 6.3.7_react-dom@16.14.0+react@16.14.0 + '@storybook/ui': 6.3.12_react-dom@16.14.0+react@16.14.0 airbnb-js-shims: 2.2.1 ansi-to-html: 0.6.15 - core-js: 3.16.2 + core-js: 3.19.1 global: 4.4.0 lodash: 4.17.21 qs: 6.10.1 @@ -6888,16 +8074,15 @@ packages: react-dom: 16.14.0_react@16.14.0 regenerator-runtime: 0.13.9 ts-dedent: 2.2.0 - typescript: 3.9.10 + typescript: 4.4.4 unfetch: 4.2.0 util-deprecate: 1.0.2 - webpack: 4.46.0 transitivePeerDependencies: - '@types/react' dev: true - /@storybook/core-client/6.3.7_6b8328ae33be7bccbaedcbeca6bc1253: - resolution: {integrity: sha512-M/4A65yV+Y4lsCQXX4BtQO/i3BcMPrU5FkDG8qJd3dkcx2fUlFvGWqQPkcTZE+MPVvMEGl/AsEZSADzah9+dAg==} + /@storybook/core-client/6.3.12_f0cf51d5cae459eb9eaddb66e491ac01: + resolution: {integrity: sha512-8Smd9BgZHJpAdevLKQYinwtjSyCZAuBMoetP4P5hnn53mWl0NFbrHFaAdT+yNchDLZQUbf7Y18VmIqEH+RCR5w==} peerDependencies: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 @@ -6907,16 +8092,16 @@ packages: typescript: optional: true dependencies: - '@storybook/addons': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@storybook/channel-postmessage': 6.3.7 - '@storybook/client-api': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@storybook/client-logger': 6.3.7 - '@storybook/core-events': 6.3.7 + '@storybook/addons': 6.3.12_react-dom@16.14.0+react@16.14.0 + '@storybook/channel-postmessage': 6.3.12 + '@storybook/client-api': 6.3.12_react-dom@16.14.0+react@16.14.0 + '@storybook/client-logger': 6.3.12 + '@storybook/core-events': 6.3.12 '@storybook/csf': 0.0.1 - '@storybook/ui': 6.3.7_react-dom@16.14.0+react@16.14.0 + '@storybook/ui': 6.3.12_react-dom@16.14.0+react@16.14.0 airbnb-js-shims: 2.2.1 ansi-to-html: 0.6.15 - core-js: 3.16.2 + core-js: 3.19.1 global: 4.4.0 lodash: 4.17.21 qs: 6.10.1 @@ -6924,15 +8109,16 @@ packages: react-dom: 16.14.0_react@16.14.0 regenerator-runtime: 0.13.9 ts-dedent: 2.2.0 - typescript: 3.9.10 + typescript: 4.4.4 unfetch: 4.2.0 util-deprecate: 1.0.2 + webpack: 4.46.0 transitivePeerDependencies: - '@types/react' dev: true - /@storybook/core-client/6.3.7_70d39b49be06a92d1ddadaf2d0a6de02: - resolution: {integrity: sha512-M/4A65yV+Y4lsCQXX4BtQO/i3BcMPrU5FkDG8qJd3dkcx2fUlFvGWqQPkcTZE+MPVvMEGl/AsEZSADzah9+dAg==} + /@storybook/core-client/6.3.12_typescript@4.4.4: + resolution: {integrity: sha512-8Smd9BgZHJpAdevLKQYinwtjSyCZAuBMoetP4P5hnn53mWl0NFbrHFaAdT+yNchDLZQUbf7Y18VmIqEH+RCR5w==} peerDependencies: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 @@ -6942,33 +8128,30 @@ packages: typescript: optional: true dependencies: - '@storybook/addons': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@storybook/channel-postmessage': 6.3.7 - '@storybook/client-api': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@storybook/client-logger': 6.3.7 - '@storybook/core-events': 6.3.7 + '@storybook/addons': 6.3.12 + '@storybook/channel-postmessage': 6.3.12 + '@storybook/client-api': 6.3.12 + '@storybook/client-logger': 6.3.12 + '@storybook/core-events': 6.3.12 '@storybook/csf': 0.0.1 - '@storybook/ui': 6.3.7_react-dom@16.14.0+react@16.14.0 + '@storybook/ui': 6.3.12 airbnb-js-shims: 2.2.1 ansi-to-html: 0.6.15 - core-js: 3.16.2 + core-js: 3.19.1 global: 4.4.0 lodash: 4.17.21 qs: 6.10.1 - react: 16.14.0 - react-dom: 16.14.0_react@16.14.0 regenerator-runtime: 0.13.9 ts-dedent: 2.2.0 - typescript: 4.3.5 + typescript: 4.4.4 unfetch: 4.2.0 util-deprecate: 1.0.2 - webpack: 4.46.0 transitivePeerDependencies: - '@types/react' dev: true - /@storybook/core-client/6.3.7_8073bd74a106ff14517e8eecceb690e6: - resolution: {integrity: sha512-M/4A65yV+Y4lsCQXX4BtQO/i3BcMPrU5FkDG8qJd3dkcx2fUlFvGWqQPkcTZE+MPVvMEGl/AsEZSADzah9+dAg==} + /@storybook/core-client/6.3.12_typescript@4.4.4+webpack@4.46.0: + resolution: {integrity: sha512-8Smd9BgZHJpAdevLKQYinwtjSyCZAuBMoetP4P5hnn53mWl0NFbrHFaAdT+yNchDLZQUbf7Y18VmIqEH+RCR5w==} peerDependencies: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 @@ -6978,31 +8161,30 @@ packages: typescript: optional: true dependencies: - '@storybook/addons': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@storybook/channel-postmessage': 6.3.7 - '@storybook/client-api': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@storybook/client-logger': 6.3.7 - '@storybook/core-events': 6.3.7 + '@storybook/addons': 6.3.12 + '@storybook/channel-postmessage': 6.3.12 + '@storybook/client-api': 6.3.12 + '@storybook/client-logger': 6.3.12 + '@storybook/core-events': 6.3.12 '@storybook/csf': 0.0.1 - '@storybook/ui': 6.3.7_react-dom@16.14.0+react@16.14.0 + '@storybook/ui': 6.3.12 airbnb-js-shims: 2.2.1 ansi-to-html: 0.6.15 - core-js: 3.16.2 + core-js: 3.19.1 global: 4.4.0 lodash: 4.17.21 qs: 6.10.1 - react: 16.14.0 - react-dom: 16.14.0_react@16.14.0 regenerator-runtime: 0.13.9 ts-dedent: 2.2.0 - typescript: 4.3.5 + typescript: 4.4.4 unfetch: 4.2.0 util-deprecate: 1.0.2 + webpack: 4.46.0 transitivePeerDependencies: - '@types/react' dev: true - /@storybook/core-client/6.3.7_typescript@3.9.10: + /@storybook/core-client/6.3.7_70d39b49be06a92d1ddadaf2d0a6de02: resolution: {integrity: sha512-M/4A65yV+Y4lsCQXX4BtQO/i3BcMPrU5FkDG8qJd3dkcx2fUlFvGWqQPkcTZE+MPVvMEGl/AsEZSADzah9+dAg==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -7013,29 +8195,32 @@ packages: typescript: optional: true dependencies: - '@storybook/addons': 6.3.7 + '@storybook/addons': 6.3.7_react-dom@16.14.0+react@16.14.0 '@storybook/channel-postmessage': 6.3.7 - '@storybook/client-api': 6.3.7 + '@storybook/client-api': 6.3.7_react-dom@16.14.0+react@16.14.0 '@storybook/client-logger': 6.3.7 '@storybook/core-events': 6.3.7 '@storybook/csf': 0.0.1 - '@storybook/ui': 6.3.7 + '@storybook/ui': 6.3.7_react-dom@16.14.0+react@16.14.0 airbnb-js-shims: 2.2.1 ansi-to-html: 0.6.15 core-js: 3.16.2 global: 4.4.0 lodash: 4.17.21 qs: 6.10.1 + react: 16.14.0 + react-dom: 16.14.0_react@16.14.0 regenerator-runtime: 0.13.9 ts-dedent: 2.2.0 - typescript: 3.9.10 + typescript: 4.3.5 unfetch: 4.2.0 util-deprecate: 1.0.2 + webpack: 4.46.0 transitivePeerDependencies: - '@types/react' dev: true - /@storybook/core-client/6.3.7_typescript@3.9.10+webpack@4.46.0: + /@storybook/core-client/6.3.7_8073bd74a106ff14517e8eecceb690e6: resolution: {integrity: sha512-M/4A65yV+Y4lsCQXX4BtQO/i3BcMPrU5FkDG8qJd3dkcx2fUlFvGWqQPkcTZE+MPVvMEGl/AsEZSADzah9+dAg==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -7046,25 +8231,26 @@ packages: typescript: optional: true dependencies: - '@storybook/addons': 6.3.7 + '@storybook/addons': 6.3.7_react-dom@16.14.0+react@16.14.0 '@storybook/channel-postmessage': 6.3.7 - '@storybook/client-api': 6.3.7 + '@storybook/client-api': 6.3.7_react-dom@16.14.0+react@16.14.0 '@storybook/client-logger': 6.3.7 '@storybook/core-events': 6.3.7 '@storybook/csf': 0.0.1 - '@storybook/ui': 6.3.7 + '@storybook/ui': 6.3.7_react-dom@16.14.0+react@16.14.0 airbnb-js-shims: 2.2.1 ansi-to-html: 0.6.15 core-js: 3.16.2 global: 4.4.0 lodash: 4.17.21 qs: 6.10.1 + react: 16.14.0 + react-dom: 16.14.0_react@16.14.0 regenerator-runtime: 0.13.9 ts-dedent: 2.2.0 - typescript: 3.9.10 + typescript: 4.3.5 unfetch: 4.2.0 util-deprecate: 1.0.2 - webpack: 4.46.0 transitivePeerDependencies: - '@types/react' dev: true @@ -7136,8 +8322,8 @@ packages: - '@types/react' dev: true - /@storybook/core-common/6.3.7_6b8328ae33be7bccbaedcbeca6bc1253: - resolution: {integrity: sha512-exLoqRPPsAefwyjbsQBLNFrlPCcv69Q/pclqmIm7FqAPR7f3CKP1rqsHY0PnemizTL/+cLX5S7mY90gI6wpNug==} + /@storybook/core-common/6.3.12_e909896d3b3be82f296f6253d3893b12: + resolution: {integrity: sha512-xlHs2QXELq/moB4MuXjYOczaxU64BIseHsnFBLyboJYN6Yso3qihW5RB7cuJlGohkjb4JwY74dvfT4Ww66rkBA==} peerDependencies: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 @@ -7146,43 +8332,43 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.15.0 - '@babel/plugin-proposal-class-properties': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-proposal-decorators': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-proposal-export-default-from': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-proposal-object-rest-spread': 7.14.7_@babel+core@7.15.0 - '@babel/plugin-proposal-optional-chaining': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-proposal-private-methods': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.15.0 - '@babel/plugin-transform-arrow-functions': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-transform-block-scoping': 7.15.3_@babel+core@7.15.0 - '@babel/plugin-transform-classes': 7.14.9_@babel+core@7.15.0 - '@babel/plugin-transform-destructuring': 7.14.7_@babel+core@7.15.0 - '@babel/plugin-transform-for-of': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-transform-parameters': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-transform-shorthand-properties': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-transform-spread': 7.14.6_@babel+core@7.15.0 - '@babel/preset-env': 7.15.0_@babel+core@7.15.0 - '@babel/preset-react': 7.14.5_@babel+core@7.15.0 - '@babel/preset-typescript': 7.15.0_@babel+core@7.15.0 - '@babel/register': 7.15.3_@babel+core@7.15.0 - '@storybook/node-logger': 6.3.7 + '@babel/core': 7.16.0 + '@babel/plugin-proposal-class-properties': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-decorators': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-export-default-from': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-object-rest-spread': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-optional-chaining': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-private-methods': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.16.0 + '@babel/plugin-transform-arrow-functions': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-block-scoping': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-classes': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-destructuring': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-for-of': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-parameters': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-shorthand-properties': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-spread': 7.16.0_@babel+core@7.16.0 + '@babel/preset-env': 7.16.0_@babel+core@7.16.0 + '@babel/preset-react': 7.16.0_@babel+core@7.16.0 + '@babel/preset-typescript': 7.16.0_@babel+core@7.16.0 + '@babel/register': 7.16.0_@babel+core@7.16.0 + '@storybook/node-logger': 6.3.12 '@storybook/semver': 7.3.2 '@types/glob-base': 0.3.0 '@types/micromatch': 4.0.2 - '@types/node': 14.17.10 + '@types/node': 14.17.32 '@types/pretty-hrtime': 1.0.1 - babel-loader: 8.2.2_be352a5a80662835a7707f972edfcfde + babel-loader: 8.2.3_1bd60a6cd0f7024f034efd75ae733a3f babel-plugin-macros: 3.1.0 - babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.15.0 + babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.16.0 chalk: 4.1.2 - core-js: 3.16.2 + core-js: 3.19.1 express: 4.17.1 file-system-cache: 1.0.5 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.3.2 - glob: 7.1.7 + fork-ts-checker-webpack-plugin: 6.4.0_831eeee51b9dc6506e4e2983e1c7fb45 + glob: 7.2.0 glob-base: 0.3.0 interpret: 2.2.0 json5: 2.2.0 @@ -7194,17 +8380,19 @@ packages: react-dom: 16.14.0_react@16.14.0 resolve-from: 5.0.0 ts-dedent: 2.2.0 - typescript: 3.9.10 + typescript: 4.4.4 util-deprecate: 1.0.2 webpack: 4.46.0 transitivePeerDependencies: + - eslint - supports-color + - vue-template-compiler - webpack-cli - webpack-command dev: true - /@storybook/core-common/6.3.7_8073bd74a106ff14517e8eecceb690e6: - resolution: {integrity: sha512-exLoqRPPsAefwyjbsQBLNFrlPCcv69Q/pclqmIm7FqAPR7f3CKP1rqsHY0PnemizTL/+cLX5S7mY90gI6wpNug==} + /@storybook/core-common/6.3.12_eslint@8.1.0+typescript@4.4.4: + resolution: {integrity: sha512-xlHs2QXELq/moB4MuXjYOczaxU64BIseHsnFBLyboJYN6Yso3qihW5RB7cuJlGohkjb4JwY74dvfT4Ww66rkBA==} peerDependencies: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 @@ -7213,43 +8401,43 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.15.0 - '@babel/plugin-proposal-class-properties': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-proposal-decorators': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-proposal-export-default-from': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-proposal-object-rest-spread': 7.14.7_@babel+core@7.15.0 - '@babel/plugin-proposal-optional-chaining': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-proposal-private-methods': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.15.0 - '@babel/plugin-transform-arrow-functions': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-transform-block-scoping': 7.15.3_@babel+core@7.15.0 - '@babel/plugin-transform-classes': 7.14.9_@babel+core@7.15.0 - '@babel/plugin-transform-destructuring': 7.14.7_@babel+core@7.15.0 - '@babel/plugin-transform-for-of': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-transform-parameters': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-transform-shorthand-properties': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-transform-spread': 7.14.6_@babel+core@7.15.0 - '@babel/preset-env': 7.15.0_@babel+core@7.15.0 - '@babel/preset-react': 7.14.5_@babel+core@7.15.0 - '@babel/preset-typescript': 7.15.0_@babel+core@7.15.0 - '@babel/register': 7.15.3_@babel+core@7.15.0 - '@storybook/node-logger': 6.3.7 + '@babel/core': 7.16.0 + '@babel/plugin-proposal-class-properties': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-decorators': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-export-default-from': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-object-rest-spread': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-optional-chaining': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-private-methods': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.16.0 + '@babel/plugin-transform-arrow-functions': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-block-scoping': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-classes': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-destructuring': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-for-of': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-parameters': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-shorthand-properties': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-spread': 7.16.0_@babel+core@7.16.0 + '@babel/preset-env': 7.16.0_@babel+core@7.16.0 + '@babel/preset-react': 7.16.0_@babel+core@7.16.0 + '@babel/preset-typescript': 7.16.0_@babel+core@7.16.0 + '@babel/register': 7.16.0_@babel+core@7.16.0 + '@storybook/node-logger': 6.3.12 '@storybook/semver': 7.3.2 '@types/glob-base': 0.3.0 '@types/micromatch': 4.0.2 - '@types/node': 14.17.10 + '@types/node': 14.17.32 '@types/pretty-hrtime': 1.0.1 - babel-loader: 8.2.2_be352a5a80662835a7707f972edfcfde + babel-loader: 8.2.3_1bd60a6cd0f7024f034efd75ae733a3f babel-plugin-macros: 3.1.0 - babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.15.0 + babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.16.0 chalk: 4.1.2 - core-js: 3.16.2 + core-js: 3.19.1 express: 4.17.1 file-system-cache: 1.0.5 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.3.2 - glob: 7.1.7 + fork-ts-checker-webpack-plugin: 6.4.0_831eeee51b9dc6506e4e2983e1c7fb45 + glob: 7.2.0 glob-base: 0.3.0 interpret: 2.2.0 json5: 2.2.0 @@ -7257,20 +8445,20 @@ packages: micromatch: 4.0.4 pkg-dir: 5.0.0 pretty-hrtime: 1.0.3 - react: 16.14.0 - react-dom: 16.14.0_react@16.14.0 resolve-from: 5.0.0 ts-dedent: 2.2.0 - typescript: 4.3.5 + typescript: 4.4.4 util-deprecate: 1.0.2 webpack: 4.46.0 transitivePeerDependencies: + - eslint - supports-color + - vue-template-compiler - webpack-cli - webpack-command dev: true - /@storybook/core-common/6.3.7_typescript@3.9.10: + /@storybook/core-common/6.3.7_8073bd74a106ff14517e8eecceb690e6: resolution: {integrity: sha512-exLoqRPPsAefwyjbsQBLNFrlPCcv69Q/pclqmIm7FqAPR7f3CKP1rqsHY0PnemizTL/+cLX5S7mY90gI6wpNug==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -7324,9 +8512,11 @@ packages: micromatch: 4.0.4 pkg-dir: 5.0.0 pretty-hrtime: 1.0.3 + react: 16.14.0 + react-dom: 16.14.0_react@16.14.0 resolve-from: 5.0.0 ts-dedent: 2.2.0 - typescript: 3.9.10 + typescript: 4.3.5 util-deprecate: 1.0.2 webpack: 4.46.0 transitivePeerDependencies: @@ -7403,7 +8593,7 @@ packages: /@storybook/core-events/6.3.12: resolution: {integrity: sha512-SXfD7xUUMazaeFkB92qOTUV8Y/RghE4SkEYe5slAdjeocSaH7Nz2WV0rqNEgChg0AQc+JUI66no8L9g0+lw4Gw==} dependencies: - core-js: 3.16.2 + core-js: 3.19.1 dev: true /@storybook/core-events/6.3.7: @@ -7412,11 +8602,11 @@ packages: core-js: 3.16.2 dev: true - /@storybook/core-server/6.3.7_36f75bb62e0c484c1a06658ad2872463: - resolution: {integrity: sha512-m5OPD/rmZA7KFewkXzXD46/i1ngUoFO4LWOiAY/wR6RQGjYXGMhSa5UYFF6MNwSbiGS5YieHkR5crB1HP47AhQ==} + /@storybook/core-server/6.3.12_7f5de251797ed618e165bdd143385062: + resolution: {integrity: sha512-T/Mdyi1FVkUycdyOnhXvoo3d9nYXLQFkmaJkltxBFLzAePAJUSgAsPL9odNC3+p8Nr2/UDsDzvu/Ow0IF0mzLQ==} peerDependencies: - '@storybook/builder-webpack5': 6.3.7 - '@storybook/manager-webpack5': 6.3.7 + '@storybook/builder-webpack5': 6.3.12 + '@storybook/manager-webpack5': 6.3.12 react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 typescript: '*' @@ -7428,24 +8618,25 @@ packages: typescript: optional: true dependencies: - '@storybook/builder-webpack4': 6.3.7_typescript@3.9.10 - '@storybook/core-client': 6.3.7_typescript@3.9.10+webpack@4.46.0 - '@storybook/core-common': 6.3.7_typescript@3.9.10 - '@storybook/csf-tools': 6.3.7_@babel+core@7.15.0 - '@storybook/manager-webpack4': 6.3.7_typescript@3.9.10 - '@storybook/node-logger': 6.3.7 + '@discoveryjs/json-ext': 0.5.5 + '@storybook/builder-webpack4': 6.3.12_eslint@8.1.0+typescript@4.4.4 + '@storybook/core-client': 6.3.12_typescript@4.4.4+webpack@4.46.0 + '@storybook/core-common': 6.3.12_eslint@8.1.0+typescript@4.4.4 + '@storybook/csf-tools': 6.3.12_@babel+core@7.16.0 + '@storybook/manager-webpack4': 6.3.12_eslint@8.1.0+typescript@4.4.4 + '@storybook/node-logger': 6.3.12 '@storybook/semver': 7.3.2 - '@types/node': 14.17.10 + '@types/node': 14.17.32 '@types/node-fetch': 2.5.12 '@types/pretty-hrtime': 1.0.1 - '@types/webpack': 4.41.30 + '@types/webpack': 4.41.31 better-opn: 2.1.1 boxen: 4.2.0 chalk: 4.1.2 cli-table3: 0.6.0 commander: 6.2.1 compression: 1.7.4 - core-js: 3.16.2 + core-js: 3.19.1 cpy: 8.1.2 detect-port: 1.3.0 express: 4.17.1 @@ -7453,28 +8644,30 @@ packages: fs-extra: 9.1.0 globby: 11.0.4 ip: 1.1.5 - node-fetch: 2.6.1 + node-fetch: 2.6.6 pretty-hrtime: 1.0.3 - prompts: 2.4.1 + prompts: 2.4.2 regenerator-runtime: 0.13.9 serve-favicon: 2.5.0 ts-dedent: 2.2.0 - typescript: 3.9.10 + typescript: 4.4.4 util-deprecate: 1.0.2 webpack: 4.46.0 transitivePeerDependencies: - '@babel/core' - '@types/react' + - eslint - supports-color + - vue-template-compiler - webpack-cli - webpack-command dev: true - /@storybook/core-server/6.3.7_6b8328ae33be7bccbaedcbeca6bc1253: - resolution: {integrity: sha512-m5OPD/rmZA7KFewkXzXD46/i1ngUoFO4LWOiAY/wR6RQGjYXGMhSa5UYFF6MNwSbiGS5YieHkR5crB1HP47AhQ==} + /@storybook/core-server/6.3.12_e909896d3b3be82f296f6253d3893b12: + resolution: {integrity: sha512-T/Mdyi1FVkUycdyOnhXvoo3d9nYXLQFkmaJkltxBFLzAePAJUSgAsPL9odNC3+p8Nr2/UDsDzvu/Ow0IF0mzLQ==} peerDependencies: - '@storybook/builder-webpack5': 6.3.7 - '@storybook/manager-webpack5': 6.3.7 + '@storybook/builder-webpack5': 6.3.12 + '@storybook/manager-webpack5': 6.3.12 react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 typescript: '*' @@ -7486,24 +8679,25 @@ packages: typescript: optional: true dependencies: - '@storybook/builder-webpack4': 6.3.7_6b8328ae33be7bccbaedcbeca6bc1253 - '@storybook/core-client': 6.3.7_3c33386fd9b1d5f07f48f07869b17b73 - '@storybook/core-common': 6.3.7_6b8328ae33be7bccbaedcbeca6bc1253 - '@storybook/csf-tools': 6.3.7 - '@storybook/manager-webpack4': 6.3.7_6b8328ae33be7bccbaedcbeca6bc1253 - '@storybook/node-logger': 6.3.7 + '@discoveryjs/json-ext': 0.5.5 + '@storybook/builder-webpack4': 6.3.12_e909896d3b3be82f296f6253d3893b12 + '@storybook/core-client': 6.3.12_f0cf51d5cae459eb9eaddb66e491ac01 + '@storybook/core-common': 6.3.12_e909896d3b3be82f296f6253d3893b12 + '@storybook/csf-tools': 6.3.12 + '@storybook/manager-webpack4': 6.3.12_e909896d3b3be82f296f6253d3893b12 + '@storybook/node-logger': 6.3.12 '@storybook/semver': 7.3.2 - '@types/node': 14.17.10 + '@types/node': 14.17.32 '@types/node-fetch': 2.5.12 '@types/pretty-hrtime': 1.0.1 - '@types/webpack': 4.41.30 + '@types/webpack': 4.41.31 better-opn: 2.1.1 boxen: 4.2.0 chalk: 4.1.2 cli-table3: 0.6.0 commander: 6.2.1 compression: 1.7.4 - core-js: 3.16.2 + core-js: 3.19.1 cpy: 8.1.2 detect-port: 1.3.0 express: 4.17.1 @@ -7511,21 +8705,23 @@ packages: fs-extra: 9.1.0 globby: 11.0.4 ip: 1.1.5 - node-fetch: 2.6.1 + node-fetch: 2.6.6 pretty-hrtime: 1.0.3 - prompts: 2.4.1 + prompts: 2.4.2 react: 16.14.0 react-dom: 16.14.0_react@16.14.0 regenerator-runtime: 0.13.9 serve-favicon: 2.5.0 ts-dedent: 2.2.0 - typescript: 3.9.10 + typescript: 4.4.4 util-deprecate: 1.0.2 webpack: 4.46.0 transitivePeerDependencies: - '@babel/core' - '@types/react' + - eslint - supports-color + - vue-template-compiler - webpack-cli - webpack-command dev: true @@ -7648,10 +8844,10 @@ packages: - webpack-command dev: true - /@storybook/core/6.3.7_36f75bb62e0c484c1a06658ad2872463: - resolution: {integrity: sha512-YTVLPXqgyBg7TALNxQ+cd+GtCm/NFjxr/qQ1mss1T9GCMR0IjE0d0trgOVHHLAO8jCVlK8DeuqZCCgZFTXulRw==} + /@storybook/core/6.3.12_7f5de251797ed618e165bdd143385062: + resolution: {integrity: sha512-FJm2ns8wk85hXWKslLWiUWRWwS9KWRq7jlkN6M9p57ghFseSGr4W71Orcoab4P3M7jI97l5yqBfppbscinE74g==} peerDependencies: - '@storybook/builder-webpack5': 6.3.7 + '@storybook/builder-webpack5': 6.3.12 react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 typescript: '*' @@ -7661,23 +8857,25 @@ packages: typescript: optional: true dependencies: - '@storybook/core-client': 6.3.7_typescript@3.9.10 - '@storybook/core-server': 6.3.7_36f75bb62e0c484c1a06658ad2872463 - typescript: 3.9.10 + '@storybook/core-client': 6.3.12_typescript@4.4.4 + '@storybook/core-server': 6.3.12_7f5de251797ed618e165bdd143385062 + typescript: 4.4.4 transitivePeerDependencies: - '@babel/core' - '@storybook/manager-webpack5' - '@types/react' + - eslint - supports-color + - vue-template-compiler - webpack - webpack-cli - webpack-command dev: true - /@storybook/core/6.3.7_6b8328ae33be7bccbaedcbeca6bc1253: - resolution: {integrity: sha512-YTVLPXqgyBg7TALNxQ+cd+GtCm/NFjxr/qQ1mss1T9GCMR0IjE0d0trgOVHHLAO8jCVlK8DeuqZCCgZFTXulRw==} + /@storybook/core/6.3.12_e909896d3b3be82f296f6253d3893b12: + resolution: {integrity: sha512-FJm2ns8wk85hXWKslLWiUWRWwS9KWRq7jlkN6M9p57ghFseSGr4W71Orcoab4P3M7jI97l5yqBfppbscinE74g==} peerDependencies: - '@storybook/builder-webpack5': 6.3.7 + '@storybook/builder-webpack5': 6.3.12 react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 typescript: '*' @@ -7687,16 +8885,18 @@ packages: typescript: optional: true dependencies: - '@storybook/core-client': 6.3.7_6b8328ae33be7bccbaedcbeca6bc1253 - '@storybook/core-server': 6.3.7_6b8328ae33be7bccbaedcbeca6bc1253 + '@storybook/core-client': 6.3.12_98e8b17cafa08f66f5b84f6b58d34f3e + '@storybook/core-server': 6.3.12_e909896d3b3be82f296f6253d3893b12 react: 16.14.0 react-dom: 16.14.0_react@16.14.0 - typescript: 3.9.10 + typescript: 4.4.4 transitivePeerDependencies: - '@babel/core' - '@storybook/manager-webpack5' - '@types/react' + - eslint - supports-color + - vue-template-compiler - webpack - webpack-cli - webpack-command @@ -7756,18 +8956,40 @@ packages: - webpack-command dev: true - /@storybook/csf-tools/6.3.7: - resolution: {integrity: sha512-A7yGsrYwh+vwVpmG8dHpEimX021RbZd9VzoREcILH56u8atssdh/rseljyWlRes3Sr4QgtLvDB7ggoJ+XDZH7w==} + /@storybook/csf-tools/6.3.12: + resolution: {integrity: sha512-wNrX+99ajAXxLo0iRwrqw65MLvCV6SFC0XoPLYrtBvyKr+hXOOnzIhO2f5BNEii8velpC2gl2gcLKeacpVYLqA==} dependencies: - '@babel/generator': 7.15.0 - '@babel/parser': 7.15.3 - '@babel/plugin-transform-react-jsx': 7.14.9 - '@babel/preset-env': 7.15.0 - '@babel/traverse': 7.15.0 - '@babel/types': 7.15.0 + '@babel/generator': 7.16.0 + '@babel/parser': 7.16.2 + '@babel/plugin-transform-react-jsx': 7.16.0 + '@babel/preset-env': 7.16.0 + '@babel/traverse': 7.16.0 + '@babel/types': 7.16.0 '@mdx-js/mdx': 1.6.22 '@storybook/csf': 0.0.1 - core-js: 3.16.2 + core-js: 3.19.1 + fs-extra: 9.1.0 + js-string-escape: 1.0.1 + lodash: 4.17.21 + prettier: 2.2.1 + regenerator-runtime: 0.13.9 + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: true + + /@storybook/csf-tools/6.3.12_@babel+core@7.16.0: + resolution: {integrity: sha512-wNrX+99ajAXxLo0iRwrqw65MLvCV6SFC0XoPLYrtBvyKr+hXOOnzIhO2f5BNEii8velpC2gl2gcLKeacpVYLqA==} + dependencies: + '@babel/generator': 7.16.0 + '@babel/parser': 7.16.2 + '@babel/plugin-transform-react-jsx': 7.16.0_@babel+core@7.16.0 + '@babel/preset-env': 7.16.0_@babel+core@7.16.0 + '@babel/traverse': 7.16.0 + '@babel/types': 7.16.0 + '@mdx-js/mdx': 1.6.22 + '@storybook/csf': 0.0.1 + core-js: 3.19.1 fs-extra: 9.1.0 js-string-escape: 1.0.1 lodash: 4.17.21 @@ -7828,8 +9050,8 @@ packages: lodash: 4.17.21 dev: true - /@storybook/manager-webpack4/6.3.7_6b8328ae33be7bccbaedcbeca6bc1253: - resolution: {integrity: sha512-cwUdO3oklEtx6y+ZOl2zHvflICK85emiXBQGgRcCsnwWQRBZOMh+tCgOSZj4jmISVpT52RtT9woG4jKe15KBig==} + /@storybook/manager-webpack4/6.3.12_e909896d3b3be82f296f6253d3893b12: + resolution: {integrity: sha512-OkPYNrHXg2yZfKmEfTokP6iKx4OLTr0gdI5yehi/bLEuQCSHeruxBc70Dxm1GBk1Mrf821wD9WqMXNDjY5Qtug==} peerDependencies: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 @@ -7838,21 +9060,21 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.15.0 - '@babel/plugin-transform-template-literals': 7.14.5_@babel+core@7.15.0 - '@babel/preset-react': 7.14.5_@babel+core@7.15.0 - '@storybook/addons': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@storybook/core-client': 6.3.7_3c33386fd9b1d5f07f48f07869b17b73 - '@storybook/core-common': 6.3.7_6b8328ae33be7bccbaedcbeca6bc1253 - '@storybook/node-logger': 6.3.7 - '@storybook/theming': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@storybook/ui': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@types/node': 14.17.10 - '@types/webpack': 4.41.30 - babel-loader: 8.2.2_be352a5a80662835a7707f972edfcfde + '@babel/core': 7.16.0 + '@babel/plugin-transform-template-literals': 7.16.0_@babel+core@7.16.0 + '@babel/preset-react': 7.16.0_@babel+core@7.16.0 + '@storybook/addons': 6.3.12_react-dom@16.14.0+react@16.14.0 + '@storybook/core-client': 6.3.12_f0cf51d5cae459eb9eaddb66e491ac01 + '@storybook/core-common': 6.3.12_e909896d3b3be82f296f6253d3893b12 + '@storybook/node-logger': 6.3.12 + '@storybook/theming': 6.3.12_react-dom@16.14.0+react@16.14.0 + '@storybook/ui': 6.3.12_react-dom@16.14.0+react@16.14.0 + '@types/node': 14.17.32 + '@types/webpack': 4.41.31 + babel-loader: 8.2.3_1bd60a6cd0f7024f034efd75ae733a3f case-sensitive-paths-webpack-plugin: 2.4.0 chalk: 4.1.2 - core-js: 3.16.2 + core-js: 3.19.1 css-loader: 3.6.0_webpack@4.46.0 dotenv-webpack: 1.8.0_webpack@4.46.0 express: 4.17.1 @@ -7861,8 +9083,8 @@ packages: find-up: 5.0.0 fs-extra: 9.1.0 html-webpack-plugin: 4.5.2_webpack@4.46.0 - node-fetch: 2.6.1 - pnp-webpack-plugin: 1.6.4_typescript@3.9.10 + node-fetch: 2.6.6 + pnp-webpack-plugin: 1.6.4_typescript@4.4.4 react: 16.14.0 react-dom: 16.14.0_react@16.14.0 read-pkg-up: 7.0.1 @@ -7872,7 +9094,7 @@ packages: telejson: 5.3.3 terser-webpack-plugin: 4.2.3_webpack@4.46.0 ts-dedent: 2.2.0 - typescript: 3.9.10 + typescript: 4.4.4 url-loader: 4.1.1_file-loader@6.2.0+webpack@4.46.0 util-deprecate: 1.0.2 webpack: 4.46.0 @@ -7880,13 +9102,15 @@ packages: webpack-virtual-modules: 0.2.2 transitivePeerDependencies: - '@types/react' + - eslint - supports-color + - vue-template-compiler - webpack-cli - webpack-command dev: true - /@storybook/manager-webpack4/6.3.7_8073bd74a106ff14517e8eecceb690e6: - resolution: {integrity: sha512-cwUdO3oklEtx6y+ZOl2zHvflICK85emiXBQGgRcCsnwWQRBZOMh+tCgOSZj4jmISVpT52RtT9woG4jKe15KBig==} + /@storybook/manager-webpack4/6.3.12_eslint@8.1.0+typescript@4.4.4: + resolution: {integrity: sha512-OkPYNrHXg2yZfKmEfTokP6iKx4OLTr0gdI5yehi/bLEuQCSHeruxBc70Dxm1GBk1Mrf821wD9WqMXNDjY5Qtug==} peerDependencies: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 @@ -7895,21 +9119,21 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.15.0 - '@babel/plugin-transform-template-literals': 7.14.5_@babel+core@7.15.0 - '@babel/preset-react': 7.14.5_@babel+core@7.15.0 - '@storybook/addons': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@storybook/core-client': 6.3.7_70d39b49be06a92d1ddadaf2d0a6de02 - '@storybook/core-common': 6.3.7_8073bd74a106ff14517e8eecceb690e6 - '@storybook/node-logger': 6.3.7 - '@storybook/theming': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@storybook/ui': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@types/node': 14.17.10 - '@types/webpack': 4.41.30 - babel-loader: 8.2.2_be352a5a80662835a7707f972edfcfde + '@babel/core': 7.16.0 + '@babel/plugin-transform-template-literals': 7.16.0_@babel+core@7.16.0 + '@babel/preset-react': 7.16.0_@babel+core@7.16.0 + '@storybook/addons': 6.3.12 + '@storybook/core-client': 6.3.12_typescript@4.4.4+webpack@4.46.0 + '@storybook/core-common': 6.3.12_eslint@8.1.0+typescript@4.4.4 + '@storybook/node-logger': 6.3.12 + '@storybook/theming': 6.3.12 + '@storybook/ui': 6.3.12 + '@types/node': 14.17.32 + '@types/webpack': 4.41.31 + babel-loader: 8.2.3_1bd60a6cd0f7024f034efd75ae733a3f case-sensitive-paths-webpack-plugin: 2.4.0 chalk: 4.1.2 - core-js: 3.16.2 + core-js: 3.19.1 css-loader: 3.6.0_webpack@4.46.0 dotenv-webpack: 1.8.0_webpack@4.46.0 express: 4.17.1 @@ -7918,10 +9142,8 @@ packages: find-up: 5.0.0 fs-extra: 9.1.0 html-webpack-plugin: 4.5.2_webpack@4.46.0 - node-fetch: 2.6.1 - pnp-webpack-plugin: 1.6.4_typescript@4.3.5 - react: 16.14.0 - react-dom: 16.14.0_react@16.14.0 + node-fetch: 2.6.6 + pnp-webpack-plugin: 1.6.4_typescript@4.4.4 read-pkg-up: 7.0.1 regenerator-runtime: 0.13.9 resolve-from: 5.0.0 @@ -7929,7 +9151,7 @@ packages: telejson: 5.3.3 terser-webpack-plugin: 4.2.3_webpack@4.46.0 ts-dedent: 2.2.0 - typescript: 4.3.5 + typescript: 4.4.4 url-loader: 4.1.1_file-loader@6.2.0+webpack@4.46.0 util-deprecate: 1.0.2 webpack: 4.46.0 @@ -7937,12 +9159,14 @@ packages: webpack-virtual-modules: 0.2.2 transitivePeerDependencies: - '@types/react' + - eslint - supports-color + - vue-template-compiler - webpack-cli - webpack-command dev: true - /@storybook/manager-webpack4/6.3.7_typescript@3.9.10: + /@storybook/manager-webpack4/6.3.7_8073bd74a106ff14517e8eecceb690e6: resolution: {integrity: sha512-cwUdO3oklEtx6y+ZOl2zHvflICK85emiXBQGgRcCsnwWQRBZOMh+tCgOSZj4jmISVpT52RtT9woG4jKe15KBig==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -7955,12 +9179,12 @@ packages: '@babel/core': 7.15.0 '@babel/plugin-transform-template-literals': 7.14.5_@babel+core@7.15.0 '@babel/preset-react': 7.14.5_@babel+core@7.15.0 - '@storybook/addons': 6.3.7 - '@storybook/core-client': 6.3.7_typescript@3.9.10+webpack@4.46.0 - '@storybook/core-common': 6.3.7_typescript@3.9.10 + '@storybook/addons': 6.3.7_react-dom@16.14.0+react@16.14.0 + '@storybook/core-client': 6.3.7_70d39b49be06a92d1ddadaf2d0a6de02 + '@storybook/core-common': 6.3.7_8073bd74a106ff14517e8eecceb690e6 '@storybook/node-logger': 6.3.7 - '@storybook/theming': 6.3.7 - '@storybook/ui': 6.3.7 + '@storybook/theming': 6.3.7_react-dom@16.14.0+react@16.14.0 + '@storybook/ui': 6.3.7_react-dom@16.14.0+react@16.14.0 '@types/node': 14.17.10 '@types/webpack': 4.41.30 babel-loader: 8.2.2_be352a5a80662835a7707f972edfcfde @@ -7976,7 +9200,9 @@ packages: fs-extra: 9.1.0 html-webpack-plugin: 4.5.2_webpack@4.46.0 node-fetch: 2.6.1 - pnp-webpack-plugin: 1.6.4_typescript@3.9.10 + pnp-webpack-plugin: 1.6.4_typescript@4.3.5 + react: 16.14.0 + react-dom: 16.14.0_react@16.14.0 read-pkg-up: 7.0.1 regenerator-runtime: 0.13.9 resolve-from: 5.0.0 @@ -7984,7 +9210,7 @@ packages: telejson: 5.3.3 terser-webpack-plugin: 4.2.3_webpack@4.46.0 ts-dedent: 2.2.0 - typescript: 3.9.10 + typescript: 4.3.5 url-loader: 4.1.1_file-loader@6.2.0+webpack@4.46.0 util-deprecate: 1.0.2 webpack: 4.46.0 @@ -8052,6 +9278,16 @@ packages: - webpack-command dev: true + /@storybook/node-logger/6.3.12: + resolution: {integrity: sha512-iktOem/Ls2+dsZY9PhPeC6T1QhX/y7OInP88neLsqEPEbB2UXca3Ydv7OZBhBVbvN25W45b05MRzbtNUxYLNRw==} + dependencies: + '@types/npmlog': 4.1.3 + chalk: 4.1.2 + core-js: 3.19.1 + npmlog: 4.1.2 + pretty-hrtime: 1.0.3 + dev: true + /@storybook/node-logger/6.3.7: resolution: {integrity: sha512-YXHCblruRe6HcNefDOpuXJoaybHnnSryIVP9Z+gDv6OgLAMkyxccTIaQL9dbc/eI4ywgzAz4kD8t1RfVwXNVXw==} dependencies: @@ -8062,14 +9298,20 @@ packages: pretty-hrtime: 1.0.3 dev: true + /@storybook/postinstall/6.3.12: + resolution: {integrity: sha512-HkZ+abtZ3W6JbGPS6K7OSnNXbwaTwNNd5R02kRs4gV9B29XsBPDtFT6vIwzM3tmVQC7ihL5a8ceWp2OvzaNOuw==} + dependencies: + core-js: 3.19.1 + dev: true + /@storybook/postinstall/6.3.7: resolution: {integrity: sha512-HgTj7WdWo2cXrGfEhi5XYZA+G4vIzECtJHK22GEL9QxJth60Ah/dE94VqpTlyhSpzP74ZFUgr92+pP9o+j3CCw==} dependencies: core-js: 3.16.2 dev: true - /@storybook/preact/6.3.7_9cd0ede338ef3d2deb8dbc69bc115c66: - resolution: {integrity: sha512-mP6+e1toCd59ALUNsiJWQN0CuOVV7faaMcAs21T+GJeU5igEWbRpe/ixKdMdu7RqHA9jAHOeMZfjSNhBkvnwAw==} + /@storybook/preact/6.3.12_95076c79c13120062fc2121e56d666e8: + resolution: {integrity: sha512-okP4Y1Zf26AdjK/5sFJGoF1Ce2WPK/3w+x0WgMdEOs7K7/pnKNQ1Ck8KLXmPyjTN+6bVoIMP8NcS8ZqHJu25lw==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -8077,15 +9319,14 @@ packages: preact: ^8.0.0||^10.0.0 webpack: '*' dependencies: - '@babel/core': 7.13.16 - '@babel/plugin-transform-react-jsx': 7.14.9_@babel+core@7.13.16 - '@storybook/addons': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@storybook/core': 6.3.7_f904207d8bce108657a1649c78f72ef8 - '@storybook/core-common': 6.3.7_8073bd74a106ff14517e8eecceb690e6 - '@types/webpack-env': 1.16.2 - core-js: 3.16.2 + '@babel/plugin-transform-react-jsx': 7.16.0 + '@storybook/addons': 6.3.12_react-dom@16.14.0+react@16.14.0 + '@storybook/core': 6.3.12_e909896d3b3be82f296f6253d3893b12 + '@storybook/core-common': 6.3.12_e909896d3b3be82f296f6253d3893b12 + '@types/webpack-env': 1.16.3 + core-js: 3.19.1 global: 4.4.0 - preact: 10.5.14 + preact: 10.5.15 react: 16.14.0 react-dom: 16.14.0_react@16.14.0 read-pkg-up: 7.0.1 @@ -8095,13 +9336,15 @@ packages: - '@storybook/builder-webpack5' - '@storybook/manager-webpack5' - '@types/react' + - eslint - supports-color - typescript + - vue-template-compiler - webpack-cli - webpack-command dev: true - /@storybook/preact/6.3.7_preact@10.5.14+typescript@3.9.10: + /@storybook/preact/6.3.7_9cd0ede338ef3d2deb8dbc69bc115c66: resolution: {integrity: sha512-mP6+e1toCd59ALUNsiJWQN0CuOVV7faaMcAs21T+GJeU5igEWbRpe/ixKdMdu7RqHA9jAHOeMZfjSNhBkvnwAw==} engines: {node: '>=10.13.0'} hasBin: true @@ -8110,10 +9353,11 @@ packages: preact: ^8.0.0||^10.0.0 webpack: '*' dependencies: - '@babel/plugin-transform-react-jsx': 7.14.9 + '@babel/core': 7.13.16 + '@babel/plugin-transform-react-jsx': 7.14.9_@babel+core@7.13.16 '@storybook/addons': 6.3.7_react-dom@16.14.0+react@16.14.0 - '@storybook/core': 6.3.7_6b8328ae33be7bccbaedcbeca6bc1253 - '@storybook/core-common': 6.3.7_6b8328ae33be7bccbaedcbeca6bc1253 + '@storybook/core': 6.3.7_f904207d8bce108657a1649c78f72ef8 + '@storybook/core-common': 6.3.7_8073bd74a106ff14517e8eecceb690e6 '@types/webpack-env': 1.16.2 core-js: 3.16.2 global: 4.4.0 @@ -8140,7 +9384,7 @@ packages: sass-loader: '*' style-loader: '*' dependencies: - sass-loader: 10.2.0_sass@1.32.13 + sass-loader: 10.2.0_sass@1.43.4 dev: true /@storybook/router/6.3.12: @@ -8152,12 +9396,32 @@ packages: '@reach/router': 1.3.4 '@storybook/client-logger': 6.3.12 '@types/reach__router': 1.3.9 - core-js: 3.16.2 + core-js: 3.19.1 + fast-deep-equal: 3.1.3 + global: 4.4.0 + lodash: 4.17.21 + memoizerific: 1.11.3 + qs: 6.10.1 + ts-dedent: 2.2.0 + dev: true + + /@storybook/router/6.3.12_react-dom@16.14.0+react@16.14.0: + resolution: {integrity: sha512-G/pNGCnrJRetCwyEZulHPT+YOcqEj/vkPVDTUfii2qgqukup6K0cjwgd7IukAURnAnnzTi1gmgFuEKUi8GE/KA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + dependencies: + '@reach/router': 1.3.4_react-dom@16.14.0+react@16.14.0 + '@storybook/client-logger': 6.3.12 + '@types/reach__router': 1.3.9 + core-js: 3.19.1 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.21 memoizerific: 1.11.3 qs: 6.10.1 + react: 16.14.0 + react-dom: 16.14.0_react@16.14.0 ts-dedent: 2.2.0 dev: true @@ -8204,10 +9468,28 @@ packages: engines: {node: '>=10'} hasBin: true dependencies: - core-js: 3.16.2 + core-js: 3.19.1 find-up: 4.1.0 dev: true + /@storybook/source-loader/6.3.12: + resolution: {integrity: sha512-Lfe0LOJGqAJYkZsCL8fhuQOeFSCgv8xwQCt4dkcBd0Rw5zT2xv0IXDOiIOXGaWBMDtrJUZt/qOXPEPlL81Oaqg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + dependencies: + '@storybook/addons': 6.3.12 + '@storybook/client-logger': 6.3.12 + '@storybook/csf': 0.0.1 + core-js: 3.19.1 + estraverse: 5.3.0 + global: 4.4.0 + loader-utils: 2.0.2 + lodash: 4.17.21 + prettier: 2.2.1 + regenerator-runtime: 0.13.9 + dev: true + /@storybook/source-loader/6.3.7: resolution: {integrity: sha512-0xQTq90jwx7W7MJn/idEBCGPOyxi/3No5j+5YdfJsSGJRuMFH3jt6pGgdeZ4XA01cmmIX6bZ+fB9al6yAzs91w==} peerDependencies: @@ -8236,7 +9518,7 @@ packages: '@emotion/is-prop-valid': 0.8.8 '@emotion/styled': 10.0.27_@emotion+core@10.1.1 '@storybook/client-logger': 6.3.12 - core-js: 3.16.2 + core-js: 3.19.1 deep-object-diff: 1.1.0 emotion-theming: 10.0.27_@emotion+core@10.1.1 global: 4.4.0 @@ -8246,6 +9528,28 @@ packages: ts-dedent: 2.2.0 dev: true + /@storybook/theming/6.3.12_react-dom@16.14.0+react@16.14.0: + resolution: {integrity: sha512-wOJdTEa/VFyFB2UyoqyYGaZdym6EN7RALuQOAMT6zHA282FBmKw8nL5DETHEbctpnHdcrMC/391teK4nNSrdOA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + dependencies: + '@emotion/core': 10.1.1_react@16.14.0 + '@emotion/is-prop-valid': 0.8.8 + '@emotion/styled': 10.0.27_5f216699bc8c1f24088b3bf77b7cbbdf + '@storybook/client-logger': 6.3.12 + core-js: 3.19.1 + deep-object-diff: 1.1.0 + emotion-theming: 10.0.27_5f216699bc8c1f24088b3bf77b7cbbdf + global: 4.4.0 + memoizerific: 1.11.3 + polished: 4.1.3 + react: 16.14.0 + react-dom: 16.14.0_react@16.14.0 + resolve-from: 5.0.0 + ts-dedent: 2.2.0 + dev: true + /@storybook/theming/6.3.7: resolution: {integrity: sha512-GXBdw18JJd5jLLcRonAZWvGGdwEXByxF1IFNDSOYCcpHWsMgTk4XoLjceu9MpXET04pVX51LbVPLCvMdggoohg==} peerDependencies: @@ -8288,6 +9592,86 @@ packages: ts-dedent: 2.2.0 dev: true + /@storybook/ui/6.3.12: + resolution: {integrity: sha512-PC2yEz4JMfarq7rUFbeA3hCA+31p5es7YPEtxLRvRwIZhtL0P4zQUfHpotb3KgWdoAIfZesAuoIQwMPQmEFYrw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + dependencies: + '@emotion/core': 10.1.1 + '@storybook/addons': 6.3.12 + '@storybook/api': 6.3.12 + '@storybook/channels': 6.3.12 + '@storybook/client-logger': 6.3.12 + '@storybook/components': 6.3.12 + '@storybook/core-events': 6.3.12 + '@storybook/router': 6.3.12 + '@storybook/semver': 7.3.2 + '@storybook/theming': 6.3.12 + '@types/markdown-to-jsx': 6.11.3 + copy-to-clipboard: 3.3.1 + core-js: 3.19.1 + core-js-pure: 3.19.1 + downshift: 6.1.7 + emotion-theming: 10.0.27_@emotion+core@10.1.1 + fuse.js: 3.6.1 + global: 4.4.0 + lodash: 4.17.21 + markdown-to-jsx: 6.11.4 + memoizerific: 1.11.3 + polished: 4.1.3 + qs: 6.10.1 + react-draggable: 4.4.4 + react-helmet-async: 1.1.2 + react-sizeme: 3.0.2 + regenerator-runtime: 0.13.9 + resolve-from: 5.0.0 + store2: 2.12.0 + transitivePeerDependencies: + - '@types/react' + dev: true + + /@storybook/ui/6.3.12_react-dom@16.14.0+react@16.14.0: + resolution: {integrity: sha512-PC2yEz4JMfarq7rUFbeA3hCA+31p5es7YPEtxLRvRwIZhtL0P4zQUfHpotb3KgWdoAIfZesAuoIQwMPQmEFYrw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + dependencies: + '@emotion/core': 10.1.1_react@16.14.0 + '@storybook/addons': 6.3.12_react-dom@16.14.0+react@16.14.0 + '@storybook/api': 6.3.12_react-dom@16.14.0+react@16.14.0 + '@storybook/channels': 6.3.12 + '@storybook/client-logger': 6.3.12 + '@storybook/components': 6.3.12_react-dom@16.14.0+react@16.14.0 + '@storybook/core-events': 6.3.12 + '@storybook/router': 6.3.12_react-dom@16.14.0+react@16.14.0 + '@storybook/semver': 7.3.2 + '@storybook/theming': 6.3.12_react-dom@16.14.0+react@16.14.0 + '@types/markdown-to-jsx': 6.11.3 + copy-to-clipboard: 3.3.1 + core-js: 3.19.1 + core-js-pure: 3.19.1 + downshift: 6.1.7_react@16.14.0 + emotion-theming: 10.0.27_5f216699bc8c1f24088b3bf77b7cbbdf + fuse.js: 3.6.1 + global: 4.4.0 + lodash: 4.17.21 + markdown-to-jsx: 6.11.4_react@16.14.0 + memoizerific: 1.11.3 + polished: 4.1.3 + qs: 6.10.1 + react: 16.14.0 + react-dom: 16.14.0_react@16.14.0 + react-draggable: 4.4.4_react-dom@16.14.0+react@16.14.0 + react-helmet-async: 1.1.2_react-dom@16.14.0+react@16.14.0 + react-sizeme: 3.0.2 + regenerator-runtime: 0.13.9 + resolve-from: 5.0.0 + store2: 2.12.0 + transitivePeerDependencies: + - '@types/react' + dev: true + /@storybook/ui/6.3.7: resolution: {integrity: sha512-PBeRO8qtwAbtHvxUgNtz/ChUR6qnN+R37dMaIs3Y96jbks1fS2K9Mt7W5s1HnUbWbg2KsZMv9D4VYPBasY+Isw==} peerDependencies: @@ -8411,8 +9795,8 @@ packages: engines: {node: '>= 6'} dev: true - /@trysound/sax/0.1.1: - resolution: {integrity: sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==} + /@trysound/sax/0.2.0: + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} dev: true @@ -8434,23 +9818,33 @@ packages: '@types/babel__traverse': 7.14.2 dev: true + /@types/babel__core/7.1.16: + resolution: {integrity: sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==} + dependencies: + '@babel/parser': 7.16.2 + '@babel/types': 7.16.0 + '@types/babel__generator': 7.6.3 + '@types/babel__template': 7.4.1 + '@types/babel__traverse': 7.14.2 + dev: true + /@types/babel__generator/7.6.3: resolution: {integrity: sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==} dependencies: - '@babel/types': 7.15.0 + '@babel/types': 7.16.0 dev: true /@types/babel__template/7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.15.3 - '@babel/types': 7.15.0 + '@babel/parser': 7.16.2 + '@babel/types': 7.16.0 dev: true /@types/babel__traverse/7.14.2: resolution: {integrity: sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==} dependencies: - '@babel/types': 7.15.0 + '@babel/types': 7.16.0 dev: true /@types/braces/3.0.1: @@ -8460,7 +9854,7 @@ packages: /@types/cheerio/0.22.30: resolution: {integrity: sha512-t7ZVArWZlq3dFa9Yt33qFBQIK4CQd1Q3UJp0V+UhP6vgLWLM6Qug7vZuRSGXg45zXeB1Fm5X2vmBkEX58LV2Tw==} dependencies: - '@types/node': 14.17.10 + '@types/node': 16.11.6 dev: true /@types/chrome/0.0.128: @@ -8480,6 +9874,13 @@ packages: resolution: {integrity: sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==} dev: true + /@types/enzyme/3.10.10: + resolution: {integrity: sha512-/D4wFhiEjUDfPu+j5FVK0g/jf7rqeEIpNfAI+kyxzLpw5CKO0drnW3W5NC38alIjsWgnyQ8pbuPF5+UD+vhVyg==} + dependencies: + '@types/cheerio': 0.22.30 + '@types/react': 17.0.34 + dev: true + /@types/enzyme/3.10.9: resolution: {integrity: sha512-dx5UvcWe2Vtye6S9Hw2rFB7Ul9uMXOAje2FAbXvVYieQDNle9qPAo7DfvFMSztZ9NFiD3dVZ4JsRYGTrSLynJg==} dependencies: @@ -8487,10 +9888,6 @@ packages: '@types/react': 17.0.19 dev: true - /@types/eslint-visitor-keys/1.0.0: - resolution: {integrity: sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==} - dev: true - /@types/estree/0.0.39: resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} dev: true @@ -8513,25 +9910,25 @@ packages: resolution: {integrity: sha1-pYHWiDR+EOUN18F9byiAoQNUMZ0=} dev: true - /@types/glob/7.1.4: - resolution: {integrity: sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==} + /@types/glob/7.2.0: + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 3.0.5 - '@types/node': 14.17.10 + '@types/node': 16.11.6 dev: true /@types/graceful-fs/4.1.5: resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} dependencies: - '@types/node': 14.17.10 + '@types/node': 16.11.6 dev: true /@types/har-format/1.2.7: resolution: {integrity: sha512-/TPzUG0tJn5x1TUcVLlDx2LqbE58hyOzDVAc9kf8SpOEmguHjU6bKUyfqb211AdqLOmU/SNyXvLKPNP5qTlfRw==} dev: true - /@types/hast/2.3.2: - resolution: {integrity: sha512-Op5W7jYgZI7AWKY5wQ0/QNMzQM7dGQPyW1rXKNiymVCy5iTfdPuGu4HhYNOM2sIv8gUfIuIdcYlXmAepwaowow==} + /@types/hast/2.3.4: + resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==} dependencies: '@types/unist': 2.0.6 dev: true @@ -8544,8 +9941,8 @@ packages: resolution: {integrity: sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==} dev: true - /@types/is-function/1.0.0: - resolution: {integrity: sha512-iTs9HReBu7evG77Q4EC8hZnqRt57irBDkK9nvmHroiOIVwYMQc4IvYvdRgwKfYepunIY7Oh/dBuuld+Gj9uo6w==} + /@types/is-function/1.0.1: + resolution: {integrity: sha512-A79HEEiwXTFtfY+Bcbo58M2GRYzCr9itHWzbzHVFNEYCcoU/MMGwYYf721gBrnhpj1s6RGVVha/IgNFnR0Iw/Q==} dev: true /@types/istanbul-lib-coverage/2.0.3: @@ -8571,6 +9968,13 @@ packages: pretty-format: 26.6.2 dev: true + /@types/jest/27.0.2: + resolution: {integrity: sha512-4dRxkS/AFX0c5XW6IPMNOydLn2tEhNhJV7DnYK+0bjoJZ+QTmfucBlihX7aoEsh/ocYtkLC73UbnBXBXIxsULA==} + dependencies: + jest-diff: 27.3.1 + pretty-format: 27.3.1 + dev: true + /@types/json-schema/7.0.7: resolution: {integrity: sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==} dev: true @@ -8586,11 +9990,11 @@ packages: /@types/markdown-to-jsx/6.11.3: resolution: {integrity: sha512-30nFYpceM/ZEvhGiqWjm5quLUxNeld0HCzJEXMZZDpq53FPkS85mTwkWtCXzCqq8s5JYLgM5W392a02xn8Bdaw==} dependencies: - '@types/react': 17.0.19 + '@types/react': 17.0.34 dev: true - /@types/mdast/3.0.8: - resolution: {integrity: sha512-HdUXWDNtDenuVJFrV2xBCLEMiw1Vn7FMuJxqJC5oBvC2adA3pgtp6CPCIMQdz3pmWxGuJjT+hOp6FnOXy6dXoQ==} + /@types/mdast/3.0.10: + resolution: {integrity: sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==} dependencies: '@types/unist': 2.0.6 dev: true @@ -8608,7 +10012,7 @@ packages: /@types/node-fetch/2.5.12: resolution: {integrity: sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==} dependencies: - '@types/node': 14.17.10 + '@types/node': 14.17.32 form-data: 3.0.1 dev: true @@ -8631,6 +10035,14 @@ packages: resolution: {integrity: sha512-09x2d6kNBwjHgyh3jOUE2GE4DFoxDriDvWdu6mFhMP1ysynGYazt4ecZmJlL6/fe4Zi2vtYvTvtL7epjQQrBhA==} dev: true + /@types/node/14.17.32: + resolution: {integrity: sha512-JcII3D5/OapPGx+eJ+Ik1SQGyt6WvuqdRfh9jUwL6/iHGjmyOriBDciBUu7lEIBTL2ijxwrR70WUnw5AEDmFvQ==} + dev: true + + /@types/node/16.11.6: + resolution: {integrity: sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==} + dev: true + /@types/normalize-package-data/2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true @@ -8655,6 +10067,10 @@ packages: resolution: {integrity: sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==} dev: true + /@types/prettier/2.4.1: + resolution: {integrity: sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==} + dev: true + /@types/pretty-hrtime/1.0.1: resolution: {integrity: sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==} dev: true @@ -8674,13 +10090,13 @@ packages: /@types/reach__router/1.3.9: resolution: {integrity: sha512-N6rqQqTTAV/zKLfK3iq9Ww3wqCEhTZvsilhl0zI09zETdVq1QGmJH6+/xnj8AFUWIrle2Cqo+PGM/Ltr1vBb9w==} dependencies: - '@types/react': 17.0.19 + '@types/react': 17.0.34 dev: true /@types/react-syntax-highlighter/11.0.5: resolution: {integrity: sha512-VIOi9i2Oj5XsmWWoB72p3KlZoEbdRAcechJa8Ztebw7bDl2YmR+odxIqhtJGp1q2EozHs02US+gzxJ9nuf56qg==} dependencies: - '@types/react': 17.0.19 + '@types/react': 17.0.34 dev: true /@types/react/17.0.19: @@ -8691,10 +10107,18 @@ packages: csstype: 3.0.8 dev: true + /@types/react/17.0.34: + resolution: {integrity: sha512-46FEGrMjc2+8XhHXILr+3+/sTe3OfzSPU9YGKILLrUYbQ1CLQC9Daqo1KzENGXAWwrFwiY0l4ZbF20gRvgpWTg==} + dependencies: + '@types/prop-types': 15.7.4 + '@types/scheduler': 0.16.2 + csstype: 3.0.9 + dev: true + /@types/resolve/1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 14.17.10 + '@types/node': 16.11.6 dev: true /@types/scheduler/0.16.2: @@ -8731,10 +10155,14 @@ packages: resolution: {integrity: sha512-vKx7WNQNZDyJveYcHAm9ZxhqSGLYwoyLhrHjLBOkw3a7cT76sTdjgtwyijhk1MaHyRIuSztcVwrUOO/NEu68Dw==} dev: true + /@types/webpack-env/1.16.3: + resolution: {integrity: sha512-9gtOPPkfyNoEqCQgx4qJKkuNm/x0R2hKR7fdl7zvTJyHnIisuE/LfvXOsYWL0o3qq6uiBnKZNNNzi3l0y/X+xw==} + dev: true + /@types/webpack-sources/3.2.0: resolution: {integrity: sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==} dependencies: - '@types/node': 14.17.10 + '@types/node': 14.17.32 '@types/source-list-map': 0.1.2 source-map: 0.7.3 dev: true @@ -8750,6 +10178,17 @@ packages: source-map: 0.6.1 dev: true + /@types/webpack/4.41.31: + resolution: {integrity: sha512-/i0J7sepXFIp1ZT7FjUGi1eXMCg8HCCzLJEQkKsOtbJFontsJLolBcDC+3qxn5pPwiCt1G0ZdRmYRzNBtvpuGQ==} + dependencies: + '@types/node': 14.17.32 + '@types/tapable': 1.0.8 + '@types/uglify-js': 3.13.1 + '@types/webpack-sources': 3.2.0 + anymatch: 3.1.2 + source-map: 0.6.1 + dev: true + /@types/yargs-parser/20.2.1: resolution: {integrity: sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==} dev: true @@ -8766,28 +10205,6 @@ packages: '@types/yargs-parser': 20.2.1 dev: true - /@typescript-eslint/eslint-plugin/2.34.0_2b015b1c4b7c4a3ed9a197dc233b1a35: - resolution: {integrity: sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==} - engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} - peerDependencies: - '@typescript-eslint/parser': ^2.0.0 - eslint: ^5.0.0 || ^6.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/experimental-utils': 2.34.0_eslint@6.8.0+typescript@3.9.10 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.10 - eslint: 6.8.0 - functional-red-black-tree: 1.0.1 - regexpp: 3.1.0 - tsutils: 3.19.1_typescript@3.9.10 - typescript: 3.9.10 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/eslint-plugin/4.14.0_980e7d90d2d08155204a38366bd3b934: resolution: {integrity: sha512-IJ5e2W7uFNfg4qh9eHkHRUCbgZ8VKtGwD07kannJvM5t/GU8P8+24NX8gi3Hf5jST5oWPY8kyV1s/WtfiZ4+Ww==} engines: {node: ^10.12.0 || >=12.0.0} @@ -8814,15 +10231,41 @@ packages: - supports-color dev: true - /@typescript-eslint/experimental-utils/2.34.0_eslint@6.8.0+typescript@3.9.10: + /@typescript-eslint/eslint-plugin/5.3.0_f8873316f48f7781ccc3e081fc76e214: + resolution: {integrity: sha512-ARUEJHJrq85aaiCqez7SANeahDsJTD3AEua34EoQN9pHS6S5Bq9emcIaGGySt/4X2zSi+vF5hAH52sEen7IO7g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/experimental-utils': 5.3.0_eslint@8.1.0+typescript@4.4.4 + '@typescript-eslint/parser': 5.3.0_eslint@8.1.0+typescript@4.4.4 + '@typescript-eslint/scope-manager': 5.3.0 + debug: 4.3.2 + eslint: 8.1.0 + functional-red-black-tree: 1.0.1 + ignore: 5.1.9 + regexpp: 3.2.0 + semver: 7.3.5 + tsutils: 3.21.0_typescript@4.4.4 + typescript: 4.4.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/experimental-utils/2.34.0_eslint@8.1.0+typescript@4.4.4: resolution: {integrity: sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} peerDependencies: eslint: '*' dependencies: '@types/json-schema': 7.0.9 - '@typescript-eslint/typescript-estree': 2.34.0_typescript@3.9.10 - eslint: 6.8.0 + '@typescript-eslint/typescript-estree': 2.34.0_typescript@4.4.4 + eslint: 8.1.0 eslint-scope: 5.1.1 eslint-utils: 2.1.0 transitivePeerDependencies: @@ -8848,24 +10291,22 @@ packages: - typescript dev: true - /@typescript-eslint/parser/2.34.0_eslint@6.8.0+typescript@3.9.10: - resolution: {integrity: sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==} - engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + /@typescript-eslint/experimental-utils/5.3.0_eslint@8.1.0+typescript@4.4.4: + resolution: {integrity: sha512-NFVxYTjKj69qB0FM+piah1x3G/63WB8vCBMnlnEHUsiLzXSTWb9FmFn36FD9Zb4APKBLY3xRArOGSMQkuzTF1w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - eslint: ^5.0.0 || ^6.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + eslint: '*' dependencies: - '@types/eslint-visitor-keys': 1.0.0 - '@typescript-eslint/experimental-utils': 2.34.0_eslint@6.8.0+typescript@3.9.10 - '@typescript-eslint/typescript-estree': 2.34.0_typescript@3.9.10 - eslint: 6.8.0 - eslint-visitor-keys: 1.3.0 - typescript: 3.9.10 + '@types/json-schema': 7.0.9 + '@typescript-eslint/scope-manager': 5.3.0 + '@typescript-eslint/types': 5.3.0 + '@typescript-eslint/typescript-estree': 5.3.0_typescript@4.4.4 + eslint: 8.1.0 + eslint-scope: 5.1.1 + eslint-utils: 3.0.0_eslint@8.1.0 transitivePeerDependencies: - supports-color + - typescript dev: true /@typescript-eslint/parser/4.14.0_eslint@7.18.0+typescript@4.1.3: @@ -8892,18 +10333,38 @@ packages: resolution: {integrity: sha512-S0fuX5lDku28Au9REYUsV+hdJpW/rNW0gWlc4SXzF/kdrRaAVX9YCxKpziH7djeWT/HFAjLZcnY7NJD8xTeUEg==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: - eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 4.4.1 + '@typescript-eslint/types': 4.4.1 + '@typescript-eslint/typescript-estree': 4.4.1_typescript@4.1.3 + debug: 4.3.1 + eslint: 7.18.0 + typescript: 4.1.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser/5.3.0_eslint@8.1.0+typescript@4.4.4: + resolution: {integrity: sha512-rKu/yAReip7ovx8UwOAszJVO5MgBquo8WjIQcp1gx4pYQCwYzag+I5nVNHO4MqyMkAo0gWt2gWUi+36gWAVKcw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 4.4.1 - '@typescript-eslint/types': 4.4.1 - '@typescript-eslint/typescript-estree': 4.4.1_typescript@4.1.3 - debug: 4.3.1 - eslint: 7.18.0 - typescript: 4.1.3 + '@typescript-eslint/scope-manager': 5.3.0 + '@typescript-eslint/types': 5.3.0 + '@typescript-eslint/typescript-estree': 5.3.0_typescript@4.4.4 + debug: 4.3.2 + eslint: 8.1.0 + typescript: 4.4.4 transitivePeerDependencies: - supports-color dev: true @@ -8924,6 +10385,14 @@ packages: '@typescript-eslint/visitor-keys': 4.4.1 dev: true + /@typescript-eslint/scope-manager/5.3.0: + resolution: {integrity: sha512-22Uic9oRlTsPppy5Tcwfj+QET5RWEnZ5414Prby465XxQrQFZ6nnm5KnXgnsAJefG4hEgMnaxTB3kNEyjdjj6A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.3.0 + '@typescript-eslint/visitor-keys': 5.3.0 + dev: true + /@typescript-eslint/types/4.14.0: resolution: {integrity: sha512-VsQE4VvpldHrTFuVPY1ZnHn/Txw6cZGjL48e+iBxTi2ksa9DmebKjAeFmTVAYoSkTk7gjA7UqJ7pIsyifTsI4A==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} @@ -8934,7 +10403,12 @@ packages: engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dev: true - /@typescript-eslint/typescript-estree/2.34.0_typescript@3.9.10: + /@typescript-eslint/types/5.3.0: + resolution: {integrity: sha512-fce5pG41/w8O6ahQEhXmMV+xuh4+GayzqEogN24EK+vECA3I6pUwKuLi5QbXO721EMitpQne5VKXofPonYlAQg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/typescript-estree/2.34.0_typescript@4.4.4: resolution: {integrity: sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} peerDependencies: @@ -8945,12 +10419,12 @@ packages: dependencies: debug: 4.3.2 eslint-visitor-keys: 1.3.0 - glob: 7.1.7 - is-glob: 4.0.1 + glob: 7.2.0 + is-glob: 4.0.3 lodash: 4.17.21 semver: 7.3.5 - tsutils: 3.19.1_typescript@3.9.10 - typescript: 3.9.10 + tsutils: 3.21.0_typescript@4.4.4 + typescript: 4.4.4 transitivePeerDependencies: - supports-color dev: true @@ -8999,6 +10473,27 @@ packages: - supports-color dev: true + /@typescript-eslint/typescript-estree/5.3.0_typescript@4.4.4: + resolution: {integrity: sha512-FJ0nqcaUOpn/6Z4Jwbtf+o0valjBLkqc3MWkMvrhA2TvzFXtcclIM8F4MBEmYa2kgcI8EZeSAzwoSrIC8JYkug==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.3.0 + '@typescript-eslint/visitor-keys': 5.3.0 + debug: 4.3.2 + globby: 11.0.4 + is-glob: 4.0.3 + semver: 7.3.5 + tsutils: 3.21.0_typescript@4.4.4 + typescript: 4.4.4 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/visitor-keys/4.14.0: resolution: {integrity: sha512-MeHHzUyRI50DuiPgV9+LxcM52FCJFYjJiWHtXlbyC27b80mfOwKeiKI+MHOTEpcpfmoPFm/vvQS88bYIx6PZTA==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} @@ -9015,6 +10510,14 @@ packages: eslint-visitor-keys: 2.0.0 dev: true + /@typescript-eslint/visitor-keys/5.3.0: + resolution: {integrity: sha512-oVIAfIQuq0x2TFDNLVavUn548WL+7hdhxYn+9j3YdJJXB7mH9dAmZNJsPDa7Jc+B9WGqoiex7GUDbyMxV0a/aw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.3.0 + eslint-visitor-keys: 3.0.0 + dev: true + /@webassemblyjs/ast/1.9.0: resolution: {integrity: sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==} dependencies: @@ -9158,7 +10661,7 @@ packages: resolution: {integrity: sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==} engines: {node: '>= 0.6'} dependencies: - mime-types: 2.1.32 + mime-types: 2.1.33 negotiator: 0.6.2 dev: true @@ -9196,6 +10699,14 @@ packages: acorn: 7.4.1 dev: true + /acorn-jsx/5.3.2_acorn@8.5.0: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.5.0 + dev: true + /acorn-walk/6.2.0: resolution: {integrity: sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==} engines: {node: '>=0.4.0'} @@ -9211,6 +10722,11 @@ packages: engines: {node: '>=0.4.0'} dev: true + /acorn-walk/8.2.0: + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} + dev: true + /acorn/5.7.4: resolution: {integrity: sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==} engines: {node: '>=0.4.0'} @@ -9235,6 +10751,12 @@ packages: hasBin: true dev: true + /acorn/8.5.0: + resolution: {integrity: sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + /address/1.1.2: resolution: {integrity: sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==} engines: {node: '>= 0.12.0'} @@ -9260,22 +10782,22 @@ packages: /airbnb-js-shims/2.2.1: resolution: {integrity: sha512-wJNXPH66U2xjgo1Zwyjf9EydvJ2Si94+vSdk6EERcBfB2VZkeltpqIats0cqIZMLCXP3zcyaUKGYQeIBT6XjsQ==} dependencies: - array-includes: 3.1.3 - array.prototype.flat: 1.2.4 - array.prototype.flatmap: 1.2.4 - es5-shim: 4.5.15 + array-includes: 3.1.4 + array.prototype.flat: 1.2.5 + array.prototype.flatmap: 1.2.5 + es5-shim: 4.6.2 es6-shim: 0.35.6 - function.prototype.name: 1.1.4 + function.prototype.name: 1.1.5 globalthis: 1.0.2 - object.entries: 1.1.4 - object.fromentries: 2.0.4 - object.getownpropertydescriptors: 2.1.2 - object.values: 1.1.4 - promise.allsettled: 1.0.4 - promise.prototype.finally: 3.1.2 - string.prototype.matchall: 4.0.5 - string.prototype.padend: 3.1.2 - string.prototype.padstart: 3.1.2 + object.entries: 1.1.5 + object.fromentries: 2.0.5 + object.getownpropertydescriptors: 2.1.3 + object.values: 1.1.5 + promise.allsettled: 1.0.5 + promise.prototype.finally: 3.1.3 + string.prototype.matchall: 4.0.6 + string.prototype.padend: 3.1.3 + string.prototype.padstart: 3.1.3 symbol.prototype.description: 1.0.5 dev: true @@ -9322,14 +10844,23 @@ packages: uri-js: 4.4.1 dev: true + /ajv/8.6.3: + resolution: {integrity: sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: true + /alphanum-sort/1.0.2: resolution: {integrity: sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=} dev: true - /ansi-align/3.0.0: - resolution: {integrity: sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==} + /ansi-align/3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} dependencies: - string-width: 3.1.0 + string-width: 4.2.3 dev: true /ansi-colors/3.2.4: @@ -9349,6 +10880,12 @@ packages: type-fest: 0.21.3 dev: true + /ansi-html-community/0.0.8: + resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} + engines: {'0': node >= 0.8.0} + hasBin: true + dev: true + /ansi-html/0.0.7: resolution: {integrity: sha1-gTWEAhliqenm/QOflA0S9WynhZ4=} engines: {'0': node >= 0.8.0} @@ -9370,6 +10907,11 @@ packages: engines: {node: '>=8'} dev: true + /ansi-regex/5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + /ansi-styles/1.0.0: resolution: {integrity: sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=} engines: {node: '>=0.8.0'} @@ -9436,8 +10978,8 @@ packages: resolution: {integrity: sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=} dev: true - /are-we-there-yet/1.1.5: - resolution: {integrity: sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==} + /are-we-there-yet/1.1.7: + resolution: {integrity: sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==} dependencies: delegates: 1.0.0 readable-stream: 2.3.7 @@ -9449,6 +10991,10 @@ packages: sprintf-js: 1.0.3 dev: true + /argparse/2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + /aria-query/4.2.2: resolution: {integrity: sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==} engines: {node: '>=6.0'} @@ -9511,6 +11057,17 @@ packages: is-string: 1.0.7 dev: true + /array-includes/3.1.4: + resolution: {integrity: sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.19.1 + get-intrinsic: 1.1.1 + is-string: 1.0.7 + dev: true + /array-union/1.0.2: resolution: {integrity: sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=} engines: {node: '>=0.10.0'} @@ -9533,13 +11090,13 @@ packages: engines: {node: '>=0.10.0'} dev: true - /array.prototype.filter/1.0.0: - resolution: {integrity: sha512-TfO1gz+tLm+Bswq0FBOXPqAchtCr2Rn48T8dLJoRFl8NoEosjZmzptmuo1X8aZBzZcqsR1W8U761tjACJtngTQ==} + /array.prototype.filter/1.0.1: + resolution: {integrity: sha512-Dk3Ty7N42Odk7PjU/Ci3zT4pLj20YvuVnneG/58ICM6bt4Ij5kZaJTVQ9TSaWaIECX2sFyz4KItkVZqHNnciqw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.1.3 - es-abstract: 1.18.5 + es-abstract: 1.19.1 es-array-method-boxes-properly: 1.0.0 is-string: 1.0.7 dev: true @@ -9553,6 +11110,15 @@ packages: es-abstract: 1.18.5 dev: true + /array.prototype.flat/1.2.5: + resolution: {integrity: sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.19.1 + dev: true + /array.prototype.flatmap/1.2.4: resolution: {integrity: sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==} engines: {node: '>= 0.4'} @@ -9563,13 +11129,22 @@ packages: function-bind: 1.1.1 dev: true - /array.prototype.map/1.0.3: - resolution: {integrity: sha512-nNcb30v0wfDyIe26Yif3PcV1JXQp4zEeEfupG7L4SRjnD6HLbO5b2a7eVSba53bOx4YCHYMBHt+Fp4vYstneRA==} + /array.prototype.flatmap/1.2.5: + resolution: {integrity: sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.1.3 - es-abstract: 1.18.5 + es-abstract: 1.19.1 + dev: true + + /array.prototype.map/1.0.4: + resolution: {integrity: sha512-Qds9QnX7A0qISY7JT5WuJO0NJPE9CMlC6JzHQfhpqAAQQzufVRoeH7EzUY5GcPTx72voG8LV/5eo+b8Qi8hmhA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.19.1 es-array-method-boxes-properly: 1.0.0 is-string: 1.0.7 dev: true @@ -9598,8 +11173,8 @@ packages: safer-buffer: 2.1.2 dev: true - /asn1/0.2.4: - resolution: {integrity: sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==} + /asn1/0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} dependencies: safer-buffer: 2.1.2 dev: true @@ -9631,11 +11206,6 @@ packages: resolution: {integrity: sha1-9wtzXGvKGlycItmCw+Oef+ujva0=} dev: true - /astral-regex/1.0.0: - resolution: {integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==} - engines: {node: '>=4'} - dev: true - /astral-regex/2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} @@ -9686,6 +11256,22 @@ packages: postcss-value-parser: 4.1.0 dev: true + /autoprefixer/10.4.0_postcss@8.3.11: + resolution: {integrity: sha512-7FdJ1ONtwzV1G43GDD0kpVMn/qbiNqyOPMFTX5nRffI+7vgWoFEc6DcXOxHJxrWNDXrZh18eDsZjvZGUljSRGA==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.17.6 + caniuse-lite: 1.0.30001276 + fraction.js: 4.1.1 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.3.11 + postcss-value-parser: 4.1.0 + dev: true + /autoprefixer/9.8.6: resolution: {integrity: sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==} hasBin: true @@ -9699,6 +11285,19 @@ packages: postcss-value-parser: 4.1.0 dev: true + /autoprefixer/9.8.8: + resolution: {integrity: sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==} + hasBin: true + dependencies: + browserslist: 4.17.6 + caniuse-lite: 1.0.30001276 + normalize-range: 0.1.2 + num2fraction: 1.2.2 + picocolors: 0.2.1 + postcss: 7.0.39 + postcss-value-parser: 4.1.0 + dev: true + /ava/3.15.0: resolution: {integrity: sha512-HGAnk1SHPk4Sx6plFAUkzV/XC1j9+iQhOzt4vBly18/yo0AV8Oytx7mtJd/CR8igCJ5p160N/Oo/cNJi2uSeWA==} engines: {node: '>=10.18.0 <11 || >=12.14.0 <12.17.0 || >=12.17.0 <13 || >=14.0.0 <15 || >=15'} @@ -9782,33 +11381,29 @@ packages: engines: {node: '>=4'} dev: true + /axe-core/4.3.5: + resolution: {integrity: sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==} + engines: {node: '>=4'} + dev: true + /axios/0.21.1: resolution: {integrity: sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==} dependencies: - follow-redirects: 1.14.2_debug@4.3.2 + follow-redirects: 1.14.2 transitivePeerDependencies: - debug + dev: false - /axobject-query/2.2.0: - resolution: {integrity: sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==} - dev: true - - /babel-eslint/10.1.0_eslint@6.8.0: - resolution: {integrity: sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==} - engines: {node: '>=6'} - deprecated: babel-eslint is now @babel/eslint-parser. This package will no longer receive updates. - peerDependencies: - eslint: '>= 4.12.1' + /axios/0.21.4: + resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} dependencies: - '@babel/code-frame': 7.14.5 - '@babel/parser': 7.15.3 - '@babel/traverse': 7.15.0 - '@babel/types': 7.15.0 - eslint: 6.8.0 - eslint-visitor-keys: 1.3.0 - resolve: 1.20.0 + follow-redirects: 1.14.5_debug@4.3.2 transitivePeerDependencies: - - supports-color + - debug + dev: true + + /axobject-query/2.2.0: + resolution: {integrity: sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==} dev: true /babel-esm-plugin/0.9.0_webpack@4.46.0: @@ -9848,6 +11443,25 @@ packages: - supports-color dev: true + /babel-jest/27.3.1_@babel+core@7.16.0: + resolution: {integrity: sha512-SjIF8hh/ir0peae2D6S6ZKRhUy7q/DnpH7k/V6fT4Bgs/LXXUztOpX4G2tCgq8mLo5HA9mN6NmlFMeYtKmIsTQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + dependencies: + '@babel/core': 7.16.0 + '@jest/transform': 27.3.1 + '@jest/types': 27.2.5 + '@types/babel__core': 7.1.16 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 27.2.0_@babel+core@7.16.0 + chalk: 4.1.2 + graceful-fs: 4.2.8 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + /babel-loader/8.2.2_@babel+core@7.13.16: resolution: {integrity: sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==} engines: {node: '>= 8.9'} @@ -9877,6 +11491,21 @@ packages: webpack: 4.46.0 dev: true + /babel-loader/8.2.3_1bd60a6cd0f7024f034efd75ae733a3f: + resolution: {integrity: sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==} + engines: {node: '>= 8.9'} + peerDependencies: + '@babel/core': ^7.0.0 + webpack: '>=2' + dependencies: + '@babel/core': 7.16.0 + find-cache-dir: 3.3.2 + loader-utils: 1.4.0 + make-dir: 3.1.0 + schema-utils: 2.7.1 + webpack: 4.46.0 + dev: true + /babel-plugin-apply-mdx-type-prop/1.6.22_@babel+core@7.12.9: resolution: {integrity: sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==} peerDependencies: @@ -9896,7 +11525,7 @@ packages: /babel-plugin-emotion/10.2.2: resolution: {integrity: sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA==} dependencies: - '@babel/helper-module-imports': 7.14.5 + '@babel/helper-module-imports': 7.16.0 '@emotion/hash': 0.8.0 '@emotion/memoize': 0.7.4 '@emotion/serialize': 0.11.16 @@ -9927,6 +11556,19 @@ packages: - supports-color dev: true + /babel-plugin-istanbul/6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + dependencies: + '@babel/helper-plugin-utils': 7.14.5 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.1.0 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + dev: true + /babel-plugin-jest-hoist/26.6.2: resolution: {integrity: sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==} engines: {node: '>= 10.14.2'} @@ -9937,10 +11579,20 @@ packages: '@types/babel__traverse': 7.14.2 dev: true + /babel-plugin-jest-hoist/27.2.0: + resolution: {integrity: sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/template': 7.16.0 + '@babel/types': 7.16.0 + '@types/babel__core': 7.1.16 + '@types/babel__traverse': 7.14.2 + dev: true + /babel-plugin-macros/2.8.0: resolution: {integrity: sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==} dependencies: - '@babel/runtime': 7.15.3 + '@babel/runtime': 7.16.0 cosmiconfig: 6.0.0 resolve: 1.20.0 dev: true @@ -9949,23 +11601,11 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.15.3 - cosmiconfig: 7.0.0 + '@babel/runtime': 7.16.0 + cosmiconfig: 7.0.1 resolve: 1.20.0 dev: true - /babel-plugin-polyfill-corejs2/0.2.2: - resolution: {integrity: sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.15.0 - '@babel/helper-define-polyfill-provider': 0.2.3 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - /babel-plugin-polyfill-corejs2/0.2.2_@babel+core@7.13.16: resolution: {integrity: sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==} peerDependencies: @@ -10004,6 +11644,19 @@ packages: - supports-color dev: true + /babel-plugin-polyfill-corejs2/0.2.3_@babel+core@7.16.0: + resolution: {integrity: sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.16.0 + '@babel/core': 7.16.0 + '@babel/helper-define-polyfill-provider': 0.2.4_@babel+core@7.16.0 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + /babel-plugin-polyfill-corejs3/0.1.7_@babel+core@7.15.0: resolution: {integrity: sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==} peerDependencies: @@ -10011,18 +11664,19 @@ packages: dependencies: '@babel/core': 7.15.0 '@babel/helper-define-polyfill-provider': 0.1.5_@babel+core@7.15.0 - core-js-compat: 3.16.2 + core-js-compat: 3.19.1 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs3/0.2.4: - resolution: {integrity: sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ==} + /babel-plugin-polyfill-corejs3/0.1.7_@babel+core@7.16.0: + resolution: {integrity: sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-define-polyfill-provider': 0.2.3 - core-js-compat: 3.16.2 + '@babel/core': 7.16.0 + '@babel/helper-define-polyfill-provider': 0.1.5_@babel+core@7.16.0 + core-js-compat: 3.19.1 transitivePeerDependencies: - supports-color dev: true @@ -10057,17 +11711,19 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/helper-define-polyfill-provider': 0.2.4 - core-js-compat: 3.19.0 + core-js-compat: 3.19.1 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-regenerator/0.2.2: - resolution: {integrity: sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==} + /babel-plugin-polyfill-corejs3/0.3.0_@babel+core@7.16.0: + resolution: {integrity: sha512-JLwi9vloVdXLjzACL80j24bG6/T1gYxwowG44dg6HN/7aTPdyPbJJidf6ajoA3RPHHtW0j9KMrSOLpIZpAnPpg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-define-polyfill-provider': 0.2.3 + '@babel/core': 7.16.0 + '@babel/helper-define-polyfill-provider': 0.2.4_@babel+core@7.16.0 + core-js-compat: 3.19.1 transitivePeerDependencies: - supports-color dev: true @@ -10104,6 +11760,17 @@ packages: - supports-color dev: true + /babel-plugin-polyfill-regenerator/0.2.3_@babel+core@7.16.0: + resolution: {integrity: sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.0 + '@babel/helper-define-polyfill-provider': 0.2.4_@babel+core@7.16.0 + transitivePeerDependencies: + - supports-color + dev: true + /babel-plugin-syntax-jsx/6.18.0: resolution: {integrity: sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=} dev: true @@ -10140,6 +11807,26 @@ packages: '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.15.0 dev: true + /babel-preset-current-node-syntax/1.0.1_@babel+core@7.16.0: + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.16.0 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.16.0 + '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.16.0 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.16.0 + '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.16.0 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.16.0 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.16.0 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.16.0 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.16.0 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.16.0 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.16.0 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.16.0 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.16.0 + dev: true + /babel-preset-jest/26.6.2_@babel+core@7.15.0: resolution: {integrity: sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==} engines: {node: '>= 10.14.2'} @@ -10151,6 +11838,17 @@ packages: babel-preset-current-node-syntax: 1.0.1_@babel+core@7.15.0 dev: true + /babel-preset-jest/27.2.0_@babel+core@7.16.0: + resolution: {integrity: sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.16.0 + babel-plugin-jest-hoist: 27.2.0 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.16.0 + dev: true + /babel-runtime/6.26.0: resolution: {integrity: sha1-llxwWGaOgrVde/4E/yM3vItWR/4=} dependencies: @@ -10302,25 +12000,25 @@ packages: resolution: {integrity: sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==} engines: {node: '>=8'} dependencies: - ansi-align: 3.0.0 + ansi-align: 3.0.1 camelcase: 5.3.1 chalk: 3.0.0 cli-boxes: 2.2.1 - string-width: 4.2.2 + string-width: 4.2.3 term-size: 2.2.1 type-fest: 0.8.1 widest-line: 3.1.0 dev: true - /boxen/5.0.1: - resolution: {integrity: sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==} + /boxen/5.1.2: + resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} engines: {node: '>=10'} dependencies: - ansi-align: 3.0.0 + ansi-align: 3.0.1 camelcase: 6.2.0 chalk: 4.1.2 cli-boxes: 2.2.1 - string-width: 4.2.2 + string-width: 4.2.3 type-fest: 0.20.2 widest-line: 3.1.0 wrap-ansi: 7.0.0 @@ -10431,10 +12129,10 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001251 - electron-to-chromium: 1.3.813 + caniuse-lite: 1.0.30001276 + electron-to-chromium: 1.3.888 escalade: 3.1.1 - node-releases: 1.1.75 + node-releases: 1.1.77 dev: true /browserslist/4.16.8: @@ -10449,13 +12147,13 @@ packages: node-releases: 1.1.75 dev: true - /browserslist/4.17.5: - resolution: {integrity: sha512-I3ekeB92mmpctWBoLXe0d5wPS2cBuRvvW0JyyJHMrk9/HmP2ZjrTboNAZ8iuGqaEIlKguljbQY32OkOJIRrgoA==} + /browserslist/4.17.6: + resolution: {integrity: sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001274 - electron-to-chromium: 1.3.886 + caniuse-lite: 1.0.30001276 + electron-to-chromium: 1.3.888 escalade: 3.1.1 node-releases: 2.0.1 picocolors: 1.0.0 @@ -10538,7 +12236,7 @@ packages: bluebird: 3.7.2 chownr: 1.1.4 figgy-pudding: 3.5.2 - glob: 7.1.7 + glob: 7.2.0 graceful-fs: 4.2.8 infer-owner: 1.0.4 lru-cache: 5.1.1 @@ -10552,17 +12250,18 @@ packages: y18n: 4.0.3 dev: true - /cacache/15.2.0: - resolution: {integrity: sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw==} + /cacache/15.3.0: + resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==} engines: {node: '>= 10'} dependencies: + '@npmcli/fs': 1.0.0 '@npmcli/move-file': 1.1.2 chownr: 2.0.0 fs-minipass: 2.1.0 - glob: 7.1.7 + glob: 7.2.0 infer-owner: 1.0.4 lru-cache: 6.0.0 - minipass: 3.1.3 + minipass: 3.1.5 minipass-collect: 1.0.2 minipass-flush: 1.0.5 minipass-pipeline: 1.2.4 @@ -10571,7 +12270,7 @@ packages: promise-inflight: 1.0.1 rimraf: 3.0.2 ssri: 8.0.1 - tar: 6.1.10 + tar: 6.1.11 unique-filename: 1.1.1 dev: true @@ -10684,8 +12383,8 @@ packages: /caniuse-api/3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: - browserslist: 4.16.8 - caniuse-lite: 1.0.30001251 + browserslist: 4.17.6 + caniuse-lite: 1.0.30001276 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 dev: true @@ -10694,8 +12393,8 @@ packages: resolution: {integrity: sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A==} dev: true - /caniuse-lite/1.0.30001274: - resolution: {integrity: sha512-+Nkvv0fHyhISkiMIjnyjmf5YJcQ1IQHZN6U9TLUMroWR38FNwpsC51Gb68yueafX1V6ifOisInSgP9WJFS13ew==} + /caniuse-lite/1.0.30001276: + resolution: {integrity: sha512-psUNoaG1ilknZPxi8HuhQWobuhLqtYSRUxplfVkEJdgZNB9TETVYGSBtv4YyfAdGvE6gn2eb0ztiXqHoWJcGnw==} dev: true /capture-exit/2.0.0: @@ -10786,18 +12485,14 @@ packages: resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} dev: true - /chardet/0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: true - /cheerio-select/1.5.0: resolution: {integrity: sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==} dependencies: css-select: 4.1.3 - css-what: 5.0.1 + css-what: 5.1.0 domelementtype: 2.2.0 - domhandler: 4.2.0 - domutils: 2.7.0 + domhandler: 4.2.2 + domutils: 2.8.0 dev: true /cheerio/1.0.0-rc.10: @@ -10806,7 +12501,7 @@ packages: dependencies: cheerio-select: 1.5.0 dom-serializer: 1.3.2 - domhandler: 4.2.0 + domhandler: 4.2.2 htmlparser2: 6.1.0 parse5: 6.0.1 parse5-htmlparser2-tree-adapter: 6.0.1 @@ -10823,7 +12518,7 @@ packages: glob-parent: 3.1.0 inherits: 2.0.4 is-binary-path: 1.0.1 - is-glob: 4.0.1 + is-glob: 4.0.3 normalize-path: 3.0.0 path-is-absolute: 1.0.1 readdirp: 2.2.1 @@ -10840,7 +12535,7 @@ packages: braces: 3.0.2 glob-parent: 5.1.2 is-binary-path: 2.1.0 - is-glob: 4.0.1 + is-glob: 4.0.3 normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: @@ -10865,8 +12560,8 @@ packages: resolution: {integrity: sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==} dev: true - /ci-env/1.16.0: - resolution: {integrity: sha512-ucF9caQEX5wQlY449KZBIJPx91+kRg9tJ3tWSc4+KzrvC5KNiPm/3g1noP8VhdI3046+Vw3jLmKAD0fjCRJTmw==} + /ci-env/1.17.0: + resolution: {integrity: sha512-NtTjhgSEqv4Aj90TUYHQLxHdnCPXnjdtuGG1X8lTfp/JqeXTdw0FTWl/vUAPuvbWZTF8QVpv6ASe/XacE+7R2A==} dev: true /ci-info/2.0.0: @@ -10892,6 +12587,10 @@ packages: resolution: {integrity: sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==} dev: true + /cjs-module-lexer/1.2.2: + resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} + dev: true + /class-utils/0.3.6: resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} engines: {node: '>=0.10.0'} @@ -10906,8 +12605,8 @@ packages: resolution: {integrity: sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==} dev: true - /clean-css/4.2.3: - resolution: {integrity: sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==} + /clean-css/4.2.4: + resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==} engines: {node: '>= 4.0'} dependencies: source-map: 0.6.1 @@ -10935,8 +12634,8 @@ packages: restore-cursor: 3.1.0 dev: true - /cli-spinners/2.6.0: - resolution: {integrity: sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==} + /cli-spinners/2.6.1: + resolution: {integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==} engines: {node: '>=6'} dev: true @@ -10945,7 +12644,7 @@ packages: engines: {node: 10.* || >= 12.*} dependencies: object-assign: 4.1.1 - string-width: 4.2.2 + string-width: 4.2.3 optionalDependencies: colors: 1.4.0 dev: true @@ -10958,11 +12657,6 @@ packages: string-width: 4.2.2 dev: true - /cli-width/3.0.0: - resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} - engines: {node: '>= 10'} - dev: true - /cliui/5.0.0: resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==} dependencies: @@ -10982,8 +12676,8 @@ packages: /cliui/7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} dependencies: - string-width: 4.2.2 - strip-ansi: 6.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 wrap-ansi: 7.0.0 dev: true @@ -11007,6 +12701,11 @@ packages: engines: {node: '>=0.8'} dev: true + /clsx/1.1.1: + resolution: {integrity: sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==} + engines: {node: '>=6'} + dev: true + /co/4.6.0: resolution: {integrity: sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} @@ -11084,8 +12783,8 @@ packages: color-string: 1.6.0 dev: true - /colord/2.7.0: - resolution: {integrity: sha512-pZJBqsHz+pYyw3zpX6ZRXWoCHM1/cvFikY9TV8G3zcejCaKE0lhankoj8iScyrrePA8C7yJ5FStfA9zbcOnw7Q==} + /colord/2.9.1: + resolution: {integrity: sha512-4LBMSt09vR0uLnPVkOUBnmxgoaeN4ewRbx801wY/bXcltXfpR/G46OdWn96XpYmCWuYvO46aBZP4NgX8HpNAcw==} dev: true /colorette/1.3.0: @@ -11161,7 +12860,7 @@ packages: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} dependencies: - mime-db: 1.49.0 + mime-db: 1.50.0 dev: true /compression-webpack-plugin/6.1.1_webpack@4.46.0: @@ -11170,8 +12869,8 @@ packages: peerDependencies: webpack: ^4.0.0 || ^5.0.0 dependencies: - cacache: 15.2.0 - find-cache-dir: 3.3.1 + cacache: 15.3.0 + find-cache-dir: 3.3.2 schema-utils: 3.1.1 serialize-javascript: 5.0.1 webpack: 4.46.0 @@ -11332,12 +13031,12 @@ packages: peerDependencies: webpack: ^4.37.0 || ^5.0.0 dependencies: - cacache: 15.2.0 + cacache: 15.3.0 fast-glob: 3.2.7 - find-cache-dir: 3.3.1 + find-cache-dir: 3.3.2 glob-parent: 5.1.2 globby: 11.0.4 - loader-utils: 2.0.0 + loader-utils: 2.0.2 normalize-path: 3.0.0 p-limit: 3.1.0 schema-utils: 3.1.1 @@ -11353,10 +13052,10 @@ packages: semver: 7.0.0 dev: true - /core-js-compat/3.19.0: - resolution: {integrity: sha512-R09rKZ56ccGBebjTLZHvzDxhz93YPT37gBm6qUhnwj3Kt7aCjjZWD1injyNbyeFHxNKfeZBSyds6O9n3MKq1sw==} + /core-js-compat/3.19.1: + resolution: {integrity: sha512-Q/VJ7jAF/y68+aUsQJ/afPOewdsGkDtcMb40J8MbuWKlK3Y+wtHq8bTHKPj2WKWLIqmS5JhHs4CzHtz6pT2W6g==} dependencies: - browserslist: 4.17.5 + browserslist: 4.17.6 semver: 7.0.0 dev: true @@ -11365,6 +13064,11 @@ packages: requiresBuild: true dev: true + /core-js-pure/3.19.1: + resolution: {integrity: sha512-Q0Knr8Es84vtv62ei6/6jXH/7izKmOrtrxH9WJTHLCMAVeU+8TF8z8Nr08CsH4Ot0oJKzBzJJL9SJBYIv7WlfQ==} + requiresBuild: true + dev: true + /core-js/2.6.12: resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} deprecated: core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js. @@ -11376,10 +13080,19 @@ packages: requiresBuild: true dev: true + /core-js/3.19.1: + resolution: {integrity: sha512-Tnc7E9iKd/b/ff7GFbhwPVzJzPztGrChB8X8GLqoYGdEOG8IpLnK1xPyo3ZoO3HsK6TodJS58VGPOxA+hLHQMg==} + requiresBuild: true + dev: true + /core-util-is/1.0.2: resolution: {integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=} dev: true + /core-util-is/1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: true + /cosmiconfig/5.2.1: resolution: {integrity: sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==} engines: {node: '>=4'} @@ -11401,8 +13114,8 @@ packages: yaml: 1.10.2 dev: true - /cosmiconfig/7.0.0: - resolution: {integrity: sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==} + /cosmiconfig/7.0.1: + resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==} engines: {node: '>=10'} dependencies: '@types/parse-json': 4.0.0 @@ -11496,7 +13209,7 @@ packages: jsdom: 12.2.0 minimatch: 3.0.4 parse5: 4.0.0 - postcss: 7.0.36 + postcss: 7.0.39 pretty-bytes: 4.0.2 webpack-log: 2.0.0 webpack-sources: 1.4.3 @@ -11570,17 +13283,17 @@ packages: resolution: {integrity: sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==} engines: {node: '>4'} dependencies: - postcss: 7.0.36 + postcss: 7.0.39 timsort: 0.3.0 dev: true - /css-declaration-sorter/6.1.1_postcss@8.3.6: - resolution: {integrity: sha512-BZ1aOuif2Sb7tQYY1GeCjG7F++8ggnwUkH5Ictw0mrdpqpEd+zWmcPdstnH2TItlb74FqR0DrVEieon221T/1Q==} + /css-declaration-sorter/6.1.3_postcss@8.3.11: + resolution: {integrity: sha512-SvjQjNRZgh4ULK1LDJ2AduPKUKxIqmtU7ZAyi47BTV+M90Qvxr9AB6lKlLbDUfXqI9IQeYA8LbAsCZPpJEV3aA==} engines: {node: '>= 10'} peerDependencies: postcss: ^8.0.9 dependencies: - postcss: 8.3.6 + postcss: 8.3.11 timsort: 0.3.0 dev: true @@ -11595,7 +13308,7 @@ packages: icss-utils: 4.1.1 loader-utils: 1.4.0 normalize-path: 3.0.0 - postcss: 7.0.36 + postcss: 7.0.39 postcss-modules-extract-imports: 2.0.0 postcss-modules-local-by-default: 3.0.3 postcss-modules-scope: 2.2.0 @@ -11612,13 +13325,13 @@ packages: peerDependencies: webpack: ^4.27.0 || ^5.0.0 dependencies: - icss-utils: 5.1.0_postcss@8.3.6 - loader-utils: 2.0.0 - postcss: 8.3.6 - postcss-modules-extract-imports: 3.0.0_postcss@8.3.6 - postcss-modules-local-by-default: 4.0.0_postcss@8.3.6 - postcss-modules-scope: 3.0.0_postcss@8.3.6 - postcss-modules-values: 4.0.0_postcss@8.3.6 + icss-utils: 5.1.0_postcss@8.3.11 + loader-utils: 2.0.2 + postcss: 8.3.11 + postcss-modules-extract-imports: 3.0.0_postcss@8.3.11 + postcss-modules-local-by-default: 4.0.0_postcss@8.3.11 + postcss-modules-scope: 3.0.0_postcss@8.3.11 + postcss-modules-values: 4.0.0_postcss@8.3.11 postcss-value-parser: 4.1.0 schema-utils: 3.1.1 semver: 7.3.5 @@ -11642,10 +13355,10 @@ packages: resolution: {integrity: sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==} dependencies: boolbase: 1.0.0 - css-what: 5.0.1 - domhandler: 4.2.0 - domutils: 2.7.0 - nth-check: 2.0.0 + css-what: 5.1.0 + domhandler: 4.2.2 + domutils: 2.8.0 + nth-check: 2.0.1 dev: true /css-tree/1.0.0-alpha.37: @@ -11669,8 +13382,8 @@ packages: engines: {node: '>= 6'} dev: true - /css-what/5.0.1: - resolution: {integrity: sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==} + /css-what/5.1.0: + resolution: {integrity: sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==} engines: {node: '>= 6'} dev: true @@ -11695,7 +13408,7 @@ packages: dependencies: css-declaration-sorter: 4.0.1 cssnano-util-raw-cache: 4.0.1 - postcss: 7.0.36 + postcss: 7.0.39 postcss-calc: 7.0.5 postcss-colormin: 4.0.3 postcss-convert-values: 4.0.1 @@ -11725,42 +13438,42 @@ packages: postcss-unique-selectors: 4.0.1 dev: true - /cssnano-preset-default/5.1.4_postcss@8.3.6: - resolution: {integrity: sha512-sPpQNDQBI3R/QsYxQvfB4mXeEcWuw0wGtKtmS5eg8wudyStYMgKOQT39G07EbW1LB56AOYrinRS9f0ig4Y3MhQ==} + /cssnano-preset-default/5.1.5_postcss@8.3.11: + resolution: {integrity: sha512-fF00UI+d3PWkGfMd62geqmoUe5h+LOhGE2GH4Fqq3beNKdCU1LWwLUyIcu4/A72lWv0737cHey5zhhWw3rW0sA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - css-declaration-sorter: 6.1.1_postcss@8.3.6 - cssnano-utils: 2.0.1_postcss@8.3.6 - postcss: 8.3.6 - postcss-calc: 8.0.0_postcss@8.3.6 - postcss-colormin: 5.2.0_postcss@8.3.6 - postcss-convert-values: 5.0.1_postcss@8.3.6 - postcss-discard-comments: 5.0.1_postcss@8.3.6 - postcss-discard-duplicates: 5.0.1_postcss@8.3.6 - postcss-discard-empty: 5.0.1_postcss@8.3.6 - postcss-discard-overridden: 5.0.1_postcss@8.3.6 - postcss-merge-longhand: 5.0.2_postcss@8.3.6 - postcss-merge-rules: 5.0.2_postcss@8.3.6 - postcss-minify-font-values: 5.0.1_postcss@8.3.6 - postcss-minify-gradients: 5.0.2_postcss@8.3.6 - postcss-minify-params: 5.0.1_postcss@8.3.6 - postcss-minify-selectors: 5.1.0_postcss@8.3.6 - postcss-normalize-charset: 5.0.1_postcss@8.3.6 - postcss-normalize-display-values: 5.0.1_postcss@8.3.6 - postcss-normalize-positions: 5.0.1_postcss@8.3.6 - postcss-normalize-repeat-style: 5.0.1_postcss@8.3.6 - postcss-normalize-string: 5.0.1_postcss@8.3.6 - postcss-normalize-timing-functions: 5.0.1_postcss@8.3.6 - postcss-normalize-unicode: 5.0.1_postcss@8.3.6 - postcss-normalize-url: 5.0.2_postcss@8.3.6 - postcss-normalize-whitespace: 5.0.1_postcss@8.3.6 - postcss-ordered-values: 5.0.2_postcss@8.3.6 - postcss-reduce-initial: 5.0.1_postcss@8.3.6 - postcss-reduce-transforms: 5.0.1_postcss@8.3.6 - postcss-svgo: 5.0.2_postcss@8.3.6 - postcss-unique-selectors: 5.0.1_postcss@8.3.6 + css-declaration-sorter: 6.1.3_postcss@8.3.11 + cssnano-utils: 2.0.1_postcss@8.3.11 + postcss: 8.3.11 + postcss-calc: 8.0.0_postcss@8.3.11 + postcss-colormin: 5.2.1_postcss@8.3.11 + postcss-convert-values: 5.0.2_postcss@8.3.11 + postcss-discard-comments: 5.0.1_postcss@8.3.11 + postcss-discard-duplicates: 5.0.1_postcss@8.3.11 + postcss-discard-empty: 5.0.1_postcss@8.3.11 + postcss-discard-overridden: 5.0.1_postcss@8.3.11 + postcss-merge-longhand: 5.0.2_postcss@8.3.11 + postcss-merge-rules: 5.0.2_postcss@8.3.11 + postcss-minify-font-values: 5.0.1_postcss@8.3.11 + postcss-minify-gradients: 5.0.3_postcss@8.3.11 + postcss-minify-params: 5.0.1_postcss@8.3.11 + postcss-minify-selectors: 5.1.0_postcss@8.3.11 + postcss-normalize-charset: 5.0.1_postcss@8.3.11 + postcss-normalize-display-values: 5.0.1_postcss@8.3.11 + postcss-normalize-positions: 5.0.1_postcss@8.3.11 + postcss-normalize-repeat-style: 5.0.1_postcss@8.3.11 + postcss-normalize-string: 5.0.1_postcss@8.3.11 + postcss-normalize-timing-functions: 5.0.1_postcss@8.3.11 + postcss-normalize-unicode: 5.0.1_postcss@8.3.11 + postcss-normalize-url: 5.0.2_postcss@8.3.11 + postcss-normalize-whitespace: 5.0.1_postcss@8.3.11 + postcss-ordered-values: 5.0.2_postcss@8.3.11 + postcss-reduce-initial: 5.0.1_postcss@8.3.11 + postcss-reduce-transforms: 5.0.1_postcss@8.3.11 + postcss-svgo: 5.0.3_postcss@8.3.11 + postcss-unique-selectors: 5.0.1_postcss@8.3.11 dev: true /cssnano-util-get-arguments/4.0.0: @@ -11777,7 +13490,7 @@ packages: resolution: {integrity: sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==} engines: {node: '>=6.9.0'} dependencies: - postcss: 7.0.36 + postcss: 7.0.39 dev: true /cssnano-util-same-parent/4.0.1: @@ -11785,13 +13498,13 @@ packages: engines: {node: '>=6.9.0'} dev: true - /cssnano-utils/2.0.1_postcss@8.3.6: + /cssnano-utils/2.0.1_postcss@8.3.11: resolution: {integrity: sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.3.6 + postcss: 8.3.11 dev: true /cssnano/4.1.11: @@ -11801,19 +13514,19 @@ packages: cosmiconfig: 5.2.1 cssnano-preset-default: 4.0.8 is-resolvable: 1.1.0 - postcss: 7.0.36 + postcss: 7.0.39 dev: true - /cssnano/5.0.8_postcss@8.3.6: - resolution: {integrity: sha512-Lda7geZU0Yu+RZi2SGpjYuQz4HI4/1Y+BhdD0jL7NXAQ5larCzVn+PUGuZbDMYz904AXXCOgO5L1teSvgu7aFg==} + /cssnano/5.0.9_postcss@8.3.11: + resolution: {integrity: sha512-Y4olTKBKsPKl5izpcXHRDiB/1rVdbIDM4qVXgEKBt466kYT42SEEsnCYOQFFXzEkUYV8pJNCII9JKzb8KfDk+g==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - cssnano-preset-default: 5.1.4_postcss@8.3.6 + cssnano-preset-default: 5.1.5_postcss@8.3.11 is-resolvable: 1.1.0 lilconfig: 2.0.3 - postcss: 8.3.6 + postcss: 8.3.11 yaml: 1.10.2 dev: true @@ -11845,14 +13558,18 @@ packages: cssom: 0.3.8 dev: true - /csstype/2.6.17: - resolution: {integrity: sha512-u1wmTI1jJGzCJzWndZo8mk4wnPTZd1eOIYTYvuEyOQGfmDl3TrabCCfKnOC86FZwW/9djqTl933UF/cS425i9A==} + /csstype/2.6.18: + resolution: {integrity: sha512-RSU6Hyeg14am3Ah4VZEmeX8H7kLwEEirXe6aU2IPfKNvhXwTflK5HQRDNI0ypQXoqmm+QPyG2IaPuQE5zMwSIQ==} dev: true /csstype/3.0.8: resolution: {integrity: sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==} dev: true + /csstype/3.0.9: + resolution: {integrity: sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==} + dev: true + /currently-unhandled/0.4.1: resolution: {integrity: sha1-mI3zP+qxke95mmE2nddsF635V+o=} engines: {node: '>=0.10.0'} @@ -11897,13 +13614,13 @@ packages: whatwg-url: 8.7.0 dev: true - /date-fns/2.22.1: - resolution: {integrity: sha512-yUFPQjrxEmIsMqlHhAhmxkuH769baF21Kk+nZwZGyrMoyLA+LugaQtC0+Tqf9CBUUULWwUJt6Q5ySI3LJDDCGg==} + /date-fns/2.23.0: + resolution: {integrity: sha512-5ycpauovVyAk0kXNZz6ZoB9AYMZB4DObse7P3BPWmyEjXNORTI8EJ6X0uaSAq4sCHzM1uajzrkr6HnsLQpxGXA==} engines: {node: '>=0.11'} dev: false - /date-fns/2.23.0: - resolution: {integrity: sha512-5ycpauovVyAk0kXNZz6ZoB9AYMZB4DObse7P3BPWmyEjXNORTI8EJ6X0uaSAq4sCHzM1uajzrkr6HnsLQpxGXA==} + /date-fns/2.25.0: + resolution: {integrity: sha512-ovYRFnTrbGPD4nqaEqescPEv1mNwvt+UTqI3Ay9SzNtey9NZnYu6E2qCcBBgJ6/2VF1zGGygpyTDITqpQQ5e+w==} engines: {node: '>=0.11'} dev: false @@ -11984,6 +13701,10 @@ packages: mimic-response: 1.0.1 dev: true + /dedent/0.7.0: + resolution: {integrity: sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=} + dev: true + /deep-equal/1.1.1: resolution: {integrity: sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==} dependencies: @@ -12000,8 +13721,8 @@ packages: engines: {node: '>=4.0.0'} dev: true - /deep-is/0.1.3: - resolution: {integrity: sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=} + /deep-is/0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true /deep-object-diff/1.1.0: @@ -12077,7 +13798,7 @@ packages: resolution: {integrity: sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==} engines: {node: '>=6'} dependencies: - '@types/glob': 7.1.4 + '@types/glob': 7.2.0 globby: 6.1.0 is-path-cwd: 2.2.0 is-path-in-cwd: 2.1.0 @@ -12163,6 +13884,11 @@ packages: engines: {node: '>= 10.14.2'} dev: true + /diff-sequences/27.0.6: + resolution: {integrity: sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: true + /diffie-hellman/5.0.3: resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} dependencies: @@ -12249,7 +13975,7 @@ packages: resolution: {integrity: sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==} dependencies: domelementtype: 2.2.0 - domhandler: 4.2.0 + domhandler: 4.2.2 entities: 2.2.0 dev: true @@ -12283,8 +14009,8 @@ packages: webidl-conversions: 5.0.0 dev: true - /domhandler/4.2.0: - resolution: {integrity: sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==} + /domhandler/4.2.2: + resolution: {integrity: sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==} engines: {node: '>= 4'} dependencies: domelementtype: 2.2.0 @@ -12297,12 +14023,12 @@ packages: domelementtype: 1.3.1 dev: true - /domutils/2.7.0: - resolution: {integrity: sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==} + /domutils/2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} dependencies: dom-serializer: 1.3.2 domelementtype: 2.2.0 - domhandler: 4.2.0 + domhandler: 4.2.2 dev: true /dot-case/3.0.4: @@ -12353,7 +14079,7 @@ packages: peerDependencies: react: '>=16.12.0' dependencies: - '@babel/runtime': 7.15.3 + '@babel/runtime': 7.16.0 compute-scroll-into-view: 1.0.17 prop-types: 15.7.2 react-is: 17.0.2 @@ -12365,7 +14091,7 @@ packages: peerDependencies: react: '>=16.12.0' dependencies: - '@babel/runtime': 7.15.3 + '@babel/runtime': 7.16.0 compute-scroll-into-view: 1.0.17 prop-types: 15.7.2 react: 16.14.0 @@ -12404,7 +14130,7 @@ packages: /ejs-loader/0.5.0: resolution: {integrity: sha512-iirFqlP3tiFoedNZ7dQcjvechunl054VbW6Ki38T/pabgXMAncduSE0ZXLeVGn1NbmcUJF9Z5TC0EvQ4RIpP9Q==} dependencies: - loader-utils: 2.0.0 + loader-utils: 2.0.2 lodash: 4.17.21 dev: true @@ -12418,8 +14144,8 @@ packages: resolution: {integrity: sha512-YcSRImHt6JZZ2sSuQ4Bzajtk98igQ0iKkksqlzZLzbh4p0OIyJRSvUbsgqfcR8txdfsoYCc4ym306t4p2kP/aw==} dev: true - /electron-to-chromium/1.3.886: - resolution: {integrity: sha512-+vYdeBosI63VkCtNWnEVFjgNd/IZwvnsWkKyPtWAvrhA+XfByKoBJcbsMgudVU/bUcGAF9Xp3aXn96voWlc3oQ==} + /electron-to-chromium/1.3.888: + resolution: {integrity: sha512-5iD1zgyPpFER4kJ716VsA4MxQ6x405dxdFNCEK2mITL075VHO5ResjY0xzQUZguCww/KlBxCA6JmBA9sDt1PRw==} dev: true /element-resize-detector/1.2.3: @@ -12450,10 +14176,6 @@ packages: engines: {node: '>=10'} dev: true - /emoji-regex/6.1.1: - resolution: {integrity: sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=} - dev: true - /emoji-regex/7.0.3: resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} dev: true @@ -12482,7 +14204,7 @@ packages: '@emotion/core': ^10.0.27 react: '>=16.3.0' dependencies: - '@babel/runtime': 7.15.3 + '@babel/runtime': 7.16.0 '@emotion/core': 10.1.1_react@16.14.0 '@emotion/weak-memoize': 0.2.5 hoist-non-react-statics: 3.3.2 @@ -12495,7 +14217,7 @@ packages: '@emotion/core': ^10.0.27 react: '>=16.3.0' dependencies: - '@babel/runtime': 7.15.3 + '@babel/runtime': 7.16.0 '@emotion/core': 10.1.1 '@emotion/weak-memoize': 0.2.5 hoist-non-react-statics: 3.3.2 @@ -12563,6 +14285,17 @@ packages: preact: 10.5.14 dev: true + /enzyme-adapter-preact-pure/3.2.0_enzyme@3.11.0+preact@10.5.15: + resolution: {integrity: sha512-A7bxIxUZ1Ty5vBmB6KQSP7GLwuXDZQ297DcYsNtR/AQUSxanIHcxEY8Eqk6mJt03CYwcq9EcAg/+LBAXQr5kvw==} + peerDependencies: + enzyme: ^3.8.0 + preact: ^10.0.0 + dependencies: + array.prototype.flatmap: 1.2.5 + enzyme: 3.11.0 + preact: 10.5.15 + dev: true + /enzyme-shallow-equal/1.0.4: resolution: {integrity: sha512-MttIwB8kKxypwHvRynuC3ahyNc+cFbR8mjVIltnmzQ0uKGqmsfO4bfBuLxb0beLNPhjblUEYvEbsg+VSygvF1Q==} dependencies: @@ -12573,10 +14306,10 @@ packages: /enzyme/3.11.0: resolution: {integrity: sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==} dependencies: - array.prototype.flat: 1.2.4 + array.prototype.flat: 1.2.5 cheerio: 1.0.0-rc.10 enzyme-shallow-equal: 1.0.4 - function.prototype.name: 1.1.4 + function.prototype.name: 1.1.5 has: 1.0.3 html-element-map: 1.3.1 is-boolean-object: 1.1.2 @@ -12590,11 +14323,11 @@ packages: object-inspect: 1.11.0 object-is: 1.1.5 object.assign: 4.1.2 - object.entries: 1.1.4 - object.values: 1.1.4 + object.entries: 1.1.5 + object.values: 1.1.5 raf: 3.4.1 rst-selector-parser: 2.2.3 - string.prototype.trim: 1.2.4 + string.prototype.trim: 1.2.5 dev: true /equal-length/1.0.1: @@ -12675,6 +14408,32 @@ packages: unbox-primitive: 1.0.1 dev: true + /es-abstract/1.19.1: + resolution: {integrity: sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + es-to-primitive: 1.2.1 + function-bind: 1.1.1 + get-intrinsic: 1.1.1 + get-symbol-description: 1.0.0 + has: 1.0.3 + has-symbols: 1.0.2 + internal-slot: 1.0.3 + is-callable: 1.2.4 + is-negative-zero: 2.0.1 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.1 + is-string: 1.0.7 + is-weakref: 1.0.1 + object-inspect: 1.11.0 + object-keys: 1.1.1 + object.assign: 4.1.2 + string.prototype.trimend: 1.0.4 + string.prototype.trimstart: 1.0.4 + unbox-primitive: 1.0.1 + dev: true + /es-array-method-boxes-properly/1.0.0: resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} dev: true @@ -12701,8 +14460,8 @@ packages: is-symbol: 1.0.4 dev: true - /es5-shim/4.5.15: - resolution: {integrity: sha512-FYpuxEjMeDvU4rulKqFdukQyZSTpzhg4ScQHrAosrlVpR6GFyaw14f74yn2+4BugniIS0Frpg7TvwZocU4ZMTw==} + /es5-shim/4.6.2: + resolution: {integrity: sha512-n0XTVMGps+Deyr38jtqKPR5F5hb9owYeRQcKJW39eFvzUk/u/9Ww315werRzbiNMnHCUw/YHDPBphTlEnzdi+A==} engines: {node: '>=0.4.0'} dev: true @@ -12774,7 +14533,7 @@ packages: hasBin: true dependencies: esprima: 4.0.1 - estraverse: 5.2.0 + estraverse: 5.3.0 esutils: 2.0.3 optionator: 0.8.3 optionalDependencies: @@ -12834,17 +14593,21 @@ packages: object.entries: 1.1.3 dev: true - /eslint-config-preact/1.1.4_eslint@6.8.0+typescript@3.9.10: - resolution: {integrity: sha512-j00/BpjPpVoaX8UTpXFPAsfBIzuwJX+sBvgPFyb53Lqi31fM0Oiq516qYXRyaZ7q1BRCjO8s67NCLal6v/Z8Lg==} + /eslint-config-preact/1.2.0_eslint@8.1.0+typescript@4.4.4: + resolution: {integrity: sha512-1jAeR9qi0yotuuki6ROzvi2xacFWGUSFZqWZnqpRDtKS+yIK0gaeTwyQpCb7k5Z3KULBxgN0tdytXaH5e7JBow==} peerDependencies: eslint: 6.x || 7.x dependencies: - babel-eslint: 10.1.0_eslint@6.8.0 - eslint: 6.8.0 - eslint-plugin-compat: 3.13.0_eslint@6.8.0 - eslint-plugin-jest: 23.20.0_eslint@6.8.0+typescript@3.9.10 - eslint-plugin-react: 7.22.0_eslint@6.8.0 - eslint-plugin-react-hooks: 4.2.0_eslint@6.8.0 + '@babel/core': 7.16.0 + '@babel/eslint-parser': 7.16.0_@babel+core@7.16.0+eslint@8.1.0 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.16.0 + '@babel/plugin-syntax-decorators': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-syntax-jsx': 7.16.0_@babel+core@7.16.0 + eslint: 8.1.0 + eslint-plugin-compat: 3.13.0_eslint@8.1.0 + eslint-plugin-jest: 23.20.0_eslint@8.1.0+typescript@4.4.4 + eslint-plugin-react: 7.26.1_eslint@8.1.0 + eslint-plugin-react-hooks: 4.2.0_eslint@8.1.0 transitivePeerDependencies: - supports-color - typescript @@ -12865,7 +14628,7 @@ packages: pkg-dir: 2.0.0 dev: true - /eslint-plugin-compat/3.13.0_eslint@6.8.0: + /eslint-plugin-compat/3.13.0_eslint@8.1.0: resolution: {integrity: sha512-cv8IYMuTXm7PIjMVDN2y4k/KVnKZmoNGHNq27/9dLstOLydKblieIv+oe2BN2WthuXnFNhaNvv3N1Bvl4dbIGA==} engines: {node: '>=9.x'} peerDependencies: @@ -12873,10 +14636,10 @@ packages: dependencies: '@mdn/browser-compat-data': 3.3.14 ast-metadata-inferer: 0.7.0 - browserslist: 4.16.8 - caniuse-lite: 1.0.30001251 - core-js: 3.16.2 - eslint: 6.8.0 + browserslist: 4.17.6 + caniuse-lite: 1.0.30001276 + core-js: 3.19.1 + eslint: 8.1.0 find-up: 5.0.0 lodash.memoize: 4.1.2 semver: 7.3.5 @@ -12904,14 +14667,14 @@ packages: tsconfig-paths: 3.9.0 dev: true - /eslint-plugin-jest/23.20.0_eslint@6.8.0+typescript@3.9.10: + /eslint-plugin-jest/23.20.0_eslint@8.1.0+typescript@4.4.4: resolution: {integrity: sha512-+6BGQt85OREevBDWCvhqj1yYA4+BFK4XnRZSGJionuEYmcglMZYLNNBBemwzbqUAckURaHdJSBcjHPyrtypZOw==} engines: {node: '>=8'} peerDependencies: eslint: '>=5' dependencies: - '@typescript-eslint/experimental-utils': 2.34.0_eslint@6.8.0+typescript@3.9.10 - eslint: 6.8.0 + '@typescript-eslint/experimental-utils': 2.34.0_eslint@8.1.0+typescript@4.4.4 + eslint: 8.1.0 transitivePeerDependencies: - supports-color - typescript @@ -12937,25 +14700,25 @@ packages: language-tags: 1.0.5 dev: true - /eslint-plugin-react-hooks/4.2.0_eslint@6.8.0: + /eslint-plugin-react-hooks/4.2.0_eslint@7.18.0: resolution: {integrity: sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 dependencies: - eslint: 6.8.0 + eslint: 7.18.0 dev: true - /eslint-plugin-react-hooks/4.2.0_eslint@7.18.0: + /eslint-plugin-react-hooks/4.2.0_eslint@8.1.0: resolution: {integrity: sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 dependencies: - eslint: 7.18.0 + eslint: 8.1.0 dev: true - /eslint-plugin-react/7.22.0_eslint@6.8.0: + /eslint-plugin-react/7.22.0_eslint@7.18.0: resolution: {integrity: sha512-p30tuX3VS+NWv9nQot9xIGAHBXR0+xJVaZriEsHoJrASGCJZDJ8JLNM0YqKqI0AKm6Uxaa1VUHoNEibxRCMQHA==} engines: {node: '>=4'} peerDependencies: @@ -12964,7 +14727,7 @@ packages: array-includes: 3.1.2 array.prototype.flatmap: 1.2.4 doctrine: 2.1.0 - eslint: 6.8.0 + eslint: 7.18.0 has: 1.0.3 jsx-ast-utils: 3.2.0 object.entries: 1.1.3 @@ -12975,24 +14738,27 @@ packages: string.prototype.matchall: 4.0.3 dev: true - /eslint-plugin-react/7.22.0_eslint@7.18.0: - resolution: {integrity: sha512-p30tuX3VS+NWv9nQot9xIGAHBXR0+xJVaZriEsHoJrASGCJZDJ8JLNM0YqKqI0AKm6Uxaa1VUHoNEibxRCMQHA==} + /eslint-plugin-react/7.26.1_eslint@8.1.0: + resolution: {integrity: sha512-Lug0+NOFXeOE+ORZ5pbsh6mSKjBKXDXItUD2sQoT+5Yl0eoT82DqnXeTMfUare4QVCn9QwXbfzO/dBLjLXwVjQ==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 dependencies: - array-includes: 3.1.2 - array.prototype.flatmap: 1.2.4 + array-includes: 3.1.4 + array.prototype.flatmap: 1.2.5 doctrine: 2.1.0 - eslint: 7.18.0 - has: 1.0.3 - jsx-ast-utils: 3.2.0 - object.entries: 1.1.3 - object.fromentries: 2.0.3 - object.values: 1.1.2 + eslint: 8.1.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.2.1 + minimatch: 3.0.4 + object.entries: 1.1.5 + object.fromentries: 2.0.5 + object.hasown: 1.1.0 + object.values: 1.1.5 prop-types: 15.7.2 - resolve: 1.19.0 - string.prototype.matchall: 4.0.3 + resolve: 2.0.0-next.3 + semver: 6.3.0 + string.prototype.matchall: 4.0.6 dev: true /eslint-scope/4.0.3: @@ -13011,11 +14777,12 @@ packages: estraverse: 4.3.0 dev: true - /eslint-utils/1.4.3: - resolution: {integrity: sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==} - engines: {node: '>=6'} + /eslint-scope/6.0.0: + resolution: {integrity: sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - eslint-visitor-keys: 1.3.0 + esrecurse: 4.3.0 + estraverse: 5.3.0 dev: true /eslint-utils/2.1.0: @@ -13025,6 +14792,16 @@ packages: eslint-visitor-keys: 1.3.0 dev: true + /eslint-utils/3.0.0_eslint@8.1.0: + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + dependencies: + eslint: 8.1.0 + eslint-visitor-keys: 2.1.0 + dev: true + /eslint-visitor-keys/1.3.0: resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} engines: {node: '>=4'} @@ -13035,50 +14812,14 @@ packages: engines: {node: '>=10'} dev: true - /eslint/6.8.0: - resolution: {integrity: sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==} - engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} - hasBin: true - dependencies: - '@babel/code-frame': 7.14.5 - ajv: 6.12.6 - chalk: 2.4.2 - cross-spawn: 6.0.5 - debug: 4.3.2 - doctrine: 3.0.0 - eslint-scope: 5.1.1 - eslint-utils: 1.4.3 - eslint-visitor-keys: 1.3.0 - espree: 6.2.1 - esquery: 1.3.1 - esutils: 2.0.3 - file-entry-cache: 5.0.1 - functional-red-black-tree: 1.0.1 - glob-parent: 5.1.2 - globals: 12.4.0 - ignore: 4.0.6 - import-fresh: 3.3.0 - imurmurhash: 0.1.4 - inquirer: 7.3.3 - is-glob: 4.0.1 - js-yaml: 3.14.1 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.3.0 - lodash: 4.17.21 - minimatch: 3.0.4 - mkdirp: 0.5.5 - natural-compare: 1.4.0 - optionator: 0.8.3 - progress: 2.0.3 - regexpp: 2.0.1 - semver: 6.3.0 - strip-ansi: 5.2.0 - strip-json-comments: 3.1.1 - table: 5.4.6 - text-table: 0.2.0 - v8-compile-cache: 2.2.0 - transitivePeerDependencies: - - supports-color + /eslint-visitor-keys/2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + dev: true + + /eslint-visitor-keys/3.0.0: + resolution: {integrity: sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true /eslint/7.18.0: @@ -13127,20 +14868,58 @@ packages: - supports-color dev: true + /eslint/8.1.0: + resolution: {integrity: sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint/eslintrc': 1.0.3 + '@humanwhocodes/config-array': 0.6.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.2 + doctrine: 3.0.0 + enquirer: 2.3.6 + escape-string-regexp: 4.0.0 + eslint-scope: 6.0.0 + eslint-utils: 3.0.0_eslint@8.1.0 + eslint-visitor-keys: 3.0.0 + espree: 9.0.0 + esquery: 1.4.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + functional-red-black-tree: 1.0.1 + glob-parent: 6.0.2 + globals: 13.12.0 + ignore: 4.0.6 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.0.4 + natural-compare: 1.4.0 + optionator: 0.9.1 + progress: 2.0.3 + regexpp: 3.2.0 + semver: 7.3.5 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + text-table: 0.2.0 + v8-compile-cache: 2.3.0 + transitivePeerDependencies: + - supports-color + dev: true + /esm/3.2.25: resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} engines: {node: '>=6'} dev: true - /espree/6.2.1: - resolution: {integrity: sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==} - engines: {node: '>=6.0.0'} - dependencies: - acorn: 7.4.1 - acorn-jsx: 5.3.2_acorn@7.4.1 - eslint-visitor-keys: 1.3.0 - dev: true - /espree/7.3.1: resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==} engines: {node: ^10.12.0 || >=12.0.0} @@ -13150,6 +14929,15 @@ packages: eslint-visitor-keys: 1.3.0 dev: true + /espree/9.0.0: + resolution: {integrity: sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.5.0 + acorn-jsx: 5.3.2_acorn@8.5.0 + eslint-visitor-keys: 3.0.0 + dev: true + /esprima/4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} @@ -13163,11 +14951,18 @@ packages: estraverse: 5.2.0 dev: true + /esquery/1.4.0: + resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + /esrecurse/4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} dependencies: - estraverse: 5.2.0 + estraverse: 5.3.0 dev: true /estraverse/4.3.0: @@ -13180,6 +14975,11 @@ packages: engines: {node: '>=4.0'} dev: true + /estraverse/5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + /estree-walker/1.0.1: resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} dev: true @@ -13234,7 +15034,7 @@ packages: is-stream: 1.1.0 npm-run-path: 2.0.2 p-finally: 1.0.0 - signal-exit: 3.0.3 + signal-exit: 3.0.5 strip-eof: 1.0.0 dev: true @@ -13253,6 +15053,21 @@ packages: strip-final-newline: 2.0.0 dev: true + /execa/5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.5 + strip-final-newline: 2.0.0 + dev: true + /exit/0.1.2: resolution: {integrity: sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=} engines: {node: '>= 0.8.0'} @@ -13283,6 +15098,18 @@ packages: jest-regex-util: 26.0.0 dev: true + /expect/27.3.1: + resolution: {integrity: sha512-MrNXV2sL9iDRebWPGOGFdPQRl2eDQNu/uhxIMShjjx74T6kC6jFIkmQ6OqXDtevjGUkyB2IT56RzDBqXf/QPCg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.2.5 + ansi-styles: 5.2.0 + jest-get-type: 27.3.1 + jest-matcher-utils: 27.3.1 + jest-message-util: 27.3.1 + jest-regex-util: 27.0.6 + dev: true + /express/4.17.1: resolution: {integrity: sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==} engines: {node: '>= 0.10.0'} @@ -13338,15 +15165,6 @@ packages: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} dev: true - /external-editor/3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} - dependencies: - chardet: 0.7.0 - iconv-lite: 0.4.24 - tmp: 0.0.33 - dev: true - /extglob/2.0.4: resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} engines: {node: '>=0.10.0'} @@ -13388,7 +15206,7 @@ packages: '@mrmlnc/readdir-enhanced': 2.2.1 '@nodelib/fs.stat': 1.1.3 glob-parent: 3.1.0 - is-glob: 4.0.1 + is-glob: 4.0.3 merge2: 1.4.1 micromatch: 3.1.10 dev: true @@ -13430,8 +15248,8 @@ packages: reusify: 1.0.4 dev: true - /fastq/1.12.0: - resolution: {integrity: sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==} + /fastq/1.13.0: + resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} dependencies: reusify: 1.0.4 dev: true @@ -13483,15 +15301,15 @@ packages: escape-string-regexp: 1.0.5 dev: true - /file-entry-cache/5.0.1: - resolution: {integrity: sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==} - engines: {node: '>=4'} + /file-entry-cache/6.0.0: + resolution: {integrity: sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flat-cache: 2.0.1 + flat-cache: 3.0.4 dev: true - /file-entry-cache/6.0.0: - resolution: {integrity: sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==} + /file-entry-cache/6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: flat-cache: 3.0.4 @@ -13503,7 +15321,7 @@ packages: peerDependencies: webpack: ^4.0.0 || ^5.0.0 dependencies: - loader-utils: 2.0.0 + loader-utils: 2.0.2 schema-utils: 3.1.1 webpack: 4.46.0 dev: true @@ -13574,6 +15392,15 @@ packages: pkg-dir: 4.2.0 dev: true + /find-cache-dir/3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + dev: true + /find-root/1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} dev: true @@ -13615,29 +15442,16 @@ packages: micromatch: 3.1.10 dev: true - /flat-cache/2.0.1: - resolution: {integrity: sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==} - engines: {node: '>=4'} - dependencies: - flatted: 2.0.2 - rimraf: 2.6.3 - write: 1.0.3 - dev: true - /flat-cache/3.0.4: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.1.1 + flatted: 3.2.2 rimraf: 3.0.2 dev: true - /flatted/2.0.2: - resolution: {integrity: sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==} - dev: true - - /flatted/3.1.1: - resolution: {integrity: sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==} + /flatted/3.2.2: + resolution: {integrity: sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==} dev: true /flush-write-stream/1.1.1: @@ -13647,9 +15461,19 @@ packages: readable-stream: 2.3.7 dev: true - /follow-redirects/1.14.2_debug@4.3.2: + /follow-redirects/1.14.2: resolution: {integrity: sha512-yLR6WaE2lbF0x4K2qE2p9PEXKLDjUjnR/xmjS3wHAYxtlsI9MLLBJUZirAHKzUZDGLxje7w/cXR49WOUo4rbsA==} engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + + /follow-redirects/1.14.5_debug@4.3.2: + resolution: {integrity: sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==} + engines: {node: '>=4.0'} peerDependencies: debug: '*' peerDependenciesMeta: @@ -13657,6 +15481,7 @@ packages: optional: true dependencies: debug: 4.3.2_supports-color@6.1.0 + dev: true /for-each/0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -13685,32 +15510,64 @@ packages: resolution: {integrity: sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==} engines: {node: '>=6.11.5', yarn: '>=1.0.0'} dependencies: - '@babel/code-frame': 7.14.5 + '@babel/code-frame': 7.16.0 chalk: 2.4.2 micromatch: 3.1.10 minimatch: 3.0.4 - semver: 5.7.1 + semver: 5.7.1 + tapable: 1.1.3 + worker-rpc: 0.1.1 + dev: true + + /fork-ts-checker-webpack-plugin/6.3.2: + resolution: {integrity: sha512-L3n1lrV20pRa7ocAuM2YW4Ux1yHM8+dV4shqPdHf1xoeG5KQhp3o0YySvNsBKBISQOCN4N2Db9DV4xYN6xXwyQ==} + engines: {node: '>=10', yarn: '>=1.0.0'} + dependencies: + '@babel/code-frame': 7.14.5 + '@types/json-schema': 7.0.9 + chalk: 4.1.2 + chokidar: 3.5.2 + cosmiconfig: 6.0.0 + deepmerge: 4.2.2 + fs-extra: 9.1.0 + glob: 7.1.7 + memfs: 3.2.2 + minimatch: 3.0.4 + schema-utils: 2.7.0 + semver: 7.3.5 tapable: 1.1.3 - worker-rpc: 0.1.1 dev: true - /fork-ts-checker-webpack-plugin/6.3.2: - resolution: {integrity: sha512-L3n1lrV20pRa7ocAuM2YW4Ux1yHM8+dV4shqPdHf1xoeG5KQhp3o0YySvNsBKBISQOCN4N2Db9DV4xYN6xXwyQ==} + /fork-ts-checker-webpack-plugin/6.4.0_831eeee51b9dc6506e4e2983e1c7fb45: + resolution: {integrity: sha512-3I3wFkc4DbzaUDPWEi96wdYGu4EKtxBafhZYm0o4mX51d9bphAY4P3mBl8K5mFXFJqVzHfmdbm9kLGnm7vwwBg==} engines: {node: '>=10', yarn: '>=1.0.0'} + peerDependencies: + eslint: '>= 6' + typescript: '>= 2.7' + vue-template-compiler: '*' + webpack: '>= 4' + peerDependenciesMeta: + eslint: + optional: true + vue-template-compiler: + optional: true dependencies: - '@babel/code-frame': 7.14.5 + '@babel/code-frame': 7.16.0 '@types/json-schema': 7.0.9 chalk: 4.1.2 chokidar: 3.5.2 cosmiconfig: 6.0.0 deepmerge: 4.2.2 + eslint: 8.1.0 fs-extra: 9.1.0 - glob: 7.1.7 - memfs: 3.2.2 + glob: 7.2.0 + memfs: 3.3.0 minimatch: 3.0.4 schema-utils: 2.7.0 semver: 7.3.5 tapable: 1.1.3 + typescript: 4.4.4 + webpack: 4.46.0 dev: true /form-data/2.3.3: @@ -13719,7 +15576,7 @@ packages: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 - mime-types: 2.1.32 + mime-types: 2.1.33 dev: true /form-data/3.0.1: @@ -13728,7 +15585,7 @@ packages: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 - mime-types: 2.1.32 + mime-types: 2.1.33 dev: true /format/0.2.2: @@ -13815,7 +15672,7 @@ packages: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} dependencies: - minipass: 3.1.3 + minipass: 3.1.5 dev: true /fs-monkey/1.0.3: @@ -13867,13 +15724,13 @@ packages: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} dev: true - /function.prototype.name/1.1.4: - resolution: {integrity: sha512-iqy1pIotY/RmhdFZygSSlW0wko2yxkSCKqsuv4pr8QESohpYyG/Z7B/XXvPRKTJS//960rgguE5mSRUsDdaJrQ==} + /function.prototype.name/1.1.5: + resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.1.3 - es-abstract: 1.18.5 + es-abstract: 1.19.1 functions-have-names: 1.2.2 dev: true @@ -13897,10 +15754,10 @@ packages: console-control-strings: 1.1.0 has-unicode: 2.0.1 object-assign: 4.1.1 - signal-exit: 3.0.3 + signal-exit: 3.0.5 string-width: 1.0.2 strip-ansi: 3.0.1 - wide-align: 1.1.3 + wide-align: 1.1.5 dev: true /gensync/1.0.0-beta.2: @@ -13962,6 +15819,11 @@ packages: pump: 3.0.0 dev: true + /get-stream/6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true + /get-symbol-description/1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} @@ -13987,10 +15849,8 @@ packages: encoding: 0.1.13 dev: true - /github-slugger/1.3.0: - resolution: {integrity: sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==} - dependencies: - emoji-regex: 6.1.1 + /github-slugger/1.4.0: + resolution: {integrity: sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==} dev: true /gittar/0.1.1: @@ -14033,7 +15893,14 @@ packages: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} dependencies: - is-glob: 4.0.1 + is-glob: 4.0.3 + dev: true + + /glob-parent/6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 dev: true /glob-promise/3.4.0_glob@7.1.7: @@ -14042,10 +15909,20 @@ packages: peerDependencies: glob: '*' dependencies: - '@types/glob': 7.1.4 + '@types/glob': 7.2.0 glob: 7.1.7 dev: true + /glob-promise/3.4.0_glob@7.2.0: + resolution: {integrity: sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==} + engines: {node: '>=4'} + peerDependencies: + glob: '*' + dependencies: + '@types/glob': 7.2.0 + glob: 7.2.0 + dev: true + /glob-to-regexp/0.3.0: resolution: {integrity: sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=} dev: true @@ -14072,6 +15949,17 @@ packages: path-is-absolute: 1.0.1 dev: true + /glob/7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.0.4 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + /global-dirs/3.0.0: resolution: {integrity: sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==} engines: {node: '>=10'} @@ -14114,6 +16002,13 @@ packages: type-fest: 0.8.1 dev: true + /globals/13.12.0: + resolution: {integrity: sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + /globalthis/1.0.2: resolution: {integrity: sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==} engines: {node: '>= 0.4'} @@ -14128,7 +16023,7 @@ packages: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.2.7 - ignore: 5.1.8 + ignore: 5.1.9 merge2: 1.4.1 slash: 3.0.0 dev: true @@ -14152,7 +16047,7 @@ packages: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.2.7 - ignore: 5.1.8 + ignore: 5.1.9 merge2: 1.4.1 slash: 3.0.0 dev: true @@ -14162,7 +16057,7 @@ packages: engines: {node: '>=0.10.0'} dependencies: array-union: 1.0.2 - glob: 7.1.7 + glob: 7.2.0 object-assign: 4.1.1 pify: 2.3.0 pinkie-promise: 2.0.1 @@ -14172,11 +16067,11 @@ packages: resolution: {integrity: sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==} engines: {node: '>=6'} dependencies: - '@types/glob': 7.1.4 + '@types/glob': 7.2.0 array-union: 1.0.2 dir-glob: 2.2.2 fast-glob: 2.2.7 - glob: 7.1.7 + glob: 7.2.0 ignore: 4.0.6 pify: 4.0.1 slash: 2.0.0 @@ -14414,7 +16309,7 @@ packages: /hast-util-raw/6.0.1: resolution: {integrity: sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==} dependencies: - '@types/hast': 2.3.2 + '@types/hast': 2.3.4 hast-util-from-parse5: 6.0.1 hast-util-to-parse5: 6.0.0 html-void-elements: 1.0.5 @@ -14439,7 +16334,7 @@ packages: /hastscript/6.0.0: resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} dependencies: - '@types/hast': 2.3.2 + '@types/hast': 2.3.4 comma-separated-tokens: 1.0.8 hast-util-parse-selector: 2.2.5 property-information: 5.6.0 @@ -14508,7 +16403,7 @@ packages: /html-element-map/1.3.1: resolution: {integrity: sha512-6XMlxrAFX4UEEGxctfFnmrFaaZFNf9i5fNuV5wZ3WWQ4FVaNP1aX1LkX9j2mfEx1NpjeE/rL3nmgEn23GdFmrg==} dependencies: - array.prototype.filter: 1.0.0 + array.prototype.filter: 1.0.1 call-bind: 1.0.2 dev: true @@ -14529,6 +16424,10 @@ packages: resolution: {integrity: sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==} dev: true + /html-entities/2.3.2: + resolution: {integrity: sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==} + dev: true + /html-escaper/2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true @@ -14539,7 +16438,7 @@ packages: hasBin: true dependencies: camel-case: 4.1.2 - clean-css: 4.2.3 + clean-css: 4.2.4 commander: 4.1.1 he: 1.2.0 param-case: 3.0.4 @@ -14553,7 +16452,7 @@ packages: hasBin: true dependencies: camel-case: 3.0.0 - clean-css: 4.2.3 + clean-css: 4.2.4 commander: 2.17.1 he: 1.2.0 param-case: 2.1.1 @@ -14600,7 +16499,7 @@ packages: dependencies: '@types/html-minifier-terser': 5.1.2 '@types/tapable': 1.0.8 - '@types/webpack': 4.41.30 + '@types/webpack': 4.41.31 html-minifier-terser: 5.1.1 loader-utils: 1.4.0 lodash: 4.17.21 @@ -14614,8 +16513,8 @@ packages: resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} dependencies: domelementtype: 2.2.0 - domhandler: 4.2.0 - domutils: 2.7.0 + domhandler: 4.2.2 + domutils: 2.8.0 entities: 2.2.0 dev: true @@ -14679,7 +16578,7 @@ packages: engines: {node: '>=4.0.0'} dependencies: http-proxy: 1.18.1_debug@4.3.2 - is-glob: 4.0.1 + is-glob: 4.0.3 lodash: 4.17.21 micromatch: 3.1.10 transitivePeerDependencies: @@ -14691,7 +16590,7 @@ packages: engines: {node: '>=8.0.0'} dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.14.2_debug@4.3.2 + follow-redirects: 1.14.5_debug@4.3.2 requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -14725,6 +16624,11 @@ packages: engines: {node: '>=8.12.0'} dev: true + /human-signals/2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true + /iconv-lite/0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -14743,22 +16647,26 @@ packages: resolution: {integrity: sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==} engines: {node: '>= 6'} dependencies: - postcss: 7.0.36 + postcss: 7.0.39 dev: true - /icss-utils/5.1.0_postcss@8.3.6: + /icss-utils/5.1.0_postcss@8.3.11: resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.3.6 + postcss: 8.3.11 dev: true /idb/6.1.2: resolution: {integrity: sha512-1DNDVu3yDhAZkFDlJf0t7r+GLZ248F5pTAtA7V0oVG3yjmV125qZOx3g0XpAEkGZVYQiFDAsSOnGet2bhugc3w==} dev: true + /idb/6.1.5: + resolution: {integrity: sha512-IJtugpKkiVXQn5Y+LteyBCNk1N8xpGV3wWZk9EVtZWH8DYkjBn0bX1XnGP9RkyZF0sAcywa6unHqSWKe7q4LGw==} + dev: true + /identity-obj-proxy/3.0.0: resolution: {integrity: sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=} engines: {node: '>=4'} @@ -14789,6 +16697,11 @@ packages: engines: {node: '>= 4'} dev: true + /ignore/5.1.9: + resolution: {integrity: sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==} + engines: {node: '>= 4'} + dev: true + /immer/8.0.1: resolution: {integrity: sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==} dev: true @@ -14851,6 +16764,15 @@ packages: resolve-cwd: 3.0.0 dev: true + /import-local/3.0.3: + resolution: {integrity: sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + dev: true + /imurmurhash/0.1.4: resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=} engines: {node: '>=0.8.19'} @@ -14901,25 +16823,6 @@ packages: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} dev: true - /inquirer/7.3.3: - resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} - engines: {node: '>=8.0.0'} - dependencies: - ansi-escapes: 4.3.2 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-width: 3.0.0 - external-editor: 3.1.0 - figures: 3.2.0 - lodash: 4.17.21 - mute-stream: 0.0.8 - run-async: 2.4.1 - rxjs: 6.6.7 - string-width: 4.2.2 - strip-ansi: 6.0.0 - through: 2.3.8 - dev: true - /internal-ip/4.3.0: resolution: {integrity: sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==} engines: {node: '>=6'} @@ -15110,8 +17013,8 @@ packages: has: 1.0.3 dev: true - /is-core-module/2.6.0: - resolution: {integrity: sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==} + /is-core-module/2.8.0: + resolution: {integrity: sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==} dependencies: has: 1.0.3 dev: true @@ -15250,6 +17153,13 @@ packages: is-extglob: 2.1.1 dev: true + /is-glob/4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + /is-hexadecimal/1.0.4: resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} dev: true @@ -15411,6 +17321,10 @@ packages: resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} dev: true + /is-shared-array-buffer/1.0.1: + resolution: {integrity: sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==} + dev: true + /is-stream/1.1.0: resolution: {integrity: sha1-EtSj3U5o4Lec6428hBc66A2RykQ=} engines: {node: '>=0.10.0'} @@ -15458,6 +17372,12 @@ packages: engines: {node: '>=10'} dev: true + /is-weakref/1.0.1: + resolution: {integrity: sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==} + dependencies: + call-bind: 1.0.2 + dev: true + /is-whitespace-character/1.0.4: resolution: {integrity: sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==} dev: true @@ -15523,7 +17443,7 @@ packages: /isomorphic-unfetch/3.1.0: resolution: {integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==} dependencies: - node-fetch: 2.6.1 + node-fetch: 2.6.6 unfetch: 4.2.0 dev: true @@ -15536,6 +17456,11 @@ packages: engines: {node: '>=8'} dev: true + /istanbul-lib-coverage/3.2.0: + resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + engines: {node: '>=8'} + dev: true + /istanbul-lib-hook/3.0.0: resolution: {integrity: sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==} engines: {node: '>=8'} @@ -15547,9 +17472,22 @@ packages: resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.15.0 + '@babel/core': 7.16.0 '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.0.0 + istanbul-lib-coverage: 3.2.0 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-lib-instrument/5.1.0: + resolution: {integrity: sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==} + engines: {node: '>=8'} + dependencies: + '@babel/core': 7.16.0 + '@babel/parser': 7.16.2 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.0 semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -15572,7 +17510,7 @@ packages: resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} engines: {node: '>=8'} dependencies: - istanbul-lib-coverage: 3.0.0 + istanbul-lib-coverage: 3.2.0 make-dir: 3.1.0 supports-color: 7.2.0 dev: true @@ -15588,6 +17526,17 @@ packages: - supports-color dev: true + /istanbul-lib-source-maps/4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + dependencies: + debug: 4.3.2 + istanbul-lib-coverage: 3.2.0 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + dev: true + /istanbul-reports/3.0.2: resolution: {integrity: sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==} engines: {node: '>=8'} @@ -15596,15 +17545,23 @@ packages: istanbul-lib-report: 3.0.0 dev: true - /iterate-iterator/1.0.1: - resolution: {integrity: sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==} + /istanbul-reports/3.0.5: + resolution: {integrity: sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==} + engines: {node: '>=8'} + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.0 + dev: true + + /iterate-iterator/1.0.2: + resolution: {integrity: sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw==} dev: true /iterate-value/1.0.2: resolution: {integrity: sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==} dependencies: es-get-iterator: 1.1.2 - iterate-iterator: 1.0.1 + iterate-iterator: 1.0.2 dev: true /jed/1.1.1: @@ -15619,6 +17576,42 @@ packages: throat: 5.0.0 dev: true + /jest-changed-files/27.3.0: + resolution: {integrity: sha512-9DJs9garMHv4RhylUMZgbdCJ3+jHSkpL9aaVKp13xtXAD80qLTLrqcDZL1PHA9dYA0bCI86Nv2BhkLpLhrBcPg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.2.5 + execa: 5.1.1 + throat: 6.0.1 + dev: true + + /jest-circus/27.3.1: + resolution: {integrity: sha512-v1dsM9II6gvXokgqq6Yh2jHCpfg7ZqV4jWY66u7npz24JnhP3NHxI0sKT7+ZMQ7IrOWHYAaeEllOySbDbWsiXw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.3.1 + '@jest/test-result': 27.3.1 + '@jest/types': 27.2.5 + '@types/node': 16.11.6 + chalk: 4.1.2 + co: 4.6.0 + dedent: 0.7.0 + expect: 27.3.1 + is-generator-fn: 2.1.0 + jest-each: 27.3.1 + jest-matcher-utils: 27.3.1 + jest-message-util: 27.3.1 + jest-runtime: 27.3.1 + jest-snapshot: 27.3.1 + jest-util: 27.3.1 + pretty-format: 27.3.1 + slash: 3.0.0 + stack-utils: 2.0.5 + throat: 6.0.1 + transitivePeerDependencies: + - supports-color + dev: true + /jest-cli/26.6.3: resolution: {integrity: sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==} engines: {node: '>= 10.14.2'} @@ -15645,6 +17638,36 @@ packages: - utf-8-validate dev: true + /jest-cli/27.3.1: + resolution: {integrity: sha512-WHnCqpfK+6EvT62me6WVs8NhtbjAS4/6vZJnk7/2+oOr50cwAzG4Wxt6RXX0hu6m1169ZGMlhYYUNeKBXCph/Q==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 27.3.1 + '@jest/test-result': 27.3.1 + '@jest/types': 27.2.5 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.8 + import-local: 3.0.3 + jest-config: 27.3.1 + jest-util: 27.3.1 + jest-validate: 27.3.1 + prompts: 2.4.2 + yargs: 16.2.0 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + dev: true + /jest-config/26.6.3: resolution: {integrity: sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==} engines: {node: '>= 10.14.2'} @@ -15679,6 +17702,43 @@ packages: - utf-8-validate dev: true + /jest-config/27.3.1: + resolution: {integrity: sha512-KY8xOIbIACZ/vdYCKSopL44I0xboxC751IX+DXL2+Wx6DKNycyEfV3rryC3BPm5Uq/BBqDoMrKuqLEUNJmMKKg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + ts-node: '>=9.0.0' + peerDependenciesMeta: + ts-node: + optional: true + dependencies: + '@babel/core': 7.16.0 + '@jest/test-sequencer': 27.3.1 + '@jest/types': 27.2.5 + babel-jest: 27.3.1_@babel+core@7.16.0 + chalk: 4.1.2 + ci-info: 3.2.0 + deepmerge: 4.2.2 + glob: 7.2.0 + graceful-fs: 4.2.8 + jest-circus: 27.3.1 + jest-environment-jsdom: 27.3.1 + jest-environment-node: 27.3.1 + jest-get-type: 27.3.1 + jest-jasmine2: 27.3.1 + jest-regex-util: 27.0.6 + jest-resolve: 27.3.1 + jest-runner: 27.3.1 + jest-util: 27.3.1 + jest-validate: 27.3.1 + micromatch: 4.0.4 + pretty-format: 27.3.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + dev: true + /jest-diff/26.6.2: resolution: {integrity: sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==} engines: {node: '>= 10.14.2'} @@ -15689,6 +17749,16 @@ packages: pretty-format: 26.6.2 dev: true + /jest-diff/27.3.1: + resolution: {integrity: sha512-PCeuAH4AWUo2O5+ksW4pL9v5xJAcIKPUPfIhZBcG1RKv/0+dvaWTQK1Nrau8d67dp65fOqbeMdoil+6PedyEPQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + chalk: 4.1.2 + diff-sequences: 27.0.6 + jest-get-type: 27.3.1 + pretty-format: 27.3.1 + dev: true + /jest-docblock/26.0.0: resolution: {integrity: sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==} engines: {node: '>= 10.14.2'} @@ -15696,6 +17766,13 @@ packages: detect-newline: 3.1.0 dev: true + /jest-docblock/27.0.6: + resolution: {integrity: sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + detect-newline: 3.1.0 + dev: true + /jest-each/26.6.2: resolution: {integrity: sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==} engines: {node: '>= 10.14.2'} @@ -15707,6 +17784,17 @@ packages: pretty-format: 26.6.2 dev: true + /jest-each/27.3.1: + resolution: {integrity: sha512-E4SwfzKJWYcvOYCjOxhZcxwL+AY0uFMvdCOwvzgutJiaiodFjkxQQDxHm8FQBeTqDnSmKsQWn7ldMRzTn2zJaQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.2.5 + chalk: 4.1.2 + jest-get-type: 27.3.1 + jest-util: 27.3.1 + pretty-format: 27.3.1 + dev: true + /jest-environment-jsdom/26.6.2: resolution: {integrity: sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==} engines: {node: '>= 10.14.2'} @@ -15725,6 +17813,24 @@ packages: - utf-8-validate dev: true + /jest-environment-jsdom/27.3.1: + resolution: {integrity: sha512-3MOy8qMzIkQlfb3W1TfrD7uZHj+xx8Olix5vMENkj5djPmRqndMaXtpnaZkxmxM+Qc3lo+yVzJjzuXbCcZjAlg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.3.1 + '@jest/fake-timers': 27.3.1 + '@jest/types': 27.2.5 + '@types/node': 16.11.6 + jest-mock: 27.3.0 + jest-util: 27.3.1 + jsdom: 16.7.0 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + dev: true + /jest-environment-node/26.6.2: resolution: {integrity: sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==} engines: {node: '>= 10.14.2'} @@ -15737,18 +17843,35 @@ packages: jest-util: 26.6.2 dev: true + /jest-environment-node/27.3.1: + resolution: {integrity: sha512-T89F/FgkE8waqrTSA7/ydMkcc52uYPgZZ6q8OaZgyiZkJb5QNNCF6oPZjH9IfPFfcc9uBWh1574N0kY0pSvTXw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.3.1 + '@jest/fake-timers': 27.3.1 + '@jest/types': 27.2.5 + '@types/node': 16.11.6 + jest-mock: 27.3.0 + jest-util: 27.3.1 + dev: true + /jest-get-type/26.3.0: resolution: {integrity: sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==} engines: {node: '>= 10.14.2'} dev: true + /jest-get-type/27.3.1: + resolution: {integrity: sha512-+Ilqi8hgHSAdhlQ3s12CAVNd8H96ZkQBfYoXmArzZnOfAtVAJEiPDBirjByEblvG/4LPJmkL+nBqPO3A1YJAEg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: true + /jest-haste-map/26.6.2: resolution: {integrity: sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==} engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 '@types/graceful-fs': 4.1.5 - '@types/node': 14.17.10 + '@types/node': 16.11.6 anymatch: 3.1.2 fb-watchman: 2.0.1 graceful-fs: 4.2.8 @@ -15758,7 +17881,27 @@ packages: jest-worker: 26.6.2 micromatch: 4.0.4 sane: 4.1.0 - walker: 1.0.7 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /jest-haste-map/27.3.1: + resolution: {integrity: sha512-lYfNZIzwPccDJZIyk9Iz5iQMM/MH56NIIcGj7AFU1YyA4ewWFBl8z+YPJuSCRML/ee2cCt2y3W4K3VXPT6Nhzg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.2.5 + '@types/graceful-fs': 4.1.5 + '@types/node': 16.11.6 + anymatch: 3.1.2 + fb-watchman: 2.0.1 + graceful-fs: 4.2.8 + jest-regex-util: 27.0.6 + jest-serializer: 27.0.6 + jest-util: 27.3.1 + jest-worker: 27.3.1 + micromatch: 4.0.4 + walker: 1.0.8 optionalDependencies: fsevents: 2.3.2 dev: true @@ -15793,6 +17936,32 @@ packages: - utf-8-validate dev: true + /jest-jasmine2/27.3.1: + resolution: {integrity: sha512-WK11ZUetDQaC09w4/j7o4FZDUIp+4iYWH/Lik34Pv7ukL+DuXFGdnmmi7dT58J2ZYKFB5r13GyE0z3NPeyJmsg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/traverse': 7.16.0 + '@jest/environment': 27.3.1 + '@jest/source-map': 27.0.6 + '@jest/test-result': 27.3.1 + '@jest/types': 27.2.5 + '@types/node': 16.11.6 + chalk: 4.1.2 + co: 4.6.0 + expect: 27.3.1 + is-generator-fn: 2.1.0 + jest-each: 27.3.1 + jest-matcher-utils: 27.3.1 + jest-message-util: 27.3.1 + jest-runtime: 27.3.1 + jest-snapshot: 27.3.1 + jest-util: 27.3.1 + pretty-format: 27.3.1 + throat: 6.0.1 + transitivePeerDependencies: + - supports-color + dev: true + /jest-leak-detector/26.6.2: resolution: {integrity: sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==} engines: {node: '>= 10.14.2'} @@ -15801,6 +17970,14 @@ packages: pretty-format: 26.6.2 dev: true + /jest-leak-detector/27.3.1: + resolution: {integrity: sha512-78QstU9tXbaHzwlRlKmTpjP9k4Pvre5l0r8Spo4SbFFVy/4Abg9I6ZjHwjg2QyKEAMg020XcjP+UgLZIY50yEg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + jest-get-type: 27.3.1 + pretty-format: 27.3.1 + dev: true + /jest-matcher-utils/26.6.2: resolution: {integrity: sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==} engines: {node: '>= 10.14.2'} @@ -15811,6 +17988,16 @@ packages: pretty-format: 26.6.2 dev: true + /jest-matcher-utils/27.3.1: + resolution: {integrity: sha512-hX8N7zXS4k+8bC1Aj0OWpGb7D3gIXxYvPNK1inP5xvE4ztbz3rc4AkI6jGVaerepBnfWB17FL5lWFJT3s7qo8w==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + chalk: 4.1.2 + jest-diff: 27.3.1 + jest-get-type: 27.3.1 + pretty-format: 27.3.1 + dev: true + /jest-message-util/26.6.2: resolution: {integrity: sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==} engines: {node: '>= 10.14.2'} @@ -15841,6 +18028,21 @@ packages: stack-utils: 2.0.3 dev: true + /jest-message-util/27.3.1: + resolution: {integrity: sha512-bh3JEmxsTZ/9rTm0jQrPElbY2+y48Rw2t47uMfByNyUVR+OfPh4anuyKsGqsNkXk/TI4JbLRZx+7p7Hdt6q1yg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/code-frame': 7.16.0 + '@jest/types': 27.2.5 + '@types/stack-utils': 2.0.1 + chalk: 4.1.2 + graceful-fs: 4.2.8 + micromatch: 4.0.4 + pretty-format: 27.3.1 + slash: 3.0.0 + stack-utils: 2.0.5 + dev: true + /jest-mock/26.6.2: resolution: {integrity: sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==} engines: {node: '>= 10.14.2'} @@ -15849,6 +18051,14 @@ packages: '@types/node': 14.17.10 dev: true + /jest-mock/27.3.0: + resolution: {integrity: sha512-ziZiLk0elZOQjD08bLkegBzv5hCABu/c8Ytx45nJKkysQwGaonvmTxwjLqEA4qGdasq9o2I8/HtdGMNnVsMTGw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.2.5 + '@types/node': 16.11.6 + dev: true + /jest-pnp-resolver/1.2.2_jest-resolve@26.6.2: resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} engines: {node: '>=6'} @@ -15861,6 +18071,18 @@ packages: jest-resolve: 26.6.2 dev: true + /jest-pnp-resolver/1.2.2_jest-resolve@27.3.1: + resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + dependencies: + jest-resolve: 27.3.1 + dev: true + /jest-preset-preact/4.0.2_9b3f24ae35a87c3c82fffbe3fdf70e1e: resolution: {integrity: sha512-Grgu1scmHcNcU9pKOS4FX8pVPxfqmlKCc6SWkOEg17JiBhvYjVdyxsPw22v/P98iYc6Y+357JSoh5f0lyASr1Q==} peerDependencies: @@ -15884,6 +18106,29 @@ packages: - supports-color dev: true + /jest-preset-preact/4.0.5_726380f5f23d12d9b6cc402fef7b8b84: + resolution: {integrity: sha512-MnU7mfpnwopJkdx0WoEyRmrNDIvRN+w6sOur0zEhaRYYMo0gJM7UdZHWTV8k6uo0+ypY+m0kQW6kMukUx4v8JQ==} + peerDependencies: + jest: 26.x || 27.x + preact: 10.x + preact-render-to-string: 5.x + dependencies: + '@babel/core': 7.16.0 + '@babel/plugin-proposal-class-properties': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-react-jsx': 7.16.0_@babel+core@7.16.0 + '@babel/preset-env': 7.16.0_@babel+core@7.16.0 + '@babel/preset-typescript': 7.16.0_@babel+core@7.16.0 + babel-jest: 27.3.1_@babel+core@7.16.0 + identity-obj-proxy: 3.0.0 + isomorphic-unfetch: 3.1.0 + jest: 27.3.1 + jest-watch-typeahead: 0.6.5_jest@27.3.1 + preact: 10.5.15 + preact-render-to-string: 5.1.19_preact@10.5.15 + transitivePeerDependencies: + - supports-color + dev: true + /jest-regex-util/26.0.0: resolution: {integrity: sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==} engines: {node: '>= 10.14.2'} @@ -15903,6 +18148,17 @@ packages: jest-snapshot: 26.6.2 dev: true + /jest-resolve-dependencies/27.3.1: + resolution: {integrity: sha512-X7iLzY8pCiYOnvYo2YrK3P9oSE8/3N2f4pUZMJ8IUcZnT81vlSonya1KTO9ZfKGuC+svE6FHK/XOb8SsoRUV1A==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.2.5 + jest-regex-util: 27.0.6 + jest-snapshot: 27.3.1 + transitivePeerDependencies: + - supports-color + dev: true + /jest-resolve/26.6.2: resolution: {integrity: sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==} engines: {node: '>= 10.14.2'} @@ -15917,6 +18173,22 @@ packages: slash: 3.0.0 dev: true + /jest-resolve/27.3.1: + resolution: {integrity: sha512-Dfzt25CFSPo3Y3GCbxynRBZzxq9AdyNN+x/v2IqYx6KVT5Z6me2Z/PsSGFSv3cOSUZqJ9pHxilao/I/m9FouLw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.2.5 + chalk: 4.1.2 + graceful-fs: 4.2.8 + jest-haste-map: 27.3.1 + jest-pnp-resolver: 1.2.2_jest-resolve@27.3.1 + jest-util: 27.3.1 + jest-validate: 27.3.1 + resolve: 1.20.0 + resolve.exports: 1.1.0 + slash: 3.0.0 + dev: true + /jest-runner/26.6.3: resolution: {integrity: sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==} engines: {node: '>= 10.14.2'} @@ -15949,6 +18221,39 @@ packages: - utf-8-validate dev: true + /jest-runner/27.3.1: + resolution: {integrity: sha512-r4W6kBn6sPr3TBwQNmqE94mPlYVn7fLBseeJfo4E2uCTmAyDFm2O5DYAQAFP7Q3YfiA/bMwg8TVsciP7k0xOww==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/console': 27.3.1 + '@jest/environment': 27.3.1 + '@jest/test-result': 27.3.1 + '@jest/transform': 27.3.1 + '@jest/types': 27.2.5 + '@types/node': 16.11.6 + chalk: 4.1.2 + emittery: 0.8.1 + exit: 0.1.2 + graceful-fs: 4.2.8 + jest-docblock: 27.0.6 + jest-environment-jsdom: 27.3.1 + jest-environment-node: 27.3.1 + jest-haste-map: 27.3.1 + jest-leak-detector: 27.3.1 + jest-message-util: 27.3.1 + jest-resolve: 27.3.1 + jest-runtime: 27.3.1 + jest-util: 27.3.1 + jest-worker: 27.3.1 + source-map-support: 0.5.20 + throat: 6.0.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + dev: true + /jest-runtime/26.6.3: resolution: {integrity: sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==} engines: {node: '>= 10.14.2'} @@ -15989,11 +18294,53 @@ packages: - utf-8-validate dev: true + /jest-runtime/27.3.1: + resolution: {integrity: sha512-qtO6VxPbS8umqhEDpjA4pqTkKQ1Hy4ZSi9mDVeE9Za7LKBo2LdW2jmT+Iod3XFaJqINikZQsn2wEi0j9wPRbLg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/console': 27.3.1 + '@jest/environment': 27.3.1 + '@jest/globals': 27.3.1 + '@jest/source-map': 27.0.6 + '@jest/test-result': 27.3.1 + '@jest/transform': 27.3.1 + '@jest/types': 27.2.5 + '@types/yargs': 16.0.4 + chalk: 4.1.2 + cjs-module-lexer: 1.2.2 + collect-v8-coverage: 1.0.1 + execa: 5.1.1 + exit: 0.1.2 + glob: 7.2.0 + graceful-fs: 4.2.8 + jest-haste-map: 27.3.1 + jest-message-util: 27.3.1 + jest-mock: 27.3.0 + jest-regex-util: 27.0.6 + jest-resolve: 27.3.1 + jest-snapshot: 27.3.1 + jest-util: 27.3.1 + jest-validate: 27.3.1 + slash: 3.0.0 + strip-bom: 4.0.0 + yargs: 16.2.0 + transitivePeerDependencies: + - supports-color + dev: true + /jest-serializer/26.6.2: resolution: {integrity: sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==} engines: {node: '>= 10.14.2'} dependencies: - '@types/node': 14.17.10 + '@types/node': 16.11.6 + graceful-fs: 4.2.8 + dev: true + + /jest-serializer/27.0.6: + resolution: {integrity: sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@types/node': 16.11.6 graceful-fs: 4.2.8 dev: true @@ -16019,12 +18366,44 @@ packages: semver: 7.3.5 dev: true + /jest-snapshot/27.3.1: + resolution: {integrity: sha512-APZyBvSgQgOT0XumwfFu7X3G5elj6TGhCBLbBdn3R1IzYustPGPE38F51dBWMQ8hRXa9je0vAdeVDtqHLvB6lg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/core': 7.16.0 + '@babel/generator': 7.16.0 + '@babel/parser': 7.16.2 + '@babel/plugin-syntax-typescript': 7.16.0_@babel+core@7.16.0 + '@babel/traverse': 7.16.0 + '@babel/types': 7.16.0 + '@jest/transform': 27.3.1 + '@jest/types': 27.2.5 + '@types/babel__traverse': 7.14.2 + '@types/prettier': 2.4.1 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.16.0 + chalk: 4.1.2 + expect: 27.3.1 + graceful-fs: 4.2.8 + jest-diff: 27.3.1 + jest-get-type: 27.3.1 + jest-haste-map: 27.3.1 + jest-matcher-utils: 27.3.1 + jest-message-util: 27.3.1 + jest-resolve: 27.3.1 + jest-util: 27.3.1 + natural-compare: 1.4.0 + pretty-format: 27.3.1 + semver: 7.3.5 + transitivePeerDependencies: + - supports-color + dev: true + /jest-util/26.6.2: resolution: {integrity: sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==} engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 - '@types/node': 14.17.10 + '@types/node': 16.11.6 chalk: 4.1.2 graceful-fs: 4.2.8 is-ci: 2.0.0 @@ -16043,6 +18422,18 @@ packages: picomatch: 2.3.0 dev: true + /jest-util/27.3.1: + resolution: {integrity: sha512-8fg+ifEH3GDryLQf/eKZck1DEs2YuVPBCMOaHQxVVLmQwl/CDhWzrvChTX4efLZxGrw+AA0mSXv78cyytBt/uw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.2.5 + '@types/node': 16.11.6 + chalk: 4.1.2 + ci-info: 3.2.0 + graceful-fs: 4.2.8 + picomatch: 2.3.0 + dev: true + /jest-validate/26.6.2: resolution: {integrity: sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==} engines: {node: '>= 10.14.2'} @@ -16055,6 +18446,18 @@ packages: pretty-format: 26.6.2 dev: true + /jest-validate/27.3.1: + resolution: {integrity: sha512-3H0XCHDFLA9uDII67Bwi1Vy7AqwA5HqEEjyy934lgVhtJ3eisw6ShOF1MDmRPspyikef5MyExvIm0/TuLzZ86Q==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.2.5 + camelcase: 6.2.0 + chalk: 4.1.2 + jest-get-type: 27.3.1 + leven: 3.1.0 + pretty-format: 27.3.1 + dev: true + /jest-watch-typeahead/0.6.4_jest@26.6.3: resolution: {integrity: sha512-tGxriteVJqonyrDj/xZHa0E2glKMiglMLQqISLCjxLUfeueRBh9VoRF2FKQyYO2xOqrWDTg7781zUejx411ZXA==} engines: {node: '>=10'} @@ -16071,6 +18474,22 @@ packages: strip-ansi: 6.0.0 dev: true + /jest-watch-typeahead/0.6.5_jest@27.3.1: + resolution: {integrity: sha512-GIbV6h37/isatMDtqZlA8Q5vC6T3w+5qdvtF+3LIkPc58zEWzbKmTHvlUIp3wvBm400RzrQWcVPcsAJqKWu7XQ==} + engines: {node: '>=10'} + peerDependencies: + jest: ^26.0.0 || ^27.0.0 + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + jest: 27.3.1 + jest-regex-util: 27.0.6 + jest-watcher: 27.3.1 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + dev: true + /jest-watcher/26.6.2: resolution: {integrity: sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==} engines: {node: '>= 10.14.2'} @@ -16097,15 +18516,37 @@ packages: string-length: 4.0.2 dev: true + /jest-watcher/27.3.1: + resolution: {integrity: sha512-9/xbV6chABsGHWh9yPaAGYVVKurWoP3ZMCv6h+O1v9/+pkOroigs6WzZ0e9gLP/njokUwM7yQhr01LKJVMkaZA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/test-result': 27.3.1 + '@jest/types': 27.2.5 + '@types/node': 16.11.6 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + jest-util: 27.3.1 + string-length: 4.0.2 + dev: true + /jest-worker/26.6.2: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 14.17.10 + '@types/node': 16.11.6 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true + /jest-worker/27.3.1: + resolution: {integrity: sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 16.11.6 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: true + /jest/26.6.3: resolution: {integrity: sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==} engines: {node: '>= 10.14.2'} @@ -16122,6 +18563,27 @@ packages: - utf-8-validate dev: true + /jest/27.3.1: + resolution: {integrity: sha512-U2AX0AgQGd5EzMsiZpYt8HyZ+nSVIh5ujQ9CPp9EQZJMjXIiSZpJNweZl0swatKRoqHWgGKM3zaSwm4Zaz87ng==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 27.3.1 + import-local: 3.0.3 + jest-cli: 27.3.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + dev: true + /jju/1.4.0: resolution: {integrity: sha1-o6vicYryQaKykE+EpiWXDzia4yo=} dev: true @@ -16142,6 +18604,13 @@ packages: esprima: 4.0.1 dev: true + /js-yaml/4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + /jsbn/0.1.1: resolution: {integrity: sha1-peZUwuWi3rXyAdls77yoDA7y9RM=} dev: true @@ -16187,7 +18656,7 @@ packages: optional: true dependencies: abab: 2.0.5 - acorn: 8.4.1 + acorn: 8.5.0 acorn-globals: 6.0.0 cssom: 0.4.4 cssstyle: 2.3.0 @@ -16211,7 +18680,7 @@ packages: whatwg-encoding: 1.0.5 whatwg-mimetype: 2.3.0 whatwg-url: 8.7.0 - ws: 7.5.3 + ws: 7.5.5 xml-name-validator: 3.0.0 transitivePeerDependencies: - bufferutil @@ -16345,6 +18814,14 @@ packages: object.assign: 4.1.2 dev: true + /jsx-ast-utils/3.2.1: + resolution: {integrity: sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==} + engines: {node: '>=4.0'} + dependencies: + array-includes: 3.1.4 + object.assign: 4.1.2 + dev: true + /junk/3.1.0: resolution: {integrity: sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==} engines: {node: '>=8'} @@ -16400,8 +18877,8 @@ packages: engines: {node: '>=6'} dev: true - /klona/2.0.4: - resolution: {integrity: sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==} + /klona/2.0.5: + resolution: {integrity: sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==} engines: {node: '>= 8'} dev: true @@ -16433,9 +18910,9 @@ packages: resolution: {integrity: sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ==} engines: {node: '>=6.0.0', npm: '>=6.0.0', yarn: '>=1.0.0'} dependencies: - '@babel/runtime': 7.15.3 + '@babel/runtime': 7.16.0 app-root-dir: 1.0.2 - core-js: 3.16.2 + core-js: 3.19.1 dotenv: 8.6.0 dotenv-expand: 5.1.0 dev: true @@ -16523,6 +19000,15 @@ packages: json5: 2.2.0 dev: true + /loader-utils/2.0.2: + resolution: {integrity: sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==} + engines: {node: '>=8.9.0'} + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.0 + dev: true + /local-access/1.1.0: resolution: {integrity: sha512-XfegD5pyTAfb+GY6chk283Ox5z8WexG56OvM06RWLpAc/UHozO8X6xAxEkIitZOtsSMM1Yr3DkHgW5W+onLhCw==} engines: {node: '>=6'} @@ -16582,6 +19068,10 @@ packages: resolution: {integrity: sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=} dev: true + /lodash.merge/4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + /lodash.sortby/4.7.0: resolution: {integrity: sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=} dev: true @@ -16694,10 +19184,10 @@ packages: semver: 6.3.0 dev: true - /makeerror/1.0.11: - resolution: {integrity: sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=} + /makeerror/1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} dependencies: - tmpl: 1.0.4 + tmpl: 1.0.5 dev: true /map-age-cleaner/0.1.3: @@ -16807,7 +19297,7 @@ packages: /mdast-util-to-hast/10.0.1: resolution: {integrity: sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==} dependencies: - '@types/mdast': 3.0.8 + '@types/mdast': 3.0.10 '@types/unist': 2.0.6 mdast-util-definitions: 4.0.0 mdurl: 1.0.1 @@ -16853,6 +19343,13 @@ packages: fs-monkey: 1.0.3 dev: true + /memfs/3.3.0: + resolution: {integrity: sha512-BEE62uMfKOavX3iG7GYX43QJ+hAeeWnwIAuJ/R6q96jaMtiLzhsxHJC8B1L7fK7Pt/vXDRwb3SG/yBpNGDPqzg==} + engines: {node: '>= 4.0.0'} + dependencies: + fs-monkey: 1.0.3 + dev: true + /memoizerific/1.11.3: resolution: {integrity: sha1-fIekZGREwy11Q4VwkF8tvRsagFo=} dependencies: @@ -16939,16 +19436,16 @@ packages: brorand: 1.1.0 dev: true - /mime-db/1.49.0: - resolution: {integrity: sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==} + /mime-db/1.50.0: + resolution: {integrity: sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==} engines: {node: '>= 0.6'} dev: true - /mime-types/2.1.32: - resolution: {integrity: sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==} + /mime-types/2.1.33: + resolution: {integrity: sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==} engines: {node: '>= 0.6'} dependencies: - mime-db: 1.49.0 + mime-db: 1.50.0 dev: true /mime/1.6.0: @@ -16963,6 +19460,12 @@ packages: hasBin: true dev: true + /mime/2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + dev: true + /mimic-fn/2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -16990,7 +19493,7 @@ packages: peerDependencies: webpack: ^4.4.0 || ^5.0.0 dependencies: - loader-utils: 2.0.0 + loader-utils: 2.0.2 schema-utils: 3.1.1 webpack: 4.46.0 webpack-sources: 1.4.3 @@ -17023,21 +19526,21 @@ packages: resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} engines: {node: '>= 8'} dependencies: - minipass: 3.1.3 + minipass: 3.1.5 dev: true /minipass-flush/1.0.5: resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} engines: {node: '>= 8'} dependencies: - minipass: 3.1.3 + minipass: 3.1.5 dev: true /minipass-pipeline/1.2.4: resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} engines: {node: '>=8'} dependencies: - minipass: 3.1.3 + minipass: 3.1.5 dev: true /minipass/2.9.0: @@ -17047,8 +19550,8 @@ packages: yallist: 3.1.1 dev: true - /minipass/3.1.3: - resolution: {integrity: sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==} + /minipass/3.1.5: + resolution: {integrity: sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==} engines: {node: '>=8'} dependencies: yallist: 4.0.0 @@ -17064,7 +19567,7 @@ packages: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} dependencies: - minipass: 3.1.3 + minipass: 3.1.5 yallist: 4.0.0 dev: true @@ -17120,8 +19623,8 @@ packages: run-queue: 1.0.3 dev: true - /mri/1.1.6: - resolution: {integrity: sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==} + /mri/1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} dev: true @@ -17153,10 +19656,6 @@ packages: thunky: 1.1.0 dev: true - /mute-stream/0.0.8: - resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - dev: true - /nan/2.15.0: resolution: {integrity: sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==} dev: true @@ -17168,6 +19667,12 @@ packages: hasBin: true dev: true + /nanoid/3.1.30: + resolution: {integrity: sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + /nanomatch/1.2.13: resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} engines: {node: '>=0.10.0'} @@ -17239,6 +19744,13 @@ packages: resolution: {integrity: sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==} engines: {node: 4.x || >=6.0.0} + /node-fetch/2.6.6: + resolution: {integrity: sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==} + engines: {node: 4.x || >=6.0.0} + dependencies: + whatwg-url: 5.0.0 + dev: true + /node-fetch/3.0.0: resolution: {integrity: sha512-bKMI+C7/T/SPU1lKnbQbwxptpCrG9ashG+VkytmXCPZyuM9jB6VU+hY0oi4lC8LxTtAeWdckNCTa3nrGsAdA3Q==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -17312,6 +19824,10 @@ packages: resolution: {integrity: sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==} dev: true + /node-releases/1.1.77: + resolution: {integrity: sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==} + dev: true + /node-releases/2.0.1: resolution: {integrity: sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==} dev: true @@ -17401,7 +19917,7 @@ packages: /npmlog/4.1.2: resolution: {integrity: sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==} dependencies: - are-we-there-yet: 1.1.5 + are-we-there-yet: 1.1.7 console-control-strings: 1.1.0 gauge: 2.7.4 set-blocking: 2.0.0 @@ -17413,8 +19929,8 @@ packages: boolbase: 1.0.0 dev: true - /nth-check/2.0.0: - resolution: {integrity: sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==} + /nth-check/2.0.1: + resolution: {integrity: sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==} dependencies: boolbase: 1.0.0 dev: true @@ -17534,13 +20050,13 @@ packages: has: 1.0.3 dev: true - /object.entries/1.1.4: - resolution: {integrity: sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==} + /object.entries/1.1.5: + resolution: {integrity: sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.1.3 - es-abstract: 1.18.5 + es-abstract: 1.19.1 dev: true /object.fromentries/2.0.3: @@ -17553,23 +20069,29 @@ packages: has: 1.0.3 dev: true - /object.fromentries/2.0.4: - resolution: {integrity: sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==} + /object.fromentries/2.0.5: + resolution: {integrity: sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.1.3 - es-abstract: 1.18.5 - has: 1.0.3 + es-abstract: 1.19.1 dev: true - /object.getownpropertydescriptors/2.1.2: - resolution: {integrity: sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==} + /object.getownpropertydescriptors/2.1.3: + resolution: {integrity: sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==} engines: {node: '>= 0.8'} dependencies: call-bind: 1.0.2 define-properties: 1.1.3 - es-abstract: 1.18.5 + es-abstract: 1.19.1 + dev: true + + /object.hasown/1.1.0: + resolution: {integrity: sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==} + dependencies: + define-properties: 1.1.3 + es-abstract: 1.19.1 dev: true /object.pick/1.3.0: @@ -17589,13 +20111,13 @@ packages: has: 1.0.3 dev: true - /object.values/1.1.4: - resolution: {integrity: sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==} + /object.values/1.1.5: + resolution: {integrity: sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.1.3 - es-abstract: 1.18.5 + es-abstract: 1.19.1 dev: true /obuf/1.1.2: @@ -17658,9 +20180,9 @@ packages: peerDependencies: webpack: ^4.0.0 dependencies: - cssnano: 5.0.8_postcss@8.3.6 + cssnano: 5.0.9_postcss@8.3.11 last-call-webpack-plugin: 3.0.0 - postcss: 8.3.6 + postcss: 8.3.11 webpack: 4.46.0 dev: true @@ -17668,7 +20190,7 @@ packages: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} engines: {node: '>= 0.8.0'} dependencies: - deep-is: 0.1.3 + deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.3.0 prelude-ls: 1.1.2 @@ -17680,7 +20202,7 @@ packages: resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} engines: {node: '>= 0.8.0'} dependencies: - deep-is: 0.1.3 + deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 @@ -17695,11 +20217,11 @@ packages: bl: 4.1.0 chalk: 4.1.2 cli-cursor: 3.1.0 - cli-spinners: 2.6.0 + cli-spinners: 2.6.1 is-interactive: 1.0.0 is-unicode-supported: 0.1.0 log-symbols: 4.1.0 - strip-ansi: 6.0.0 + strip-ansi: 6.0.1 wcwidth: 1.0.1 dev: true @@ -17713,11 +20235,6 @@ packages: resolution: {integrity: sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=} dev: true - /os-tmpdir/1.0.2: - resolution: {integrity: sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=} - engines: {node: '>=0.10.0'} - dev: true - /overlayscrollbars/1.13.1: resolution: {integrity: sha512-gIQfzgGgu1wy80EB4/6DaJGHMEGmizq27xHIESrzXq0Y/J0Ay1P3DWk6tuVmEPIZH15zaBlxeEJOqdJKmowHCQ==} dev: true @@ -17947,7 +20464,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.14.5 + '@babel/code-frame': 7.16.0 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.1.6 @@ -18076,6 +20593,10 @@ packages: resolution: {integrity: sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=} dev: true + /picocolors/0.2.1: + resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} + dev: true + /picocolors/1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} dev: true @@ -18178,20 +20699,20 @@ packages: resolution: {integrity: sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==} dev: true - /pnp-webpack-plugin/1.6.4_typescript@3.9.10: + /pnp-webpack-plugin/1.6.4_typescript@4.3.5: resolution: {integrity: sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==} engines: {node: '>=6'} dependencies: - ts-pnp: 1.2.0_typescript@4.4.3 + ts-pnp: 1.2.0_typescript@4.3.5 transitivePeerDependencies: - typescript dev: true - /pnp-webpack-plugin/1.6.4_typescript@4.3.5: + /pnp-webpack-plugin/1.6.4_typescript@4.4.4: resolution: {integrity: sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==} engines: {node: '>=6'} dependencies: - ts-pnp: 1.2.0_typescript@4.3.5 + ts-pnp: 1.2.0_typescript@4.4.4 transitivePeerDependencies: - typescript dev: true @@ -18205,6 +20726,15 @@ packages: - typescript dev: true + /pnp-webpack-plugin/1.7.0_typescript@4.4.4: + resolution: {integrity: sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==} + engines: {node: '>=6'} + dependencies: + ts-pnp: 1.2.0_typescript@4.4.4 + transitivePeerDependencies: + - typescript + dev: true + /po2json/0.4.5: resolution: {integrity: sha1-R7spUtoy1Yob4vJWpZjuvAt0URg=} engines: {node: '>= 0.8.0'} @@ -18218,7 +20748,7 @@ packages: resolution: {integrity: sha512-ocPAcVBUOryJEKe0z2KLd1l9EBa1r5mSwlKpExmrLzsnIzJo4axsoU9O2BjOTkDGDT4mZ0WFE5XKTlR3nLnZOA==} engines: {node: '>=10'} dependencies: - '@babel/runtime': 7.15.3 + '@babel/runtime': 7.16.0 dev: true /portfinder/1.0.28: @@ -18238,17 +20768,17 @@ packages: /postcss-calc/7.0.5: resolution: {integrity: sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==} dependencies: - postcss: 7.0.36 + postcss: 7.0.39 postcss-selector-parser: 6.0.6 postcss-value-parser: 4.1.0 dev: true - /postcss-calc/8.0.0_postcss@8.3.6: + /postcss-calc/8.0.0_postcss@8.3.11: resolution: {integrity: sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==} peerDependencies: postcss: ^8.2.2 dependencies: - postcss: 8.3.6 + postcss: 8.3.11 postcss-selector-parser: 6.0.6 postcss-value-parser: 4.1.0 dev: true @@ -18257,23 +20787,23 @@ packages: resolution: {integrity: sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==} engines: {node: '>=6.9.0'} dependencies: - browserslist: 4.16.8 + browserslist: 4.17.6 color: 3.2.1 has: 1.0.3 - postcss: 7.0.36 + postcss: 7.0.39 postcss-value-parser: 3.3.1 dev: true - /postcss-colormin/5.2.0_postcss@8.3.6: - resolution: {integrity: sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw==} + /postcss-colormin/5.2.1_postcss@8.3.11: + resolution: {integrity: sha512-VVwMrEYLcHYePUYV99Ymuoi7WhKrMGy/V9/kTS0DkCoJYmmjdOMneyhzYUxcNgteKDVbrewOkSM7Wje/MFwxzA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.16.8 + browserslist: 4.17.6 caniuse-api: 3.0.0 - colord: 2.7.0 - postcss: 8.3.6 + colord: 2.9.1 + postcss: 8.3.11 postcss-value-parser: 4.1.0 dev: true @@ -18281,17 +20811,17 @@ packages: resolution: {integrity: sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==} engines: {node: '>=6.9.0'} dependencies: - postcss: 7.0.36 + postcss: 7.0.39 postcss-value-parser: 3.3.1 dev: true - /postcss-convert-values/5.0.1_postcss@8.3.6: - resolution: {integrity: sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg==} + /postcss-convert-values/5.0.2_postcss@8.3.11: + resolution: {integrity: sha512-KQ04E2yadmfa1LqXm7UIDwW1ftxU/QWZmz6NKnHnUvJ3LEYbbcX6i329f/ig+WnEByHegulocXrECaZGLpL8Zg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.3.6 + postcss: 8.3.11 postcss-value-parser: 4.1.0 dev: true @@ -18299,70 +20829,70 @@ packages: resolution: {integrity: sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==} engines: {node: '>=6.9.0'} dependencies: - postcss: 7.0.36 + postcss: 7.0.39 dev: true - /postcss-discard-comments/5.0.1_postcss@8.3.6: + /postcss-discard-comments/5.0.1_postcss@8.3.11: resolution: {integrity: sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.3.6 + postcss: 8.3.11 dev: true /postcss-discard-duplicates/4.0.2: resolution: {integrity: sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==} engines: {node: '>=6.9.0'} dependencies: - postcss: 7.0.36 + postcss: 7.0.39 dev: true - /postcss-discard-duplicates/5.0.1_postcss@8.3.6: + /postcss-discard-duplicates/5.0.1_postcss@8.3.11: resolution: {integrity: sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.3.6 + postcss: 8.3.11 dev: true /postcss-discard-empty/4.0.1: resolution: {integrity: sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==} engines: {node: '>=6.9.0'} dependencies: - postcss: 7.0.36 + postcss: 7.0.39 dev: true - /postcss-discard-empty/5.0.1_postcss@8.3.6: + /postcss-discard-empty/5.0.1_postcss@8.3.11: resolution: {integrity: sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.3.6 + postcss: 8.3.11 dev: true /postcss-discard-overridden/4.0.1: resolution: {integrity: sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==} engines: {node: '>=6.9.0'} dependencies: - postcss: 7.0.36 + postcss: 7.0.39 dev: true - /postcss-discard-overridden/5.0.1_postcss@8.3.6: + /postcss-discard-overridden/5.0.1_postcss@8.3.11: resolution: {integrity: sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.3.6 + postcss: 8.3.11 dev: true /postcss-flexbugs-fixes/4.2.1: resolution: {integrity: sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==} dependencies: - postcss: 7.0.36 + postcss: 7.0.39 dev: true /postcss-load-config/3.1.0: @@ -18379,17 +20909,49 @@ packages: yaml: 1.10.2 dev: true - /postcss-loader/4.3.0_postcss@7.0.36+webpack@4.46.0: + /postcss-loader/4.3.0_postcss@7.0.36+webpack@4.46.0: + resolution: {integrity: sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==} + engines: {node: '>= 10.13.0'} + peerDependencies: + postcss: ^7.0.0 || ^8.0.1 + webpack: ^4.0.0 || ^5.0.0 + dependencies: + cosmiconfig: 7.0.1 + klona: 2.0.5 + loader-utils: 2.0.2 + postcss: 7.0.36 + schema-utils: 3.1.1 + semver: 7.3.5 + webpack: 4.46.0 + dev: true + + /postcss-loader/4.3.0_postcss@7.0.39+webpack@4.46.0: + resolution: {integrity: sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==} + engines: {node: '>= 10.13.0'} + peerDependencies: + postcss: ^7.0.0 || ^8.0.1 + webpack: ^4.0.0 || ^5.0.0 + dependencies: + cosmiconfig: 7.0.1 + klona: 2.0.5 + loader-utils: 2.0.2 + postcss: 7.0.39 + schema-utils: 3.1.1 + semver: 7.3.5 + webpack: 4.46.0 + dev: true + + /postcss-loader/4.3.0_postcss@8.3.11+webpack@4.46.0: resolution: {integrity: sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==} engines: {node: '>= 10.13.0'} peerDependencies: postcss: ^7.0.0 || ^8.0.1 webpack: ^4.0.0 || ^5.0.0 dependencies: - cosmiconfig: 7.0.0 - klona: 2.0.4 - loader-utils: 2.0.0 - postcss: 7.0.36 + cosmiconfig: 7.0.1 + klona: 2.0.5 + loader-utils: 2.0.2 + postcss: 8.3.11 schema-utils: 3.1.1 semver: 7.3.5 webpack: 4.46.0 @@ -18402,9 +20964,9 @@ packages: postcss: ^7.0.0 || ^8.0.1 webpack: ^4.0.0 || ^5.0.0 dependencies: - cosmiconfig: 7.0.0 - klona: 2.0.4 - loader-utils: 2.0.0 + cosmiconfig: 7.0.1 + klona: 2.0.5 + loader-utils: 2.0.2 postcss: 8.3.6 schema-utils: 3.1.1 semver: 7.3.5 @@ -18416,45 +20978,45 @@ packages: engines: {node: '>=6.9.0'} dependencies: css-color-names: 0.0.4 - postcss: 7.0.36 + postcss: 7.0.39 postcss-value-parser: 3.3.1 stylehacks: 4.0.3 dev: true - /postcss-merge-longhand/5.0.2_postcss@8.3.6: + /postcss-merge-longhand/5.0.2_postcss@8.3.11: resolution: {integrity: sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: css-color-names: 1.0.1 - postcss: 8.3.6 + postcss: 8.3.11 postcss-value-parser: 4.1.0 - stylehacks: 5.0.1_postcss@8.3.6 + stylehacks: 5.0.1_postcss@8.3.11 dev: true /postcss-merge-rules/4.0.3: resolution: {integrity: sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==} engines: {node: '>=6.9.0'} dependencies: - browserslist: 4.16.8 + browserslist: 4.17.6 caniuse-api: 3.0.0 cssnano-util-same-parent: 4.0.1 - postcss: 7.0.36 + postcss: 7.0.39 postcss-selector-parser: 3.1.2 vendors: 1.0.4 dev: true - /postcss-merge-rules/5.0.2_postcss@8.3.6: + /postcss-merge-rules/5.0.2_postcss@8.3.11: resolution: {integrity: sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.16.8 + browserslist: 4.17.6 caniuse-api: 3.0.0 - cssnano-utils: 2.0.1_postcss@8.3.6 - postcss: 8.3.6 + cssnano-utils: 2.0.1_postcss@8.3.11 + postcss: 8.3.11 postcss-selector-parser: 6.0.6 vendors: 1.0.4 dev: true @@ -18463,17 +21025,17 @@ packages: resolution: {integrity: sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==} engines: {node: '>=6.9.0'} dependencies: - postcss: 7.0.36 + postcss: 7.0.39 postcss-value-parser: 3.3.1 dev: true - /postcss-minify-font-values/5.0.1_postcss@8.3.6: + /postcss-minify-font-values/5.0.1_postcss@8.3.11: resolution: {integrity: sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.3.6 + postcss: 8.3.11 postcss-value-parser: 4.1.0 dev: true @@ -18483,19 +21045,19 @@ packages: dependencies: cssnano-util-get-arguments: 4.0.0 is-color-stop: 1.1.0 - postcss: 7.0.36 + postcss: 7.0.39 postcss-value-parser: 3.3.1 dev: true - /postcss-minify-gradients/5.0.2_postcss@8.3.6: - resolution: {integrity: sha512-7Do9JP+wqSD6Prittitt2zDLrfzP9pqKs2EcLX7HJYxsxCOwrrcLt4x/ctQTsiOw+/8HYotAoqNkrzItL19SdQ==} + /postcss-minify-gradients/5.0.3_postcss@8.3.11: + resolution: {integrity: sha512-Z91Ol22nB6XJW+5oe31+YxRsYooxOdFKcbOqY/V8Fxse1Y3vqlNRpi1cxCqoACZTQEhl+xvt4hsbWiV5R+XI9Q==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - colord: 2.7.0 - cssnano-utils: 2.0.1_postcss@8.3.6 - postcss: 8.3.6 + colord: 2.9.1 + cssnano-utils: 2.0.1_postcss@8.3.11 + postcss: 8.3.11 postcss-value-parser: 4.1.0 dev: true @@ -18504,23 +21066,23 @@ packages: engines: {node: '>=6.9.0'} dependencies: alphanum-sort: 1.0.2 - browserslist: 4.16.8 + browserslist: 4.17.6 cssnano-util-get-arguments: 4.0.0 - postcss: 7.0.36 + postcss: 7.0.39 postcss-value-parser: 3.3.1 uniqs: 2.0.0 dev: true - /postcss-minify-params/5.0.1_postcss@8.3.6: + /postcss-minify-params/5.0.1_postcss@8.3.11: resolution: {integrity: sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: alphanum-sort: 1.0.2 - browserslist: 4.16.8 - cssnano-utils: 2.0.1_postcss@8.3.6 - postcss: 8.3.6 + browserslist: 4.17.6 + cssnano-utils: 2.0.1_postcss@8.3.11 + postcss: 8.3.11 postcss-value-parser: 4.1.0 uniqs: 2.0.0 dev: true @@ -18531,18 +21093,18 @@ packages: dependencies: alphanum-sort: 1.0.2 has: 1.0.3 - postcss: 7.0.36 + postcss: 7.0.39 postcss-selector-parser: 3.1.2 dev: true - /postcss-minify-selectors/5.1.0_postcss@8.3.6: + /postcss-minify-selectors/5.1.0_postcss@8.3.11: resolution: {integrity: sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: alphanum-sort: 1.0.2 - postcss: 8.3.6 + postcss: 8.3.11 postcss-selector-parser: 6.0.6 dev: true @@ -18550,16 +21112,16 @@ packages: resolution: {integrity: sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==} engines: {node: '>= 6'} dependencies: - postcss: 7.0.36 + postcss: 7.0.39 dev: true - /postcss-modules-extract-imports/3.0.0_postcss@8.3.6: + /postcss-modules-extract-imports/3.0.0_postcss@8.3.11: resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.3.6 + postcss: 8.3.11 dev: true /postcss-modules-local-by-default/3.0.3: @@ -18567,19 +21129,19 @@ packages: engines: {node: '>= 6'} dependencies: icss-utils: 4.1.1 - postcss: 7.0.36 + postcss: 7.0.39 postcss-selector-parser: 6.0.6 postcss-value-parser: 4.1.0 dev: true - /postcss-modules-local-by-default/4.0.0_postcss@8.3.6: + /postcss-modules-local-by-default/4.0.0_postcss@8.3.11: resolution: {integrity: sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0_postcss@8.3.6 - postcss: 8.3.6 + icss-utils: 5.1.0_postcss@8.3.11 + postcss: 8.3.11 postcss-selector-parser: 6.0.6 postcss-value-parser: 4.1.0 dev: true @@ -18588,17 +21150,17 @@ packages: resolution: {integrity: sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==} engines: {node: '>= 6'} dependencies: - postcss: 7.0.36 + postcss: 7.0.39 postcss-selector-parser: 6.0.6 dev: true - /postcss-modules-scope/3.0.0_postcss@8.3.6: + /postcss-modules-scope/3.0.0_postcss@8.3.11: resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.3.6 + postcss: 8.3.11 postcss-selector-parser: 6.0.6 dev: true @@ -18606,33 +21168,33 @@ packages: resolution: {integrity: sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==} dependencies: icss-utils: 4.1.1 - postcss: 7.0.36 + postcss: 7.0.39 dev: true - /postcss-modules-values/4.0.0_postcss@8.3.6: + /postcss-modules-values/4.0.0_postcss@8.3.11: resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0_postcss@8.3.6 - postcss: 8.3.6 + icss-utils: 5.1.0_postcss@8.3.11 + postcss: 8.3.11 dev: true /postcss-normalize-charset/4.0.1: resolution: {integrity: sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==} engines: {node: '>=6.9.0'} dependencies: - postcss: 7.0.36 + postcss: 7.0.39 dev: true - /postcss-normalize-charset/5.0.1_postcss@8.3.6: + /postcss-normalize-charset/5.0.1_postcss@8.3.11: resolution: {integrity: sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.3.6 + postcss: 8.3.11 dev: true /postcss-normalize-display-values/4.0.2: @@ -18640,18 +21202,18 @@ packages: engines: {node: '>=6.9.0'} dependencies: cssnano-util-get-match: 4.0.0 - postcss: 7.0.36 + postcss: 7.0.39 postcss-value-parser: 3.3.1 dev: true - /postcss-normalize-display-values/5.0.1_postcss@8.3.6: + /postcss-normalize-display-values/5.0.1_postcss@8.3.11: resolution: {integrity: sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - cssnano-utils: 2.0.1_postcss@8.3.6 - postcss: 8.3.6 + cssnano-utils: 2.0.1_postcss@8.3.11 + postcss: 8.3.11 postcss-value-parser: 4.1.0 dev: true @@ -18661,17 +21223,17 @@ packages: dependencies: cssnano-util-get-arguments: 4.0.0 has: 1.0.3 - postcss: 7.0.36 + postcss: 7.0.39 postcss-value-parser: 3.3.1 dev: true - /postcss-normalize-positions/5.0.1_postcss@8.3.6: + /postcss-normalize-positions/5.0.1_postcss@8.3.11: resolution: {integrity: sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.3.6 + postcss: 8.3.11 postcss-value-parser: 4.1.0 dev: true @@ -18681,18 +21243,18 @@ packages: dependencies: cssnano-util-get-arguments: 4.0.0 cssnano-util-get-match: 4.0.0 - postcss: 7.0.36 + postcss: 7.0.39 postcss-value-parser: 3.3.1 dev: true - /postcss-normalize-repeat-style/5.0.1_postcss@8.3.6: + /postcss-normalize-repeat-style/5.0.1_postcss@8.3.11: resolution: {integrity: sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - cssnano-utils: 2.0.1_postcss@8.3.6 - postcss: 8.3.6 + cssnano-utils: 2.0.1_postcss@8.3.11 + postcss: 8.3.11 postcss-value-parser: 4.1.0 dev: true @@ -18701,17 +21263,17 @@ packages: engines: {node: '>=6.9.0'} dependencies: has: 1.0.3 - postcss: 7.0.36 + postcss: 7.0.39 postcss-value-parser: 3.3.1 dev: true - /postcss-normalize-string/5.0.1_postcss@8.3.6: + /postcss-normalize-string/5.0.1_postcss@8.3.11: resolution: {integrity: sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.3.6 + postcss: 8.3.11 postcss-value-parser: 4.1.0 dev: true @@ -18720,18 +21282,18 @@ packages: engines: {node: '>=6.9.0'} dependencies: cssnano-util-get-match: 4.0.0 - postcss: 7.0.36 + postcss: 7.0.39 postcss-value-parser: 3.3.1 dev: true - /postcss-normalize-timing-functions/5.0.1_postcss@8.3.6: + /postcss-normalize-timing-functions/5.0.1_postcss@8.3.11: resolution: {integrity: sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - cssnano-utils: 2.0.1_postcss@8.3.6 - postcss: 8.3.6 + cssnano-utils: 2.0.1_postcss@8.3.11 + postcss: 8.3.11 postcss-value-parser: 4.1.0 dev: true @@ -18739,19 +21301,19 @@ packages: resolution: {integrity: sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==} engines: {node: '>=6.9.0'} dependencies: - browserslist: 4.16.8 - postcss: 7.0.36 + browserslist: 4.17.6 + postcss: 7.0.39 postcss-value-parser: 3.3.1 dev: true - /postcss-normalize-unicode/5.0.1_postcss@8.3.6: + /postcss-normalize-unicode/5.0.1_postcss@8.3.11: resolution: {integrity: sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.16.8 - postcss: 8.3.6 + browserslist: 4.17.6 + postcss: 8.3.11 postcss-value-parser: 4.1.0 dev: true @@ -18761,11 +21323,11 @@ packages: dependencies: is-absolute-url: 2.1.0 normalize-url: 3.3.0 - postcss: 7.0.36 + postcss: 7.0.39 postcss-value-parser: 3.3.1 dev: true - /postcss-normalize-url/5.0.2_postcss@8.3.6: + /postcss-normalize-url/5.0.2_postcss@8.3.11: resolution: {integrity: sha512-k4jLTPUxREQ5bpajFQZpx8bCF2UrlqOTzP9kEqcEnOfwsRshWs2+oAFIHfDQB8GO2PaUaSE0NlTAYtbluZTlHQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: @@ -18773,7 +21335,7 @@ packages: dependencies: is-absolute-url: 3.0.3 normalize-url: 6.1.0 - postcss: 8.3.6 + postcss: 8.3.11 postcss-value-parser: 4.1.0 dev: true @@ -18781,17 +21343,17 @@ packages: resolution: {integrity: sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==} engines: {node: '>=6.9.0'} dependencies: - postcss: 7.0.36 + postcss: 7.0.39 postcss-value-parser: 3.3.1 dev: true - /postcss-normalize-whitespace/5.0.1_postcss@8.3.6: + /postcss-normalize-whitespace/5.0.1_postcss@8.3.11: resolution: {integrity: sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.3.6 + postcss: 8.3.11 postcss-value-parser: 4.1.0 dev: true @@ -18800,18 +21362,18 @@ packages: engines: {node: '>=6.9.0'} dependencies: cssnano-util-get-arguments: 4.0.0 - postcss: 7.0.36 + postcss: 7.0.39 postcss-value-parser: 3.3.1 dev: true - /postcss-ordered-values/5.0.2_postcss@8.3.6: + /postcss-ordered-values/5.0.2_postcss@8.3.11: resolution: {integrity: sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - cssnano-utils: 2.0.1_postcss@8.3.6 - postcss: 8.3.6 + cssnano-utils: 2.0.1_postcss@8.3.11 + postcss: 8.3.11 postcss-value-parser: 4.1.0 dev: true @@ -18819,21 +21381,21 @@ packages: resolution: {integrity: sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==} engines: {node: '>=6.9.0'} dependencies: - browserslist: 4.16.8 + browserslist: 4.17.6 caniuse-api: 3.0.0 has: 1.0.3 - postcss: 7.0.36 + postcss: 7.0.39 dev: true - /postcss-reduce-initial/5.0.1_postcss@8.3.6: + /postcss-reduce-initial/5.0.1_postcss@8.3.11: resolution: {integrity: sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.16.8 + browserslist: 4.17.6 caniuse-api: 3.0.0 - postcss: 8.3.6 + postcss: 8.3.11 dev: true /postcss-reduce-transforms/4.0.2: @@ -18842,18 +21404,18 @@ packages: dependencies: cssnano-util-get-match: 4.0.0 has: 1.0.3 - postcss: 7.0.36 + postcss: 7.0.39 postcss-value-parser: 3.3.1 dev: true - /postcss-reduce-transforms/5.0.1_postcss@8.3.6: + /postcss-reduce-transforms/5.0.1_postcss@8.3.11: resolution: {integrity: sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - cssnano-utils: 2.0.1_postcss@8.3.6 - postcss: 8.3.6 + cssnano-utils: 2.0.1_postcss@8.3.11 + postcss: 8.3.11 postcss-value-parser: 4.1.0 dev: true @@ -18878,20 +21440,20 @@ packages: resolution: {integrity: sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==} engines: {node: '>=6.9.0'} dependencies: - postcss: 7.0.36 + postcss: 7.0.39 postcss-value-parser: 3.3.1 svgo: 1.3.2 dev: true - /postcss-svgo/5.0.2_postcss@8.3.6: - resolution: {integrity: sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A==} + /postcss-svgo/5.0.3_postcss@8.3.11: + resolution: {integrity: sha512-41XZUA1wNDAZrQ3XgWREL/M2zSw8LJPvb5ZWivljBsUQAGoEKMYm6okHsTjJxKYI4M75RQEH4KYlEM52VwdXVA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.3.6 + postcss: 8.3.11 postcss-value-parser: 4.1.0 - svgo: 2.4.0 + svgo: 2.8.0 dev: true /postcss-unique-selectors/4.0.1: @@ -18899,18 +21461,18 @@ packages: engines: {node: '>=6.9.0'} dependencies: alphanum-sort: 1.0.2 - postcss: 7.0.36 + postcss: 7.0.39 uniqs: 2.0.0 dev: true - /postcss-unique-selectors/5.0.1_postcss@8.3.6: + /postcss-unique-selectors/5.0.1_postcss@8.3.11: resolution: {integrity: sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: alphanum-sort: 1.0.2 - postcss: 8.3.6 + postcss: 8.3.11 postcss-selector-parser: 6.0.6 uniqs: 2.0.0 dev: true @@ -18932,6 +21494,23 @@ packages: supports-color: 6.1.0 dev: true + /postcss/7.0.39: + resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} + engines: {node: '>=6.0.0'} + dependencies: + picocolors: 0.2.1 + source-map: 0.6.1 + dev: true + + /postcss/8.3.11: + resolution: {integrity: sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.1.30 + picocolors: 1.0.0 + source-map-js: 0.6.2 + dev: true + /postcss/8.3.6: resolution: {integrity: sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==} engines: {node: ^10 || ^12 || >=14} @@ -19050,8 +21629,8 @@ packages: - webpack-command dev: true - /preact-cli/3.2.2_8d1b4ee21ca5a56b4aabd4a3e659b2d7: - resolution: {integrity: sha512-42aUanAb/AqHHvnfb/IwJw9UhY5iuHkGRBv3TrTsQMrq0Ee8Z84r+HS8wjGI0aHHb0R8tnHI0hhllWgmNhjB/Q==} + /preact-cli/3.3.1_bb0f676d04cdcea3d812adbcf5208138: + resolution: {integrity: sha512-ODvjErOqVtbmfS2pc1M3lGm4ffwAXcZiYrijRItnIPLDjRQjIRIz81aW4iRws1OPdozc4nGIJKCAJxUAigfrjw==} engines: {node: '>=12'} hasBin: true peerDependencies: @@ -19068,25 +21647,24 @@ packages: stylus-loader: optional: true dependencies: - '@babel/core': 7.15.0 - '@babel/plugin-proposal-class-properties': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-proposal-decorators': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-proposal-object-rest-spread': 7.14.7_@babel+core@7.15.0 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.15.0 - '@babel/plugin-transform-object-assign': 7.14.5_@babel+core@7.15.0 - '@babel/plugin-transform-react-jsx': 7.14.9_@babel+core@7.15.0 - '@babel/preset-env': 7.15.0_@babel+core@7.15.0 - '@babel/preset-typescript': 7.15.0_@babel+core@7.15.0 - '@preact/async-loader': 3.0.1_preact@10.5.14 + '@babel/core': 7.16.0 + '@babel/plugin-proposal-class-properties': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-decorators': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-proposal-object-rest-spread': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.16.0 + '@babel/plugin-transform-object-assign': 7.16.0_@babel+core@7.16.0 + '@babel/plugin-transform-react-jsx': 7.16.0_@babel+core@7.16.0 + '@babel/preset-env': 7.16.0_@babel+core@7.16.0 + '@babel/preset-typescript': 7.16.0_@babel+core@7.16.0 + '@preact/async-loader': 3.0.1_preact@10.5.15 '@prefresh/babel-plugin': 0.4.1 - '@prefresh/webpack': 3.3.2_b4d84c08f02729896cbfdece19209372 - autoprefixer: 10.3.1_postcss@8.3.6 + '@prefresh/webpack': 3.3.2_7b676851c8ef63627f17dcf4dd469116 + autoprefixer: 10.4.0_postcss@8.3.11 babel-esm-plugin: 0.9.0_webpack@4.46.0 - babel-loader: 8.2.2_be352a5a80662835a7707f972edfcfde + babel-loader: 8.2.3_1bd60a6cd0f7024f034efd75ae733a3f babel-plugin-macros: 3.1.0 babel-plugin-transform-react-remove-prop-types: 0.4.24 - browserlist: 1.0.1 - browserslist: 4.16.8 + browserslist: 4.17.6 compression-webpack-plugin: 6.1.1_webpack@4.46.0 console-clear: 1.1.1 copy-webpack-plugin: 6.4.1_webpack@4.46.0 @@ -19096,59 +21674,58 @@ packages: ejs-loader: 0.5.0 envinfo: 7.8.1 esm: 3.2.25 - fast-async: 6.3.8 file-loader: 6.2.0_webpack@4.46.0 fork-ts-checker-webpack-plugin: 4.1.6 get-port: 5.1.1 gittar: 0.1.1 - glob: 7.1.7 + glob: 7.2.0 html-webpack-exclude-assets-plugin: 0.0.7 html-webpack-plugin: 3.2.0_webpack@4.46.0 ip: 1.1.5 isomorphic-unfetch: 3.1.0 kleur: 4.1.4 - loader-utils: 2.0.0 + loader-utils: 2.0.2 mini-css-extract-plugin: 1.6.2_webpack@4.46.0 minimatch: 3.0.4 native-url: 0.3.4 optimize-css-assets-webpack-plugin: 6.0.1_webpack@4.46.0 ora: 5.4.1 - pnp-webpack-plugin: 1.7.0_typescript@4.4.3 - postcss: 8.3.6 + pnp-webpack-plugin: 1.7.0_typescript@4.4.4 + postcss: 8.3.11 postcss-load-config: 3.1.0 - postcss-loader: 4.3.0_postcss@8.3.6+webpack@4.46.0 - preact: 10.5.14 - preact-render-to-string: 5.1.19_preact@10.5.14 + postcss-loader: 4.3.0_postcss@8.3.11+webpack@4.46.0 + preact: 10.5.15 + preact-render-to-string: 5.1.19_preact@10.5.15 progress-bar-webpack-plugin: 2.1.0_webpack@4.46.0 - promise-polyfill: 8.2.0 - prompts: 2.4.1 + promise-polyfill: 8.2.1 + prompts: 2.4.2 raw-loader: 4.0.2_webpack@4.46.0 react-refresh: 0.10.0 rimraf: 3.0.2 sade: 1.7.4 - sass-loader: 10.2.0_sass@1.32.13 + sass-loader: 10.2.0_sass@1.43.4 size-plugin: 3.0.0_webpack@4.46.0 source-map: 0.7.3 stack-trace: 0.0.10 style-loader: 2.0.0_webpack@4.46.0 terser-webpack-plugin: 4.2.3_webpack@4.46.0 - typescript: 4.4.3 + typescript: 4.4.4 update-notifier: 5.1.0 url-loader: 4.1.1_file-loader@6.2.0+webpack@4.46.0 validate-npm-package-name: 3.0.0 webpack: 4.46.0 - webpack-bundle-analyzer: 4.4.2 + webpack-bundle-analyzer: 4.5.0 webpack-dev-server: 3.11.2_webpack@4.46.0 webpack-fix-style-only-entries: 0.6.1 webpack-merge: 5.8.0 webpack-plugin-replace: 1.2.0 which: 2.0.2 - workbox-cacheable-response: 6.2.4 - workbox-core: 6.2.4 - workbox-precaching: 6.2.4 - workbox-routing: 6.2.4 - workbox-strategies: 6.2.4 - workbox-webpack-plugin: 6.2.4_webpack@4.46.0 + workbox-cacheable-response: 6.3.0 + workbox-core: 6.3.0 + workbox-precaching: 6.3.0 + workbox-routing: 6.3.0 + workbox-strategies: 6.3.0 + workbox-webpack-plugin: 6.3.0_webpack@4.46.0 transitivePeerDependencies: - '@types/babel__core' - bufferutil @@ -19167,6 +21744,16 @@ packages: dependencies: preact: 10.5.14 pretty-format: 3.8.0 + dev: true + + /preact-render-to-string/5.1.19_preact@10.5.15: + resolution: {integrity: sha512-bj8sn/oytIKO6RtOGSS/1+5CrQyRSC99eLUnEVbqUa6MzJX5dYh7wu9bmT0d6lm/Vea21k9KhCQwvr2sYN3rrQ==} + peerDependencies: + preact: '>=10' + dependencies: + preact: 10.5.15 + pretty-format: 3.8.0 + dev: false /preact-router/3.2.1_preact@10.5.14: resolution: {integrity: sha512-KEN2VN1DxUlTwzW5IFkF13YIA2OdQ2OvgJTkQREF+AA2NrHRLaGbB68EjS4IeZOa1shvQ1FvEm3bSLta4sXBhg==} @@ -19176,10 +21763,22 @@ packages: preact: 10.5.14 dev: false + /preact-router/3.2.1_preact@10.5.15: + resolution: {integrity: sha512-KEN2VN1DxUlTwzW5IFkF13YIA2OdQ2OvgJTkQREF+AA2NrHRLaGbB68EjS4IeZOa1shvQ1FvEm3bSLta4sXBhg==} + peerDependencies: + preact: '>=10' + dependencies: + preact: 10.5.15 + dev: false + /preact/10.5.14: resolution: {integrity: sha512-KojoltCrshZ099ksUZ2OQKfbH66uquFoxHSbnwKbTJHeQNvx42EmC7wQVWNuDt6vC5s3nudRHFtKbpY4ijKlaQ==} dev: false + /preact/10.5.15: + resolution: {integrity: sha512-5chK29n6QcJc3m1lVrKQSQ+V7K1Gb8HeQY6FViQ5AxCAEGu3DaHffWNDkC9+miZgsLvbvU9rxbV1qinGHMHzqA==} + dev: false + /prelude-ls/1.1.2: resolution: {integrity: sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=} engines: {node: '>= 0.8.0'} @@ -19238,6 +21837,16 @@ packages: react-is: 17.0.2 dev: true + /pretty-format/27.3.1: + resolution: {integrity: sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.2.5 + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + dev: true + /pretty-format/3.8.0: resolution: {integrity: sha1-v77VbV6ad2ZF9LH/eqGjrE+jw4U=} @@ -19253,8 +21862,8 @@ packages: parse-ms: 2.1.0 dev: true - /prismjs/1.24.1: - resolution: {integrity: sha512-mNPsedLuk90RVJioIky8ANZEwYm5w9LcvCXrxHlwf4fNVSn8jEipMybMkWUyyF0JhnC+C4VcOVSBuHRKs1L5Ow==} + /prismjs/1.25.0: + resolution: {integrity: sha512-WCjJHl1KEWbnkQom1+SzftbtXMKQoezOCYs5rECqMN+jP+apI7ftoflyqigqzopSO3hMhTEb0mFClA8lkolgEg==} dev: true /process-nextick-args/2.0.1: @@ -19296,25 +21905,29 @@ packages: resolution: {integrity: sha512-k/TC0mIcPVF6yHhUvwAp7cvL6I2fFV7TzF1DuGPI8mBh4QQazf36xCKEHKTZKRysEoTQoQdKyP25J8MPJp7j5g==} dev: true - /promise.allsettled/1.0.4: - resolution: {integrity: sha512-o73CbvQh/OnPFShxHcHxk0baXR2a1m4ozb85ha0H14VEoi/EJJLa9mnPfEWJx9RjA9MLfhdjZ8I6HhWtBa64Ag==} + /promise-polyfill/8.2.1: + resolution: {integrity: sha512-3p9zj0cEHbp7NVUxEYUWjQlffXqnXaZIMPkAO7HhFh8u5636xLRDHOUo2vpWSK0T2mqm6fKLXYn1KP6PAZ2gKg==} + dev: true + + /promise.allsettled/1.0.5: + resolution: {integrity: sha512-tVDqeZPoBC0SlzJHzWGZ2NKAguVq2oiYj7gbggbiTvH2itHohijTp7njOUA0aQ/nl+0lr/r6egmhoYu63UZ/pQ==} engines: {node: '>= 0.4'} dependencies: - array.prototype.map: 1.0.3 + array.prototype.map: 1.0.4 call-bind: 1.0.2 define-properties: 1.1.3 - es-abstract: 1.18.5 + es-abstract: 1.19.1 get-intrinsic: 1.1.1 iterate-value: 1.0.2 dev: true - /promise.prototype.finally/3.1.2: - resolution: {integrity: sha512-A2HuJWl2opDH0EafgdjwEw7HysI8ff/n4lW4QEVBCUXFk9QeGecBWv0Deph0UmLe3tTNYegz8MOjsVuE6SMoJA==} + /promise.prototype.finally/3.1.3: + resolution: {integrity: sha512-EXRF3fC9/0gz4qkt/f5EP5iW4kj9oFpBICNpCNOb/52+8nlHIX07FPLbi/q4qYBQ1xZqivMzTpNQSnArVASolQ==} engines: {node: '>= 0.4'} dependencies: + call-bind: 1.0.2 define-properties: 1.1.3 - es-abstract: 1.18.5 - function-bind: 1.1.1 + es-abstract: 1.19.1 dev: true /prompts/2.4.0: @@ -19333,6 +21946,14 @@ packages: sisteransi: 1.0.5 dev: true + /prompts/2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + dev: true + /prop-types/15.7.2: resolution: {integrity: sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==} dependencies: @@ -19527,7 +22148,7 @@ packages: peerDependencies: webpack: ^4.0.0 || ^5.0.0 dependencies: - loader-utils: 2.0.0 + loader-utils: 2.0.2 schema-utils: 3.1.1 webpack: 4.46.0 dev: true @@ -19559,6 +22180,23 @@ packages: react-dom: 16.14.0_react@16.14.0 dev: true + /react-colorful/5.5.0: + resolution: {integrity: sha512-BuzrlrM0ylg7coPkXOrRqlf2BgHLw5L44sybbr9Lg4xy7w9e5N7fGYbojOO0s8J0nvrM3PERN2rVFkvSa24lnQ==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + dev: true + + /react-colorful/5.5.0_react-dom@16.14.0+react@16.14.0: + resolution: {integrity: sha512-BuzrlrM0ylg7coPkXOrRqlf2BgHLw5L44sybbr9Lg4xy7w9e5N7fGYbojOO0s8J0nvrM3PERN2rVFkvSa24lnQ==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + react: 16.14.0 + react-dom: 16.14.0_react@16.14.0 + dev: true + /react-dev-utils/11.0.4: resolution: {integrity: sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A==} engines: {node: '>=10'} @@ -19608,6 +22246,28 @@ packages: prop-types: 15.7.2 dev: true + /react-draggable/4.4.4: + resolution: {integrity: sha512-6e0WdcNLwpBx/YIDpoyd2Xb04PB0elrDrulKUgdrIlwuYvxh5Ok9M+F8cljm8kPXXs43PmMzek9RrB1b7mLMqA==} + peerDependencies: + react: '>= 16.3.0' + react-dom: '>= 16.3.0' + dependencies: + clsx: 1.1.1 + prop-types: 15.7.2 + dev: true + + /react-draggable/4.4.4_react-dom@16.14.0+react@16.14.0: + resolution: {integrity: sha512-6e0WdcNLwpBx/YIDpoyd2Xb04PB0elrDrulKUgdrIlwuYvxh5Ok9M+F8cljm8kPXXs43PmMzek9RrB1b7mLMqA==} + peerDependencies: + react: '>= 16.3.0' + react-dom: '>= 16.3.0' + dependencies: + clsx: 1.1.1 + prop-types: 15.7.2 + react: 16.14.0 + react-dom: 16.14.0_react@16.14.0 + dev: true + /react-element-to-jsx-string/14.3.2: resolution: {integrity: sha512-WZbvG72cjLXAxV7VOuSzuHEaI3RHj10DZu8EcKQpkKcAj7+qAkG5XUeSdX5FXrA0vPrlx0QsnAzZEBJwzV0e+w==} peerDependencies: @@ -19618,6 +22278,17 @@ packages: is-plain-object: 3.0.1 dev: true + /react-element-to-jsx-string/14.3.4: + resolution: {integrity: sha512-t4ZwvV6vwNxzujDQ+37bspnLwA4JlgUPWhLjBJWsNIDceAf6ZKUTCjdm08cN6WeZ5pTMKiCJkmAYnpmR4Bm+dg==} + peerDependencies: + react: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 + react-dom: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 + dependencies: + '@base2/pretty-print-object': 1.0.1 + is-plain-object: 5.0.0 + react-is: 17.0.2 + dev: true + /react-error-overlay/6.0.9: resolution: {integrity: sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==} dev: true @@ -19654,12 +22325,40 @@ packages: shallowequal: 1.1.0 dev: true + /react-helmet-async/1.1.2: + resolution: {integrity: sha512-LTTzDDkyIleT/JJ6T/uqx7Y8qi1EuPPSiJawQY/nHHz0h7SPDT6HxP1YDDQx/fzcVxCqpWEEMS3QdrSrNkJYhg==} + peerDependencies: + react: ^16.6.0 || ^17.0.0 + react-dom: ^16.6.0 || ^17.0.0 + dependencies: + '@babel/runtime': 7.16.0 + invariant: 2.2.4 + prop-types: 15.7.2 + react-fast-compare: 3.2.0 + shallowequal: 1.1.0 + dev: true + + /react-helmet-async/1.1.2_react-dom@16.14.0+react@16.14.0: + resolution: {integrity: sha512-LTTzDDkyIleT/JJ6T/uqx7Y8qi1EuPPSiJawQY/nHHz0h7SPDT6HxP1YDDQx/fzcVxCqpWEEMS3QdrSrNkJYhg==} + peerDependencies: + react: ^16.6.0 || ^17.0.0 + react-dom: ^16.6.0 || ^17.0.0 + dependencies: + '@babel/runtime': 7.16.0 + invariant: 2.2.4 + prop-types: 15.7.2 + react: 16.14.0 + react-dom: 16.14.0_react@16.14.0 + react-fast-compare: 3.2.0 + shallowequal: 1.1.0 + dev: true + /react-inspector/5.1.1: resolution: {integrity: sha512-GURDaYzoLbW8pMGXwYPDBIv6nqei4kK7LPRZ9q9HCZF54wqXz/dnylBp/kfE9XmekBhHvLDdcYeyIwSrvtOiWg==} peerDependencies: react: ^16.8.4 || ^17.0.0 dependencies: - '@babel/runtime': 7.15.3 + '@babel/runtime': 7.16.0 is-dom: 1.1.0 prop-types: 15.7.2 dev: true @@ -19682,9 +22381,9 @@ packages: react: ^16.6.0 || ^17.0.0 react-dom: ^16.6.0 || ^17.0.0 dependencies: - '@babel/runtime': 7.15.3 - '@popperjs/core': 2.9.3 - react-popper: 2.2.5_@popperjs+core@2.9.3 + '@babel/runtime': 7.16.0 + '@popperjs/core': 2.10.2 + react-popper: 2.2.5_@popperjs+core@2.10.2 dev: true /react-popper-tooltip/3.1.1_react-dom@16.14.0+react@16.14.0: @@ -19693,32 +22392,32 @@ packages: react: ^16.6.0 || ^17.0.0 react-dom: ^16.6.0 || ^17.0.0 dependencies: - '@babel/runtime': 7.15.3 - '@popperjs/core': 2.9.3 + '@babel/runtime': 7.16.0 + '@popperjs/core': 2.10.2 react: 16.14.0 react-dom: 16.14.0_react@16.14.0 - react-popper: 2.2.5_6bb145cab7dfe893f5ebfae476998f0c + react-popper: 2.2.5_20a330155a391a39c24da43184528906 dev: true - /react-popper/2.2.5_6bb145cab7dfe893f5ebfae476998f0c: + /react-popper/2.2.5_20a330155a391a39c24da43184528906: resolution: {integrity: sha512-kxGkS80eQGtLl18+uig1UIf9MKixFSyPxglsgLBxlYnyDf65BiY9B3nZSc6C9XUNDgStROB0fMQlTEz1KxGddw==} peerDependencies: '@popperjs/core': ^2.0.0 react: ^16.8.0 || ^17 dependencies: - '@popperjs/core': 2.9.3 + '@popperjs/core': 2.10.2 react: 16.14.0 react-fast-compare: 3.2.0 warning: 4.0.3 dev: true - /react-popper/2.2.5_@popperjs+core@2.9.3: + /react-popper/2.2.5_@popperjs+core@2.10.2: resolution: {integrity: sha512-kxGkS80eQGtLl18+uig1UIf9MKixFSyPxglsgLBxlYnyDf65BiY9B3nZSc6C9XUNDgStROB0fMQlTEz1KxGddw==} peerDependencies: '@popperjs/core': ^2.0.0 react: ^16.8.0 || ^17 dependencies: - '@popperjs/core': 2.9.3 + '@popperjs/core': 2.10.2 react-fast-compare: 3.2.0 warning: 4.0.3 dev: true @@ -19754,16 +22453,25 @@ packages: throttle-debounce: 3.0.1 dev: true + /react-sizeme/3.0.2: + resolution: {integrity: sha512-xOIAOqqSSmKlKFJLO3inBQBdymzDuXx4iuwkNcJmC96jeiOg5ojByvL+g3MW9LPEsojLbC6pf68zOfobK8IPlw==} + dependencies: + element-resize-detector: 1.2.3 + invariant: 2.2.4 + shallowequal: 1.1.0 + throttle-debounce: 3.0.1 + dev: true + /react-syntax-highlighter/13.5.3: resolution: {integrity: sha512-crPaF+QGPeHNIblxxCdf2Lg936NAHKhNhuMzRL3F9ct6aYXL3NcZtCL0Rms9+qVo6Y1EQLdXGypBNSbPL/r+qg==} peerDependencies: react: '>= 0.14.0' dependencies: - '@babel/runtime': 7.15.3 + '@babel/runtime': 7.16.0 highlight.js: 10.7.3 lowlight: 1.20.0 - prismjs: 1.24.1 - refractor: 3.4.0 + prismjs: 1.25.0 + refractor: 3.5.0 dev: true /react-syntax-highlighter/13.5.3_react@16.14.0: @@ -19771,12 +22479,12 @@ packages: peerDependencies: react: '>= 0.14.0' dependencies: - '@babel/runtime': 7.15.3 + '@babel/runtime': 7.16.0 highlight.js: 10.7.3 lowlight: 1.20.0 - prismjs: 1.24.1 + prismjs: 1.25.0 react: 16.14.0 - refractor: 3.4.0 + refractor: 3.5.0 dev: true /react-textarea-autosize/8.3.3: @@ -19785,7 +22493,7 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 dependencies: - '@babel/runtime': 7.15.3 + '@babel/runtime': 7.16.0 use-composed-ref: 1.1.0 use-latest: 1.2.0 transitivePeerDependencies: @@ -19798,7 +22506,7 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 dependencies: - '@babel/runtime': 7.15.3 + '@babel/runtime': 7.16.0 react: 16.14.0 use-composed-ref: 1.1.0_react@16.14.0 use-latest: 1.2.0_react@16.14.0 @@ -19854,7 +22562,7 @@ packages: /readable-stream/2.3.7: resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} dependencies: - core-util-is: 1.0.2 + core-util-is: 1.0.3 inherits: 2.0.4 isarray: 1.0.0 process-nextick-args: 2.0.1 @@ -19902,12 +22610,12 @@ packages: minimatch: 3.0.4 dev: true - /refractor/3.4.0: - resolution: {integrity: sha512-dBeD02lC5eytm9Gld2Mx0cMcnR+zhSnsTfPpWqFaMgUMJfC9A6bcN3Br/NaXrnBJcuxnLFR90k1jrkaSyV8umg==} + /refractor/3.5.0: + resolution: {integrity: sha512-QwPJd3ferTZ4cSPPjdP5bsYHMytwWYnAN5EEnLtGvkqp/FCCnGsBgxrm9EuIDnjUC3Uc/kETtvVi7fSIVC74Dg==} dependencies: hastscript: 6.0.0 parse-entities: 2.0.0 - prismjs: 1.24.1 + prismjs: 1.25.0 dev: true /regenerate-unicode-properties/8.2.0: @@ -19961,16 +22669,16 @@ packages: define-properties: 1.1.3 dev: true - /regexpp/2.0.1: - resolution: {integrity: sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==} - engines: {node: '>=6.5.0'} - dev: true - /regexpp/3.1.0: resolution: {integrity: sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==} engines: {node: '>=8'} dev: true + /regexpp/3.2.0: + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} + engines: {node: '>=8'} + dev: true + /regexpu-core/4.7.1: resolution: {integrity: sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==} engines: {node: '>=4'} @@ -20092,7 +22800,7 @@ packages: /remark-slug/6.1.0: resolution: {integrity: sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==} dependencies: - github-slugger: 1.3.0 + github-slugger: 1.4.0 mdast-util-to-string: 1.1.0 unist-util-visit: 2.0.3 dev: true @@ -20167,7 +22875,7 @@ packages: is-typedarray: 1.0.0 isstream: 0.1.2 json-stringify-safe: 5.0.1 - mime-types: 2.1.32 + mime-types: 2.1.33 oauth-sign: 0.9.0 performance-now: 2.1.0 qs: 6.5.2 @@ -20233,6 +22941,11 @@ packages: deprecated: https://github.com/lydell/resolve-url#deprecated dev: true + /resolve.exports/1.1.0: + resolution: {integrity: sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==} + engines: {node: '>=10'} + dev: true + /resolve/1.17.0: resolution: {integrity: sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==} dependencies: @@ -20249,7 +22962,14 @@ packages: /resolve/1.20.0: resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==} dependencies: - is-core-module: 2.6.0 + is-core-module: 2.8.0 + path-parse: 1.0.7 + dev: true + + /resolve/2.0.0-next.3: + resolution: {integrity: sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==} + dependencies: + is-core-module: 2.8.0 path-parse: 1.0.7 dev: true @@ -20264,7 +22984,7 @@ packages: engines: {node: '>=8'} dependencies: onetime: 5.1.2 - signal-exit: 3.0.3 + signal-exit: 3.0.5 dev: true /ret/0.1.15: @@ -20290,25 +23010,18 @@ packages: resolution: {integrity: sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=} dev: true - /rimraf/2.6.3: - resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} - hasBin: true - dependencies: - glob: 7.1.7 - dev: true - /rimraf/2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} hasBin: true dependencies: - glob: 7.1.7 + glob: 7.2.0 dev: true /rimraf/3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: - glob: 7.1.7 + glob: 7.2.0 dev: true /ripemd160/2.0.2: @@ -20418,31 +23131,43 @@ packages: dependencies: '@babel/code-frame': 7.12.13 jest-worker: 26.6.2 - rollup: 2.37.1 + rollup: 2.37.1 + serialize-javascript: 4.0.0 + terser: 5.4.0 + dev: true + + /rollup-plugin-terser/7.0.2_rollup@2.43.0: + resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + peerDependencies: + rollup: ^2.0.0 + dependencies: + '@babel/code-frame': 7.12.13 + jest-worker: 26.6.2 + rollup: 2.43.0 serialize-javascript: 4.0.0 terser: 5.4.0 dev: true - /rollup-plugin-terser/7.0.2_rollup@2.43.0: + /rollup-plugin-terser/7.0.2_rollup@2.56.2: resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} peerDependencies: rollup: ^2.0.0 dependencies: '@babel/code-frame': 7.12.13 jest-worker: 26.6.2 - rollup: 2.43.0 + rollup: 2.56.2 serialize-javascript: 4.0.0 terser: 5.4.0 dev: true - /rollup-plugin-terser/7.0.2_rollup@2.56.2: + /rollup-plugin-terser/7.0.2_rollup@2.59.0: resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} peerDependencies: rollup: ^2.0.0 dependencies: '@babel/code-frame': 7.12.13 jest-worker: 26.6.2 - rollup: 2.56.2 + rollup: 2.59.0 serialize-javascript: 4.0.0 terser: 5.4.0 dev: true @@ -20491,11 +23216,6 @@ packages: engines: {node: 6.* || >= 7.*} dev: true - /run-async/2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} - engines: {node: '>=0.12.0'} - dev: true - /run-parallel/1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -20508,18 +23228,11 @@ packages: aproba: 1.2.0 dev: true - /rxjs/6.6.7: - resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} - engines: {npm: '>=2.0.0'} - dependencies: - tslib: 1.14.1 - dev: true - /sade/1.7.4: resolution: {integrity: sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==} engines: {node: '>= 6'} dependencies: - mri: 1.1.6 + mri: 1.2.0 dev: true /safe-buffer/5.1.1: @@ -20558,10 +23271,10 @@ packages: fb-watchman: 2.0.1 micromatch: 3.1.10 minimist: 1.2.5 - walker: 1.0.7 + walker: 1.0.8 dev: true - /sass-loader/10.2.0_sass@1.32.13: + /sass-loader/10.2.0_sass@1.43.4: resolution: {integrity: sha512-kUceLzC1gIHz0zNJPpqRsJyisWatGYNFRmv2CKZK2/ngMJgLqxTbXwe/hJ85luyvZkgqU3VlJ33UVF2T/0g6mw==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -20577,16 +23290,16 @@ packages: sass: optional: true dependencies: - klona: 2.0.4 - loader-utils: 2.0.0 + klona: 2.0.5 + loader-utils: 2.0.2 neo-async: 2.6.2 - sass: 1.32.13 + sass: 1.43.4 schema-utils: 3.1.1 semver: 7.3.5 dev: true - /sass/1.32.13: - resolution: {integrity: sha512-dEgI9nShraqP7cXQH+lEXVf73WOPCse0QlFzSD8k+1TcOxCMwVXfQlr0jtoluZysQOyJGnfr21dLvYKDJq8HkA==} + /sass/1.43.4: + resolution: {integrity: sha512-/ptG7KE9lxpGSYiXn7Ar+lKOv37xfWsZRtFYal2QHNigyVQDx685VFT/h7ejVr+R8w7H4tmUgtulsKl5YpveOg==} engines: {node: '>=8.9.0'} hasBin: true dependencies: @@ -20765,7 +23478,7 @@ packages: debug: 2.6.9 escape-html: 1.0.3 http-errors: 1.6.3 - mime-types: 2.1.32 + mime-types: 2.1.33 parseurl: 1.3.3 dev: true @@ -20901,6 +23614,10 @@ packages: resolution: {integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==} dev: true + /signal-exit/3.0.5: + resolution: {integrity: sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==} + dev: true + /simple-swizzle/0.2.2: resolution: {integrity: sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=} dependencies: @@ -20918,7 +23635,7 @@ packages: local-access: 1.1.0 sade: 1.7.4 semiver: 1.1.0 - sirv: 1.0.14 + sirv: 1.0.18 tinydate: 1.3.0 dev: true @@ -20931,6 +23648,15 @@ packages: totalist: 1.1.0 dev: true + /sirv/1.0.18: + resolution: {integrity: sha512-f2AOPogZmXgJ9Ma2M22ZEhc1dNtRIzcEkiflMFeVTRq+OViOZMvH1IPMVOwrKaxpSaHioBJiDR0SluRqGa7atA==} + engines: {node: '>= 10'} + dependencies: + '@polka/url': 1.0.0-next.21 + mime: 2.6.0 + totalist: 1.1.0 + dev: true + /sisteransi/1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} dev: true @@ -20940,11 +23666,11 @@ packages: peerDependencies: webpack: '*' dependencies: - axios: 0.21.1 + axios: 0.21.4 chalk: 2.4.2 - ci-env: 1.16.0 + ci-env: 1.17.0 escape-string-regexp: 1.0.5 - glob: 7.1.7 + glob: 7.2.0 minimatch: 3.0.4 pretty-bytes: 5.6.0 util.promisify: 1.1.1 @@ -20963,15 +23689,6 @@ packages: engines: {node: '>=8'} dev: true - /slice-ansi/2.1.0: - resolution: {integrity: sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==} - engines: {node: '>=6'} - dependencies: - ansi-styles: 3.2.1 - astral-regex: 1.0.0 - is-fullwidth-code-point: 2.0.0 - dev: true - /slice-ansi/3.0.0: resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} engines: {node: '>=8'} @@ -21020,8 +23737,8 @@ packages: use: 3.1.1 dev: true - /sockjs-client/1.5.1: - resolution: {integrity: sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==} + /sockjs-client/1.5.2: + resolution: {integrity: sha512-ZzRxPBISQE7RpzlH4tKJMQbHM9pabHluk0WBaxAQ+wm/UieeBVBou0p4wVnSQGN9QmpAZygQ0cDIypWuqOFmFQ==} dependencies: debug: 3.2.7 eventsource: 1.1.0 @@ -21071,6 +23788,13 @@ packages: buffer-from: 1.1.2 source-map: 0.6.1 + /source-map-support/0.5.20: + resolution: {integrity: sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + /source-map-url/0.4.1: resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} dev: true @@ -21180,7 +23904,7 @@ packages: engines: {node: '>=0.10.0'} hasBin: true dependencies: - asn1: 0.2.4 + asn1: 0.2.6 assert-plus: 1.0.0 bcrypt-pbkdf: 1.0.2 dashdash: 1.14.1 @@ -21201,7 +23925,7 @@ packages: resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} engines: {node: '>= 8'} dependencies: - minipass: 3.1.3 + minipass: 3.1.5 dev: true /stable/0.1.8: @@ -21219,6 +23943,13 @@ packages: escape-string-regexp: 2.0.0 dev: true + /stack-utils/2.0.5: + resolution: {integrity: sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==} + engines: {node: '>=10'} + dependencies: + escape-string-regexp: 2.0.0 + dev: true + /state-toggle/1.0.3: resolution: {integrity: sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==} dev: true @@ -21251,10 +23982,10 @@ packages: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 dependencies: - '@storybook/addons': 6.3.7 - '@storybook/api': 6.3.7 - '@storybook/components': 6.3.7 - '@storybook/core-events': 6.3.7 + '@storybook/addons': 6.3.12 + '@storybook/api': 6.3.12 + '@storybook/components': 6.3.12 + '@storybook/core-events': 6.3.12 ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' @@ -21311,7 +24042,7 @@ packages: engines: {node: '>=10'} dependencies: char-regex: 1.0.2 - strip-ansi: 6.0.0 + strip-ansi: 6.0.1 dev: true /string-width/1.0.2: @@ -21350,6 +24081,15 @@ packages: strip-ansi: 6.0.0 dev: true + /string-width/4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + /string.prototype.matchall/4.0.3: resolution: {integrity: sha512-OBxYDA2ifZQ2e13cP82dWFMaCV9CGF8GzmN4fljBVw5O5wep0lu4gacm1OL6MjROoUnB8VbkWRThqkV2YFLNxw==} dependencies: @@ -21362,12 +24102,12 @@ packages: side-channel: 1.0.4 dev: true - /string.prototype.matchall/4.0.5: - resolution: {integrity: sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==} + /string.prototype.matchall/4.0.6: + resolution: {integrity: sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==} dependencies: call-bind: 1.0.2 define-properties: 1.1.3 - es-abstract: 1.18.5 + es-abstract: 1.19.1 get-intrinsic: 1.1.1 has-symbols: 1.0.2 internal-slot: 1.0.3 @@ -21375,31 +24115,31 @@ packages: side-channel: 1.0.4 dev: true - /string.prototype.padend/3.1.2: - resolution: {integrity: sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==} + /string.prototype.padend/3.1.3: + resolution: {integrity: sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.1.3 - es-abstract: 1.18.5 + es-abstract: 1.19.1 dev: true - /string.prototype.padstart/3.1.2: - resolution: {integrity: sha512-HDpngIP3pd0DeazrfqzuBrQZa+D2arKWquEHfGt5LzVjd+roLC3cjqVI0X8foaZz5rrrhcu8oJAQamW8on9dqw==} + /string.prototype.padstart/3.1.3: + resolution: {integrity: sha512-NZydyOMtYxpTjGqp0VN5PYUF/tsU15yDMZnUdj16qRUIUiMJkHHSDElYyQFrMu+/WloTpA7MQSiADhBicDfaoA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.1.3 - es-abstract: 1.18.5 + es-abstract: 1.19.1 dev: true - /string.prototype.trim/1.2.4: - resolution: {integrity: sha512-hWCk/iqf7lp0/AgTF7/ddO1IWtSNPASjlzCicV5irAVdE1grjsneK26YG6xACMBEdCvO8fUST0UzDMh/2Qy+9Q==} + /string.prototype.trim/1.2.5: + resolution: {integrity: sha512-Lnh17webJVsD6ECeovpVN17RlAKjmz4rF9S+8Y45CkMc/ufVpTkU3vZIyIC7sllQ1FCvObZnnCdNs/HXTUOTlg==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.1.3 - es-abstract: 1.18.5 + es-abstract: 1.19.1 dev: true /string.prototype.trimend/1.0.3: @@ -21475,7 +24215,14 @@ packages: resolution: {integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==} engines: {node: '>=8'} dependencies: - ansi-regex: 5.0.0 + ansi-regex: 5.0.1 + dev: true + + /strip-ansi/6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 dev: true /strip-bom/3.0.0: @@ -21519,7 +24266,7 @@ packages: peerDependencies: webpack: ^4.0.0 || ^5.0.0 dependencies: - loader-utils: 2.0.0 + loader-utils: 2.0.2 schema-utils: 2.7.1 webpack: 4.46.0 dev: true @@ -21530,7 +24277,7 @@ packages: peerDependencies: webpack: ^4.0.0 || ^5.0.0 dependencies: - loader-utils: 2.0.0 + loader-utils: 2.0.2 schema-utils: 3.1.1 webpack: 4.46.0 dev: true @@ -21545,19 +24292,19 @@ packages: resolution: {integrity: sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==} engines: {node: '>=6.9.0'} dependencies: - browserslist: 4.16.8 - postcss: 7.0.36 + browserslist: 4.17.6 + postcss: 7.0.39 postcss-selector-parser: 3.1.2 dev: true - /stylehacks/5.0.1_postcss@8.3.6: + /stylehacks/5.0.1_postcss@8.3.11: resolution: {integrity: sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.16.8 - postcss: 8.3.6 + browserslist: 4.17.6 + postcss: 8.3.11 postcss-selector-parser: 6.0.6 dev: true @@ -21597,6 +24344,13 @@ packages: has-flag: 4.0.0 dev: true + /supports-color/8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + dev: true + /supports-hyperlinks/2.2.0: resolution: {integrity: sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==} engines: {node: '>=8'} @@ -21619,24 +24373,24 @@ packages: csso: 4.2.0 js-yaml: 3.14.1 mkdirp: 0.5.5 - object.values: 1.1.4 + object.values: 1.1.5 sax: 1.2.4 stable: 0.1.8 unquote: 1.1.1 util.promisify: 1.0.1 dev: true - /svgo/2.4.0: - resolution: {integrity: sha512-W25S1UUm9Lm9VnE0TvCzL7aso/NCzDEaXLaElCUO/KaVitw0+IBicSVfM1L1c0YHK5TOFh73yQ2naCpVHEQ/OQ==} + /svgo/2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} engines: {node: '>=10.13.0'} hasBin: true dependencies: - '@trysound/sax': 0.1.1 - colorette: 1.3.0 + '@trysound/sax': 0.2.0 commander: 7.2.0 css-select: 4.1.3 css-tree: 1.1.3 csso: 4.2.0 + picocolors: 1.0.0 stable: 0.1.8 dev: true @@ -21651,17 +24405,7 @@ packages: call-bind: 1.0.2 get-symbol-description: 1.0.0 has-symbols: 1.0.2 - object.getownpropertydescriptors: 2.1.2 - dev: true - - /table/5.4.6: - resolution: {integrity: sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==} - engines: {node: '>=6.0.0'} - dependencies: - ajv: 6.12.6 - lodash: 4.17.21 - slice-ansi: 2.1.0 - string-width: 3.1.0 + object.getownpropertydescriptors: 2.1.3 dev: true /table/6.0.7: @@ -21697,13 +24441,13 @@ packages: yallist: 3.1.1 dev: true - /tar/6.1.10: - resolution: {integrity: sha512-kvvfiVvjGMxeUNB6MyYv5z7vhfFRwbwCXJAeL0/lnbrttBVqcMOnpHUf0X42LrPMR8mMpgapkJMchFH4FSHzNA==} + /tar/6.1.11: + resolution: {integrity: sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==} engines: {node: '>= 10'} dependencies: chownr: 2.0.0 fs-minipass: 2.1.0 - minipass: 3.1.3 + minipass: 3.1.5 minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 @@ -21712,7 +24456,7 @@ packages: /telejson/5.3.3: resolution: {integrity: sha512-PjqkJZpzEggA9TBpVtJi1LVptP7tYtXB6rEubwlHap76AMjzvOdKX41CxyaW7ahhzDU1aftXnMCx5kAPDZTQBA==} dependencies: - '@types/is-function': 1.0.0 + '@types/is-function': 1.0.1 global: 4.4.0 is-function: 1.0.2 is-regex: 1.1.4 @@ -21774,14 +24518,14 @@ packages: peerDependencies: webpack: ^4.0.0 || ^5.0.0 dependencies: - cacache: 15.2.0 - find-cache-dir: 3.3.1 + cacache: 15.3.0 + find-cache-dir: 3.3.2 jest-worker: 26.6.2 p-limit: 3.1.0 schema-utils: 3.1.1 serialize-javascript: 5.0.1 source-map: 0.6.1 - terser: 5.7.1 + terser: 5.9.0 webpack: 4.46.0 webpack-sources: 1.4.3 dev: true @@ -21793,7 +24537,7 @@ packages: dependencies: commander: 2.20.3 source-map: 0.6.1 - source-map-support: 0.5.19 + source-map-support: 0.5.20 dev: true /terser/5.4.0: @@ -21806,14 +24550,14 @@ packages: source-map-support: 0.5.19 dev: true - /terser/5.7.1: - resolution: {integrity: sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==} + /terser/5.9.0: + resolution: {integrity: sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==} engines: {node: '>=10'} hasBin: true dependencies: commander: 2.20.3 source-map: 0.7.3 - source-map-support: 0.5.19 + source-map-support: 0.5.20 dev: true /test-exclude/6.0.0: @@ -21821,7 +24565,7 @@ packages: engines: {node: '>=8'} dependencies: '@istanbuljs/schema': 0.1.3 - glob: 7.1.7 + glob: 7.2.0 minimatch: 3.0.4 dev: true @@ -21833,15 +24577,15 @@ packages: resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} dev: true + /throat/6.0.1: + resolution: {integrity: sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==} + dev: true + /throttle-debounce/3.0.1: resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==} engines: {node: '>=10'} dev: true - /through/2.3.8: - resolution: {integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=} - dev: true - /through2/2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: @@ -21882,15 +24626,8 @@ packages: engines: {node: '>=4'} dev: true - /tmp/0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} - dependencies: - os-tmpdir: 1.0.2 - dev: true - - /tmpl/1.0.4: - resolution: {integrity: sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=} + /tmpl/1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} dev: true /to-arraybuffer/1.0.1: @@ -21979,6 +24716,10 @@ packages: universalify: 0.1.2 dev: true + /tr46/0.0.3: + resolution: {integrity: sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=} + dev: true + /tr46/1.0.1: resolution: {integrity: sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=} dependencies: @@ -22049,6 +24790,18 @@ packages: typescript: 4.4.3 dev: true + /ts-pnp/1.2.0_typescript@4.4.4: + resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==} + engines: {node: '>=6'} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + typescript: 4.4.4 + dev: true + /tsconfig-paths/3.9.0: resolution: {integrity: sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==} dependencies: @@ -22073,24 +24826,24 @@ packages: /tslib/2.3.1: resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} - /tsutils/3.19.1_typescript@3.9.10: + /tsutils/3.19.1_typescript@4.1.3: resolution: {integrity: sha512-GEdoBf5XI324lu7ycad7s6laADfnAqCw6wLGI+knxvw9vsIYBaJfYdmeCEG3FMMUiSm3OGgNb+m6utsWf5h9Vw==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 3.9.10 + typescript: 4.1.3 dev: true - /tsutils/3.19.1_typescript@4.1.3: - resolution: {integrity: sha512-GEdoBf5XI324lu7ycad7s6laADfnAqCw6wLGI+knxvw9vsIYBaJfYdmeCEG3FMMUiSm3OGgNb+m6utsWf5h9Vw==} + /tsutils/3.21.0_typescript@4.4.4: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 4.1.3 + typescript: 4.4.4 dev: true /tty-browserify/0.0.0: @@ -22166,7 +24919,7 @@ packages: engines: {node: '>= 0.6'} dependencies: media-typer: 0.3.0 - mime-types: 2.1.32 + mime-types: 2.1.33 dev: true /typedarray-to-buffer/3.1.5: @@ -22205,12 +24958,6 @@ packages: typescript: 4.1.3 dev: true - /typescript/3.9.10: - resolution: {integrity: sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: true - /typescript/4.1.3: resolution: {integrity: sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg==} engines: {node: '>=4.2.0'} @@ -22460,7 +25207,7 @@ packages: resolution: {integrity: sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==} engines: {node: '>=10'} dependencies: - boxen: 5.0.1 + boxen: 5.1.2 chalk: 4.1.2 configstore: 5.0.1 has-yarn: 2.1.0 @@ -22502,8 +25249,8 @@ packages: optional: true dependencies: file-loader: 6.2.0_webpack@4.46.0 - loader-utils: 2.0.0 - mime-types: 2.1.32 + loader-utils: 2.0.2 + mime-types: 2.1.33 schema-utils: 3.1.1 webpack: 4.46.0 dev: true @@ -22606,16 +25353,16 @@ packages: resolution: {integrity: sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==} dependencies: define-properties: 1.1.3 - object.getownpropertydescriptors: 2.1.2 + object.getownpropertydescriptors: 2.1.3 dev: true /util.promisify/1.0.1: resolution: {integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==} dependencies: define-properties: 1.1.3 - es-abstract: 1.18.5 + es-abstract: 1.19.1 has-symbols: 1.0.2 - object.getownpropertydescriptors: 2.1.2 + object.getownpropertydescriptors: 2.1.3 dev: true /util.promisify/1.1.1: @@ -22625,7 +25372,7 @@ packages: define-properties: 1.1.3 for-each: 0.3.3 has-symbols: 1.0.2 - object.getownpropertydescriptors: 2.1.2 + object.getownpropertydescriptors: 2.1.3 dev: true /util/0.10.3: @@ -22669,6 +25416,10 @@ packages: resolution: {integrity: sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==} dev: true + /v8-compile-cache/2.3.0: + resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} + dev: true + /v8-to-istanbul/7.1.2: resolution: {integrity: sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==} engines: {node: '>=10.10.0'} @@ -22678,6 +25429,15 @@ packages: source-map: 0.7.3 dev: true + /v8-to-istanbul/8.1.0: + resolution: {integrity: sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==} + engines: {node: '>=10.12.0'} + dependencies: + '@types/istanbul-lib-coverage': 2.0.3 + convert-source-map: 1.8.0 + source-map: 0.7.3 + dev: true + /validate-npm-package-license/3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: @@ -22759,10 +25519,10 @@ packages: xml-name-validator: 3.0.0 dev: true - /walker/1.0.7: - resolution: {integrity: sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=} + /walker/1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: - makeerror: 1.0.11 + makeerror: 1.0.12 dev: true /warning/4.0.3: @@ -22809,6 +25569,10 @@ packages: engines: {node: '>= 8'} dev: false + /webidl-conversions/3.0.1: + resolution: {integrity: sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=} + dev: true + /webidl-conversions/4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} dev: true @@ -22842,6 +25606,25 @@ packages: - utf-8-validate dev: true + /webpack-bundle-analyzer/4.5.0: + resolution: {integrity: sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ==} + engines: {node: '>= 10.13.0'} + hasBin: true + dependencies: + acorn: 8.5.0 + acorn-walk: 8.2.0 + chalk: 4.1.2 + commander: 7.2.0 + gzip-size: 6.0.0 + lodash: 4.17.21 + opener: 1.5.2 + sirv: 1.0.18 + ws: 7.5.5 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + /webpack-dev-middleware/3.7.3_webpack@4.46.0: resolution: {integrity: sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==} engines: {node: '>= 6'} @@ -22849,7 +25632,7 @@ packages: webpack: ^4.0.0 || ^5.0.0 dependencies: memory-fs: 0.4.1 - mime: 2.5.2 + mime: 2.6.0 mkdirp: 0.5.5 range-parser: 1.2.1 webpack: 4.46.0 @@ -22891,7 +25674,7 @@ packages: semver: 6.3.0 serve-index: 1.9.1 sockjs: 0.3.21 - sockjs-client: 1.5.1 + sockjs-client: 1.5.2 spdy: 4.0.2_supports-color@6.1.0 strip-ansi: 3.0.1 supports-color: 6.1.0 @@ -22925,6 +25708,15 @@ packages: strip-ansi: 3.0.1 dev: true + /webpack-hot-middleware/2.25.1: + resolution: {integrity: sha512-Koh0KyU/RPYwel/khxbsDz9ibDivmUbrRuKSSQvW42KSDdO4w23WI3SkHpSUKHE76LrFnnM/L7JCrpBwu8AXYw==} + dependencies: + ansi-html-community: 0.0.8 + html-entities: 2.3.2 + querystring: 0.2.1 + strip-ansi: 6.0.1 + dev: true + /webpack-log/2.0.0: resolution: {integrity: sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==} engines: {node: '>= 6'} @@ -23026,6 +25818,13 @@ packages: resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} dev: true + /whatwg-url/5.0.0: + resolution: {integrity: sha1-lmRU6HZUYuN2RNNib2dCzotwll0=} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: true + /whatwg-url/7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} dependencies: @@ -23072,8 +25871,8 @@ packages: isexe: 2.0.0 dev: true - /wide-align/1.1.3: - resolution: {integrity: sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==} + /wide-align/1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} dependencies: string-width: 1.0.2 dev: true @@ -23082,7 +25881,7 @@ packages: resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} engines: {node: '>=8'} dependencies: - string-width: 4.2.2 + string-width: 4.2.3 dev: true /wildcard/2.0.0: @@ -23105,12 +25904,25 @@ packages: workbox-core: 6.2.4 dev: true + /workbox-background-sync/6.3.0: + resolution: {integrity: sha512-79Wznt6oO8xMmLiErRS4zENUEldFHj1/5IiuHsY3NgGRN5rJdvGW6hz+RERhWzoB7rd/vXyAQdKYahGdsiYG1A==} + dependencies: + idb: 6.1.5 + workbox-core: 6.3.0 + dev: true + /workbox-broadcast-update/6.2.4: resolution: {integrity: sha512-0EpML2lbxNkiZUoap4BJDA0Hfz36MhtUd/rRhFvF6YWoRbTQ8tc6tMaRgM1EBIUmIN2OX9qQlkqe5SGGt4lfXQ==} dependencies: workbox-core: 6.2.4 dev: true + /workbox-broadcast-update/6.3.0: + resolution: {integrity: sha512-hp7Du6GJzK99wak5cQFhcSBxvcS+2fkFcxiMmz/RsQ5GQNxVcbiovq74w5aNCzuv3muQvICyC1XELZhZ4GYRTQ==} + dependencies: + workbox-core: 6.3.0 + dev: true + /workbox-build/6.2.4: resolution: {integrity: sha512-01ZbY1BHi+yYvu4yDGZBw9xm1bWyZW0QGWPxiksvSPAsNH/z/NwgtWW14YEroFyG98mmXb7pufWlwl40zE1KTw==} engines: {node: '>=10.0.0'} @@ -23158,16 +25970,73 @@ packages: - supports-color dev: true + /workbox-build/6.3.0: + resolution: {integrity: sha512-Th93AaC+88ZvJje0acTjCCCvU3tGenxJht5xUALXHW+Mzk3I5SMzTFwKn5F3e1iZ+M7U2jjfpMXe/sJ4UMx46A==} + engines: {node: '>=10.0.0'} + dependencies: + '@apideck/better-ajv-errors': 0.2.6_ajv@8.6.3 + '@babel/core': 7.16.0 + '@babel/preset-env': 7.16.0_@babel+core@7.16.0 + '@babel/runtime': 7.16.0 + '@rollup/plugin-babel': 5.3.0_@babel+core@7.16.0+rollup@2.59.0 + '@rollup/plugin-node-resolve': 11.2.1_rollup@2.59.0 + '@rollup/plugin-replace': 2.4.2_rollup@2.59.0 + '@surma/rollup-plugin-off-main-thread': 1.4.2 + ajv: 8.6.3 + common-tags: 1.8.0 + fast-json-stable-stringify: 2.1.0 + fs-extra: 9.1.0 + glob: 7.2.0 + lodash: 4.17.21 + pretty-bytes: 5.6.0 + rollup: 2.59.0 + rollup-plugin-terser: 7.0.2_rollup@2.59.0 + source-map: 0.8.0-beta.0 + source-map-url: 0.4.1 + stringify-object: 3.3.0 + strip-comments: 2.0.1 + tempy: 0.6.0 + upath: 1.2.0 + workbox-background-sync: 6.3.0 + workbox-broadcast-update: 6.3.0 + workbox-cacheable-response: 6.3.0 + workbox-core: 6.3.0 + workbox-expiration: 6.3.0 + workbox-google-analytics: 6.3.0 + workbox-navigation-preload: 6.3.0 + workbox-precaching: 6.3.0 + workbox-range-requests: 6.3.0 + workbox-recipes: 6.3.0 + workbox-routing: 6.3.0 + workbox-strategies: 6.3.0 + workbox-streams: 6.3.0 + workbox-sw: 6.3.0 + workbox-window: 6.3.0 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + dev: true + /workbox-cacheable-response/6.2.4: resolution: {integrity: sha512-KZSzAOmgWsrk15Wu+geCUSGLIyyzHaORKjH5JnR6qcVZAsm0JXUu2m2OZGqjQ+/eyQwrGdXXqAMW+4wQvTXccg==} dependencies: workbox-core: 6.2.4 dev: true + /workbox-cacheable-response/6.3.0: + resolution: {integrity: sha512-oYCRGF6PFEmJJkktdxYw/tcrU8N5u/2ihxVSHd+9sNqjNMDiXLqsewcEG544f1yx7gq5/u6VcvUA5N62KzN1GQ==} + dependencies: + workbox-core: 6.3.0 + dev: true + /workbox-core/6.2.4: resolution: {integrity: sha512-Nu8X4R4Is3g8uzEJ6qwbW2CGVpzntW/cSf8OfsQGIKQR0nt84FAKzP2cLDaNLp3L/iV9TuhZgCTZzkMiap5/OQ==} dev: true + /workbox-core/6.3.0: + resolution: {integrity: sha512-SufToEV3SOLwwz3j+P4pgkfpzLRUlR17sX3p/LrMHP/brYKvJQqjTwtSvaCkkAX0RPHX2TFHmN8xhPP1bpmomg==} + dev: true + /workbox-expiration/6.2.4: resolution: {integrity: sha512-EdOBLunrE3+Ff50y7AYDbiwtiLDvB+oEIkL1Wd9G5d176YVqFfgPfMRzJQ7fN+Yy2NfmsFME0Bw+dQruYekWsQ==} dependencies: @@ -23175,6 +26044,13 @@ packages: workbox-core: 6.2.4 dev: true + /workbox-expiration/6.3.0: + resolution: {integrity: sha512-teYuYfM3HFbwAD/nlZDw/dCMOrCKjsAiMRhz0uOy9IkfBb7vBynO3xf118lY62X6BfqjZdeahiHh10N0/aYICg==} + dependencies: + idb: 6.1.5 + workbox-core: 6.3.0 + dev: true + /workbox-google-analytics/6.2.4: resolution: {integrity: sha512-+PWmTouoGGcDupaxM193F2NmgrF597Pyt9eHIDxfed+x+JSSeUkETlbAKwB8rnBHkAjs8JQcvStEP/IpueNKpQ==} dependencies: @@ -23184,12 +26060,27 @@ packages: workbox-strategies: 6.2.4 dev: true + /workbox-google-analytics/6.3.0: + resolution: {integrity: sha512-6u0y21rtimnrCKpvayTkwh9y4Y5Xdn6X87x895WzwcOcWA2j/Nl7nmCpB0wjjhqU9pMj7B2lChqfypP+xUs5IA==} + dependencies: + workbox-background-sync: 6.3.0 + workbox-core: 6.3.0 + workbox-routing: 6.3.0 + workbox-strategies: 6.3.0 + dev: true + /workbox-navigation-preload/6.2.4: resolution: {integrity: sha512-y2dOSsaSdEimqhCmBIFR6kBp+GZbtNtWCBaMFwfKxTAul2uyllKcTKBHnZ9IzxULue6o6voV+I2U8Y8tO8n+eA==} dependencies: workbox-core: 6.2.4 dev: true + /workbox-navigation-preload/6.3.0: + resolution: {integrity: sha512-D7bomh9SCn1u6n32FqAWfyHe2dkK6mWbwcTsoeBnFSD0p8Gr9Zq1Mpt/DitEfGIQHck90Zd024xcTFLkjczS/Q==} + dependencies: + workbox-core: 6.3.0 + dev: true + /workbox-precaching/6.2.4: resolution: {integrity: sha512-7POznbVc8EG/mkbXzeb94x3B1VJruPgXvXFgS0NJ3GRugkO4ULs/DpIIb+ycs7uJIKY9EzLS7VXvElr3rMSozQ==} dependencies: @@ -23198,12 +26089,26 @@ packages: workbox-strategies: 6.2.4 dev: true + /workbox-precaching/6.3.0: + resolution: {integrity: sha512-bND3rUxiuzFmDfeKywdvOqK0LQ5LLbOPk0eX22PlMQNOOduHRxzglMpgHo/MR6h+8cPJ3GpxT8hZ895/7bHMqQ==} + dependencies: + workbox-core: 6.3.0 + workbox-routing: 6.3.0 + workbox-strategies: 6.3.0 + dev: true + /workbox-range-requests/6.2.4: resolution: {integrity: sha512-q4jjTXD1QOKbrHnzV3nxdZtIpOiVoIP5QyVmjuJrybVnAZurtyKcqirTQcAcT/zlTvgwm07zcTTk9o/zIB6DmA==} dependencies: workbox-core: 6.2.4 dev: true + /workbox-range-requests/6.3.0: + resolution: {integrity: sha512-AHnGtfSvc/fBt+8NCVT6jVcshv7oFkiuS94YsedQu2sIN1jKHkxLaj7qMBl818FoY6x7r0jw1WLmG/QDmI1/oA==} + dependencies: + workbox-core: 6.3.0 + dev: true + /workbox-recipes/6.2.4: resolution: {integrity: sha512-z7oECGrt940dw1Bv0xIDJEXY1xARiaxsIedeJOutZFkbgaC/yWG61VTr/hmkeJ8Nx6jnY6W7Rc0iOUvg4sePag==} dependencies: @@ -23215,18 +26120,41 @@ packages: workbox-strategies: 6.2.4 dev: true + /workbox-recipes/6.3.0: + resolution: {integrity: sha512-f0AZyxd48E4t+PV+ifgIf8WodfJqRj8/E0t+PwppDIdTPyD59cIh0HZBtgPKFdIMVnltodpMz4zioxym1H3GjQ==} + dependencies: + workbox-cacheable-response: 6.3.0 + workbox-core: 6.3.0 + workbox-expiration: 6.3.0 + workbox-precaching: 6.3.0 + workbox-routing: 6.3.0 + workbox-strategies: 6.3.0 + dev: true + /workbox-routing/6.2.4: resolution: {integrity: sha512-jHnOmpeH4MOWR4eXv6l608npD2y6IFv7yFJ1bT9/RbB8wq2vXHXJQ0ExTZRTWGbVltSG22wEU+MQ8VebDDwDeg==} dependencies: workbox-core: 6.2.4 dev: true + /workbox-routing/6.3.0: + resolution: {integrity: sha512-asajX5UPkaoU4PB9pEpxKWKkcpA+KJQUEeYU6NlK0rXTCpdWQ6iieMRDoBTZBjTzUdL3j3s1Zo2qCOSvtXSYGg==} + dependencies: + workbox-core: 6.3.0 + dev: true + /workbox-strategies/6.2.4: resolution: {integrity: sha512-DKgGC3ruceDuu2o+Ae5qmJy0p0q21mFP+RrkdqKrjyf2u8cJvvtvt1eIt4nevKc5BESiKxmhC2h+TZpOSzUDvA==} dependencies: workbox-core: 6.2.4 dev: true + /workbox-strategies/6.3.0: + resolution: {integrity: sha512-SYZt40y+Iu5nA+UEPQOrAuAMMNTxtUBPLCIaMMb4lcADpBYrNP1CD+/s2QsrxzS651a8hfi06REKt+uTp1tqfw==} + dependencies: + workbox-core: 6.3.0 + dev: true + /workbox-streams/6.2.4: resolution: {integrity: sha512-yG6zV7S2NmYT6koyb7/DoPsyUAat9kD+rOmjP2SbBCtJdLu6ZIi1lgN4/rOkxEby/+Xb4OE4RmCSIZdMyjEmhQ==} dependencies: @@ -23234,10 +26162,21 @@ packages: workbox-routing: 6.2.4 dev: true + /workbox-streams/6.3.0: + resolution: {integrity: sha512-CiRsuoXJOytA7IQriRu6kVCa0L4OdNi0DdniiSageu/EZuxTswNXpgVzkGE4IDArU/5jlzgRtwqrqIWCJX+OMA==} + dependencies: + workbox-core: 6.3.0 + workbox-routing: 6.3.0 + dev: true + /workbox-sw/6.2.4: resolution: {integrity: sha512-OlWLHNNM+j44sN2OaVXnVcf2wwhJUzcHlXrTrbWDu1JWnrQJ/rLicdc/sbxkZoyE0EbQm7Xr1BXcOjsB7PNlXQ==} dev: true + /workbox-sw/6.3.0: + resolution: {integrity: sha512-xwrXRBzw5jwJ7VdAQkTSNTbNZ4S6VhXtbZZ0vY6XKNQARO5nuGphNdif+hJFIejHUgtV6ESpQnixPj5hYB2jKQ==} + dev: true + /workbox-webpack-plugin/6.2.4_webpack@4.46.0: resolution: {integrity: sha512-G6yeOZDYEbtqgNasqwxHFnma0Vp237kMxpsf8JV/YIhvhUuMwnh1WKv4VnFeqmYaWW/ITx0qj92IEMWB/O1mAA==} engines: {node: '>=10.0.0'} @@ -23256,6 +26195,24 @@ packages: - supports-color dev: true + /workbox-webpack-plugin/6.3.0_webpack@4.46.0: + resolution: {integrity: sha512-3l5H8h7O2eUgTAISQoglDe4VJDDYTZaDnkRY0FY2+eFOXA+fZoWuDSmLiMnA0uYqPC4NWVTZwP549E0dWgiWjw==} + engines: {node: '>=10.0.0'} + peerDependencies: + webpack: ^4.4.0 || ^5.9.0 + dependencies: + fast-json-stable-stringify: 2.1.0 + pretty-bytes: 5.6.0 + source-map-url: 0.4.1 + upath: 1.2.0 + webpack: 4.46.0 + webpack-sources: 1.4.3 + workbox-build: 6.3.0 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + dev: true + /workbox-window/6.2.4: resolution: {integrity: sha512-9jD6THkwGEASj1YP56ZBHYJ147733FoGpJlMamYk38k/EBFE75oc6K3Vs2tGOBx5ZGq54+mHSStnlrtFG3IiOg==} dependencies: @@ -23263,6 +26220,13 @@ packages: workbox-core: 6.2.4 dev: true + /workbox-window/6.3.0: + resolution: {integrity: sha512-CFP84assX9srH/TOx4OD8z4EBPO/Cq4WKdV2YLcJIFJmVTS/cB63XKeidKl2KJk8qOOLVIKnaO7BLmb0MxGFtA==} + dependencies: + '@types/trusted-types': 2.0.2 + workbox-core: 6.3.0 + dev: true + /worker-farm/1.7.0: resolution: {integrity: sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==} dependencies: @@ -23298,8 +26262,8 @@ packages: engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 - string-width: 4.2.2 - strip-ansi: 6.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 dev: true /wrappy/1.0.2: @@ -23311,17 +26275,10 @@ packages: dependencies: imurmurhash: 0.1.4 is-typedarray: 1.0.0 - signal-exit: 3.0.3 + signal-exit: 3.0.5 typedarray-to-buffer: 3.1.5 dev: true - /write/1.0.3: - resolution: {integrity: sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==} - engines: {node: '>=4'} - dependencies: - mkdirp: 0.5.5 - dev: true - /ws/6.2.2: resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==} dependencies: @@ -23341,6 +26298,19 @@ packages: optional: true dev: true + /ws/7.5.5: + resolution: {integrity: sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + /xdg-basedir/4.0.0: resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} engines: {node: '>=8'} @@ -23445,7 +26415,7 @@ packages: escalade: 3.1.1 get-caller-file: 2.0.5 require-directory: 2.1.1 - string-width: 4.2.2 + string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 20.2.9 dev: true -- cgit v1.2.3 From 5c6f38091068d67f88edda1d776e3c5f86c1a94e Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Thu, 4 Nov 2021 17:55:05 +0100 Subject: anastasis-core: support secret version selection --- packages/anastasis-core/src/index.ts | 30 +++++++++++++++++++++++++++- packages/anastasis-core/src/reducer-types.ts | 25 ++++++++++++++++++++++- 2 files changed, 53 insertions(+), 2 deletions(-) (limited to 'packages/anastasis-core/src') diff --git a/packages/anastasis-core/src/index.ts b/packages/anastasis-core/src/index.ts index c1a6d3ff0..2ed69b55a 100644 --- a/packages/anastasis-core/src/index.ts +++ b/packages/anastasis-core/src/index.ts @@ -64,6 +64,8 @@ import { ReducerStateRecovery, SuccessDetails, UserAttributeSpec, + codecForActionArgsChangeVersion, + ActionArgsChangeVersion, } from "./reducer-types.js"; import fetchPonyfill from "fetch-ponyfill"; import { @@ -578,6 +580,7 @@ async function downloadPolicy( const newProviderStatus: { [url: string]: AuthenticationProviderStatusOk } = {}; const userAttributes = state.identity_attributes!; + const restrictProvider = state.selected_provider_url; // FIXME: Shouldn't we also store the status of bad providers? for (const url of providerUrls) { const pi = await getProviderInfo(url); @@ -592,9 +595,17 @@ async function downloadPolicy( if (!pi) { continue; } + if (restrictProvider && url !== state.selected_provider_url) { + // User wants specific provider. + continue; + } const userId = await userIdentifierDerive(userAttributes, pi.salt); const acctKeypair = accountKeypairDerive(userId); - const resp = await fetch(new URL(`policy/${acctKeypair.pub}`, url).href); + const reqUrl = new URL(`policy/${acctKeypair.pub}`, url); + if (state.selected_version) { + reqUrl.searchParams.set("version", `${state.selected_version}`); + } + const resp = await fetch(reqUrl.href); if (resp.status !== 200) { continue; } @@ -842,6 +853,18 @@ async function recoveryEnterUserAttributes( return downloadPolicy(st); } +async function changeVersion( + state: ReducerStateRecovery, + args: ActionArgsChangeVersion, +): Promise { + const st: ReducerStateRecovery = { + ...state, + selected_version: args.version, + selected_provider_url: args.provider_url, + }; + return downloadPolicy(st); +} + async function selectChallenge( state: ReducerStateRecovery, ta: ActionArgsSelectChallenge, @@ -1209,6 +1232,11 @@ const recoveryTransitions: Record< [RecoveryStates.SecretSelecting]: { ...transitionRecoveryJump("back", RecoveryStates.UserAttributesCollecting), ...transitionRecoveryJump("next", RecoveryStates.ChallengeSelecting), + ...transition( + "change_version", + codecForActionArgsChangeVersion(), + changeVersion, + ), }, [RecoveryStates.ChallengeSelecting]: { ...transitionRecoveryJump("back", RecoveryStates.SecretSelecting), diff --git a/packages/anastasis-core/src/reducer-types.ts b/packages/anastasis-core/src/reducer-types.ts index 19f7d431a..08e61cefe 100644 --- a/packages/anastasis-core/src/reducer-types.ts +++ b/packages/anastasis-core/src/reducer-types.ts @@ -171,6 +171,18 @@ export interface ReducerStateRecovery { selected_challenge_uuid?: string; + /** + * Explicitly selected version by the user. + * FIXME: In the C reducer this is called "version". + */ + selected_version?: number; + + /** + * Explicitly selected provider URL by the user. + * FIXME: In the C reducer this is called "provider_url". + */ + selected_provider_url?: string; + challenge_feedback?: { [uuid: string]: ChallengeFeedback }; /** @@ -343,7 +355,7 @@ export interface SolveChallengePinRequest { * * XXX: When / why is this even used? */ - export interface SolveChallengeHashRequest { +export interface SolveChallengeHashRequest { /** * Base32-crock encoded hash code. */ @@ -363,6 +375,17 @@ export interface ActionArgsUpdateExpiration { expiration: Timestamp; } +export interface ActionArgsChangeVersion { + provider_url: string; + version: number; +} + +export const codecForActionArgsChangeVersion = () => + buildCodecForObject() + .property("provider_url", codecForString()) + .property("version", codecForNumber()) + .build("ActionArgsChangeVersion"); + export const codecForPolicyMember = () => buildCodecForObject() .property("authentication_method", codecForNumber()) -- cgit v1.2.3 From 11e8060ab156e5033c7dd5cd607648d584540883 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Thu, 4 Nov 2021 20:02:04 +0100 Subject: anastasis-core: fix upload fee computation, prepare for payments --- packages/anastasis-core/src/index.ts | 127 +++++++++++++-------------- packages/anastasis-core/src/reducer-types.ts | 36 ++++++++ 2 files changed, 98 insertions(+), 65 deletions(-) (limited to 'packages/anastasis-core/src') diff --git a/packages/anastasis-core/src/index.ts b/packages/anastasis-core/src/index.ts index 2ed69b55a..0bab510de 100644 --- a/packages/anastasis-core/src/index.ts +++ b/packages/anastasis-core/src/index.ts @@ -51,21 +51,17 @@ import { codecForActionArgsUpdateExpiration, ContinentInfo, CountryInfo, - MethodSpec, - Policy, - PolicyProvider, RecoveryInformation, RecoveryInternalData, RecoveryStates, ReducerState, ReducerStateBackup, - ReducerStateBackupUserAttributesCollecting, ReducerStateError, ReducerStateRecovery, SuccessDetails, - UserAttributeSpec, codecForActionArgsChangeVersion, ActionArgsChangeVersion, + TruthMetaData, } from "./reducer-types.js"; import fetchPonyfill from "fetch-ponyfill"; import { @@ -302,35 +298,6 @@ async function backupEnterUserAttributes( return newState; } -/** - * Truth data as stored in the reducer. - */ -interface TruthMetaData { - uuid: string; - - key_share: string; - - policy_index: number; - - pol_method_index: number; - - /** - * Nonce used for encrypting the truth. - */ - nonce: string; - - /** - * Key that the truth (i.e. secret question answer, email address, mobile number, ...) - * is encrypted with when stored at the provider. - */ - truth_key: string; - - /** - * Truth-specific salt. - */ - truth_salt: string; -} - async function getTruthValue( authMethod: AuthMethod, truthUuid: string, @@ -512,6 +479,8 @@ async function uploadSecret( const successDetails: SuccessDetails = {}; + const policyPayUris: string[] = []; + for (const prov of state.policy_providers!) { const uid = uidMap[prov.provider_url]; const acctKeypair = accountKeypairDerive(uid); @@ -536,26 +505,46 @@ async function uploadSecret( body: decodeCrock(encRecoveryDoc), }, ); - if (resp.status !== 204) { - return { - code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED, - hint: `could not upload policy (http status ${resp.status})`, + if (resp.status === HttpStatusCode.Accepted) { + let policyVersion = 0; + let policyExpiration: Timestamp = { t_ms: 0 }; + try { + policyVersion = Number(resp.headers.get("Anastasis-Version") ?? "0"); + } catch (e) {} + try { + policyExpiration = { + t_ms: + 1000 * + Number(resp.headers.get("Anastasis-Policy-Expiration") ?? "0"), + }; + } catch (e) {} + successDetails[prov.provider_url] = { + policy_version: policyVersion, + policy_expiration: policyExpiration, }; } - let policyVersion = 0; - let policyExpiration: Timestamp = { t_ms: 0 }; - try { - policyVersion = Number(resp.headers.get("Anastasis-Version") ?? "0"); - } catch (e) {} - try { - policyExpiration = { - t_ms: - 1000 * Number(resp.headers.get("Anastasis-Policy-Expiration") ?? "0"), - }; - } catch (e) {} - successDetails[prov.provider_url] = { - policy_version: policyVersion, - policy_expiration: policyExpiration, + if (resp.status === HttpStatusCode.PaymentRequired) { + const talerPayUri = resp.headers.get("Taler"); + if (!talerPayUri) { + return { + code: TalerErrorCode.ANASTASIS_REDUCER_BACKEND_FAILURE, + hint: `payment requested, but no taler://pay URI given`, + }; + } + policyPayUris.push(talerPayUri); + continue; + } + return { + code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED, + hint: `could not upload policy (http status ${resp.status})`, + }; + } + + if (policyPayUris.length > 0) { + return { + ...state, + backup_state: BackupStates.PoliciesPaying, + payments: policyPayUris, }; } @@ -1048,7 +1037,6 @@ async function updateUploadFees( } logger.info("updating upload fees"); const feePerCurrency: Record = {}; - const coveredProviders = new Set(); const addFee = (x: AmountLike) => { x = Amounts.jsonifyAmount(x); feePerCurrency[x.currency] = Amounts.add( @@ -1058,24 +1046,31 @@ async function updateUploadFees( }; const years = Duration.toIntegerYears(Duration.getRemaining(expiration)); logger.info(`computing fees for ${years} years`); + // For now, we compute fees for *all* available providers. + for (const provUrl in state.authentication_providers ?? {}) { + const prov = state.authentication_providers![provUrl]; + if ("annual_fee" in prov) { + const annualFee = Amounts.mult(prov.annual_fee, years).amount; + logger.info(`adding annual fee ${Amounts.stringify(annualFee)}`); + addFee(annualFee); + } + } + const coveredProvTruth = new Set(); for (const x of state.policies ?? []) { for (const m of x.methods) { const prov = state.authentication_providers![ m.provider ] as AuthenticationProviderStatusOk; const authMethod = state.authentication_methods![m.authentication_method]; - if (!coveredProviders.has(m.provider)) { - const annualFee = Amounts.mult(prov.annual_fee, years).amount; - logger.info(`adding annual fee ${Amounts.stringify(annualFee)}`); - addFee(annualFee); - coveredProviders.add(m.provider); - } - for (const pm of prov.methods) { - if (pm.type === authMethod.type) { - addFee(pm.usage_fee); - break; - } + const key = `${m.authentication_method}@${m.provider}`; + if (coveredProvTruth.has(key)) { + continue; } + logger.info( + `adding cost for auth method ${authMethod.challenge} / "${authMethod.instructions}" at ${m.provider}`, + ); + coveredProvTruth.add(key); + addFee(prov.truth_upload_fee); } } return { @@ -1252,7 +1247,9 @@ const recoveryTransitions: Record< ...transition("solve_challenge", codecForAny(), solveChallenge), }, [RecoveryStates.ChallengePaying]: {}, - [RecoveryStates.RecoveryFinished]: {}, + [RecoveryStates.RecoveryFinished]: { + ...transitionRecoveryJump("back", RecoveryStates.ChallengeSelecting), + }, }; export async function reduceAction( diff --git a/packages/anastasis-core/src/reducer-types.ts b/packages/anastasis-core/src/reducer-types.ts index 08e61cefe..318e00f89 100644 --- a/packages/anastasis-core/src/reducer-types.ts +++ b/packages/anastasis-core/src/reducer-types.ts @@ -67,6 +67,13 @@ export interface ReducerStateBackup { secret_name?: string; policies?: Policy[]; + /** + * Map from truth key (`${methodIndex}/${providerUrl}`) to + * the truth metadata. + */ + truth_metadata?: Record; + recovery_document?: RecoveryDocument; + /** * Policy providers are providers that we checked to be functional * and that are actually used in policies. @@ -198,6 +205,35 @@ export interface ReducerStateRecovery { authentication_providers?: { [url: string]: AuthenticationProviderStatus }; } +/** + * Truth data as stored in the reducer. + */ +export interface TruthMetaData { + uuid: string; + + key_share: string; + + policy_index: number; + + pol_method_index: number; + + /** + * Nonce used for encrypting the truth. + */ + nonce: string; + + /** + * Key that the truth (i.e. secret question answer, email address, mobile number, ...) + * is encrypted with when stored at the provider. + */ + truth_key: string; + + /** + * Truth-specific salt. + */ + truth_salt: string; +} + export interface ReducerStateError { backup_state?: undefined; recovery_state?: undefined; -- cgit v1.2.3 From b94dc8f9e26219b1f54e1456f8d7be00d333aa80 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Thu, 4 Nov 2021 20:16:11 +0100 Subject: anastasis-core: factor out recovery data computation into separate step --- packages/anastasis-core/src/index.ts | 100 ++++++++++++++++++--------- packages/anastasis-core/src/reducer-types.ts | 14 ++-- 2 files changed, 75 insertions(+), 39 deletions(-) (limited to 'packages/anastasis-core/src') diff --git a/packages/anastasis-core/src/index.ts b/packages/anastasis-core/src/index.ts index 0bab510de..f77707ae1 100644 --- a/packages/anastasis-core/src/index.ts +++ b/packages/anastasis-core/src/index.ts @@ -343,14 +343,19 @@ async function uncompressRecoveryDoc(zippedRd: Uint8Array): Promise { return JSON.parse(bytesToString(res)); } -async function uploadSecret( +/** + * Prepare the recovery document and truth metadata based + * on the selected policies. + */ +async function prepareRecoveryData( state: ReducerStateBackup, -): Promise { +): Promise { const policies = state.policies!; const secretName = state.secret_name!; const coreSecret: OpaqueData = encodeCrock( stringToBytes(JSON.stringify(state.core_secret!)), ); + // Truth key is `${methodIndex}/${providerUrl}` const truthMetadataMap: Record = {}; @@ -391,6 +396,53 @@ async function uploadSecret( const csr = await coreSecretEncrypt(policyKeys, coreSecret); + const escrowMethods: EscrowMethod[] = []; + + for (const truthKey of Object.keys(truthMetadataMap)) { + const tm = truthMetadataMap[truthKey]; + const pol = state.policies![tm.policy_index]; + const meth = pol.methods[tm.pol_method_index]; + const authMethod = + state.authentication_methods![meth.authentication_method]; + const provider = state.authentication_providers![ + meth.provider + ] as AuthenticationProviderStatusOk; + escrowMethods.push({ + escrow_type: authMethod.type as any, + instructions: authMethod.instructions, + provider_salt: provider.salt, + truth_salt: tm.truth_salt, + truth_key: tm.truth_key, + url: meth.provider, + uuid: tm.uuid, + }); + } + + const rd: RecoveryDocument = { + secret_name: secretName, + encrypted_core_secret: csr.encCoreSecret, + escrow_methods: escrowMethods, + policies: policies.map((x, i) => { + return { + master_key: csr.encMasterKeys[i], + uuids: policyUuids[i], + salt: policySalts[i], + }; + }), + }; + + return { + ...state, + recovery_data: { + recovery_document: rd, + truth_metadata: truthMetadataMap, + }, + }; +} + +async function uploadSecret( + state: ReducerStateBackup, +): Promise { const uidMap: Record = {}; for (const prov of state.policy_providers!) { const provider = state.authentication_providers![ @@ -402,7 +454,17 @@ async function uploadSecret( ); } - const escrowMethods: EscrowMethod[] = []; + if (!state.recovery_data) { + state = await prepareRecoveryData(state); + } + + const recoveryData = state.recovery_data; + if (!recoveryData) { + throw Error("invariant failed"); + } + + const truthMetadataMap = recoveryData.truth_metadata; + const rd = recoveryData.recovery_document; for (const truthKey of Object.keys(truthMetadataMap)) { const tm = truthMetadataMap[truthKey]; @@ -410,9 +472,6 @@ async function uploadSecret( const meth = pol.methods[tm.pol_method_index]; const authMethod = state.authentication_methods![meth.authentication_method]; - const provider = state.authentication_providers![ - meth.provider - ] as AuthenticationProviderStatusOk; const truthValue = await getTruthValue(authMethod, tm.uuid, tm.truth_salt); const encryptedTruth = await encryptTruth( tm.nonce, @@ -448,35 +507,8 @@ async function uploadSecret( hint: `could not upload truth (HTTP status ${resp.status})`, }; } - - escrowMethods.push({ - escrow_type: authMethod.type as any, - instructions: authMethod.instructions, - provider_salt: provider.salt, - truth_salt: tm.truth_salt, - truth_key: tm.truth_key, - url: meth.provider, - uuid: tm.uuid, - }); } - // FIXME: We need to store the truth metadata in - // the state, since it's possible that we'll run into - // a provider that requests a payment. - - const rd: RecoveryDocument = { - secret_name: secretName, - encrypted_core_secret: csr.encCoreSecret, - escrow_methods: escrowMethods, - policies: policies.map((x, i) => { - return { - master_key: csr.encMasterKeys[i], - uuids: policyUuids[i], - salt: policySalts[i], - }; - }), - }; - const successDetails: SuccessDetails = {}; const policyPayUris: string[] = []; @@ -1092,6 +1124,8 @@ async function enterSecret( mime: args.secret.mime ?? "text/plain", value: args.secret.value, }, + // A new secret invalidates the existing recovery data. + recovery_data: undefined, }); } diff --git a/packages/anastasis-core/src/reducer-types.ts b/packages/anastasis-core/src/reducer-types.ts index 318e00f89..56b27898e 100644 --- a/packages/anastasis-core/src/reducer-types.ts +++ b/packages/anastasis-core/src/reducer-types.ts @@ -67,12 +67,14 @@ export interface ReducerStateBackup { secret_name?: string; policies?: Policy[]; - /** - * Map from truth key (`${methodIndex}/${providerUrl}`) to - * the truth metadata. - */ - truth_metadata?: Record; - recovery_document?: RecoveryDocument; + recovery_data?: { + /** + * Map from truth key (`${methodIndex}/${providerUrl}`) to + * the truth metadata. + */ + truth_metadata: Record; + recovery_document: RecoveryDocument; + }; /** * Policy providers are providers that we checked to be functional -- cgit v1.2.3 From 9e379ef399a032a3fbd86d18ede867aaf6a1821f Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Thu, 4 Nov 2021 20:20:11 +0100 Subject: anastasis-core: truth payments, status codes --- packages/anastasis-core/src/index.ts | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) (limited to 'packages/anastasis-core/src') diff --git a/packages/anastasis-core/src/index.ts b/packages/anastasis-core/src/index.ts index f77707ae1..238b658a0 100644 --- a/packages/anastasis-core/src/index.ts +++ b/packages/anastasis-core/src/index.ts @@ -466,6 +466,8 @@ async function uploadSecret( const truthMetadataMap = recoveryData.truth_metadata; const rd = recoveryData.recovery_document; + const truthPayUris: string[] = []; + for (const truthKey of Object.keys(truthMetadataMap)) { const tm = truthMetadataMap[truthKey]; const pol = state.policies![tm.policy_index]; @@ -501,12 +503,31 @@ async function uploadSecret( body: JSON.stringify(tur), }); - if (resp.status !== 204) { - return { - code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED, - hint: `could not upload truth (HTTP status ${resp.status})`, - }; + if (resp.status === HttpStatusCode.NoContent) { + continue; + } + if (resp.status === HttpStatusCode.PaymentRequired) { + const talerPayUri = resp.headers.get("Taler"); + if (!talerPayUri) { + return { + code: TalerErrorCode.ANASTASIS_REDUCER_BACKEND_FAILURE, + hint: `payment requested, but no taler://pay URI given`, + }; + } + truthPayUris.push(talerPayUri); } + return { + code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED, + hint: `could not upload truth (HTTP status ${resp.status})`, + }; + } + + if (truthPayUris.length > 0) { + return { + ...state, + backup_state: BackupStates.TruthsPaying, + payments: truthPayUris, + }; } const successDetails: SuccessDetails = {}; @@ -537,7 +558,7 @@ async function uploadSecret( body: decodeCrock(encRecoveryDoc), }, ); - if (resp.status === HttpStatusCode.Accepted) { + if (resp.status === HttpStatusCode.NoContent) { let policyVersion = 0; let policyExpiration: Timestamp = { t_ms: 0 }; try { @@ -554,6 +575,7 @@ async function uploadSecret( policy_version: policyVersion, policy_expiration: policyExpiration, }; + continue; } if (resp.status === HttpStatusCode.PaymentRequired) { const talerPayUri = resp.headers.get("Taler"); -- cgit v1.2.3 From 09d01a4bf16c3fcbe6020d8efd38cae34db53514 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Thu, 4 Nov 2021 21:06:45 +0100 Subject: anastasis-core: payments --- packages/anastasis-core/src/index.ts | 43 +++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 18 deletions(-) (limited to 'packages/anastasis-core/src') diff --git a/packages/anastasis-core/src/index.ts b/packages/anastasis-core/src/index.ts index 238b658a0..53364fc08 100644 --- a/packages/anastasis-core/src/index.ts +++ b/packages/anastasis-core/src/index.ts @@ -443,17 +443,6 @@ async function prepareRecoveryData( async function uploadSecret( state: ReducerStateBackup, ): Promise { - const uidMap: Record = {}; - for (const prov of state.policy_providers!) { - const provider = state.authentication_providers![ - prov.provider_url - ] as AuthenticationProviderStatusOk; - uidMap[prov.provider_url] = await userIdentifierDerive( - state.identity_attributes!, - provider.salt, - ); - } - if (!state.recovery_data) { state = await prepareRecoveryData(state); } @@ -467,7 +456,7 @@ async function uploadSecret( const rd = recoveryData.recovery_document; const truthPayUris: string[] = []; - + const userIdCache: Record = {}; for (const truthKey of Object.keys(truthMetadataMap)) { const tm = truthMetadataMap[truthKey]; const pol = state.policies![tm.policy_index]; @@ -480,10 +469,21 @@ async function uploadSecret( tm.truth_key, truthValue, ); - const uid = uidMap[meth.provider]; + logger.info(`uploading to ${meth.provider}`); + let userId = userIdCache[meth.provider]; + if (!userId) { + const provider = state.authentication_providers![ + meth.provider + ] as AuthenticationProviderStatusOk; + userId = userIdCache[meth.provider] = await userIdentifierDerive( + state.identity_attributes!, + provider.salt, + ); + } + // FIXME: check that the question salt is okay here, looks weird. const encryptedKeyShare = await encryptKeyshare( tm.key_share, - uid, + userId, authMethod.type === "question" ? bytesToString(decodeCrock(authMethod.challenge)) : undefined, @@ -515,6 +515,7 @@ async function uploadSecret( }; } truthPayUris.push(talerPayUri); + continue; } return { code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED, @@ -535,7 +536,7 @@ async function uploadSecret( const policyPayUris: string[] = []; for (const prov of state.policy_providers!) { - const uid = uidMap[prov.provider_url]; + const uid = userIdCache[prov.provider_url]; const acctKeypair = accountKeypairDerive(uid); const zippedDoc = await compressRecoveryDoc(rd); const encRecoveryDoc = await encryptRecoveryDocument( @@ -607,6 +608,7 @@ async function uploadSecret( core_secret: undefined, backup_state: BackupStates.BackupFinished, success_details: successDetails, + payments: undefined, }; } @@ -1240,9 +1242,14 @@ const backupTransitions: Record< ), ...transition("enter_secret_name", codecForAny(), enterSecretName), }, - [BackupStates.PoliciesPaying]: {}, - [BackupStates.TruthsPaying]: {}, - [BackupStates.PoliciesPaying]: {}, + [BackupStates.PoliciesPaying]: { + ...transitionBackupJump("back", BackupStates.SecretEditing), + ...transition("pay", codecForAny(), uploadSecret), + }, + [BackupStates.TruthsPaying]: { + ...transitionBackupJump("back", BackupStates.SecretEditing), + ...transition("pay", codecForAny(), uploadSecret), + }, [BackupStates.BackupFinished]: { ...transitionBackupJump("back", BackupStates.SecretEditing), }, -- cgit v1.2.3 From 5a72e4ae3e9ebd77547ac5aa95cd0b54b39a34cd Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Thu, 4 Nov 2021 21:47:51 +0100 Subject: anastasis-core: implement update_policy transition --- packages/anastasis-core/rollup.config.js | 28 +++++++++++++++++++++++++++- packages/anastasis-core/src/index.ts | 14 ++++++++++++++ packages/anastasis-core/src/reducer-types.ts | 5 +++++ 3 files changed, 46 insertions(+), 1 deletion(-) (limited to 'packages/anastasis-core/src') diff --git a/packages/anastasis-core/rollup.config.js b/packages/anastasis-core/rollup.config.js index 59998c93b..a9af1d3b5 100644 --- a/packages/anastasis-core/rollup.config.js +++ b/packages/anastasis-core/rollup.config.js @@ -5,7 +5,7 @@ import json from "@rollup/plugin-json"; import builtins from "builtin-modules"; import sourcemaps from "rollup-plugin-sourcemaps"; -export default { +const cli = { input: "lib/index.node.js", output: { file: "dist/anastasis-cli.js", @@ -28,3 +28,29 @@ export default { json(), ], }; + +const standalone = { + input: "lib/cli-entry.js", + output: { + file: "dist/anastasis-cli-standalone.js", + format: "es", + sourcemap: true, + }, + external: [...builtins, "source-map-support"], + plugins: [ + nodeResolve({ + preferBuiltins: true, + }), + + sourcemaps(), + + commonjs({ + sourceMap: true, + transformMixedEsModules: true, + }), + + json(), + ], +}; + +export default [standalone, cli]; diff --git a/packages/anastasis-core/src/index.ts b/packages/anastasis-core/src/index.ts index 53364fc08..f2b8ff1d1 100644 --- a/packages/anastasis-core/src/index.ts +++ b/packages/anastasis-core/src/index.ts @@ -62,6 +62,7 @@ import { codecForActionArgsChangeVersion, ActionArgsChangeVersion, TruthMetaData, + ActionArgsUpdatePolicy, } from "./reducer-types.js"; import fetchPonyfill from "fetch-ponyfill"; import { @@ -1038,6 +1039,18 @@ async function deletePolicy( }; } +async function updatePolicy( + state: ReducerStateBackup, + args: ActionArgsUpdatePolicy, +): Promise { + const policies = [...(state.policies ?? [])]; + policies[args.policy_index] = { methods: args.policy }; + return { + ...state, + policies, + }; +} + async function addPolicy( state: ReducerStateBackup, args: ActionArgsAddPolicy, @@ -1230,6 +1243,7 @@ const backupTransitions: Record< ...transitionBackupJump("next", BackupStates.SecretEditing), ...transition("add_policy", codecForActionArgsAddPolicy(), addPolicy), ...transition("delete_policy", codecForAny(), deletePolicy), + ...transition("update_policy", codecForAny(), updatePolicy), }, [BackupStates.SecretEditing]: { ...transitionBackupJump("back", BackupStates.PoliciesReviewing), diff --git a/packages/anastasis-core/src/reducer-types.ts b/packages/anastasis-core/src/reducer-types.ts index 56b27898e..e5b0c47a4 100644 --- a/packages/anastasis-core/src/reducer-types.ts +++ b/packages/anastasis-core/src/reducer-types.ts @@ -418,6 +418,11 @@ export interface ActionArgsChangeVersion { version: number; } +export interface ActionArgsUpdatePolicy { + policy_index: number; + policy: PolicyMember[]; +} + export const codecForActionArgsChangeVersion = () => buildCodecForObject() .property("provider_url", codecForString()) -- cgit v1.2.3 From 34d2e4703d8a583c8e7c3c2ea398c1280acccd08 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Thu, 4 Nov 2021 21:56:02 +0100 Subject: anastasis-core: fix user id caching --- packages/anastasis-core/src/index.ts | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) (limited to 'packages/anastasis-core/src') diff --git a/packages/anastasis-core/src/index.ts b/packages/anastasis-core/src/index.ts index f2b8ff1d1..0f391b733 100644 --- a/packages/anastasis-core/src/index.ts +++ b/packages/anastasis-core/src/index.ts @@ -458,6 +458,19 @@ async function uploadSecret( const truthPayUris: string[] = []; const userIdCache: Record = {}; + const getUserIdCaching = async (providerUrl: string) => { + let userId = userIdCache[providerUrl]; + if (!userId) { + const provider = state.authentication_providers![ + providerUrl + ] as AuthenticationProviderStatusOk; + userId = userIdCache[providerUrl] = await userIdentifierDerive( + state.identity_attributes!, + provider.salt, + ); + } + return userId; + }; for (const truthKey of Object.keys(truthMetadataMap)) { const tm = truthMetadataMap[truthKey]; const pol = state.policies![tm.policy_index]; @@ -471,16 +484,7 @@ async function uploadSecret( truthValue, ); logger.info(`uploading to ${meth.provider}`); - let userId = userIdCache[meth.provider]; - if (!userId) { - const provider = state.authentication_providers![ - meth.provider - ] as AuthenticationProviderStatusOk; - userId = userIdCache[meth.provider] = await userIdentifierDerive( - state.identity_attributes!, - provider.salt, - ); - } + const userId = await getUserIdCaching(meth.provider); // FIXME: check that the question salt is okay here, looks weird. const encryptedKeyShare = await encryptKeyshare( tm.key_share, @@ -537,11 +541,11 @@ async function uploadSecret( const policyPayUris: string[] = []; for (const prov of state.policy_providers!) { - const uid = userIdCache[prov.provider_url]; - const acctKeypair = accountKeypairDerive(uid); + const userId = await getUserIdCaching(prov.provider_url); + const acctKeypair = accountKeypairDerive(userId); const zippedDoc = await compressRecoveryDoc(rd); const encRecoveryDoc = await encryptRecoveryDocument( - uid, + userId, encodeCrock(zippedDoc), ); const bodyHash = hash(decodeCrock(encRecoveryDoc)); -- cgit v1.2.3 From e42c282e67d49a54aa7aab2e87f9e458e488ae8e Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Fri, 5 Nov 2021 07:29:26 +0100 Subject: anastasis-core: make truth/policy payments compatible with C reducer --- packages/anastasis-core/src/crypto.ts | 3 +- packages/anastasis-core/src/index.ts | 84 +++++++++++++++++++++++----- packages/anastasis-core/src/reducer-types.ts | 13 +++++ 3 files changed, 85 insertions(+), 15 deletions(-) (limited to 'packages/anastasis-core/src') diff --git a/packages/anastasis-core/src/crypto.ts b/packages/anastasis-core/src/crypto.ts index 9689e4f2d..6921cb2f1 100644 --- a/packages/anastasis-core/src/crypto.ts +++ b/packages/anastasis-core/src/crypto.ts @@ -11,8 +11,9 @@ import { stringToBytes, secretbox_open, hash, + Logger, + j2s, } from "@gnu-taler/taler-util"; -import { gzipSync } from "fflate"; import { argon2id } from "hash-wasm"; export type Flavor = T & { diff --git a/packages/anastasis-core/src/index.ts b/packages/anastasis-core/src/index.ts index 0f391b733..8972b057c 100644 --- a/packages/anastasis-core/src/index.ts +++ b/packages/anastasis-core/src/index.ts @@ -16,6 +16,7 @@ import { HttpStatusCode, j2s, Logger, + parsePayUri, stringToBytes, TalerErrorCode, TalerSignaturePurpose, @@ -328,7 +329,6 @@ async function getTruthValue( * Compress the recovery document and add a size header. */ async function compressRecoveryDoc(rd: any): Promise { - logger.info(`recovery document: ${j2s(rd)}`); const docBytes = stringToBytes(JSON.stringify(rd)); const sizeHeaderBuf = new ArrayBuffer(4); const dvbuf = new DataView(sizeHeaderBuf); @@ -457,6 +457,8 @@ async function uploadSecret( const rd = recoveryData.recovery_document; const truthPayUris: string[] = []; + const truthPaySecrets: Record = {}; + const userIdCache: Record = {}; const getUserIdCaching = async (providerUrl: string) => { let userId = userIdCache[providerUrl]; @@ -483,9 +485,8 @@ async function uploadSecret( tm.truth_key, truthValue, ); - logger.info(`uploading to ${meth.provider}`); + logger.info(`uploading truth to ${meth.provider}`); const userId = await getUserIdCaching(meth.provider); - // FIXME: check that the question salt is okay here, looks weird. const encryptedKeyShare = await encryptKeyshare( tm.key_share, userId, @@ -500,10 +501,21 @@ async function uploadSecret( type: authMethod.type, truth_mime: authMethod.mime_type, }; - const resp = await fetch(new URL(`truth/${tm.uuid}`, meth.provider).href, { + const reqUrl = new URL(`truth/${tm.uuid}`, meth.provider); + const paySecret = (state.truth_upload_payment_secrets ?? {})[meth.provider]; + if (paySecret) { + // FIXME: Get this from the params + reqUrl.searchParams.set("timeout_ms", "500"); + } + const resp = await fetch(reqUrl.href, { method: "POST", headers: { "content-type": "application/json", + ...(paySecret + ? { + "Anastasis-Payment-Identifier": paySecret, + } + : {}), }, body: JSON.stringify(tur), }); @@ -520,6 +532,14 @@ async function uploadSecret( }; } truthPayUris.push(talerPayUri); + const parsedUri = parsePayUri(talerPayUri); + if (!parsedUri) { + return { + code: TalerErrorCode.ANASTASIS_REDUCER_BACKEND_FAILURE, + hint: `payment requested, but no taler://pay URI given`, + }; + } + truthPaySecrets[meth.provider] = parsedUri.orderId; continue; } return { @@ -532,6 +552,7 @@ async function uploadSecret( return { ...state, backup_state: BackupStates.TruthsPaying, + truth_upload_payment_secrets: truthPaySecrets, payments: truthPayUris, }; } @@ -539,6 +560,8 @@ async function uploadSecret( const successDetails: SuccessDetails = {}; const policyPayUris: string[] = []; + const policyPayUriMap: Record = {}; + //const policyPaySecrets: Record = {}; for (const prov of state.policy_providers!) { const userId = await getUserIdCaching(prov.provider_url); @@ -553,17 +576,33 @@ async function uploadSecret( .put(bodyHash) .build(); const sig = eddsaSign(sigPS, decodeCrock(acctKeypair.priv)); - const resp = await fetch( - new URL(`policy/${acctKeypair.pub}`, prov.provider_url).href, - { - method: "POST", - headers: { - "Anastasis-Policy-Signature": encodeCrock(sig), - "If-None-Match": encodeCrock(bodyHash), - }, - body: decodeCrock(encRecoveryDoc), + const talerPayUri = state.policy_payment_requests?.find( + (x) => x.provider === prov.provider_url, + )?.payto; + let paySecret: string | undefined; + if (talerPayUri) { + paySecret = parsePayUri(talerPayUri)!.orderId; + } + const reqUrl = new URL(`policy/${acctKeypair.pub}`, prov.provider_url); + if (paySecret) { + // FIXME: Get this from the params + reqUrl.searchParams.set("timeout_ms", "500"); + } + logger.info(`uploading policy to ${prov.provider_url}`); + const resp = await fetch(reqUrl.href, { + method: "POST", + headers: { + "Anastasis-Policy-Signature": encodeCrock(sig), + "If-None-Match": encodeCrock(bodyHash), + ...(paySecret + ? { + "Anastasis-Payment-Identifier": paySecret, + } + : {}), }, - ); + body: decodeCrock(encRecoveryDoc), + }); + logger.info(`got response for policy upload (http status ${resp.status})`); if (resp.status === HttpStatusCode.NoContent) { let policyVersion = 0; let policyExpiration: Timestamp = { t_ms: 0 }; @@ -592,6 +631,14 @@ async function uploadSecret( }; } policyPayUris.push(talerPayUri); + const parsedUri = parsePayUri(talerPayUri); + if (!parsedUri) { + return { + code: TalerErrorCode.ANASTASIS_REDUCER_BACKEND_FAILURE, + hint: `payment requested, but no taler://pay URI given`, + }; + } + policyPayUriMap[prov.provider_url] = talerPayUri; continue; } return { @@ -605,9 +652,17 @@ async function uploadSecret( ...state, backup_state: BackupStates.PoliciesPaying, payments: policyPayUris, + policy_payment_requests: Object.keys(policyPayUriMap).map((x) => { + return { + payto: policyPayUriMap[x], + provider: x, + }; + }), }; } + logger.info("backup finished"); + return { ...state, core_secret: undefined, @@ -766,6 +821,7 @@ async function requestTruth( const url = new URL(`/truth/${truth.uuid}`, truth.url); if (solveRequest) { + logger.info(`handling solve request ${j2s(solveRequest)}`); let respHash: string; switch (truth.escrow_type) { case ChallengeType.Question: { diff --git a/packages/anastasis-core/src/reducer-types.ts b/packages/anastasis-core/src/reducer-types.ts index e5b0c47a4..1a560b885 100644 --- a/packages/anastasis-core/src/reducer-types.ts +++ b/packages/anastasis-core/src/reducer-types.ts @@ -87,10 +87,19 @@ export interface ReducerStateBackup { * Currently requested payments. * * List of taler://pay URIs. + * + * FIXME: There should be more information in this, + * including the provider and amount. */ payments?: string[]; + /** + * FIXME: Why is this not a map from provider to payto? + */ policy_payment_requests?: { + /** + * FIXME: This is not a payto URI, right?! + */ payto: string; provider: string; }[]; @@ -100,6 +109,10 @@ export interface ReducerStateBackup { expiration?: Timestamp; upload_fees?: { fee: AmountString }[]; + + // FIXME: The payment secrets and pay URIs should + // probably be consolidated into a single field. + truth_upload_payment_secrets?: Record; } export interface AuthMethod { -- cgit v1.2.3 From 2139cfd707e1cd4d00e0aeeb5717cd3259da0373 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Fri, 5 Nov 2021 09:40:46 +0100 Subject: anastasis-core: make policy suggestion a bit more compatible with the C implementation --- packages/anastasis-core/src/crypto.ts | 1 - packages/anastasis-core/src/index.ts | 4 ++ packages/anastasis-core/src/policy-suggestion.ts | 79 +++++++++++++++++++++--- 3 files changed, 74 insertions(+), 10 deletions(-) (limited to 'packages/anastasis-core/src') diff --git a/packages/anastasis-core/src/crypto.ts b/packages/anastasis-core/src/crypto.ts index 6921cb2f1..206d9eca8 100644 --- a/packages/anastasis-core/src/crypto.ts +++ b/packages/anastasis-core/src/crypto.ts @@ -250,7 +250,6 @@ export async function coreSecretRecover(args: { args.encryptedMasterKey, "emk", ); - console.log("recovered master key", masterKey); return await anastasisDecrypt(masterKey, args.encryptedCoreSecret, "cse"); } diff --git a/packages/anastasis-core/src/index.ts b/packages/anastasis-core/src/index.ts index 8972b057c..2fdf0f833 100644 --- a/packages/anastasis-core/src/index.ts +++ b/packages/anastasis-core/src/index.ts @@ -868,6 +868,10 @@ async function requestTruth( }, }); + logger.info( + `got GET /truth response from ${truth.url}, http status ${resp.status}`, + ); + if (resp.status === HttpStatusCode.Ok) { let answerSalt: string | undefined = undefined; if ( diff --git a/packages/anastasis-core/src/policy-suggestion.ts b/packages/anastasis-core/src/policy-suggestion.ts index 623921466..7eb6c21cc 100644 --- a/packages/anastasis-core/src/policy-suggestion.ts +++ b/packages/anastasis-core/src/policy-suggestion.ts @@ -3,6 +3,9 @@ import { AuthMethod, Policy, PolicyProvider } from "./reducer-types.js"; const logger = new Logger("anastasis-core:policy-suggestion.ts"); +const maxMethodSelections = 200; +const maxPolicyEvaluations = 10000; + /** * Provider information used during provider/method mapping. */ @@ -32,7 +35,11 @@ export function suggestPolicies( numSel = 4; } const policies: Policy[] = []; - const selections = enumerateMethodSelections(numSel, numMethods); + const selections = enumerateMethodSelections( + numSel, + numMethods, + maxMethodSelections, + ); logger.info(`selections: ${j2s(selections)}`); for (const sel of selections) { const p = assignProviders(policies, methods, providers, sel); @@ -40,6 +47,7 @@ export function suggestPolicies( policies.push(p); } } + logger.info(`suggesting policies ${j2s(policies)}`); return { policies, policy_providers: providers.map((x) => ({ @@ -63,10 +71,15 @@ function assignProviders( const providerSelections = enumerateProviderMappings( methodSelection.length, providers.length, + maxPolicyEvaluations, ); let bestProvSel: ProviderSelection | undefined; + // Number of different providers selected, larger is better let bestDiversity = 0; + // Number of identical challenges duplicated at different providers, + // smaller is better + let bestDuplication = Number.MAX_SAFE_INTEGER; for (const provSel of providerSelections) { // First, check if selection is even possible with the methods offered @@ -87,22 +100,53 @@ function assignProviders( // Evaluate diversity, always prefer policies // that increase diversity. const providerSet = new Set(); - for (const pol of existingPolicies) { - for (const m of pol.methods) { - providerSet.add(m.provider); - } - } + // The C reducer evaluates diversity only per policy + // for (const pol of existingPolicies) { + // for (const m of pol.methods) { + // providerSet.add(m.provider); + // } + // } for (const provIndex of provSel) { const prov = providers[provIndex]; providerSet.add(prov.url); } const diversity = providerSet.size; + + // Number of providers that each method shows up at. + const provPerMethod: Set[] = []; + for (let i = 0; i < methods.length; i++) { + provPerMethod[i] = new Set(); + } + for (const pol of existingPolicies) { + for (const m of pol.methods) { + provPerMethod[m.authentication_method].add(m.provider); + } + } + for (const methSelIndex in provSel) { + const prov = providers[provSel[methSelIndex]]; + provPerMethod[methodSelection[methSelIndex]].add(prov.url); + } + + let duplication = 0; + for (const provSet of provPerMethod) { + duplication += provSet.size; + } + + logger.info(`diversity ${diversity}, duplication ${duplication}`); + if (!bestProvSel || diversity > bestDiversity) { bestProvSel = provSel; bestDiversity = diversity; + bestDuplication = duplication; + logger.info(`taking based on diversity`); + } else if (diversity == bestDiversity && duplication < bestDuplication) { + bestProvSel = provSel; + bestDiversity = diversity; + bestDuplication = duplication; + logger.info(`taking based on duplication`); } - // TODO: also evaluate costs and duplicates (same challenge at same provider) + // TODO: also evaluate costs } if (!bestProvSel) { @@ -117,13 +161,20 @@ function assignProviders( }; } +/** + * A provider selection maps a method selection index to a provider index. + */ type ProviderSelection = number[]; /** * Compute provider mappings. * Enumerates all n-combinations with repetition of m providers. */ -function enumerateProviderMappings(n: number, m: number): ProviderSelection[] { +function enumerateProviderMappings( + n: number, + m: number, + limit?: number, +): ProviderSelection[] { const selections: ProviderSelection[] = []; const a = new Array(n); const sel = (i: number, start: number = 0) => { @@ -134,6 +185,9 @@ function enumerateProviderMappings(n: number, m: number): ProviderSelection[] { for (let j = start; j < m; j++) { a[i] = j; sel(i + 1, j); + if (limit && selections.length >= limit) { + break; + } } }; sel(0); @@ -151,7 +205,11 @@ type MethodSelection = number[]; * Compute method selections. * Enumerates all n-combinations without repetition of m methods. */ -function enumerateMethodSelections(n: number, m: number): MethodSelection[] { +function enumerateMethodSelections( + n: number, + m: number, + limit?: number, +): MethodSelection[] { const selections: MethodSelection[] = []; const a = new Array(n); const sel = (i: number, start: number = 0) => { @@ -162,6 +220,9 @@ function enumerateMethodSelections(n: number, m: number): MethodSelection[] { for (let j = start; j < m; j++) { a[i] = j; sel(i + 1, j + 1); + if (limit && selections.length >= limit) { + break; + } } }; sel(0); -- cgit v1.2.3 From dc1fce22778273df6946d3b3efd0eb90b285a8dd Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Fri, 5 Nov 2021 12:50:07 +0100 Subject: anastasis-core: cli entry point --- packages/anastasis-core/src/cli-entry.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 packages/anastasis-core/src/cli-entry.ts (limited to 'packages/anastasis-core/src') diff --git a/packages/anastasis-core/src/cli-entry.ts b/packages/anastasis-core/src/cli-entry.ts new file mode 100644 index 000000000..151b47f2b --- /dev/null +++ b/packages/anastasis-core/src/cli-entry.ts @@ -0,0 +1,15 @@ +import { reducerCliMain } from "./cli.js"; + +async function r() { + try { + // @ts-ignore + (await import("source-map-support")).install(); + } catch (e) { + console.warn("can't load souremaps, please install source-map-support"); + // Do nothing. + } + + reducerCliMain(); +} + +r(); -- cgit v1.2.3 From e627f65f3cf61428202e47e9e68a5baf4a9abfae Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Fri, 5 Nov 2021 12:50:18 +0100 Subject: anastasis-core: towards supporting iban auth --- packages/anastasis-core/src/index.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'packages/anastasis-core/src') diff --git a/packages/anastasis-core/src/index.ts b/packages/anastasis-core/src/index.ts index 2fdf0f833..d3e938f0f 100644 --- a/packages/anastasis-core/src/index.ts +++ b/packages/anastasis-core/src/index.ts @@ -930,6 +930,20 @@ async function requestTruth( }; } + if (resp.status === HttpStatusCode.Accepted) { + const body = await resp.json(); + logger.info(`got body ${j2s(body)}`); + if (body.method === "iban") { + // FIXME: + } else { + return { + code: TalerErrorCode.ANASTASIS_TRUTH_CHALLENGE_FAILED, + hint: "unknown external authentication method", + http_status: resp.status, + } as ReducerStateError; + } + } + return { code: TalerErrorCode.ANASTASIS_TRUTH_CHALLENGE_FAILED, hint: "got unexpected /truth/ response status", -- cgit v1.2.3 From 842cc327541ebcfc761208f42bf5f74e22c6283c Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Fri, 5 Nov 2021 16:07:57 +0100 Subject: anastasis-core: support poll transition --- .../anastasis-core/src/challenge-feedback-types.ts | 19 ++++++++ packages/anastasis-core/src/index.ts | 57 +++++++++++++++++++++- packages/anastasis-core/src/provider-types.ts | 13 ++++- packages/anastasis-core/src/reducer-types.ts | 1 + 4 files changed, 87 insertions(+), 3 deletions(-) (limited to 'packages/anastasis-core/src') diff --git a/packages/anastasis-core/src/challenge-feedback-types.ts b/packages/anastasis-core/src/challenge-feedback-types.ts index d6a2e3e80..0770d9296 100644 --- a/packages/anastasis-core/src/challenge-feedback-types.ts +++ b/packages/anastasis-core/src/challenge-feedback-types.ts @@ -80,6 +80,25 @@ export interface ChallengeFeedbackAuthIban { * be contained in the bank transfer. */ wire_transfer_subject: string; + + /** + * FIXME: This field is only present for compatibility with + * the C reducer test suite. + */ + method: "iban"; + + answer_code: number; + + /** + * FIXME: This field is only present for compatibility with + * the C reducer test suite. + */ + details: { + challenge_amount: AmountString; + credit_iban: string; + business_name: string; + wire_transfer_subject: string; + }; } /** diff --git a/packages/anastasis-core/src/index.ts b/packages/anastasis-core/src/index.ts index d3e938f0f..362ac3317 100644 --- a/packages/anastasis-core/src/index.ts +++ b/packages/anastasis-core/src/index.ts @@ -25,6 +25,7 @@ import { import { anastasisData } from "./anastasis-data.js"; import { EscrowConfigurationResponse, + IbanExternalAuthResponse, TruthUploadRequest, } from "./provider-types.js"; import { @@ -809,6 +810,39 @@ async function tryRecoverSecret( return { ...state }; } +/** + * Re-check the status of challenges that are solved asynchronously. + */ +async function pollChallenges( + state: ReducerStateRecovery, + args: void, +): Promise { + for (const truthUuid in state.challenge_feedback) { + if (state.recovery_state === RecoveryStates.RecoveryFinished) { + break; + } + const feedback = state.challenge_feedback[truthUuid]; + const truth = state.verbatim_recovery_document!.escrow_methods.find( + (x) => x.uuid === truthUuid, + ); + if (!truth) { + logger.warn( + "truth for challenge feedback entry not found in recovery document", + ); + continue; + } + if (feedback.state === ChallengeFeedbackStatus.AuthIban) { + const s2 = await requestTruth(state, truth, { + pin: feedback.answer_code, + }); + if (s2.recovery_state) { + state = s2; + } + } + } + return state; +} + /** * Request a truth, optionally with a challenge solution * provided by the user. @@ -839,6 +873,7 @@ async function requestTruth( case ChallengeType.Email: case ChallengeType.Sms: case ChallengeType.Post: + case ChallengeType.Iban: case ChallengeType.Totp: { if ("answer" in solveRequest) { const s = solveRequest.answer.trim().replace(/^A-/, ""); @@ -857,7 +892,7 @@ async function requestTruth( break; } default: - throw Error("unsupported challenge type"); + throw Error(`unsupported challenge type "${truth.escrow_type}""`); } url.searchParams.set("response", respHash); } @@ -934,7 +969,24 @@ async function requestTruth( const body = await resp.json(); logger.info(`got body ${j2s(body)}`); if (body.method === "iban") { - // FIXME: + const b = body as IbanExternalAuthResponse; + return { + ...state, + recovery_state: RecoveryStates.ChallengeSolving, + challenge_feedback: { + ...state.challenge_feedback, + [truth.uuid]: { + state: ChallengeFeedbackStatus.AuthIban, + answer_code: b.answer_code, + business_name: b.details.business_name, + challenge_amount: b.details.challenge_amount, + credit_iban: b.details.credit_iban, + wire_transfer_subject: b.details.wire_transfer_subject, + details: b.details, + method: "iban", + }, + }, + }; } else { return { code: TalerErrorCode.ANASTASIS_TRUTH_CHALLENGE_FAILED, @@ -1395,6 +1447,7 @@ const recoveryTransitions: Record< codecForActionArgsSelectChallenge(), selectChallenge, ), + ...transition("poll", codecForAny(), pollChallenges), ...transition("next", codecForAny(), nextFromChallengeSelecting), }, [RecoveryStates.ChallengeSolving]: { diff --git a/packages/anastasis-core/src/provider-types.ts b/packages/anastasis-core/src/provider-types.ts index b477c09b9..f4d998e0a 100644 --- a/packages/anastasis-core/src/provider-types.ts +++ b/packages/anastasis-core/src/provider-types.ts @@ -1,4 +1,4 @@ -import { AmountString } from "@gnu-taler/taler-util"; +import { Amounts, AmountString } from "@gnu-taler/taler-util"; export interface EscrowConfigurationResponse { // Protocol identifier, clarifies that this is an Anastasis provider. @@ -72,3 +72,14 @@ export interface TruthUploadRequest { // store the truth? storage_duration_years: number; } + +export interface IbanExternalAuthResponse { + method: "iban"; + answer_code: number; + details: { + challenge_amount: AmountString; + credit_iban: string; + business_name: string; + wire_transfer_subject: string; + }; +} diff --git a/packages/anastasis-core/src/reducer-types.ts b/packages/anastasis-core/src/reducer-types.ts index 1a560b885..0f64be4eb 100644 --- a/packages/anastasis-core/src/reducer-types.ts +++ b/packages/anastasis-core/src/reducer-types.ts @@ -6,6 +6,7 @@ import { codecForNumber, codecForString, codecForTimestamp, + Duration, Timestamp, } from "@gnu-taler/taler-util"; import { ChallengeFeedback } from "./challenge-feedback-types.js"; -- cgit v1.2.3