From be9523304ac4e707ccb39243193d6083a0739775 Mon Sep 17 00:00:00 2001 From: diced Date: Sat, 4 Jun 2022 22:05:08 -0700 Subject: [PATCH] feat(v3.4.4): fix many bugs and password protected uploads --- README.md | 9 +- SECURITY.md | 2 +- config.example.toml | 2 +- package.json | 17 +- .../migration.sql | 2 + prisma/schema.prisma | 21 +- src/components/Layout.tsx | 4 +- src/components/pages/Manage.tsx | 1 + src/components/pages/Upload.tsx | 1 + src/components/pages/Users.tsx | 63 ++- src/lib/datasource/Local.ts | 6 +- src/lib/datasource/S3.ts | 15 + src/lib/datasource/datasource.ts | 1 + src/pages/[...id].tsx | 68 ++- src/pages/api/auth/image.ts | 33 ++ src/pages/api/upload.ts | 15 +- src/pages/api/user/files.ts | 8 +- src/pages/api/users.ts | 10 + src/pages/auth/login.tsx | 33 -- src/server/index.ts | 6 +- src/server/server.ts | 36 +- src/server/util.ts | 26 +- yarn.lock | 471 ++++++++++-------- 23 files changed, 523 insertions(+), 327 deletions(-) create mode 100644 prisma/migrations/20220604225814_image_password/migration.sql create mode 100644 src/pages/api/auth/image.ts diff --git a/README.md b/README.md index 1074ca0..9452cbb 100644 --- a/README.md +++ b/README.md @@ -17,18 +17,19 @@ - Built with Next.js & React - Token protected uploading - Image uploading +- Password Protected Uploads - URL shortening - Text uploading - URL Formats (uuid, dates, random alphanumeric, original name, zws) - Discord embeds (OG metadata) - 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 -[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 -[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 -[See how to theme here](https://zipline.diced.tech/docs/themes/reference) +[See how to theme here](https://zipl.vercel.app/docs/themes/reference) diff --git a/SECURITY.md b/SECURITY.md index 650e037..358a5c2 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -4,7 +4,7 @@ | Version | Supported | | ------- | ------------------ | -| 3.3.x | :white_check_mark: | +| 3.4.4 | :white_check_mark: | | < 3 | :x: | | < 2 | :x: | diff --git a/config.example.toml b/config.example.toml index 8a85388..5ec8eb3 100644 --- a/config.example.toml +++ b/config.example.toml @@ -1,6 +1,6 @@ [core] secure = true -secret = 'some secret' +secret = 'changethis' host = '0.0.0.0' port = 3000 database_url = 'postgres://postgres:postgres@postgres/postgres' diff --git a/package.json b/package.json index 87b2550..da9f1a9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "zip3", - "version": "3.4.3", + "name": "zipline", + "version": "3.4.4", "license": "MIT", "scripts": { "dev": "node esbuild.config.js && REACT_EDITOR=code-insiders NODE_ENV=development node dist/server", @@ -9,7 +9,7 @@ "build:next": "next build", "build:schema": "prisma generate --schema=prisma/schema.prisma", "migrate:dev": "prisma migrate dev --create-only", - "start": "node server", + "start": "node dist/server", "lint": "next lint", "seed": "ts-node --compiler-options \"{\\\"module\\\":\\\"commonjs\\\"}\" --transpile-only prisma/seed.ts", "docker:run": "docker-compose up -d", @@ -26,19 +26,20 @@ "@mantine/notifications": "^3.6.9", "@mantine/prism": "^3.6.11", "@modulz/radix-icons": "^4.0.0", - "@prisma/client": "^3.9.2", - "@prisma/migrate": "^3.9.2", - "@prisma/sdk": "^3.9.2", + "@prisma/client": "^3.14.0", + "@prisma/migrate": "^3.14.0", + "@prisma/sdk": "^3.14.0", "@reduxjs/toolkit": "^1.6.0", "argon2": "^0.28.2", "aws-sdk": "^2.1085.0", "colorette": "^1.2.2", "cookie": "^0.4.1", "fecha": "^4.2.1", + "fflate": "^0.7.3", "find-my-way": "^5.2.0", "multer": "^1.4.4", "next": "^12.1.0", - "prisma": "^3.9.2", + "prisma": "^3.14.0", "react": "^17.0.2", "react-dom": "^17.0.2", "react-redux": "^7.2.4", @@ -64,4 +65,4 @@ "type": "git", "url": "https://github.com/diced/zipline.git" } -} +} \ No newline at end of file diff --git a/prisma/migrations/20220604225814_image_password/migration.sql b/prisma/migrations/20220604225814_image_password/migration.sql new file mode 100644 index 0000000..7694304 --- /dev/null +++ b/prisma/migrations/20220604225814_image_password/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "Image" ADD COLUMN "password" TEXT; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 1a99102..78d8af5 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -8,16 +8,16 @@ generator client { } model User { - id Int @id @default(autoincrement()) + id Int @id @default(autoincrement()) username String password String token String - administrator Boolean @default(false) - systemTheme String @default("system") + administrator Boolean @default(false) + systemTheme String @default("system") embedTitle String? - embedColor String @default("#2f3136") - embedSiteName String? @default("{image.file} • {user.name}") - ratelimited Boolean @default(false) + embedColor String @default("#2f3136") + embedSiteName String? @default("{image.file} • {user.name}") + ratelimited Boolean @default(false) domains String[] images Image[] urls Url[] @@ -38,6 +38,7 @@ model Image { views Int @default(0) favorite Boolean @default(false) embed Boolean @default(false) + password String? invisible InvisibleImage? format ImageFormat @default(RANDOM) user User @relation(fields: [userId], references: [id]) @@ -47,7 +48,7 @@ model Image { model InvisibleImage { id Int @id @default(autoincrement()) invis String @unique - imageId Int + imageId Int @unique image Image @relation(fields: [imageId], references: [id]) } @@ -65,12 +66,12 @@ model Url { model InvisibleUrl { id Int @id @default(autoincrement()) invis String @unique - urlId String + urlId String @unique url Url @relation(fields: [urlId], references: [id]) } model Stats { - id Int @id @default(autoincrement()) + id Int @id @default(autoincrement()) created_at DateTime @default(now()) data Json -} \ No newline at end of file +} diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx index 9109a41..421ce05 100644 --- a/src/components/Layout.tsx +++ b/src/components/Layout.tsx @@ -122,6 +122,7 @@ export default function Layout({ children, user }) { const openResetToken = () => modals.openConfirmModal({ title: 'Reset Token', + centered: true, children: ( 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({ title: 'Copy Token', + centered: true, children: ( Make sure you don't share this token with anyone as they will be able to upload files on your behalf. @@ -326,4 +328,4 @@ export default function Layout({ children, user }) { {children} ); -} +} \ No newline at end of file diff --git a/src/components/pages/Manage.tsx b/src/components/pages/Manage.tsx index 131b8b2..61adeef 100644 --- a/src/components/pages/Manage.tsx +++ b/src/components/pages/Manage.tsx @@ -82,6 +82,7 @@ export default function Manage() { title: 'Updating user...', message: '', loading: true, + autoClose: false, }); const data = { diff --git a/src/components/pages/Upload.tsx b/src/components/pages/Upload.tsx index 9c33fe5..dd406e1 100644 --- a/src/components/pages/Upload.tsx +++ b/src/components/pages/Upload.tsx @@ -58,6 +58,7 @@ export default function Upload() { title: 'Uploading Images...', message: '', loading: true, + autoClose: false, }); const res = await fetch('/api/upload', { diff --git a/src/components/pages/Users.tsx b/src/components/pages/Users.tsx index e68abbe..4f2e2c1 100644 --- a/src/components/pages/Users.tsx +++ b/src/components/pages/Users.tsx @@ -1,12 +1,12 @@ import React, { useState, useEffect } from 'react'; - import { useStoreSelector } from 'lib/redux/store'; import useFetch from 'hooks/useFetch'; import { useRouter } from 'next/router'; 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 { useNotifications } from '@mantine/notifications'; +import { useModals } from '@mantine/modals'; function CreateUserModal({ open, setOpen, updateUsers }) { @@ -51,7 +51,7 @@ function CreateUserModal({ open, setOpen, updateUsers }) { updateUsers(); }; - + return ( state.user); const router = useRouter(); const notif = useNotifications(); + const modals = useModals(); const [users, setUsers] = useState([]); const [open, setOpen] = useState(false); - const updateUsers = async () => { - const us = await useFetch('/api/users'); - if (!us.error) { - setUsers(us); - } else { - router.push('/dashboard'); - }; - }; - - const handleDelete = async (user) => { + const handleDelete = async (user, delete_images) => { const res = await useFetch('/api/users', 'DELETE', { id: user.id, + delete_images, }); if (res.error) { notif.showNotification({ @@ -107,9 +100,39 @@ export default function Users() { color: 'green', icon: , }); + 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(() => { @@ -121,7 +144,7 @@ export default function Users() { Users - setOpen(true)}> + setOpen(true)}> - {users.length ? users.filter(x => x.username !== user.username).map((user, i) => ( + {users.length ? users.filter(x => x.username !== user.username).map(user => ( - {user.username[0]} + {user.username[0]} {user.username} - handleDelete(user)}> + openDeleteModal(user)}> - )): [1,2,3,4].map(x => ( + )) : [1, 2, 3, 4].map(x => (
- +
))}
diff --git a/src/lib/datasource/Local.ts b/src/lib/datasource/Local.ts index f9adaf8..665d38a 100644 --- a/src/lib/datasource/Local.ts +++ b/src/lib/datasource/Local.ts @@ -1,5 +1,5 @@ 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 { Datasource } from './datasource'; @@ -14,6 +14,10 @@ export class Local extends Datasource { await writeFile(join(process.cwd(), this.path, file), data); } + public async delete(file: string): Promise { + await rm(join(process.cwd(), this.path, file)); + } + public get(file: string): ReadStream { try { return createReadStream(join(process.cwd(), this.path, file)); diff --git a/src/lib/datasource/S3.ts b/src/lib/datasource/S3.ts index f66aefb..af3b20f 100644 --- a/src/lib/datasource/S3.ts +++ b/src/lib/datasource/S3.ts @@ -34,6 +34,21 @@ export class S3 extends Datasource { }); } + public async delete(file: string): Promise { + 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 { // Unfortunately, aws-sdk is bad and the stream still loads everything into memory. return this.s3.getObject({ diff --git a/src/lib/datasource/datasource.ts b/src/lib/datasource/datasource.ts index b06ec52..266ad64 100644 --- a/src/lib/datasource/datasource.ts +++ b/src/lib/datasource/datasource.ts @@ -4,6 +4,7 @@ export abstract class Datasource { public name: string; public abstract save(file: string, data: Buffer): Promise; + public abstract delete(file: string): Promise; public abstract get(file: string): Readable; public abstract size(): Promise; } \ No newline at end of file diff --git a/src/pages/[...id].tsx b/src/pages/[...id].tsx index 09be29d..0ffc86f 100644 --- a/src/pages/[...id].tsx +++ b/src/pages/[...id].tsx @@ -1,44 +1,85 @@ -import React, { useEffect } from 'react'; +import React, { useEffect, useState } from 'react'; import Head from 'next/head'; import { GetServerSideProps } from 'next'; -import { Box } from '@mantine/core'; +import { Box, Button, Modal, PasswordInput } from '@mantine/core'; import config from 'lib/config'; import prisma from 'lib/prisma'; import { parse } from 'lib/clientUtils'; 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 [opened, setOpened] = useState(pass); + const [password, setPassword] = useState(''); + const [error, setError] = useState(''); + // reapply date from workaround 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 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))); else imageEl.width = original.width; }; - - useEffect(() => updateImage(), []); + + useEffect(() => { + if (pass) { + setOpened(true); + } else { + updateImage(); + } + }, []); return ( <> {image.embed && ( <> - {user.embedSiteName && ()} - {user.embedTitle && ()} - + {user.embedSiteName && } + {user.embedTitle && } + )} {image.file} + setOpened(false)} + title='Password Protected' + centered={true} + hideCloseButton={true} + closeOnEscape={false} + closeOnClickOutside={false} + > + setPassword(e.target.value)} /> + + { props: {}, redirect: { destination: url.destination, - }, + }, }; } else { @@ -96,6 +137,7 @@ export const getServerSideProps: GetServerSideProps = async (context) => { userId: true, embed: true, created_at: true, + password: true, }, }); if (!image) return { notFound: true }; @@ -133,11 +175,13 @@ export const getServerSideProps: GetServerSideProps = async (context) => { data.pipe(context.res); return { props: {} }; } - + const pass = image.password ? true : false; + delete image.password; return { props: { image, user, + pass, }, }; } diff --git a/src/pages/api/auth/image.ts b/src/pages/api/auth/image.ts new file mode 100644 index 0000000..552e4d9 --- /dev/null +++ b/src/pages/api/auth/image.ts @@ -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); \ No newline at end of file diff --git a/src/pages/api/upload.ts b/src/pages/api/upload.ts index c8ed0d0..b0d387b 100644 --- a/src/pages/api/upload.ts +++ b/src/pages/api/upload.ts @@ -2,7 +2,7 @@ import multer from 'multer'; import prisma from 'lib/prisma'; import zconfig from 'lib/config'; 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 { ImageFormat, InvisibleImage } from '@prisma/client'; import { format as formatDate } from 'fecha'; @@ -14,7 +14,7 @@ const uploader = multer(); async function handler(req: NextApiReq, res: NextApiRes) { if (req.method !== 'POST') return res.forbid('invalid method'); if (!req.headers.authorization) return res.forbid('no authorization'); - + const user = await prisma.user.findFirst({ where: { token: req.headers.authorization, @@ -56,6 +56,10 @@ async function handler(req: NextApiReq, res: NextApiRes) { break; } + let password = null; + if (req.headers.password) { + password = await hashPassword(req.headers.password as string); + } let invis: InvisibleImage; const image = await prisma.image.create({ @@ -65,13 +69,14 @@ async function handler(req: NextApiReq, res: NextApiRes) { userId: user.id, embed: !!req.headers.embed, format, + password, }, }); - + if (req.headers.zws) invis = await createInvisImage(zconfig.uploader.length, image.id); await datasource.save(image.file, file.buffer); - Logger.get('image').info(`User ${user.username} (${user.id}) uploaded an image ${image.file} (${image.id})`); + Logger.get('image').info(`User ${user.username} (${user.id}) uploaded an image ${image.file} (${image.id})`); if (user.domains.length) { const domain = user.domains[Math.floor(Math.random() * user.domains.length)]; files.push(`${domain}${zconfig.uploader.route}/${invis ? invis.invis : image.file}`); @@ -117,7 +122,7 @@ function run(middleware: any) { }); } -export default async function handlers(req, res) { +export default async function handlers(req, res) { return withZipline(handler)(req, res); }; diff --git a/src/pages/api/user/files.ts b/src/pages/api/user/files.ts index 04f9ca4..9d361a9 100644 --- a/src/pages/api/user/files.ts +++ b/src/pages/api/user/files.ts @@ -1,10 +1,8 @@ import { NextApiReq, NextApiRes, withZipline } from 'middleware/withZipline'; import prisma from 'lib/prisma'; -import config from 'lib/config'; import { chunk } from 'lib/util'; -import { rm } from 'fs/promises'; -import { join } from 'path'; import Logger from 'lib/logger'; +import datasource from 'lib/ds'; async function handler(req: NextApiReq, res: NextApiRes) { 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})`); + delete image.password; return res.json(image); } else if (req.method === 'PATCH') { 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); } else { let images = await prisma.image.findMany({ diff --git a/src/pages/api/users.ts b/src/pages/api/users.ts index 1faa4df..48ba90d 100644 --- a/src/pages/api/users.ts +++ b/src/pages/api/users.ts @@ -1,5 +1,6 @@ import { NextApiReq, NextApiRes, withZipline } from 'middleware/withZipline'; import prisma from 'lib/prisma'; +import Logger from 'lib/logger'; async function handler(req: NextApiReq, res: NextApiRes) { 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 (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({ where: { id: deleteUser.id, diff --git a/src/pages/auth/login.tsx b/src/pages/auth/login.tsx index 9aab4ca..c3a3998 100644 --- a/src/pages/auth/login.tsx +++ b/src/pages/auth/login.tsx @@ -9,7 +9,6 @@ import { Cross1Icon, DownloadIcon } from '@modulz/radix-icons'; export default function Login() { const router = useRouter(); const notif = useNotifications(); - const [versions, setVersions] = React.useState<{ upstream: string, local: string }>(null); const form = useForm({ initialValues: { @@ -44,17 +43,6 @@ export default function Login() { (async () => { const a = await fetch('/api/user'); 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: , - }); - } - } })(); }, []); @@ -71,27 +59,6 @@ export default function Login() { - - {versions && ( - - {versions.local} - - )} - ); } diff --git a/src/server/index.ts b/src/server/index.ts index c403607..c47812b 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -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(); \ No newline at end of file diff --git a/src/server/server.ts b/src/server/server.ts index 0266f52..5d32481 100644 --- a/src/server/server.ts +++ b/src/server/server.ts @@ -11,7 +11,6 @@ import Logger from '../lib/logger'; import mimes from '../../scripts/mimes'; import { extname } from 'path'; import exts from '../../scripts/exts'; -import { version } from '../../package.json'; const serverLog = Logger.get('server'); @@ -24,12 +23,20 @@ export default class Server { private http: HttpServer; public constructor() { - serverLog.info(`starting zipline@${version} server`); - this.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'; process.env.DATABASE_URL = config.core.database_url; @@ -64,16 +71,11 @@ export default class Server { { 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.password) await this.handle(req, res); else if (image.embed) await this.handle(req, res); else await this.fileDb(req, res, image); }); @@ -86,16 +88,11 @@ export default class Server { { 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.password) await this.handle(req, res); else await this.rawFileDb(req, res, image); }); @@ -123,7 +120,6 @@ export default class Server { private async rawFile(req: IncomingMessage, res: OutgoingMessage, id: string) { const data = datasource.get(id); if (!data) return this.nextServer.render404(req, res as ServerResponse); - const mimetype = mimes[extname(id)] ?? 'application/octet-stream'; res.setHeader('Content-Type', mimetype); @@ -132,7 +128,7 @@ export default class Server { 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); 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(); if (Object.keys(exts).includes(ext)) return this.handle(req, res as ServerResponse); diff --git a/src/server/util.ts b/src/server/util.ts index 669bdac..6721d64 100644 --- a/src/server/util.ts +++ b/src/server/util.ts @@ -1,28 +1,34 @@ import { Migrate } from '@prisma/migrate/dist/Migrate'; +import { ensureDatabaseExists } from '@prisma/migrate/dist/utils/ensureDatabaseExists'; import Logger from '../lib/logger'; import { Datasource } from 'lib/datasource'; +import { PrismaClient } from '@prisma/client'; export async function migrations() { const migrate = new Migrate('./prisma/schema.prisma'); + await ensureDatabaseExists('apply', true, './prisma/schema.prisma'); + const diagnose = await migrate.diagnoseMigrationHistory({ optInToShadowDatabase: false, }); if (diagnose.history?.diagnostic === 'databaseIsBehind') { - Logger.get('database').info('migrating database'); - await migrate.applyMigrations(); - Logger.get('database').info('finished migrating database'); + try { + Logger.get('database').info('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; return Logger.get('url').info(url); } -export function bytesToRead(bytes) { +export function bytesToRead(bytes: number) { const units = ['B', 'kB', 'MB', 'GB', 'TB', 'PB']; 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 byUser = await prisma.image.groupBy({ by: ['userId'], @@ -80,9 +86,9 @@ export async function getStats(prisma, datasource: Datasource) { size: bytesToRead(size), size_num: size, 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, 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), }; } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 1089c00..6df6e0d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,11 @@ # 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": version "1.0.4" 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" integrity sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA== -"@prisma/client@^3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@prisma/client/-/client-3.9.2.tgz#ad17dcfb702842573fe6ec3b7dc4615eff8d8fc6" - integrity sha512-VlEIYVMyfFZHbVBOlunPl47gmP/Z0zzPjPj8I7uKEIaABqrUy50ru3XS0aZd8GFvevVwt7p91xxkUjNjrWhKAQ== +"@prisma/client@^3.14.0": + version "3.14.0" + resolved "https://registry.yarnpkg.com/@prisma/client/-/client-3.14.0.tgz#bb90405c012fcca11f4647d91153ed4c58f3bd48" + integrity sha512-atb41UpgTR1MCst0VIbiHTMw8lmXnwUvE1KyUCAkq08+wJyjRE78Due+nSf+7uwqQn+fBFYVmoojtinhlLOSaA== dependencies: - "@prisma/engines-version" "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" + "@prisma/engines-version" "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a" -"@prisma/debug@3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@prisma/debug/-/debug-3.8.1.tgz#3c6717d6e0501651709714774ea6d90127c6a2d3" - integrity sha512-ft4VPTYME1UBJ7trfrBuF2w9jX1ipDy786T9fAEskNGb+y26gPDqz5fiEWc2kgHNeVdz/qTI/V3wXILRyEcgxQ== +"@prisma/debug@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@prisma/debug/-/debug-3.13.0.tgz#37e783e46262e637bf27e5d8b2149df09f1dfcc5" + integrity sha512-uzL4ug7pWbiodTSW/WMAJ9SOP/ulxn6EVlV4YTpKaidgPMOLPqSV7iLZP7P4w7q3HGSpWZp+kr2a4nq7+ANEfg== dependencies: "@types/debug" "4.1.7" ms "2.1.3" strip-ansi "6.0.1" -"@prisma/debug@3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@prisma/debug/-/debug-3.9.2.tgz#803e97da04c606e16467daf2b43a17be97204511" - integrity sha512-zi+GYWvhhXXxXffRAaHK0cJO3/nR44kp85+x7OH8YxV6Q7PvSfIhhUClgbbD8x9YaZI/lle0RvN2OC2DN4JV+A== +"@prisma/debug@3.14.0": + version "3.14.0" + resolved "https://registry.yarnpkg.com/@prisma/debug/-/debug-3.14.0.tgz#4bc87b6c5e28e018063799ef01fd03f3e4628030" + integrity sha512-cvA2NRJU6oLCFpYcOJO6jjUZZcPwQqdKYVpa6OY+jFrSwLdYLgSPjrfbnBPOD2z1gzODdnrWYfpz3wPKVhZ0IQ== dependencies: "@types/debug" "4.1.7" ms "2.1.3" strip-ansi "6.0.1" -"@prisma/engine-core@3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@prisma/engine-core/-/engine-core-3.9.2.tgz#5df1ea5c9b59f0fc9938973fe06f28f09d7bc011" - integrity sha512-0Sotko0GhX4vW6lCXXtPHjT7bu60OeQNGUDfP9Vz92gHskct3uIqSyASq2RoLD3cyHlwGFQOdfXybVY6wRTuew== +"@prisma/engine-core@3.14.0": + version "3.14.0" + resolved "https://registry.yarnpkg.com/@prisma/engine-core/-/engine-core-3.14.0.tgz#4ac776ddb81e970a494e61774970bc62e5c09c6a" + integrity sha512-GqXQrGFhuQFX78/UMHXeGglOE+8SqFusSjTgyiiC2whW5Dpu0eVQPTOQ4CgukFkae973PO75HJh27bH4Cw2IWw== dependencies: - "@prisma/debug" "3.9.2" - "@prisma/engines" "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" - "@prisma/generator-helper" "3.9.2" - "@prisma/get-platform" "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" + "@prisma/debug" "3.14.0" + "@prisma/engines" "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a" + "@prisma/generator-helper" "3.14.0" + "@prisma/get-platform" "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a" chalk "4.1.2" execa "5.1.1" get-stream "6.0.1" indent-string "4.0.0" new-github-issue-url "0.2.1" - p-retry "4.6.1" + p-retry "4.6.2" strip-ansi "6.0.1" - terminal-link "2.1.1" - undici "3.3.6" + undici "5.0.0" -"@prisma/engines-version@3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009": - version "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" - resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009.tgz#ea03ffa723382a526dc6625ce6eae9b6ad984400" - integrity sha512-5Dh+qTDhpPR66w6NNAnPs+/W/Qt4r1DSd+qhfPFcDThUK4uxoZKGlPb2IYQn5LL+18aIGnmteDf7BnVMmvBNSQ== +"@prisma/engines-version@3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a": + version "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a" + resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a.tgz#4edae57cf6527f35e22cebe75e49214fc0e99ac9" + integrity sha512-D+yHzq4a2r2Rrd0ZOW/mTZbgDIkUkD8ofKgusEI1xPiZz60Daks+UM7Me2ty5FzH3p/TgyhBpRrfIHx+ha20RQ== -"@prisma/engines@3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009": - version "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" - resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009.tgz#e5c345cdedb7be83d11c1e0c5ab61d866b411256" - integrity sha512-qM+uJbkelB21bnK44gYE049YTHIjHysOuj0mj5U2gDGyNLfmiazlggzFPCgEjgme4U5YB2tYs6Z5Hq08Kl8pjA== +"@prisma/engines@3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a": + version "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a" + resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a.tgz#7fa11bc26a51d450185c816cc0ab8cac673fb4bf" + integrity sha512-LwZvI3FY6f43xFjQNRuE10JM5R8vJzFTSmbV9X0Wuhv9kscLkjRlZt0BEoiHmO+2HA3B3xxbMfB5du7ZoSFXGg== -"@prisma/fetch-engine@3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009": - version "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" - resolved "https://registry.yarnpkg.com/@prisma/fetch-engine/-/fetch-engine-3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009.tgz#2af1af953df5d404450238c5b1b38b880ffe4f31" - integrity sha512-uQTNaX+IVUx1E4HeqTEKPemnHKScl2MXAa64jQRa7e13lTXFm5q5fIkEf0gk9907e3TTYeXmbYuwI1MAPC1h6w== +"@prisma/fetch-engine@3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a": + version "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a" + resolved "https://registry.yarnpkg.com/@prisma/fetch-engine/-/fetch-engine-3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a.tgz#764deae6ead869d69d0825c12221da02fa15cb42" + integrity sha512-biB8habC1IrxJc9xhOeS0Rkr4JmyTlRZ+5I8zdH/5F78nZmYzsFdT/KEAA4Wnc1U01Vou5mfJCFrLN+c3+gJXg== dependencies: - "@prisma/debug" "3.8.1" - "@prisma/get-platform" "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" + "@prisma/debug" "3.13.0" + "@prisma/get-platform" "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a" chalk "4.1.2" execa "5.1.1" find-cache-dir "3.3.2" hasha "5.2.2" http-proxy-agent "5.0.0" - https-proxy-agent "5.0.0" + https-proxy-agent "5.0.1" make-dir "3.1.0" node-fetch "2.6.7" p-filter "2.1.0" p-map "4.0.0" - p-retry "4.6.1" + p-retry "4.6.2" progress "2.0.3" rimraf "3.0.2" temp-dir "2.0.0" tempy "1.0.1" -"@prisma/generator-helper@3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@prisma/generator-helper/-/generator-helper-3.9.2.tgz#5d272f81ef1bc713b8692bdd05ba603a1185b485" - integrity sha512-hKVPNeOq4Opznpup2Nn0/nKzEcvHRsPd6Q3hQcmx2y/Yuoq+Gc4GPPjpRBbslFjkty02DjzO9dx+uJFsZZcXCg== +"@prisma/generator-helper@3.14.0": + version "3.14.0" + resolved "https://registry.yarnpkg.com/@prisma/generator-helper/-/generator-helper-3.14.0.tgz#d0eb3b6c0d72c35da1644e134ef953059d3208d7" + integrity sha512-WuYhXMOr2rJ+A0D93QLoKJvu7FlHORPZz/72LwZlJT2GXQi2WNtS2xKJzgCI+Auc0JlLjijV5/7mDrUa4iHUbw== dependencies: - "@prisma/debug" "3.9.2" + "@prisma/debug" "3.14.0" "@types/cross-spawn" "6.0.2" chalk "4.1.2" cross-spawn "7.0.3" -"@prisma/get-platform@3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009": - version "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" - resolved "https://registry.yarnpkg.com/@prisma/get-platform/-/get-platform-3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009.tgz#ad658ce677f45f527a923d5396fd634f30887aa9" - integrity sha512-3PEg63hG25uDsxYwSnJ+V6P7Gyer+tPVt6HtpZlCJWC/giE2V/xyI6omoT9p5NXwe3kO0p6u4txOHnk/9DTpWQ== +"@prisma/get-platform@3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a": + version "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a" + resolved "https://registry.yarnpkg.com/@prisma/get-platform/-/get-platform-3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a.tgz#239d2f9a62c60ade4924562059c511b721a69d48" + integrity sha512-jblBbReog/f+iIJb1PYAObHpJHdbjXhgHTOnyEPJ8wGl0rMHiwQKGd0ok+vc/da1WfWnDZYxUunuXCqDOtle+A== dependencies: - "@prisma/debug" "3.8.1" + "@prisma/debug" "3.13.0" -"@prisma/migrate@^3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@prisma/migrate/-/migrate-3.9.2.tgz#591097ea0cf5fe150cad61a53d756c8bfa3f7ed2" - integrity sha512-7zRgoFMzJrlQ2yZeNpe2mOydmzt1C00puZjJXOgSXnaUJeJq3ZFpv0P6Z7wc/wa7B7cYBonf6GTwXpYNUbl1UQ== +"@prisma/migrate@^3.14.0": + version "3.14.0" + resolved "https://registry.yarnpkg.com/@prisma/migrate/-/migrate-3.14.0.tgz#8b81924c04c6ca2765c912ee26b85735c7907345" + integrity sha512-fDYPcYDGSSBpy/dK8RUmKsaW5l9XLKcTf5fe6YPXMWggFXRaBZFUlUCxJHAoysdoEArHzxZmft6Qdp13Gw6U7w== dependencies: - "@prisma/debug" "3.9.2" - "@prisma/get-platform" "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" + "@prisma/debug" "3.14.0" + "@prisma/get-platform" "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a" "@sindresorhus/slugify" "1.1.2" chalk "4.1.2" execa "5.1.1" @@ -720,34 +724,33 @@ has-yarn "2.1.0" indent-string "4.0.0" log-update "4.0.0" - mariadb "2.5.5" - mssql "8.0.1" - new-github-issue-url "0.2.1" - open "7.4.2" - pg "8.7.1" + mariadb "3.0.0" + mssql "8.1.0" + pg "8.7.3" pkg-up "3.1.0" prompts "2.4.2" strip-ansi "6.0.1" strip-indent "3.0.0" + ts-pattern "^4.0.1" -"@prisma/sdk@^3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@prisma/sdk/-/sdk-3.9.2.tgz#fefbce53faf409e2be6805c5ab5f0186a2565039" - integrity sha512-o3gs51vFX7qSYKInWBAcO99qVowTntjSySPF8JjoBViNkKKugUoVjLu2ylFlomJRFmNvZmv9K2DdS977kL5Tiw== +"@prisma/sdk@^3.14.0": + version "3.14.0" + resolved "https://registry.yarnpkg.com/@prisma/sdk/-/sdk-3.14.0.tgz#db3cdee76ec7c351e806da6edda307a45cbf2cfc" + integrity sha512-q/4hAQjwW6iAXBmjhcUtwCmnSRu8x3bmpTzZltl/R0wfqjm7GVmKMY3j9XlIj9fzdBHfOKgj9FoNYQx/HBRsHQ== dependencies: - "@prisma/debug" "3.9.2" - "@prisma/engine-core" "3.9.2" - "@prisma/engines" "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" - "@prisma/fetch-engine" "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" - "@prisma/generator-helper" "3.9.2" - "@prisma/get-platform" "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" + "@prisma/debug" "3.14.0" + "@prisma/engine-core" "3.14.0" + "@prisma/engines" "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a" + "@prisma/fetch-engine" "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a" + "@prisma/generator-helper" "3.14.0" + "@prisma/get-platform" "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a" "@timsuchanek/copy" "1.4.5" - archiver "5.3.0" + archiver "5.3.1" arg "5.0.1" chalk "4.1.2" - checkpoint-client "1.1.20" + checkpoint-client "1.1.21" cli-truncate "2.1.0" - dotenv "15.0.0" + dotenv "16.0.0" escape-string-regexp "4.0.0" execa "5.1.1" find-up "5.0.0" @@ -757,8 +760,12 @@ has-yarn "2.1.0" is-ci "3.0.1" make-dir "3.1.0" + new-github-issue-url "0.2.1" node-fetch "2.6.7" + open "7" + ora "5.4.1" p-map "4.0.0" + prompts "2.4.2" read-pkg-up "7.0.1" replace-string "3.1.0" resolve "1.22.0" @@ -773,6 +780,7 @@ tempy "1.0.1" terminal-link "2.1.1" tmp "0.2.1" + ts-pattern "^4.0.1" "@radix-ui/number@0.1.0": version "0.1.0" @@ -998,7 +1006,7 @@ "@types/qs" "*" "@types/serve-static" "*" -"@types/geojson@^7946.0.7": +"@types/geojson@^7946.0.8": version "7946.0.8" resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.8.tgz#30744afdb385e2945e22f3b033f897f76b1f12ca" integrity sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA== @@ -1051,15 +1059,15 @@ resolved "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz" integrity sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww== -"@types/node@^14.14.28": - version "14.18.12" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.12.tgz#0d4557fd3b94497d793efd4e7d92df2f83b4ef24" - integrity sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A== +"@types/node@^17.0.10": + version "17.0.39" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.39.tgz#3652d82e2a16b4ea679d5ea3143b816c91b7e113" + integrity sha512-JDU3YLlnPK3WDao6/DlXLOgSNpG13ct+CwIO17V8q0/9fWJyeMJJ/VyZ1lv8kDprihvZMydzVwf0tQOqGiY2Nw== "@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + version "2.4.1" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== "@types/parse-json@^4.0.0": version "4.0.0" @@ -1100,10 +1108,10 @@ "@types/scheduler" "*" csstype "^3.0.2" -"@types/retry@^0.12.0": - version "0.12.1" - resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.1.tgz#d8f1c0d0dc23afad6dc16a9e993a0865774b4065" - integrity sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g== +"@types/retry@0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== "@types/scheduler@*": version "0.16.1" @@ -1291,13 +1299,13 @@ archiver-utils@^2.1.0: normalize-path "^3.0.0" readable-stream "^2.0.0" -archiver@5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.0.tgz#dd3e097624481741df626267564f7dd8640a45ba" - integrity sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg== +archiver@5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.1.tgz#21e92811d6f09ecfce649fbefefe8c79e57cbbb6" + integrity sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w== dependencies: archiver-utils "^2.1.0" - async "^3.2.0" + async "^3.2.3" buffer-crc32 "^0.2.1" readable-stream "^3.6.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" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async@^3.2.0: +async@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9" 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" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -bl@^4.0.3: +bl@^4.0.3, bl@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== @@ -1492,7 +1500,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^3.0.1: +braces@^3.0.1, braces@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" 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" integrity sha512-mleTFtFKfykEeW34EyfhGIFjGCqzhh38Y0LhdQ9aWF+HorZTtdgKV/1hEE0NlFkG2ubvisPV6l400tlbPys98A== -chalk@4.1.2: +chalk@4.1.2, chalk@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -1600,17 +1608,17 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -checkpoint-client@1.1.20: - version "1.1.20" - resolved "https://registry.yarnpkg.com/checkpoint-client/-/checkpoint-client-1.1.20.tgz#c869eeba84130ea3e5660b1fd71440981b5df8f5" - integrity sha512-AHDELBFMXBV9Rzp4JaN0JR03YQomZpaaVFDjgH7Ue4CcPuzNV2dZ94ZORJ9OoQsASYca/uR7UNGXmeNuWHc+IQ== +checkpoint-client@1.1.21: + version "1.1.21" + resolved "https://registry.yarnpkg.com/checkpoint-client/-/checkpoint-client-1.1.21.tgz#47751b82748088b42d8baa2108d6219c6bc9ff59" + integrity sha512-bcrcnJncn6uGhj06IIsWvUBPyJWK1ZezDbLCJ//IQEYXkUobhGvOOBlHe9K5x0ZMkAZGinPB4T+lTUmFz/acWQ== dependencies: - ci-info "3.1.1" + ci-info "3.3.0" env-paths "2.2.1" fast-write-atomic "0.2.1" make-dir "3.1.0" ms "2.1.3" - node-fetch "2.6.1" + node-fetch "2.6.7" uuid "8.3.2" chownr@^2.0.0: @@ -1618,12 +1626,7 @@ chownr@^2.0.0: resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== -ci-info@3.1.1: - 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: +ci-info@3.3.0, ci-info@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== @@ -1640,6 +1643,11 @@ cli-cursor@^3.1.0: dependencies: 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: version "2.1.0" 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" 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: version "1.1.1" 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" 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: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -1768,12 +1786,9 @@ cosmiconfig@^6.0.0: yaml "^1.7.2" crc-32@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.1.tgz#436d2bcaad27bcb6bd073a2587139d3024a16460" - integrity sha512-Dn/xm/1vFFgs3nfrpEVScHoIslO9NZRITWGz/1E/St6u4xw99vfZzVkW0OSnzx2h9egej9xwMCEut6sqwokM/w== - dependencies: - exit-on-epipe "~1.0.1" - printj "~1.3.1" + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== crc32-stream@^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" 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: version "2.0.0" 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" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= -denque@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.1.tgz#07f670e29c9a78f8faecb2566a1e2c11929c5cbf" - integrity sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw== +denque@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/denque/-/denque-2.0.1.tgz#bcef4c1b80dc32efe97515744f21a4229ab8934a" + integrity sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ== detect-libc@^1.0.3: version "1.0.3" @@ -1979,10 +2001,10 @@ domutils@^2.8.0: domelementtype "^2.2.0" domhandler "^4.2.0" -dotenv@15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-15.0.0.tgz#2a585639429bf2c2c62f387f0fffde9c75aafde0" - integrity sha512-/l1sXXm79ry34KwwS0y4oVZjB468iw/6u9g1W26dtexKcIJAnVL2pMF+hxQwzZ7LutxOwEgtym9eIxvX33CMKg== +dotenv@16.0.0: + version "16.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.0.tgz#c619001253be89ebb638d027b609c75c26e47411" + integrity sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q== duplexer2@^0.1.2: version "0.1.4" @@ -2445,11 +2467,6 @@ execa@5.1.1: signal-exit "^3.0.3" 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: version "1.0.1" 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" 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: version "6.0.1" 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: 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== dependencies: locate-path "^6.0.0" @@ -2579,7 +2601,7 @@ find-up@^3.0.0: find-up@^4.0.0, find-up@^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== dependencies: locate-path "^5.0.0" @@ -2758,12 +2780,12 @@ globby@^11.0.3: merge2 "^1.3.0" slash "^3.0.0" -graceful-fs@^4.1.15, graceful-fs@^4.2.4: - version "4.2.9" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" - integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== +graceful-fs@^4.1.15, graceful-fs@^4.2.0, graceful-fs@^4.2.4: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -graceful-fs@^4.1.2, graceful-fs@^4.2.0: +graceful-fs@^4.1.2: version "4.2.6" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== @@ -2882,7 +2904,15 @@ http-proxy-agent@^4.0.1: agent-base "6" 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" resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz" integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== @@ -3064,6 +3094,11 @@ is-glob@^4.0.0, is-glob@^4.0.1: dependencies: 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: version "2.0.1" 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: 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: version "2.2.0" 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: 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== dependencies: p-locate "^4.1.0" locate-path@^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== dependencies: p-locate "^5.0.0" @@ -3411,6 +3451,14 @@ lodash@^4.17.20: resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" 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: version "4.0.0" 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" 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: version "1.4.0" 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" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -mariadb@2.5.5: - version "2.5.5" - resolved "https://registry.yarnpkg.com/mariadb/-/mariadb-2.5.5.tgz#a9aff9f1e57231a415a21254489439beb501c803" - integrity sha512-6dklvcKWuuaV1JjAwnE2ezR+jTt7JrZHftgeHHBmjB0wgfaUpdxol1DPWclwMcCrsO9yoM0FuCOiCcCgXc//9Q== +mariadb@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mariadb/-/mariadb-3.0.0.tgz#0738b14036be097991172b22c0ce1d43e261c014" + integrity sha512-1uIqD6AWLP5ojMY67XP4+4uRLe9L92HD1ZGU8fidi8cGdYIC+Ghx1JliAtf7lc/tGjOh6J400f/1M4BXVtZFvA== dependencies: - "@types/geojson" "^7946.0.7" - "@types/node" "^14.14.28" - denque "^1.5.0" + "@alloc/quick-lru" "^5.2.0" + "@types/geojson" "^7946.0.8" + "@types/node" "^17.0.10" + denque "^2.0.1" iconv-lite "^0.6.3" - long "^4.0.0" - moment-timezone "^0.5.33" + moment-timezone "^0.5.34" please-upgrade-node "^3.2.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" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^4.0.2, micromatch@^4.0.4: +micromatch@^4.0.2: version "4.0.4" resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz" integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== @@ -3493,6 +3536,14 @@ micromatch@^4.0.2, micromatch@^4.0.4: braces "^3.0.1" 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: version "1.48.0" 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" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -moment-timezone@^0.5.33: +moment-timezone@^0.5.34: version "0.5.34" resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.34.tgz#a75938f7476b88f155d3504a9343f7519d9a405c" 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" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -mssql@8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/mssql/-/mssql-8.0.1.tgz#ee7abdeb35d15ffab07dc149344adb0ad93ea2af" - integrity sha512-GZ1YnfMjfEdiXNRWZeYyTtqHWptUMA5jWrygbqfl72zsCxXsNuLPH9gPxz7m2F6+tWY48hR+ieZ92QY11ILNeg== +mssql@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/mssql/-/mssql-8.1.0.tgz#d660eafdf0fcf529e2c839705b9455d60ccbacf5" + integrity sha512-S7j4MoanTCLM09I+wMI9thTS2342mgxCpOQ9kpnFiG3P1NStuQMhPILLOgOt6hwMa/ctfTUKl7eJpB5XGPoe6A== dependencies: "@tediousjs/connection-string" "^0.3.0" + commander "^9.1.0" debug "^4.3.3" rfdc "^1.3.0" 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" 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: version "2.6.7" 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: 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: version "5.0.0" resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" @@ -3846,7 +3898,7 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -open@7.4.2: +open@7: version "7.4.2" resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== @@ -3880,6 +3932,21 @@ optionator@^0.9.1: type-check "^0.4.0" 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: version "2.1.0" 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: 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== dependencies: yocto-queue "^0.1.0" @@ -3924,14 +3991,14 @@ p-locate@^3.0.0: p-locate@^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== dependencies: p-limit "^2.2.0" p-locate@^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== dependencies: 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" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== -p-retry@4.6.1: - version "4.6.1" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.1.tgz#8fcddd5cdf7a67a0911a9cf2ef0e5df7f602316c" - integrity sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA== +p-retry@4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" + integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== dependencies: - "@types/retry" "^0.12.0" + "@types/retry" "0.12.0" retry "^0.13.1" p-try@^1.0.0: @@ -4003,7 +4070,7 @@ path-exists@^3.0.0: path-exists@^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== 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" integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== -pg-pool@^3.4.1: +pg-pool@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.5.1.tgz#f499ce76f9bf5097488b3b83b19861f28e4ed905" integrity sha512-6iCR0wVrro6OOHFsyavV+i6KYL4lVNyYAB9RD18w66xSzN+d8b66HiwuP30Gp1SH5O9T82fckkzsRjlrhD0ioQ== @@ -4069,15 +4136,15 @@ pg-types@^2.1.0: postgres-date "~1.0.4" postgres-interval "^1.1.0" -pg@8.7.1: - version "8.7.1" - resolved "https://registry.yarnpkg.com/pg/-/pg-8.7.1.tgz#9ea9d1ec225980c36f94e181d009ab9f4ce4c471" - integrity sha512-7bdYcv7V6U3KAtWjpQJJBww0UEsWuh4yQ/EjNf2HeO/NnvKjpvhEIe/A/TleP6wtmSKnUnghs5A9jUoK6iDdkA== +pg@8.7.3: + version "8.7.3" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.7.3.tgz#8a5bdd664ca4fda4db7997ec634c6e5455b27c44" + integrity sha512-HPmH4GH4H3AOprDJOazoIcpI49XFsHCe8xlrjHkWiapdbHK+HLtbm/GQzXYAZwmPju/kzKhjaSfMACG+8cgJcw== dependencies: buffer-writer "2.0.0" packet-reader "1.0.0" pg-connection-string "^2.5.0" - pg-pool "^3.4.1" + pg-pool "^3.5.1" pg-protocol "^1.5.0" pg-types "^2.1.0" 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" 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: version "0.3.1" 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" 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: version "1.3.1" resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.1.tgz#88fc9d0df6bed06ca2b9097421349f8c2f24e30d" integrity sha512-xUeDMEz074d0zc5y6rxiMp/dlC7C+5IDDlaEUlcBOFE2wddz7hz5PNupb087mPwTt7T9BrFmewObfCBuf/LKwQ== -prisma@^3.9.2: - version "3.9.2" - resolved "https://registry.yarnpkg.com/prisma/-/prisma-3.9.2.tgz#cc2da4e8db91231dea7465adf9db6e19f11032a9" - integrity sha512-i9eK6cexV74OgeWaH3+e6S07kvC9jEZTl6BqtBH398nlCU0tck7mE9dicY6YQd+euvMjjCtY89q4NgmaPnUsSg== +prisma@^3.14.0: + version "3.14.0" + resolved "https://registry.yarnpkg.com/prisma/-/prisma-3.14.0.tgz#dd67ece37d7b5373e9fd9588971de0024b49be81" + integrity sha512-l9MOgNCn/paDE+i1K2fp9NZ+Du4trzPTJsGkaQHVBufTGqzoYHuNk8JfzXuIn0Gte6/ZjyKj652Jq/Lc1tp2yw== dependencies: - "@prisma/engines" "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009" + "@prisma/engines" "3.14.0-36.2b0c12756921c891fec4f68d9444e18c7d5d4a6a" process-nextick-args@~2.0.0: version "2.0.1" @@ -4360,7 +4427,7 @@ react@^17.0.2: read-pkg-up@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== dependencies: find-up "^4.1.0" @@ -4386,7 +4453,7 @@ read-pkg@^3.0.0: read-pkg@^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== dependencies: "@types/normalize-package-data" "^2.4.0" @@ -5168,6 +5235,11 @@ ts-node@^10.0.0: source-map-support "^0.5.17" 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: version "3.9.0" 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: 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== type-fest@^0.8.0, type-fest@^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== type-is@^1.6.4: @@ -5265,10 +5337,10 @@ unbox-primitive@^1.0.1: has-symbols "^1.0.2" which-boxed-primitive "^1.0.2" -undici@3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/undici/-/undici-3.3.6.tgz#06d3b97b7eeff46bce6f8a71079c09f64dd59dc1" - integrity sha512-/j3YTZ5AobMB4ZrTY72mzM54uFUX32v0R/JRW9G2vOyF1uSKYAx+WT8dMsAcRS13TOFISv094TxIyWYk+WEPsA== +undici@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.0.0.tgz#3c1e08c7f0df90c485d5d8dbb0517e11e34f2090" + integrity sha512-VhUpiZ3No1DOPPQVQnsDZyfcbTTcHdcgWej1PdFnSvOeJmOVDgiOHkunJmBLfmjt4CqgPQddPVjSWW0dsTs5Yg== unique-string@^2.0.0: version "2.0.0" @@ -5361,6 +5433,13 @@ warning@^4.0.2: dependencies: 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: version "3.0.1" 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: 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== yup@^0.32.9: