├── .gitignore
├── README.md
├── client
├── .eslintrc.cjs
├── .gitignore
├── index.html
├── package.json
├── public
│ └── vite.svg
├── src
│ ├── App.css
│ ├── App.jsx
│ ├── assets
│ │ └── react.svg
│ ├── components
│ │ ├── header
│ │ │ ├── Header.jsx
│ │ │ ├── header.css
│ │ │ ├── header.css.map
│ │ │ └── header.scss
│ │ ├── registration
│ │ │ ├── Signin.jsx
│ │ │ ├── Signup.jsx
│ │ │ ├── registration.css
│ │ │ ├── registration.css.map
│ │ │ └── registration.scss
│ │ ├── sidebar
│ │ │ ├── Sidebar.css
│ │ │ ├── Sidebar.css.map
│ │ │ ├── Sidebar.jsx
│ │ │ └── Sidebar.scss
│ │ └── taskmanager
│ │ │ ├── AddTask.jsx
│ │ │ ├── EditTask.jsx
│ │ │ ├── ListCard.jsx
│ │ │ ├── TaskList.jsx
│ │ │ ├── addtask.scss
│ │ │ ├── listcard.scss
│ │ │ └── tasklist.scss
│ ├── history.js
│ ├── images
│ │ └── background.webp
│ ├── index.css
│ ├── main.jsx
│ ├── pages
│ │ ├── dashboard
│ │ │ ├── Dashboard.jsx
│ │ │ └── dashboard.scss
│ │ ├── home
│ │ │ ├── Home.jsx
│ │ │ ├── home.css
│ │ │ ├── home.css.map
│ │ │ └── home.scss
│ │ └── taskmanagement
│ │ │ ├── TaskManager.jsx
│ │ │ └── taskmanager.scss
│ ├── redux
│ │ ├── authSlice.js
│ │ ├── store.js
│ │ └── taskSlice.js
│ ├── styles
│ │ ├── abstract
│ │ │ └── _mixins.scss
│ │ ├── base
│ │ │ ├── _reset.scss
│ │ │ ├── _typography.scss
│ │ │ └── _variables.scss
│ │ ├── components
│ │ │ └── _button.scss
│ │ ├── main.css
│ │ ├── main.css.map
│ │ └── main.scss
│ └── utils
│ │ ├── PrivateRoutes.js
│ │ ├── PublicRoutes.js
│ │ └── RequireAuth.jsx
├── vite.config.js
└── yarn.lock
├── database
├── db.js
├── model
│ ├── task.model.js
│ └── user.model.js
├── package.json
└── yarn.lock
├── package.json
├── server
├── controllers
│ ├── authController.js
│ └── taskController.js
├── package.json
├── routes
│ ├── authRoutes.js
│ └── taskRoutes.js
├── server.js
└── yarn.lock
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | ot
2 | node_modules
3 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # task-manager
2 |
3 | ### to run app
4 | #### go to each individial folder and run yarn or yarn install
5 | #### go back to root folder and run yarn start
6 |
7 |
--------------------------------------------------------------------------------
/client/.eslintrc.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | env: { browser: true, es2020: true },
3 | extends: [
4 | 'eslint:recommended',
5 | 'plugin:react/recommended',
6 | 'plugin:react/jsx-runtime',
7 | 'plugin:react-hooks/recommended',
8 | ],
9 | parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },
10 | settings: { react: { version: '18.2' } },
11 | plugins: ['react-refresh'],
12 | rules: {
13 | 'react-refresh/only-export-components': 'warn',
14 | },
15 | }
16 |
--------------------------------------------------------------------------------
/client/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/client/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Task Manager
8 |
9 |
10 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/client/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "client",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "vite build",
9 | "lint": "eslint src --ext js,jsx --report-unused-disable-directives --max-warnings 0",
10 | "preview": "vite preview"
11 | },
12 | "dependencies": {
13 | "@reduxjs/toolkit": "^1.9.5",
14 | "axios": "^1.4.0",
15 | "express-jwt": "^8.4.1",
16 | "history": "^5.3.0",
17 | "react": "^18.2.0",
18 | "react-dom": "^18.2.0",
19 | "react-icons": "^4.10.1",
20 | "react-redux": "^8.1.1",
21 | "react-router-dom": "^6.14.1",
22 | "react-toastify": "^8.1.0",
23 | "sass": "^1.63.6"
24 | },
25 | "devDependencies": {
26 | "@types/react": "^18.0.37",
27 | "@types/react-dom": "^18.0.11",
28 | "@vitejs/plugin-react": "^4.0.0",
29 | "eslint": "^8.38.0",
30 | "eslint-plugin-react": "^7.32.2",
31 | "eslint-plugin-react-hooks": "^4.6.0",
32 | "eslint-plugin-react-refresh": "^0.3.4",
33 | "vite": "^4.3.9"
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/client/public/vite.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/client/src/App.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GunalBondre/task-manager/38357a78dae4f2b53286af946fd9e309b358ae6a/client/src/App.css
--------------------------------------------------------------------------------
/client/src/App.jsx:
--------------------------------------------------------------------------------
1 | import './App.css';
2 | import Header from './components/header/Header';
3 | import Signin from './components/registration/Signin';
4 | import Signup from './components/registration/Signup';
5 | import { BrowserRouter as Router, Route, Routes } from 'react-router-dom';
6 |
7 | import './styles/main.scss';
8 | import Home from './pages/home/Home';
9 | import TaskManager from './pages/taskmanagement/TaskManager';
10 | import Dashboard from './pages/dashboard/Dashboard';
11 | import RequireAuth from './utils/RequireAuth';
12 | import { useSelector } from 'react-redux';
13 |
14 | function App() {
15 | const { auth } = useSelector((state) => ({ ...state }));
16 | return (
17 |
18 |
19 |
20 |
21 | } />
22 | : }
25 | />
26 | : }
29 | />
30 |
34 |
35 |
36 | }
37 | />
38 |
42 |
43 |
44 | }
45 | />
46 |
47 |
48 |
49 | );
50 | }
51 |
52 | export default App;
53 |
--------------------------------------------------------------------------------
/client/src/assets/react.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/client/src/components/header/Header.jsx:
--------------------------------------------------------------------------------
1 | import './header.scss';
2 | import '../../styles/components/_button.scss';
3 | import { useSelector, useDispatch } from 'react-redux';
4 | import { Link } from 'react-router-dom';
5 | import { logoutSuccess } from '../../redux/authSlice';
6 | import history from '../../history';
7 |
8 | const Header = () => {
9 | const dispatch = useDispatch();
10 | const { auth } = useSelector((state) => ({ ...state }));
11 |
12 | const handleClick = (e) => {
13 | e.preventDefault();
14 | dispatch(logoutSuccess());
15 | localStorage.removeItem('auth');
16 | history.push('/signin');
17 | window.location.reload();
18 | };
19 | return (
20 |
21 |
42 |
43 | );
44 | };
45 |
46 | export default Header;
47 |
--------------------------------------------------------------------------------
/client/src/components/header/header.css:
--------------------------------------------------------------------------------
1 | .header {
2 | display: flex;
3 | justify-content: space-between;
4 | background-color: red;
5 | align-items: center;
6 | height: 60px;
7 | padding: 0 20px;
8 | }
9 | .header__logo h5 {
10 | color: white;
11 | font-weight: 300;
12 | }
13 | .header .button {
14 | background-color: white;
15 | }/*# sourceMappingURL=header.css.map */
--------------------------------------------------------------------------------
/client/src/components/header/header.css.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["header.scss","header.css"],"names":[],"mappings":"AAAA;EACI,aAAA;EACA,8BAAA;EACA,qBAAA;EACA,mBAAA;EACA,YAAA;EACA,eAAA;ACCJ;ADEQ;EACI,YAAA;EACA,gBAAA;ACAZ;ADII;EACI,uBAAA;ACFR","file":"header.css"}
--------------------------------------------------------------------------------
/client/src/components/header/header.scss:
--------------------------------------------------------------------------------
1 | .header {
2 | display: flex;
3 | justify-content: space-between;
4 | background-color: red;
5 | align-items: center;
6 | height: 60px;
7 | padding: 0 20px;
8 |
9 | &__logo {
10 | h5 {
11 | color: white;
12 | font-weight: 300;
13 | }
14 | }
15 |
16 | .button {
17 | background-color: white;
18 |
19 | }
20 |
21 |
22 | }
--------------------------------------------------------------------------------
/client/src/components/registration/Signin.jsx:
--------------------------------------------------------------------------------
1 | import './registration.scss';
2 | import '../../styles/components/_button.scss';
3 | import { useState } from 'react';
4 | import { useDispatch } from 'react-redux';
5 | import { signin } from '../../redux/authSlice';
6 |
7 | const Signin = () => {
8 | const dispatch = useDispatch();
9 |
10 | const [state, setState] = useState({
11 | email: '',
12 | password: '',
13 | });
14 |
15 | const handleChange = (e) => {
16 | setState({
17 | ...state,
18 | [e.target.name]: e.target.value,
19 | });
20 | };
21 |
22 | const handleSubmit = (e) => {
23 | e.preventDefault();
24 | dispatch(
25 | signin({
26 | email: state.email,
27 | password: state.password,
28 | })
29 | );
30 | };
31 |
32 | return (
33 |
63 | );
64 | };
65 |
66 | export default Signin;
67 |
--------------------------------------------------------------------------------
/client/src/components/registration/Signup.jsx:
--------------------------------------------------------------------------------
1 | import './registration.scss';
2 | import '../../styles/components/_button.scss';
3 | import { useState } from 'react';
4 | import { useDispatch } from 'react-redux';
5 | import { register } from '../../redux/authSlice';
6 |
7 | const Signup = () => {
8 | const dispatch = useDispatch();
9 | const [state, setState] = useState({
10 | email: '',
11 | password: '',
12 | username: '',
13 | });
14 |
15 | const handleSubmit = (e) => {
16 | e.preventDefault();
17 |
18 | dispatch(
19 | register({
20 | username: state.username,
21 | password: state.password,
22 | email: state.email,
23 | })
24 | );
25 | };
26 | const handleChange = (e) => {
27 | setState({
28 | ...state,
29 | [e.target.name]: e.target.value,
30 | });
31 | };
32 |
33 | console.log(state.email, state.password, state.username);
34 | return (
35 |
75 | );
76 | };
77 |
78 | export default Signup;
79 |
--------------------------------------------------------------------------------
/client/src/components/registration/registration.css:
--------------------------------------------------------------------------------
1 | .signup-form {
2 | width: 100vw;
3 | height: 100vh;
4 | display: flex;
5 | flex-direction: row;
6 | justify-content: center;
7 | align-items: center;
8 | }
9 | .signup-form__wrapper {
10 | width: 50%;
11 | height: 400px;
12 | }
13 | .signup-form__wrapper .form {
14 | width: 100%;
15 | height: 100%;
16 | padding: 10px;
17 | display: flex;
18 | flex-direction: column;
19 | justify-content: center;
20 | align-items: center;
21 | box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
22 | border-radius: 10px;
23 | }
24 | .signup-form__wrapper .form .form-group {
25 | margin-bottom: 1rem;
26 | width: 50%;
27 | text-align: center;
28 | }
29 | .signup-form__wrapper .form .form-group input {
30 | width: 100%;
31 | padding: 1rem;
32 | outline: none;
33 | }/*# sourceMappingURL=registration.css.map */
--------------------------------------------------------------------------------
/client/src/components/registration/registration.css.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["registration.scss","../../styles/abstract/_mixins.scss","registration.css"],"names":[],"mappings":"AAEA;EACI,YAAA;EACA,aAAA;ECIA,aDHqB;ECIrB,mBDJ2B;ECK3B,uBDLgC;ECMhC,mBDNwC;AEE5C;AFAI;EACI,UAAA;EACA,aAAA;AEER;AFAQ;EACI,WAAA;EACA,YAAA;EACA,aAAA;ECNR,aDO6B;ECN7B,sBDMmC;ECLnC,uBDK2C;ECJ3C,mBDImD;EAC3C,4EAAA;EACA,mBAAA;AEKZ;AFHY;EACI,mBAAA;EACA,UAAA;EACA,kBAAA;AEKhB;AFHgB;EACI,WAAA;EACA,aAAA;EACA,aAAA;AEKpB","file":"registration.css"}
--------------------------------------------------------------------------------
/client/src/components/registration/registration.scss:
--------------------------------------------------------------------------------
1 | @import '../../styles/abstract/mixins';
2 |
3 | .signup-form {
4 | width: 100vw;
5 | height: 100vh;
6 | @include flex-center(flex, row, center, center);
7 |
8 | &__wrapper {
9 | width: 50%;
10 | height: 400px;
11 |
12 | .form {
13 | width: 100%;
14 | height: 100%;
15 | padding: 10px;
16 | @include flex-center(flex, column, center, center);
17 | box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
18 | border-radius: 10px;
19 |
20 | .form-group {
21 | margin-bottom: 1rem;
22 | width: 50%;
23 | text-align: center;
24 |
25 | input {
26 | width: 100%;
27 | padding: 1rem;
28 | outline: none;
29 | }
30 |
31 | }
32 | }
33 |
34 | }
35 | }
--------------------------------------------------------------------------------
/client/src/components/sidebar/Sidebar.css:
--------------------------------------------------------------------------------
1 | .sidebar {
2 | background-color: teal;
3 | color: white;
4 | height: 100vh;
5 | padding: 1rem;
6 | max-width: 15vw;
7 | }
8 | .sidebar .list-item {
9 | margin: 1rem 0;
10 | }/*# sourceMappingURL=Sidebar.css.map */
--------------------------------------------------------------------------------
/client/src/components/sidebar/Sidebar.css.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["Sidebar.scss","Sidebar.css"],"names":[],"mappings":"AAAA;EACI,sBAAA;EACA,YAAA;EACA,aAAA;EACA,aAAA;EACA,eAAA;ACCJ;ADCI;EACI,cAAA;ACCR","file":"Sidebar.css"}
--------------------------------------------------------------------------------
/client/src/components/sidebar/Sidebar.jsx:
--------------------------------------------------------------------------------
1 | import './Sidebar.scss';
2 | import { useSelector } from 'react-redux';
3 | import { Link } from 'react-router-dom';
4 |
5 | const Sidebar = () => {
6 | const { auth } = useSelector((state) => ({ ...state }));
7 | const { currentUser } = auth;
8 |
9 | return (
10 |
11 |
12 | -
13 |
{currentUser.username}
14 |
15 | -
16 | Dashboard
17 |
18 | -
19 | Settings
20 |
21 |
22 |
23 | );
24 | };
25 |
26 | export default Sidebar;
27 |
--------------------------------------------------------------------------------
/client/src/components/sidebar/Sidebar.scss:
--------------------------------------------------------------------------------
1 | .sidebar {
2 | background-color: teal;
3 | color: white;
4 | height: 100vh;
5 | padding: 1rem;
6 | max-width: 15vw;
7 |
8 | .list-item {
9 | margin: 1rem 0;
10 | }
11 | }
--------------------------------------------------------------------------------
/client/src/components/taskmanager/AddTask.jsx:
--------------------------------------------------------------------------------
1 | import { useState } from 'react';
2 | import './addtask.scss';
3 | import { addTask } from '../../redux/taskSlice';
4 | import { useDispatch, useSelector } from 'react-redux';
5 |
6 | const AddTask = () => {
7 | const dispatch = useDispatch();
8 | const { auth } = useSelector((state) => ({ ...state }));
9 | const { currentUser } = auth;
10 | const [state, setState] = useState({
11 | task: '',
12 | });
13 |
14 | const handleChange = (e) => {
15 | setState({
16 | ...state,
17 | [e.target.name]: e.target.value,
18 | });
19 | };
20 |
21 | const handleSubmit = (e) => {
22 | e.preventDefault();
23 | dispatch(addTask(state.task, currentUser.id));
24 | setState({
25 | task: '',
26 | });
27 | };
28 |
29 | return (
30 |
44 | );
45 | };
46 |
47 | export default AddTask;
48 |
--------------------------------------------------------------------------------
/client/src/components/taskmanager/EditTask.jsx:
--------------------------------------------------------------------------------
1 | const EditTask = () => {
2 | return EditTask
;
3 | };
4 |
5 | export default EditTask;
6 |
--------------------------------------------------------------------------------
/client/src/components/taskmanager/ListCard.jsx:
--------------------------------------------------------------------------------
1 | /* eslint-disable react/prop-types */
2 | import './listcard.scss';
3 | import { BiChevronLeft, BiChevronRight, BiTrash } from 'react-icons/bi';
4 | import { arrowClick, deleteItem } from '../../redux/taskSlice';
5 | import { useDispatch } from 'react-redux';
6 |
7 | const ListCard = (items) => {
8 | const { item } = items;
9 |
10 | const dispatch = useDispatch();
11 |
12 | const ArrowClick = (string) => {
13 | dispatch(arrowClick(item, string));
14 | };
15 | const handleDelete = () => {
16 | dispatch(deleteItem(item._id));
17 | };
18 |
19 | return (
20 |
21 |
22 | -
23 |
{item._id}
24 |
25 | -
26 |
{item.task}
27 |
28 | -
29 |
{item.status}
30 |
31 | -
32 |
38 |
44 |
47 |
48 |
49 |
50 | );
51 | };
52 |
53 | export default ListCard;
54 |
--------------------------------------------------------------------------------
/client/src/components/taskmanager/TaskList.jsx:
--------------------------------------------------------------------------------
1 | import { useEffect } from 'react';
2 | import { useDispatch, useSelector } from 'react-redux';
3 | import { getAllTasks } from '../../redux/taskSlice';
4 | import ListCard from './ListCard';
5 | import './tasklist.scss';
6 |
7 | const TaskList = () => {
8 | const auth = useSelector((state) => state.auth);
9 | const tasks = useSelector((state) => state.task);
10 |
11 | const { currentUser } = auth;
12 | const { AllTasks } = tasks;
13 |
14 | const dispatch = useDispatch();
15 |
16 | useEffect(() => {
17 | dispatch(getAllTasks(currentUser.token, currentUser.id));
18 | }, [dispatch, currentUser.token, currentUser.id]);
19 |
20 | return (
21 |
22 |
23 | -
24 |
Id
25 |
26 | -
27 |
Issue Name
28 |
29 | -
30 |
Status
31 |
32 | -
33 |
Action
34 |
35 |
36 | {Object.values(AllTasks).map((item) => {
37 | return
;
38 | })}
39 |
40 | );
41 | };
42 |
43 | export default TaskList;
44 |
--------------------------------------------------------------------------------
/client/src/components/taskmanager/addtask.scss:
--------------------------------------------------------------------------------
1 | .addtask {
2 | width: 100%;
3 |
4 | form {
5 | width: 70%;
6 | margin: 3rem;
7 | display: flex;
8 |
9 | }
10 |
11 | input {
12 | padding: 5px;
13 | width: 30rem;
14 | border: none;
15 | outline: none;
16 | background-color: whitesmoke;
17 | border-radius: 5px;
18 |
19 | }
20 | }
--------------------------------------------------------------------------------
/client/src/components/taskmanager/listcard.scss:
--------------------------------------------------------------------------------
1 | .menu {
2 | display: flex;
3 | justify-content: space-between;
4 | align-items: center;
5 | box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
6 | margin: 1rem auto;
7 | width: 90%;
8 |
9 | li {
10 | padding: 1rem;
11 | flex: 1;
12 |
13 | button {
14 | margin: 5px;
15 | }
16 | }
17 |
18 | p {
19 | font-size: 14px;
20 | }
21 | }
22 |
23 | .completed {
24 | background-color: green;
25 | color: white;
26 | }
--------------------------------------------------------------------------------
/client/src/components/taskmanager/tasklist.scss:
--------------------------------------------------------------------------------
1 | .list-header {
2 | display: flex;
3 | justify-content: space-between;
4 | align-items: center;
5 | margin: 0 auto;
6 | width: 90%;
7 | background-color: red;
8 | padding: 1rem;
9 | color: white;
10 |
11 | li {
12 | flex: 1;
13 | }
14 |
15 | h5 {
16 | font-size: 14px;
17 | }
18 | }
--------------------------------------------------------------------------------
/client/src/history.js:
--------------------------------------------------------------------------------
1 | import { createBrowserHistory } from 'history';
2 | export default createBrowserHistory({ forceRefresh: true });
3 |
--------------------------------------------------------------------------------
/client/src/images/background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GunalBondre/task-manager/38357a78dae4f2b53286af946fd9e309b358ae6a/client/src/images/background.webp
--------------------------------------------------------------------------------
/client/src/index.css:
--------------------------------------------------------------------------------
1 | * {
2 | margin: 0;
3 | padding: 0;
4 | box-sizing: border-box;
5 | }
6 |
7 | body {
8 | font-family: 'Roboto', sans-serif;
9 | font-size: 62.5%;
10 | }
11 | a {
12 | text-decoration: none;
13 | color: inherit;
14 | font-size: 1rem;
15 | }
16 |
17 | li {
18 | list-style: none;
19 | }
20 |
--------------------------------------------------------------------------------
/client/src/main.jsx:
--------------------------------------------------------------------------------
1 | import ReactDOM from 'react-dom/client';
2 | import App from './App.jsx';
3 | import './index.css';
4 |
5 | import { store } from './redux/store';
6 | import { Provider } from 'react-redux';
7 |
8 | ReactDOM.createRoot(document.getElementById('root')).render(
9 |
10 |
11 |
12 | );
13 |
--------------------------------------------------------------------------------
/client/src/pages/dashboard/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import Sidebar from '../../components/sidebar/Sidebar';
2 | import { Link } from 'react-router-dom';
3 | import { useSelector, useDispatch } from 'react-redux';
4 | import './dashboard.scss';
5 | import { useEffect } from 'react';
6 | import { getAllTasks } from '../../redux/taskSlice';
7 | const Dashboard = () => {
8 | const tasklist = useSelector((state) => state.task);
9 | const { AllTasks } = tasklist;
10 | const user = useSelector((state) => state.auth);
11 | const { currentUser } = user;
12 |
13 | let pendingTask = [];
14 | let completedTask = [];
15 | for (let i = 0; i < AllTasks.length; i++) {
16 | if (AllTasks[i].status === 'todo') {
17 | pendingTask.push(AllTasks[i]);
18 | } else if (AllTasks[i].status === 'done') {
19 | completedTask.push(AllTasks[i]);
20 | }
21 | }
22 |
23 | const dispatch = useDispatch();
24 | useEffect(() => {
25 | dispatch(getAllTasks(currentUser.token, currentUser.id));
26 | }, [dispatch, currentUser.token, currentUser.id]);
27 |
28 | return (
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
Task Status Dashboard
37 |
38 |
Todo - {pendingTask.length}
39 |
Complete - {completedTask.length}
40 |
41 |
42 |
43 | Create Task
44 |
45 |
46 |
47 |
48 |
49 |
50 | );
51 | };
52 |
53 | export default Dashboard;
54 |
--------------------------------------------------------------------------------
/client/src/pages/dashboard/dashboard.scss:
--------------------------------------------------------------------------------
1 | @import '../../styles/abstract/mixins';
2 |
3 | .dashboard {
4 | width: 100%;
5 | height: 100vh;
6 | display: flex;
7 |
8 | &__left {
9 | width: 15%;
10 | }
11 |
12 | &__right {
13 | width: 85%;
14 | margin-top: 2rem;
15 | }
16 |
17 | .box {
18 | width: 150px;
19 | height: 100px;
20 | border-radius: 10px;
21 | box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
22 | @include flex-center(flex, row, center, center);
23 | margin: 3rem 0;
24 | }
25 |
26 | .taskcount {
27 | display: flex;
28 | width: 100%;
29 | justify-content: space-evenly;
30 | }
31 |
32 | &__rightContent {
33 | width: 100%;
34 | text-align: center;
35 |
36 | }
37 |
38 | .button {
39 | background-color: red;
40 | color: white;
41 | width: 20rem;
42 |
43 | }
44 | }
--------------------------------------------------------------------------------
/client/src/pages/home/Home.jsx:
--------------------------------------------------------------------------------
1 | import './home.scss';
2 |
3 | import { useSelector } from 'react-redux';
4 | import { Link } from 'react-router-dom';
5 | const Home = () => {
6 | const { auth } = useSelector((state) => ({ ...state }));
7 | const { currentUser } = auth;
8 | return (
9 |
10 |
11 |
Organize it all
12 |
With TaskManager
13 |
14 | {currentUser && currentUser.token ? (
15 |
16 | Get Started
17 |
18 | ) : (
19 |
20 | Get Started
21 |
22 | )}
23 |
24 |
25 | );
26 | };
27 |
28 | export default Home;
29 |
--------------------------------------------------------------------------------
/client/src/pages/home/home.css:
--------------------------------------------------------------------------------
1 | .home {
2 | width: 100%;
3 | height: 100vh;
4 | background: url("../../images/background.webp") no-repeat;
5 | background-size: cover;
6 | display: flex;
7 | flex-direction: row;
8 | justify-content: center;
9 | align-items: center;
10 | }
11 | .home__container {
12 | width: 50%;
13 | text-align: center;
14 | }
15 | .home__container h2 {
16 | font-size: 42px;
17 | }
18 | .home__container .button {
19 | background-color: red;
20 | color: white;
21 | margin-top: 1rem;
22 | font-size: 1.2rem;
23 | display: inline-block;
24 | }/*# sourceMappingURL=home.css.map */
--------------------------------------------------------------------------------
/client/src/pages/home/home.css.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["home.scss","../../styles/abstract/_mixins.scss","home.css"],"names":[],"mappings":"AAEA;EACI,WAAA;EACA,aAAA;EACA,yDAAA;EACA,sBAAA;ECEA,aAAA;EACA,mBDD2B;ECE3B,uBDFgC;ECGhC,mBDHwC;AEC5C;AFCI;EACI,UAAA;EACA,kBAAA;AECR;AFCQ;EACI,eAAA;AECZ;AFEQ;EACI,qBAAA;EACA,YAAA;EACA,gBAAA;EACA,iBAAA;EACA,qBAAA;AEAZ","file":"home.css"}
--------------------------------------------------------------------------------
/client/src/pages/home/home.scss:
--------------------------------------------------------------------------------
1 | @import '../../styles/abstract/mixins';
2 |
3 | .home {
4 | width: 100%;
5 | height: 100vh;
6 | background: url('../../images/background.webp') no-repeat;
7 | background-size: cover;
8 |
9 | @include flex-center(flex, row, center, center);
10 |
11 | &__container {
12 | width: 50%;
13 | text-align: center;
14 |
15 | h2 {
16 | font-size: 42px;
17 | }
18 |
19 | .button {
20 | background-color: red;
21 | color: white;
22 | margin-top: 1rem;
23 | font-size: 1.2rem;
24 | display: inline-block;
25 | }
26 | }
27 | }
--------------------------------------------------------------------------------
/client/src/pages/taskmanagement/TaskManager.jsx:
--------------------------------------------------------------------------------
1 | import Sidebar from '../../components/sidebar/Sidebar';
2 | import AddTask from '../../components/taskmanager/AddTask';
3 | import TaskList from '../../components/taskmanager/TaskList';
4 | import './taskmanager.scss';
5 |
6 | const TaskManager = () => {
7 | return (
8 |
23 | );
24 | };
25 |
26 | export default TaskManager;
27 |
--------------------------------------------------------------------------------
/client/src/pages/taskmanagement/taskmanager.scss:
--------------------------------------------------------------------------------
1 | .taskmanager {
2 | width: 100%;
3 | display: flex;
4 |
5 | &__left {
6 | width: 15%;
7 | }
8 |
9 | &__right {
10 | width: 85%;
11 | }
12 |
13 | }
--------------------------------------------------------------------------------
/client/src/redux/authSlice.js:
--------------------------------------------------------------------------------
1 | import { createSlice } from '@reduxjs/toolkit';
2 | import axios from 'axios';
3 | import history from '../history';
4 | import { toast } from 'react-toastify';
5 |
6 | const initialUser = localStorage.getItem('auth')
7 | ? JSON.parse(localStorage.getItem('auth'))
8 | : null;
9 |
10 | const initialState = {
11 | isLoading: false,
12 | currentUser: initialUser,
13 | error: null,
14 | };
15 | export const authSlice = createSlice({
16 | name: 'auth',
17 | initialState: initialState,
18 | reducers: {
19 | loginSuccess: (state, action) => {
20 | state.currentUser = action.payload;
21 | state.isLoading = false;
22 | },
23 | loginFailure: (state, action) => {
24 | state.error = action.payload;
25 | },
26 | registerSuccess: (state, action) => {
27 | state.currentUser = action.payload;
28 | state.isLoading = false;
29 | },
30 | registerFailure: (state, action) => {
31 | state.error = action.payload;
32 | },
33 | logoutSuccess: (state) => {
34 | state.currentUser = null;
35 | },
36 | },
37 | });
38 |
39 | export const {
40 | loginFailure,
41 | loginSuccess,
42 | registerFailure,
43 | registerSuccess,
44 | logoutSuccess,
45 | } = authSlice.actions;
46 |
47 | export default authSlice.reducer;
48 |
49 | export const register = (user) => async (dispatch) => {
50 | try {
51 | const config = {
52 | headers: {
53 | 'content-type': 'application/json',
54 | },
55 | };
56 |
57 | const response = await axios.post(
58 | 'http://localhost:4000/auth/register',
59 | user,
60 | config
61 | );
62 |
63 | if (response) {
64 | dispatch(registerSuccess(response.data));
65 | toast.success('register successfull');
66 | history.push('/signin');
67 | window.location.reload();
68 | } else {
69 | dispatch(registerFailure());
70 | toast.error('registration failed');
71 | }
72 | } catch (error) {
73 | console.log(error);
74 | dispatch(registerFailure());
75 | }
76 | };
77 |
78 | export const signin = (user) => async (dispatch) => {
79 | console.log(user);
80 | try {
81 | const userData = {
82 | email: user.email,
83 | password: user.password,
84 | };
85 | const response = await axios.post(
86 | 'http://localhost:4000/auth/signin',
87 | userData
88 | );
89 | if (response) {
90 | localStorage.setItem('auth', JSON.stringify(response.data));
91 | dispatch(loginSuccess(response.data));
92 |
93 | history.push('/dashboard');
94 | toast.success('login successfull');
95 |
96 | window.location.reload();
97 | } else {
98 | dispatch(loginFailure());
99 | toast.error('login failed');
100 | }
101 | } catch (error) {
102 | dispatch(loginFailure());
103 | }
104 | };
105 |
--------------------------------------------------------------------------------
/client/src/redux/store.js:
--------------------------------------------------------------------------------
1 | import { configureStore } from '@reduxjs/toolkit';
2 |
3 | import authReducer from './authSlice';
4 | import taskReducer from './taskSlice';
5 |
6 | export const store = configureStore({
7 | reducer: { auth: authReducer, task: taskReducer },
8 | });
9 |
--------------------------------------------------------------------------------
/client/src/redux/taskSlice.js:
--------------------------------------------------------------------------------
1 | import { createSlice } from '@reduxjs/toolkit';
2 | import axios from 'axios';
3 | import { toast } from 'react-toastify';
4 |
5 | const initalTask = localStorage.getItem('task')
6 | ? JSON.parse(localStorage.getItem('task'))
7 | : null;
8 |
9 | const initialState = {
10 | TaskData: initalTask,
11 | AllTasks: {},
12 | };
13 | export const taskSlice = createSlice({
14 | name: 'Task',
15 | initialState,
16 |
17 | reducers: {
18 | taskAddedSuccessfully: (state, action) => {
19 | state.TaskData = action.payload;
20 | },
21 | taskAddFailure: (state) => {
22 | return state;
23 | },
24 | getAllTaskSuccess: (state, action) => {
25 | state.AllTasks = action.payload;
26 | },
27 | getAllTaskFailure: (state) => {
28 | return state;
29 | },
30 |
31 | editTaskSuccess: (state, action) => {
32 | state.TaskData = action.payload;
33 | },
34 |
35 | deleteSuccess: (state, action) => {
36 | state.TaskData = action.payload;
37 | },
38 | deletefail: (state) => {
39 | return state;
40 | },
41 | },
42 | });
43 |
44 | export const {
45 | taskAddFailure,
46 | taskAddedSuccessfully,
47 | getAllTaskFailure,
48 | getAllTaskSuccess,
49 | deleteSuccess,
50 | deletefail,
51 | editTaskSuccess,
52 | } = taskSlice.actions;
53 |
54 | export default taskSlice.reducer;
55 |
56 | export const addTask = (task, id) => async (dispatch) => {
57 | const taskData = {
58 | task,
59 | id,
60 | };
61 | const response = await axios.post('http://localhost:4000/task/add', taskData);
62 | if (response) {
63 | localStorage.setItem('task', JSON.stringify(response.data));
64 |
65 | dispatch(taskAddedSuccessfully(response.data));
66 | toast.success('task added successfully');
67 | window.location.reload();
68 | } else {
69 | dispatch(taskAddFailure());
70 | }
71 | };
72 |
73 | export const getAllTasks = (token, id) => async (dispatch) => {
74 | const config = {
75 | headers: {
76 | Authorization: `Bearer ${token}`,
77 | },
78 | params: {
79 | id,
80 | },
81 | };
82 |
83 | try {
84 | const response = await axios.get(
85 | 'http://localhost:4000/task/tasks',
86 | config
87 | );
88 |
89 | if (response) {
90 | dispatch(getAllTaskSuccess(response.data));
91 | }
92 | } catch (error) {
93 | if (error.response.status === 400) {
94 | dispatch(getAllTaskFailure());
95 | }
96 | }
97 | };
98 |
99 | export const arrowClick = (item, string) => async () => {
100 | let taskData = {
101 | id: item._id,
102 | status: item.status,
103 | string,
104 | };
105 |
106 | try {
107 | let response = await axios.put(
108 | `http://localhost:4000/task/${taskData.id}`,
109 | taskData
110 | );
111 |
112 | if (response) {
113 | window.location.reload();
114 | }
115 | } catch (error) {
116 | console.log(error);
117 | }
118 | };
119 |
120 | export const deleteItem = (id) => async (dispatch) => {
121 | let res = await axios.delete(`http://localhost:4000/task/${id}`);
122 |
123 | if (res) {
124 | dispatch(deleteSuccess());
125 | toast.success('task deleted successfully');
126 |
127 | window.location.reload();
128 | } else {
129 | dispatch(deletefail());
130 | }
131 | };
132 |
--------------------------------------------------------------------------------
/client/src/styles/abstract/_mixins.scss:
--------------------------------------------------------------------------------
1 | // Heading styles
2 | @mixin heading-style($font-size, $font-weight, $line-height) {
3 | font-size: $font-size;
4 | font-weight: $font-weight;
5 | line-height: $line-height;
6 | }
7 |
8 | @mixin flex-center($display, $direction, $justify, $align) {
9 | display: $display;
10 | flex-direction: $direction;
11 | justify-content: $justify;
12 | align-items: $align;
13 | }
--------------------------------------------------------------------------------
/client/src/styles/base/_reset.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GunalBondre/task-manager/38357a78dae4f2b53286af946fd9e309b358ae6a/client/src/styles/base/_reset.scss
--------------------------------------------------------------------------------
/client/src/styles/base/_typography.scss:
--------------------------------------------------------------------------------
1 | @import './variables';
2 | @import '../abstract/mixins';
3 |
4 |
5 |
6 | h1 {
7 | @include heading-style($font-size-xxl, $font-weight-bold, $line-height-sm);
8 | }
9 |
10 | h2 {
11 | @include heading-style($font-size-xl, $font-weight-bold, $line-height-md);
12 | }
13 |
14 | h3 {
15 | @include heading-style($font-size-lg, $font-weight-bold, $line-height-md);
16 | }
17 |
18 | h4 {
19 | @include heading-style($font-size-md, $font-weight-medium, $line-height-lg);
20 | }
21 |
22 | h5 {
23 | @include heading-style($font-size-sm, $font-weight-medium, $line-height-lg);
24 | }
25 |
26 | h6 {
27 | @include heading-style($font-size-xs, $font-weight-medium, $line-height-lg);
28 | }
29 |
30 | // Paragraph style
31 | p {
32 | font-size: $font-size-md;
33 | font-weight: $font-weight-regular;
34 | line-height: $line-height-md;
35 | }
--------------------------------------------------------------------------------
/client/src/styles/base/_variables.scss:
--------------------------------------------------------------------------------
1 | // Define font sizes in rems
2 | $font-size-xs: 1rem; // 10px
3 | $font-size-sm: 1.4rem; // 14px
4 | $font-size-md: 1.6rem; // 16px
5 | $font-size-lg: 1.8rem; // 18px
6 | $font-size-xl: 2.0rem; // 20px
7 | $font-size-xxl: 2.4rem; // 24px
8 |
9 | // Define font weights
10 | $font-weight-light: 300;
11 | $font-weight-regular: 400;
12 | $font-weight-medium: 500;
13 | $font-weight-bold: 700;
14 |
15 | // Define line heights
16 | $line-height-sm: 1.4;
17 | $line-height-md: 1.6;
18 | $line-height-lg: 1.8;
--------------------------------------------------------------------------------
/client/src/styles/components/_button.scss:
--------------------------------------------------------------------------------
1 | .button {
2 | margin-left: 10px;
3 | padding: 10px;
4 | border: none;
5 | outline: none;
6 | border-radius: 5px;
7 | min-width: 150px;
8 | cursor: pointer;
9 | display: inline-block;
10 | text-align: center;
11 | }
--------------------------------------------------------------------------------
/client/src/styles/main.css:
--------------------------------------------------------------------------------
1 | h1 {
2 | font-size: 2.4rem;
3 | font-weight: 700;
4 | line-height: 1.4;
5 | }
6 |
7 | h2 {
8 | font-size: 2rem;
9 | font-weight: 700;
10 | line-height: 1.6;
11 | }
12 |
13 | h3 {
14 | font-size: 1.8rem;
15 | font-weight: 700;
16 | line-height: 1.6;
17 | }
18 |
19 | h4 {
20 | font-size: 1.6rem;
21 | font-weight: 500;
22 | line-height: 1.8;
23 | }
24 |
25 | h5 {
26 | font-size: 1.4rem;
27 | font-weight: 500;
28 | line-height: 1.8;
29 | }
30 |
31 | h6 {
32 | font-size: 1rem;
33 | font-weight: 500;
34 | line-height: 1.8;
35 | }
36 |
37 | p {
38 | font-size: 1.6rem;
39 | font-weight: 400;
40 | line-height: 1.6;
41 | }/*# sourceMappingURL=main.css.map */
--------------------------------------------------------------------------------
/client/src/styles/main.css.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["base/_typography.scss","abstract/_mixins.scss","base/_variables.scss","main.css"],"names":[],"mappings":"AAKA;ECHI,iBCIY;EDHZ,gBCSe;EDRf,gBCWa;ACXjB;;AHKA;ECPI,eCGW;EDFX,gBCSe;EDRf,gBCYa;ACNjB;;AHGA;ECXI,iBCEW;EDDX,gBCSe;EDRf,gBCYa;ACAjB;;AHCA;ECfI,iBCCW;EDAX,gBCQiB;EDPjB,gBCaa;ACKjB;;AHDA;ECnBI,iBAAA;EACA,gBCQiB;EDPjB,gBCaa;ACWjB;;AHHA;ECvBI,eCDW;EDEX,gBCQiB;EDPjB,gBCaa;ACiBjB;;AHJA;EACI,iBE5BW;EF6BX,gBEtBkB;EFuBlB,gBEjBa;ACwBjB","file":"main.css"}
--------------------------------------------------------------------------------
/client/src/styles/main.scss:
--------------------------------------------------------------------------------
1 | @import './base/reset';
2 | @import './base/variables';
3 | @import './base/typography';
4 | @import './abstract/mixins';
--------------------------------------------------------------------------------
/client/src/utils/PrivateRoutes.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GunalBondre/task-manager/38357a78dae4f2b53286af946fd9e309b358ae6a/client/src/utils/PrivateRoutes.js
--------------------------------------------------------------------------------
/client/src/utils/PublicRoutes.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Route, Navigate } from 'react-router-dom';
3 | import { useSelector } from 'react-redux';
4 |
5 | const PublicRoutes = ({ ...rest }) => {
6 | const { auth } = useSelector((state) => ({ ...state }));
7 |
8 | return !auth.currentUser ? : ;
9 | };
10 |
11 | export default PublicRoutes;
12 |
--------------------------------------------------------------------------------
/client/src/utils/RequireAuth.jsx:
--------------------------------------------------------------------------------
1 | /* eslint-disable react/prop-types */
2 | import { Navigate, useLocation } from 'react-router-dom';
3 | import { useSelector } from 'react-redux';
4 | const RequireAuth = ({ children }) => {
5 | const isLoggedIn = useSelector((state) => state.auth);
6 | const location = useLocation();
7 |
8 | if (!isLoggedIn.currentUser) {
9 | return ;
10 | }
11 | return children;
12 | };
13 |
14 | export default RequireAuth;
15 |
--------------------------------------------------------------------------------
/client/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | })
8 |
--------------------------------------------------------------------------------
/database/db.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 |
3 | const mongoURI = 'mongodb://127.0.0.1:27017/task-manager';
4 | const options = {
5 | useNewUrlParser: true,
6 | useUnifiedTopology: true,
7 | };
8 |
9 | mongoose
10 | .connect(mongoURI, options)
11 | .then(() => {
12 | console.log('Connected to MongoDB');
13 | // Start your application or perform additional operations
14 | })
15 | .catch((error) => {
16 | console.error('Error connecting to MongoDB:', error);
17 | });
18 |
--------------------------------------------------------------------------------
/database/model/task.model.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 |
3 | const taskSchema = mongoose.Schema(
4 | {
5 | task: { type: String },
6 | status: {
7 | type: String,
8 | enum: ['backlog', 'todo', 'doing', 'done'],
9 | default: 'backlog',
10 | },
11 | cretedBy: {
12 | type: mongoose.Schema.Types.ObjectId,
13 | ref: 'User',
14 | },
15 | },
16 | { timestamp: true }
17 | );
18 |
19 | const Task = mongoose.model('Task', taskSchema);
20 | module.exports = Task;
21 |
--------------------------------------------------------------------------------
/database/model/user.model.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 | const bcrypt = require('bcryptjs');
3 |
4 | const userSchema = mongoose.Schema(
5 | {
6 | username: { type: String },
7 | email: { type: String },
8 | password: { type: String },
9 | },
10 | { timestamp: true }
11 | );
12 |
13 | userSchema.pre('save', function (next) {
14 | let user = this;
15 | if (user.isModified('password')) {
16 | return bcrypt.hash(user.password, 12, function (err, hash) {
17 | if (err) {
18 | return next(err);
19 | }
20 | user.password = hash;
21 | return next();
22 | });
23 | } else {
24 | return next();
25 | }
26 | });
27 |
28 | userSchema.methods.comparePassword = function (password, next) {
29 | bcrypt.compare(password, this.password, function (err, match) {
30 | if (err) {
31 | return next(err, false);
32 | }
33 |
34 | return next(null, match);
35 | });
36 | };
37 |
38 | const User = mongoose.model('User', userSchema);
39 | module.exports = User;
40 |
--------------------------------------------------------------------------------
/database/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "database",
3 | "version": "1.0.0",
4 | "main": "index.js",
5 | "license": "MIT",
6 | "dependencies": {
7 | "bcryptjs": "^2.4.3",
8 | "email-validator": "^2.0.4",
9 | "jsonwebtoken": "^9.0.1",
10 | "mongoose": "^7.3.1"
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/database/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@types/node@*":
6 | version "20.3.3"
7 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.3.tgz#329842940042d2b280897150e023e604d11657d6"
8 | integrity sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==
9 |
10 | "@types/webidl-conversions@*":
11 | version "7.0.0"
12 | resolved "https://registry.yarnpkg.com/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz#2b8e60e33906459219aa587e9d1a612ae994cfe7"
13 | integrity sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==
14 |
15 | "@types/whatwg-url@^8.2.1":
16 | version "8.2.2"
17 | resolved "https://registry.yarnpkg.com/@types/whatwg-url/-/whatwg-url-8.2.2.tgz#749d5b3873e845897ada99be4448041d4cc39e63"
18 | integrity sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==
19 | dependencies:
20 | "@types/node" "*"
21 | "@types/webidl-conversions" "*"
22 |
23 | bcryptjs@^2.4.3:
24 | version "2.4.3"
25 | resolved "https://registry.yarnpkg.com/bcryptjs/-/bcryptjs-2.4.3.tgz#9ab5627b93e60621ff7cdac5da9733027df1d0cb"
26 | integrity sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==
27 |
28 | bson@^5.3.0:
29 | version "5.3.0"
30 | resolved "https://registry.yarnpkg.com/bson/-/bson-5.3.0.tgz#37b006df4cd91ed125cb686467c1dd6d4606b514"
31 | integrity sha512-ukmCZMneMlaC5ebPHXIkP8YJzNl5DC41N5MAIvKDqLggdao342t4McltoJBQfQya/nHBWAcSsYRqlXPoQkTJag==
32 |
33 | buffer-equal-constant-time@1.0.1:
34 | version "1.0.1"
35 | resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
36 | integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==
37 |
38 | debug@4.x:
39 | version "4.3.4"
40 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
41 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
42 | dependencies:
43 | ms "2.1.2"
44 |
45 | ecdsa-sig-formatter@1.0.11:
46 | version "1.0.11"
47 | resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf"
48 | integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==
49 | dependencies:
50 | safe-buffer "^5.0.1"
51 |
52 | email-validator@^2.0.4:
53 | version "2.0.4"
54 | resolved "https://registry.yarnpkg.com/email-validator/-/email-validator-2.0.4.tgz#b8dfaa5d0dae28f1b03c95881d904d4e40bfe7ed"
55 | integrity sha512-gYCwo7kh5S3IDyZPLZf6hSS0MnZT8QmJFqYvbqlDZSbwdZlY6QZWxJ4i/6UhITOJ4XzyI647Bm2MXKCLqnJ4nQ==
56 |
57 | ip@^2.0.0:
58 | version "2.0.0"
59 | resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da"
60 | integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==
61 |
62 | jsonwebtoken@^9.0.1:
63 | version "9.0.1"
64 | resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz#81d8c901c112c24e497a55daf6b2be1225b40145"
65 | integrity sha512-K8wx7eJ5TPvEjuiVSkv167EVboBDv9PZdDoF7BgeQnBLVvZWW9clr2PsQHVJDTKaEIH5JBIwHujGcHp7GgI2eg==
66 | dependencies:
67 | jws "^3.2.2"
68 | lodash "^4.17.21"
69 | ms "^2.1.1"
70 | semver "^7.3.8"
71 |
72 | jwa@^1.4.1:
73 | version "1.4.1"
74 | resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a"
75 | integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==
76 | dependencies:
77 | buffer-equal-constant-time "1.0.1"
78 | ecdsa-sig-formatter "1.0.11"
79 | safe-buffer "^5.0.1"
80 |
81 | jws@^3.2.2:
82 | version "3.2.2"
83 | resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304"
84 | integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==
85 | dependencies:
86 | jwa "^1.4.1"
87 | safe-buffer "^5.0.1"
88 |
89 | kareem@2.5.1:
90 | version "2.5.1"
91 | resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.5.1.tgz#7b8203e11819a8e77a34b3517d3ead206764d15d"
92 | integrity sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==
93 |
94 | lodash@^4.17.21:
95 | version "4.17.21"
96 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
97 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
98 |
99 | lru-cache@^6.0.0:
100 | version "6.0.0"
101 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
102 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
103 | dependencies:
104 | yallist "^4.0.0"
105 |
106 | memory-pager@^1.0.2:
107 | version "1.5.0"
108 | resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5"
109 | integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==
110 |
111 | mongodb-connection-string-url@^2.6.0:
112 | version "2.6.0"
113 | resolved "https://registry.yarnpkg.com/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz#57901bf352372abdde812c81be47b75c6b2ec5cf"
114 | integrity sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==
115 | dependencies:
116 | "@types/whatwg-url" "^8.2.1"
117 | whatwg-url "^11.0.0"
118 |
119 | mongodb@5.6.0:
120 | version "5.6.0"
121 | resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-5.6.0.tgz#caff5278341bfc0f1ef6f394bb403d207de03d1e"
122 | integrity sha512-z8qVs9NfobHJm6uzK56XBZF8XwM9H294iRnB7wNjF0SnY93si5HPziIJn+qqvUR5QOff/4L0gCD6SShdR/GtVQ==
123 | dependencies:
124 | bson "^5.3.0"
125 | mongodb-connection-string-url "^2.6.0"
126 | socks "^2.7.1"
127 | optionalDependencies:
128 | saslprep "^1.0.3"
129 |
130 | mongoose@^7.3.1:
131 | version "7.3.1"
132 | resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-7.3.1.tgz#833bfc29a4f5cc7c4eacf4b1495d1ebe206ec409"
133 | integrity sha512-6289bmSIhvR8xMHsYe2/CuzN7wHK+2RHcK7idDdzniCPC5zix5JH0Hc4k3CmXlr/9zQ2250gUQiUWtvDB0vF1Q==
134 | dependencies:
135 | bson "^5.3.0"
136 | kareem "2.5.1"
137 | mongodb "5.6.0"
138 | mpath "0.9.0"
139 | mquery "5.0.0"
140 | ms "2.1.3"
141 | sift "16.0.1"
142 |
143 | mpath@0.9.0:
144 | version "0.9.0"
145 | resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.9.0.tgz#0c122fe107846e31fc58c75b09c35514b3871904"
146 | integrity sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==
147 |
148 | mquery@5.0.0:
149 | version "5.0.0"
150 | resolved "https://registry.yarnpkg.com/mquery/-/mquery-5.0.0.tgz#a95be5dfc610b23862df34a47d3e5d60e110695d"
151 | integrity sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==
152 | dependencies:
153 | debug "4.x"
154 |
155 | ms@2.1.2:
156 | version "2.1.2"
157 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
158 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
159 |
160 | ms@2.1.3, ms@^2.1.1:
161 | version "2.1.3"
162 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
163 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
164 |
165 | punycode@^2.1.1:
166 | version "2.3.0"
167 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
168 | integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
169 |
170 | safe-buffer@^5.0.1:
171 | version "5.2.1"
172 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
173 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
174 |
175 | saslprep@^1.0.3:
176 | version "1.0.3"
177 | resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226"
178 | integrity sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==
179 | dependencies:
180 | sparse-bitfield "^3.0.3"
181 |
182 | semver@^7.3.8:
183 | version "7.5.4"
184 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
185 | integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
186 | dependencies:
187 | lru-cache "^6.0.0"
188 |
189 | sift@16.0.1:
190 | version "16.0.1"
191 | resolved "https://registry.yarnpkg.com/sift/-/sift-16.0.1.tgz#e9c2ccc72191585008cf3e36fc447b2d2633a053"
192 | integrity sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==
193 |
194 | smart-buffer@^4.2.0:
195 | version "4.2.0"
196 | resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
197 | integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==
198 |
199 | socks@^2.7.1:
200 | version "2.7.1"
201 | resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55"
202 | integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==
203 | dependencies:
204 | ip "^2.0.0"
205 | smart-buffer "^4.2.0"
206 |
207 | sparse-bitfield@^3.0.3:
208 | version "3.0.3"
209 | resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11"
210 | integrity sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==
211 | dependencies:
212 | memory-pager "^1.0.2"
213 |
214 | tr46@^3.0.0:
215 | version "3.0.0"
216 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9"
217 | integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==
218 | dependencies:
219 | punycode "^2.1.1"
220 |
221 | webidl-conversions@^7.0.0:
222 | version "7.0.0"
223 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a"
224 | integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==
225 |
226 | whatwg-url@^11.0.0:
227 | version "11.0.0"
228 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018"
229 | integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==
230 | dependencies:
231 | tr46 "^3.0.0"
232 | webidl-conversions "^7.0.0"
233 |
234 | yallist@^4.0.0:
235 | version "4.0.0"
236 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
237 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
238 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "taskmanager",
3 | "version": "1.0.0",
4 | "main": "server.js",
5 | "license": "MIT",
6 | "dependencies": {
7 | "concurrently": "^8.2.0"
8 | },
9 | "scripts": {
10 | "client": "yarn --cwd client dev",
11 | "server": " nodemon server/server.js",
12 | "dev": "concurrently \"yarn server\" \"yarn client\""
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/server/controllers/authController.js:
--------------------------------------------------------------------------------
1 | const User = require('../../database/model/user.model');
2 | const jwt = require('jsonwebtoken');
3 | const validator = require('email-validator');
4 |
5 | const signin = async (req, res) => {
6 | let { email, password } = req.body;
7 | try {
8 | let user = await User.findOne({ email });
9 | console.log(user, req.body);
10 | if (!user) {
11 | return res.status(400).send('email does not exist');
12 | }
13 |
14 | user.comparePassword(password, (err, match) => {
15 | if (!match || err) return res.status(400).send('password does not match');
16 | let token = jwt.sign({ _id: user._id }, 'kljclsadflkdsjfklsdjfklsdjf', {
17 | expiresIn: '24h',
18 | });
19 |
20 | res.status(200).send({
21 | token,
22 | username: user.username,
23 | email: user.email,
24 | id: user._id,
25 | createdAt: user.createdAt,
26 | updatedAt: user.updatedAt,
27 | });
28 | });
29 | } catch (error) {
30 | return res.status(400).send('login failed');
31 | }
32 | };
33 |
34 | const register = async (req, res) => {
35 | console.log(req.body, 'req');
36 | const { username, password, email } = req.body;
37 | try {
38 | if (!username) return res.status(400).send('username is required');
39 |
40 | if (!email) return res.status(400).send('email is required');
41 |
42 | if (!validator.validate(email)) {
43 | return res.status(400).send('enter valid email id');
44 | }
45 | if (!password || password.length < 6) {
46 | return res.status(400).send('enter valid password');
47 | }
48 |
49 | const userExist = await User.findOne({ email });
50 | if (userExist) {
51 | return res.status(400).send('email is taken');
52 | }
53 |
54 | const user = await new User({
55 | email,
56 | username,
57 | password,
58 | });
59 |
60 | await user.save();
61 | return res.status(200).send(user);
62 | } catch (error) {
63 | return res, statusbar(400).send('Error creating user');
64 | }
65 | };
66 |
67 | module.exports = {
68 | signin,
69 | register,
70 | };
71 |
--------------------------------------------------------------------------------
/server/controllers/taskController.js:
--------------------------------------------------------------------------------
1 | const User = require('../../database/model/user.model');
2 | const Task = require('../../database/model/task.model');
3 |
4 | const addTask = async (req, res) => {
5 | const { task, id } = req.body;
6 |
7 | try {
8 | if (!task) return res.status(400).send('please enter the task');
9 | if (task.length < 10) res.status(400).send('add minimum 10 char');
10 | const taskDetail = await new Task({
11 | task,
12 | cretedBy: id,
13 | });
14 | await taskDetail.save();
15 | return res.status(200).send(taskDetail);
16 | } catch (error) {
17 | return res.status(400).send('task addition failed');
18 | }
19 | };
20 |
21 | const getAllTasks = async (req, res) => {
22 | const { id } = req.query;
23 | try {
24 | let tasklist = await Task.find({ cretedBy: id });
25 | return res.status(200).send(tasklist);
26 | } catch (error) {
27 | return res.status(400).send(error);
28 | }
29 | };
30 |
31 | const editTask = async (req, res) => {};
32 |
33 | const statusChange = async (req, res) => {
34 | const { id, string } = req.body;
35 |
36 | try {
37 | let task = await Task.findById({ _id: id });
38 | if (string === 'right') {
39 | if (task.status === 'backlog') {
40 | task.status = 'todo';
41 | task.save();
42 | return res.send(task);
43 | } else if (task.status === 'todo') {
44 | task.status = 'doing';
45 | task.save();
46 | return res.send(task);
47 | } else if (task.status === 'doing') {
48 | task.status = 'done';
49 | task.save();
50 | return res.send(task);
51 | }
52 | } else {
53 | if (task.status === 'done') {
54 | task.status = 'doing';
55 | task.save();
56 | return res.send(task);
57 | } else if (task.status === 'doing') {
58 | task.status = 'todo';
59 | task.save();
60 | return res.send(task);
61 | } else if (task.status === 'todo') {
62 | task.status = 'backlog';
63 | task.save();
64 | return res.send(task);
65 | }
66 | }
67 | } catch (error) {}
68 | };
69 |
70 | const deleteTask = async (req, res) => {
71 | const { id } = req.params;
72 | try {
73 | let response = await Task.findByIdAndDelete(id);
74 | return res.status(200).send(response);
75 | } catch (error) {
76 | return res.status(400).send('deleteFailed');
77 | }
78 | };
79 |
80 | module.exports = {
81 | addTask,
82 | getAllTasks,
83 | editTask,
84 | statusChange,
85 | deleteTask,
86 | };
87 |
--------------------------------------------------------------------------------
/server/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "server",
3 | "version": "1.0.0",
4 | "main": "index.js",
5 | "license": "MIT",
6 | "dependencies": {
7 | "cors": "^2.8.5",
8 | "email-validator": "^2.0.4",
9 | "express": "^4.18.2",
10 | "express-jwt": "^8.4.1",
11 | "history": "^5.3.0",
12 | "jsonwebtoken": "^9.0.1",
13 | "morgan": "^1.10.0",
14 | "nodemon": "^2.0.22"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/server/routes/authRoutes.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const router = express.Router();
3 |
4 | const authController = require('../controllers/authController');
5 |
6 | router.route('/signin').post(authController.signin);
7 | router.route('/register').post(authController.register);
8 |
9 | module.exports = router;
10 |
--------------------------------------------------------------------------------
/server/routes/taskRoutes.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const router = express.Router();
3 |
4 | const taskController = require('../controllers/taskController');
5 | router.route('/add').post(taskController.addTask);
6 | router.route('/tasks').get(taskController.getAllTasks);
7 | router.route('/edit/:id').put(taskController.editTask);
8 |
9 | router
10 | .route('/:id')
11 | .put(taskController.statusChange)
12 | .delete(taskController.deleteTask);
13 |
14 | module.exports = router;
15 |
--------------------------------------------------------------------------------
/server/server.js:
--------------------------------------------------------------------------------
1 | const cors = require('cors');
2 | const express = require('express');
3 | const app = express();
4 | require('../database/db');
5 | const authRoutes = require('./routes/authRoutes');
6 | const taskRouter = require('./routes/taskRoutes');
7 | const morgan = require('morgan');
8 |
9 | app.use(cors());
10 | app.use(morgan('dev'));
11 | app.use(express.json());
12 | app.use('/auth', authRoutes);
13 | app.use('/task', taskRouter);
14 |
15 | // localhost:4000/auth/register
16 |
17 | const port = 4000;
18 |
19 | app.listen(port, () => {
20 | console.log(`server is running on port`, port);
21 | });
22 |
--------------------------------------------------------------------------------
/server/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@babel/runtime@^7.7.6":
6 | version "7.22.6"
7 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.6.tgz#57d64b9ae3cff1d67eb067ae117dac087f5bd438"
8 | integrity sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==
9 | dependencies:
10 | regenerator-runtime "^0.13.11"
11 |
12 | "@types/jsonwebtoken@^9":
13 | version "9.0.2"
14 | resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#9eeb56c76dd555039be2a3972218de5bd3b8d83e"
15 | integrity sha512-drE6uz7QBKq1fYqqoFKTDRdFCPHd5TCub75BM+D+cMx7NU9hUz7SESLfC2fSCXVFMO5Yj8sOWHuGqPgjc+fz0Q==
16 | dependencies:
17 | "@types/node" "*"
18 |
19 | "@types/node@*":
20 | version "20.4.2"
21 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.2.tgz#129cc9ae69f93824f92fac653eebfb4812ab4af9"
22 | integrity sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw==
23 |
24 | abbrev@1:
25 | version "1.1.1"
26 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
27 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
28 |
29 | accepts@~1.3.8:
30 | version "1.3.8"
31 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
32 | integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
33 | dependencies:
34 | mime-types "~2.1.34"
35 | negotiator "0.6.3"
36 |
37 | anymatch@~3.1.2:
38 | version "3.1.3"
39 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
40 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
41 | dependencies:
42 | normalize-path "^3.0.0"
43 | picomatch "^2.0.4"
44 |
45 | array-flatten@1.1.1:
46 | version "1.1.1"
47 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
48 | integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==
49 |
50 | balanced-match@^1.0.0:
51 | version "1.0.2"
52 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
53 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
54 |
55 | basic-auth@~2.0.1:
56 | version "2.0.1"
57 | resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a"
58 | integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==
59 | dependencies:
60 | safe-buffer "5.1.2"
61 |
62 | binary-extensions@^2.0.0:
63 | version "2.2.0"
64 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
65 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
66 |
67 | body-parser@1.20.1:
68 | version "1.20.1"
69 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668"
70 | integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==
71 | dependencies:
72 | bytes "3.1.2"
73 | content-type "~1.0.4"
74 | debug "2.6.9"
75 | depd "2.0.0"
76 | destroy "1.2.0"
77 | http-errors "2.0.0"
78 | iconv-lite "0.4.24"
79 | on-finished "2.4.1"
80 | qs "6.11.0"
81 | raw-body "2.5.1"
82 | type-is "~1.6.18"
83 | unpipe "1.0.0"
84 |
85 | brace-expansion@^1.1.7:
86 | version "1.1.11"
87 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
88 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
89 | dependencies:
90 | balanced-match "^1.0.0"
91 | concat-map "0.0.1"
92 |
93 | braces@~3.0.2:
94 | version "3.0.2"
95 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
96 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
97 | dependencies:
98 | fill-range "^7.0.1"
99 |
100 | buffer-equal-constant-time@1.0.1:
101 | version "1.0.1"
102 | resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
103 | integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==
104 |
105 | bytes@3.1.2:
106 | version "3.1.2"
107 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
108 | integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
109 |
110 | call-bind@^1.0.0:
111 | version "1.0.2"
112 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
113 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
114 | dependencies:
115 | function-bind "^1.1.1"
116 | get-intrinsic "^1.0.2"
117 |
118 | chokidar@^3.5.2:
119 | version "3.5.3"
120 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
121 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
122 | dependencies:
123 | anymatch "~3.1.2"
124 | braces "~3.0.2"
125 | glob-parent "~5.1.2"
126 | is-binary-path "~2.1.0"
127 | is-glob "~4.0.1"
128 | normalize-path "~3.0.0"
129 | readdirp "~3.6.0"
130 | optionalDependencies:
131 | fsevents "~2.3.2"
132 |
133 | concat-map@0.0.1:
134 | version "0.0.1"
135 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
136 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
137 |
138 | content-disposition@0.5.4:
139 | version "0.5.4"
140 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe"
141 | integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==
142 | dependencies:
143 | safe-buffer "5.2.1"
144 |
145 | content-type@~1.0.4:
146 | version "1.0.5"
147 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918"
148 | integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
149 |
150 | cookie-signature@1.0.6:
151 | version "1.0.6"
152 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
153 | integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==
154 |
155 | cookie@0.5.0:
156 | version "0.5.0"
157 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
158 | integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
159 |
160 | cors@^2.8.5:
161 | version "2.8.5"
162 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29"
163 | integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==
164 | dependencies:
165 | object-assign "^4"
166 | vary "^1"
167 |
168 | debug@2.6.9:
169 | version "2.6.9"
170 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
171 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
172 | dependencies:
173 | ms "2.0.0"
174 |
175 | debug@^3.2.7:
176 | version "3.2.7"
177 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
178 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
179 | dependencies:
180 | ms "^2.1.1"
181 |
182 | depd@2.0.0, depd@~2.0.0:
183 | version "2.0.0"
184 | resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
185 | integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
186 |
187 | destroy@1.2.0:
188 | version "1.2.0"
189 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
190 | integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
191 |
192 | ecdsa-sig-formatter@1.0.11:
193 | version "1.0.11"
194 | resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf"
195 | integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==
196 | dependencies:
197 | safe-buffer "^5.0.1"
198 |
199 | ee-first@1.1.1:
200 | version "1.1.1"
201 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
202 | integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
203 |
204 | email-validator@^2.0.4:
205 | version "2.0.4"
206 | resolved "https://registry.yarnpkg.com/email-validator/-/email-validator-2.0.4.tgz#b8dfaa5d0dae28f1b03c95881d904d4e40bfe7ed"
207 | integrity sha512-gYCwo7kh5S3IDyZPLZf6hSS0MnZT8QmJFqYvbqlDZSbwdZlY6QZWxJ4i/6UhITOJ4XzyI647Bm2MXKCLqnJ4nQ==
208 |
209 | encodeurl@~1.0.2:
210 | version "1.0.2"
211 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
212 | integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
213 |
214 | escape-html@~1.0.3:
215 | version "1.0.3"
216 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
217 | integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
218 |
219 | etag@~1.8.1:
220 | version "1.8.1"
221 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
222 | integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
223 |
224 | express-jwt@^8.4.1:
225 | version "8.4.1"
226 | resolved "https://registry.yarnpkg.com/express-jwt/-/express-jwt-8.4.1.tgz#ba817c1ced7c6f1f7017fc2e6deac207011e8acb"
227 | integrity sha512-IZoZiDv2yZJAb3QrbaSATVtTCYT11OcqgFGoTN4iKVyN6NBkBkhtVIixww5fmakF0Upt5HfOxJuS6ZmJVeOtTQ==
228 | dependencies:
229 | "@types/jsonwebtoken" "^9"
230 | express-unless "^2.1.3"
231 | jsonwebtoken "^9.0.0"
232 |
233 | express-unless@^2.1.3:
234 | version "2.1.3"
235 | resolved "https://registry.yarnpkg.com/express-unless/-/express-unless-2.1.3.tgz#f951c6cca52a24da3de32d42cfd4db57bc0f9a2e"
236 | integrity sha512-wj4tLMyCVYuIIKHGt0FhCtIViBcwzWejX0EjNxveAa6dG+0XBCQhMbx+PnkLkFCxLC69qoFrxds4pIyL88inaQ==
237 |
238 | express@^4.18.2:
239 | version "4.18.2"
240 | resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59"
241 | integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==
242 | dependencies:
243 | accepts "~1.3.8"
244 | array-flatten "1.1.1"
245 | body-parser "1.20.1"
246 | content-disposition "0.5.4"
247 | content-type "~1.0.4"
248 | cookie "0.5.0"
249 | cookie-signature "1.0.6"
250 | debug "2.6.9"
251 | depd "2.0.0"
252 | encodeurl "~1.0.2"
253 | escape-html "~1.0.3"
254 | etag "~1.8.1"
255 | finalhandler "1.2.0"
256 | fresh "0.5.2"
257 | http-errors "2.0.0"
258 | merge-descriptors "1.0.1"
259 | methods "~1.1.2"
260 | on-finished "2.4.1"
261 | parseurl "~1.3.3"
262 | path-to-regexp "0.1.7"
263 | proxy-addr "~2.0.7"
264 | qs "6.11.0"
265 | range-parser "~1.2.1"
266 | safe-buffer "5.2.1"
267 | send "0.18.0"
268 | serve-static "1.15.0"
269 | setprototypeof "1.2.0"
270 | statuses "2.0.1"
271 | type-is "~1.6.18"
272 | utils-merge "1.0.1"
273 | vary "~1.1.2"
274 |
275 | fill-range@^7.0.1:
276 | version "7.0.1"
277 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
278 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
279 | dependencies:
280 | to-regex-range "^5.0.1"
281 |
282 | finalhandler@1.2.0:
283 | version "1.2.0"
284 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32"
285 | integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==
286 | dependencies:
287 | debug "2.6.9"
288 | encodeurl "~1.0.2"
289 | escape-html "~1.0.3"
290 | on-finished "2.4.1"
291 | parseurl "~1.3.3"
292 | statuses "2.0.1"
293 | unpipe "~1.0.0"
294 |
295 | forwarded@0.2.0:
296 | version "0.2.0"
297 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
298 | integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
299 |
300 | fresh@0.5.2:
301 | version "0.5.2"
302 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
303 | integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
304 |
305 | fsevents@~2.3.2:
306 | version "2.3.2"
307 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
308 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
309 |
310 | function-bind@^1.1.1:
311 | version "1.1.1"
312 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
313 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
314 |
315 | get-intrinsic@^1.0.2:
316 | version "1.2.1"
317 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82"
318 | integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==
319 | dependencies:
320 | function-bind "^1.1.1"
321 | has "^1.0.3"
322 | has-proto "^1.0.1"
323 | has-symbols "^1.0.3"
324 |
325 | glob-parent@~5.1.2:
326 | version "5.1.2"
327 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
328 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
329 | dependencies:
330 | is-glob "^4.0.1"
331 |
332 | has-flag@^3.0.0:
333 | version "3.0.0"
334 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
335 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
336 |
337 | has-proto@^1.0.1:
338 | version "1.0.1"
339 | resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0"
340 | integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==
341 |
342 | has-symbols@^1.0.3:
343 | version "1.0.3"
344 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
345 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
346 |
347 | has@^1.0.3:
348 | version "1.0.3"
349 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
350 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
351 | dependencies:
352 | function-bind "^1.1.1"
353 |
354 | history@^5.3.0:
355 | version "5.3.0"
356 | resolved "https://registry.yarnpkg.com/history/-/history-5.3.0.tgz#1548abaa245ba47992f063a0783db91ef201c73b"
357 | integrity sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==
358 | dependencies:
359 | "@babel/runtime" "^7.7.6"
360 |
361 | http-errors@2.0.0:
362 | version "2.0.0"
363 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
364 | integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
365 | dependencies:
366 | depd "2.0.0"
367 | inherits "2.0.4"
368 | setprototypeof "1.2.0"
369 | statuses "2.0.1"
370 | toidentifier "1.0.1"
371 |
372 | iconv-lite@0.4.24:
373 | version "0.4.24"
374 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
375 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
376 | dependencies:
377 | safer-buffer ">= 2.1.2 < 3"
378 |
379 | ignore-by-default@^1.0.1:
380 | version "1.0.1"
381 | resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
382 | integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==
383 |
384 | inherits@2.0.4:
385 | version "2.0.4"
386 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
387 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
388 |
389 | ipaddr.js@1.9.1:
390 | version "1.9.1"
391 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
392 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
393 |
394 | is-binary-path@~2.1.0:
395 | version "2.1.0"
396 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
397 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
398 | dependencies:
399 | binary-extensions "^2.0.0"
400 |
401 | is-extglob@^2.1.1:
402 | version "2.1.1"
403 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
404 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
405 |
406 | is-glob@^4.0.1, is-glob@~4.0.1:
407 | version "4.0.3"
408 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
409 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
410 | dependencies:
411 | is-extglob "^2.1.1"
412 |
413 | is-number@^7.0.0:
414 | version "7.0.0"
415 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
416 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
417 |
418 | jsonwebtoken@^9.0.0, jsonwebtoken@^9.0.1:
419 | version "9.0.1"
420 | resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz#81d8c901c112c24e497a55daf6b2be1225b40145"
421 | integrity sha512-K8wx7eJ5TPvEjuiVSkv167EVboBDv9PZdDoF7BgeQnBLVvZWW9clr2PsQHVJDTKaEIH5JBIwHujGcHp7GgI2eg==
422 | dependencies:
423 | jws "^3.2.2"
424 | lodash "^4.17.21"
425 | ms "^2.1.1"
426 | semver "^7.3.8"
427 |
428 | jwa@^1.4.1:
429 | version "1.4.1"
430 | resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a"
431 | integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==
432 | dependencies:
433 | buffer-equal-constant-time "1.0.1"
434 | ecdsa-sig-formatter "1.0.11"
435 | safe-buffer "^5.0.1"
436 |
437 | jws@^3.2.2:
438 | version "3.2.2"
439 | resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304"
440 | integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==
441 | dependencies:
442 | jwa "^1.4.1"
443 | safe-buffer "^5.0.1"
444 |
445 | lodash@^4.17.21:
446 | version "4.17.21"
447 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
448 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
449 |
450 | lru-cache@^6.0.0:
451 | version "6.0.0"
452 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
453 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
454 | dependencies:
455 | yallist "^4.0.0"
456 |
457 | media-typer@0.3.0:
458 | version "0.3.0"
459 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
460 | integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
461 |
462 | merge-descriptors@1.0.1:
463 | version "1.0.1"
464 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
465 | integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==
466 |
467 | methods@~1.1.2:
468 | version "1.1.2"
469 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
470 | integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==
471 |
472 | mime-db@1.52.0:
473 | version "1.52.0"
474 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
475 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
476 |
477 | mime-types@~2.1.24, mime-types@~2.1.34:
478 | version "2.1.35"
479 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
480 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
481 | dependencies:
482 | mime-db "1.52.0"
483 |
484 | mime@1.6.0:
485 | version "1.6.0"
486 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
487 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
488 |
489 | minimatch@^3.1.2:
490 | version "3.1.2"
491 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
492 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
493 | dependencies:
494 | brace-expansion "^1.1.7"
495 |
496 | morgan@^1.10.0:
497 | version "1.10.0"
498 | resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7"
499 | integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==
500 | dependencies:
501 | basic-auth "~2.0.1"
502 | debug "2.6.9"
503 | depd "~2.0.0"
504 | on-finished "~2.3.0"
505 | on-headers "~1.0.2"
506 |
507 | ms@2.0.0:
508 | version "2.0.0"
509 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
510 | integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
511 |
512 | ms@2.1.3, ms@^2.1.1:
513 | version "2.1.3"
514 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
515 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
516 |
517 | negotiator@0.6.3:
518 | version "0.6.3"
519 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
520 | integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
521 |
522 | nodemon@^2.0.22:
523 | version "2.0.22"
524 | resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.22.tgz#182c45c3a78da486f673d6c1702e00728daf5258"
525 | integrity sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==
526 | dependencies:
527 | chokidar "^3.5.2"
528 | debug "^3.2.7"
529 | ignore-by-default "^1.0.1"
530 | minimatch "^3.1.2"
531 | pstree.remy "^1.1.8"
532 | semver "^5.7.1"
533 | simple-update-notifier "^1.0.7"
534 | supports-color "^5.5.0"
535 | touch "^3.1.0"
536 | undefsafe "^2.0.5"
537 |
538 | nopt@~1.0.10:
539 | version "1.0.10"
540 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee"
541 | integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==
542 | dependencies:
543 | abbrev "1"
544 |
545 | normalize-path@^3.0.0, normalize-path@~3.0.0:
546 | version "3.0.0"
547 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
548 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
549 |
550 | object-assign@^4:
551 | version "4.1.1"
552 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
553 | integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
554 |
555 | object-inspect@^1.9.0:
556 | version "1.12.3"
557 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9"
558 | integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==
559 |
560 | on-finished@2.4.1:
561 | version "2.4.1"
562 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f"
563 | integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
564 | dependencies:
565 | ee-first "1.1.1"
566 |
567 | on-finished@~2.3.0:
568 | version "2.3.0"
569 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
570 | integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==
571 | dependencies:
572 | ee-first "1.1.1"
573 |
574 | on-headers@~1.0.2:
575 | version "1.0.2"
576 | resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
577 | integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
578 |
579 | parseurl@~1.3.3:
580 | version "1.3.3"
581 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
582 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
583 |
584 | path-to-regexp@0.1.7:
585 | version "0.1.7"
586 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
587 | integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==
588 |
589 | picomatch@^2.0.4, picomatch@^2.2.1:
590 | version "2.3.1"
591 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
592 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
593 |
594 | proxy-addr@~2.0.7:
595 | version "2.0.7"
596 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
597 | integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
598 | dependencies:
599 | forwarded "0.2.0"
600 | ipaddr.js "1.9.1"
601 |
602 | pstree.remy@^1.1.8:
603 | version "1.1.8"
604 | resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a"
605 | integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==
606 |
607 | qs@6.11.0:
608 | version "6.11.0"
609 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a"
610 | integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==
611 | dependencies:
612 | side-channel "^1.0.4"
613 |
614 | range-parser@~1.2.1:
615 | version "1.2.1"
616 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
617 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
618 |
619 | raw-body@2.5.1:
620 | version "2.5.1"
621 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857"
622 | integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==
623 | dependencies:
624 | bytes "3.1.2"
625 | http-errors "2.0.0"
626 | iconv-lite "0.4.24"
627 | unpipe "1.0.0"
628 |
629 | readdirp@~3.6.0:
630 | version "3.6.0"
631 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
632 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
633 | dependencies:
634 | picomatch "^2.2.1"
635 |
636 | regenerator-runtime@^0.13.11:
637 | version "0.13.11"
638 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
639 | integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
640 |
641 | safe-buffer@5.1.2:
642 | version "5.1.2"
643 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
644 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
645 |
646 | safe-buffer@5.2.1, safe-buffer@^5.0.1:
647 | version "5.2.1"
648 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
649 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
650 |
651 | "safer-buffer@>= 2.1.2 < 3":
652 | version "2.1.2"
653 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
654 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
655 |
656 | semver@^5.7.1:
657 | version "5.7.1"
658 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
659 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
660 |
661 | semver@^7.3.8:
662 | version "7.5.4"
663 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
664 | integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
665 | dependencies:
666 | lru-cache "^6.0.0"
667 |
668 | semver@~7.0.0:
669 | version "7.0.0"
670 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
671 | integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
672 |
673 | send@0.18.0:
674 | version "0.18.0"
675 | resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be"
676 | integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==
677 | dependencies:
678 | debug "2.6.9"
679 | depd "2.0.0"
680 | destroy "1.2.0"
681 | encodeurl "~1.0.2"
682 | escape-html "~1.0.3"
683 | etag "~1.8.1"
684 | fresh "0.5.2"
685 | http-errors "2.0.0"
686 | mime "1.6.0"
687 | ms "2.1.3"
688 | on-finished "2.4.1"
689 | range-parser "~1.2.1"
690 | statuses "2.0.1"
691 |
692 | serve-static@1.15.0:
693 | version "1.15.0"
694 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540"
695 | integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==
696 | dependencies:
697 | encodeurl "~1.0.2"
698 | escape-html "~1.0.3"
699 | parseurl "~1.3.3"
700 | send "0.18.0"
701 |
702 | setprototypeof@1.2.0:
703 | version "1.2.0"
704 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
705 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
706 |
707 | side-channel@^1.0.4:
708 | version "1.0.4"
709 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
710 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
711 | dependencies:
712 | call-bind "^1.0.0"
713 | get-intrinsic "^1.0.2"
714 | object-inspect "^1.9.0"
715 |
716 | simple-update-notifier@^1.0.7:
717 | version "1.1.0"
718 | resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82"
719 | integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==
720 | dependencies:
721 | semver "~7.0.0"
722 |
723 | statuses@2.0.1:
724 | version "2.0.1"
725 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
726 | integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
727 |
728 | supports-color@^5.5.0:
729 | version "5.5.0"
730 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
731 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
732 | dependencies:
733 | has-flag "^3.0.0"
734 |
735 | to-regex-range@^5.0.1:
736 | version "5.0.1"
737 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
738 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
739 | dependencies:
740 | is-number "^7.0.0"
741 |
742 | toidentifier@1.0.1:
743 | version "1.0.1"
744 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
745 | integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
746 |
747 | touch@^3.1.0:
748 | version "3.1.0"
749 | resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b"
750 | integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==
751 | dependencies:
752 | nopt "~1.0.10"
753 |
754 | type-is@~1.6.18:
755 | version "1.6.18"
756 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
757 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
758 | dependencies:
759 | media-typer "0.3.0"
760 | mime-types "~2.1.24"
761 |
762 | undefsafe@^2.0.5:
763 | version "2.0.5"
764 | resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c"
765 | integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==
766 |
767 | unpipe@1.0.0, unpipe@~1.0.0:
768 | version "1.0.0"
769 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
770 | integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
771 |
772 | utils-merge@1.0.1:
773 | version "1.0.1"
774 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
775 | integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==
776 |
777 | vary@^1, vary@~1.1.2:
778 | version "1.1.2"
779 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
780 | integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
781 |
782 | yallist@^4.0.0:
783 | version "4.0.0"
784 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
785 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
786 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@babel/runtime@^7.21.0":
6 | version "7.22.5"
7 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.5.tgz#8564dd588182ce0047d55d7a75e93921107b57ec"
8 | integrity sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==
9 | dependencies:
10 | regenerator-runtime "^0.13.11"
11 |
12 | abbrev@1:
13 | version "1.1.1"
14 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
15 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
16 |
17 | ansi-regex@^5.0.1:
18 | version "5.0.1"
19 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
20 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
21 |
22 | ansi-styles@^4.0.0, ansi-styles@^4.1.0:
23 | version "4.3.0"
24 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
25 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
26 | dependencies:
27 | color-convert "^2.0.1"
28 |
29 | anymatch@~3.1.2:
30 | version "3.1.3"
31 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
32 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
33 | dependencies:
34 | normalize-path "^3.0.0"
35 | picomatch "^2.0.4"
36 |
37 | balanced-match@^1.0.0:
38 | version "1.0.2"
39 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
40 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
41 |
42 | binary-extensions@^2.0.0:
43 | version "2.2.0"
44 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
45 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
46 |
47 | brace-expansion@^1.1.7:
48 | version "1.1.11"
49 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
50 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
51 | dependencies:
52 | balanced-match "^1.0.0"
53 | concat-map "0.0.1"
54 |
55 | braces@~3.0.2:
56 | version "3.0.2"
57 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
58 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
59 | dependencies:
60 | fill-range "^7.0.1"
61 |
62 | chalk@^4.1.2:
63 | version "4.1.2"
64 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
65 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
66 | dependencies:
67 | ansi-styles "^4.1.0"
68 | supports-color "^7.1.0"
69 |
70 | chokidar@^3.5.2:
71 | version "3.5.3"
72 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
73 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
74 | dependencies:
75 | anymatch "~3.1.2"
76 | braces "~3.0.2"
77 | glob-parent "~5.1.2"
78 | is-binary-path "~2.1.0"
79 | is-glob "~4.0.1"
80 | normalize-path "~3.0.0"
81 | readdirp "~3.6.0"
82 | optionalDependencies:
83 | fsevents "~2.3.2"
84 |
85 | cliui@^8.0.1:
86 | version "8.0.1"
87 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa"
88 | integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==
89 | dependencies:
90 | string-width "^4.2.0"
91 | strip-ansi "^6.0.1"
92 | wrap-ansi "^7.0.0"
93 |
94 | color-convert@^2.0.1:
95 | version "2.0.1"
96 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
97 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
98 | dependencies:
99 | color-name "~1.1.4"
100 |
101 | color-name@~1.1.4:
102 | version "1.1.4"
103 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
104 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
105 |
106 | concat-map@0.0.1:
107 | version "0.0.1"
108 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
109 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
110 |
111 | concurrently@^8.2.0:
112 | version "8.2.0"
113 | resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-8.2.0.tgz#cdc9f621a4d913366600355d68254df2c5e782f3"
114 | integrity sha512-nnLMxO2LU492mTUj9qX/az/lESonSZu81UznYDoXtz1IQf996ixVqPAgHXwvHiHCAef/7S8HIK+fTFK7Ifk8YA==
115 | dependencies:
116 | chalk "^4.1.2"
117 | date-fns "^2.30.0"
118 | lodash "^4.17.21"
119 | rxjs "^7.8.1"
120 | shell-quote "^1.8.1"
121 | spawn-command "0.0.2"
122 | supports-color "^8.1.1"
123 | tree-kill "^1.2.2"
124 | yargs "^17.7.2"
125 |
126 | date-fns@^2.30.0:
127 | version "2.30.0"
128 | resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0"
129 | integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==
130 | dependencies:
131 | "@babel/runtime" "^7.21.0"
132 |
133 | debug@^3.2.7:
134 | version "3.2.7"
135 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
136 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
137 | dependencies:
138 | ms "^2.1.1"
139 |
140 | emoji-regex@^8.0.0:
141 | version "8.0.0"
142 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
143 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
144 |
145 | escalade@^3.1.1:
146 | version "3.1.1"
147 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
148 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
149 |
150 | fill-range@^7.0.1:
151 | version "7.0.1"
152 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
153 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
154 | dependencies:
155 | to-regex-range "^5.0.1"
156 |
157 | fsevents@~2.3.2:
158 | version "2.3.2"
159 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
160 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
161 |
162 | get-caller-file@^2.0.5:
163 | version "2.0.5"
164 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
165 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
166 |
167 | glob-parent@~5.1.2:
168 | version "5.1.2"
169 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
170 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
171 | dependencies:
172 | is-glob "^4.0.1"
173 |
174 | has-flag@^3.0.0:
175 | version "3.0.0"
176 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
177 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
178 |
179 | has-flag@^4.0.0:
180 | version "4.0.0"
181 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
182 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
183 |
184 | ignore-by-default@^1.0.1:
185 | version "1.0.1"
186 | resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
187 | integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==
188 |
189 | is-binary-path@~2.1.0:
190 | version "2.1.0"
191 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
192 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
193 | dependencies:
194 | binary-extensions "^2.0.0"
195 |
196 | is-extglob@^2.1.1:
197 | version "2.1.1"
198 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
199 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
200 |
201 | is-fullwidth-code-point@^3.0.0:
202 | version "3.0.0"
203 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
204 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
205 |
206 | is-glob@^4.0.1, is-glob@~4.0.1:
207 | version "4.0.3"
208 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
209 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
210 | dependencies:
211 | is-extglob "^2.1.1"
212 |
213 | is-number@^7.0.0:
214 | version "7.0.0"
215 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
216 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
217 |
218 | lodash@^4.17.21:
219 | version "4.17.21"
220 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
221 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
222 |
223 | minimatch@^3.1.2:
224 | version "3.1.2"
225 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
226 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
227 | dependencies:
228 | brace-expansion "^1.1.7"
229 |
230 | ms@^2.1.1:
231 | version "2.1.3"
232 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
233 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
234 |
235 | nodemon@^2.0.22:
236 | version "2.0.22"
237 | resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.22.tgz#182c45c3a78da486f673d6c1702e00728daf5258"
238 | integrity sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==
239 | dependencies:
240 | chokidar "^3.5.2"
241 | debug "^3.2.7"
242 | ignore-by-default "^1.0.1"
243 | minimatch "^3.1.2"
244 | pstree.remy "^1.1.8"
245 | semver "^5.7.1"
246 | simple-update-notifier "^1.0.7"
247 | supports-color "^5.5.0"
248 | touch "^3.1.0"
249 | undefsafe "^2.0.5"
250 |
251 | nopt@~1.0.10:
252 | version "1.0.10"
253 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee"
254 | integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==
255 | dependencies:
256 | abbrev "1"
257 |
258 | normalize-path@^3.0.0, normalize-path@~3.0.0:
259 | version "3.0.0"
260 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
261 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
262 |
263 | picomatch@^2.0.4, picomatch@^2.2.1:
264 | version "2.3.1"
265 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
266 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
267 |
268 | pstree.remy@^1.1.8:
269 | version "1.1.8"
270 | resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a"
271 | integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==
272 |
273 | readdirp@~3.6.0:
274 | version "3.6.0"
275 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
276 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
277 | dependencies:
278 | picomatch "^2.2.1"
279 |
280 | regenerator-runtime@^0.13.11:
281 | version "0.13.11"
282 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
283 | integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
284 |
285 | require-directory@^2.1.1:
286 | version "2.1.1"
287 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
288 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
289 |
290 | rxjs@^7.8.1:
291 | version "7.8.1"
292 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543"
293 | integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==
294 | dependencies:
295 | tslib "^2.1.0"
296 |
297 | semver@^5.7.1:
298 | version "5.7.1"
299 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
300 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
301 |
302 | semver@~7.0.0:
303 | version "7.0.0"
304 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
305 | integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
306 |
307 | shell-quote@^1.8.1:
308 | version "1.8.1"
309 | resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680"
310 | integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==
311 |
312 | simple-update-notifier@^1.0.7:
313 | version "1.1.0"
314 | resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82"
315 | integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==
316 | dependencies:
317 | semver "~7.0.0"
318 |
319 | spawn-command@0.0.2:
320 | version "0.0.2"
321 | resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e"
322 | integrity sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==
323 |
324 | string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
325 | version "4.2.3"
326 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
327 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
328 | dependencies:
329 | emoji-regex "^8.0.0"
330 | is-fullwidth-code-point "^3.0.0"
331 | strip-ansi "^6.0.1"
332 |
333 | strip-ansi@^6.0.0, strip-ansi@^6.0.1:
334 | version "6.0.1"
335 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
336 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
337 | dependencies:
338 | ansi-regex "^5.0.1"
339 |
340 | supports-color@^5.5.0:
341 | version "5.5.0"
342 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
343 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
344 | dependencies:
345 | has-flag "^3.0.0"
346 |
347 | supports-color@^7.1.0:
348 | version "7.2.0"
349 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
350 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
351 | dependencies:
352 | has-flag "^4.0.0"
353 |
354 | supports-color@^8.1.1:
355 | version "8.1.1"
356 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
357 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
358 | dependencies:
359 | has-flag "^4.0.0"
360 |
361 | to-regex-range@^5.0.1:
362 | version "5.0.1"
363 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
364 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
365 | dependencies:
366 | is-number "^7.0.0"
367 |
368 | touch@^3.1.0:
369 | version "3.1.0"
370 | resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b"
371 | integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==
372 | dependencies:
373 | nopt "~1.0.10"
374 |
375 | tree-kill@^1.2.2:
376 | version "1.2.2"
377 | resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc"
378 | integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==
379 |
380 | tslib@^2.1.0:
381 | version "2.6.0"
382 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3"
383 | integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==
384 |
385 | undefsafe@^2.0.5:
386 | version "2.0.5"
387 | resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c"
388 | integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==
389 |
390 | wrap-ansi@^7.0.0:
391 | version "7.0.0"
392 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
393 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
394 | dependencies:
395 | ansi-styles "^4.0.0"
396 | string-width "^4.1.0"
397 | strip-ansi "^6.0.0"
398 |
399 | y18n@^5.0.5:
400 | version "5.0.8"
401 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
402 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
403 |
404 | yargs-parser@^21.1.1:
405 | version "21.1.1"
406 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
407 | integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
408 |
409 | yargs@^17.7.2:
410 | version "17.7.2"
411 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
412 | integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
413 | dependencies:
414 | cliui "^8.0.1"
415 | escalade "^3.1.1"
416 | get-caller-file "^2.0.5"
417 | require-directory "^2.1.1"
418 | string-width "^4.2.3"
419 | y18n "^5.0.5"
420 | yargs-parser "^21.1.1"
421 |
--------------------------------------------------------------------------------