diff --git a/.gitignore b/.gitignore index ffb384e..6915ed5 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,5 @@ yarn-error.log* .vercel .vs/ +.idea/ +*.sqlite diff --git a/README.md b/README.md index b12f3e3..0a22253 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ You can start editing the page by modifying `pages/index.js`. The page auto-upda [API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.js`. -The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. +The `pages/api` directory is mapped to `/sdfapi/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. ## Learn More diff --git a/package.json b/package.json index c955729..17f21c8 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "scripts": { "dev": "next dev", "build": "next build", - "start": "next start" + "start": "next start", + "migrate": "node ./scripts/migrate.js" }, "dependencies": { "@auth0/nextjs-auth0": "^1.3.0", @@ -14,12 +15,18 @@ "react": "17.0.2", "react-dom": "17.0.2", "react-feather": "^2.0.9", - "styled-components": "^5.2.3" + "react-hook-form": "^7.0.4", + "sqlite3": "^5.0.2", + "styled-components": "^5.2.3", + "uuid": "^8.3.2" }, "devDependencies": { "@types/node": "^14.14.37", "@types/react": "^17.0.3", + "@types/sqlite3": "^3.1.7", "@types/styled-components": "^5.1.9", + "@types/uuid": "^8.3.0", + "dotenv": "^8.2.0", "typescript": "^4.2.3" } } diff --git a/scripts/migrate.js b/scripts/migrate.js new file mode 100644 index 0000000..7a60de8 --- /dev/null +++ b/scripts/migrate.js @@ -0,0 +1,46 @@ +const dotenv = require('dotenv') +const SQLite = require('sqlite3') + +dotenv.config() + +const sqlite = SQLite.verbose() + +const db = new sqlite.Database(process.env.DATABASE_PATH) + +db.serialize(() => { + db.run(` + CREATE TABLE IF NOT EXISTS items ( + id CHARACTER(32) PRIMARY KEY, + name VARCHAR(256) NOT NULL, + url VARCHAR(256) NOT NULL, + folder_id CHARACTER(32) NOT NULL, + created_at DATETIME NOT NULL, + updated_at DATETIME NOT NULL, + deleted_at DATETIME + ) + `) + + db.run(` + CREATE TABLE IF NOT EXISTS folders ( + id CHARACTER(32) PRIMARY KEY, + name VARCHAR(256) NOT NULL, + parent_id CHARACTER(32), + created_at DATETIME NOT NULL, + updated_at DATETIME NOT NULL, + deleted_at DATETIME + ) + `) + + db.run(` + CREATE TABLE IF NOT EXISTS users ( + id CHARACTER(32) PRIMARY KEY, + name VARCHAR(256) NOT NULL, + root_folder_id CHARACTER(32) NOT NULL, + created_at DATETIME NOT NULL, + updated_at DATETIME NOT NULL, + deleted_at DATETIME + ) + `) +}) + +db.close() diff --git a/src/components/molecules/TextInput/index.tsx b/src/components/molecules/TextInput/index.tsx index 2c12aad..af2f95d 100644 --- a/src/components/molecules/TextInput/index.tsx +++ b/src/components/molecules/TextInput/index.tsx @@ -1,3 +1,4 @@ +import * as React from 'react' import styled from 'styled-components' const Base = styled('input')({ @@ -12,10 +13,17 @@ const Base = styled('input')({ cursor: 'pointer', }) -const TextInput = (props) => { +type Props = { + name: string, +} + +const TextInput = React.forwardRef((props, ref) => { return ( - + ) -} +}) export default TextInput diff --git a/src/components/templates/Folder/index.tsx b/src/components/templates/Folder/index.tsx index d4128c3..66b38e7 100644 --- a/src/components/templates/Folder/index.tsx +++ b/src/components/templates/Folder/index.tsx @@ -1,10 +1,15 @@ -import Head from 'next/head' -import Link from 'next/link' -import styled, { createGlobalStyle } from 'styled-components' -import { Folder, Settings, Trash2 } from 'react-feather' -import Button from '../../molecules/Button' -import TopBar from '../../organisms/widgets/TopBar' -import FolderItem from '../../organisms/tree/FolderItem' +import Head from 'next/head'; +import Link from 'next/link'; +import styled, {createGlobalStyle} from 'styled-components'; +import {Folder, Settings, Trash2} from 'react-feather'; +import Button from '../../molecules/Button'; +import TopBar from '../../organisms/widgets/TopBar'; +import FolderItem from '../../organisms/tree/FolderItem'; +import FolderViewMode from '../../../models/FolderViewMode'; +import TextInput from '../../molecules/TextInput'; +import {forClientSideState, Form} from '../../../utilities/handler'; +import Method from '../../../utilities/handler/Method'; +import {useRouter} from 'next/router'; const Variables = createGlobalStyle({ ':root': { @@ -71,22 +76,22 @@ const SidebarContents = styled('div')({ position: 'relative', }) -const Tree = styled('div')({ +const FolderListWrapper = styled('div')({ width: '100%', height: '100%', overflow: 'auto', }) -const TreeParent = styled('ul')({ +const FolderList = styled('ul')({ margin: 0, padding: 0, }) -const TreeChild = styled('li')({ +const FolderListItem = styled('li')({ display: 'block', }) -const TreeActions = styled('div')({ +const FolderActions = styled('div')({ position: 'sticky', display: 'flex', justifyContent: 'flex-end', @@ -100,17 +105,15 @@ const TreeActions = styled('div')({ boxSizing: 'border-box', }) -const TreeLink = styled('a')({ +const FolderLink = styled('a')({ display: 'inline-flex', + minWidth: '100%', verticalAlign: 'top', - height: '2rem', + height: '3rem', alignItems: 'center', whiteSpace: 'nowrap', padding: '0 1rem', boxSizing: 'border-box', - [`+ ${TreeParent}`]: { - paddingLeft: '1.5rem', - }, }) const FolderGrid = styled('div')({ @@ -142,30 +145,39 @@ const Header = styled('div')({ backgroundColor: 'var(--color-bg, white)', }) -const renderChild = c => ( - - - {c.name} - - - {c.children.map(renderChild)} - - -) +const FolderIdInput = styled('input')({ + fontFamily: 'monospace', + fontSize: '0.875rem', + display: 'block', + width: '20em', + border: 0, + backgroundColor: 'transparent', + color: 'inherit', + padding: 0, + margin: 0, + outline: 0, +}) + +const FolderIdBox = styled('span')({ + display: 'inline-block', + verticalAlign: 'middle', +}) const FolderTemplate = ({ - path = [], - query = '', - id = '', + query, children, items = [], + mode, + hierarchy, }) => { + const router = useRouter() + const [currentFolder] = hierarchy.slice(-1) return ( <> - { Array.isArray(path) && path.length > 0 ? `${path.slice(-1)[0]} | Bruhbot` : 'Bruhbot' } + + {currentFolder.name} | Bruhbot + @@ -217,16 +229,69 @@ const FolderTemplate = ({ - - - - - - {children.map(renderChild)} - - + + +
{ + + })} + > + {( + + )} +
+
+ { + mode === FolderViewMode.NEW_FOLDER + && ( + +
+ + + + +
+ ) + } + + {children.map(c => ( + + + + {c.name} + + + + ))} + +
@@ -234,9 +299,33 @@ const FolderTemplate = ({
- Folder ID: {id} + {hierarchy.map(h => ( + <> + {'/ '} + + + {h.name} + + + {' '} + + ))}
+ + Folder ID + + @@ -244,22 +333,37 @@ const FolderTemplate = ({
- - { - items.map(i => ( - - - - - - )) - } - + { + Array.isArray(items) + && items.length < 1 + && ( + <> + This folder is empty. + + ) + } + { + Array.isArray(items) + && items.length > 0 + && ( + + { + items.map(i => ( + + + + + + )) + } + + ) + } diff --git a/src/domains/Folder/presenter.ts b/src/domains/Folder/presenter.ts new file mode 100644 index 0000000..92b5841 --- /dev/null +++ b/src/domains/Folder/presenter.ts @@ -0,0 +1,143 @@ +import FolderViewMode from '../../models/FolderViewMode' +import Folder from '../../models/Folder' +import FolderService from './service' +import Item from '../../models/Item' +import {_} from '../../utilities/messages' + +export default class FolderPresenter { + private readonly folderService = new FolderService() + + private async getCommonProps(folderId: string) { + return Promise.all([ + this.folderService.getHierarchy(folderId), + this.folderService.getChildren(folderId), + this.folderService.getItems(folderId), + ]) + } + + async getRootFolderViewState({ session, query, mode, }) { + // TODO make this authentication checking more like a middleware. + if (!session) { + return { + redirect: { + url: new URL('/', process.env.BASE_URL) + }, + } + } + + const folderId = session.user.rootFolder.id + const [hierarchy, children, items] = await this.getCommonProps(folderId) + return { + body: { + data: { + query, + mode, + items: items.map(Item.formatForView), + children: children.map(c => Folder.formatForView(c)), + hierarchy: hierarchy.map(h => Folder.formatForView(h)), + }, + }, + } + } + + async getDescendantFolderViewState({ session, query, mode, id, }) { + // TODO make this authentication checking more like a middleware. + if (!session) { + return { + redirect: { + url: new URL('/', process.env.BASE_URL) + }, + } + } + + const folderId = id as string + const [hierarchy, children, items] = await this.getCommonProps(folderId) + return { + body: { + data: { + query, + mode, + items: items.map(Item.formatForView), + children: children.map(Folder.formatForView), + hierarchy: hierarchy.map(Folder.formatForView), + }, + }, + } + } + + async getFolder({ id }) { + try { + const data = await this.folderService.get(id) + // TODO compute owner of folder by getting the root folder + if (data) { + return { + status: 200, + title: _('FOLDER_FOUND_TITLE'), + body: { + description: _('FOLDER_FOUND_DESCRIPTION'), + data, + }, + } + } + return { + status: 404, + title: _('FOLDER_NOT_FOUND_TITLE'), + body: { + description: _('FOLDER_NOT_FOUND_DESCRIPTION'), + }, + } + } catch { + return { + status: 500, + title: _('ERROR_RETRIEVING_FOLDER_TITLE'), + body: { + description: _('ERROR_RETRIEVING_FOLDER_DESCRIPTION'), + }, + } + } + } + + async createFolder({ name, parentId, origin = null }) { + try { + const newFolder = await this.folderService.create(name, parentId) + return { + status: 201, + title: _('FOLDER_CREATED_TITLE'), + body: { + description: _('FOLDER_CREATED_DESCRIPTION'), + data: newFolder, + }, + redirect: { + url: new URL(`/my/folders/${newFolder.id}`, process.env.BASE_URL), + }, + } + } catch { + return { + status: 500, + title: _('ERROR_CREATING_FOLDER_TITLE'), + body: { + description: _('ERROR_CREATING_FOLDER_DESCRIPTION'), + }, + redirect: { + url: new URL(origin), + }, + } + } + } + + generateRedirectToCreateFolder({ sourceURL, }) { + const url = sourceURL ? new URL(sourceURL) : new URL('/my/folders', process.env.BASE_URL) + const search = Object.fromEntries(url.searchParams.entries()) + + url.search = new URLSearchParams({ + ...search, + 'mode': FolderViewMode.NEW_FOLDER, + }).toString() + + return { + redirect: { + url + } + } + } +} diff --git a/src/domains/Folder/service.ts b/src/domains/Folder/service.ts new file mode 100644 index 0000000..9c303eb --- /dev/null +++ b/src/domains/Folder/service.ts @@ -0,0 +1,106 @@ +import { Database } from 'sqlite3' +import { v4 } from 'uuid' +import Folder from '../../models/Folder' +import Item from '../../models/Item' + +export default class FolderService { + private readonly db = new Database(process.env.DATABASE_PATH) + + async getChildren(id: string): Promise { + return new Promise((resolve, reject) => { + const statement = this.db.prepare(` + SELECT * + FROM folders + WHERE parent_id = (?) + `) + + statement.all(id, (err, rows) => { + if (err) { + reject(err) + return + } + resolve(rows.map(row => Folder.resolve(row))) + }) + }) + } + + async get(id: string): Promise { + return new Promise((resolve, reject) => { + const statement = this.db.prepare(` + SELECT * + FROM folders + WHERE id = (?) + `) + + statement.get(id, (err, row) => { + if (err) { + reject(err) + return + } + if (row) { + resolve(Folder.resolve(row)) + return + } + resolve(null) + }) + }) + } + + async create(name: string, parentId?: string): Promise { + return new Promise((resolve, reject) => { + const id = v4() + const statement = this.db.prepare(` + INSERT INTO folders (id, name, parent_id, created_at, updated_at, deleted_at) VALUES (?, ?, ?, ?, ?, NULL) + `) + + const now = new Date() + const createdAt = now.toISOString() + const updatedAt = now.toISOString() + statement.run(id, name, parentId, createdAt, updatedAt, async (err) => { + if (err) { + reject(err) + return + } + + resolve(Folder.resolve({ + 'id': id, + 'name': name, + 'parent_id': parentId || null, + 'created_at': createdAt, + 'updated_at': updatedAt, + 'deleted_at': null, + })) + }) + }) + } + + async getItems(id: string): Promise { + return new Promise((resolve, reject) => { + const statement = this.db.prepare(` + SELECT * + FROM items + WHERE folder_id = (?) + `) + + statement.all(id, (err, rows) => { + if (err) { + reject(err) + return + } + resolve(rows.map(item => Item.resolve(item))) + }) + }) + } + + async getHierarchy(id: string): Promise { + let currentId: string = id as string + const hierarchy: Folder[] = [] + let selectedFolder: Folder + while (currentId !== null) { + selectedFolder = await this.get(currentId) + hierarchy.unshift(selectedFolder) + currentId = selectedFolder.parent?.id || null + } + return hierarchy + } +} diff --git a/src/domains/User/service.ts b/src/domains/User/service.ts new file mode 100644 index 0000000..613d84a --- /dev/null +++ b/src/domains/User/service.ts @@ -0,0 +1,67 @@ +import { Database } from 'sqlite3' +import User from '../../models/User' +import {v4} from 'uuid' +import FolderService from '../Folder/service' + +export default class UserService { + private readonly db = new Database(process.env.DATABASE_PATH) + private readonly folderService = new FolderService() + + async getByUsername(username: string): Promise { + return new Promise((resolve, reject) => { + const statement = this.db.prepare(` + SELECT * + FROM users + WHERE name = (?) + `) + + statement.get(username, (err, result) => { + if (err) { + reject(err) + return + } + if (result) { + resolve(User.resolve(result)) + return + } + resolve(null) + }) + }) + } + + async createUser(username: string): Promise { + const now = new Date() + const userFolder = await this.folderService.create(username) + return new Promise((resolve, reject) => { + const userId = v4() + const userStatement = this.db.prepare(` + INSERT INTO users ( + id, + name, + root_folder_id, + created_at, + updated_at, + deleted_at + ) VALUES (?, ?, ?, ?, ?, NULL) + `) + + const createdAt = now.toISOString() + const updatedAt = now.toISOString() + const rootFolderId = userFolder.id + userStatement.run(userId, username, rootFolderId, createdAt, updatedAt, (err) => { + if (err) { + reject(err) + return + } + resolve(User.resolve({ + 'id': userId, + 'name': username, + 'root_folder_id': rootFolderId, + 'created_at': now, + 'updated_at': now, + 'deleted_at': null, + })) + }) + }) + } +} diff --git a/src/messages/en/PH.json b/src/messages/en/PH.json new file mode 100644 index 0000000..15dd83a --- /dev/null +++ b/src/messages/en/PH.json @@ -0,0 +1,12 @@ +{ + "FOLDER_FOUND_TITLE": "Folder Found", + "FOLDER_FOUND_DESCRIPTION": "Folder retrieved successfully.", + "FOLDER_NOT_FOUND_TITLE": "Folder Not Found", + "FOLDER_NOT_FOUND_DESCRIPTION": "The folder does not exist.", + "ERROR_RETRIEVING_FOLDER_TITLE": "Error Retrieving Folder", + "ERROR_RETRIEVING_FOLDER_DESCRIPTION": "The folder was not retrieved due to an internal error.", + "FOLDER_CREATED_TITLE": "Folder Created", + "FOLDER_CREATED_DESCRIPTION": "Folder created successfully.", + "ERROR_CREATING_FOLDER_TITLE": "Error Creating Folder", + "ERROR_CREATING_FOLDER_DESCRIPTION": "The folder was not created." +} diff --git a/src/messages/index.ts b/src/messages/index.ts new file mode 100644 index 0000000..b34c54e --- /dev/null +++ b/src/messages/index.ts @@ -0,0 +1,5 @@ +import { registerLocale, setLocale } from '../utilities/messages' +import enPH from './en/PH.json' + +registerLocale('en-PH', enPH) +setLocale('en-PH') diff --git a/src/models/Folder.ts b/src/models/Folder.ts new file mode 100644 index 0000000..ffa62ee --- /dev/null +++ b/src/models/Folder.ts @@ -0,0 +1,28 @@ +export default class Folder { + id?: string + name: string + parent?: Folder + createdAt: Date + updatedAt: Date + deletedAt?: Date + + static resolve(data: Record): Folder { + return { + id: data['id'] as string, + name: data['name'] as string, + parent: data['parent_id'] ? { id: data['parent_id'] } as Folder : null, + createdAt: new Date(data['created_at'] as string), + updatedAt: new Date(data['updated_at'] as string), + deletedAt: data['deleted_at'] ? new Date(data['deleted_at'] as string) : null, + } + } + + static formatForView(folder: Folder) { + return { + ...folder, + createdAt: folder.createdAt.toISOString(), + updatedAt: folder.updatedAt.toISOString(), + deletedAt: folder.deletedAt?.toISOString() || null, + } + } +} diff --git a/src/models/FolderViewMode.ts b/src/models/FolderViewMode.ts new file mode 100644 index 0000000..439e5eb --- /dev/null +++ b/src/models/FolderViewMode.ts @@ -0,0 +1,7 @@ +enum FolderViewMode { + DEFAULT = '', + NEW_FOLDER = 'new_folder', + DELETE_FOLDER = 'delete_folder', +} + +export default FolderViewMode diff --git a/src/models/Item.ts b/src/models/Item.ts new file mode 100644 index 0000000..abe7019 --- /dev/null +++ b/src/models/Item.ts @@ -0,0 +1,32 @@ +import Folder from './Folder' + +export default class Item { + id?: string + name: string + url: string + folder: Folder + createdAt: Date + updatedAt: Date + deletedAt?: Date + + static resolve(data: Record): Item { + return { + id: data['id'] as string, + name: data['name'] as string, + url: data['url'] as string, + folder: { id: data['root_folder_id'] } as Folder, + createdAt: new Date(data['created_at'] as string), + updatedAt: new Date(data['updated_at'] as string), + deletedAt: data['deleted_at'] ? new Date(data['deleted_at'] as string) : null, + } + } + + static formatForView(item: Item) { + return { + ...item, + createdAt: item.createdAt.toISOString(), + updatedAt: item.updatedAt.toISOString(), + deletedAt: item.deletedAt?.toISOString() || null, + } + } +} diff --git a/src/models/User.ts b/src/models/User.ts new file mode 100644 index 0000000..b04bc6b --- /dev/null +++ b/src/models/User.ts @@ -0,0 +1,21 @@ +import Folder from './Folder' + +export default class User { + id?: string + name: string + rootFolder: Folder + createdAt: Date + updatedAt: Date + deletedAt?: Date + + static resolve(data: Record): User { + return { + id: data['id'] as string, + name: data['name'] as string, + rootFolder: { id: data['root_folder_id'] } as Folder, + createdAt: new Date(data['created_at'] as string), + updatedAt: new Date(data['updated_at'] as string), + deletedAt: data['deleted_at'] ? new Date(data['deleted_at'] as string) : null, + } + } +} diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index e78bda1..b187409 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -1,12 +1,14 @@ import * as React from 'react' import { UserProvider } from '@auth0/nextjs-auth0' - +import '../messages' import '../styles/globals.css' -export default function App({ Component, pageProps }) { +const App = ({ Component, pageProps }) => { return ( ); } + +export default App diff --git a/src/pages/api/a/auth/callback.ts b/src/pages/api/a/auth/callback.ts new file mode 100644 index 0000000..b95c661 --- /dev/null +++ b/src/pages/api/a/auth/callback.ts @@ -0,0 +1,27 @@ +import {createDefaultAuth} from '../../../../utilities/auth' +import UserService from '../../../../domains/User/service' + +const bindToUserAccount = async (req, res, session) => { + const userService = new UserService() + const username = session.user.name + const user = await userService.getByUsername(username) + const effectiveUser = user || await userService.createUser(username) + session.user.id = effectiveUser.id + session.user.rootFolder = effectiveUser.rootFolder + return session +} + +export default async (req, res) => { + try { + const auth = createDefaultAuth() + await auth.handleCallback( + req, + res, + { + afterCallback: bindToUserAccount, + } + ) + } catch (err) { + res.status(err.status || 500).end(err.message) + } +} diff --git a/src/pages/api/a/auth/log-in.ts b/src/pages/api/a/auth/log-in.ts new file mode 100644 index 0000000..024a80f --- /dev/null +++ b/src/pages/api/a/auth/log-in.ts @@ -0,0 +1,10 @@ +import {createDefaultAuth} from '../../../../utilities/auth' + +export default async (req, res) => { + try { + const auth = createDefaultAuth() + await auth.handleLogin(req, res) + } catch (err) { + res.status(err.status || 500).end(err.message) + } +} diff --git a/src/pages/api/a/auth/log-out.ts b/src/pages/api/a/auth/log-out.ts new file mode 100644 index 0000000..f2c8284 --- /dev/null +++ b/src/pages/api/a/auth/log-out.ts @@ -0,0 +1,10 @@ +import {createDefaultAuth} from '../../../../utilities/auth' + +export default async (req, res) => { + try { + const auth = createDefaultAuth() + await auth.handleLogout(req, res) + } catch (err) { + res.status(err.status || 500).end(err.message) + } +} diff --git a/src/pages/api/a/folders/create.ts b/src/pages/api/a/folders/create.ts new file mode 100644 index 0000000..1ffe238 --- /dev/null +++ b/src/pages/api/a/folders/create.ts @@ -0,0 +1,12 @@ +import FolderPresenter from '../../../../domains/Folder/presenter' +import {forActionRoute} from '../../../../utilities/handler' +import '../../../../messages' + +export default forActionRoute(async (req) => { + const folderController = new FolderPresenter() + return folderController.createFolder({ + name: req.body['name'], + parentId: req.body['parent_id'], + origin: req.headers['referer'], + }) +}) diff --git a/src/pages/api/a/folders/new.ts b/src/pages/api/a/folders/new.ts new file mode 100644 index 0000000..6d7281e --- /dev/null +++ b/src/pages/api/a/folders/new.ts @@ -0,0 +1,10 @@ +import FolderPresenter from '../../../../domains/Folder/presenter' +import {forActionRoute} from '../../../../utilities/handler' +import '../../../../messages' + +export default forActionRoute(async (req) => { + const folderController = new FolderPresenter() + return folderController.generateRedirectToCreateFolder({ + sourceURL: req.headers['referer'], + }) +}) diff --git a/src/pages/api/auth/[...auth0].ts b/src/pages/api/auth/[...auth0].ts deleted file mode 100644 index 627dfc8..0000000 --- a/src/pages/api/auth/[...auth0].ts +++ /dev/null @@ -1,3 +0,0 @@ -import { handleAuth } from '@auth0/nextjs-auth0' - -export default handleAuth() diff --git a/src/pages/api/folders/[id].ts b/src/pages/api/folders/[id].ts new file mode 100644 index 0000000..0d0e32c --- /dev/null +++ b/src/pages/api/folders/[id].ts @@ -0,0 +1,26 @@ +import FolderPresenter from '../../../domains/Folder/presenter' +import Method from '../../../utilities/handler/Method' +import {forResourceRoute} from '../../../utilities/handler' +import '../../../messages' + +export default forResourceRoute(async (req) => { + const folderController = new FolderPresenter() + switch (req.method) { + case Method.GET: + return folderController.getFolder({ + id: req.query['id'], + }) + case Method.PUT: + // TODO replace folder + // should we need this method? + break + case Method.PATCH: + // TODO rename folder + break + case Method.DELETE: + // TODO soft-delete folder + break + default: + break + } +}) diff --git a/src/pages/api/folders/index.ts b/src/pages/api/folders/index.ts new file mode 100644 index 0000000..2ff5313 --- /dev/null +++ b/src/pages/api/folders/index.ts @@ -0,0 +1,20 @@ +import Method from '../../../utilities/handler/Method' +import FolderPresenter from '../../../domains/Folder/presenter' +import {forResourceRoute} from '../../../utilities/handler' +import '../../../messages' + +export default forResourceRoute(async (req) => { + const folderController = new FolderPresenter() + switch (req.method) { + case Method.GET: + // GET all folders by the user + break + case Method.POST: + return folderController.createFolder({ + name: req.body['name'], + parentId: req.body['parent_id'] + }) + default: + break + } +}) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index ead0769..5a7e917 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,14 +1,5 @@ -import { getSession } from '@auth0/nextjs-auth0' -import { GetServerSideProps } from 'next' -import Head from 'next/head' -import styled from 'styled-components' - -const Container = styled('div')({ - maxWidth: 720, - margin: '0 auto', - padding: '0 1rem', - boxSizing: 'border-box', -}) +import { createDefaultAuth } from '../utilities/auth' +import { GetServerSideProps } from 'next' const Home = () => { return ( @@ -17,18 +8,18 @@ const Home = () => { } export const getServerSideProps: GetServerSideProps = async ({ req, res }) => { - const session = getSession(req, res) + const auth = createDefaultAuth() + const session = auth.getSession(req, res) if (!session) { return { redirect: { - destination: '/api/auth/login', + destination: '/api/a/auth/log-in', permanent: false, }, } } - return { redirect: { destination: '/my/folders', diff --git a/src/pages/my/folders/[...path].tsx b/src/pages/my/folders/[...path].tsx deleted file mode 100644 index 479cbc4..0000000 --- a/src/pages/my/folders/[...path].tsx +++ /dev/null @@ -1,194 +0,0 @@ -import { GetServerSideProps } from 'next' -import FolderTemplate from '../../../components/templates/Folder' - -const Home = ({ path, id, children, }) => { - return ( - - ) -} - -export const getServerSideProps: GetServerSideProps = async ({ query: nextQuery }) => { - const { q: query } = nextQuery - return { - props: { - query, - items: [ - { - name: 'Bruh', - url: 'https://placehold.it/300', - } - ], - children: [ - { - id: '00000000-0000-0000-000000000001', - name: 'Foo Folder 1', - children: [ - { - id: '00000000-0000-0000-000000000002', - name: 'Bar Folder 1', - children: [], - }, - { - id: '00000000-0000-0000-000000000003', - name: 'Bar Folder 2', - children: [], - }, - { - id: '00000000-0000-0000-000000000004', - name: 'Bar Folder 3', - children: [ - { - id: '00000000-0000-0000-000000000005', - name: 'Baz Folder 1', - children: [], - }, - { - id: '00000000-0000-0000-00000000006', - name: 'Baz Folder 2 With A Very Long Name That Causes Overflow Somehow', - children: [], - }, - ], - }, - ], - }, - - { - id: '10000000-0000-0000-000000000001', - name: 'Foo Folder 2', - children: [ - { - id: '10000000-0000-0000-000000000002', - name: 'Bar Folder 1', - children: [], - }, - { - id: '10000000-0000-0000-000000000003', - name: 'Bar Folder 2', - children: [], - }, - { - id: '10000000-0000-0000-000000000004', - name: 'Bar Folder 3', - children: [ - { - id: '10000000-0000-0000-000000000005', - name: 'Baz Folder 1', - children: [], - }, - { - id: '10000000-0000-0000-00000000006', - name: 'Baz Folder 2 With A Very Long Name That Causes Overflow Somehow', - children: [], - }, - ], - }, - ], - }, - - { - id: '20000000-0000-0000-000000000001', - name: 'Foo Folder 3', - children: [ - { - id: '20000000-0000-0000-000000000002', - name: 'Bar Folder 1', - children: [], - }, - { - id: '20000000-0000-0000-000000000003', - name: 'Bar Folder 2', - children: [], - }, - { - id: '20000000-0000-0000-000000000004', - name: 'Bar Folder 3', - children: [ - { - id: '20000000-0000-0000-000000000005', - name: 'Baz Folder 1', - children: [], - }, - { - id: '20000000-0000-0000-00000000006', - name: 'Baz Folder 2 With A Very Long Name That Causes Overflow Somehow', - children: [], - }, - ], - }, - ], - }, - { - id: '30000000-0000-0000-000000000001', - name: 'Foo Folder 4', - children: [ - { - id: '30000000-0000-0000-000000000002', - name: 'Bar Folder 1', - children: [], - }, - { - id: '30000000-0000-0000-000000000003', - name: 'Bar Folder 2', - children: [], - }, - { - id: '30000000-0000-0000-000000000004', - name: 'Bar Folder 3', - children: [ - { - id: '30000000-0000-0000-000000000005', - name: 'Baz Folder 1', - children: [], - }, - { - id: '30000000-0000-0000-00000000006', - name: 'Baz Folder 2 With A Very Long Name That Causes Overflow Somehow', - children: [], - }, - ], - }, - ], - }, - - { - id: '40000000-0000-0000-000000000001', - name: 'Foo Folder 5', - children: [ - { - id: '40000000-0000-0000-000000000002', - name: 'Bar Folder 1', - children: [], - }, - { - id: '40000000-0000-0000-000000000003', - name: 'Bar Folder 2', - children: [], - }, - { - id: '40000000-0000-0000-000000000004', - name: 'Bar Folder 3', - children: [ - { - id: '40000000-0000-0000-000000000005', - name: 'Baz Folder 1', - children: [], - }, - { - id: '40000000-0000-0000-00000000006', - name: 'Baz Folder 2 With A Very Long Name That Causes Overflow Somehow', - children: [], - }, - ], - }, - ], - }, - ], - }, - } -} - -export default Home diff --git a/src/pages/my/folders/[id].tsx b/src/pages/my/folders/[id].tsx new file mode 100644 index 0000000..777184b --- /dev/null +++ b/src/pages/my/folders/[id].tsx @@ -0,0 +1,37 @@ +import { GetServerSideProps } from 'next' +import FolderTemplate from '../../../components/templates/Folder' +import FolderPresenter from '../../../domains/Folder/presenter' +import {createDefaultAuth} from '../../../utilities/auth'; +import {forGetServerSideProps} from '../../../utilities/handler' +import FolderViewMode from '../../../models/FolderViewMode' + +const DescendantFolder = ({ children, items, mode, hierarchy, query, }) => { + return ( + + ) +} + +export const getServerSideProps: GetServerSideProps = forGetServerSideProps((ctx) => { + const auth = createDefaultAuth() + const session = auth.getSession(ctx.req, ctx.res) + const folderController = new FolderPresenter() + const { + 'q': query = '', + 'mode': mode = FolderViewMode.DEFAULT, + 'id': id, + } = ctx.query + return folderController.getDescendantFolderViewState({ + session, + query, + mode, + id, + }) +}) + +export default DescendantFolder diff --git a/src/pages/my/folders/index.tsx b/src/pages/my/folders/index.tsx index f4f3083..a27784c 100644 --- a/src/pages/my/folders/index.tsx +++ b/src/pages/my/folders/index.tsx @@ -1,196 +1,35 @@ import { GetServerSideProps } from 'next' import FolderTemplate from '../../../components/templates/Folder' +import FolderPresenter from '../../../domains/Folder/presenter' +import {createDefaultAuth} from '../../../utilities/auth'; +import {forGetServerSideProps} from '../../../utilities/handler' +import FolderViewMode from '../../../models/FolderViewMode'; -const Home = ({ path, id, children, items, }) => { +const RootFolder = ({ children, items, mode, hierarchy, query, }) => { return ( ) } -export const getServerSideProps: GetServerSideProps = async ({ query: nextQuery }) => { - const { q: query = '' } = nextQuery - return { - props: { - query, - items: new Array(24).fill(0).map((_, i) => ( - { - id: `11111111-1111-1111-11111111111${i}`, - name: 'Bruh', - url: 'http://placehold.it/300', - } - )), - children: [ - { - id: '00000000-0000-0000-000000000001', - name: 'Foo Folder 1', - children: [ - { - id: '00000000-0000-0000-000000000002', - name: 'Bar Folder 1', - children: [], - }, - { - id: '00000000-0000-0000-000000000003', - name: 'Bar Folder 2', - children: [], - }, - { - id: '00000000-0000-0000-000000000004', - name: 'Bar Folder 3', - children: [ - { - id: '00000000-0000-0000-000000000005', - name: 'Baz Folder 1', - children: [], - }, - { - id: '00000000-0000-0000-00000000006', - name: 'Baz Folder 2 With A Very Long Name That Causes Overflow Somehow', - children: [], - }, - ], - }, - ], - }, +export const getServerSideProps: GetServerSideProps = forGetServerSideProps((ctx) => { + const auth = createDefaultAuth() + const session = auth.getSession(ctx.req, ctx.res) + const folderController = new FolderPresenter() + const { + 'q': query = '', + 'mode': mode = FolderViewMode.DEFAULT, + } = ctx.query + return folderController.getRootFolderViewState({ + session, + query, + mode, + }) +}) - { - id: '10000000-0000-0000-000000000001', - name: 'Foo Folder 2', - children: [ - { - id: '10000000-0000-0000-000000000002', - name: 'Bar Folder 1', - children: [], - }, - { - id: '10000000-0000-0000-000000000003', - name: 'Bar Folder 2', - children: [], - }, - { - id: '10000000-0000-0000-000000000004', - name: 'Bar Folder 3', - children: [ - { - id: '10000000-0000-0000-000000000005', - name: 'Baz Folder 1', - children: [], - }, - { - id: '10000000-0000-0000-00000000006', - name: 'Baz Folder 2 With A Very Long Name That Causes Overflow Somehow', - children: [], - }, - ], - }, - ], - }, - - { - id: '20000000-0000-0000-000000000001', - name: 'Foo Folder 3', - children: [ - { - id: '20000000-0000-0000-000000000002', - name: 'Bar Folder 1', - children: [], - }, - { - id: '20000000-0000-0000-000000000003', - name: 'Bar Folder 2', - children: [], - }, - { - id: '20000000-0000-0000-000000000004', - name: 'Bar Folder 3', - children: [ - { - id: '20000000-0000-0000-000000000005', - name: 'Baz Folder 1', - children: [], - }, - { - id: '20000000-0000-0000-00000000006', - name: 'Baz Folder 2 With A Very Long Name That Causes Overflow Somehow', - children: [], - }, - ], - }, - ], - }, - { - id: '30000000-0000-0000-000000000001', - name: 'Foo Folder 4', - children: [ - { - id: '30000000-0000-0000-000000000002', - name: 'Bar Folder 1', - children: [], - }, - { - id: '30000000-0000-0000-000000000003', - name: 'Bar Folder 2', - children: [], - }, - { - id: '30000000-0000-0000-000000000004', - name: 'Bar Folder 3', - children: [ - { - id: '30000000-0000-0000-000000000005', - name: 'Baz Folder 1', - children: [], - }, - { - id: '30000000-0000-0000-00000000006', - name: 'Baz Folder 2 With A Very Long Name That Causes Overflow Somehow', - children: [], - }, - ], - }, - ], - }, - - { - id: '40000000-0000-0000-000000000001', - name: 'Foo Folder 5', - children: [ - { - id: '40000000-0000-0000-000000000002', - name: 'Bar Folder 1', - children: [], - }, - { - id: '40000000-0000-0000-000000000003', - name: 'Bar Folder 2', - children: [], - }, - { - id: '40000000-0000-0000-000000000004', - name: 'Bar Folder 3', - children: [ - { - id: '40000000-0000-0000-000000000005', - name: 'Baz Folder 1', - children: [], - }, - { - id: '40000000-0000-0000-00000000006', - name: 'Baz Folder 2 With A Very Long Name That Causes Overflow Somehow', - children: [], - }, - ], - }, - ], - }, - ], - }, - } -} - -export default Home +export default RootFolder diff --git a/src/utilities/api/FetchClient.ts b/src/utilities/api/FetchClient.ts new file mode 100644 index 0000000..69d96f8 --- /dev/null +++ b/src/utilities/api/FetchClient.ts @@ -0,0 +1,24 @@ +const createFetchClient = ({ baseURL, headers: baseHeaders = {} }) => { + return async ({ + method = 'GET', + url, + query = undefined, + headers = {}, + body = undefined, + }) => { + const theURL = new URL(url, baseURL) + if (query) { + theURL.search = new URLSearchParams(query).toString() + } + return fetch(theURL.toString(), { + method, + body, + headers: { + ...baseHeaders, + ...headers, + } + }) + } +} + +export default createFetchClient diff --git a/src/utilities/auth.ts b/src/utilities/auth.ts new file mode 100644 index 0000000..222ffb4 --- /dev/null +++ b/src/utilities/auth.ts @@ -0,0 +1,28 @@ +import { initAuth0 } from '@auth0/nextjs-auth0' + +const createAuth = (params) => { + return initAuth0({ + ...params, + enableTelemetry: false, + routes: { + callback: '/api/a/auth/callback', + postLogoutRedirect: process.env.BASE_URL, + }, + }) +} + +export const createDefaultAuth = () => createAuth({ + secret: process.env.AUTH_SECRET, + issuerBaseURL: process.env.AUTH_ISSUER_BASE_URL, + baseURL: process.env.BASE_URL, + clientID: process.env.AUTH_CLIENT_ID, + clientSecret: process.env.AUTH_CLIENT_SECRET +}) + +export class SessionNotFoundError extends Error { + constructor() { + super('No session found.') + } +} + +export default createAuth diff --git a/src/utilities/handler/Form.tsx b/src/utilities/handler/Form.tsx new file mode 100644 index 0000000..f597fa6 --- /dev/null +++ b/src/utilities/handler/Form.tsx @@ -0,0 +1,51 @@ +import * as React from 'react' +import {useForm} from 'react-hook-form' +import Method from './Method' + +type Props = { + method: Method, + action: string, + href?: string, + headers?: Record, + onResponse?: (...args: unknown[]) => unknown, + onError?: (...args: unknown[]) => unknown, + onSubmit?: (...args: unknown[]) => unknown, + children: (...args: unknown[]) => unknown, +} + +const Form: React.FC = ({ + method, + action, + href, + children, + onResponse, + onError, + headers, + onSubmit, +}) => { + const onFormSubmit = async (body) => { + const response = await fetch(href, { + method, + body, + headers, + }) + const data = await response.json() + if (typeof (onResponse as unknown) === 'function') { + onResponse(data) + } + } + + const {register, handleSubmit} = useForm() + + return ( +
+ {children({ register })} +
+ ) +} + +export default Form diff --git a/src/utilities/handler/Method.ts b/src/utilities/handler/Method.ts new file mode 100644 index 0000000..29effb1 --- /dev/null +++ b/src/utilities/handler/Method.ts @@ -0,0 +1,9 @@ +enum Method { + GET = 'GET', + POST = 'POST', + PUT = 'PUT', + PATCH = 'PATCH', + DELETE = 'DELETE', +} + +export default Method diff --git a/src/utilities/handler/index.ts b/src/utilities/handler/index.ts new file mode 100644 index 0000000..7c1292a --- /dev/null +++ b/src/utilities/handler/index.ts @@ -0,0 +1,74 @@ +export { default as Form } from './Form' + +// for noscript form submissions +export const forActionRoute = (fn) => async (req, res) => { + const { redirect, body, status, title, } = await fn(req, res) + if (redirect) { + res.redirect(redirect.url.toString()) + return + } + + res.status(status) + res.statusMessage = title + res.json(body.data) +} + +// for fetching data for SSR of pages +export const forGetServerSideProps = (fn) => async (ctx) => { + const { redirect, body, status, } = await fn(ctx) + if (redirect) { + return { + redirect: { + destination: redirect.url.toString(), + permanent: Boolean(redirect.permanent), + }, + props: body.data, + } + } + + if (status === 404) { + return { + notFound: true, + props: body.data, + } + } + + return { + props: body.data, + } +} + +// for handling of AJAX (fetch) requests from clients +export const forResourceRoute = (fn) => async (req, res) => { + const { body, status, title, } = await fn(req) || { + status: 405, + } + res.status(status) + if (title) { + res.statusMessage = title + } + if (body) { + res.json(body) + return + } + res.end('') +} + +// for form submit handlers +export const forClientSideState = ({ router, ...state }) => (fn) => async (e) => { + const { redirect, status, } = await fn(state) + if (redirect) { + if (redirect.permanent) { + router.replace(redirect.url) + } else { + router.push(redirect.url) + } + return + } + + if (status > 299) { + // noop + return + } +} + diff --git a/src/utilities/handler/useForm.ts b/src/utilities/handler/useForm.ts new file mode 100644 index 0000000..aedc980 --- /dev/null +++ b/src/utilities/handler/useForm.ts @@ -0,0 +1,3 @@ +import { useForm } from 'react-hook-form' + +export default useForm diff --git a/src/utilities/messages.ts b/src/utilities/messages.ts new file mode 100644 index 0000000..05bc084 --- /dev/null +++ b/src/utilities/messages.ts @@ -0,0 +1,25 @@ +class Messages { + private readonly messageStore = {} + private locale: string + + registerLocale(locale: string, messages: Record) { + this.messageStore[locale] = messages + this.locale = this.locale || locale + } + + setLocale(locale: string) { + this.locale = locale + } + + translate(msgId: string) { + return this.messageStore[this.locale][msgId] + } +} + +const defaultMessages = new Messages() + +export const registerLocale = defaultMessages.registerLocale.bind(defaultMessages) + +export const setLocale = defaultMessages.setLocale.bind(defaultMessages) + +export const _ = defaultMessages.translate.bind(defaultMessages) diff --git a/yarn.lock b/yarn.lock index ddcae95..fb2e922 100644 --- a/yarn.lock +++ b/yarn.lock @@ -348,6 +348,13 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275" integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA== +"@types/sqlite3@^3.1.7": + version "3.1.7" + resolved "https://registry.yarnpkg.com/@types/sqlite3/-/sqlite3-3.1.7.tgz#84fbc65946603d15cff4968d0cb283d1879dd156" + integrity sha512-8FHV/8Uzd7IwdHm5mvmF2Aif4aC/gjrt4axWD9SmfaxITnOjtOhCbOSTuqv/VbH1uq0QrwlaTj9aTz3gmR6u4w== + dependencies: + "@types/node" "*" + "@types/styled-components@^5.1.9": version "5.1.9" resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.9.tgz#00d3d84b501420521c4db727e3c195459f87a6cf" @@ -357,6 +364,16 @@ "@types/react" "*" csstype "^3.0.2" +"@types/uuid@^8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.0.tgz#215c231dff736d5ba92410e6d602050cce7e273f" + integrity sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -372,11 +389,31 @@ aggregate-error@^3.1.0: clean-stack "^2.0.0" indent-string "^4.0.0" +ajv@^6.12.3: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + anser@1.4.9: version "1.4.9" resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.9.tgz#1f85423a5dcf8da4631a341665ff675b96845760" integrity sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA== +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + ansi-regex@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" @@ -404,6 +441,19 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + array-filter@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" @@ -419,6 +469,18 @@ asn1.js@^5.2.0: minimalistic-assert "^1.0.0" safer-buffer "^2.1.0" +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + assert@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/assert/-/assert-2.0.0.tgz#95fc1c616d48713510680f2eaf2d10dd22e02d32" @@ -454,6 +516,16 @@ available-typed-arrays@^1.0.2: dependencies: array-filter "^1.0.0" +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + "babel-plugin-styled-components@>= 1.12.0": version "1.12.0" resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.12.0.tgz#1dec1676512177de6b827211e9eda5a30db4f9b9" @@ -469,6 +541,11 @@ babel-plugin-syntax-jsx@6.18.0, babel-plugin-syntax-jsx@^6.18.0: resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + base64-js@^1.0.2: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" @@ -479,6 +556,13 @@ base64url@^3.0.1: resolved "https://registry.yarnpkg.com/base64url/-/base64url-3.0.1.tgz#6399d572e2bc3f90a9a8b22d5dbb0a32d33f788d" integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -489,6 +573,13 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= + dependencies: + inherits "~2.0.0" + bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" @@ -499,6 +590,14 @@ bn.js@^5.0.0, bn.js@^5.1.1: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -651,6 +750,11 @@ caniuse-lite@^1.0.30001173, caniuse-lite@^1.0.30001179: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001207.tgz#364d47d35a3007e528f69adb6fecb07c2bb2cc50" integrity sha512-UPQZdmAsyp2qfCTiMU/zqGSWOYaY9F9LL61V8f+8MrubsaDGpaHD9HRV/EWZGULZn0Hxu48SKzI5DgFwTvHuYw== +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -683,6 +787,11 @@ chokidar@3.5.1: optionalDependencies: fsevents "~2.3.1" +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -708,6 +817,11 @@ clone-response@^1.0.2: dependencies: mimic-response "^1.0.0" +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -737,7 +851,7 @@ colorette@^1.2.1: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== -combined-stream@^1.0.8: +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -749,11 +863,21 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + console-browserify@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + constants-browserify@1.0.0, constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" @@ -771,7 +895,7 @@ cookie@^0.4.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== -core-util-is@~1.0.0: +core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= @@ -864,6 +988,13 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.7.tgz#2a5fb75e1015e84dd15692f71e89a1450290950b" integrity sha512-KxnUB0ZMlnUWCsx2Z8MUsr6qV6ja1w9ArPErJaJaF8a5SOWoHLIszeCTKGRGRgtLgYrs1E8CHkNSP1VZTTPc9g== +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + data-uri-to-buffer@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" @@ -876,6 +1007,13 @@ debug@2: dependencies: ms "2.0.0" +debug@^3.2.6: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + debug@^4.1.0, debug@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" @@ -890,6 +1028,11 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + defer-to-connect@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" @@ -907,6 +1050,11 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" @@ -920,6 +1068,11 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -953,6 +1106,19 @@ domain-browser@^1.1.1: resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== +dotenv@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + electron-to-chromium@^1.3.634: version "1.3.708" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.708.tgz#127970d2fc665ab356be59e668f2914856419176" @@ -1064,6 +1230,31 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -1093,11 +1284,47 @@ foreach@^2.0.5: resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + fsevents@~2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== +fstream@^1.0.0, fstream@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -1108,6 +1335,20 @@ futoin-hkdf@^1.3.2: resolved "https://registry.yarnpkg.com/futoin-hkdf/-/futoin-hkdf-1.3.3.tgz#6ee1c9c105dfa0995ba4f80633cf1c0c32defcb2" integrity sha512-oR75fYk3B3X9/B02Y6vusrBKucrpC6VjxhRL+C6B7FwUpuSRHbhBNG3AZbcE/xPyJmEQWsyqUFp3VeNNbA3S7A== +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" @@ -1131,6 +1372,13 @@ get-stream@^5.1.0: dependencies: pump "^3.0.0" +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + glob-parent@~5.1.0: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -1143,6 +1391,18 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== +glob@^7.0.3, glob@^7.1.3: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -1170,6 +1430,19 @@ graceful-fs@^4.1.2: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + has-bigints@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" @@ -1190,6 +1463,11 @@ has-symbols@^1.0.1, has-symbols@^1.0.2: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -1262,6 +1540,15 @@ http-errors@^1.8.0: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + http2-wrapper@^1.0.0-beta.5.2: version "1.0.3" resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" @@ -1275,7 +1562,7 @@ https-browserify@1.0.0, https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -iconv-lite@0.4.24: +iconv-lite@0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -1294,11 +1581,31 @@ ieee754@^1.1.4: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +ignore-walk@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== + dependencies: + minimatch "^3.0.4" + indent-string@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" @@ -1309,10 +1616,10 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== is-arguments@^1.0.4: version "1.1.0" @@ -1355,6 +1662,18 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + is-generator-function@^1.0.7: version "1.0.8" resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.8.tgz#dfb5c2b120e02b0a8d9d2c6806cd5621aa922f7b" @@ -1421,11 +1740,21 @@ is-typed-array@^1.1.3: foreach "^2.0.5" has-symbols "^1.0.1" +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" @@ -1433,6 +1762,11 @@ isobject@^2.0.0: dependencies: isarray "1.0.0" +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + jest-worker@27.0.0-next.5: version "27.0.0-next.5" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.0-next.5.tgz#5985ee29b12a4e191f4aae4bb73b97971d86ec28" @@ -1465,6 +1799,11 @@ jose@^2.0.4: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -1475,6 +1814,21 @@ json-buffer@3.0.1: resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -1482,6 +1836,16 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + keyv@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.3.tgz#4f3aa98de254803cafcd2896734108daa35e4254" @@ -1581,7 +1945,7 @@ mime-db@1.47.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== -mime-types@^2.1.12: +mime-types@^2.1.12, mime-types@~2.1.19: version "2.1.30" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== @@ -1608,11 +1972,40 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimist@^1.2.0: +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -1623,6 +2016,11 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + nanoid@^3.1.16: version "3.1.22" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844" @@ -1635,6 +2033,15 @@ native-url@0.3.4: dependencies: querystring "^0.2.0" +needle@^2.2.1: + version "2.6.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.6.0.tgz#24dbb55f2509e2324b4a99d61f413982013ccdbe" + integrity sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg== + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + next@10.1.3: version "10.1.3" resolved "https://registry.yarnpkg.com/next/-/next-10.1.3.tgz#e26e8371343a42bc2ba9be5cb253a7d324d03673" @@ -1691,11 +2098,34 @@ next@10.1.3: vm-browserify "1.1.2" watchpack "2.1.1" +node-addon-api@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.1.0.tgz#98b21931557466c6729e51cb77cd39c965f42239" + integrity sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw== + node-fetch@2.6.1, node-fetch@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== +node-gyp@3.x: + version "3.8.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" + integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== + dependencies: + fstream "^1.0.0" + glob "^7.0.3" + graceful-fs "^4.1.2" + mkdirp "^0.5.0" + nopt "2 || 3" + npmlog "0 || 1 || 2 || 3 || 4" + osenv "0" + request "^2.87.0" + rimraf "2" + semver "~5.3.0" + tar "^2.0.0" + which "1" + node-html-parser@1.4.9: version "1.4.9" resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-1.4.9.tgz#3c8f6cac46479fae5800725edb532e9ae8fd816c" @@ -1732,11 +2162,42 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" +node-pre-gyp@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz#db1f33215272f692cd38f03238e3e9b47c5dd054" + integrity sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q== + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + node-releases@^1.1.69: version "1.1.71" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== +"nopt@2 || 3": + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= + dependencies: + abbrev "1" + +nopt@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" + integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== + dependencies: + abbrev "1" + osenv "^0.1.4" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -1747,7 +2208,48 @@ normalize-url@^4.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== -object-assign@^4.1.1: +npm-bundled@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-packlist@^1.1.6: + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -1795,7 +2297,7 @@ on-headers@^1.0.2: resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== -once@^1.3.1, once@^1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -1820,6 +2322,24 @@ os-browserify@0.3.0, os-browserify@^0.3.0: resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-tmpdir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@0, osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + p-cancelable@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.0.tgz#4d51c3b91f483d02a0d300765321fca393d758dd" @@ -1882,6 +2402,11 @@ path-exists@^4.0.0: 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: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + pbkdf2@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" @@ -1893,6 +2418,11 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + picomatch@^2.0.4, picomatch@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" @@ -1965,6 +2495,11 @@ prop-types@15.7.2, prop-types@^15.7.2: object-assign "^4.1.1" react-is "^16.8.1" +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + public-encrypt@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" @@ -1995,11 +2530,16 @@ punycode@^1.2.4: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= -punycode@^2.1.0: +punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + querystring-es3@0.2.1, querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -2045,6 +2585,16 @@ raw-body@2.4.1: iconv-lite "0.4.24" unpipe "1.0.0" +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + react-dom@17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" @@ -2061,6 +2611,11 @@ react-feather@^2.0.9: dependencies: prop-types "^15.7.2" +react-hook-form@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.0.4.tgz#efd800289f3e6aa237fde5121f4ef7ba7653fb3b" + integrity sha512-4LN1bagvQPWdn17gXDo917GZLSCNtKR5Wd4D05VMnCdGkJp31mYWN7RlhQUg6tSBbIB8KqPfkmYbxET4SgAkqQ== + react-is@16.13.1, react-is@^16.7.0, react-is@^16.8.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" @@ -2079,7 +2634,7 @@ react@17.0.2: loose-envify "^1.1.0" object-assign "^4.1.1" -readable-stream@^2.0.2, readable-stream@^2.3.3, readable-stream@^2.3.6: +readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.3.3, readable-stream@^2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -2113,6 +2668,32 @@ regenerator-runtime@^0.13.4: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== +request@^2.87.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + resolve-alpn@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.0.0.tgz#745ad60b3d6aff4b4a48e01b8c0bdc70959e0e8c" @@ -2125,6 +2706,13 @@ responselike@^2.0.0: dependencies: lowercase-keys "^2.0.0" +rimraf@2, rimraf@^2.6.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -2143,11 +2731,16 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + scheduler@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" @@ -2156,11 +2749,26 @@ scheduler@^0.20.2: loose-envify "^1.1.0" object-assign "^4.1.1" +semver@^5.3.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + semver@^6.0.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= + +set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -2194,6 +2802,11 @@ shell-quote@1.7.2: resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== +signal-exit@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + source-map@0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" @@ -2216,6 +2829,31 @@ source-map@^0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +sqlite3@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.0.2.tgz#00924adcc001c17686e0a6643b6cbbc2d3965083" + integrity sha512-1SdTNo+BVU211Xj1csWa8lV6KM0CtucDwRyA0VHl91wEH1Mgh7RxUpI4rVvG7OhHrzCSGaVyW5g8vKvlrk9DJA== + dependencies: + node-addon-api "^3.0.0" + node-pre-gyp "^0.11.0" + optionalDependencies: + node-gyp "3.x" + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + stacktrace-parser@0.1.10: version "0.1.10" resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" @@ -2277,6 +2915,23 @@ string-hash@1.1.3: resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs= +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2": + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + string.prototype.trimend@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" @@ -2314,6 +2969,25 @@ strip-ansi@6.0.0: dependencies: ansi-regex "^5.0.0" +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + styled-components@^5.2.3: version "5.2.3" resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.2.3.tgz#752669fd694aac10de814d96efc287dde0d11385" @@ -2382,6 +3056,28 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" +tar@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" + integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA== + dependencies: + block-stream "*" + fstream "^1.0.12" + inherits "2" + +tar@^4: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + timers-browserify@2.0.12, timers-browserify@^2.0.4: version "2.0.12" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" @@ -2411,6 +3107,14 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" @@ -2438,6 +3142,18 @@ tty-browserify@0.0.1: resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + tweetnacl@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" @@ -2468,6 +3184,13 @@ unpipe@1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + url-join@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" @@ -2519,6 +3242,25 @@ util@^0.11.0: dependencies: inherits "2.0.3" +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + vm-browserify@1.1.2, vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" @@ -2570,6 +3312,20 @@ which-typed-array@^1.1.2: has-symbols "^1.0.1" is-typed-array "^1.1.3" +which@1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -2585,6 +3341,11 @@ xtend@^4.0.0, xtend@^4.0.2: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== +yallist@^3.0.0, yallist@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"