diff --git a/packages/console/package.json b/packages/console/package.json index 5ec6a03ec..2038f18d8 100644 --- a/packages/console/package.json +++ b/packages/console/package.json @@ -19,7 +19,7 @@ "devDependencies": { "@fontsource/roboto-mono": "^4.5.7", "@logto/phrases": "^0.1.0", - "@logto/react": "^0.1.11", + "@logto/react": "^0.1.12", "@logto/shared": "^0.1.0", "@logto/schemas": "^0.1.0", "@mdx-js/react": "^1.6.22", diff --git a/packages/console/src/components/AppContent/components/Topbar/index.tsx b/packages/console/src/components/AppContent/components/Topbar/index.tsx index 478ddb22e..eaf4b65a0 100644 --- a/packages/console/src/components/AppContent/components/Topbar/index.tsx +++ b/packages/console/src/components/AppContent/components/Topbar/index.tsx @@ -5,6 +5,7 @@ import Spacer from '@/components/Spacer'; import Logo from '@/icons/Logo'; import GetStartedProgress from '@/pages/GetStarted/components/GetStartedProgress'; +import UserInfo from '../UserInfo'; import * as styles from './index.module.scss'; const Topbar = () => { @@ -17,6 +18,7 @@ const Topbar = () => {
{t('admin_console.title')}
+ ); }; diff --git a/packages/console/src/components/AppContent/components/UserInfo/index.module.scss b/packages/console/src/components/AppContent/components/UserInfo/index.module.scss new file mode 100644 index 000000000..34afba859 --- /dev/null +++ b/packages/console/src/components/AppContent/components/UserInfo/index.module.scss @@ -0,0 +1,63 @@ +@use '@/scss/underscore' as _; + +.container { + display: flex; + align-items: center; + padding: _.unit(2); + margin-left: _.unit(4); + border-radius: 8px; + transition: background-color 0.2s ease-in-out; + user-select: none; + cursor: pointer; + + &:hover, + &.active { + background-color: var(--color-surface-5); + } + + img { + width: 36px; + height: 36px; + margin-right: _.unit(2); + border-radius: 6px; + } + + .wrapper { + display: flex; + flex-direction: column; + + .name { + font: var(--font-subhead-2); + color: var(--color-text); + } + + .role { + font: var(--font-body-small); + color: var(--color-caption); + } + } +} + +.dropdown { + padding: _.unit(2); +} + +.dropdownItem { + height: 40px; + padding: 0 _.unit(5) 0 _.unit(4); + border-radius: 8px; + min-width: 170px; + + &.loading { + opacity: 60%; + cursor: default; + + &:hover { + background-color: unset; + } + } + + .spinner { + margin-left: _.unit(6); + } +} diff --git a/packages/console/src/components/AppContent/components/UserInfo/index.tsx b/packages/console/src/components/AppContent/components/UserInfo/index.tsx new file mode 100644 index 000000000..8802e427a --- /dev/null +++ b/packages/console/src/components/AppContent/components/UserInfo/index.tsx @@ -0,0 +1,89 @@ +import { useLogto } from '@logto/react'; +import { User, UserRole } from '@logto/schemas'; +import classNames from 'classnames'; +import React, { useEffect, useRef, useState, MouseEvent } from 'react'; +import { useTranslation } from 'react-i18next'; + +import Dropdown, { DropdownItem } from '@/components/Dropdown'; +import Spinner from '@/components/Spinner'; +import { getAvatarById } from '@/consts/avatars'; +import useApi from '@/hooks/use-api'; +import SignOut from '@/icons/SignOut'; + +import * as styles from './index.module.scss'; + +const UserInfo = () => { + const { isAuthenticated, getIdTokenClaims, signOut } = useLogto(); + const api = useApi(); + const { t } = useTranslation(undefined, { keyPrefix: 'admin_console' }); + const anchorRef = useRef(null); + const [showDropDown, setShowDropdown] = useState(false); + const [user, setUser] = useState(); + const [isLoading, setIsLoading] = useState(false); + + useEffect(() => { + (async () => { + if (isAuthenticated) { + const { sub: userId } = getIdTokenClaims() ?? {}; + + if (userId) { + const data = await api.get(`/api/users/${userId}`).json(); + setUser(data); + } + } + })(); + }, [api, isAuthenticated, getIdTokenClaims]); + + if (!user) { + return null; + } + + const { id, name, avatar, roleNames } = user; + const isAdmin = roleNames.includes(UserRole.Admin); + + return ( + <> +
{ + setShowDropdown(true); + }} + > + +
+
{name}
+ {isAdmin &&
{t('user_details.roles.admin')}
} +
+
+ { + setShowDropdown(false); + }} + > + } + onClick={(event: MouseEvent) => { + event.stopPropagation(); + + if (isLoading) { + return; + } + setIsLoading(true); + void signOut(`${window.location.origin}/console`); + }} + > + {t('sign_out')} + {isLoading && } + + + + ); +}; + +export default UserInfo; diff --git a/packages/console/src/components/Button/index.module.scss b/packages/console/src/components/Button/index.module.scss index 723a45c00..b45edd748 100644 --- a/packages/console/src/components/Button/index.module.scss +++ b/packages/console/src/components/Button/index.module.scss @@ -1,12 +1,14 @@ @use '@/scss/underscore' as _; .button { + display: flex; + align-items: center; + justify-content: center; border: none; outline: none; border-radius: _.unit(2); font: var(--font-button); - transition: background 0.2s ease-in-out; - align-items: center; + transition: background-color 0.2s ease-in-out; white-space: nowrap; user-select: none; position: relative; @@ -20,16 +22,9 @@ opacity: 60%; .spinner { - width: 16px; - height: 16px; position: absolute; - top: 50%; left: 50%; - transform: translate(-50%, -50%); - - svg { - @include _.rotating-animation; - } + transform: translateX(-50%); } .spinner ~ span { diff --git a/packages/console/src/components/Button/index.tsx b/packages/console/src/components/Button/index.tsx index 31f1d99a0..ced3b1d47 100644 --- a/packages/console/src/components/Button/index.tsx +++ b/packages/console/src/components/Button/index.tsx @@ -3,7 +3,7 @@ import classNames from 'classnames'; import React, { HTMLProps, ReactElement, ReactNode, useEffect, useRef, useState } from 'react'; import { useTranslation } from 'react-i18next'; -import Spinner from '@/icons/Spinner'; +import Spinner from '@/components/Spinner'; import DangerousRaw from '../DangerousRaw'; import * as styles from './index.module.scss'; @@ -78,11 +78,7 @@ const Button = ({ }} {...rest} > - {showSpinner && ( - - - - )} + {showSpinner && } {icon && {icon}} {title && (typeof title === 'string' ? {t(title)} : title)} diff --git a/packages/console/src/components/Dropdown/DropdownItem.tsx b/packages/console/src/components/Dropdown/DropdownItem.tsx index 824ae30d0..76be4313f 100644 --- a/packages/console/src/components/Dropdown/DropdownItem.tsx +++ b/packages/console/src/components/Dropdown/DropdownItem.tsx @@ -1,10 +1,10 @@ import classNames from 'classnames'; -import React from 'react'; +import React, { MouseEvent } from 'react'; import * as styles from './DropdownItem.module.scss'; type Props = { - onClick?: () => void; + onClick?: (event: MouseEvent) => void; className?: string; children: React.ReactNode; icon?: React.ReactNode; diff --git a/packages/console/src/components/Spinner/index.module.scss b/packages/console/src/components/Spinner/index.module.scss new file mode 100644 index 000000000..b066fcc98 --- /dev/null +++ b/packages/console/src/components/Spinner/index.module.scss @@ -0,0 +1,12 @@ +@use '@/scss/underscore' as _; + +.spinner { + width: 16px; + height: 16px; + display: inline-flex; + align-items: center; + + svg { + @include _.rotating-animation; + } +} diff --git a/packages/console/src/components/Spinner/index.tsx b/packages/console/src/components/Spinner/index.tsx new file mode 100644 index 000000000..8f7da30bb --- /dev/null +++ b/packages/console/src/components/Spinner/index.tsx @@ -0,0 +1,21 @@ +import classNames from 'classnames'; +import React from 'react'; + +import * as styles from './index.module.scss'; + +type Props = { + className?: string; +}; + +const Spinner = ({ className }: Props) => ( + + + + + +); + +export default Spinner; diff --git a/packages/console/src/icons/SignOut.tsx b/packages/console/src/icons/SignOut.tsx new file mode 100644 index 000000000..ec7e7d8f9 --- /dev/null +++ b/packages/console/src/icons/SignOut.tsx @@ -0,0 +1,21 @@ +import React, { SVGProps } from 'react'; + +const SignOut = (props: SVGProps) => { + return ( + + + + ); +}; + +export default SignOut; diff --git a/packages/console/src/icons/Spinner.tsx b/packages/console/src/icons/Spinner.tsx deleted file mode 100644 index 54f5ee3bb..000000000 --- a/packages/console/src/icons/Spinner.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import React, { SVGProps } from 'react'; - -const Spinner = (props: SVGProps) => ( - - - -); - -export default Spinner; diff --git a/packages/console/src/scss/details.module.scss b/packages/console/src/scss/details.module.scss index 52f178841..650f0974e 100644 --- a/packages/console/src/scss/details.module.scss +++ b/packages/console/src/scss/details.module.scss @@ -18,7 +18,6 @@ } .footer { - text-align: right; position: sticky; bottom: 0; margin: 0 _.unit(-6); @@ -27,6 +26,8 @@ background: var(--color-base); .footerMain { + display: flex; + justify-content: flex-end; border-bottom-left-radius: 16px; border-bottom-right-radius: 16px; background: var(--color-layer-1); diff --git a/packages/phrases/src/locales/en.ts b/packages/phrases/src/locales/en.ts index 93c03232a..deadf5532 100644 --- a/packages/phrases/src/locales/en.ts +++ b/packages/phrases/src/locales/en.ts @@ -96,6 +96,8 @@ const translation = { }, admin_console: { title: 'Admin Console', + sign_out: 'Sign out', + profile: 'Profile', copy: { pending: 'Copy', copying: 'Copying', diff --git a/packages/phrases/src/locales/zh-cn.ts b/packages/phrases/src/locales/zh-cn.ts index 4eccd1191..966822ac9 100644 --- a/packages/phrases/src/locales/zh-cn.ts +++ b/packages/phrases/src/locales/zh-cn.ts @@ -96,6 +96,8 @@ const translation = { }, admin_console: { title: '管理面板', + sign_out: '登出', + profile: '账户管理', copy: { pending: '拷贝', copying: '拷贝中', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f84d7667d..7b7e45d03 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -633,7 +633,7 @@ importers: specifiers: '@fontsource/roboto-mono': ^4.5.7 '@logto/phrases': ^0.1.0 - '@logto/react': ^0.1.11 + '@logto/react': ^0.1.12 '@logto/schemas': ^0.1.0 '@logto/shared': ^0.1.0 '@mdx-js/react': ^1.6.22 @@ -689,7 +689,7 @@ importers: devDependencies: '@fontsource/roboto-mono': 4.5.7 '@logto/phrases': link:../phrases - '@logto/react': 0.1.11_react@17.0.2 + '@logto/react': 0.1.12_react@17.0.2 '@logto/schemas': link:../schemas '@logto/shared': link:../shared '@mdx-js/react': 1.6.22_react@17.0.2 @@ -921,7 +921,7 @@ importers: stylelint: ^14.8.2 typescript: ^4.7.2 devDependencies: - '@logto/react': 0.1.11_react@17.0.2 + '@logto/react': 0.1.12_react@17.0.2 '@logto/schemas': link:../schemas '@logto/shared': link:../shared '@parcel/core': 2.5.0 @@ -4625,7 +4625,6 @@ packages: pacote: 13.4.1 semver: 7.3.7 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -4656,7 +4655,6 @@ packages: p-waterfall: 2.1.1 semver: 7.3.7 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -4797,7 +4795,6 @@ packages: whatwg-url: 8.7.0 yargs-parser: 20.2.4 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -4995,7 +4992,6 @@ packages: npm-registry-fetch: 9.0.0 npmlog: 4.1.2 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -5025,7 +5021,6 @@ packages: pify: 5.0.0 read-package-json: 3.0.1 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -5064,7 +5059,6 @@ packages: npmlog: 4.1.2 tar: 6.1.11 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -5163,7 +5157,6 @@ packages: pacote: 13.4.1 semver: 7.3.7 transitivePeerDependencies: - - bluebird - encoding - supports-color dev: true @@ -5209,7 +5202,6 @@ packages: '@npmcli/run-script': 3.0.2 npmlog: 4.1.2 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -5311,7 +5303,6 @@ packages: slash: 3.0.0 write-json-file: 4.3.0 transitivePeerDependencies: - - bluebird - encoding - supports-color dev: true @@ -5358,8 +5349,8 @@ packages: superstruct: 0.15.4 dev: true - /@logto/react/0.1.11_react@17.0.2: - resolution: {integrity: sha512-iu4weOF300A5A+6/O1bnHkq4VUTi1vkRiHb+XSgVhs4xE2Hd3uE4tfT7PqWQbBZW1KJktiGFgR8pOGwfDnVgLw==} + /@logto/react/0.1.12_react@17.0.2: + resolution: {integrity: sha512-Bo6qlAm5JHeNofKdfzsMd+FtIvwmONqORjMUnN1Fv8qvs9/mHGD+0fsM4dAHj2cV5FdDRARhDjXwBeg3CMvrBQ==} requiresBuild: true peerDependencies: react: '>=16.8.0' @@ -5495,7 +5486,6 @@ packages: treeverse: 2.0.0 walk-up-path: 1.0.0 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -5531,8 +5521,6 @@ packages: promise-retry: 2.0.1 semver: 7.3.7 which: 2.0.2 - transitivePeerDependencies: - - bluebird dev: true /@npmcli/installed-package-contents/1.0.7: @@ -5563,7 +5551,6 @@ packages: pacote: 13.4.1 semver: 7.3.7 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -5615,7 +5602,6 @@ packages: node-gyp: 9.0.0 read-package-json-fast: 2.0.3 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -6671,7 +6657,6 @@ packages: stylelint-config-xo-scss: 0.15.0_cazrl3eatzhkw4y7xb6glndqh4 transitivePeerDependencies: - eslint - - eslint-import-resolver-webpack - postcss - prettier - supports-color @@ -6691,7 +6676,6 @@ packages: stylelint-config-xo-scss: 0.15.0_zhymizk4kfitko2u2d4p3qwyee transitivePeerDependencies: - eslint - - eslint-import-resolver-webpack - postcss - prettier - supports-color @@ -6711,7 +6695,6 @@ packages: stylelint-config-xo-scss: 0.15.0_cazrl3eatzhkw4y7xb6glndqh4 transitivePeerDependencies: - eslint - - eslint-import-resolver-webpack - postcss - prettier - supports-color @@ -6735,7 +6718,7 @@ packages: eslint-import-resolver-typescript: 2.5.0_rnagsyfcubvpoxo2ynj23pim7u eslint-plugin-consistent-default-export-name: 0.0.7 eslint-plugin-eslint-comments: 3.2.0_eslint@8.10.0 - eslint-plugin-import: 2.25.4_sidoke6kqbkbdht6nlmwbfnany + eslint-plugin-import: 2.25.4_eslint@8.10.0 eslint-plugin-no-use-extend-native: 0.5.0 eslint-plugin-node: 11.1.0_eslint@8.10.0 eslint-plugin-prettier: 3.4.1_6pitu4b2tqihty6rv5qeiyb35m @@ -6745,7 +6728,6 @@ packages: pkg-dir: 4.2.0 prettier: 2.5.1 transitivePeerDependencies: - - eslint-import-resolver-webpack - supports-color - typescript dev: true @@ -6767,7 +6749,7 @@ packages: eslint-import-resolver-typescript: 2.5.0_rnagsyfcubvpoxo2ynj23pim7u eslint-plugin-consistent-default-export-name: 0.0.7 eslint-plugin-eslint-comments: 3.2.0_eslint@8.10.0 - eslint-plugin-import: 2.25.4_sidoke6kqbkbdht6nlmwbfnany + eslint-plugin-import: 2.25.4_eslint@8.10.0 eslint-plugin-no-use-extend-native: 0.5.0 eslint-plugin-node: 11.1.0_eslint@8.10.0 eslint-plugin-prettier: 3.4.1_6pitu4b2tqihty6rv5qeiyb35m @@ -6777,7 +6759,6 @@ packages: pkg-dir: 4.2.0 prettier: 2.5.1 transitivePeerDependencies: - - eslint-import-resolver-webpack - supports-color - typescript dev: true @@ -6799,7 +6780,7 @@ packages: eslint-import-resolver-typescript: 2.5.0_rnagsyfcubvpoxo2ynj23pim7u eslint-plugin-consistent-default-export-name: 0.0.7 eslint-plugin-eslint-comments: 3.2.0_eslint@8.10.0 - eslint-plugin-import: 2.25.4_sidoke6kqbkbdht6nlmwbfnany + eslint-plugin-import: 2.25.4_eslint@8.10.0 eslint-plugin-no-use-extend-native: 0.5.0 eslint-plugin-node: 11.1.0_eslint@8.10.0 eslint-plugin-prettier: 3.4.1_6pitu4b2tqihty6rv5qeiyb35m @@ -6809,7 +6790,6 @@ packages: pkg-dir: 4.2.0 prettier: 2.5.1 transitivePeerDependencies: - - eslint-import-resolver-webpack - supports-color - typescript dev: true @@ -6831,7 +6811,7 @@ packages: eslint-import-resolver-typescript: 2.5.0_rnagsyfcubvpoxo2ynj23pim7u eslint-plugin-consistent-default-export-name: 0.0.7 eslint-plugin-eslint-comments: 3.2.0_eslint@8.10.0 - eslint-plugin-import: 2.25.4_sidoke6kqbkbdht6nlmwbfnany + eslint-plugin-import: 2.25.4_eslint@8.10.0 eslint-plugin-no-use-extend-native: 0.5.0 eslint-plugin-node: 11.1.0_eslint@8.10.0 eslint-plugin-prettier: 3.4.1_6pitu4b2tqihty6rv5qeiyb35m @@ -6841,7 +6821,6 @@ packages: pkg-dir: 4.2.0 prettier: 2.5.1 transitivePeerDependencies: - - eslint-import-resolver-webpack - supports-color - typescript dev: true @@ -9039,8 +9018,6 @@ packages: qs: 6.9.7 raw-body: 2.4.3 type-is: 1.6.18 - transitivePeerDependencies: - - supports-color dev: true /bonjour-service/1.0.11: @@ -9235,8 +9212,6 @@ packages: ssri: 8.0.1 tar: 6.1.11 unique-filename: 1.1.1 - transitivePeerDependencies: - - bluebird dev: true /cacache/16.1.0: @@ -9261,8 +9236,6 @@ packages: ssri: 9.0.1 tar: 6.1.11 unique-filename: 1.1.1 - transitivePeerDependencies: - - bluebird dev: true /cache-content-type/1.0.1: @@ -9790,8 +9763,6 @@ packages: on-headers: 1.0.2 safe-buffer: 5.1.2 vary: 1.1.2 - transitivePeerDependencies: - - supports-color dev: true /concat-map/0.0.1: @@ -10416,22 +10387,12 @@ packages: /debug/2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true dependencies: ms: 2.0.0 dev: true /debug/3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true dependencies: ms: 2.1.3 @@ -10659,8 +10620,6 @@ packages: dependencies: address: 1.1.2 debug: 2.6.9 - transitivePeerDependencies: - - supports-color dev: true /detect-port/1.3.0: @@ -10670,8 +10629,6 @@ packages: dependencies: address: 1.1.2 debug: 2.6.9 - transitivePeerDependencies: - - supports-color dev: true /dezalgo/1.0.3: @@ -11200,7 +11157,7 @@ packages: dependencies: debug: 4.3.3 eslint: 8.10.0 - eslint-plugin-import: 2.25.4_sidoke6kqbkbdht6nlmwbfnany + eslint-plugin-import: 2.25.4_eslint@8.10.0 glob: 7.2.0 is-glob: 4.0.3 resolve: 1.22.0 @@ -11209,31 +11166,12 @@ packages: - supports-color dev: true - /eslint-module-utils/2.7.3_l62aq42yiamaj3cnpuf6avthf4: + /eslint-module-utils/2.7.3: resolution: {integrity: sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==} engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true dependencies: - '@typescript-eslint/parser': 5.14.0_fo4uz55zgcu432252zy2gvpvcu debug: 3.2.7 - eslint-import-resolver-node: 0.3.6 - eslint-import-resolver-typescript: 2.5.0_rnagsyfcubvpoxo2ynj23pim7u find-up: 2.1.0 - transitivePeerDependencies: - - supports-color dev: true /eslint-plugin-consistent-default-export-name/0.0.7: @@ -11268,24 +11206,19 @@ packages: ignore: 5.2.0 dev: true - /eslint-plugin-import/2.25.4_sidoke6kqbkbdht6nlmwbfnany: + /eslint-plugin-import/2.25.4_eslint@8.10.0: resolution: {integrity: sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==} engines: {node: '>=4'} peerDependencies: - '@typescript-eslint/parser': '*' eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true dependencies: - '@typescript-eslint/parser': 5.14.0_fo4uz55zgcu432252zy2gvpvcu array-includes: 3.1.4 array.prototype.flat: 1.2.5 debug: 2.6.9 doctrine: 2.1.0 eslint: 8.10.0 eslint-import-resolver-node: 0.3.6 - eslint-module-utils: 2.7.3_l62aq42yiamaj3cnpuf6avthf4 + eslint-module-utils: 2.7.3 has: 1.0.3 is-core-module: 2.8.1 is-glob: 4.0.3 @@ -11293,10 +11226,6 @@ packages: object.values: 1.1.5 resolve: 1.22.0 tsconfig-paths: 3.13.0 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color dev: true /eslint-plugin-no-use-extend-native/0.5.0: @@ -11688,8 +11617,6 @@ packages: type-is: 1.6.18 utils-merge: 1.0.1 vary: 1.1.2 - transitivePeerDependencies: - - supports-color dev: true /extend-shallow/2.0.1: @@ -11881,8 +11808,6 @@ packages: parseurl: 1.3.3 statuses: 1.5.0 unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color dev: true /find-cache-dir/3.3.2: @@ -14654,7 +14579,6 @@ packages: import-local: 3.1.0 npmlog: 4.1.2 transitivePeerDependencies: - - bluebird - encoding - supports-color dev: true @@ -14689,7 +14613,6 @@ packages: npm-package-arg: 8.1.5 npm-registry-fetch: 11.0.0 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -14703,7 +14626,6 @@ packages: semver: 7.3.7 ssri: 8.0.1 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -14886,7 +14808,7 @@ packages: dev: true /lodash.get/4.4.2: - resolution: {integrity: sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=} + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} dev: true /lodash.ismatch/4.4.0: @@ -14909,7 +14831,7 @@ packages: dev: true /lodash.once/4.1.1: - resolution: {integrity: sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=} + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} dev: true /lodash.orderby/4.6.0: @@ -15078,7 +15000,6 @@ packages: socks-proxy-agent: 6.1.1 ssri: 9.0.1 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -15102,7 +15023,6 @@ packages: socks-proxy-agent: 5.0.1 ssri: 8.0.1 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -15127,7 +15047,6 @@ packages: socks-proxy-agent: 6.1.1 ssri: 8.0.1 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -16021,7 +15940,6 @@ packages: tar: 6.1.11 which: 2.0.2 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -16197,7 +16115,6 @@ packages: minizlib: 2.1.2 npm-package-arg: 8.1.5 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -16213,7 +16130,6 @@ packages: npm-package-arg: 9.0.2 proc-log: 2.0.1 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -16230,7 +16146,6 @@ packages: minizlib: 2.1.2 npm-package-arg: 8.1.5 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -16656,7 +16571,6 @@ packages: ssri: 9.0.1 tar: 6.1.11 transitivePeerDependencies: - - bluebird - supports-color dev: true @@ -17832,11 +17746,6 @@ packages: /promise-inflight/1.0.1: resolution: {integrity: sha1-mEcocL8igTL8vdhoEputEsPAKeM=} - peerDependencies: - bluebird: '*' - peerDependenciesMeta: - bluebird: - optional: true dev: true /promise-retry/2.0.1: @@ -18109,7 +18018,6 @@ packages: text-table: 0.2.0 transitivePeerDependencies: - eslint - - supports-color - typescript - vue-template-compiler - webpack @@ -19217,8 +19125,6 @@ packages: on-finished: 2.3.0 range-parser: 1.2.1 statuses: 1.5.0 - transitivePeerDependencies: - - supports-color dev: true /serialize-error/7.0.1: @@ -19265,8 +19171,6 @@ packages: http-errors: 1.6.3 mime-types: 2.1.35 parseurl: 1.3.3 - transitivePeerDependencies: - - supports-color dev: true /serve-static/1.14.2: @@ -19277,8 +19181,6 @@ packages: escape-html: 1.0.3 parseurl: 1.3.3 send: 0.17.2 - transitivePeerDependencies: - - supports-color dev: true /set-blocking/2.0.0: