From 62bc7af00412270fca363c3ffbddaa8fb445d5e5 Mon Sep 17 00:00:00 2001 From: Max Leiter Date: Sat, 26 Mar 2022 00:05:05 -0700 Subject: [PATCH] client: misc style improvements, error handling --- client/components/app/index.tsx | 1 + .../edit-document/document.module.css | 8 - client/components/edit-document/index.tsx | 3 - client/components/fade-in/fade.module.css | 15 ++ client/components/fade-in/index.tsx | 30 +++ client/components/header/header.tsx | 7 + client/components/header/index.tsx | 4 +- client/components/new-post/index.tsx | 2 +- client/components/post-list/index.tsx | 23 +- client/components/post-list/list-item.tsx | 35 ++- client/components/post-page/index.tsx | 1 - client/components/settings/index.tsx | 24 ++ .../view-document/document.module.css | 19 +- client/components/view-document/index.tsx | 19 +- client/lib/types.d.ts | 6 + client/pages/mine.tsx | 7 +- client/pages/post/[id].tsx | 11 + client/pages/settings.tsx | 32 +++ client/styles/globals.css | 2 + server/.sequelizerc | 8 + server/127.0.0.1 | Bin 0 -> 12288 bytes server/config/config.js | 18 ++ server/config/config.json | 18 -- .../20220323033259-postAddHtmlColumn.js | 27 -- server/package.json | 1 + server/src/routes/auth.ts | 1 + server/src/routes/posts.ts | 120 +++++---- server/yarn.lock | 241 +++++++++++++++++- 28 files changed, 518 insertions(+), 165 deletions(-) create mode 100644 client/components/fade-in/fade.module.css create mode 100644 client/components/fade-in/index.tsx create mode 100644 client/components/settings/index.tsx create mode 100644 client/pages/settings.tsx create mode 100644 server/.sequelizerc create mode 100644 server/127.0.0.1 create mode 100644 server/config/config.js delete mode 100644 server/config/config.json delete mode 100644 server/migrations/20220323033259-postAddHtmlColumn.js diff --git a/client/components/app/index.tsx b/client/components/app/index.tsx index 8504e8f4..baf28c09 100644 --- a/client/components/app/index.tsx +++ b/client/components/app/index.tsx @@ -27,6 +27,7 @@ const App = ({ accents_7: 'var(--darkest-gray)', accents_8: 'var(--darkest-gray)', border: 'var(--light-gray)', + warning: 'var(--warning)' }, expressiveness: { dropdownBoxShadow: '0 0 0 1px var(--light-gray)', diff --git a/client/components/edit-document/document.module.css b/client/components/edit-document/document.module.css index 61927f6f..82c46cad 100644 --- a/client/components/edit-document/document.module.css +++ b/client/components/edit-document/document.module.css @@ -18,14 +18,6 @@ .fileNameContainer { display: flex; - justify-content: space-between; - align-items: center; - height: 36px; -} - -.fileNameContainer { - display: flex; - align-content: center; } .fileNameContainer > div { diff --git a/client/components/edit-document/index.tsx b/client/components/edit-document/index.tsx index f2a412e9..1b18b336 100644 --- a/client/components/edit-document/index.tsx +++ b/client/components/edit-document/index.tsx @@ -3,10 +3,7 @@ import { ChangeEvent, memo, useCallback, useMemo, useRef, useState } from "react" import styles from './document.module.css' import Trash from '@geist-ui/icons/trash' -import Download from '@geist-ui/icons/download' -import ExternalLink from '@geist-ui/icons/externalLink' import FormattingIcons from "./formatting-icons" -import Skeleton from "react-loading-skeleton" import { Button, ButtonGroup, Card, Input, Spacer, Tabs, Textarea, Tooltip } from "@geist-ui/core" import Preview from "@components/preview" diff --git a/client/components/fade-in/fade.module.css b/client/components/fade-in/fade.module.css new file mode 100644 index 00000000..7fe9e4b1 --- /dev/null +++ b/client/components/fade-in/fade.module.css @@ -0,0 +1,15 @@ +@media (prefers-reduced-motion: no-preference) { + .fadeIn { + animation-name: fadeInAnimation; + animation-fill-mode: backwards; + } +} + +@keyframes fadeInAnimation { + from { + opacity: 0; + } + to { + opacity: 1; + } +} diff --git a/client/components/fade-in/index.tsx b/client/components/fade-in/index.tsx new file mode 100644 index 00000000..adb77440 --- /dev/null +++ b/client/components/fade-in/index.tsx @@ -0,0 +1,30 @@ +// https://www.joshwcomeau.com/snippets/react-components/fade-in/ +import styles from './fade.module.css'; + +const FadeIn = ({ + duration = 300, + delay = 0, + children, + ...delegated +}: { + duration?: number; + delay?: number; + children: React.ReactNode; + [key: string]: any; +}) => { + return ( +
+ {children} +
+ ); +}; + +export default FadeIn diff --git a/client/components/header/header.tsx b/client/components/header/header.tsx index b83f69bf..fb66531d 100644 --- a/client/components/header/header.tsx +++ b/client/components/header/header.tsx @@ -15,6 +15,7 @@ import SignUpIcon from '@geist-ui/icons/userPlus'; import NewIcon from '@geist-ui/icons/plusCircle'; import YourIcon from '@geist-ui/icons/list' import MoonIcon from '@geist-ui/icons/moon'; +// import SettingsIcon from '@geist-ui/icons/settings'; import SunIcon from '@geist-ui/icons/sun'; import { useTheme } from "next-themes" import { Button } from "@geist-ui/core"; @@ -83,6 +84,12 @@ const Header = () => { value: 'yours', href: '/mine' }, + // { + // name: 'settings', + // icon: , + // value: 'settings', + // href: '/settings' + // }, { name: 'sign out', icon: , diff --git a/client/components/header/index.tsx b/client/components/header/index.tsx index b8fe9489..7f452668 100644 --- a/client/components/header/index.tsx +++ b/client/components/header/index.tsx @@ -1,8 +1,10 @@ import dynamic from 'next/dynamic' const Header = dynamic(import('./header'), { - ssr: false, + // ssr: false, // loading: () => , }) + + export default Header diff --git a/client/components/new-post/index.tsx b/client/components/new-post/index.tsx index c5c9e049..c761912e 100644 --- a/client/components/new-post/index.tsx +++ b/client/components/new-post/index.tsx @@ -43,7 +43,7 @@ const Post = () => { } else { const json = await res.json() setToast({ - text: json.error.message, + text: json.error.message || 'Please fill out all fields', type: 'error' }) setPasswordModalVisible(false) diff --git a/client/components/post-list/index.tsx b/client/components/post-list/index.tsx index fcdd347a..194d45cd 100644 --- a/client/components/post-list/index.tsx +++ b/client/components/post-list/index.tsx @@ -1,4 +1,4 @@ -import { Code, Dot, Input, Note, Text } from "@geist-ui/core" +import { Button, Code, Dot, Input, Note, Text } from "@geist-ui/core" import NextLink from "next/link" import Link from '../Link' @@ -22,12 +22,23 @@ const PostList = ({ morePosts, initialPosts, error }: Props) => { const [searching, setSearching] = useState(false) const [hasMorePosts, setHasMorePosts] = useState(morePosts) - const loadMoreClick = useCallback((e: React.MouseEvent) => { + const loadMoreClick = useCallback((e: React.MouseEvent) => { e.preventDefault() if (hasMorePosts) { async function fetchPosts() { - const res = await fetch(`/api/posts/mine&page=${posts.length / 10 + 1}`) + const res = await fetch(`/server-api/posts/mine`, + { + method: "GET", + headers: { + "Content-Type": "application/json", + "Authorization": `Bearer ${Cookies.get('drift-token')}`, + "x-page": `${posts.length / 10 + 1}`, + } + } + ) + console.log(res) const json = await res.json() + console.log(json) setPosts([...posts, ...json.posts]) setHasMorePosts(json.morePosts) } @@ -102,9 +113,9 @@ const PostList = ({ morePosts, initialPosts, error }: Props) => { } {hasMorePosts &&
- - Load more - +
} ) diff --git a/client/components/post-list/list-item.tsx b/client/components/post-list/list-item.tsx index a8d6b269..92b4c555 100644 --- a/client/components/post-list/list-item.tsx +++ b/client/components/post-list/list-item.tsx @@ -4,20 +4,12 @@ import { useEffect, useMemo, useState } from "react" import timeAgo from "@lib/time-ago" import VisibilityBadge from "../visibility-badge" import getPostPath from "@lib/get-post-path" -import { Input, Link, Text, Card, Spacer, Grid, Tooltip, Divider, Badge } from "@geist-ui/core" +import { Link, Text, Card, Tooltip, Divider, Badge } from "@geist-ui/core" +import { File, Post } from "@lib/types" +import FadeIn from "@components/fade-in" -const FilenameInput = ({ title }: { title: string }) => - -const ListItem = ({ post }: { post: any }) => { +// TODO: isOwner should default to false so this can be used generically +const ListItem = ({ post, isOwner = true }: { post: Post, isOwner?: boolean }) => { const createdDate = useMemo(() => new Date(post.createdAt), [post.createdAt]) const [time, setTimeAgo] = useState(timeAgo(createdDate)) @@ -29,7 +21,8 @@ const ListItem = ({ post }: { post: any }) => { }, [createdDate]) const formattedTime = `${createdDate.toLocaleDateString()} ${createdDate.toLocaleTimeString()}` - return (
  • + return (
  • + @@ -48,20 +41,26 @@ const ListItem = ({ post }: { post: any }) => { {post.files.length === 1 ? "1 file" : `${post.files.length} files`} - + {isOwner && + + } - {post.files.map((file: any) => { - return + {post.files.map((file: File) => { + return
    + + {file.title || 'Untitled file'} +
    })}
    -
  • ) + + ) } export default ListItem \ No newline at end of file diff --git a/client/components/post-page/index.tsx b/client/components/post-page/index.tsx index 36496b3e..1a4db47e 100644 --- a/client/components/post-page/index.tsx +++ b/client/components/post-page/index.tsx @@ -7,7 +7,6 @@ import homeStyles from '@styles/Home.module.css' import type { File, Post } from "@lib/types" import { Page, Button, Text, Badge, Tooltip, Spacer, ButtonDropdown, ButtonGroup } from "@geist-ui/core" -import ShiftBy from "@components/shift-by" import { useMemo, useState } from "react" import timeAgo from "@lib/time-ago" import Archive from '@geist-ui/icons/archive' diff --git a/client/components/settings/index.tsx b/client/components/settings/index.tsx new file mode 100644 index 00000000..1fcb2eda --- /dev/null +++ b/client/components/settings/index.tsx @@ -0,0 +1,24 @@ +import { Button, Text, Fieldset } from '@geist-ui/core' + +const Settings = () => { + + return ( +
    + Settings + +
    + Custom Theme + + Drift currently supports theming by overriding CSS variables. + + + {/* */} + +
    + + +
    + ) +} + +export default Settings \ No newline at end of file diff --git a/client/components/view-document/document.module.css b/client/components/view-document/document.module.css index b53320ff..77b3d5e1 100644 --- a/client/components/view-document/document.module.css +++ b/client/components/view-document/document.module.css @@ -13,15 +13,20 @@ } .fileNameContainer { - display: flex; - justify-content: space-between; - align-items: center; - height: 36px; + font-family: var(--font-mono) !important; + border-radius: var(--radius) !important; + margin-bottom: var(--gap-half) !important; + width: 100% !important; } -.fileNameContainer { - display: flex; - align-content: center; +.fileNameContainer span { + transition: background-color var(--transition) !important; + border-color: var(--light-gray) !important; +} + +.fileNameContainer span:target, +.fileNameContainer span:hover { + background-color: var(--lighter-gray) !important; } .fileNameContainer > div { diff --git a/client/components/view-document/index.tsx b/client/components/view-document/index.tsx index c961c23c..592d0edb 100644 --- a/client/components/view-document/index.tsx +++ b/client/components/view-document/index.tsx @@ -6,7 +6,7 @@ import Download from '@geist-ui/icons/download' import ExternalLink from '@geist-ui/icons/externalLink' import Skeleton from "react-loading-skeleton" -import { Button, ButtonGroup, Card, Input, Spacer, Tabs, Textarea, Tooltip } from "@geist-ui/core" +import { Button, Text, ButtonGroup, Spacer, Tabs, Textarea, Tooltip, Link, Tag } from "@geist-ui/core" import HtmlPreview from "@components/preview" // import Link from "next/link" @@ -85,18 +85,11 @@ const Document = ({ content, title, initialTab = 'edit', skeleton, id }: Props) <>
    -
    - -
    + + + {title || 'Untitled'} + +
    diff --git a/client/lib/types.d.ts b/client/lib/types.d.ts index 9483db5d..d29bf200 100644 --- a/client/lib/types.d.ts +++ b/client/lib/types.d.ts @@ -23,4 +23,10 @@ export type Post = { visibility: PostVisibility files: Files createdAt: string + users?: User[] +} + +type User = { + id: string + username: string } diff --git a/client/pages/mine.tsx b/client/pages/mine.tsx index 6d487cba..ec78c9f8 100644 --- a/client/pages/mine.tsx +++ b/client/pages/mine.tsx @@ -31,7 +31,7 @@ export const getServerSideProps: GetServerSideProps = async ({ req }) => { } } - const posts = await fetch(process.env.API_URL + `/posts/mine?page=1`, { + const posts = await fetch(process.env.API_URL + `/posts/mine`, { method: "GET", headers: { "Content-Type": "application/json", @@ -50,12 +50,11 @@ export const getServerSideProps: GetServerSideProps = async ({ req }) => { } const data = await posts.json() - return { props: { - posts: data, + posts: data.posts, error: posts.status !== 200, - morePosts: data.length > 10, + morePosts: data.hasMore, } } } diff --git a/client/pages/post/[id].tsx b/client/pages/post/[id].tsx index e99da842..dd3ced57 100644 --- a/client/pages/post/[id].tsx +++ b/client/pages/post/[id].tsx @@ -38,6 +38,17 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { } }) + if (!post.ok) { + return { + redirect: { + destination: "/404", + }, + props: { + post: null + } + } + } + return { props: { post: await post.json() diff --git a/client/pages/settings.tsx b/client/pages/settings.tsx new file mode 100644 index 00000000..66ac5dcd --- /dev/null +++ b/client/pages/settings.tsx @@ -0,0 +1,32 @@ +import styles from '@styles/Home.module.css' + +import Header from '@components/header' +import { Page } from '@geist-ui/core'; +import { useEffect } from 'react'; +import Settings from '@components/settings'; +import useSignedIn from '@lib/hooks/use-signed-in'; +import { useRouter } from 'next/router'; + +const SettingsPage = () => { + const { signedIn } = useSignedIn() + const router = useRouter() + useEffect(() => { + console.log("here", signedIn) + if (typeof window === 'undefined') return + if (!signedIn) { + console.log("here") + router.push('/') + } + }, [router, signedIn]) + return ( + + +
    + + + + + + ) +} +export default SettingsPage diff --git a/client/styles/globals.css b/client/styles/globals.css index 6a04b2a8..e8dcb3cd 100644 --- a/client/styles/globals.css +++ b/client/styles/globals.css @@ -49,6 +49,8 @@ --header-bg: rgba(19, 20, 21, 0.45); --gray-alpha: rgba(255, 255, 255, 0.5); --selection: rgba(255, 255, 255, 0.99); + + --warning: rgb(27, 134, 23); } [data-theme="light"] { diff --git a/server/.sequelizerc b/server/.sequelizerc new file mode 100644 index 00000000..ab780b3c --- /dev/null +++ b/server/.sequelizerc @@ -0,0 +1,8 @@ +const path = require("path") + +module.exports = { + config: path.resolve("config", "config.js"), + "models-path": path.resolve("src", "lib", "models"), + // "seeders-path": path.resolve("src", "seeders"), + "migrations-path": path.resolve("src", "migrations") +} diff --git a/server/127.0.0.1 b/server/127.0.0.1 new file mode 100644 index 0000000000000000000000000000000000000000..e5f2b6ec6e6489290ed59bc8f032b6ae4c849958 GIT binary patch literal 12288 zcmeI#%}T>S5C`y0Dk?%rZ@rGEHU~?ZSizfXNwGAEHcf?|nn+fNqz!Eo5O2PLFXXfM z8XnD-BIIJP7XAbKF)X|6{`NGJv6JM2p0o8L%E@94rYP)&h%r{%wQ|^oQuar?xg2D^ zFKVna`lxH)Ow|TV8)%>VHeekB5P$##AOHafKmY;|fB*y_@P7pg<)qnaDern7J*8qI zR)t8DH{psrsw8UPw|QVwz;7L!!pd4m?Qj__L`aX^@85C1ZT5OPdG`T%Q^%pHHylrG zdhmxX_h&S+XZp2z+;m$COO~;C-K^5GlAlLKo^A7a<@9;ClFHitRC?BB*I-Qhk`n|3 zAOHafKmY;|fB*y_009U<00M_8aBdo=X;|i!VRbF*@}k&?HIHLIOGW2pb0!~!`u{M$ e7Pp1~1Rwwb2tWV=5P$##AOHaf{0jVC|Nj6}U{-tp literal 0 HcmV?d00001 diff --git a/server/config/config.js b/server/config/config.js new file mode 100644 index 00000000..6af874e8 --- /dev/null +++ b/server/config/config.js @@ -0,0 +1,18 @@ +const path = require("path") +console.log(path.join(__dirname, "..", "drift.sqlite")) +module.exports = { + production: { + database: path.join(__dirname, "..", "drift.sqlite"), + host: "127.0.0.1", + port: "3306", + user: "root", + password: "root", + dialect: "sqlite" + }, + development: { + database: path.join(__dirname, "..", "drift.sqlite"), + dialect: "sqlite", + debug: true, + logging: true + } +} diff --git a/server/config/config.json b/server/config/config.json deleted file mode 100644 index 07f91292..00000000 --- a/server/config/config.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "production": { - "database": "../drift.sqlite", - "host": "127.0.0.1", - "port": "3306", - "user": "root", - "password": "root", - "dialect": "sqlite" - }, - "development": { - "database": "../drift.sqlite", - "host": "127.0.0.1", - "port": "3306", - "user": "root", - "password": "root", - "dialect": "sqlite" - } -} diff --git a/server/migrations/20220323033259-postAddHtmlColumn.js b/server/migrations/20220323033259-postAddHtmlColumn.js deleted file mode 100644 index 3b0dce54..00000000 --- a/server/migrations/20220323033259-postAddHtmlColumn.js +++ /dev/null @@ -1,27 +0,0 @@ -const { DataTypes } = require("sequelize"); - -async function up(qi) { - try { - await qi.addColumn("Posts", "html", { - allowNull: true, - type: DataTypes.STRING, - }); - } catch (e) { - console.error(e); - throw e; - } -} - -async function down(qi) { - try { - await qi.removeColumn("Posts", "html"); - } catch (e) { - console.error(e); - throw e; - } -} - -module.exports = { - up, - down, -}; diff --git a/server/package.json b/server/package.json index 40318093..ba4476cd 100644 --- a/server/package.json +++ b/server/package.json @@ -28,6 +28,7 @@ "react-dom": "^17.0.2", "reflect-metadata": "^0.1.10", "sequelize": "^6.17.0", + "sequelize-auto-migrations-v2": "^1.2.1", "sequelize-typescript": "^2.1.3", "sqlite3": "https://github.com/mapbox/node-sqlite3#918052b538b0effe6c4a44c74a16b2749c08a0d2", "strong-error-handler": "^4.0.0" diff --git a/server/src/routes/auth.ts b/server/src/routes/auth.ts index 7abc6916..16045930 100644 --- a/server/src/routes/auth.ts +++ b/server/src/routes/auth.ts @@ -57,6 +57,7 @@ auth.post( const existingUser = await User.findOne({ where: { username: username } }) + if (existingUser) { throw new Error("Username already exists") } diff --git a/server/src/routes/posts.ts b/server/src/routes/posts.ts index 7c4582d2..c8ea6a9d 100644 --- a/server/src/routes/posts.ts +++ b/server/src/routes/posts.ts @@ -29,7 +29,7 @@ posts.post( jwt, celebrate({ body: { - title: Joi.string().required().allow("", null), + title: Joi.string().required(), files: Joi.any().required(), visibility: Joi.string() .custom(postVisibilitySchema, "valid visibility") @@ -48,6 +48,14 @@ posts.post( .digest("hex") } + // check if all files have titles + const files = req.body.files + const fileTitles = files.map((file) => file.title) + const missingTitles = fileTitles.filter((title) => title === "") + if (missingTitles.length > 0) { + throw new Error("All files must have a title") + } + const newPost = new Post({ title: req.body.title, visibility: req.body.visibility, @@ -57,7 +65,7 @@ posts.post( await newPost.save() await newPost.$add("users", req.body.userId) const newFiles = await Promise.all( - req.body.files.map(async (file) => { + files.map(async (file) => { const html = getHtmlFromFile(file) const newFile = new File({ title: file.title || "", @@ -103,52 +111,52 @@ posts.get("/", secretKey, async (req, res, next) => { } }) -posts.get( - "/mine", - jwt, - celebrate({ - query: { - page: Joi.number().integer().min(1).default(1).optional() - } - }), - async (req: UserJwtRequest, res, next) => { - if (!req.user) { - return res.status(401).json({ error: "Unauthorized" }) - } - - const { page } = req.query - const parsedPage = page ? parseInt(page as string) : 1 - - try { - const user = await User.findByPk(req.user.id, { - include: [ - { - model: Post, - as: "posts", - include: [ - { - model: File, - as: "files", - attributes: ["id", "title", "createdAt"] - } - ], - attributes: ["id", "title", "visibility", "createdAt"] - } - ] - }) - if (!user) { - return res.status(404).json({ error: "User not found" }) - } - return res.json( - user.posts - ?.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime()) - .slice((parsedPage - 1) * 10, parsedPage * 10) - ) - } catch (error) { - next(error) - } +posts.get("/mine", jwt, async (req: UserJwtRequest, res, next) => { + if (!req.user) { + return res.status(401).json({ error: "Unauthorized" }) } -) + + const page = parseInt(req.headers["x-page"]?.toString() || "1") + + try { + const user = await User.findByPk(req.user.id, { + include: [ + { + model: Post, + as: "posts", + include: [ + { + model: File, + as: "files", + attributes: ["id", "title", "createdAt"] + } + ], + attributes: ["id", "title", "visibility", "createdAt"] + } + ] + }) + if (!user) { + return res.status(404).json({ error: "User not found" }) + } + + const userPosts = user.posts + const sorted = userPosts?.sort((a, b) => { + return b.createdAt.getTime() - a.createdAt.getTime() + }) + + const paginated = sorted?.slice((page - 1) * 10, page * 10) + + const hasMore = + paginated && sorted ? paginated.length < sorted.length : false + + return res.json({ + posts: paginated, + hasMore + }) + } catch (error) { + next(error) + } +}) posts.get( "/search", @@ -263,6 +271,24 @@ posts.get( } ) +posts.delete("/:id", jwt, async (req, res, next) => { + try { + const post = await Post.findByPk(req.params.id) + if (!post) { + return res.status(404).json({ error: "Post not found" }) + } + + jwt(req as UserJwtRequest, res, async () => { + if (post.files?.length) + await Promise.all(post.files.map((file) => file.destroy())) + await post.destroy() + res.json({ message: "Post deleted" }) + }) + } catch (e) { + next(e) + } +}) + function getHtmlFromFile(file: any) { const renderAsMarkdown = [ "markdown", diff --git a/server/yarn.lock b/server/yarn.lock index 0002e7aa..0fa9fd72 100644 --- a/server/yarn.lock +++ b/server/yarn.lock @@ -179,6 +179,16 @@ "@types/qs" "*" "@types/serve-static" "*" +"@types/geojson@^1.0.0": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-1.0.6.tgz#3e02972728c69248c2af08d60a48cbb8680fffdf" + integrity sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w== + +"@types/geojson@^7946.0.0 || ^1.0.0": + version "7946.0.8" + resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.8.tgz#30744afdb385e2945e22f3b033f897f76b1f12ca" + integrity sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA== + "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" @@ -385,6 +395,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +array-back@^3.0.1, array-back@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" + integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -412,6 +427,13 @@ async@^1.5.0: resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= +async@^2.5.1: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -457,6 +479,11 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +bluebird@^3.4.6, bluebird@^3.5.0: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + body-parser@1.19.2, body-parser@^1.18.2: version "1.19.2" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.2.tgz#4714ccd9c157d44797b8b5607d72c0b89952f26e" @@ -613,6 +640,14 @@ clone-response@^1.0.2: dependencies: mimic-response "^1.0.0" +cls-bluebird@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cls-bluebird/-/cls-bluebird-2.1.0.tgz#37ef1e080a8ffb55c2f4164f536f1919e7968aee" + integrity sha1-N+8eCAqP+1XC9BZPU28ZGeeWiu4= + dependencies: + is-bluebird "^1.0.2" + shimmer "^1.1.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" @@ -654,7 +689,17 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.12.1: +command-line-args@^5.0.2: + version "5.2.1" + resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e" + integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== + dependencies: + array-back "^3.1.0" + find-replace "^3.0.0" + lodash.camelcase "^4.3.0" + typical "^4.0.0" + +commander@^2.12.1, commander@^2.19.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -664,6 +709,14 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= +config-chain@^1.1.12: + version "1.1.13" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + configstore@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" @@ -757,7 +810,7 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -debug@2.6.9: +debug@2.6.9, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -771,7 +824,7 @@ debug@4, debug@^4.1.1, debug@^4.2.0, debug@^4.3.3: dependencies: ms "2.1.2" -debug@^3.2.7: +debug@^3.1.0, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== @@ -785,6 +838,11 @@ decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" +deep-diff@^0.3.8: + version "0.3.8" + resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.8.tgz#c01de63efb0eec9798801d40c7e0dae25b582c84" + integrity sha1-wB3mPvsO7JeYgB1Ax+Da4ltYLIQ= + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -805,7 +863,7 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= -depd@~1.1.2: +depd@^1.1.0, depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= @@ -837,7 +895,7 @@ dotenv@^16.0.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.0.tgz#c619001253be89ebb638d027b609c75c26e47411" integrity sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q== -dottie@^2.0.2: +dottie@^2.0.0, dottie@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/dottie/-/dottie-2.0.2.tgz#cc91c0726ce3a054ebf11c55fbc92a7f266dd154" integrity sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg== @@ -862,6 +920,16 @@ ecdsa-sig-formatter@1.0.11: dependencies: safe-buffer "^5.0.1" +editorconfig@^0.15.3: + version "0.15.3" + resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.15.3.tgz#bef84c4e75fb8dcb0ce5cee8efd51c15999befc5" + integrity sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g== + dependencies: + commander "^2.19.0" + lru-cache "^4.1.5" + semver "^5.6.0" + sigmund "^1.0.1" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -1044,6 +1112,13 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" +find-replace@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" + integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== + dependencies: + array-back "^3.0.1" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -1119,6 +1194,11 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" +generic-pool@3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.5.0.tgz#acac4fd743a175ff20574f380910036464cb61f7" + integrity sha512-dEkxmX+egB2o4NR80c/q+xzLLzLX+k68/K8xv81XprD+Sk7ZtP14VugeCz+fUwv5FzpWq40pPtAkzPRqT8ka9w== + get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -1300,6 +1380,11 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= +inflection@1.12.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.12.0.tgz#a200935656d6f5f6bc4dc7502e1aecb703228416" + integrity sha1-ogCTVlbW9fa8TcdQLhrstwMihBY= + inflection@^1.13.2: version "1.13.2" resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.13.2.tgz#15e8c797c6c3dadf31aa658f8df8a4ea024798b0" @@ -1323,7 +1408,7 @@ ini@2.0.0: resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== -ini@~1.3.0: +ini@^1.3.4, 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== @@ -1345,6 +1430,11 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-bluebird@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-bluebird/-/is-bluebird-1.0.2.tgz#096439060f4aa411abee19143a84d6a55346d6e2" + integrity sha1-CWQ5Bg9KpBGr7hkUOoTWpVNG1uI= + is-buffer@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -1467,6 +1557,16 @@ joi@17.x.x: "@sideway/formula" "^3.0.0" "@sideway/pinpoint" "^2.0.0" +js-beautify@^1.8.9: + version "1.14.0" + resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.14.0.tgz#2ce790c555d53ce1e3d7363227acf5dc69024c2d" + integrity sha512-yuck9KirNSCAwyNJbqW+BxJqJ0NLJ4PwBUzQQACl5O3qHMBXVkXb/rD0ilh/Lat/tn88zSZ+CAHOlk0DsY7GuQ== + dependencies: + config-chain "^1.1.12" + editorconfig "^0.15.3" + glob "^7.1.3" + nopt "^5.0.0" + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -1583,6 +1683,11 @@ lcid@^3.0.0: dependencies: invert-kv "^3.0.0" +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= + lodash.includes@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" @@ -1618,7 +1723,7 @@ lodash.once@^4.0.0: resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= -lodash@4.17.x, lodash@^4.17.20, lodash@^4.17.21: +lodash@4.17.x, lodash@^4.17.1, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -1640,6 +1745,14 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +lru-cache@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -1780,14 +1893,14 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -moment-timezone@^0.5.34: +moment-timezone@^0.5.14, moment-timezone@^0.5.34: version "0.5.34" resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.34.tgz#a75938f7476b88f155d3504a9343f7519d9a405c" integrity sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg== dependencies: moment ">= 2.9.0" -"moment@>= 2.9.0", moment@^2.29.1: +"moment@>= 2.9.0", moment@^2.20.0, moment@^2.29.1: version "2.29.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== @@ -1927,6 +2040,11 @@ object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= +object-hash@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" + integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== + on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -2042,6 +2160,11 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" @@ -2050,6 +2173,11 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + psl@^1.1.28: version "1.8.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" @@ -2222,6 +2350,14 @@ responselike@^1.0.2: dependencies: lowercase-keys "^1.0.0" +retry-as-promised@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/retry-as-promised/-/retry-as-promised-2.3.2.tgz#cd974ee4fd9b5fe03cbf31871ee48221c07737b7" + integrity sha1-zZdO5P2bX+A8vzGHHuSCIcB3N7c= + dependencies: + bluebird "^3.4.6" + debug "^2.6.9" + retry-as-promised@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/retry-as-promised/-/retry-as-promised-5.0.0.tgz#f4ecc25133603a2d2a7aff4a128691d7bc506d54" @@ -2264,7 +2400,7 @@ semver-diff@^3.1.1: dependencies: semver "^6.3.0" -semver@^5.3.0, semver@^5.6.0, semver@^5.7.1: +semver@^5.3.0, semver@^5.5.0, semver@^5.6.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -2300,6 +2436,19 @@ send@0.17.2: range-parser "~1.2.1" statuses "~1.5.0" +sequelize-auto-migrations-v2@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/sequelize-auto-migrations-v2/-/sequelize-auto-migrations-v2-1.2.1.tgz#0f5c68af9a1ad5697ac574eea06a4c7c65165de6" + integrity sha512-5ZeXZgW9Ea+reAnDRSikIoB0It78TjYYPAE2sIUjgUPTBNQgW4ftvK2btsXLfjEK3sP0U7nbHIrz4n01qqJfmg== + dependencies: + async "^2.5.1" + command-line-args "^5.0.2" + deep-diff "^0.3.8" + js-beautify "^1.8.9" + lodash "^4.17.11" + object-hash "^1.3.1" + sequelize "^4.42.0" + sequelize-pool@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/sequelize-pool/-/sequelize-pool-7.1.0.tgz#210b391af4002762f823188fd6ecfc7413020768" @@ -2312,6 +2461,29 @@ sequelize-typescript@^2.1.3: dependencies: glob "7.2.0" +sequelize@^4.42.0: + version "4.44.4" + resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-4.44.4.tgz#9607eaa3e59080d27d8b17481d2e449e87e58f18" + integrity sha512-nkHmYkbwQK7uwpgW9VBalCBnQqQ8mslTdgcBthtJLORuPvAYRPlfkXZMVUU9TLLJt9CX+/y0MYg0DpcP6ywsEQ== + dependencies: + bluebird "^3.5.0" + cls-bluebird "^2.1.0" + debug "^3.1.0" + depd "^1.1.0" + dottie "^2.0.0" + generic-pool "3.5.0" + inflection "1.12.0" + lodash "^4.17.1" + moment "^2.20.0" + moment-timezone "^0.5.14" + retry-as-promised "^2.3.2" + semver "^5.5.0" + terraformer-wkt-parser "^1.1.2" + toposort-class "^1.0.1" + uuid "^3.2.1" + validator "^10.4.0" + wkx "^0.4.1" + sequelize@^6.17.0: version "6.17.0" resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-6.17.0.tgz#78a21f39b8a7548c65c0cc2055e8231137c679a3" @@ -2366,6 +2538,16 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +shimmer@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" + integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw== + +sigmund@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" + integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" @@ -2530,6 +2712,21 @@ tar@^6.0.2, tar@^6.1.11: mkdirp "^1.0.3" yallist "^4.0.0" +terraformer-wkt-parser@^1.1.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/terraformer-wkt-parser/-/terraformer-wkt-parser-1.2.1.tgz#8041e2aeb0c9f2b4cbbec8ec2c5c00c45ddfee02" + integrity sha512-+CJyNLWb3lJ9RsZMTM66BY0MT3yIo4l4l22Jd9CrZuwzk54fsu4Sc7zejuS9fCITTuTQy3p06d4MZMVI7v5wSg== + dependencies: + "@types/geojson" "^1.0.0" + terraformer "~1.0.5" + +terraformer@~1.0.5: + version "1.0.12" + resolved "https://registry.yarnpkg.com/terraformer/-/terraformer-1.0.12.tgz#39e08f9c753606421acce02e122440c72dfa12d3" + integrity sha512-MokUp0+MFal4CmJDVL6VAO1bKegeXcBM2RnPVfqcFIp2IIv8EbPAjG0j/vEy/vuKB8NVMMSF2vfpVS/QLe4DBg== + optionalDependencies: + "@types/geojson" "^7946.0.0 || ^1.0.0" + to-readable-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" @@ -2669,6 +2866,11 @@ typescript@^4.6.2: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.2.tgz#fe12d2727b708f4eef40f51598b3398baa9611d4" integrity sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg== +typical@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" + integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== + undefsafe@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" @@ -2730,7 +2932,7 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.3.2: +uuid@^3.2.1, 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== @@ -2745,6 +2947,11 @@ v8-compile-cache-lib@^3.0.0: resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz#0582bcb1c74f3a2ee46487ceecf372e46bce53e8" integrity sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA== +validator@^10.4.0: + version "10.11.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-10.11.0.tgz#003108ea6e9a9874d31ccc9e5006856ccd76b228" + integrity sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw== + validator@^13.7.0: version "13.7.0" resolved "https://registry.yarnpkg.com/validator/-/validator-13.7.0.tgz#4f9658ba13ba8f3d82ee881d3516489ea85c0857" @@ -2798,6 +3005,13 @@ widest-line@^3.1.0: dependencies: string-width "^4.0.0" +wkx@^0.4.1: + version "0.4.8" + resolved "https://registry.yarnpkg.com/wkx/-/wkx-0.4.8.tgz#a092cf088d112683fdc7182fd31493b2c5820003" + integrity sha512-ikPXMM9IR/gy/LwiOSqWlSL3X/J5uk9EO2hHNRXS41eTLXaUFEVw9fn/593jW/tE5tedNg8YjT5HkCa4FqQZyQ== + dependencies: + "@types/node" "*" + wkx@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/wkx/-/wkx-0.5.0.tgz#c6c37019acf40e517cc6b94657a25a3d4aa33e8c" @@ -2839,6 +3053,11 @@ xmlcreate@^2.0.4: resolved "https://registry.yarnpkg.com/xmlcreate/-/xmlcreate-2.0.4.tgz#0c5ab0f99cdd02a81065fa9cd8f8ae87624889be" integrity sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg== +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"