From b2a50ab6c5701bd53dd755e8a8ec164cea550f2f Mon Sep 17 00:00:00 2001 From: Matheus Date: Thu, 3 Mar 2022 14:32:21 -0300 Subject: [PATCH] [backport v9] Use generated token to simplify manual adding of nodes (#636) --- .../teleport/src/Apps/AddApp/AddApp.story.tsx | 1 - .../teleport/src/Apps/AddApp/useAddApp.ts | 2 - .../src/Nodes/AddNode/AddNode.story.test.tsx | 17 +- .../src/Nodes/AddNode/AddNode.story.tsx | 16 +- .../teleport/src/Nodes/AddNode/AddNode.tsx | 6 +- .../AddNode/Automatically/Automatically.tsx | 7 +- .../src/Nodes/AddNode/Manually/Manually.tsx | 108 ++++- .../__snapshots__/AddNode.story.test.tsx.snap | 455 +++++++++++++++++- .../teleport/src/Nodes/AddNode/useAddNode.ts | 25 +- .../src/services/nodes/makeNodeBashCmd.ts | 31 -- packages/teleport/src/services/nodes/nodes.ts | 7 +- yarn.lock | 216 ++++++++- 12 files changed, 789 insertions(+), 102 deletions(-) delete mode 100644 packages/teleport/src/services/nodes/makeNodeBashCmd.ts diff --git a/packages/teleport/src/Apps/AddApp/AddApp.story.tsx b/packages/teleport/src/Apps/AddApp/AddApp.story.tsx index 316f880c8..ff010eecc 100644 --- a/packages/teleport/src/Apps/AddApp/AddApp.story.tsx +++ b/packages/teleport/src/Apps/AddApp/AddApp.story.tsx @@ -57,7 +57,6 @@ const props = { createJoinToken: () => Promise.resolve(null), version: '5.0.0-dev', cmd: `sudo bash -c "$(curl -fsSL 'http://localhost/scripts/86/install-app.sh?name=test&uri=http://myapp/')"`, - canCreateToken: true, expires: '1 hour', reset: () => null, attempt: { diff --git a/packages/teleport/src/Apps/AddApp/useAddApp.ts b/packages/teleport/src/Apps/AddApp/useAddApp.ts index 3035ad851..c294e6c17 100644 --- a/packages/teleport/src/Apps/AddApp/useAddApp.ts +++ b/packages/teleport/src/Apps/AddApp/useAddApp.ts @@ -20,7 +20,6 @@ import useAttempt from 'shared/hooks/useAttemptNext'; export default function useAddApp(ctx: TeleportContext) { const { attempt, run } = useAttempt(''); - const canCreateToken = ctx.storeUser.getTokenAccess().create; const user = ctx.storeUser.state.username; const version = ctx.storeUser.state.cluster.authVersion; const isAuthTypeLocal = !ctx.storeUser.isSso(); @@ -40,7 +39,6 @@ export default function useAddApp(ctx: TeleportContext) { return { user, - canCreateToken, version, createToken, cmd, diff --git a/packages/teleport/src/Nodes/AddNode/AddNode.story.test.tsx b/packages/teleport/src/Nodes/AddNode/AddNode.story.test.tsx index cb857b831..0a54c91d9 100644 --- a/packages/teleport/src/Nodes/AddNode/AddNode.story.test.tsx +++ b/packages/teleport/src/Nodes/AddNode/AddNode.story.test.tsx @@ -15,7 +15,13 @@ */ import React from 'react'; -import { Loaded, Failed, ManuallyLocal, ManuallySSO } from './AddNode.story'; +import { + Loaded, + Failed, + ManuallyWithoutTokenLocal, + ManuallyWithoutTokenSSO, + ManuallyWithToken, +} from './AddNode.story'; import { render, screen } from 'design/utils/testing'; test('render automatic tab', async () => { @@ -29,11 +35,16 @@ test('render failed automatic tab', async () => { }); test('render manual tab with local user', async () => { - render(); + render(); expect(screen.getByTestId('Modal')).toMatchSnapshot(); }); test('render manual tab with sso user', async () => { - render(); + render(); + expect(screen.getByTestId('Modal')).toMatchSnapshot(); +}); + +test('render manual tab with join token', async () => { + render(); expect(screen.getByTestId('Modal')).toMatchSnapshot(); }); diff --git a/packages/teleport/src/Nodes/AddNode/AddNode.story.tsx b/packages/teleport/src/Nodes/AddNode/AddNode.story.tsx index 6072d8118..1c8fc6cea 100644 --- a/packages/teleport/src/Nodes/AddNode/AddNode.story.tsx +++ b/packages/teleport/src/Nodes/AddNode/AddNode.story.tsx @@ -34,16 +34,22 @@ export const Failed = () => ( /> ); -export const ManuallyLocal = () => ( - +export const ManuallyProcessing = () => ( + ); -export const ManuallySSO = () => ( +export const ManuallyWithToken = () => ; + +export const ManuallyWithoutTokenLocal = () => ( + +); + +export const ManuallyWithoutTokenSSO = () => ( ); @@ -60,11 +66,11 @@ const props = { setAutomatic: () => null, version: '5.0.0-dev', isEnterprise: true, - canCreateToken: true, script: 'some bash script', expiry: '4 hours', attempt: { status: 'success', statusText: '', } as any, + token: 'some-join-token-hash', }; diff --git a/packages/teleport/src/Nodes/AddNode/AddNode.tsx b/packages/teleport/src/Nodes/AddNode/AddNode.tsx index 7e600a9be..6a9e9df41 100644 --- a/packages/teleport/src/Nodes/AddNode/AddNode.tsx +++ b/packages/teleport/src/Nodes/AddNode/AddNode.tsx @@ -45,6 +45,7 @@ export function AddNode({ version, attempt, isAuthTypeLocal, + token, }: Props & State) { return ( )} {!automatic && ( @@ -88,6 +88,10 @@ export function AddNode({ user={user} version={version} isAuthTypeLocal={isAuthTypeLocal} + joinToken={token} + expiry={expiry} + createJoinToken={createJoinToken} + attempt={attempt} /> )} diff --git a/packages/teleport/src/Nodes/AddNode/Automatically/Automatically.tsx b/packages/teleport/src/Nodes/AddNode/Automatically/Automatically.tsx index 022d336c2..3cf27d510 100644 --- a/packages/teleport/src/Nodes/AddNode/Automatically/Automatically.tsx +++ b/packages/teleport/src/Nodes/AddNode/Automatically/Automatically.tsx @@ -20,7 +20,7 @@ import TextSelectCopy from 'teleport/components/TextSelectCopy'; import { Alert, Text, Indicator, Box, ButtonLink } from 'design'; export default function Automatically(props: Props) { - const { script, expiry, createJoinToken, attempt, ...style } = props; + const { script, expiry, createJoinToken, attempt } = props; if (attempt.status === 'processing') { return ( @@ -36,7 +36,7 @@ export default function Automatically(props: Props) { return ( <> - + Use below script to add a server to your cluster. This script will install the Teleport agent to provide secure access to your server. @@ -46,7 +46,7 @@ export default function Automatically(props: Props) { - + Regenerate Script @@ -59,5 +59,4 @@ type Props = { expiry: State['expiry']; createJoinToken: State['createJoinToken']; attempt: State['attempt']; - mb: string | number; }; diff --git a/packages/teleport/src/Nodes/AddNode/Manually/Manually.tsx b/packages/teleport/src/Nodes/AddNode/Manually/Manually.tsx index 32eff7c38..925d78b3e 100644 --- a/packages/teleport/src/Nodes/AddNode/Manually/Manually.tsx +++ b/packages/teleport/src/Nodes/AddNode/Manually/Manually.tsx @@ -15,11 +15,20 @@ */ import React from 'react'; -import { Text, Box, Link } from 'design'; +import { Text, Box, ButtonLink, Indicator, Link } from 'design'; import TextSelectCopy from 'teleport/components/TextSelectCopy'; import * as links from 'teleport/services/links'; +import { State } from './../useAddNode'; -export default function Manually({ user, version, isAuthTypeLocal }: Props) { +export default function Manually({ + user, + version, + isAuthTypeLocal, + joinToken, + createJoinToken, + expiry, + attempt, +}: Props) { const { hostname, port } = window.document.location; const host = `${hostname}:${port || '443'}`; let tshLoginCmd = `tsh login --proxy=${host}`; @@ -28,6 +37,14 @@ export default function Manually({ user, version, isAuthTypeLocal }: Props) { tshLoginCmd = `${tshLoginCmd} --auth=local --user=${user}`; } + if (attempt.status === 'processing') { + return ( + + + + ); + } + return ( <> @@ -47,36 +64,77 @@ export default function Manually({ user, version, isAuthTypeLocal }: Props) { - - - Step 2 - - {' - Login to Teleport'} - - - - - Step 3 - - {' - Generate a join token'} - - - - - Step 4 - - {` - Start the Teleport agent with the following parameters`} - + ) : ( + - + )} ); } +const StepsWithoutToken = ({ tshLoginCmd, host }) => ( + <> + + + Step 2 + + {' - Login to Teleport'} + + + + + Step 3 + + {' - Generate a join token'} + + + + + Step 4 + + {` - Start the Teleport agent with the following parameters`} + + + +); + +const StepsWithToken = ({ joinToken, host, createJoinToken, expiry }) => ( + + + Step 2 + + {` - Start the Teleport agent with the following parameters`} + + The token will be valid for{' '} + + {expiry}. + + + + + Regenerate Token + + +); + type Props = { user: string; version: string; isAuthTypeLocal: boolean; + joinToken: string; + expiry: State['expiry']; + createJoinToken: State['createJoinToken']; + attempt: State['attempt']; }; diff --git a/packages/teleport/src/Nodes/AddNode/__snapshots__/AddNode.story.test.tsx.snap b/packages/teleport/src/Nodes/AddNode/__snapshots__/AddNode.story.test.tsx.snap index 04085e25f..52feafe41 100644 --- a/packages/teleport/src/Nodes/AddNode/__snapshots__/AddNode.story.test.tsx.snap +++ b/packages/teleport/src/Nodes/AddNode/__snapshots__/AddNode.story.test.tsx.snap @@ -131,7 +131,6 @@ exports[`render automatic tab 1`] = ` overflow: hidden; text-overflow: ellipsis; margin: 0px; - margin-bottom: 16px; } .c12 { @@ -165,7 +164,7 @@ exports[`render automatic tab 1`] = ` .c14 { box-sizing: border-box; - margin-bottom: 8px; + margin-top: 8px; padding: 8px; background-color: #010B1C; border-radius: 4px; @@ -657,6 +656,458 @@ exports[`render failed automatic tab 1`] = ` `; +exports[`render manual tab with join token 1`] = ` +.c11 { + box-sizing: border-box; + margin-bottom: 24px; +} + +.c13 { + box-sizing: border-box; +} + +.c19 { + box-sizing: border-box; + margin-right: 4px; +} + +.c20 { + line-height: 1.5; + margin: 0; + display: inline-flex; + justify-content: center; + align-items: center; + box-sizing: border-box; + border: none; + border-radius: 4px; + cursor: pointer; + font-family: inherit; + font-weight: 600; + outline: none; + position: relative; + text-align: center; + text-decoration: none; + text-transform: uppercase; + transition: all 0.3s; + -webkit-font-smoothing: antialiased; + background: #512FC9; + color: rgba(255,255,255,0.87); + min-height: 32px; + font-size: 12px; + padding: 0px 24px; +} + +.c20:active { + opacity: 0.56; +} + +.c20:hover, +.c20:focus { + background: #651FFF; +} + +.c20:active { + background: #354AA4; +} + +.c20:disabled { + background: rgba(255,255,255,0.12); + color: rgba(255,255,255,0.3); +} + +.c23 { + line-height: 1.5; + margin: 0; + display: inline-flex; + justify-content: center; + align-items: center; + box-sizing: border-box; + border: none; + border-radius: 4px; + cursor: pointer; + font-family: inherit; + font-weight: 600; + outline: none; + position: relative; + text-align: center; + text-decoration: none; + text-transform: uppercase; + transition: all 0.3s; + -webkit-font-smoothing: antialiased; + background: #222C59; + color: rgba(255,255,255,0.87); + min-height: 32px; + font-size: 12px; + padding: 0px 24px; +} + +.c23:active { + opacity: 0.56; +} + +.c23:hover, +.c23:focus { + background: #2C3A73; +} + +.c23:disabled { + background: rgba(255,255,255,0.12); + color: rgba(255,255,255,0.3); +} + +.c8 { + display: inline-block; + transition: color .3s; + margin-right: 8px; + color: #FFFFFF; +} + +.c21 { + color: #03a9f4; + font-weight: normal; + background: none; + text-decoration: underline; + text-transform: none; + padding: 0 8px; +} + +.c21:hover, +.c21:focus { + background: #222C59; +} + +.c14 { + color: #03a9f4; + font-weight: normal; + background: none; + text-decoration: underline; + text-transform: none; + margin-right: 8px; +} + +.c15 { + color: #03a9f4; + font-weight: normal; + background: none; + text-decoration: underline; + text-transform: none; +} + +.c6 { + overflow: hidden; + text-overflow: ellipsis; + font-weight: 300; + font-size: 22px; + line-height: 32px; + text-transform: uppercase; + margin: 0px; + margin-right: auto; + color: rgba(255,255,255,0.87); +} + +.c12 { + overflow: hidden; + text-overflow: ellipsis; + font-weight: 600; + margin: 0px; +} + +.c16 { + overflow: hidden; + text-overflow: ellipsis; + margin: 0px; + margin-top: 4px; +} + +.c4 { + box-sizing: border-box; + flex: 1; + display: flex; + flex-direction: column; +} + +.c5 { + box-sizing: border-box; + margin-bottom: 24px; + display: flex; + align-items: center; + justify-content: space-between; +} + +.c17 { + box-sizing: border-box; + margin-top: 8px; + padding: 8px; + background-color: #010B1C; + border-radius: 4px; + display: flex; + align-items: center; + justify-content: space-between; +} + +.c18 { + box-sizing: border-box; + margin-right: 8px; + display: flex; +} + +.c1 { + z-index: -1; + position: fixed; + right: 0; + bottom: 0; + top: 0; + left: 0; + background-color: rgba(0,0,0,0.5); + opacity: 1; + touch-action: none; +} + +.c0 { + position: fixed; + z-index: 1200; + right: 0; + bottom: 0; + top: 0; + left: 0; +} + +.c7 { + overflow: hidden; + text-overflow: ellipsis; + font-weight: 400; + font-size: 16px; + line-height: 24px; + margin: 0px; + margin-left: 24px; + align-items: center; + display: flex; + padding: 4px 8px; + cursor: pointer; + border-bottom: 4px solid transparent; +} + +.c9 { + overflow: hidden; + text-overflow: ellipsis; + font-weight: 400; + font-size: 16px; + line-height: 24px; + margin: 0px; + margin-left: 24px; + align-items: center; + display: flex; + padding: 4px 8px; + cursor: pointer; + border-bottom: 4px solid transparent; + font-weight: 500; + border-bottom: 4px solid #651FFF; +} + +.c2 { + height: 100%; + outline: none; + color: black; + display: flex; + align-items: center; + justify-content: center; + opacity: 1; + will-change: opacity; + transition: opacity 225ms cubic-bezier(0.4,0,0.2,1) 0ms; +} + +.c3 { + padding: 32px; + padding-top: 24px; + background: #1C254D; + color: rgba(255,255,255,0.87); + border-radius: 8px; + box-shadow: 0 8px 32px rgba(0,0,0,0.24); + display: flex; + flex-direction: column; + position: relative; + overflow-y: auto; + max-height: calc(100% - 96px); + max-width: 600px; + width: 100%; + min-height: 328px; +} + +.c10 { + box-sizing: border-box; + margin-bottom: 32px; + min-height: 100px; + flex: 1; + display: flex; + flex-direction: column; +} + +.c22 { + box-sizing: border-box; +} + +
+ +`; + exports[`render manual tab with local user 1`] = ` .c11 { box-sizing: border-box; diff --git a/packages/teleport/src/Nodes/AddNode/useAddNode.ts b/packages/teleport/src/Nodes/AddNode/useAddNode.ts index 821957ab3..6b842ea8d 100644 --- a/packages/teleport/src/Nodes/AddNode/useAddNode.ts +++ b/packages/teleport/src/Nodes/AddNode/useAddNode.ts @@ -15,18 +15,21 @@ limitations under the License. */ import { useState, useEffect } from 'react'; -import TeleportContext from 'teleport/teleportContext'; +import { formatDistanceStrict } from 'date-fns'; import useAttempt from 'shared/hooks/useAttemptNext'; +import cfg from 'teleport/config'; +import TeleportContext from 'teleport/teleportContext'; +import { BashCommand, NodeToken } from 'teleport/services/nodes'; export default function useAddNode(ctx: TeleportContext) { const { attempt, run } = useAttempt('processing'); - const canCreateToken = ctx.storeUser.getTokenAccess().create; const version = ctx.storeUser.state.cluster.authVersion; const user = ctx.storeUser.state.username; const isAuthTypeLocal = !ctx.storeUser.isSso(); const [automatic, setAutomatic] = useState(true); const [script, setScript] = useState(''); const [expiry, setExpiry] = useState(''); + const [token, setToken] = useState(''); useEffect(() => { createJoinToken(); @@ -34,15 +37,28 @@ export default function useAddNode(ctx: TeleportContext) { function createJoinToken() { return run(() => - ctx.nodeService.createNodeBashCommand().then(cmd => { + ctx.nodeService.fetchJoinToken().then(token => { + const cmd = createNodeBashCommand(token); setExpiry(cmd.expires); setScript(cmd.text); + setToken(token.id); }) ); } + function createNodeBashCommand(node: NodeToken): BashCommand { + const { expiry, id } = node; + + const expires = formatDistanceStrict(new Date(), new Date(expiry)); + const text = `sudo bash -c "$(curl -fsSL ${cfg.getNodeScriptUrl(id)})"`; + + return { + text, + expires, + }; + } + return { - canCreateToken, createJoinToken, automatic, setAutomatic, @@ -52,6 +68,7 @@ export default function useAddNode(ctx: TeleportContext) { version, user, isAuthTypeLocal, + token, }; } diff --git a/packages/teleport/src/services/nodes/makeNodeBashCmd.ts b/packages/teleport/src/services/nodes/makeNodeBashCmd.ts deleted file mode 100644 index a3defd045..000000000 --- a/packages/teleport/src/services/nodes/makeNodeBashCmd.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* -Copyright 2020 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -import { formatDistanceStrict } from 'date-fns'; -import cfg from 'teleport/config'; -import { BashCommand } from './types'; - -export default function makeNodeBashCmd(json): BashCommand { - const { expiry, id } = json; - - const expires = formatDistanceStrict(new Date(), new Date(expiry)); - const text = `sudo bash -c "$(curl -fsSL ${cfg.getNodeScriptUrl(id)})"`; - - return { - text, - expires, - }; -} diff --git a/packages/teleport/src/services/nodes/nodes.ts b/packages/teleport/src/services/nodes/nodes.ts index e1f02b49f..346c2e90d 100644 --- a/packages/teleport/src/services/nodes/nodes.ts +++ b/packages/teleport/src/services/nodes/nodes.ts @@ -19,8 +19,7 @@ import cfg from 'teleport/config'; import makeNode from './makeNode'; import makeNodeToken from './makeNodeToken'; import makeAppBashCmd from './makeAppBashCmd'; -import makeNodeBashCmd from './makeNodeBashCmd'; -import { NodesResponse } from './types'; +import { NodeToken, NodesResponse } from './types'; const service = { fetchNodes(clusterId?: string): Promise { @@ -35,8 +34,8 @@ const service = { }); }, - createNodeBashCommand() { - return api.post(cfg.getNodeJoinTokenUrl()).then(makeNodeBashCmd); + fetchJoinToken(): Promise { + return api.post(cfg.getNodeJoinTokenUrl()).then(makeNodeToken); }, createAppBashCommand(appName: string, appUri: string) { diff --git a/yarn.lock b/yarn.lock index b2d662bbf..383c7dcdc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3326,6 +3326,11 @@ abab@^2.0.3, abab@^2.0.5: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -3387,13 +3392,22 @@ address@1.1.2, address@^1.0.1: resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== -agent-base@6: +agent-base@6, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" +agentkeepalive@^4.1.3: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" + integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== + dependencies: + debug "^4.1.0" + depd "^1.1.2" + humanize-ms "^1.2.1" + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -3619,6 +3633,14 @@ are-we-there-yet@^2.0.0: delegates "^1.0.0" readable-stream "^3.6.0" +are-we-there-yet@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz#ba20bd6b553e31d62fc8c31bd23d22b95734390d" + integrity sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -4452,7 +4474,7 @@ cacache@^12.0.2: unique-filename "^1.1.1" y18n "^4.0.0" -cacache@^15.0.5: +cacache@^15.0.5, cacache@^15.2.0: version "15.3.0" resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== @@ -4831,7 +4853,7 @@ color-string@^1.6.0: color-name "^1.0.0" simple-swizzle "^0.2.2" -color-support@^1.1.2: +color-support@^1.1.2, color-support@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== @@ -5568,7 +5590,7 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= -depd@~1.1.2: +depd@^1.1.2, depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= @@ -6013,6 +6035,13 @@ encodeurl@^1.0.2, encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= +encoding@^0.1.12: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" @@ -6077,6 +6106,11 @@ envinfo@^7.7.3: resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + errno@^0.1.3, errno@~0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" @@ -7102,6 +7136,21 @@ gauge@^3.0.0: strip-ansi "^3.0.1 || ^4.0.0" wide-align "^1.1.2" +gauge@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.2.tgz#c3777652f542b6ef62797246e8c7caddecb32cc7" + integrity sha512-aSPRm2CvA9R8QyU5eXMFPd+cYkyxLsXHd2l5/FOH2V/eml//M04G6KZOmTap07O1PvEwNcl2NndyLfK8g3QrKA== + dependencies: + ansi-regex "^5.0.1" + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -7719,7 +7768,7 @@ htmlparser2@^6.1.0: domutils "^2.5.2" entities "^2.0.0" -http-cache-semantics@^4.0.0: +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== @@ -7822,6 +7871,13 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= + dependencies: + ms "^2.0.0" + iconv-corefoundation@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/iconv-corefoundation/-/iconv-corefoundation-1.1.6.tgz#27c135470237f6f8d13462fa1f5eaf250523c29a" @@ -8224,6 +8280,11 @@ is-installed-globally@^0.4.0: global-dirs "^3.0.0" is-path-inside "^3.0.2" +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= + is-map@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" @@ -9424,6 +9485,28 @@ make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: dependencies: semver "^6.0.0" +make-fetch-happen@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" + integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.2.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.2" + promise-retry "^2.0.1" + socks-proxy-agent "^6.0.0" + ssri "^8.0.0" + makeerror@1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" @@ -9701,16 +9784,11 @@ minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.2.0, minimist@^1.2.5, minimist@~0.0.1: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= - minipass-collect@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" @@ -9718,6 +9796,17 @@ minipass-collect@^1.0.2: dependencies: minipass "^3.0.0" +minipass-fetch@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" + integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== + dependencies: + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" + optionalDependencies: + encoding "^0.1.12" + minipass-flush@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" @@ -9725,13 +9814,20 @@ minipass-flush@^1.0.5: dependencies: minipass "^3.0.0" -minipass-pipeline@^1.2.2: +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== dependencies: minipass "^3.0.0" +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + minipass@^3.0.0, minipass@^3.1.1: version "3.1.5" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.5.tgz#71f6251b0a33a49c01b3cf97ff77eda030dff732" @@ -9739,7 +9835,14 @@ minipass@^3.0.0, minipass@^3.1.1: dependencies: yallist "^4.0.0" -minizlib@^2.1.1: +minipass@^3.1.0, minipass@^3.1.3: + version "3.1.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.6.tgz#3b8150aa688a711a1521af5e8779c1d3bb4f45ee" + integrity sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ== + dependencies: + yallist "^4.0.0" + +minizlib@^2.0.0, minizlib@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== @@ -9817,7 +9920,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: +ms@^2.0.0, ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -9872,6 +9975,11 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== +negotiator@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1, neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" @@ -9919,6 +10027,22 @@ node-forge@^0.10.0: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== +node-gyp@8.4.1: + version "8.4.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" + integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^9.1.0" + nopt "^5.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -9975,6 +10099,13 @@ node-releases@^2.0.1: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -10032,6 +10163,16 @@ npmlog@^5.0.1: gauge "^3.0.0" set-blocking "^2.0.0" +npmlog@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.1.tgz#06f1344a174c06e8de9c6c70834cfba2964bba17" + integrity sha512-BTHDvY6nrRHuRfyjt1MAufLxYdVXZfd099H4+i1f0lPywNQyI4foeNXJRObB/uy+TYqUW0vAD9gbdSOXPst7Eg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.0" + set-blocking "^2.0.0" + nth-check@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" @@ -10899,6 +11040,14 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + promise.allsettled@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.5.tgz#2443f3d4b2aa8dfa560f6ac2aa6c4ea999d75f53" @@ -11767,6 +11916,11 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + retry@^0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" @@ -12163,6 +12317,11 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== +signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" @@ -12201,7 +12360,7 @@ slice-ansi@^1.0.0: dependencies: is-fullwidth-code-point "^2.0.0" -smart-buffer@^4.0.2: +smart-buffer@^4.0.2, smart-buffer@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== @@ -12245,6 +12404,23 @@ sockjs@^0.3.21: uuid "^3.4.0" websocket-driver "^0.7.4" +socks-proxy-agent@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz#e664e8f1aaf4e1fb3df945f09e3d94f911137f87" + integrity sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew== + dependencies: + agent-base "^6.0.2" + debug "^4.3.1" + socks "^2.6.1" + +socks@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.2.tgz#ec042d7960073d40d94268ff3bb727dc685f111a" + integrity sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA== + dependencies: + ip "^1.1.5" + smart-buffer "^4.2.0" + source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -12380,7 +12556,7 @@ ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" -ssri@^8.0.1: +ssri@^8.0.0, ssri@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== @@ -12485,7 +12661,7 @@ string-length@^4.0.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -12754,7 +12930,7 @@ tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -tar@^6.0.2: +tar@^6.0.2, tar@^6.1.2: version "6.1.11" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== @@ -13912,14 +14088,14 @@ which@^1.2.9, which@^1.3.1: dependencies: isexe "^2.0.0" -which@^2.0.1: +which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" -wide-align@^1.1.2: +wide-align@^1.1.2, wide-align@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==