feat(v3.4.4): fix many bugs and password protected uploads

This commit is contained in:
diced 2022-06-04 22:05:08 -07:00
parent 9f86674bbe
commit be9523304a
No known key found for this signature in database
GPG key ID: 370BD1BA142842D1
23 changed files with 523 additions and 327 deletions

View file

@ -17,18 +17,19 @@
- Built with Next.js & React - Built with Next.js & React
- Token protected uploading - Token protected uploading
- Image uploading - Image uploading
- Password Protected Uploads
- URL shortening - URL shortening
- Text uploading - Text uploading
- URL Formats (uuid, dates, random alphanumeric, original name, zws) - URL Formats (uuid, dates, random alphanumeric, original name, zws)
- Discord embeds (OG metadata) - Discord embeds (OG metadata)
- Gallery viewer, and multiple file format support - Gallery viewer, and multiple file format support
- Easy setup instructions on [docs](https://zipline.diced.tech/) (One command install `docker-compose up -d`) - Easy setup instructions on [docs](https://zipl.vercel.app/) (One command install `docker-compose up -d`)
## Installing ## Installing
[See how to install here](https://zipline.diced.tech/docs/get-started) [See how to install here](https://zipl.vercel.app/docs/get-started)
## Configuration ## Configuration
[See how to configure here](https://zipline.diced.tech/docs/config/overview) [See how to configure here](https://zipl.vercel.app/docs/config/overview)
## Theming ## Theming
[See how to theme here](https://zipline.diced.tech/docs/themes/reference) [See how to theme here](https://zipl.vercel.app/docs/themes/reference)

View file

@ -4,7 +4,7 @@
| Version | Supported | | Version | Supported |
| ------- | ------------------ | | ------- | ------------------ |
| 3.3.x | :white_check_mark: | | 3.4.4 | :white_check_mark: |
| < 3 | :x: | | < 3 | :x: |
| < 2 | :x: | | < 2 | :x: |

View file

@ -1,6 +1,6 @@
[core] [core]
secure = true secure = true
secret = 'some secret' secret = 'changethis'
host = '0.0.0.0' host = '0.0.0.0'
port = 3000 port = 3000
database_url = 'postgres://postgres:postgres@postgres/postgres' database_url = 'postgres://postgres:postgres@postgres/postgres'

View file

@ -1,6 +1,6 @@
{ {
"name": "zip3", "name": "zipline",
"version": "3.4.3", "version": "3.4.4",
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {
"dev": "node esbuild.config.js && REACT_EDITOR=code-insiders NODE_ENV=development node dist/server", "dev": "node esbuild.config.js && REACT_EDITOR=code-insiders NODE_ENV=development node dist/server",
@ -9,7 +9,7 @@
"build:next": "next build", "build:next": "next build",
"build:schema": "prisma generate --schema=prisma/schema.prisma", "build:schema": "prisma generate --schema=prisma/schema.prisma",
"migrate:dev": "prisma migrate dev --create-only", "migrate:dev": "prisma migrate dev --create-only",
"start": "node server", "start": "node dist/server",
"lint": "next lint", "lint": "next lint",
"seed": "ts-node --compiler-options \"{\\\"module\\\":\\\"commonjs\\\"}\" --transpile-only prisma/seed.ts", "seed": "ts-node --compiler-options \"{\\\"module\\\":\\\"commonjs\\\"}\" --transpile-only prisma/seed.ts",
"docker:run": "docker-compose up -d", "docker:run": "docker-compose up -d",
@ -26,19 +26,20 @@
"@mantine/notifications": "^3.6.9", "@mantine/notifications": "^3.6.9",
"@mantine/prism": "^3.6.11", "@mantine/prism": "^3.6.11",
"@modulz/radix-icons": "^4.0.0", "@modulz/radix-icons": "^4.0.0",
"@prisma/client": "^3.9.2", "@prisma/client": "^3.14.0",
"@prisma/migrate": "^3.9.2", "@prisma/migrate": "^3.14.0",
"@prisma/sdk": "^3.9.2", "@prisma/sdk": "^3.14.0",
"@reduxjs/toolkit": "^1.6.0", "@reduxjs/toolkit": "^1.6.0",
"argon2": "^0.28.2", "argon2": "^0.28.2",
"aws-sdk": "^2.1085.0", "aws-sdk": "^2.1085.0",
"colorette": "^1.2.2", "colorette": "^1.2.2",
"cookie": "^0.4.1", "cookie": "^0.4.1",
"fecha": "^4.2.1", "fecha": "^4.2.1",
"fflate": "^0.7.3",
"find-my-way": "^5.2.0", "find-my-way": "^5.2.0",
"multer": "^1.4.4", "multer": "^1.4.4",
"next": "^12.1.0", "next": "^12.1.0",
"prisma": "^3.9.2", "prisma": "^3.14.0",
"react": "^17.0.2", "react": "^17.0.2",
"react-dom": "^17.0.2", "react-dom": "^17.0.2",
"react-redux": "^7.2.4", "react-redux": "^7.2.4",

View file

@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE "Image" ADD COLUMN "password" TEXT;

View file

@ -8,16 +8,16 @@ generator client {
} }
model User { model User {
id Int @id @default(autoincrement()) id Int @id @default(autoincrement())
username String username String
password String password String
token String token String
administrator Boolean @default(false) administrator Boolean @default(false)
systemTheme String @default("system") systemTheme String @default("system")
embedTitle String? embedTitle String?
embedColor String @default("#2f3136") embedColor String @default("#2f3136")
embedSiteName String? @default("{image.file} • {user.name}") embedSiteName String? @default("{image.file} • {user.name}")
ratelimited Boolean @default(false) ratelimited Boolean @default(false)
domains String[] domains String[]
images Image[] images Image[]
urls Url[] urls Url[]
@ -38,6 +38,7 @@ model Image {
views Int @default(0) views Int @default(0)
favorite Boolean @default(false) favorite Boolean @default(false)
embed Boolean @default(false) embed Boolean @default(false)
password String?
invisible InvisibleImage? invisible InvisibleImage?
format ImageFormat @default(RANDOM) format ImageFormat @default(RANDOM)
user User @relation(fields: [userId], references: [id]) user User @relation(fields: [userId], references: [id])
@ -47,7 +48,7 @@ model Image {
model InvisibleImage { model InvisibleImage {
id Int @id @default(autoincrement()) id Int @id @default(autoincrement())
invis String @unique invis String @unique
imageId Int imageId Int @unique
image Image @relation(fields: [imageId], references: [id]) image Image @relation(fields: [imageId], references: [id])
} }
@ -65,12 +66,12 @@ model Url {
model InvisibleUrl { model InvisibleUrl {
id Int @id @default(autoincrement()) id Int @id @default(autoincrement())
invis String @unique invis String @unique
urlId String urlId String @unique
url Url @relation(fields: [urlId], references: [id]) url Url @relation(fields: [urlId], references: [id])
} }
model Stats { model Stats {
id Int @id @default(autoincrement()) id Int @id @default(autoincrement())
created_at DateTime @default(now()) created_at DateTime @default(now())
data Json data Json
} }

View file

@ -122,6 +122,7 @@ export default function Layout({ children, user }) {
const openResetToken = () => modals.openConfirmModal({ const openResetToken = () => modals.openConfirmModal({
title: 'Reset Token', title: 'Reset Token',
centered: true,
children: ( children: (
<Text size='sm'> <Text size='sm'>
Once you reset your token, you will have to update any uploaders to use this new token. Once you reset your token, you will have to update any uploaders to use this new token.
@ -153,6 +154,7 @@ export default function Layout({ children, user }) {
const openCopyToken = () => modals.openConfirmModal({ const openCopyToken = () => modals.openConfirmModal({
title: 'Copy Token', title: 'Copy Token',
centered: true,
children: ( children: (
<Text size='sm'> <Text size='sm'>
Make sure you don&apos;t share this token with anyone as they will be able to upload files on your behalf. Make sure you don&apos;t share this token with anyone as they will be able to upload files on your behalf.

View file

@ -82,6 +82,7 @@ export default function Manage() {
title: 'Updating user...', title: 'Updating user...',
message: '', message: '',
loading: true, loading: true,
autoClose: false,
}); });
const data = { const data = {

View file

@ -58,6 +58,7 @@ export default function Upload() {
title: 'Uploading Images...', title: 'Uploading Images...',
message: '', message: '',
loading: true, loading: true,
autoClose: false,
}); });
const res = await fetch('/api/upload', { const res = await fetch('/api/upload', {

View file

@ -1,12 +1,12 @@
import React, { useState, useEffect } from 'react'; import React, { useState, useEffect } from 'react';
import { useStoreSelector } from 'lib/redux/store'; import { useStoreSelector } from 'lib/redux/store';
import useFetch from 'hooks/useFetch'; import useFetch from 'hooks/useFetch';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import { useForm } from '@mantine/hooks'; import { useForm } from '@mantine/hooks';
import { Avatar, Modal, Title, TextInput, Group, Button, Card, ActionIcon, SimpleGrid, Switch, Skeleton } from '@mantine/core'; import { Avatar, Modal, Title, TextInput, Group, Button, Card, ActionIcon, SimpleGrid, Switch, Skeleton, Checkbox } from '@mantine/core';
import { Cross1Icon, PlusIcon, TrashIcon } from '@modulz/radix-icons'; import { Cross1Icon, PlusIcon, TrashIcon } from '@modulz/radix-icons';
import { useNotifications } from '@mantine/notifications'; import { useNotifications } from '@mantine/notifications';
import { useModals } from '@mantine/modals';
function CreateUserModal({ open, setOpen, updateUsers }) { function CreateUserModal({ open, setOpen, updateUsers }) {
@ -76,22 +76,15 @@ export default function Users() {
const user = useStoreSelector(state => state.user); const user = useStoreSelector(state => state.user);
const router = useRouter(); const router = useRouter();
const notif = useNotifications(); const notif = useNotifications();
const modals = useModals();
const [users, setUsers] = useState([]); const [users, setUsers] = useState([]);
const [open, setOpen] = useState(false); const [open, setOpen] = useState(false);
const updateUsers = async () => { const handleDelete = async (user, delete_images) => {
const us = await useFetch('/api/users');
if (!us.error) {
setUsers(us);
} else {
router.push('/dashboard');
};
};
const handleDelete = async (user) => {
const res = await useFetch('/api/users', 'DELETE', { const res = await useFetch('/api/users', 'DELETE', {
id: user.id, id: user.id,
delete_images,
}); });
if (res.error) { if (res.error) {
notif.showNotification({ notif.showNotification({
@ -107,9 +100,39 @@ export default function Users() {
color: 'green', color: 'green',
icon: <TrashIcon />, icon: <TrashIcon />,
}); });
updateUsers();
} }
};
updateUsers(); // 2-step modal for deleting user if they want to delete their images too.
const openDeleteModal = user => modals.openConfirmModal({
title: `Delete ${user.username}?`,
closeOnConfirm: false,
centered: true,
labels: { confirm: 'Yes', cancel: 'No' },
onConfirm: () => {
modals.openConfirmModal({
title: `Delete ${user.username}'s images?`,
labels: { confirm: 'Yes', cancel: 'No' },
onConfirm: () => {
handleDelete(user, true);
modals.closeAll();
},
onCancel: () => {
handleDelete(user, false);
modals.closeAll();
},
});
},
});
const updateUsers = async () => {
const us = await useFetch('/api/users');
if (!us.error) {
setUsers(us);
} else {
router.push('/dashboard');
};
}; };
useEffect(() => { useEffect(() => {
@ -121,7 +144,7 @@ export default function Users() {
<CreateUserModal open={open} setOpen={setOpen} updateUsers={updateUsers} /> <CreateUserModal open={open} setOpen={setOpen} updateUsers={updateUsers} />
<Group> <Group>
<Title sx={{ marginBottom: 12 }}>Users</Title> <Title sx={{ marginBottom: 12 }}>Users</Title>
<ActionIcon variant='filled' color='primary' onClick={() => setOpen(true)}><PlusIcon/></ActionIcon> <ActionIcon variant='filled' color='primary' onClick={() => setOpen(true)}><PlusIcon /></ActionIcon>
</Group> </Group>
<SimpleGrid <SimpleGrid
cols={3} cols={3}
@ -130,23 +153,23 @@ export default function Users() {
{ maxWidth: 'sm', cols: 1, spacing: 'sm' }, { maxWidth: 'sm', cols: 1, spacing: 'sm' },
]} ]}
> >
{users.length ? users.filter(x => x.username !== user.username).map((user, i) => ( {users.length ? users.filter(x => x.username !== user.username).map(user => (
<Card key={user.id} sx={{ maxWidth: '100%' }}> <Card key={user.id} sx={{ maxWidth: '100%' }}>
<Group position='apart'> <Group position='apart'>
<Group position='left'> <Group position='left'>
<Avatar color={user.administrator ? 'primary' : 'dark'}>{user.username[0]}</Avatar> <Avatar color={user.administrator ? 'primary' : 'dark'}>{user.username[0]}</Avatar>
<Title>{user.username}</Title> <Title>{user.username}</Title>
</Group> </Group>
<Group position='right'> <Group position='right'>
<ActionIcon aria-label='delete' onClick={() => handleDelete(user)}> <ActionIcon aria-label='delete' onClick={() => openDeleteModal(user)}>
<TrashIcon /> <TrashIcon />
</ActionIcon> </ActionIcon>
</Group> </Group>
</Group> </Group>
</Card> </Card>
)): [1,2,3,4].map(x => ( )) : [1, 2, 3, 4].map(x => (
<div key={x}> <div key={x}>
<Skeleton width='100%' height={220} sx={{ borderRadius: 1 }}/> <Skeleton width='100%' height={220} sx={{ borderRadius: 1 }} />
</div> </div>
))} ))}
</SimpleGrid> </SimpleGrid>

View file

@ -1,5 +1,5 @@
import { createReadStream, ReadStream } from 'fs'; import { createReadStream, ReadStream } from 'fs';
import { readdir, stat, writeFile } from 'fs/promises'; import { readdir, rm, stat, writeFile } from 'fs/promises';
import { join } from 'path'; import { join } from 'path';
import { Datasource } from './datasource'; import { Datasource } from './datasource';
@ -14,6 +14,10 @@ export class Local extends Datasource {
await writeFile(join(process.cwd(), this.path, file), data); await writeFile(join(process.cwd(), this.path, file), data);
} }
public async delete(file: string): Promise<void> {
await rm(join(process.cwd(), this.path, file));
}
public get(file: string): ReadStream { public get(file: string): ReadStream {
try { try {
return createReadStream(join(process.cwd(), this.path, file)); return createReadStream(join(process.cwd(), this.path, file));

View file

@ -34,6 +34,21 @@ export class S3 extends Datasource {
}); });
} }
public async delete(file: string): Promise<void> {
return new Promise((resolve, reject) => {
this.s3.deleteObject({
Bucket: this.bucket,
Key: file,
}, err => {
if (err) {
reject(err);
} else {
resolve();
}
});
});
}
public get(file: string): Readable { public get(file: string): Readable {
// Unfortunately, aws-sdk is bad and the stream still loads everything into memory. // Unfortunately, aws-sdk is bad and the stream still loads everything into memory.
return this.s3.getObject({ return this.s3.getObject({

View file

@ -4,6 +4,7 @@ export abstract class Datasource {
public name: string; public name: string;
public abstract save(file: string, data: Buffer): Promise<void>; public abstract save(file: string, data: Buffer): Promise<void>;
public abstract delete(file: string): Promise<void>;
public abstract get(file: string): Readable; public abstract get(file: string): Readable;
public abstract size(): Promise<number>; public abstract size(): Promise<number>;
} }

View file

@ -1,44 +1,85 @@
import React, { useEffect } from 'react'; import React, { useEffect, useState } from 'react';
import Head from 'next/head'; import Head from 'next/head';
import { GetServerSideProps } from 'next'; import { GetServerSideProps } from 'next';
import { Box } from '@mantine/core'; import { Box, Button, Modal, PasswordInput } from '@mantine/core';
import config from 'lib/config'; import config from 'lib/config';
import prisma from 'lib/prisma'; import prisma from 'lib/prisma';
import { parse } from 'lib/clientUtils'; import { parse } from 'lib/clientUtils';
import * as exts from '../../scripts/exts'; import * as exts from '../../scripts/exts';
export default function EmbeddedImage({ image, user }) { export default function EmbeddedImage({ image, user, pass }) {
const dataURL = (route: string) => `${route}/${image.file}`; const dataURL = (route: string) => `${route}/${image.file}`;
const [opened, setOpened] = useState(pass);
const [password, setPassword] = useState('');
const [error, setError] = useState('');
// reapply date from workaround // reapply date from workaround
image.created_at = new Date(image.created_at); image.created_at = new Date(image.created_at);
const updateImage = () => { const check = async () => {
const res = await fetch(`/api/auth/image?id=${image.id}&password=${password}`);
if (res.ok) {
setError('');
updateImage(`/api/auth/image?id=${image.id}&password=${password}`);
setOpened(false);
} else {
setError('Invalid password');
}
};
const updateImage = async (url?: string) => {
const imageEl = document.getElementById('image_content') as HTMLImageElement; const imageEl = document.getElementById('image_content') as HTMLImageElement;
const original = new Image; const original = new Image;
original.src = dataURL('/r'); original.src = url || dataURL('/r');
if (url) {
imageEl.src = url;
}
// Sometimes gives blank image on first load
if (original.width > innerWidth) imageEl.width = Math.floor(original.width * Math.min((innerHeight / original.height), (innerWidth / original.width))); if (original.width > innerWidth) imageEl.width = Math.floor(original.width * Math.min((innerHeight / original.height), (innerWidth / original.width)));
else imageEl.width = original.width; else imageEl.width = original.width;
}; };
useEffect(() => updateImage(), []); useEffect(() => {
if (pass) {
setOpened(true);
} else {
updateImage();
}
}, []);
return ( return (
<> <>
<Head> <Head>
{image.embed && ( {image.embed && (
<> <>
{user.embedSiteName && (<meta property='og:site_name' content={parse(user.embedSiteName, image, user)} />)} {user.embedSiteName && <meta property='og:site_name' content={parse(user.embedSiteName, image, user)} />}
{user.embedTitle && (<meta property='og:title' content={parse(user.embedTitle, image, user)} />)} {user.embedTitle && <meta property='og:title' content={parse(user.embedTitle, image, user)} />}
<meta property='theme-color' content={user.embedColor}/> <meta property='theme-color' content={user.embedColor} />
</> </>
)} )}
<meta property='og:image' content={dataURL('/r')} /> <meta property='og:image' content={dataURL('/r')} />
<meta property='twitter:card' content='summary_large_image' /> <meta property='twitter:card' content='summary_large_image' />
<title>{image.file}</title> <title>{image.file}</title>
</Head> </Head>
<Modal
opened={opened}
onClose={() => setOpened(false)}
title='Password Protected'
centered={true}
hideCloseButton={true}
closeOnEscape={false}
closeOnClickOutside={false}
>
<PasswordInput label='Password' placeholder='Password' error={error} value={password} onChange={e => setPassword(e.target.value)} />
<Button fullWidth onClick={() => check()} mt='md'>
Submit
</Button>
</Modal>
<Box <Box
sx={{ sx={{
display: 'flex', display: 'flex',
@ -96,6 +137,7 @@ export const getServerSideProps: GetServerSideProps = async (context) => {
userId: true, userId: true,
embed: true, embed: true,
created_at: true, created_at: true,
password: true,
}, },
}); });
if (!image) return { notFound: true }; if (!image) return { notFound: true };
@ -133,11 +175,13 @@ export const getServerSideProps: GetServerSideProps = async (context) => {
data.pipe(context.res); data.pipe(context.res);
return { props: {} }; return { props: {} };
} }
const pass = image.password ? true : false;
delete image.password;
return { return {
props: { props: {
image, image,
user, user,
pass,
}, },
}; };
} }

View file

@ -0,0 +1,33 @@
import prisma from 'lib/prisma';
import { NextApiReq, NextApiRes, withZipline } from 'middleware/withZipline';
import { checkPassword } from 'lib/util';
import datasource from 'lib/ds';
import mimes from '../../../../scripts/mimes';
import { extname } from 'path';
async function handler(req: NextApiReq, res: NextApiRes) {
const { id, password } = req.query;
const image = await prisma.image.findFirst({
where: {
id: Number(id),
},
});
if (!image) return res.status(404).end(JSON.stringify({ error: 'Image not found' }));
if (!password) return res.forbid('No password provided');
const valid = await checkPassword(password as string, image.password);
if (!valid) return res.forbid('Wrong password');
const data = datasource.get(image.file);
if (!data) return res.error('Image not found');
const mimetype = mimes[extname(image.file)] ?? 'application/octet-stream';
res.setHeader('Content-Type', mimetype);
data.pipe(res);
data.on('error', () => res.error('Image not found'));
data.on('end', () => res.end());
}
export default withZipline(handler);

View file

@ -2,7 +2,7 @@ import multer from 'multer';
import prisma from 'lib/prisma'; import prisma from 'lib/prisma';
import zconfig from 'lib/config'; import zconfig from 'lib/config';
import { NextApiReq, NextApiRes, withZipline } from 'lib/middleware/withZipline'; import { NextApiReq, NextApiRes, withZipline } from 'lib/middleware/withZipline';
import { createInvisImage, randomChars } from 'lib/util'; import { createInvisImage, randomChars, hashPassword } from 'lib/util';
import Logger from 'lib/logger'; import Logger from 'lib/logger';
import { ImageFormat, InvisibleImage } from '@prisma/client'; import { ImageFormat, InvisibleImage } from '@prisma/client';
import { format as formatDate } from 'fecha'; import { format as formatDate } from 'fecha';
@ -56,6 +56,10 @@ async function handler(req: NextApiReq, res: NextApiRes) {
break; break;
} }
let password = null;
if (req.headers.password) {
password = await hashPassword(req.headers.password as string);
}
let invis: InvisibleImage; let invis: InvisibleImage;
const image = await prisma.image.create({ const image = await prisma.image.create({
@ -65,6 +69,7 @@ async function handler(req: NextApiReq, res: NextApiRes) {
userId: user.id, userId: user.id,
embed: !!req.headers.embed, embed: !!req.headers.embed,
format, format,
password,
}, },
}); });

View file

@ -1,10 +1,8 @@
import { NextApiReq, NextApiRes, withZipline } from 'middleware/withZipline'; import { NextApiReq, NextApiRes, withZipline } from 'middleware/withZipline';
import prisma from 'lib/prisma'; import prisma from 'lib/prisma';
import config from 'lib/config';
import { chunk } from 'lib/util'; import { chunk } from 'lib/util';
import { rm } from 'fs/promises';
import { join } from 'path';
import Logger from 'lib/logger'; import Logger from 'lib/logger';
import datasource from 'lib/ds';
async function handler(req: NextApiReq, res: NextApiRes) { async function handler(req: NextApiReq, res: NextApiRes) {
const user = await req.user(); const user = await req.user();
@ -19,10 +17,11 @@ async function handler(req: NextApiReq, res: NextApiRes) {
}, },
}); });
await rm(join(process.cwd(), config.uploader.directory, image.file)); await datasource.delete(image.file);
Logger.get('image').info(`User ${user.username} (${user.id}) deleted an image ${image.file} (${image.id})`); Logger.get('image').info(`User ${user.username} (${user.id}) deleted an image ${image.file} (${image.id})`);
delete image.password;
return res.json(image); return res.json(image);
} else if (req.method === 'PATCH') { } else if (req.method === 'PATCH') {
if (!req.body.id) return res.error('no file id'); if (!req.body.id) return res.error('no file id');
@ -36,6 +35,7 @@ async function handler(req: NextApiReq, res: NextApiRes) {
}, },
}); });
delete image.password;
return res.json(image); return res.json(image);
} else { } else {
let images = await prisma.image.findMany({ let images = await prisma.image.findMany({

View file

@ -1,5 +1,6 @@
import { NextApiReq, NextApiRes, withZipline } from 'middleware/withZipline'; import { NextApiReq, NextApiRes, withZipline } from 'middleware/withZipline';
import prisma from 'lib/prisma'; import prisma from 'lib/prisma';
import Logger from 'lib/logger';
async function handler(req: NextApiReq, res: NextApiRes) { async function handler(req: NextApiReq, res: NextApiRes) {
const user = await req.user(); const user = await req.user();
@ -16,6 +17,15 @@ async function handler(req: NextApiReq, res: NextApiRes) {
}); });
if (!deleteUser) return res.forbid('user doesn\'t exist'); if (!deleteUser) return res.forbid('user doesn\'t exist');
if (req.body.delete_images) {
const { count } = await prisma.image.deleteMany({
where: {
userId: deleteUser.id,
},
});
Logger.get('image').info(`User ${user.username} (${user.id}) deleted ${count} images of user ${deleteUser.username} (${deleteUser.id})`);
}
await prisma.user.delete({ await prisma.user.delete({
where: { where: {
id: deleteUser.id, id: deleteUser.id,

View file

@ -9,7 +9,6 @@ import { Cross1Icon, DownloadIcon } from '@modulz/radix-icons';
export default function Login() { export default function Login() {
const router = useRouter(); const router = useRouter();
const notif = useNotifications(); const notif = useNotifications();
const [versions, setVersions] = React.useState<{ upstream: string, local: string }>(null);
const form = useForm({ const form = useForm({
initialValues: { initialValues: {
@ -44,17 +43,6 @@ export default function Login() {
(async () => { (async () => {
const a = await fetch('/api/user'); const a = await fetch('/api/user');
if (a.ok) await router.push('/dashboard'); if (a.ok) await router.push('/dashboard');
else {
const v = await useFetch('/api/version');
setVersions(v);
if (v.local !== v.upstream) {
notif.showNotification({
title: 'Update available',
message: `A new version of Zipline is available. You are running ${v.local} and the latest version is ${v.upstream}.`,
icon: <DownloadIcon />,
});
}
}
})(); })();
}, []); }, []);
@ -71,27 +59,6 @@ export default function Login() {
</form> </form>
</div> </div>
</Center> </Center>
<Box
sx={{
zIndex: 99,
position: 'fixed',
bottom: '10px',
right: '20px',
}}
>
{versions && (
<Tooltip
wrapLines
width={220}
transition='rotate-left'
transitionDuration={200}
label={versions.local !== versions.upstream ? 'Looks like you are running an outdated version of Zipline. Please update to the latest version.' : 'You are running the latest version of Zipline.'}
>
<Badge radius='md' size='lg' variant='dot' color={versions.local !== versions.upstream ? 'red' : 'primary'}>{versions.local}</Badge>
</Tooltip>
)}
</Box>
</> </>
); );
} }

View file

@ -1,3 +1,7 @@
import Server from './server'; import { version } from '../../package.json';
import Logger from '../lib/logger';
Logger.get('server').info(`starting zipline@${version} server`);
import Server from './server';
new Server(); new Server();

View file

@ -11,7 +11,6 @@ import Logger from '../lib/logger';
import mimes from '../../scripts/mimes'; import mimes from '../../scripts/mimes';
import { extname } from 'path'; import { extname } from 'path';
import exts from '../../scripts/exts'; import exts from '../../scripts/exts';
import { version } from '../../package.json';
const serverLog = Logger.get('server'); const serverLog = Logger.get('server');
@ -24,12 +23,20 @@ export default class Server {
private http: HttpServer; private http: HttpServer;
public constructor() { public constructor() {
serverLog.info(`starting zipline@${version} server`);
this.start(); this.start();
} }
private async start() { private async start() {
// annoy user if they didnt change secret from default "changethis"
if (config.core.secret === 'changethis') {
serverLog.error('Secret is not set!');
serverLog.error('Running Zipline as is, without a randomized secret is not recommended and leaves your instance at risk!');
serverLog.error('Please change your secret in the config file or environment variables.');
serverLog.error('The config file is located at `config.toml`, or if using docker-compose you can change the variables in the `docker-compose.yml` file.');
serverLog.error('It is recomended to use a secret that is alphanumeric and randomized. A way you can generate this is through a password manager you may have.');
process.exit(1);
};
const dev = process.env.NODE_ENV === 'development'; const dev = process.env.NODE_ENV === 'development';
process.env.DATABASE_URL = config.core.database_url; process.env.DATABASE_URL = config.core.database_url;
@ -64,16 +71,11 @@ export default class Server {
{ invisible: { invis: decodeURI(params.id) } }, { invisible: { invis: decodeURI(params.id) } },
], ],
}, },
select: {
mimetype: true,
id: true,
file: true,
invisible: true,
embed: true,
},
}); });
if (!image) await this.rawFile(req, res, params.id); if (!image) await this.rawFile(req, res, params.id);
if (image.password) await this.handle(req, res);
else if (image.embed) await this.handle(req, res); else if (image.embed) await this.handle(req, res);
else await this.fileDb(req, res, image); else await this.fileDb(req, res, image);
}); });
@ -86,16 +88,11 @@ export default class Server {
{ invisible: { invis: decodeURI(params.id) } }, { invisible: { invis: decodeURI(params.id) } },
], ],
}, },
select: {
mimetype: true,
id: true,
file: true,
invisible: true,
embed: true,
},
}); });
if (!image) await this.rawFile(req, res, params.id); if (!image) await this.rawFile(req, res, params.id);
if (image.password) await this.handle(req, res);
else await this.rawFileDb(req, res, image); else await this.rawFileDb(req, res, image);
}); });
@ -123,7 +120,6 @@ export default class Server {
private async rawFile(req: IncomingMessage, res: OutgoingMessage, id: string) { private async rawFile(req: IncomingMessage, res: OutgoingMessage, id: string) {
const data = datasource.get(id); const data = datasource.get(id);
if (!data) return this.nextServer.render404(req, res as ServerResponse); if (!data) return this.nextServer.render404(req, res as ServerResponse);
const mimetype = mimes[extname(id)] ?? 'application/octet-stream'; const mimetype = mimes[extname(id)] ?? 'application/octet-stream';
res.setHeader('Content-Type', mimetype); res.setHeader('Content-Type', mimetype);
@ -132,7 +128,7 @@ export default class Server {
data.on('end', () => res.end()); data.on('end', () => res.end());
} }
private async rawFileDb(req: IncomingMessage, res: OutgoingMessage, image: any) { private async rawFileDb(req: IncomingMessage, res: OutgoingMessage, image: Image) {
const data = datasource.get(image.file); const data = datasource.get(image.file);
if (!data) return this.nextServer.render404(req, res as ServerResponse); if (!data) return this.nextServer.render404(req, res as ServerResponse);
@ -147,7 +143,7 @@ export default class Server {
}); });
} }
private async fileDb(req: IncomingMessage, res: OutgoingMessage, image: any) { private async fileDb(req: IncomingMessage, res: OutgoingMessage, image: Image) {
const ext = image.file.split('.').pop(); const ext = image.file.split('.').pop();
if (Object.keys(exts).includes(ext)) return this.handle(req, res as ServerResponse); if (Object.keys(exts).includes(ext)) return this.handle(req, res as ServerResponse);

View file

@ -1,28 +1,34 @@
import { Migrate } from '@prisma/migrate/dist/Migrate'; import { Migrate } from '@prisma/migrate/dist/Migrate';
import { ensureDatabaseExists } from '@prisma/migrate/dist/utils/ensureDatabaseExists';
import Logger from '../lib/logger'; import Logger from '../lib/logger';
import { Datasource } from 'lib/datasource'; import { Datasource } from 'lib/datasource';
import { PrismaClient } from '@prisma/client';
export async function migrations() { export async function migrations() {
const migrate = new Migrate('./prisma/schema.prisma'); const migrate = new Migrate('./prisma/schema.prisma');
await ensureDatabaseExists('apply', true, './prisma/schema.prisma');
const diagnose = await migrate.diagnoseMigrationHistory({ const diagnose = await migrate.diagnoseMigrationHistory({
optInToShadowDatabase: false, optInToShadowDatabase: false,
}); });
if (diagnose.history?.diagnostic === 'databaseIsBehind') { if (diagnose.history?.diagnostic === 'databaseIsBehind') {
Logger.get('database').info('migrating database'); try {
await migrate.applyMigrations(); Logger.get('database').info('migrating database');
Logger.get('database').info('finished migrating database'); await migrate.applyMigrations();
} finally {
migrate.stop();
Logger.get('database').info('finished migrating database');
}
} }
migrate.stop();
} }
export function log(url) { export function log(url: string) {
if (url.startsWith('/_next') || url.startsWith('/__nextjs')) return; if (url.startsWith('/_next') || url.startsWith('/__nextjs')) return;
return Logger.get('url').info(url); return Logger.get('url').info(url);
} }
export function bytesToRead(bytes) { export function bytesToRead(bytes: number) {
const units = ['B', 'kB', 'MB', 'GB', 'TB', 'PB']; const units = ['B', 'kB', 'MB', 'GB', 'TB', 'PB'];
let num = 0; let num = 0;
@ -35,7 +41,7 @@ export function bytesToRead(bytes) {
} }
export async function getStats(prisma, datasource: Datasource) { export async function getStats(prisma: PrismaClient, datasource: Datasource) {
const size = await datasource.size(); const size = await datasource.size();
const byUser = await prisma.image.groupBy({ const byUser = await prisma.image.groupBy({
by: ['userId'], by: ['userId'],
@ -80,9 +86,9 @@ export async function getStats(prisma, datasource: Datasource) {
size: bytesToRead(size), size: bytesToRead(size),
size_num: size, size_num: size,
count, count,
count_by_user: count_by_user.sort((a,b) => b.count-a.count), count_by_user: count_by_user.sort((a, b) => b.count - a.count),
count_users, count_users,
views_count: (viewsCount[0]?._sum?.views ?? 0), views_count: (viewsCount[0]?._sum?.views ?? 0),
types_count: types_count.sort((a,b) => b.count-a.count), types_count: types_count.sort((a, b) => b.count - a.count),
}; };
} }

471
yarn.lock
View file

@ -2,6 +2,11 @@
# yarn lockfile v1 # yarn lockfile v1
"@alloc/quick-lru@^5.2.0":
version "5.2.0"
resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30"
integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==
"@azure/abort-controller@^1.0.0": "@azure/abort-controller@^1.0.0":
version "1.0.4" version "1.0.4"
resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-1.0.4.tgz#fd3c4d46c8ed67aace42498c8e2270960250eafd" resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-1.0.4.tgz#fd3c4d46c8ed67aace42498c8e2270960250eafd"
@ -612,107 +617,106 @@
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.2.tgz#830beaec4b4091a9e9398ac50f865ddea52186b9" resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.2.tgz#830beaec4b4091a9e9398ac50f865ddea52186b9"
integrity sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA== integrity sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA==
"@prisma/client@^3.9.2": "@prisma/client@^3.14.0":
version "3.9.2" version "3.14.0"
resolved "https://registry.yarnpkg.com/@prisma/client/-/client-3.9.2.tgz#ad17dcfb702842573fe6ec3b7dc4615eff8d8fc6" resolved "https://registry.yarnpkg.com/@prisma/client/-/client-3.14.0.tgz#bb90405c012fcca11f4647d91153ed4c58f3bd48"
integrity sha512-VlEIYVMyfFZHbVBOlunPl47gmP/Z0zzPjPj8I7uKEIaABqrUy50ru3XS0aZd8GFvevVwt7p91xxkUjNjrWhKAQ== integrity sha512-atb41UpgTR1MCst0VIbiHTMw8lmXnwUvE1KyUCAkq08+wJyjRE78Due+nSf+7uwqQn+fBFYVmoojtinhlLOSaA==
dependencies: dependencies:
"@prisma/engines-version" "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" "@prisma/engines-version" "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a"
"@prisma/debug@3.8.1": "@prisma/debug@3.13.0":
version "3.8.1" version "3.13.0"
resolved "https://registry.yarnpkg.com/@prisma/debug/-/debug-3.8.1.tgz#3c6717d6e0501651709714774ea6d90127c6a2d3" resolved "https://registry.yarnpkg.com/@prisma/debug/-/debug-3.13.0.tgz#37e783e46262e637bf27e5d8b2149df09f1dfcc5"
integrity sha512-ft4VPTYME1UBJ7trfrBuF2w9jX1ipDy786T9fAEskNGb+y26gPDqz5fiEWc2kgHNeVdz/qTI/V3wXILRyEcgxQ== integrity sha512-uzL4ug7pWbiodTSW/WMAJ9SOP/ulxn6EVlV4YTpKaidgPMOLPqSV7iLZP7P4w7q3HGSpWZp+kr2a4nq7+ANEfg==
dependencies: dependencies:
"@types/debug" "4.1.7" "@types/debug" "4.1.7"
ms "2.1.3" ms "2.1.3"
strip-ansi "6.0.1" strip-ansi "6.0.1"
"@prisma/debug@3.9.2": "@prisma/debug@3.14.0":
version "3.9.2" version "3.14.0"
resolved "https://registry.yarnpkg.com/@prisma/debug/-/debug-3.9.2.tgz#803e97da04c606e16467daf2b43a17be97204511" resolved "https://registry.yarnpkg.com/@prisma/debug/-/debug-3.14.0.tgz#4bc87b6c5e28e018063799ef01fd03f3e4628030"
integrity sha512-zi+GYWvhhXXxXffRAaHK0cJO3/nR44kp85+x7OH8YxV6Q7PvSfIhhUClgbbD8x9YaZI/lle0RvN2OC2DN4JV+A== integrity sha512-cvA2NRJU6oLCFpYcOJO6jjUZZcPwQqdKYVpa6OY+jFrSwLdYLgSPjrfbnBPOD2z1gzODdnrWYfpz3wPKVhZ0IQ==
dependencies: dependencies:
"@types/debug" "4.1.7" "@types/debug" "4.1.7"
ms "2.1.3" ms "2.1.3"
strip-ansi "6.0.1" strip-ansi "6.0.1"
"@prisma/engine-core@3.9.2": "@prisma/engine-core@3.14.0":
version "3.9.2" version "3.14.0"
resolved "https://registry.yarnpkg.com/@prisma/engine-core/-/engine-core-3.9.2.tgz#5df1ea5c9b59f0fc9938973fe06f28f09d7bc011" resolved "https://registry.yarnpkg.com/@prisma/engine-core/-/engine-core-3.14.0.tgz#4ac776ddb81e970a494e61774970bc62e5c09c6a"
integrity sha512-0Sotko0GhX4vW6lCXXtPHjT7bu60OeQNGUDfP9Vz92gHskct3uIqSyASq2RoLD3cyHlwGFQOdfXybVY6wRTuew== integrity sha512-GqXQrGFhuQFX78/UMHXeGglOE+8SqFusSjTgyiiC2whW5Dpu0eVQPTOQ4CgukFkae973PO75HJh27bH4Cw2IWw==
dependencies: dependencies:
"@prisma/debug" "3.9.2" "@prisma/debug" "3.14.0"
"@prisma/engines" "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" "@prisma/engines" "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a"
"@prisma/generator-helper" "3.9.2" "@prisma/generator-helper" "3.14.0"
"@prisma/get-platform" "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" "@prisma/get-platform" "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a"
chalk "4.1.2" chalk "4.1.2"
execa "5.1.1" execa "5.1.1"
get-stream "6.0.1" get-stream "6.0.1"
indent-string "4.0.0" indent-string "4.0.0"
new-github-issue-url "0.2.1" new-github-issue-url "0.2.1"
p-retry "4.6.1" p-retry "4.6.2"
strip-ansi "6.0.1" strip-ansi "6.0.1"
terminal-link "2.1.1" undici "5.0.0"
undici "3.3.6"
"@prisma/engines-version@3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009": "@prisma/engines-version@3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a":
version "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" version "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a"
resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009.tgz#ea03ffa723382a526dc6625ce6eae9b6ad984400" resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a.tgz#4edae57cf6527f35e22cebe75e49214fc0e99ac9"
integrity sha512-5Dh+qTDhpPR66w6NNAnPs+/W/Qt4r1DSd+qhfPFcDThUK4uxoZKGlPb2IYQn5LL+18aIGnmteDf7BnVMmvBNSQ== integrity sha512-D+yHzq4a2r2Rrd0ZOW/mTZbgDIkUkD8ofKgusEI1xPiZz60Daks+UM7Me2ty5FzH3p/TgyhBpRrfIHx+ha20RQ==
"@prisma/engines@3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009": "@prisma/engines@3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a":
version "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" version "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a"
resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009.tgz#e5c345cdedb7be83d11c1e0c5ab61d866b411256" resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a.tgz#7fa11bc26a51d450185c816cc0ab8cac673fb4bf"
integrity sha512-qM+uJbkelB21bnK44gYE049YTHIjHysOuj0mj5U2gDGyNLfmiazlggzFPCgEjgme4U5YB2tYs6Z5Hq08Kl8pjA== integrity sha512-LwZvI3FY6f43xFjQNRuE10JM5R8vJzFTSmbV9X0Wuhv9kscLkjRlZt0BEoiHmO+2HA3B3xxbMfB5du7ZoSFXGg==
"@prisma/fetch-engine@3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009": "@prisma/fetch-engine@3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a":
version "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" version "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a"
resolved "https://registry.yarnpkg.com/@prisma/fetch-engine/-/fetch-engine-3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009.tgz#2af1af953df5d404450238c5b1b38b880ffe4f31" resolved "https://registry.yarnpkg.com/@prisma/fetch-engine/-/fetch-engine-3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a.tgz#764deae6ead869d69d0825c12221da02fa15cb42"
integrity sha512-uQTNaX+IVUx1E4HeqTEKPemnHKScl2MXAa64jQRa7e13lTXFm5q5fIkEf0gk9907e3TTYeXmbYuwI1MAPC1h6w== integrity sha512-biB8habC1IrxJc9xhOeS0Rkr4JmyTlRZ+5I8zdH/5F78nZmYzsFdT/KEAA4Wnc1U01Vou5mfJCFrLN+c3+gJXg==
dependencies: dependencies:
"@prisma/debug" "3.8.1" "@prisma/debug" "3.13.0"
"@prisma/get-platform" "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" "@prisma/get-platform" "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a"
chalk "4.1.2" chalk "4.1.2"
execa "5.1.1" execa "5.1.1"
find-cache-dir "3.3.2" find-cache-dir "3.3.2"
hasha "5.2.2" hasha "5.2.2"
http-proxy-agent "5.0.0" http-proxy-agent "5.0.0"
https-proxy-agent "5.0.0" https-proxy-agent "5.0.1"
make-dir "3.1.0" make-dir "3.1.0"
node-fetch "2.6.7" node-fetch "2.6.7"
p-filter "2.1.0" p-filter "2.1.0"
p-map "4.0.0" p-map "4.0.0"
p-retry "4.6.1" p-retry "4.6.2"
progress "2.0.3" progress "2.0.3"
rimraf "3.0.2" rimraf "3.0.2"
temp-dir "2.0.0" temp-dir "2.0.0"
tempy "1.0.1" tempy "1.0.1"
"@prisma/generator-helper@3.9.2": "@prisma/generator-helper@3.14.0":
version "3.9.2" version "3.14.0"
resolved "https://registry.yarnpkg.com/@prisma/generator-helper/-/generator-helper-3.9.2.tgz#5d272f81ef1bc713b8692bdd05ba603a1185b485" resolved "https://registry.yarnpkg.com/@prisma/generator-helper/-/generator-helper-3.14.0.tgz#d0eb3b6c0d72c35da1644e134ef953059d3208d7"
integrity sha512-hKVPNeOq4Opznpup2Nn0/nKzEcvHRsPd6Q3hQcmx2y/Yuoq+Gc4GPPjpRBbslFjkty02DjzO9dx+uJFsZZcXCg== integrity sha512-WuYhXMOr2rJ+A0D93QLoKJvu7FlHORPZz/72LwZlJT2GXQi2WNtS2xKJzgCI+Auc0JlLjijV5/7mDrUa4iHUbw==
dependencies: dependencies:
"@prisma/debug" "3.9.2" "@prisma/debug" "3.14.0"
"@types/cross-spawn" "6.0.2" "@types/cross-spawn" "6.0.2"
chalk "4.1.2" chalk "4.1.2"
cross-spawn "7.0.3" cross-spawn "7.0.3"
"@prisma/get-platform@3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009": "@prisma/get-platform@3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a":
version "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" version "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a"
resolved "https://registry.yarnpkg.com/@prisma/get-platform/-/get-platform-3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009.tgz#ad658ce677f45f527a923d5396fd634f30887aa9" resolved "https://registry.yarnpkg.com/@prisma/get-platform/-/get-platform-3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a.tgz#239d2f9a62c60ade4924562059c511b721a69d48"
integrity sha512-3PEg63hG25uDsxYwSnJ+V6P7Gyer+tPVt6HtpZlCJWC/giE2V/xyI6omoT9p5NXwe3kO0p6u4txOHnk/9DTpWQ== integrity sha512-jblBbReog/f+iIJb1PYAObHpJHdbjXhgHTOnyEPJ8wGl0rMHiwQKGd0ok+vc/da1WfWnDZYxUunuXCqDOtle+A==
dependencies: dependencies:
"@prisma/debug" "3.8.1" "@prisma/debug" "3.13.0"
"@prisma/migrate@^3.9.2": "@prisma/migrate@^3.14.0":
version "3.9.2" version "3.14.0"
resolved "https://registry.yarnpkg.com/@prisma/migrate/-/migrate-3.9.2.tgz#591097ea0cf5fe150cad61a53d756c8bfa3f7ed2" resolved "https://registry.yarnpkg.com/@prisma/migrate/-/migrate-3.14.0.tgz#8b81924c04c6ca2765c912ee26b85735c7907345"
integrity sha512-7zRgoFMzJrlQ2yZeNpe2mOydmzt1C00puZjJXOgSXnaUJeJq3ZFpv0P6Z7wc/wa7B7cYBonf6GTwXpYNUbl1UQ== integrity sha512-fDYPcYDGSSBpy/dK8RUmKsaW5l9XLKcTf5fe6YPXMWggFXRaBZFUlUCxJHAoysdoEArHzxZmft6Qdp13Gw6U7w==
dependencies: dependencies:
"@prisma/debug" "3.9.2" "@prisma/debug" "3.14.0"
"@prisma/get-platform" "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" "@prisma/get-platform" "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a"
"@sindresorhus/slugify" "1.1.2" "@sindresorhus/slugify" "1.1.2"
chalk "4.1.2" chalk "4.1.2"
execa "5.1.1" execa "5.1.1"
@ -720,34 +724,33 @@
has-yarn "2.1.0" has-yarn "2.1.0"
indent-string "4.0.0" indent-string "4.0.0"
log-update "4.0.0" log-update "4.0.0"
mariadb "2.5.5" mariadb "3.0.0"
mssql "8.0.1" mssql "8.1.0"
new-github-issue-url "0.2.1" pg "8.7.3"
open "7.4.2"
pg "8.7.1"
pkg-up "3.1.0" pkg-up "3.1.0"
prompts "2.4.2" prompts "2.4.2"
strip-ansi "6.0.1" strip-ansi "6.0.1"
strip-indent "3.0.0" strip-indent "3.0.0"
ts-pattern "^4.0.1"
"@prisma/sdk@^3.9.2": "@prisma/sdk@^3.14.0":
version "3.9.2" version "3.14.0"
resolved "https://registry.yarnpkg.com/@prisma/sdk/-/sdk-3.9.2.tgz#fefbce53faf409e2be6805c5ab5f0186a2565039" resolved "https://registry.yarnpkg.com/@prisma/sdk/-/sdk-3.14.0.tgz#db3cdee76ec7c351e806da6edda307a45cbf2cfc"
integrity sha512-o3gs51vFX7qSYKInWBAcO99qVowTntjSySPF8JjoBViNkKKugUoVjLu2ylFlomJRFmNvZmv9K2DdS977kL5Tiw== integrity sha512-q/4hAQjwW6iAXBmjhcUtwCmnSRu8x3bmpTzZltl/R0wfqjm7GVmKMY3j9XlIj9fzdBHfOKgj9FoNYQx/HBRsHQ==
dependencies: dependencies:
"@prisma/debug" "3.9.2" "@prisma/debug" "3.14.0"
"@prisma/engine-core" "3.9.2" "@prisma/engine-core" "3.14.0"
"@prisma/engines" "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" "@prisma/engines" "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a"
"@prisma/fetch-engine" "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" "@prisma/fetch-engine" "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a"
"@prisma/generator-helper" "3.9.2" "@prisma/generator-helper" "3.14.0"
"@prisma/get-platform" "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" "@prisma/get-platform" "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a"
"@timsuchanek/copy" "1.4.5" "@timsuchanek/copy" "1.4.5"
archiver "5.3.0" archiver "5.3.1"
arg "5.0.1" arg "5.0.1"
chalk "4.1.2" chalk "4.1.2"
checkpoint-client "1.1.20" checkpoint-client "1.1.21"
cli-truncate "2.1.0" cli-truncate "2.1.0"
dotenv "15.0.0" dotenv "16.0.0"
escape-string-regexp "4.0.0" escape-string-regexp "4.0.0"
execa "5.1.1" execa "5.1.1"
find-up "5.0.0" find-up "5.0.0"
@ -757,8 +760,12 @@
has-yarn "2.1.0" has-yarn "2.1.0"
is-ci "3.0.1" is-ci "3.0.1"
make-dir "3.1.0" make-dir "3.1.0"
new-github-issue-url "0.2.1"
node-fetch "2.6.7" node-fetch "2.6.7"
open "7"
ora "5.4.1"
p-map "4.0.0" p-map "4.0.0"
prompts "2.4.2"
read-pkg-up "7.0.1" read-pkg-up "7.0.1"
replace-string "3.1.0" replace-string "3.1.0"
resolve "1.22.0" resolve "1.22.0"
@ -773,6 +780,7 @@
tempy "1.0.1" tempy "1.0.1"
terminal-link "2.1.1" terminal-link "2.1.1"
tmp "0.2.1" tmp "0.2.1"
ts-pattern "^4.0.1"
"@radix-ui/number@0.1.0": "@radix-ui/number@0.1.0":
version "0.1.0" version "0.1.0"
@ -998,7 +1006,7 @@
"@types/qs" "*" "@types/qs" "*"
"@types/serve-static" "*" "@types/serve-static" "*"
"@types/geojson@^7946.0.7": "@types/geojson@^7946.0.8":
version "7946.0.8" version "7946.0.8"
resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.8.tgz#30744afdb385e2945e22f3b033f897f76b1f12ca" resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.8.tgz#30744afdb385e2945e22f3b033f897f76b1f12ca"
integrity sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA== integrity sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==
@ -1051,15 +1059,15 @@
resolved "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz" resolved "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz"
integrity sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww== integrity sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==
"@types/node@^14.14.28": "@types/node@^17.0.10":
version "14.18.12" version "17.0.39"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.12.tgz#0d4557fd3b94497d793efd4e7d92df2f83b4ef24" resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.39.tgz#3652d82e2a16b4ea679d5ea3143b816c91b7e113"
integrity sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A== integrity sha512-JDU3YLlnPK3WDao6/DlXLOgSNpG13ct+CwIO17V8q0/9fWJyeMJJ/VyZ1lv8kDprihvZMydzVwf0tQOqGiY2Nw==
"@types/normalize-package-data@^2.4.0": "@types/normalize-package-data@^2.4.0":
version "2.4.0" version "2.4.1"
resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301"
integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==
"@types/parse-json@^4.0.0": "@types/parse-json@^4.0.0":
version "4.0.0" version "4.0.0"
@ -1100,10 +1108,10 @@
"@types/scheduler" "*" "@types/scheduler" "*"
csstype "^3.0.2" csstype "^3.0.2"
"@types/retry@^0.12.0": "@types/retry@0.12.0":
version "0.12.1" version "0.12.0"
resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.1.tgz#d8f1c0d0dc23afad6dc16a9e993a0865774b4065" resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d"
integrity sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g== integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==
"@types/scheduler@*": "@types/scheduler@*":
version "0.16.1" version "0.16.1"
@ -1291,13 +1299,13 @@ archiver-utils@^2.1.0:
normalize-path "^3.0.0" normalize-path "^3.0.0"
readable-stream "^2.0.0" readable-stream "^2.0.0"
archiver@5.3.0: archiver@5.3.1:
version "5.3.0" version "5.3.1"
resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.0.tgz#dd3e097624481741df626267564f7dd8640a45ba" resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.1.tgz#21e92811d6f09ecfce649fbefefe8c79e57cbbb6"
integrity sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg== integrity sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==
dependencies: dependencies:
archiver-utils "^2.1.0" archiver-utils "^2.1.0"
async "^3.2.0" async "^3.2.3"
buffer-crc32 "^0.2.1" buffer-crc32 "^0.2.1"
readable-stream "^3.6.0" readable-stream "^3.6.0"
readdir-glob "^1.0.0" readdir-glob "^1.0.0"
@ -1392,7 +1400,7 @@ astral-regex@^2.0.0:
resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz"
integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
async@^3.2.0: async@^3.2.3:
version "3.2.3" version "3.2.3"
resolved "https://registry.yarnpkg.com/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9" resolved "https://registry.yarnpkg.com/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9"
integrity sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g== integrity sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==
@ -1466,7 +1474,7 @@ base64-js@^1.0.2, base64-js@^1.3.1:
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
bl@^4.0.3: bl@^4.0.3, bl@^4.1.0:
version "4.1.0" version "4.1.0"
resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
@ -1492,7 +1500,7 @@ brace-expansion@^1.1.7:
balanced-match "^1.0.0" balanced-match "^1.0.0"
concat-map "0.0.1" concat-map "0.0.1"
braces@^3.0.1: braces@^3.0.1, braces@^3.0.2:
version "3.0.2" version "3.0.2"
resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz"
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
@ -1575,7 +1583,7 @@ caniuse-lite@^1.0.30001283:
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001311.tgz#682ef3f4e617f1a177ad943de59775ed3032e511" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001311.tgz#682ef3f4e617f1a177ad943de59775ed3032e511"
integrity sha512-mleTFtFKfykEeW34EyfhGIFjGCqzhh38Y0LhdQ9aWF+HorZTtdgKV/1hEE0NlFkG2ubvisPV6l400tlbPys98A== integrity sha512-mleTFtFKfykEeW34EyfhGIFjGCqzhh38Y0LhdQ9aWF+HorZTtdgKV/1hEE0NlFkG2ubvisPV6l400tlbPys98A==
chalk@4.1.2: chalk@4.1.2, chalk@^4.1.0:
version "4.1.2" version "4.1.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
@ -1600,17 +1608,17 @@ chalk@^4.0.0:
ansi-styles "^4.1.0" ansi-styles "^4.1.0"
supports-color "^7.1.0" supports-color "^7.1.0"
checkpoint-client@1.1.20: checkpoint-client@1.1.21:
version "1.1.20" version "1.1.21"
resolved "https://registry.yarnpkg.com/checkpoint-client/-/checkpoint-client-1.1.20.tgz#c869eeba84130ea3e5660b1fd71440981b5df8f5" resolved "https://registry.yarnpkg.com/checkpoint-client/-/checkpoint-client-1.1.21.tgz#47751b82748088b42d8baa2108d6219c6bc9ff59"
integrity sha512-AHDELBFMXBV9Rzp4JaN0JR03YQomZpaaVFDjgH7Ue4CcPuzNV2dZ94ZORJ9OoQsASYca/uR7UNGXmeNuWHc+IQ== integrity sha512-bcrcnJncn6uGhj06IIsWvUBPyJWK1ZezDbLCJ//IQEYXkUobhGvOOBlHe9K5x0ZMkAZGinPB4T+lTUmFz/acWQ==
dependencies: dependencies:
ci-info "3.1.1" ci-info "3.3.0"
env-paths "2.2.1" env-paths "2.2.1"
fast-write-atomic "0.2.1" fast-write-atomic "0.2.1"
make-dir "3.1.0" make-dir "3.1.0"
ms "2.1.3" ms "2.1.3"
node-fetch "2.6.1" node-fetch "2.6.7"
uuid "8.3.2" uuid "8.3.2"
chownr@^2.0.0: chownr@^2.0.0:
@ -1618,12 +1626,7 @@ chownr@^2.0.0:
resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz"
integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
ci-info@3.1.1: ci-info@3.3.0, ci-info@^3.2.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.1.1.tgz#9a32fcefdf7bcdb6f0a7e1c0f8098ec57897b80a"
integrity sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ==
ci-info@^3.2.0:
version "3.3.0" version "3.3.0"
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2"
integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==
@ -1640,6 +1643,11 @@ cli-cursor@^3.1.0:
dependencies: dependencies:
restore-cursor "^3.1.0" restore-cursor "^3.1.0"
cli-spinners@^2.5.0:
version "2.6.1"
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d"
integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==
cli-truncate@2.1.0: cli-truncate@2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
@ -1648,6 +1656,11 @@ cli-truncate@2.1.0:
slice-ansi "^3.0.0" slice-ansi "^3.0.0"
string-width "^4.2.0" string-width "^4.2.0"
clone@^1.0.2:
version "1.0.4"
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==
clsx@^1.1.1: clsx@^1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz" resolved "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz"
@ -1699,6 +1712,11 @@ commander@^2.19.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
commander@^9.1.0:
version "9.3.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-9.3.0.tgz#f619114a5a2d2054e0d9ff1b31d5ccf89255e26b"
integrity sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw==
commondir@^1.0.1: commondir@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
@ -1768,12 +1786,9 @@ cosmiconfig@^6.0.0:
yaml "^1.7.2" yaml "^1.7.2"
crc-32@^1.2.0: crc-32@^1.2.0:
version "1.2.1" version "1.2.2"
resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.1.tgz#436d2bcaad27bcb6bd073a2587139d3024a16460" resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff"
integrity sha512-Dn/xm/1vFFgs3nfrpEVScHoIslO9NZRITWGz/1E/St6u4xw99vfZzVkW0OSnzx2h9egej9xwMCEut6sqwokM/w== integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==
dependencies:
exit-on-epipe "~1.0.1"
printj "~1.3.1"
crc32-stream@^4.0.2: crc32-stream@^4.0.2:
version "4.0.2" version "4.0.2"
@ -1861,6 +1876,13 @@ deep-is@^0.1.3:
resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz"
integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
defaults@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
integrity sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==
dependencies:
clone "^1.0.2"
define-lazy-prop@^2.0.0: define-lazy-prop@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
@ -1897,10 +1919,10 @@ delegates@^1.0.0:
resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz"
integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
denque@^1.5.0: denque@^2.0.1:
version "1.5.1" version "2.0.1"
resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.1.tgz#07f670e29c9a78f8faecb2566a1e2c11929c5cbf" resolved "https://registry.yarnpkg.com/denque/-/denque-2.0.1.tgz#bcef4c1b80dc32efe97515744f21a4229ab8934a"
integrity sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw== integrity sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==
detect-libc@^1.0.3: detect-libc@^1.0.3:
version "1.0.3" version "1.0.3"
@ -1979,10 +2001,10 @@ domutils@^2.8.0:
domelementtype "^2.2.0" domelementtype "^2.2.0"
domhandler "^4.2.0" domhandler "^4.2.0"
dotenv@15.0.0: dotenv@16.0.0:
version "15.0.0" version "16.0.0"
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-15.0.0.tgz#2a585639429bf2c2c62f387f0fffde9c75aafde0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.0.tgz#c619001253be89ebb638d027b609c75c26e47411"
integrity sha512-/l1sXXm79ry34KwwS0y4oVZjB468iw/6u9g1W26dtexKcIJAnVL2pMF+hxQwzZ7LutxOwEgtym9eIxvX33CMKg== integrity sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==
duplexer2@^0.1.2: duplexer2@^0.1.2:
version "0.1.4" version "0.1.4"
@ -2445,11 +2467,6 @@ execa@5.1.1:
signal-exit "^3.0.3" signal-exit "^3.0.3"
strip-final-newline "^2.0.0" strip-final-newline "^2.0.0"
exit-on-epipe@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692"
integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==
fast-decode-uri-component@^1.0.1: fast-decode-uri-component@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz#46f8b6c22b30ff7a81357d4f59abfae938202543" resolved "https://registry.yarnpkg.com/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz#46f8b6c22b30ff7a81357d4f59abfae938202543"
@ -2510,6 +2527,11 @@ fecha@^4.2.1:
resolved "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz" resolved "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz"
integrity sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q== integrity sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==
fflate@^0.7.3:
version "0.7.3"
resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.7.3.tgz#288b034ff0e9c380eaa2feff48c787b8371b7fa5"
integrity sha512-0Zz1jOzJWERhyhsimS54VTqOteCNwRtIlh8isdL0AXLo0g7xNTfTL7oWrkmCnPhZGocKIkWHBistBrrpoNH3aw==
file-entry-cache@^6.0.1: file-entry-cache@^6.0.1:
version "6.0.1" version "6.0.1"
resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz"
@ -2557,7 +2579,7 @@ find-root@^1.1.0:
find-up@5.0.0: find-up@5.0.0:
version "5.0.0" version "5.0.0"
resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
dependencies: dependencies:
locate-path "^6.0.0" locate-path "^6.0.0"
@ -2579,7 +2601,7 @@ find-up@^3.0.0:
find-up@^4.0.0, find-up@^4.1.0: find-up@^4.0.0, find-up@^4.1.0:
version "4.1.0" version "4.1.0"
resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
dependencies: dependencies:
locate-path "^5.0.0" locate-path "^5.0.0"
@ -2758,12 +2780,12 @@ globby@^11.0.3:
merge2 "^1.3.0" merge2 "^1.3.0"
slash "^3.0.0" slash "^3.0.0"
graceful-fs@^4.1.15, graceful-fs@^4.2.4: graceful-fs@^4.1.15, graceful-fs@^4.2.0, graceful-fs@^4.2.4:
version "4.2.9" version "4.2.10"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
graceful-fs@^4.1.2, graceful-fs@^4.2.0: graceful-fs@^4.1.2:
version "4.2.6" version "4.2.6"
resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz"
integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==
@ -2882,7 +2904,15 @@ http-proxy-agent@^4.0.1:
agent-base "6" agent-base "6"
debug "4" debug "4"
https-proxy-agent@5.0.0, https-proxy-agent@^5.0.0: https-proxy-agent@5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
dependencies:
agent-base "6"
debug "4"
https-proxy-agent@^5.0.0:
version "5.0.0" version "5.0.0"
resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz" resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz"
integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==
@ -3064,6 +3094,11 @@ is-glob@^4.0.0, is-glob@^4.0.1:
dependencies: dependencies:
is-extglob "^2.1.1" is-extglob "^2.1.1"
is-interactive@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e"
integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==
is-negative-zero@^2.0.1: is-negative-zero@^2.0.1:
version "2.0.1" version "2.0.1"
resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz" resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz"
@ -3114,6 +3149,11 @@ is-symbol@^1.0.2, is-symbol@^1.0.3:
dependencies: dependencies:
has-symbols "^1.0.2" has-symbols "^1.0.2"
is-unicode-supported@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
is-wsl@^2.1.1, is-wsl@^2.2.0: is-wsl@^2.1.1, is-wsl@^2.2.0:
version "2.2.0" version "2.2.0"
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
@ -3314,14 +3354,14 @@ locate-path@^3.0.0:
locate-path@^5.0.0: locate-path@^5.0.0:
version "5.0.0" version "5.0.0"
resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
dependencies: dependencies:
p-locate "^4.1.0" p-locate "^4.1.0"
locate-path@^6.0.0: locate-path@^6.0.0:
version "6.0.0" version "6.0.0"
resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
dependencies: dependencies:
p-locate "^5.0.0" p-locate "^5.0.0"
@ -3411,6 +3451,14 @@ lodash@^4.17.20:
resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
log-symbols@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
dependencies:
chalk "^4.1.0"
is-unicode-supported "^0.1.0"
log-update@4.0.0: log-update@4.0.0:
version "4.0.0" version "4.0.0"
resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1"
@ -3421,11 +3469,6 @@ log-update@4.0.0:
slice-ansi "^4.0.0" slice-ansi "^4.0.0"
wrap-ansi "^6.2.0" wrap-ansi "^6.2.0"
long@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==
loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
version "1.4.0" version "1.4.0"
resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz"
@ -3452,17 +3495,17 @@ make-error@^1.1.1:
resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz"
integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
mariadb@2.5.5: mariadb@3.0.0:
version "2.5.5" version "3.0.0"
resolved "https://registry.yarnpkg.com/mariadb/-/mariadb-2.5.5.tgz#a9aff9f1e57231a415a21254489439beb501c803" resolved "https://registry.yarnpkg.com/mariadb/-/mariadb-3.0.0.tgz#0738b14036be097991172b22c0ce1d43e261c014"
integrity sha512-6dklvcKWuuaV1JjAwnE2ezR+jTt7JrZHftgeHHBmjB0wgfaUpdxol1DPWclwMcCrsO9yoM0FuCOiCcCgXc//9Q== integrity sha512-1uIqD6AWLP5ojMY67XP4+4uRLe9L92HD1ZGU8fidi8cGdYIC+Ghx1JliAtf7lc/tGjOh6J400f/1M4BXVtZFvA==
dependencies: dependencies:
"@types/geojson" "^7946.0.7" "@alloc/quick-lru" "^5.2.0"
"@types/node" "^14.14.28" "@types/geojson" "^7946.0.8"
denque "^1.5.0" "@types/node" "^17.0.10"
denque "^2.0.1"
iconv-lite "^0.6.3" iconv-lite "^0.6.3"
long "^4.0.0" moment-timezone "^0.5.34"
moment-timezone "^0.5.33"
please-upgrade-node "^3.2.0" please-upgrade-node "^3.2.0"
media-typer@0.3.0: media-typer@0.3.0:
@ -3485,7 +3528,7 @@ merge2@^1.3.0, merge2@^1.4.1:
resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
micromatch@^4.0.2, micromatch@^4.0.4: micromatch@^4.0.2:
version "4.0.4" version "4.0.4"
resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz" resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz"
integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==
@ -3493,6 +3536,14 @@ micromatch@^4.0.2, micromatch@^4.0.4:
braces "^3.0.1" braces "^3.0.1"
picomatch "^2.2.3" picomatch "^2.2.3"
micromatch@^4.0.4:
version "4.0.5"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
dependencies:
braces "^3.0.2"
picomatch "^2.3.1"
mime-db@1.48.0: mime-db@1.48.0:
version "1.48.0" version "1.48.0"
resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz" resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz"
@ -3573,7 +3624,7 @@ mkdirp@^1.0.3, mkdirp@^1.0.4:
resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz"
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
moment-timezone@^0.5.33: moment-timezone@^0.5.34:
version "0.5.34" version "0.5.34"
resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.34.tgz#a75938f7476b88f155d3504a9343f7519d9a405c" resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.34.tgz#a75938f7476b88f155d3504a9343f7519d9a405c"
integrity sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg== integrity sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==
@ -3600,12 +3651,13 @@ ms@2.1.3, ms@^2.1.1:
resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
mssql@8.0.1: mssql@8.1.0:
version "8.0.1" version "8.1.0"
resolved "https://registry.yarnpkg.com/mssql/-/mssql-8.0.1.tgz#ee7abdeb35d15ffab07dc149344adb0ad93ea2af" resolved "https://registry.yarnpkg.com/mssql/-/mssql-8.1.0.tgz#d660eafdf0fcf529e2c839705b9455d60ccbacf5"
integrity sha512-GZ1YnfMjfEdiXNRWZeYyTtqHWptUMA5jWrygbqfl72zsCxXsNuLPH9gPxz7m2F6+tWY48hR+ieZ92QY11ILNeg== integrity sha512-S7j4MoanTCLM09I+wMI9thTS2342mgxCpOQ9kpnFiG3P1NStuQMhPILLOgOt6hwMa/ctfTUKl7eJpB5XGPoe6A==
dependencies: dependencies:
"@tediousjs/connection-string" "^0.3.0" "@tediousjs/connection-string" "^0.3.0"
commander "^9.1.0"
debug "^4.3.3" debug "^4.3.3"
rfdc "^1.3.0" rfdc "^1.3.0"
tarn "^3.0.2" tarn "^3.0.2"
@ -3696,11 +3748,6 @@ node-addon-api@^3.0.2:
resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz"
integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==
node-fetch@2.6.1, node-fetch@^2.6.1:
version "2.6.1"
resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz"
integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
node-fetch@2.6.7, node-fetch@^2.6.7: node-fetch@2.6.7, node-fetch@^2.6.7:
version "2.6.7" version "2.6.7"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
@ -3708,6 +3755,11 @@ node-fetch@2.6.7, node-fetch@^2.6.7:
dependencies: dependencies:
whatwg-url "^5.0.0" whatwg-url "^5.0.0"
node-fetch@^2.6.1:
version "2.6.1"
resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz"
integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
nopt@^5.0.0: nopt@^5.0.0:
version "5.0.0" version "5.0.0"
resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz"
@ -3846,7 +3898,7 @@ onetime@^5.1.0, onetime@^5.1.2:
dependencies: dependencies:
mimic-fn "^2.1.0" mimic-fn "^2.1.0"
open@7.4.2: open@7:
version "7.4.2" version "7.4.2"
resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321"
integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==
@ -3880,6 +3932,21 @@ optionator@^0.9.1:
type-check "^0.4.0" type-check "^0.4.0"
word-wrap "^1.2.3" word-wrap "^1.2.3"
ora@5.4.1:
version "5.4.1"
resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18"
integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==
dependencies:
bl "^4.1.0"
chalk "^4.1.0"
cli-cursor "^3.1.0"
cli-spinners "^2.5.0"
is-interactive "^1.0.0"
is-unicode-supported "^0.1.0"
log-symbols "^4.1.0"
strip-ansi "^6.0.0"
wcwidth "^1.0.1"
p-filter@2.1.0: p-filter@2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/p-filter/-/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c" resolved "https://registry.yarnpkg.com/p-filter/-/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c"
@ -3903,7 +3970,7 @@ p-limit@^2.0.0, p-limit@^2.2.0:
p-limit@^3.0.2: p-limit@^3.0.2:
version "3.1.0" version "3.1.0"
resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
dependencies: dependencies:
yocto-queue "^0.1.0" yocto-queue "^0.1.0"
@ -3924,14 +3991,14 @@ p-locate@^3.0.0:
p-locate@^4.1.0: p-locate@^4.1.0:
version "4.1.0" version "4.1.0"
resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
dependencies: dependencies:
p-limit "^2.2.0" p-limit "^2.2.0"
p-locate@^5.0.0: p-locate@^5.0.0:
version "5.0.0" version "5.0.0"
resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
dependencies: dependencies:
p-limit "^3.0.2" p-limit "^3.0.2"
@ -3948,12 +4015,12 @@ p-map@^2.0.0:
resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
p-retry@4.6.1: p-retry@4.6.2:
version "4.6.1" version "4.6.2"
resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.1.tgz#8fcddd5cdf7a67a0911a9cf2ef0e5df7f602316c" resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16"
integrity sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA== integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==
dependencies: dependencies:
"@types/retry" "^0.12.0" "@types/retry" "0.12.0"
retry "^0.13.1" retry "^0.13.1"
p-try@^1.0.0: p-try@^1.0.0:
@ -4003,7 +4070,7 @@ path-exists@^3.0.0:
path-exists@^4.0.0: path-exists@^4.0.0:
version "4.0.0" version "4.0.0"
resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
path-is-absolute@^1.0.0: path-is-absolute@^1.0.0:
@ -4048,7 +4115,7 @@ pg-int8@1.0.1:
resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c"
integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==
pg-pool@^3.4.1: pg-pool@^3.5.1:
version "3.5.1" version "3.5.1"
resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.5.1.tgz#f499ce76f9bf5097488b3b83b19861f28e4ed905" resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.5.1.tgz#f499ce76f9bf5097488b3b83b19861f28e4ed905"
integrity sha512-6iCR0wVrro6OOHFsyavV+i6KYL4lVNyYAB9RD18w66xSzN+d8b66HiwuP30Gp1SH5O9T82fckkzsRjlrhD0ioQ== integrity sha512-6iCR0wVrro6OOHFsyavV+i6KYL4lVNyYAB9RD18w66xSzN+d8b66HiwuP30Gp1SH5O9T82fckkzsRjlrhD0ioQ==
@ -4069,15 +4136,15 @@ pg-types@^2.1.0:
postgres-date "~1.0.4" postgres-date "~1.0.4"
postgres-interval "^1.1.0" postgres-interval "^1.1.0"
pg@8.7.1: pg@8.7.3:
version "8.7.1" version "8.7.3"
resolved "https://registry.yarnpkg.com/pg/-/pg-8.7.1.tgz#9ea9d1ec225980c36f94e181d009ab9f4ce4c471" resolved "https://registry.yarnpkg.com/pg/-/pg-8.7.3.tgz#8a5bdd664ca4fda4db7997ec634c6e5455b27c44"
integrity sha512-7bdYcv7V6U3KAtWjpQJJBww0UEsWuh4yQ/EjNf2HeO/NnvKjpvhEIe/A/TleP6wtmSKnUnghs5A9jUoK6iDdkA== integrity sha512-HPmH4GH4H3AOprDJOazoIcpI49XFsHCe8xlrjHkWiapdbHK+HLtbm/GQzXYAZwmPju/kzKhjaSfMACG+8cgJcw==
dependencies: dependencies:
buffer-writer "2.0.0" buffer-writer "2.0.0"
packet-reader "1.0.0" packet-reader "1.0.0"
pg-connection-string "^2.5.0" pg-connection-string "^2.5.0"
pg-pool "^3.4.1" pg-pool "^3.5.1"
pg-protocol "^1.5.0" pg-protocol "^1.5.0"
pg-types "^2.1.0" pg-types "^2.1.0"
pgpass "1.x" pgpass "1.x"
@ -4099,6 +4166,11 @@ picomatch@^2.2.1, picomatch@^2.2.3:
resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz" resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz"
integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
picomatch@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
pidtree@^0.3.0: pidtree@^0.3.0:
version "0.3.1" version "0.3.1"
resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz" resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz"
@ -4185,22 +4257,17 @@ prettysize@^2.0.0:
resolved "https://registry.yarnpkg.com/prettysize/-/prettysize-2.0.0.tgz#902c02480d865d9cc0813011c9feb4fa02ce6996" resolved "https://registry.yarnpkg.com/prettysize/-/prettysize-2.0.0.tgz#902c02480d865d9cc0813011c9feb4fa02ce6996"
integrity sha512-VVtxR7sOh0VsG8o06Ttq5TrI1aiZKmC+ClSn4eBPaNf4SHr5lzbYW+kYGX3HocBL/MfpVrRfFZ9V3vCbLaiplg== integrity sha512-VVtxR7sOh0VsG8o06Ttq5TrI1aiZKmC+ClSn4eBPaNf4SHr5lzbYW+kYGX3HocBL/MfpVrRfFZ9V3vCbLaiplg==
printj@~1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/printj/-/printj-1.3.1.tgz#9af6b1d55647a1587ac44f4c1654a4b95b8e12cb"
integrity sha512-GA3TdL8szPK4AQ2YnOe/b+Y1jUFwmmGMMK/qbY7VcE3Z7FU8JstbKiKRzO6CIiAKPhTO8m01NoQ0V5f3jc4OGg==
prism-react-renderer@^1.2.1: prism-react-renderer@^1.2.1:
version "1.3.1" version "1.3.1"
resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.1.tgz#88fc9d0df6bed06ca2b9097421349f8c2f24e30d" resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.1.tgz#88fc9d0df6bed06ca2b9097421349f8c2f24e30d"
integrity sha512-xUeDMEz074d0zc5y6rxiMp/dlC7C+5IDDlaEUlcBOFE2wddz7hz5PNupb087mPwTt7T9BrFmewObfCBuf/LKwQ== integrity sha512-xUeDMEz074d0zc5y6rxiMp/dlC7C+5IDDlaEUlcBOFE2wddz7hz5PNupb087mPwTt7T9BrFmewObfCBuf/LKwQ==
prisma@^3.9.2: prisma@^3.14.0:
version "3.9.2" version "3.14.0"
resolved "https://registry.yarnpkg.com/prisma/-/prisma-3.9.2.tgz#cc2da4e8db91231dea7465adf9db6e19f11032a9" resolved "https://registry.yarnpkg.com/prisma/-/prisma-3.14.0.tgz#dd67ece37d7b5373e9fd9588971de0024b49be81"
integrity sha512-i9eK6cexV74OgeWaH3+e6S07kvC9jEZTl6BqtBH398nlCU0tck7mE9dicY6YQd+euvMjjCtY89q4NgmaPnUsSg== integrity sha512-l9MOgNCn/paDE+i1K2fp9NZ+Du4trzPTJsGkaQHVBufTGqzoYHuNk8JfzXuIn0Gte6/ZjyKj652Jq/Lc1tp2yw==
dependencies: dependencies:
"@prisma/engines" "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" "@prisma/engines" "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a"
process-nextick-args@~2.0.0: process-nextick-args@~2.0.0:
version "2.0.1" version "2.0.1"
@ -4360,7 +4427,7 @@ react@^17.0.2:
read-pkg-up@7.0.1: read-pkg-up@7.0.1:
version "7.0.1" version "7.0.1"
resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507"
integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==
dependencies: dependencies:
find-up "^4.1.0" find-up "^4.1.0"
@ -4386,7 +4453,7 @@ read-pkg@^3.0.0:
read-pkg@^5.2.0: read-pkg@^5.2.0:
version "5.2.0" version "5.2.0"
resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc"
integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==
dependencies: dependencies:
"@types/normalize-package-data" "^2.4.0" "@types/normalize-package-data" "^2.4.0"
@ -5168,6 +5235,11 @@ ts-node@^10.0.0:
source-map-support "^0.5.17" source-map-support "^0.5.17"
yn "3.1.1" yn "3.1.1"
ts-pattern@^4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/ts-pattern/-/ts-pattern-4.0.2.tgz#b36afdb2de1ec0224539dcb7cea3a57c41453b9f"
integrity sha512-eHqR/7A6fcw05vCOfnL6RwgGJbVi9G/YHTdYdjYmElhDdJ1SMn7pWs+6+YuxygaFwQS/g+cIDlu+UD8IVpur1A==
tsconfig-paths@^3.9.0: tsconfig-paths@^3.9.0:
version "3.9.0" version "3.9.0"
resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz" resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz"
@ -5229,12 +5301,12 @@ type-fest@^0.21.3:
type-fest@^0.6.0: type-fest@^0.6.0:
version "0.6.0" version "0.6.0"
resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==
type-fest@^0.8.0, type-fest@^0.8.1: type-fest@^0.8.0, type-fest@^0.8.1:
version "0.8.1" version "0.8.1"
resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
type-is@^1.6.4: type-is@^1.6.4:
@ -5265,10 +5337,10 @@ unbox-primitive@^1.0.1:
has-symbols "^1.0.2" has-symbols "^1.0.2"
which-boxed-primitive "^1.0.2" which-boxed-primitive "^1.0.2"
undici@3.3.6: undici@5.0.0:
version "3.3.6" version "5.0.0"
resolved "https://registry.yarnpkg.com/undici/-/undici-3.3.6.tgz#06d3b97b7eeff46bce6f8a71079c09f64dd59dc1" resolved "https://registry.yarnpkg.com/undici/-/undici-5.0.0.tgz#3c1e08c7f0df90c485d5d8dbb0517e11e34f2090"
integrity sha512-/j3YTZ5AobMB4ZrTY72mzM54uFUX32v0R/JRW9G2vOyF1uSKYAx+WT8dMsAcRS13TOFISv094TxIyWYk+WEPsA== integrity sha512-VhUpiZ3No1DOPPQVQnsDZyfcbTTcHdcgWej1PdFnSvOeJmOVDgiOHkunJmBLfmjt4CqgPQddPVjSWW0dsTs5Yg==
unique-string@^2.0.0: unique-string@^2.0.0:
version "2.0.0" version "2.0.0"
@ -5361,6 +5433,13 @@ warning@^4.0.2:
dependencies: dependencies:
loose-envify "^1.0.0" loose-envify "^1.0.0"
wcwidth@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=
dependencies:
defaults "^1.0.3"
webidl-conversions@^3.0.0: webidl-conversions@^3.0.0:
version "3.0.1" version "3.0.1"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
@ -5480,7 +5559,7 @@ yn@3.1.1:
yocto-queue@^0.1.0: yocto-queue@^0.1.0:
version "0.1.0" version "0.1.0"
resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
yup@^0.32.9: yup@^0.32.9: