core/ui: improve frontend build size (#5109)

* core/ui: improve frontend build size

* remove luxon

* add lodash

* remove console.log

* only generate sourcemap when watching
This commit is contained in:
Caleb Doxsey 2024-05-09 07:10:00 -06:00 committed by GitHub
parent d225288ab3
commit ab388211f2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
36 changed files with 358 additions and 297 deletions

2
.gitignore vendored
View file

@ -41,7 +41,6 @@ _testmain.go
# Without this, the *.[568vq] above ignores this folder.
!**/graphrbac/1.6
.DS_Store
.idea
.vscode
@ -59,7 +58,6 @@ tags
*.ipr
*.iml
# dependencies
ui/node_modules
ui/bower_components

View file

@ -29,7 +29,7 @@
"@fontsource/dm-sans": "^5.0.13",
"@mui/icons-material": "^5.14.9",
"@mui/material": "^5.4.0",
"luxon": "^2.5.2",
"lodash": "^4.17.21",
"markdown-to-jsx": "^7.2.1",
"react": "^17.0.2",
"react-dom": "^17.0.2",
@ -37,13 +37,13 @@
},
"devDependencies": {
"@trivago/prettier-plugin-sort-imports": "^4.2.1",
"@types/luxon": "^2.0.9",
"@types/node": "^17.0.14",
"@types/lodash": "^4.17.1",
"@types/node": "^20.12.11",
"@types/react": "^17.0.34",
"@types/react-dom": "^17.0.11",
"@typescript-eslint/eslint-plugin": "^5.10.2",
"@typescript-eslint/parser": "^5.59.11",
"esbuild": "^0.13.12",
"esbuild": "^0.21.1",
"eslint": "7.32.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-react": "^7.28.0",

View file

@ -1,16 +1,28 @@
import { build } from "esbuild";
/// <reference types="node" />
import { BuildOptions, build, context } from "esbuild";
build({
entryPoints: ["src/index.tsx"],
bundle: true,
outfile: "dist/index.js",
sourcemap: "inline",
watch: process.argv.includes("--watch"),
minify: !process.argv.includes("--watch"),
logLevel: "info",
loader: {
".svg": "dataurl",
".woff": "dataurl",
".woff2": "dataurl",
},
});
async function run() {
const watching = process.argv.includes("--watch");
const cfg: BuildOptions = {
entryPoints: ["src/index.tsx"],
bundle: true,
outdir: "dist",
sourcemap: watching ? "inline" : false,
minify: !watching,
logLevel: "info",
loader: {
".svg": "dataurl",
".woff": "dataurl",
".woff2": "dataurl",
},
};
if (watching) {
await (await context(cfg)).watch();
} else {
await build(cfg);
}
}
run();

View file

@ -1,6 +1,4 @@
import Box from "@mui/material/Box";
import CssBaseline from "@mui/material/CssBaseline";
import { ThemeProvider } from "@mui/material/styles";
import { Box, CssBaseline, ThemeProvider } from "@mui/material";
import React, { FC, useLayoutEffect } from "react";
import ErrorPage from "./components/ErrorPage";

View file

@ -1,8 +1,12 @@
import Alert, { AlertColor } from "@mui/material/Alert";
import Dialog, { DialogProps } from "@mui/material/Dialog";
import DialogActions from "@mui/material/DialogActions";
import DialogContent from "@mui/material/DialogContent";
import DialogTitle from "@mui/material/DialogTitle";
import {
Alert,
AlertColor,
Dialog,
DialogActions,
DialogContent,
DialogProps,
DialogTitle,
} from "@mui/material";
import React, { FC } from "react";
export type AlertDialogProps = DialogProps & {

View file

@ -1,5 +1,5 @@
import MuiAvatar from "@mui/material/Avatar";
import { isArray } from "lodash";
import { Avatar as MuiAvatar } from "@mui/material";
import isArray from "lodash/isArray";
import React from "react";
import { User } from "react-feather";

View file

@ -1,6 +1,6 @@
import TableCell from "@mui/material/TableCell";
import TableRow from "@mui/material/TableRow";
import { isArray, startCase } from "lodash";
import { TableCell, TableRow } from "@mui/material";
import isArray from "lodash/isArray";
import startCase from "lodash/startCase";
import React, { FC } from "react";
import ClaimValue from "./ClaimValue";

View file

@ -1,7 +1,7 @@
import IDField from "./IDField";
import { DateTime } from "luxon";
import React, { FC } from "react";
import IDField from "./IDField";
const unixSecondTimestampFields = new Set(["exp", "iat", "nbf", "auth_time"]);
const idFields = new Set(["groups", "jti", "oid", "tid", "wids"]);
@ -12,7 +12,7 @@ type ClaimValueProps = {
};
const ClaimValue: FC<ClaimValueProps> = ({ claimKey, claimValue }) => {
if (unixSecondTimestampFields.has(claimKey)) {
return <>{DateTime.fromMillis((claimValue as number) * 1000).toISO()}</>;
return <>{new Date((claimValue as number) * 1000).toISOString()}</>;
}
if (idFields.has(claimKey)) {

View file

@ -1,14 +1,17 @@
import IDField from "./IDField";
import Alert from "@mui/material/Alert";
import Button from "@mui/material/Button";
import Table from "@mui/material/Table";
import TableBody from "@mui/material/TableBody";
import TableCell from "@mui/material/TableCell";
import TableContainer from "@mui/material/TableContainer";
import TableHead from "@mui/material/TableHead";
import TableRow from "@mui/material/TableRow";
import {
Alert,
Button,
Table,
TableBody,
TableCell,
TableContainer,
TableHead,
TableRow,
} from "@mui/material";
import React, { FC } from "react";
import IDField from "./IDField";
export type DeviceCredentialsTableProps = {
csrfToken: string;
ids: string[];
@ -17,7 +20,7 @@ export type DeviceCredentialsTableProps = {
export const DeviceCredentialsTable: FC<DeviceCredentialsTableProps> = ({
csrfToken,
ids,
webAuthnUrl
webAuthnUrl,
}) => {
return (
<TableContainer>

View file

@ -1,14 +1,17 @@
import { ListItemProps, TableCell } from "@mui/material";
import Alert from "@mui/material/Alert";
import AlertTitle from "@mui/material/AlertTitle";
import Box from "@mui/material/Box";
import Container from "@mui/material/Container";
import Paper from "@mui/material/Paper";
import Stack from "@mui/material/Stack";
import Table from "@mui/material/Table";
import TableHead from "@mui/material/TableHead";
import TableRow from "@mui/material/TableRow";
import Typography from "@mui/material/Typography";
import {
Alert,
AlertTitle,
Box,
Container,
ListItemProps,
Paper,
Stack,
Table,
TableCell,
TableHead,
TableRow,
Typography,
} from "@mui/material";
import Markdown from "markdown-to-jsx";
import React, { FC } from "react";
import { CheckCircle, MinusCircle, XCircle } from "react-feather";
@ -20,7 +23,7 @@ type PolicyEvaluationTraceDetailsProps = {
trace: PolicyEvaluationTrace;
} & ListItemProps;
const PolicyEvaluationTraceDetails: FC<PolicyEvaluationTraceDetailsProps> = ({
trace
trace,
}) => {
return (
<TableRow>
@ -58,10 +61,11 @@ export const ErrorPage: FC<ErrorPageProps> = ({ data }) => {
<Paper sx={{ overflow: "hidden" }}>
<Stack>
<Box sx={{ padding: "16px" }}>
<Alert severity={status < 200 || status >= 300 ? "error" : "success"}>
<Alert
severity={status < 200 || status >= 300 ? "error" : "success"}
>
<AlertTitle>
{status}{" "}
{data?.statusText || "Internal Server Error"}
{status} {data?.statusText || "Internal Server Error"}
</AlertTitle>
{data?.description ? (
<Markdown>{data.description}</Markdown>

View file

@ -6,7 +6,7 @@ const ExperimentalIcon = createSvgIcon(
<path
d="M20.5 19.34 16.14 12a1 1 0 0 1-.14-.51V2.5a.5.5 0 0 1 .5-.5H18a1 1 0 0 0 0-2H6a1 1 0 0 0 0 2h1.5a.5.5 0 0 1 .5.5v9a1 1 0 0 1-.14.51l-4.32 7.27A3 3 0 0 0 6 24h12a3 3 0 0 0 2.49-4.66ZM8.67 16a.5.5 0 0 1-.43-.25.5.5 0 0 1 0-.5l1.62-2.74A1 1 0 0 0 10 12V2.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v2.75a.5.5 0 0 1-.5.5h-1.32a.75.75 0 0 0 0 1.5h1.32a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1.32a.75.75 0 0 0 0 1.5h1.32a.5.5 0 0 1 .5.5V12a1 1 0 0 0 .14.51l1.61 2.74a.47.47 0 0 1 0 .5.52.52 0 0 1-.44.25Zm.82 5.82a1.5 1.5 0 1 1 1.5-1.5 1.5 1.5 0 0 1-1.5 1.5Zm4.22-3a1 1 0 0 1 0-2 1 1 0 0 1 0 2Zm2.49 3.09a1 1 0 1 1 1-1 1 1 0 0 1-1 .98Z"
style={{
fill: "#5e6a82"
fill: "#5e6a82",
}}
transform="scale(.83333)"
/>

View file

@ -1,6 +1,4 @@
import AppBar from "@mui/material/AppBar";
import Box from "@mui/material/Box";
import Stack from "@mui/material/Stack";
import { AppBar, Box, Stack } from "@mui/material";
import React, { FC } from "react";
import { FooterLink } from "./FooterLink";

View file

@ -1,9 +1,9 @@
import * as React from 'react';
import { styled } from '@mui/system';
import {Link} from "@mui/material";
import { Link } from "@mui/material";
import { styled } from "@mui/system";
import * as React from "react";
export const FooterLink = styled(Link)(({ theme }) => ({
fontSize: '1.25rem',
fontSize: "1.25rem",
fontWeight: `bold`,
color: theme.palette.background.default,
}));

View file

@ -1,10 +1,12 @@
import Alert from "@mui/material/Alert";
import Table from "@mui/material/Table";
import TableBody from "@mui/material/TableBody";
import TableCell from "@mui/material/TableCell";
import TableContainer from "@mui/material/TableContainer";
import TableHead from "@mui/material/TableHead";
import TableRow from "@mui/material/TableRow";
import {
Alert,
Table,
TableBody,
TableCell,
TableContainer,
TableHead,
TableRow,
} from "@mui/material";
import React, { FC } from "react";
import { Group } from "../types";

View file

@ -1,16 +1,16 @@
import {
AppBar,
Box,
Drawer,
IconButton,
Menu,
MenuItem,
Toolbar,
styled,
useMediaQuery,
useTheme,
} from "@mui/material";
import AppBar from "@mui/material/AppBar";
import Box from "@mui/material/Box";
import Toolbar from "@mui/material/Toolbar";
import { useTheme } from "@mui/material/styles";
import styled from "@mui/material/styles/styled";
import { get } from "lodash";
import get from "lodash/get";
import React, { FC, useState } from "react";
import { ChevronLeft, ChevronRight, Menu as MenuIcon } from "react-feather";

View file

@ -1,6 +1,4 @@
import Paper from "@mui/material/Paper";
import Stack from "@mui/material/Stack";
import Typography from "@mui/material/Typography";
import { Paper, Stack, Typography } from "@mui/material";
import React, { FC } from "react";
export type HeroSectionProps = {

View file

@ -1,4 +1,4 @@
import Box from "@mui/material/Box";
import { Box } from "@mui/material";
import React, { FC } from "react";
export type IDFieldProps = {

View file

@ -13,7 +13,7 @@ const JwtIcon = createSvgIcon(
stroke: "none",
fillRule: "evenodd",
fill: "#fff",
fillOpacity: 1
fillOpacity: 1,
}}
d="M8.586 4.04 8.57.042H6.34l.015 3.996L7.47 5.57ZM6.355 10.887v4.008h2.23v-4.008L7.47 9.355Zm0 0"
/>
@ -22,7 +22,7 @@ const JwtIcon = createSvgIcon(
stroke: "none",
fillRule: "evenodd",
fill: "#00f2e6",
fillOpacity: 1
fillOpacity: 1,
}}
d="m8.586 10.887 2.344 3.238 1.797-1.309-2.344-3.238L8.586 9ZM6.355 4.04 3.996.8 2.2 2.11l2.344 3.238 1.812.578Zm0 0"
/>
@ -31,7 +31,7 @@ const JwtIcon = createSvgIcon(
stroke: "none",
fillRule: "evenodd",
fill: "#00b9f1",
fillOpacity: 1
fillOpacity: 1,
}}
d="m4.543 5.348-3.8-1.235-.684 2.11 3.804 1.246 1.797-.594ZM9.266 8.05l1.117 1.528 3.8 1.235.684-2.11-3.805-1.234Zm0 0"
/>
@ -40,7 +40,7 @@ const JwtIcon = createSvgIcon(
stroke: "none",
fillRule: "evenodd",
fill: "#d63aff",
fillOpacity: 1
fillOpacity: 1,
}}
d="m11.063 7.469 3.804-1.246-.683-2.11-3.801 1.235-1.117 1.527ZM3.863 7.469.06 8.703l.683 2.11 3.801-1.235L5.66 8.051Zm0 0"
/>
@ -49,7 +49,7 @@ const JwtIcon = createSvgIcon(
stroke: "none",
fillRule: "evenodd",
fill: "#fb015b",
fillOpacity: 1
fillOpacity: 1,
}}
d="m4.543 9.578-2.344 3.238 1.797 1.309 2.36-3.238V9ZM10.383 5.348l2.344-3.239L10.93.801 8.586 4.039v1.887Zm0 0"
/>

View file

@ -1,7 +1,6 @@
import React from "react";
import type { FC } from "react";
import React, { FC } from "react";
const Logo: FC<{src: string}> = ({src}) => {
const Logo: FC<{ src: string }> = ({ src }) => {
return <img alt="Logo" src={src} height="30px" />;
};

View file

@ -1,4 +1,4 @@
import SvgIcon, { SvgIconProps } from "@mui/material/SvgIcon";
import { SvgIcon, SvgIconProps } from "@mui/material";
import React, { FC } from "react";
import { User } from "react-feather";

View file

@ -1,11 +1,8 @@
import SectionFooter from "./SectionFooter";
import Box from "@mui/material/Box";
import Paper from "@mui/material/Paper";
import Stack from "@mui/material/Stack";
import Toolbar from "@mui/material/Toolbar";
import Typography from "@mui/material/Typography";
import { Box, Paper, Stack, Toolbar, Typography } from "@mui/material";
import React, { FC } from "react";
import SectionFooter from "./SectionFooter";
export type SectionProps = React.PropsWithChildren<{
title: React.ReactNode;
icon?: React.ReactNode;
@ -15,16 +12,16 @@ export const Section: FC<SectionProps> = ({
title,
icon,
children,
footer
footer,
}) => {
return (
<Paper sx={{ overflow: "hidden" }}>
<Stack>
<Toolbar>
<Typography variant="h4">
{title}
</Typography>
{!!icon && (<Box sx={{marginLeft: (theme) => theme.spacing(3)}}>{icon}</Box>)}
<Typography variant="h4">{title}</Typography>
{!!icon && (
<Box sx={{ marginLeft: (theme) => theme.spacing(3) }}>{icon}</Box>
)}
</Toolbar>
<Box sx={{ padding: 3, paddingTop: 0 }}>{children}</Box>
{footer ? (

View file

@ -1,9 +1,8 @@
import Box from "@mui/material/Box";
import styled from "@mui/material/styles/styled";
import { Box, styled } from "@mui/material";
import React, { FC } from "react";
export const SectionFooter = styled(Box)(({ theme }) => ({
backgroundColor: theme.palette.grey[100],
padding: theme.spacing(3)
padding: theme.spacing(3),
}));
export default SectionFooter;

View file

@ -1,11 +1,13 @@
import Alert from "@mui/material/Alert";
import AlertTitle from "@mui/material/AlertTitle";
import Stack from "@mui/material/Stack";
import Table from "@mui/material/Table";
import TableBody from "@mui/material/TableBody";
import TableCell from "@mui/material/TableCell";
import TableContainer from "@mui/material/TableContainer";
import TableRow from "@mui/material/TableRow";
import {
Alert,
AlertTitle,
Stack,
Table,
TableBody,
TableCell,
TableContainer,
TableRow,
} from "@mui/material";
import React, { FC } from "react";
import { Profile, Session } from "../types";

View file

@ -1,8 +1,4 @@
import Box from "@mui/material/Box";
import Paper from "@mui/material/Paper";
import Stack from "@mui/material/Stack";
import Toolbar from "@mui/material/Toolbar";
import Typography from "@mui/material/Typography";
import { Box, Paper, Stack, Toolbar, Typography } from "@mui/material";
import React, { FC } from "react";
import DeviceCredentialsTable from "../components/DeviceCredentialsTable";

View file

@ -1,13 +1,15 @@
import Button from "@mui/material/Button";
import Container from "@mui/material/Container";
import Dialog from "@mui/material/Dialog";
import DialogActions from "@mui/material/DialogActions";
import DialogContent from "@mui/material/DialogContent";
import DialogContentText from "@mui/material/DialogContentText";
import DialogTitle from "@mui/material/DialogTitle";
import styled from "@mui/material/styles/styled";
import {
Button,
Container,
Dialog,
DialogActions,
DialogContent,
DialogContentText,
DialogTitle,
} from "@mui/material";
import React, { FC } from "react";
import { SignOutConfirmPageData } from "src/types";
import { SignOutConfirmPageData } from "../types";
type SignOutConfirmPageProps = {
data: SignOutConfirmPageData;

View file

@ -1,7 +1,7 @@
import { Alert } from "@mui/material";
import Container from "@mui/material/Container";
import { Alert, Container } from "@mui/material";
import React, { FC } from "react";
import { SignedOutPageData } from "src/types";
import { SignedOutPageData } from "../types";
type SignedOutPageProps = {
data: SignedOutPageData;

View file

@ -1,6 +1,6 @@
import styled from "@mui/material/styles/styled";
import {BaseCSSProperties} from "@mui/material/styles/createMixins";
import { styled } from "@mui/material";
import { BaseCSSProperties } from "@mui/material/styles/createMixins";
export const ToolbarOffset = styled('div')(({ theme }) => ({
export const ToolbarOffset = styled("div")(({ theme }) => ({
...(theme.mixins.toolbar as BaseCSSProperties),
}));

View file

@ -1,20 +1,20 @@
import {
Button,
Container,
Dialog,
DialogActions,
DialogContent,
DialogContentText,
DialogTitle,
Drawer,
Stack,
useMediaQuery,
useTheme,
} from "@mui/material";
import Container from "@mui/material/Container";
import Stack from "@mui/material/Stack";
import { useTheme } from "@mui/material/styles";
import React, { FC, useContext, useEffect, useState } from "react";
import { UserInfoData } from "src/types";
import { SubpageContext } from "../context/Subpage";
import { UserInfoData } from "../types";
import GroupDetails from "./GroupDetails";
import SessionDetails from "./SessionDetails";
import SessionDeviceCredentials from "./SessionDeviceCredentials";

View file

@ -1,8 +1,14 @@
import React, {FC, ReactNode, useContext} from "react";
import {SubpageContext} from "../context/Subpage";
import {List, ListItemButton, ListItemIcon, ListItemText} from "@mui/material";
import {User, Users} from "react-feather";
import {Devices} from "@mui/icons-material";
import { Devices } from "@mui/icons-material";
import {
List,
ListItemButton,
ListItemIcon,
ListItemText,
} from "@mui/material";
import React, { FC, ReactNode, useContext } from "react";
import { User, Users } from "react-feather";
import { SubpageContext } from "../context/Subpage";
export interface Subpage {
icon: ReactNode;
@ -11,45 +17,44 @@ export interface Subpage {
export const sectionList: Subpage[] = [
{
title: 'User',
icon: <User />
title: "User",
icon: <User />,
},
{
title: 'Groups Info',
icon: <Users />
title: "Groups Info",
icon: <Users />,
},
{
title: 'Devices Info',
icon: <Devices />
title: "Devices Info",
icon: <Devices />,
},
]
];
type UserSidebarContent = {
close: () => void | null;
};
export const UserSidebarContent:FC<UserSidebarContent> = ({close}:UserSidebarContent):JSX.Element => {
export const UserSidebarContent: FC<UserSidebarContent> = ({
close,
}: UserSidebarContent): JSX.Element => {
const info = useContext(SubpageContext);
return (
<List>
{sectionList.map(({title, icon}) => {
{sectionList.map(({ title, icon }) => {
return (
<ListItemButton
key={'tab ' + title}
key={"tab " + title}
selected={title === info.subpage}
onClick={() => {
info.setSubpage(title)
info.setSubpage(title);
!!close && close();
}}
>
<ListItemIcon>
{icon}
</ListItemIcon>
<ListItemIcon>{icon}</ListItemIcon>
<ListItemText primary={title} />
</ListItemButton>
)
);
})}
</List>
);
}
};
export default UserSidebarContent;

View file

@ -1,4 +1,4 @@
import React, { FC, useRef, useState } from "react";
import React, { FC } from "react";
import { WebAuthnRequestOptions } from "../types";
import { decode, encodeUrl } from "../util/base64";

View file

@ -1,4 +1,4 @@
import Button, { ButtonProps } from "@mui/material/Button";
import { Button, ButtonProps } from "@mui/material";
import React, { FC, useRef, useState } from "react";
import AlertDialog from "./AlertDialog";

View file

@ -1,7 +1,7 @@
import Stack from "@mui/material/Stack";
import { Stack } from "@mui/material";
import React, { FC } from "react";
import { WebAuthnRegistrationPageData } from "src/types";
import { WebAuthnRegistrationPageData } from "../types";
import ExperimentalIcon from "./ExperimentalIcon";
import Section from "./Section";
import WebAuthnAuthenticateButton from "./WebAuthnAuthenticateButton";

View file

@ -1,4 +1,4 @@
import React, { createContext, FC, useState } from "react";
import React, { FC, createContext, useState } from "react";
export interface SubpageContextValue {
subpage: string;

View file

@ -1,5 +1,6 @@
import App from "./App";
import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
ReactDOM.render(<App />, document.getElementById("root"));

View file

@ -1,13 +1,18 @@
import { softShadows } from "./shadows";
import "@fontsource/dm-mono";
import "@fontsource/dm-sans";
import common from "@mui/material/colors/common";
import muiCreateTheme, {
import {
Theme as MuiTheme,
} from "@mui/material/styles/createTheme";
createTheme as muiCreateTheme,
} from "@mui/material";
import common from "@mui/material/colors/common";
export const createTheme = (primaryColor: string, secondaryColor: string): MuiTheme => {
return muiCreateTheme({
import { softShadows } from "./shadows";
export const createTheme = (
primaryColor: string,
secondaryColor: string
): MuiTheme => {
return muiCreateTheme({
components: {
MuiBackdrop: {
styleOverrides: {
@ -117,7 +122,7 @@ export const createTheme = (primaryColor: string, secondaryColor: string): MuiTh
},
shadows: softShadows,
shape: {
borderRadius: "16px",
borderRadius: 16,
},
typography: {
fontFamily: [
@ -159,4 +164,4 @@ export const createTheme = (primaryColor: string, secondaryColor: string): MuiTh
},
},
});
}
};

View file

@ -360,6 +360,121 @@
resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6"
integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==
"@esbuild/aix-ppc64@0.21.1":
version "0.21.1"
resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.1.tgz#044268dc9ca4dc67f8d4aad8f51cfb894bfd7114"
integrity sha512-O7yppwipkXvnEPjzkSXJRk2g4bS8sUx9p9oXHq9MU/U7lxUzZVsnFZMDTmeeX9bfQxrFcvOacl/ENgOh0WP9pA==
"@esbuild/android-arm64@0.21.1":
version "0.21.1"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.1.tgz#76aacd934449e541f05b66d5ec8cbff96ec2ae81"
integrity sha512-jXhccq6es+onw7x8MxoFnm820mz7sGa9J14kLADclmiEUH4fyj+FjR6t0M93RgtlI/awHWhtF0Wgfhqgf9gDZA==
"@esbuild/android-arm@0.21.1":
version "0.21.1"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.1.tgz#8247c5aef933a212bca261290f6e43a9dca07cc5"
integrity sha512-hh3jKWikdnTtHCglDAeVO3Oyh8MaH8xZUaWMiCCvJ9/c3NtPqZq+CACOlGTxhddypXhl+8B45SeceYBfB/e8Ow==
"@esbuild/android-x64@0.21.1":
version "0.21.1"
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.1.tgz#80cbfa35412299edefbc4ab78064f0b66e448008"
integrity sha512-NPObtlBh4jQHE01gJeucqEhdoD/4ya2owSIS8lZYS58aR0x7oZo9lB2lVFxgTANSa5MGCBeoQtr+yA9oKCGPvA==
"@esbuild/darwin-arm64@0.21.1":
version "0.21.1"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.1.tgz#154167fb9e54017dac4b343f8e5e25c9d9324036"
integrity sha512-BLT7TDzqsVlQRmJfO/FirzKlzmDpBWwmCUlyggfzUwg1cAxVxeA4O6b1XkMInlxISdfPAOunV9zXjvh5x99Heg==
"@esbuild/darwin-x64@0.21.1":
version "0.21.1"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.1.tgz#db971502c9fa204906b89e489810c902bf6d9afb"
integrity sha512-D3h3wBQmeS/vp93O4B+SWsXB8HvRDwMyhTNhBd8yMbh5wN/2pPWRW5o/hM3EKgk9bdKd9594lMGoTCTiglQGRQ==
"@esbuild/freebsd-arm64@0.21.1":
version "0.21.1"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.1.tgz#f0f3bc20c23af999bd696099a324dceb66d77761"
integrity sha512-/uVdqqpNKXIxT6TyS/oSK4XE4xWOqp6fh4B5tgAwozkyWdylcX+W4YF2v6SKsL4wCQ5h1bnaSNjWPXG/2hp8AQ==
"@esbuild/freebsd-x64@0.21.1":
version "0.21.1"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.1.tgz#d36af9085edb34244b41e5a57640e6b4452cbec2"
integrity sha512-paAkKN1n1jJitw+dAoR27TdCzxRl1FOEITx3h201R6NoXUojpMzgMLdkXVgCvaCSCqwYkeGLoe9UVNRDKSvQgw==
"@esbuild/linux-arm64@0.21.1":
version "0.21.1"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.1.tgz#9d2ad42eea33b2a9571f13e7ecc39ee9d3ff0c6d"
integrity sha512-G65d08YoH00TL7Xg4LaL3gLV21bpoAhQ+r31NUu013YB7KK0fyXIt05VbsJtpqh/6wWxoLJZOvQHYnodRrnbUQ==
"@esbuild/linux-arm@0.21.1":
version "0.21.1"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.1.tgz#d6f7c5873479dd97148bef3e3a7f09d486642883"
integrity sha512-tRHnxWJnvNnDpNVnsyDhr1DIQZUfCXlHSCDohbXFqmg9W4kKR7g8LmA3kzcwbuxbRMKeit8ladnCabU5f2traA==
"@esbuild/linux-ia32@0.21.1":
version "0.21.1"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.1.tgz#8f2aef34a31c8d16dbce0b8679021f4881f38efe"
integrity sha512-tt/54LqNNAqCz++QhxoqB9+XqdsaZOtFD/srEhHYwBd3ZUOepmR1Eeot8bS+Q7BiEvy9vvKbtpHf+r6q8hF5UA==
"@esbuild/linux-loong64@0.21.1":
version "0.21.1"
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.1.tgz#44461ea2388efbafa6cf12b2bc1407a5388da066"
integrity sha512-MhNalK6r0nZD0q8VzUBPwheHzXPr9wronqmZrewLfP7ui9Fv1tdPmg6e7A8lmg0ziQCziSDHxh3cyRt4YMhGnQ==
"@esbuild/linux-mips64el@0.21.1":
version "0.21.1"
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.1.tgz#754d533a4fef4b0790d82bfe1e82d6876f18370e"
integrity sha512-YCKVY7Zen5rwZV+nZczOhFmHaeIxR4Zn3jcmNH53LbgF6IKRwmrMywqDrg4SiSNApEefkAbPSIzN39FC8VsxPg==
"@esbuild/linux-ppc64@0.21.1":
version "0.21.1"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.1.tgz#2aafcfe2826c7d5d2e3c41eb8934e6368a7cada5"
integrity sha512-bw7bcQ+270IOzDV4mcsKAnDtAFqKO0jVv3IgRSd8iM0ac3L8amvCrujRVt1ajBTJcpDaFhIX+lCNRKteoDSLig==
"@esbuild/linux-riscv64@0.21.1":
version "0.21.1"
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.1.tgz#481ceaf5939d14fb25da62a385b5e6c2096a3370"
integrity sha512-ARmDRNkcOGOm1AqUBSwRVDfDeD9hGYRfkudP2QdoonBz1ucWVnfBPfy7H4JPI14eYtZruRSczJxyu7SRYDVOcg==
"@esbuild/linux-s390x@0.21.1":
version "0.21.1"
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.1.tgz#e25b97005e4c82540d1bc7af88e333fb55142570"
integrity sha512-o73TcUNMuoTZlhwFdsgr8SfQtmMV58sbgq6gQq9G1xUiYnHMTmJbwq65RzMx89l0iya69lR4bxBgtWiiOyDQZA==
"@esbuild/linux-x64@0.21.1":
version "0.21.1"
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.1.tgz#a05a61d0a0cbb03baa6db12cd8164c1e5265ffb2"
integrity sha512-da4/1mBJwwgJkbj4fMH7SOXq2zapgTo0LKXX1VUZ0Dxr+e8N0WbS80nSZ5+zf3lvpf8qxrkZdqkOqFfm57gXwA==
"@esbuild/netbsd-x64@0.21.1":
version "0.21.1"
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.1.tgz#e298f854e8999563f2e4668bd542678c46be4b53"
integrity sha512-CPWs0HTFe5woTJN5eKPvgraUoRHrCtzlYIAv9wBC+FAyagBSaf+UdZrjwYyTGnwPGkThV4OCI7XibZOnPvONVw==
"@esbuild/openbsd-x64@0.21.1":
version "0.21.1"
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.1.tgz#640d34de1e3c6bc3ff64e0379aae00ede3608f14"
integrity sha512-xxhTm5QtzNLc24R0hEkcH+zCx/o49AsdFZ0Cy5zSd/5tOj4X2g3/2AJB625NoadUuc4A8B3TenLJoYdWYOYCew==
"@esbuild/sunos-x64@0.21.1":
version "0.21.1"
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.1.tgz#f53cb1cdcbf05b3320e147ddb85ec2b1cf2b6cfc"
integrity sha512-CWibXszpWys1pYmbr9UiKAkX6x+Sxw8HWtw1dRESK1dLW5fFJ6rMDVw0o8MbadusvVQx1a8xuOxnHXT941Hp1A==
"@esbuild/win32-arm64@0.21.1":
version "0.21.1"
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.1.tgz#df4f44f9b4fec9598c0ec2c34fec9c568c8ab85d"
integrity sha512-jb5B4k+xkytGbGUS4T+Z89cQJ9DJ4lozGRSV+hhfmCPpfJ3880O31Q1srPCimm+V6UCbnigqD10EgDNgjvjerQ==
"@esbuild/win32-ia32@0.21.1":
version "0.21.1"
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.1.tgz#a57edbd9905db9f957327ae0facfbf406a80a4e4"
integrity sha512-PgyFvjJhXqHn1uxPhyN1wZ6dIomKjiLUQh1LjFvjiV1JmnkZ/oMPrfeEAZg5R/1ftz4LZWZr02kefNIQ5SKREQ==
"@esbuild/win32-x64@0.21.1":
version "0.21.1"
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.1.tgz#eb86553d90e86a8c174b96650fdb4c60f2de16a7"
integrity sha512-W9NttRZQR5ehAiqHGDnvfDaGmQOm6Fi4vSlce8mjM75x//XKuVAByohlEX6N17yZnVXxQFuh4fDRunP8ca6bfA==
"@eslint-community/eslint-utils@^4.2.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
@ -632,15 +747,17 @@
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
"@types/luxon@^2.0.9":
version "2.4.0"
resolved "https://registry.yarnpkg.com/@types/luxon/-/luxon-2.4.0.tgz#897d3abc23b68d78b69d76a12c21e01eb5adab95"
integrity sha512-oCavjEjRXuR6URJEtQm0eBdfsBiEcGBZbq21of8iGkeKxU1+1xgKuFPClaBZl2KB8ZZBSWlgk61tH6Mf+nvZVw==
"@types/lodash@^4.17.1":
version "4.17.1"
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.1.tgz#0fabfcf2f2127ef73b119d98452bd317c4a17eb8"
integrity sha512-X+2qazGS3jxLAIz5JDXDzglAF3KpijdhFxlf/V1+hEsOUc+HnWi81L/uv/EvGuV90WY+7mPGFCUDGfQC3Gj95Q==
"@types/node@^17.0.14":
version "17.0.45"
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190"
integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==
"@types/node@^20.12.11":
version "20.12.11"
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.11.tgz#c4ef00d3507000d17690643278a60dc55a9dc9be"
integrity sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==
dependencies:
undici-types "~5.26.4"
"@types/parse-json@^4.0.0":
version "4.0.2"
@ -1339,113 +1456,34 @@ es-to-primitive@^1.2.1:
is-date-object "^1.0.1"
is-symbol "^1.0.2"
esbuild-android-arm64@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.13.15.tgz#3fc3ff0bab76fe35dd237476b5d2b32bb20a3d44"
integrity sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg==
esbuild-darwin-64@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.13.15.tgz#8e9169c16baf444eacec60d09b24d11b255a8e72"
integrity sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ==
esbuild-darwin-arm64@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.15.tgz#1b07f893b632114f805e188ddfca41b2b778229a"
integrity sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ==
esbuild-freebsd-64@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.15.tgz#0b8b7eca1690c8ec94c75680c38c07269c1f4a85"
integrity sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA==
esbuild-freebsd-arm64@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.15.tgz#2e1a6c696bfdcd20a99578b76350b41db1934e52"
integrity sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ==
esbuild-linux-32@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.13.15.tgz#6fd39f36fc66dd45b6b5f515728c7bbebc342a69"
integrity sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g==
esbuild-linux-64@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.13.15.tgz#9cb8e4bcd7574e67946e4ee5f1f1e12386bb6dd3"
integrity sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA==
esbuild-linux-arm64@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.15.tgz#3891aa3704ec579a1b92d2a586122e5b6a2bfba1"
integrity sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA==
esbuild-linux-arm@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.13.15.tgz#8a00e99e6a0c6c9a6b7f334841364d8a2b4aecfe"
integrity sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA==
esbuild-linux-mips64le@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.15.tgz#36b07cc47c3d21e48db3bb1f4d9ef8f46aead4f7"
integrity sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg==
esbuild-linux-ppc64le@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.15.tgz#f7e6bba40b9a11eb9dcae5b01550ea04670edad2"
integrity sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ==
esbuild-netbsd-64@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.15.tgz#a2fedc549c2b629d580a732d840712b08d440038"
integrity sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w==
esbuild-openbsd-64@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.15.tgz#b22c0e5806d3a1fbf0325872037f885306b05cd7"
integrity sha512-wTfvtwYJYAFL1fSs8yHIdf5GEE4NkbtbXtjLWjM3Cw8mmQKqsg8kTiqJ9NJQe5NX/5Qlo7Xd9r1yKMMkHllp5g==
esbuild-sunos-64@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.13.15.tgz#d0b6454a88375ee8d3964daeff55c85c91c7cef4"
integrity sha512-lbivT9Bx3t1iWWrSnGyBP9ODriEvWDRiweAs69vI+miJoeKwHWOComSRukttbuzjZ8r1q0mQJ8Z7yUsDJ3hKdw==
esbuild-windows-32@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.13.15.tgz#c96d0b9bbb52f3303322582ef8e4847c5ad375a7"
integrity sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw==
esbuild-windows-64@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.13.15.tgz#1f79cb9b1e1bb02fb25cd414cb90d4ea2892c294"
integrity sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ==
esbuild-windows-arm64@0.13.15:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.15.tgz#482173070810df22a752c686509c370c3be3b3c3"
integrity sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA==
esbuild@^0.13.12:
version "0.13.15"
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.13.15.tgz#db56a88166ee373f87dbb2d8798ff449e0450cdf"
integrity sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw==
esbuild@^0.21.1:
version "0.21.1"
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.1.tgz#3d6f199f6ec849158278c6632f438463bab88c38"
integrity sha512-GPqx+FX7mdqulCeQ4TsGZQ3djBJkx5k7zBGtqt9ycVlWNg8llJ4RO9n2vciu8BN2zAEs6lPbPl0asZsAh7oWzg==
optionalDependencies:
esbuild-android-arm64 "0.13.15"
esbuild-darwin-64 "0.13.15"
esbuild-darwin-arm64 "0.13.15"
esbuild-freebsd-64 "0.13.15"
esbuild-freebsd-arm64 "0.13.15"
esbuild-linux-32 "0.13.15"
esbuild-linux-64 "0.13.15"
esbuild-linux-arm "0.13.15"
esbuild-linux-arm64 "0.13.15"
esbuild-linux-mips64le "0.13.15"
esbuild-linux-ppc64le "0.13.15"
esbuild-netbsd-64 "0.13.15"
esbuild-openbsd-64 "0.13.15"
esbuild-sunos-64 "0.13.15"
esbuild-windows-32 "0.13.15"
esbuild-windows-64 "0.13.15"
esbuild-windows-arm64 "0.13.15"
"@esbuild/aix-ppc64" "0.21.1"
"@esbuild/android-arm" "0.21.1"
"@esbuild/android-arm64" "0.21.1"
"@esbuild/android-x64" "0.21.1"
"@esbuild/darwin-arm64" "0.21.1"
"@esbuild/darwin-x64" "0.21.1"
"@esbuild/freebsd-arm64" "0.21.1"
"@esbuild/freebsd-x64" "0.21.1"
"@esbuild/linux-arm" "0.21.1"
"@esbuild/linux-arm64" "0.21.1"
"@esbuild/linux-ia32" "0.21.1"
"@esbuild/linux-loong64" "0.21.1"
"@esbuild/linux-mips64el" "0.21.1"
"@esbuild/linux-ppc64" "0.21.1"
"@esbuild/linux-riscv64" "0.21.1"
"@esbuild/linux-s390x" "0.21.1"
"@esbuild/linux-x64" "0.21.1"
"@esbuild/netbsd-x64" "0.21.1"
"@esbuild/openbsd-x64" "0.21.1"
"@esbuild/sunos-x64" "0.21.1"
"@esbuild/win32-arm64" "0.21.1"
"@esbuild/win32-ia32" "0.21.1"
"@esbuild/win32-x64" "0.21.1"
escalade@^3.1.1:
version "3.1.2"
@ -2200,11 +2238,6 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
luxon@^2.5.2:
version "2.5.2"
resolved "https://registry.yarnpkg.com/luxon/-/luxon-2.5.2.tgz#17ed497f0277e72d58a4756d6a9abee4681457b6"
integrity sha512-Yg7/RDp4nedqmLgyH0LwgGRvMEKVzKbUdkBYyCosbHgJ+kaOUx0qzSiSatVc3DFygnirTPYnMM2P5dg2uH1WvA==
make-error@^1.1.1:
version "1.3.6"
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
@ -2881,6 +2914,11 @@ unbox-primitive@^1.0.2:
has-symbols "^1.0.3"
which-boxed-primitive "^1.0.2"
undici-types@~5.26.4:
version "5.26.5"
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
update-browserslist-db@^1.0.13:
version "1.0.13"
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4"