├── .env.example ├── .gitignore ├── README.md ├── client ├── .gitignore ├── Dockerfile ├── README.md ├── package-lock.json ├── package.json ├── public │ ├── favicon.ico │ ├── index.html │ ├── logo192.png │ ├── logo512.png │ ├── manifest.json │ └── robots.txt └── src │ ├── App.js │ ├── App.test.js │ ├── components │ ├── AddClientModal.jsx │ ├── AddProjectModal.jsx │ ├── ClientInfo.jsx │ ├── ClientRow.jsx │ ├── Clients.jsx │ ├── DeleteProjectButton.jsx │ ├── EditProjectForm.jsx │ ├── Header.jsx │ ├── ProjectCard.jsx │ ├── Projects.jsx │ ├── Spinner.jsx │ └── assets │ │ └── logo.png │ ├── index.css │ ├── index.js │ ├── mutations │ ├── clientMutations.js │ └── projectMutations.js │ ├── pages │ ├── Home.jsx │ ├── NotFound.jsx │ └── Project.jsx │ ├── queries │ ├── clientQueries.js │ └── projectQueries.js │ ├── reportWebVitals.js │ └── setupTests.js ├── docker-compose.yml ├── package-lock.json ├── package.json └── server ├── Dockerfile ├── config └── db.js ├── index.js ├── models ├── Client.js └── Project.js ├── package-lock.json ├── package.json ├── sampleData.js └── schema ├── .DS_Store └── schema.js /.env.example: -------------------------------------------------------------------------------- 1 | NODE_ENV = 'development' 2 | PORT = 5000 3 | MONGO_URI = 'mongodb://mongo:27017/test' # This is the URI of your mongoDB docker -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env 3 | data -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Project Mgmt App 2 | 3 | Project management app from my [GraphQL crash course](https://youtu.be/BcLNfwF04Kw) on YouTube 4 | 5 | ## Usage 6 | 7 | ### Install 8 | 9 | 1. Install Docker for your operating system. 10 | 2. Install the [Docker Compose](https://docs.docker.com/compose/install/) tool. 11 | 3. Run docker-compose 12 | 13 | ``` 14 | docker-compose up -d --build 15 | ``` 16 | 17 | This will start backend, frontend and MongoDB. 18 | -------------------------------------------------------------------------------- /client/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /client/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:16-buster 2 | 3 | WORKDIR /app 4 | 5 | COPY package.json /app/package.json 6 | COPY package-lock.json /app/package-lock.json 7 | 8 | RUN npm ci 9 | 10 | RUN mkdir node_modules/.cache && chmod -R 777 node_modules/.cache 11 | 12 | COPY . /app 13 | 14 | EXPOSE 3000 15 | 16 | CMD ["npm", "start"] -------------------------------------------------------------------------------- /client/README.md: -------------------------------------------------------------------------------- 1 | # Getting Started with Create React App 2 | 3 | This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). 4 | 5 | ## Available Scripts 6 | 7 | In the project directory, you can run: 8 | 9 | ### `npm start` 10 | 11 | Runs the app in the development mode.\ 12 | Open [http://localhost:3000](http://localhost:3000) to view it in your browser. 13 | 14 | The page will reload when you make changes.\ 15 | You may also see any lint errors in the console. 16 | 17 | ### `npm test` 18 | 19 | Launches the test runner in the interactive watch mode.\ 20 | See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. 21 | 22 | ### `npm run build` 23 | 24 | Builds the app for production to the `build` folder.\ 25 | It correctly bundles React in production mode and optimizes the build for the best performance. 26 | 27 | The build is minified and the filenames include the hashes.\ 28 | Your app is ready to be deployed! 29 | 30 | See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. 31 | 32 | ### `npm run eject` 33 | 34 | **Note: this is a one-way operation. Once you `eject`, you can't go back!** 35 | 36 | If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. 37 | 38 | Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own. 39 | 40 | You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it. 41 | 42 | ## Learn More 43 | 44 | You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). 45 | 46 | To learn React, check out the [React documentation](https://reactjs.org/). 47 | 48 | ### Code Splitting 49 | 50 | This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting) 51 | 52 | ### Analyzing the Bundle Size 53 | 54 | This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size) 55 | 56 | ### Making a Progressive Web App 57 | 58 | This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app) 59 | 60 | ### Advanced Configuration 61 | 62 | This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration) 63 | 64 | ### Deployment 65 | 66 | This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment) 67 | 68 | ### `npm run build` fails to minify 69 | 70 | This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify) 71 | -------------------------------------------------------------------------------- /client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "client", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "@apollo/client": "^3.6.6", 7 | "@testing-library/jest-dom": "^5.16.4", 8 | "@testing-library/react": "^13.3.0", 9 | "@testing-library/user-event": "^13.5.0", 10 | "graphql": "^16.5.0", 11 | "react": "^18.1.0", 12 | "react-dom": "^18.1.0", 13 | "react-icons": "^4.4.0", 14 | "react-router-dom": "^6.3.0", 15 | "react-scripts": "5.0.1", 16 | "web-vitals": "^2.1.4" 17 | }, 18 | "scripts": { 19 | "start": "react-scripts start", 20 | "build": "react-scripts build", 21 | "test": "react-scripts test", 22 | "eject": "react-scripts eject" 23 | }, 24 | "eslintConfig": { 25 | "extends": [ 26 | "react-app", 27 | "react-app/jest" 28 | ] 29 | }, 30 | "browserslist": { 31 | "production": [ 32 | ">0.2%", 33 | "not dead", 34 | "not op_mini all" 35 | ], 36 | "development": [ 37 | "last 1 chrome version", 38 | "last 1 firefox version", 39 | "last 1 safari version" 40 | ] 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /client/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradtraversy/project-mgmt-graphql/5c001d8ce54d4aed45032f662ff139ad45efe1ef/client/public/favicon.ico -------------------------------------------------------------------------------- /client/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | 17 | 18 | 27 | 33 | 38 | Project Mgmt 39 | 40 | 41 | 42 |
43 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /client/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradtraversy/project-mgmt-graphql/5c001d8ce54d4aed45032f662ff139ad45efe1ef/client/public/logo192.png -------------------------------------------------------------------------------- /client/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradtraversy/project-mgmt-graphql/5c001d8ce54d4aed45032f662ff139ad45efe1ef/client/public/logo512.png -------------------------------------------------------------------------------- /client/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /client/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /client/src/App.js: -------------------------------------------------------------------------------- 1 | import { BrowserRouter as Router, Route, Routes } from 'react-router-dom'; 2 | import Header from './components/Header'; 3 | import { ApolloProvider, ApolloClient, InMemoryCache } from '@apollo/client'; 4 | import Home from './pages/Home'; 5 | import Project from './pages/Project'; 6 | import NotFound from './pages/NotFound'; 7 | 8 | const cache = new InMemoryCache({ 9 | typePolicies: { 10 | Query: { 11 | fields: { 12 | clients: { 13 | merge(existing, incoming) { 14 | return incoming; 15 | }, 16 | }, 17 | projects: { 18 | merge(existing, incoming) { 19 | return incoming; 20 | }, 21 | }, 22 | }, 23 | }, 24 | }, 25 | }); 26 | 27 | const client = new ApolloClient({ 28 | uri: 'http://localhost:5000/graphql', 29 | cache, 30 | }); 31 | 32 | function App() { 33 | return ( 34 | <> 35 | 36 | 37 |
38 |
39 | 40 | } /> 41 | } /> 42 | } /> 43 | 44 |
45 | 46 | 47 | 48 | ); 49 | } 50 | 51 | export default App; 52 | -------------------------------------------------------------------------------- /client/src/App.test.js: -------------------------------------------------------------------------------- 1 | import { render, screen } from '@testing-library/react'; 2 | import App from './App'; 3 | 4 | test('renders learn react link', () => { 5 | render(); 6 | const linkElement = screen.getByText(/learn react/i); 7 | expect(linkElement).toBeInTheDocument(); 8 | }); 9 | -------------------------------------------------------------------------------- /client/src/components/AddClientModal.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | import { FaUser } from 'react-icons/fa'; 3 | import { useMutation } from '@apollo/client'; 4 | import { ADD_CLIENT } from '../mutations/clientMutations'; 5 | import { GET_CLIENTS } from '../queries/clientQueries'; 6 | 7 | export default function AddClientModal() { 8 | const [name, setName] = useState(''); 9 | const [email, setEmail] = useState(''); 10 | const [phone, setPhone] = useState(''); 11 | 12 | const [addClient] = useMutation(ADD_CLIENT, { 13 | variables: { name, email, phone }, 14 | update(cache, { data: { addClient } }) { 15 | const { clients } = cache.readQuery({ query: GET_CLIENTS }); 16 | 17 | cache.writeQuery({ 18 | query: GET_CLIENTS, 19 | data: { clients: [...clients, addClient] }, 20 | }); 21 | }, 22 | }); 23 | 24 | const onSubmit = (e) => { 25 | e.preventDefault(); 26 | 27 | if (name === '' || email === '' || phone === '') { 28 | return alert('Please fill in all fields'); 29 | } 30 | 31 | addClient(name, email, phone); 32 | 33 | setName(''); 34 | setEmail(''); 35 | setPhone(''); 36 | }; 37 | 38 | return ( 39 | <> 40 | 51 | 52 | 116 | 117 | ); 118 | } 119 | -------------------------------------------------------------------------------- /client/src/components/AddProjectModal.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | import { FaList } from 'react-icons/fa'; 3 | import { useMutation, useQuery } from '@apollo/client'; 4 | import { ADD_PROJECT } from '../mutations/projectMutations'; 5 | import { GET_PROJECTS } from '../queries/projectQueries'; 6 | import { GET_CLIENTS } from '../queries/clientQueries'; 7 | 8 | export default function AddProjectModal() { 9 | const [name, setName] = useState(''); 10 | const [description, setDescription] = useState(''); 11 | const [clientId, setClientId] = useState(''); 12 | const [status, setStatus] = useState('new'); 13 | 14 | const [addProject] = useMutation(ADD_PROJECT, { 15 | variables: { name, description, clientId, status }, 16 | update(cache, { data: { addProject } }) { 17 | const { projects } = cache.readQuery({ query: GET_PROJECTS }); 18 | cache.writeQuery({ 19 | query: GET_PROJECTS, 20 | data: { projects: [...projects, addProject] }, 21 | }); 22 | }, 23 | }); 24 | 25 | // Get Clients for select 26 | const { loading, error, data } = useQuery(GET_CLIENTS); 27 | 28 | const onSubmit = (e) => { 29 | e.preventDefault(); 30 | 31 | if (name === '' || description === '' || status === '') { 32 | return alert('Please fill in all fields'); 33 | } 34 | 35 | addProject(name, description, clientId, status); 36 | 37 | setName(''); 38 | setDescription(''); 39 | setStatus('new'); 40 | setClientId(''); 41 | }; 42 | 43 | if (loading) return null; 44 | if (error) return 'Something Went Wrong'; 45 | 46 | return ( 47 | <> 48 | {!loading && !error && ( 49 | <> 50 | 61 | 62 | 145 | 146 | )} 147 | 148 | ); 149 | } 150 | -------------------------------------------------------------------------------- /client/src/components/ClientInfo.jsx: -------------------------------------------------------------------------------- 1 | import { FaEnvelope, FaPhone, FaIdBadge } from 'react-icons/fa'; 2 | 3 | export default function ClientInfo({ client }) { 4 | return ( 5 | <> 6 |
Client Information
7 |
    8 |
  • 9 | {client.name} 10 |
  • 11 |
  • 12 | {client.email} 13 |
  • 14 |
  • 15 | {client.phone} 16 |
  • 17 |
18 | 19 | ); 20 | } 21 | -------------------------------------------------------------------------------- /client/src/components/ClientRow.jsx: -------------------------------------------------------------------------------- 1 | import { FaTrash } from 'react-icons/fa'; 2 | import { useMutation } from '@apollo/client'; 3 | import { DELETE_CLIENT } from '../mutations/clientMutations'; 4 | import { GET_CLIENTS } from '../queries/clientQueries'; 5 | import { GET_PROJECTS } from '../queries/projectQueries'; 6 | 7 | export default function ClientRow({ client }) { 8 | const [deleteClient] = useMutation(DELETE_CLIENT, { 9 | variables: { id: client.id }, 10 | refetchQueries: [{ query: GET_CLIENTS }, { query: GET_PROJECTS }], 11 | // update(cache, { data: { deleteClient } }) { 12 | // const { clients } = cache.readQuery({ query: GET_CLIENTS }); 13 | // cache.writeQuery({ 14 | // query: GET_CLIENTS, 15 | // data: { 16 | // clients: clients.filter((client) => client.id !== deleteClient.id), 17 | // }, 18 | // }); 19 | // }, 20 | }); 21 | 22 | return ( 23 | 24 | {client.name} 25 | {client.email} 26 | {client.phone} 27 | 28 | 31 | 32 | 33 | ); 34 | } 35 | -------------------------------------------------------------------------------- /client/src/components/Clients.jsx: -------------------------------------------------------------------------------- 1 | import { useQuery } from '@apollo/client'; 2 | import ClientRow from './ClientRow'; 3 | import Spinner from './Spinner'; 4 | import { GET_CLIENTS } from '../queries/clientQueries'; 5 | 6 | export default function Clients() { 7 | const { loading, error, data } = useQuery(GET_CLIENTS); 8 | 9 | if (loading) return ; 10 | if (error) return

Something Went Wrong

; 11 | 12 | return ( 13 | <> 14 | {!loading && !error && ( 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | {data.clients.map((client) => ( 26 | 27 | ))} 28 | 29 |
NameEmailPhone
30 | )} 31 | 32 | ); 33 | } 34 | -------------------------------------------------------------------------------- /client/src/components/DeleteProjectButton.jsx: -------------------------------------------------------------------------------- 1 | import { useNavigate } from 'react-router-dom'; 2 | import { FaTrash } from 'react-icons/fa'; 3 | import { DELETE_PROJECT } from '../mutations/projectMutations'; 4 | import { GET_PROJECTS } from '../queries/projectQueries'; 5 | import { useMutation } from '@apollo/client'; 6 | 7 | export default function DeleteProjectButton({ projectId }) { 8 | const navigate = useNavigate(); 9 | 10 | const [deleteProject] = useMutation(DELETE_PROJECT, { 11 | variables: { id: projectId }, 12 | onCompleted: () => navigate('/'), 13 | refetchQueries: [{ query: GET_PROJECTS }], 14 | }); 15 | 16 | return ( 17 |
18 | 21 |
22 | ); 23 | } 24 | -------------------------------------------------------------------------------- /client/src/components/EditProjectForm.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from "react"; 2 | import { useMutation } from "@apollo/client"; 3 | import { GET_PROJECT } from "../queries/projectQueries"; 4 | import { UPDATE_PROJECT } from "../mutations/projectMutations"; 5 | 6 | export default function EditProjectForm({ project }) { 7 | const [name, setName] = useState(project.name); 8 | const [description, setDescription] = useState(project.description); 9 | const [status, setStatus] = useState(() => { 10 | switch (project.status) { 11 | case "Not Started": 12 | return "new"; 13 | case "In Progress": 14 | return "progress"; 15 | case "Completed": 16 | return "completed"; 17 | default: 18 | throw new Error(`Unknown status: ${project.status}`); 19 | } 20 | }); 21 | 22 | const [updateProject] = useMutation(UPDATE_PROJECT, { 23 | variables: { id: project.id, name, description, status }, 24 | refetchQueries: [{ query: GET_PROJECT, variables: { id: project.id } }], 25 | }); 26 | 27 | const onSubmit = (e) => { 28 | e.preventDefault(); 29 | 30 | if (!name || !description || !status) { 31 | return alert("Please fill out all fields"); 32 | } 33 | 34 | updateProject(name, description, status); 35 | }; 36 | 37 | return ( 38 |
39 |

Update Project Details

40 |
41 |
42 | 43 | setName(e.target.value)} 49 | /> 50 |
51 |
52 | 53 | 59 |
60 |
61 | 62 | 72 |
73 | 74 | 77 |
78 |
79 | ); 80 | } 81 | -------------------------------------------------------------------------------- /client/src/components/Header.jsx: -------------------------------------------------------------------------------- 1 | import logo from './assets/logo.png'; 2 | 3 | export default function Header() { 4 | return ( 5 | 15 | ); 16 | } 17 | -------------------------------------------------------------------------------- /client/src/components/ProjectCard.jsx: -------------------------------------------------------------------------------- 1 | export default function ProjectCard({ project }) { 2 | return ( 3 |
4 |
5 |
6 |
7 |
{project.name}
8 | 9 | 10 | View 11 | 12 |
13 |

14 | Status: {project.status} 15 |

16 |
17 |
18 |
19 | ); 20 | } 21 | -------------------------------------------------------------------------------- /client/src/components/Projects.jsx: -------------------------------------------------------------------------------- 1 | import Spinner from './Spinner'; 2 | import { useQuery } from '@apollo/client'; 3 | import ProjectCard from './ProjectCard'; 4 | import { GET_PROJECTS } from '../queries/projectQueries'; 5 | 6 | export default function Projects() { 7 | const { loading, error, data } = useQuery(GET_PROJECTS); 8 | 9 | if (loading) return ; 10 | if (error) return

Something Went Wrong

; 11 | 12 | return ( 13 | <> 14 | {data.projects.length > 0 ? ( 15 |
16 | {data.projects.map((project) => ( 17 | 18 | ))} 19 |
20 | ) : ( 21 |

No Projects

22 | )} 23 | 24 | ); 25 | } 26 | -------------------------------------------------------------------------------- /client/src/components/Spinner.jsx: -------------------------------------------------------------------------------- 1 | export default function Spinner() { 2 | return ( 3 |
4 |
5 | 6 |
7 |
8 | ); 9 | } 10 | -------------------------------------------------------------------------------- /client/src/components/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradtraversy/project-mgmt-graphql/5c001d8ce54d4aed45032f662ff139ad45efe1ef/client/src/components/assets/logo.png -------------------------------------------------------------------------------- /client/src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', 12 | monospace; 13 | } 14 | 15 | .navbar-brand { 16 | color: #df3ca6; 17 | } 18 | 19 | .navbar-brand img { 20 | width: 30px; 21 | margin-right: 10px; 22 | } 23 | 24 | .btn { 25 | font-size: 15px; 26 | } 27 | 28 | .btn-primary, 29 | .bg-primary { 30 | background-color: #df3ca6 !important; 31 | border: none; 32 | } 33 | 34 | .btn-primary:hover { 35 | background-color: #df3ca6; 36 | opacity: 0.9; 37 | } 38 | 39 | .btn-secondary { 40 | background-color: #7430f9; 41 | } 42 | 43 | .btn-secondary:hover { 44 | background-color: #7430f9; 45 | opacity: 0.9; 46 | } 47 | 48 | .icon { 49 | margin-right: 5px; 50 | } 51 | -------------------------------------------------------------------------------- /client/src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom/client'; 3 | import './index.css'; 4 | import App from './App'; 5 | import reportWebVitals from './reportWebVitals'; 6 | 7 | const root = ReactDOM.createRoot(document.getElementById('root')); 8 | root.render( 9 | 10 | 11 | 12 | ); 13 | 14 | // If you want to start measuring performance in your app, pass a function 15 | // to log results (for example: reportWebVitals(console.log)) 16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals 17 | reportWebVitals(); 18 | -------------------------------------------------------------------------------- /client/src/mutations/clientMutations.js: -------------------------------------------------------------------------------- 1 | import { gql } from '@apollo/client'; 2 | 3 | const ADD_CLIENT = gql` 4 | mutation addClient($name: String!, $email: String!, $phone: String!) { 5 | addClient(name: $name, email: $email, phone: $phone) { 6 | id 7 | name 8 | email 9 | phone 10 | } 11 | } 12 | `; 13 | 14 | const DELETE_CLIENT = gql` 15 | mutation deleteClient($id: ID!) { 16 | deleteClient(id: $id) { 17 | id 18 | name 19 | email 20 | phone 21 | } 22 | } 23 | `; 24 | 25 | export { ADD_CLIENT, DELETE_CLIENT }; 26 | -------------------------------------------------------------------------------- /client/src/mutations/projectMutations.js: -------------------------------------------------------------------------------- 1 | import { gql } from '@apollo/client'; 2 | 3 | const ADD_PROJECT = gql` 4 | mutation AddProject( 5 | $name: String! 6 | $description: String! 7 | $status: ProjectStatus! 8 | $clientId: ID! 9 | ) { 10 | addProject( 11 | name: $name 12 | description: $description 13 | status: $status 14 | clientId: $clientId 15 | ) { 16 | id 17 | name 18 | description 19 | status 20 | client { 21 | id 22 | name 23 | email 24 | phone 25 | } 26 | } 27 | } 28 | `; 29 | 30 | const DELETE_PROJECT = gql` 31 | mutation DeleteProject($id: ID!) { 32 | deleteProject(id: $id) { 33 | id 34 | } 35 | } 36 | `; 37 | 38 | const UPDATE_PROJECT = gql` 39 | mutation UpdateProject( 40 | $id: ID! 41 | $name: String! 42 | $description: String! 43 | $status: ProjectStatusUpdate! 44 | ) { 45 | updateProject( 46 | id: $id 47 | name: $name 48 | description: $description 49 | status: $status 50 | ) { 51 | id 52 | name 53 | description 54 | status 55 | client { 56 | id 57 | name 58 | email 59 | phone 60 | } 61 | } 62 | } 63 | `; 64 | 65 | export { ADD_PROJECT, DELETE_PROJECT, UPDATE_PROJECT }; 66 | -------------------------------------------------------------------------------- /client/src/pages/Home.jsx: -------------------------------------------------------------------------------- 1 | import Clients from '../components/Clients'; 2 | import Projects from '../components/Projects'; 3 | import AddClientModal from '../components/AddClientModal'; 4 | import AddProjectModal from '../components/AddProjectModal'; 5 | 6 | export default function Home() { 7 | return ( 8 | <> 9 |
10 | 11 | 12 |
13 | 14 |
15 | 16 | 17 | ); 18 | } 19 | -------------------------------------------------------------------------------- /client/src/pages/NotFound.jsx: -------------------------------------------------------------------------------- 1 | import { FaExclamationTriangle } from 'react-icons/fa'; 2 | import { Link } from 'react-router-dom'; 3 | 4 | export default function NotFound() { 5 | return ( 6 |
7 | 8 |

404

9 |

Sorry, this page does not exist

10 | 11 | Go Back 12 | 13 |
14 | ); 15 | } 16 | -------------------------------------------------------------------------------- /client/src/pages/Project.jsx: -------------------------------------------------------------------------------- 1 | import { Link, useParams } from 'react-router-dom'; 2 | import Spinner from '../components/Spinner'; 3 | import ClientInfo from '../components/ClientInfo'; 4 | import DeleteProjectButton from '../components/DeleteProjectButton'; 5 | import EditProjectForm from '../components/EditProjectForm'; 6 | import { useQuery } from '@apollo/client'; 7 | import { GET_PROJECT } from '../queries/projectQueries'; 8 | 9 | export default function Project() { 10 | const { id } = useParams(); 11 | const { loading, error, data } = useQuery(GET_PROJECT, { variables: { id } }); 12 | 13 | if (loading) return ; 14 | if (error) return

Something Went Wrong

; 15 | 16 | return ( 17 | <> 18 | {!loading && !error && ( 19 |
20 | 21 | Back 22 | 23 | 24 |

{data.project.name}

25 |

{data.project.description}

26 | 27 |
Project Status
28 |

{data.project.status}

29 | 30 | 31 | 32 | 33 | 34 | 35 |
36 | )} 37 | 38 | ); 39 | } 40 | -------------------------------------------------------------------------------- /client/src/queries/clientQueries.js: -------------------------------------------------------------------------------- 1 | import { gql } from '@apollo/client'; 2 | 3 | const GET_CLIENTS = gql` 4 | query getClients { 5 | clients { 6 | id 7 | name 8 | email 9 | phone 10 | } 11 | } 12 | `; 13 | 14 | export { GET_CLIENTS }; 15 | -------------------------------------------------------------------------------- /client/src/queries/projectQueries.js: -------------------------------------------------------------------------------- 1 | import { gql } from '@apollo/client'; 2 | 3 | const GET_PROJECTS = gql` 4 | query getProjects { 5 | projects { 6 | id 7 | name 8 | status 9 | } 10 | } 11 | `; 12 | 13 | const GET_PROJECT = gql` 14 | query getProject($id: ID!) { 15 | project(id: $id) { 16 | id 17 | name 18 | description 19 | status 20 | client { 21 | id 22 | name 23 | email 24 | phone 25 | } 26 | } 27 | } 28 | `; 29 | 30 | export { GET_PROJECTS, GET_PROJECT }; 31 | -------------------------------------------------------------------------------- /client/src/reportWebVitals.js: -------------------------------------------------------------------------------- 1 | const reportWebVitals = onPerfEntry => { 2 | if (onPerfEntry && onPerfEntry instanceof Function) { 3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 4 | getCLS(onPerfEntry); 5 | getFID(onPerfEntry); 6 | getFCP(onPerfEntry); 7 | getLCP(onPerfEntry); 8 | getTTFB(onPerfEntry); 9 | }); 10 | } 11 | }; 12 | 13 | export default reportWebVitals; 14 | -------------------------------------------------------------------------------- /client/src/setupTests.js: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom'; 6 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | 3 | services: 4 | frontend: 5 | build: client 6 | container_name: client 7 | restart: always 8 | ports: 9 | - 3000:3000 10 | stdin_open: true 11 | volumes: 12 | - ./client:/app 13 | - /app/node_modules 14 | networks: 15 | - react-express 16 | depends_on: 17 | - backend 18 | 19 | backend: 20 | build: server 21 | container_name: server 22 | restart: always 23 | ports: 24 | - 5000:5000 25 | volumes: 26 | - ./server:/app 27 | - /app/node_modules 28 | depends_on: 29 | - mongo 30 | networks: 31 | - express-mongo 32 | - react-express 33 | 34 | mongo: 35 | container_name: mongo 36 | restart: always 37 | image: mongo:4.2.0 38 | volumes: 39 | - ./data:/data/db 40 | networks: 41 | - express-mongo 42 | expose: 43 | - 27017 44 | networks: 45 | react-express: 46 | express-mongo: 47 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "project-mgmt-app", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "project-mgmt-app", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "colors": "^1.4.0", 13 | "cors": "^2.8.5", 14 | "express": "^4.18.1", 15 | "express-graphql": "^0.12.0", 16 | "graphql": "^15.8.0", 17 | "mongoose": "^7.0.0" 18 | }, 19 | "devDependencies": { 20 | "dotenv": "^16.0.1", 21 | "nodemon": "^2.0.16" 22 | } 23 | }, 24 | "node_modules/@sindresorhus/is": { 25 | "version": "0.14.0", 26 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", 27 | "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", 28 | "dev": true, 29 | "engines": { 30 | "node": ">=6" 31 | } 32 | }, 33 | "node_modules/@szmarczak/http-timer": { 34 | "version": "1.1.2", 35 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", 36 | "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", 37 | "dev": true, 38 | "dependencies": { 39 | "defer-to-connect": "^1.0.1" 40 | }, 41 | "engines": { 42 | "node": ">=6" 43 | } 44 | }, 45 | "node_modules/@types/node": { 46 | "version": "18.14.6", 47 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.6.tgz", 48 | "integrity": "sha512-93+VvleD3mXwlLI/xASjw0FzKcwzl3OdTCzm1LaRfqgS21gfFtK3zDXM5Op9TeeMsJVOaJ2VRDpT9q4Y3d0AvA==" 49 | }, 50 | "node_modules/@types/webidl-conversions": { 51 | "version": "7.0.0", 52 | "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 53 | "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==" 54 | }, 55 | "node_modules/@types/whatwg-url": { 56 | "version": "8.2.2", 57 | "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", 58 | "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", 59 | "dependencies": { 60 | "@types/node": "*", 61 | "@types/webidl-conversions": "*" 62 | } 63 | }, 64 | "node_modules/abbrev": { 65 | "version": "1.1.1", 66 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 67 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", 68 | "dev": true 69 | }, 70 | "node_modules/accepts": { 71 | "version": "1.3.8", 72 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 73 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 74 | "dependencies": { 75 | "mime-types": "~2.1.34", 76 | "negotiator": "0.6.3" 77 | }, 78 | "engines": { 79 | "node": ">= 0.6" 80 | } 81 | }, 82 | "node_modules/ansi-align": { 83 | "version": "3.0.1", 84 | "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", 85 | "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", 86 | "dev": true, 87 | "dependencies": { 88 | "string-width": "^4.1.0" 89 | } 90 | }, 91 | "node_modules/ansi-regex": { 92 | "version": "5.0.1", 93 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 94 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 95 | "dev": true, 96 | "engines": { 97 | "node": ">=8" 98 | } 99 | }, 100 | "node_modules/ansi-styles": { 101 | "version": "4.3.0", 102 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 103 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 104 | "dev": true, 105 | "dependencies": { 106 | "color-convert": "^2.0.1" 107 | }, 108 | "engines": { 109 | "node": ">=8" 110 | }, 111 | "funding": { 112 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 113 | } 114 | }, 115 | "node_modules/anymatch": { 116 | "version": "3.1.2", 117 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 118 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 119 | "dev": true, 120 | "dependencies": { 121 | "normalize-path": "^3.0.0", 122 | "picomatch": "^2.0.4" 123 | }, 124 | "engines": { 125 | "node": ">= 8" 126 | } 127 | }, 128 | "node_modules/array-flatten": { 129 | "version": "1.1.1", 130 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 131 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 132 | }, 133 | "node_modules/balanced-match": { 134 | "version": "1.0.2", 135 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 136 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 137 | "dev": true 138 | }, 139 | "node_modules/binary-extensions": { 140 | "version": "2.2.0", 141 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 142 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 143 | "dev": true, 144 | "engines": { 145 | "node": ">=8" 146 | } 147 | }, 148 | "node_modules/body-parser": { 149 | "version": "1.20.0", 150 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", 151 | "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", 152 | "dependencies": { 153 | "bytes": "3.1.2", 154 | "content-type": "~1.0.4", 155 | "debug": "2.6.9", 156 | "depd": "2.0.0", 157 | "destroy": "1.2.0", 158 | "http-errors": "2.0.0", 159 | "iconv-lite": "0.4.24", 160 | "on-finished": "2.4.1", 161 | "qs": "6.10.3", 162 | "raw-body": "2.5.1", 163 | "type-is": "~1.6.18", 164 | "unpipe": "1.0.0" 165 | }, 166 | "engines": { 167 | "node": ">= 0.8", 168 | "npm": "1.2.8000 || >= 1.4.16" 169 | } 170 | }, 171 | "node_modules/boxen": { 172 | "version": "5.1.2", 173 | "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", 174 | "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", 175 | "dev": true, 176 | "dependencies": { 177 | "ansi-align": "^3.0.0", 178 | "camelcase": "^6.2.0", 179 | "chalk": "^4.1.0", 180 | "cli-boxes": "^2.2.1", 181 | "string-width": "^4.2.2", 182 | "type-fest": "^0.20.2", 183 | "widest-line": "^3.1.0", 184 | "wrap-ansi": "^7.0.0" 185 | }, 186 | "engines": { 187 | "node": ">=10" 188 | }, 189 | "funding": { 190 | "url": "https://github.com/sponsors/sindresorhus" 191 | } 192 | }, 193 | "node_modules/brace-expansion": { 194 | "version": "1.1.11", 195 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 196 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 197 | "dev": true, 198 | "dependencies": { 199 | "balanced-match": "^1.0.0", 200 | "concat-map": "0.0.1" 201 | } 202 | }, 203 | "node_modules/braces": { 204 | "version": "3.0.2", 205 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 206 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 207 | "dev": true, 208 | "dependencies": { 209 | "fill-range": "^7.0.1" 210 | }, 211 | "engines": { 212 | "node": ">=8" 213 | } 214 | }, 215 | "node_modules/bson": { 216 | "version": "5.0.1", 217 | "resolved": "https://registry.npmjs.org/bson/-/bson-5.0.1.tgz", 218 | "integrity": "sha512-y09gBGusgHtinMon/GVbv1J6FrXhnr/+6hqLlSmEFzkz6PodqF6TxjyvfvY3AfO+oG1mgUtbC86xSbOlwvM62Q==", 219 | "engines": { 220 | "node": ">=14.20.1" 221 | } 222 | }, 223 | "node_modules/bytes": { 224 | "version": "3.1.2", 225 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 226 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 227 | "engines": { 228 | "node": ">= 0.8" 229 | } 230 | }, 231 | "node_modules/cacheable-request": { 232 | "version": "6.1.0", 233 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", 234 | "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", 235 | "dev": true, 236 | "dependencies": { 237 | "clone-response": "^1.0.2", 238 | "get-stream": "^5.1.0", 239 | "http-cache-semantics": "^4.0.0", 240 | "keyv": "^3.0.0", 241 | "lowercase-keys": "^2.0.0", 242 | "normalize-url": "^4.1.0", 243 | "responselike": "^1.0.2" 244 | }, 245 | "engines": { 246 | "node": ">=8" 247 | } 248 | }, 249 | "node_modules/cacheable-request/node_modules/get-stream": { 250 | "version": "5.2.0", 251 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 252 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 253 | "dev": true, 254 | "dependencies": { 255 | "pump": "^3.0.0" 256 | }, 257 | "engines": { 258 | "node": ">=8" 259 | }, 260 | "funding": { 261 | "url": "https://github.com/sponsors/sindresorhus" 262 | } 263 | }, 264 | "node_modules/cacheable-request/node_modules/lowercase-keys": { 265 | "version": "2.0.0", 266 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 267 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", 268 | "dev": true, 269 | "engines": { 270 | "node": ">=8" 271 | } 272 | }, 273 | "node_modules/call-bind": { 274 | "version": "1.0.2", 275 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 276 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 277 | "dependencies": { 278 | "function-bind": "^1.1.1", 279 | "get-intrinsic": "^1.0.2" 280 | }, 281 | "funding": { 282 | "url": "https://github.com/sponsors/ljharb" 283 | } 284 | }, 285 | "node_modules/camelcase": { 286 | "version": "6.3.0", 287 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", 288 | "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", 289 | "dev": true, 290 | "engines": { 291 | "node": ">=10" 292 | }, 293 | "funding": { 294 | "url": "https://github.com/sponsors/sindresorhus" 295 | } 296 | }, 297 | "node_modules/chalk": { 298 | "version": "4.1.2", 299 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 300 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 301 | "dev": true, 302 | "dependencies": { 303 | "ansi-styles": "^4.1.0", 304 | "supports-color": "^7.1.0" 305 | }, 306 | "engines": { 307 | "node": ">=10" 308 | }, 309 | "funding": { 310 | "url": "https://github.com/chalk/chalk?sponsor=1" 311 | } 312 | }, 313 | "node_modules/chalk/node_modules/has-flag": { 314 | "version": "4.0.0", 315 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 316 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 317 | "dev": true, 318 | "engines": { 319 | "node": ">=8" 320 | } 321 | }, 322 | "node_modules/chalk/node_modules/supports-color": { 323 | "version": "7.2.0", 324 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 325 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 326 | "dev": true, 327 | "dependencies": { 328 | "has-flag": "^4.0.0" 329 | }, 330 | "engines": { 331 | "node": ">=8" 332 | } 333 | }, 334 | "node_modules/chokidar": { 335 | "version": "3.5.3", 336 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 337 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 338 | "dev": true, 339 | "funding": [ 340 | { 341 | "type": "individual", 342 | "url": "https://paulmillr.com/funding/" 343 | } 344 | ], 345 | "dependencies": { 346 | "anymatch": "~3.1.2", 347 | "braces": "~3.0.2", 348 | "glob-parent": "~5.1.2", 349 | "is-binary-path": "~2.1.0", 350 | "is-glob": "~4.0.1", 351 | "normalize-path": "~3.0.0", 352 | "readdirp": "~3.6.0" 353 | }, 354 | "engines": { 355 | "node": ">= 8.10.0" 356 | }, 357 | "optionalDependencies": { 358 | "fsevents": "~2.3.2" 359 | } 360 | }, 361 | "node_modules/ci-info": { 362 | "version": "2.0.0", 363 | "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", 364 | "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", 365 | "dev": true 366 | }, 367 | "node_modules/cli-boxes": { 368 | "version": "2.2.1", 369 | "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", 370 | "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", 371 | "dev": true, 372 | "engines": { 373 | "node": ">=6" 374 | }, 375 | "funding": { 376 | "url": "https://github.com/sponsors/sindresorhus" 377 | } 378 | }, 379 | "node_modules/clone-response": { 380 | "version": "1.0.2", 381 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", 382 | "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", 383 | "dev": true, 384 | "dependencies": { 385 | "mimic-response": "^1.0.0" 386 | } 387 | }, 388 | "node_modules/color-convert": { 389 | "version": "2.0.1", 390 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 391 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 392 | "dev": true, 393 | "dependencies": { 394 | "color-name": "~1.1.4" 395 | }, 396 | "engines": { 397 | "node": ">=7.0.0" 398 | } 399 | }, 400 | "node_modules/color-name": { 401 | "version": "1.1.4", 402 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 403 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 404 | "dev": true 405 | }, 406 | "node_modules/colors": { 407 | "version": "1.4.0", 408 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", 409 | "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", 410 | "engines": { 411 | "node": ">=0.1.90" 412 | } 413 | }, 414 | "node_modules/concat-map": { 415 | "version": "0.0.1", 416 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 417 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 418 | "dev": true 419 | }, 420 | "node_modules/configstore": { 421 | "version": "5.0.1", 422 | "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", 423 | "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", 424 | "dev": true, 425 | "dependencies": { 426 | "dot-prop": "^5.2.0", 427 | "graceful-fs": "^4.1.2", 428 | "make-dir": "^3.0.0", 429 | "unique-string": "^2.0.0", 430 | "write-file-atomic": "^3.0.0", 431 | "xdg-basedir": "^4.0.0" 432 | }, 433 | "engines": { 434 | "node": ">=8" 435 | } 436 | }, 437 | "node_modules/content-disposition": { 438 | "version": "0.5.4", 439 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 440 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 441 | "dependencies": { 442 | "safe-buffer": "5.2.1" 443 | }, 444 | "engines": { 445 | "node": ">= 0.6" 446 | } 447 | }, 448 | "node_modules/content-type": { 449 | "version": "1.0.4", 450 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 451 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", 452 | "engines": { 453 | "node": ">= 0.6" 454 | } 455 | }, 456 | "node_modules/cookie": { 457 | "version": "0.5.0", 458 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 459 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", 460 | "engines": { 461 | "node": ">= 0.6" 462 | } 463 | }, 464 | "node_modules/cookie-signature": { 465 | "version": "1.0.6", 466 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 467 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 468 | }, 469 | "node_modules/cors": { 470 | "version": "2.8.5", 471 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", 472 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 473 | "dependencies": { 474 | "object-assign": "^4", 475 | "vary": "^1" 476 | }, 477 | "engines": { 478 | "node": ">= 0.10" 479 | } 480 | }, 481 | "node_modules/crypto-random-string": { 482 | "version": "2.0.0", 483 | "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", 484 | "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", 485 | "dev": true, 486 | "engines": { 487 | "node": ">=8" 488 | } 489 | }, 490 | "node_modules/debug": { 491 | "version": "2.6.9", 492 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 493 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 494 | "dependencies": { 495 | "ms": "2.0.0" 496 | } 497 | }, 498 | "node_modules/decompress-response": { 499 | "version": "3.3.0", 500 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 501 | "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", 502 | "dev": true, 503 | "dependencies": { 504 | "mimic-response": "^1.0.0" 505 | }, 506 | "engines": { 507 | "node": ">=4" 508 | } 509 | }, 510 | "node_modules/deep-extend": { 511 | "version": "0.6.0", 512 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 513 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 514 | "dev": true, 515 | "engines": { 516 | "node": ">=4.0.0" 517 | } 518 | }, 519 | "node_modules/defer-to-connect": { 520 | "version": "1.1.3", 521 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", 522 | "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", 523 | "dev": true 524 | }, 525 | "node_modules/depd": { 526 | "version": "2.0.0", 527 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 528 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 529 | "engines": { 530 | "node": ">= 0.8" 531 | } 532 | }, 533 | "node_modules/destroy": { 534 | "version": "1.2.0", 535 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 536 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 537 | "engines": { 538 | "node": ">= 0.8", 539 | "npm": "1.2.8000 || >= 1.4.16" 540 | } 541 | }, 542 | "node_modules/dot-prop": { 543 | "version": "5.3.0", 544 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", 545 | "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", 546 | "dev": true, 547 | "dependencies": { 548 | "is-obj": "^2.0.0" 549 | }, 550 | "engines": { 551 | "node": ">=8" 552 | } 553 | }, 554 | "node_modules/dotenv": { 555 | "version": "16.0.1", 556 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", 557 | "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==", 558 | "dev": true, 559 | "engines": { 560 | "node": ">=12" 561 | } 562 | }, 563 | "node_modules/duplexer3": { 564 | "version": "0.1.4", 565 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", 566 | "integrity": "sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA==", 567 | "dev": true 568 | }, 569 | "node_modules/ee-first": { 570 | "version": "1.1.1", 571 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 572 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 573 | }, 574 | "node_modules/emoji-regex": { 575 | "version": "8.0.0", 576 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 577 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 578 | "dev": true 579 | }, 580 | "node_modules/encodeurl": { 581 | "version": "1.0.2", 582 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 583 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 584 | "engines": { 585 | "node": ">= 0.8" 586 | } 587 | }, 588 | "node_modules/end-of-stream": { 589 | "version": "1.4.4", 590 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 591 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 592 | "dev": true, 593 | "dependencies": { 594 | "once": "^1.4.0" 595 | } 596 | }, 597 | "node_modules/escape-goat": { 598 | "version": "2.1.1", 599 | "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", 600 | "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", 601 | "dev": true, 602 | "engines": { 603 | "node": ">=8" 604 | } 605 | }, 606 | "node_modules/escape-html": { 607 | "version": "1.0.3", 608 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 609 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 610 | }, 611 | "node_modules/etag": { 612 | "version": "1.8.1", 613 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 614 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 615 | "engines": { 616 | "node": ">= 0.6" 617 | } 618 | }, 619 | "node_modules/express": { 620 | "version": "4.18.1", 621 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", 622 | "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", 623 | "dependencies": { 624 | "accepts": "~1.3.8", 625 | "array-flatten": "1.1.1", 626 | "body-parser": "1.20.0", 627 | "content-disposition": "0.5.4", 628 | "content-type": "~1.0.4", 629 | "cookie": "0.5.0", 630 | "cookie-signature": "1.0.6", 631 | "debug": "2.6.9", 632 | "depd": "2.0.0", 633 | "encodeurl": "~1.0.2", 634 | "escape-html": "~1.0.3", 635 | "etag": "~1.8.1", 636 | "finalhandler": "1.2.0", 637 | "fresh": "0.5.2", 638 | "http-errors": "2.0.0", 639 | "merge-descriptors": "1.0.1", 640 | "methods": "~1.1.2", 641 | "on-finished": "2.4.1", 642 | "parseurl": "~1.3.3", 643 | "path-to-regexp": "0.1.7", 644 | "proxy-addr": "~2.0.7", 645 | "qs": "6.10.3", 646 | "range-parser": "~1.2.1", 647 | "safe-buffer": "5.2.1", 648 | "send": "0.18.0", 649 | "serve-static": "1.15.0", 650 | "setprototypeof": "1.2.0", 651 | "statuses": "2.0.1", 652 | "type-is": "~1.6.18", 653 | "utils-merge": "1.0.1", 654 | "vary": "~1.1.2" 655 | }, 656 | "engines": { 657 | "node": ">= 0.10.0" 658 | } 659 | }, 660 | "node_modules/express-graphql": { 661 | "version": "0.12.0", 662 | "resolved": "https://registry.npmjs.org/express-graphql/-/express-graphql-0.12.0.tgz", 663 | "integrity": "sha512-DwYaJQy0amdy3pgNtiTDuGGM2BLdj+YO2SgbKoLliCfuHv3VVTt7vNG/ZqK2hRYjtYHE2t2KB705EU94mE64zg==", 664 | "dependencies": { 665 | "accepts": "^1.3.7", 666 | "content-type": "^1.0.4", 667 | "http-errors": "1.8.0", 668 | "raw-body": "^2.4.1" 669 | }, 670 | "engines": { 671 | "node": ">= 10.x" 672 | }, 673 | "peerDependencies": { 674 | "graphql": "^14.7.0 || ^15.3.0" 675 | } 676 | }, 677 | "node_modules/express-graphql/node_modules/depd": { 678 | "version": "1.1.2", 679 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 680 | "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", 681 | "engines": { 682 | "node": ">= 0.6" 683 | } 684 | }, 685 | "node_modules/express-graphql/node_modules/http-errors": { 686 | "version": "1.8.0", 687 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz", 688 | "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==", 689 | "dependencies": { 690 | "depd": "~1.1.2", 691 | "inherits": "2.0.4", 692 | "setprototypeof": "1.2.0", 693 | "statuses": ">= 1.5.0 < 2", 694 | "toidentifier": "1.0.0" 695 | }, 696 | "engines": { 697 | "node": ">= 0.6" 698 | } 699 | }, 700 | "node_modules/express-graphql/node_modules/statuses": { 701 | "version": "1.5.0", 702 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 703 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", 704 | "engines": { 705 | "node": ">= 0.6" 706 | } 707 | }, 708 | "node_modules/express-graphql/node_modules/toidentifier": { 709 | "version": "1.0.0", 710 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 711 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", 712 | "engines": { 713 | "node": ">=0.6" 714 | } 715 | }, 716 | "node_modules/fill-range": { 717 | "version": "7.0.1", 718 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 719 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 720 | "dev": true, 721 | "dependencies": { 722 | "to-regex-range": "^5.0.1" 723 | }, 724 | "engines": { 725 | "node": ">=8" 726 | } 727 | }, 728 | "node_modules/finalhandler": { 729 | "version": "1.2.0", 730 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 731 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 732 | "dependencies": { 733 | "debug": "2.6.9", 734 | "encodeurl": "~1.0.2", 735 | "escape-html": "~1.0.3", 736 | "on-finished": "2.4.1", 737 | "parseurl": "~1.3.3", 738 | "statuses": "2.0.1", 739 | "unpipe": "~1.0.0" 740 | }, 741 | "engines": { 742 | "node": ">= 0.8" 743 | } 744 | }, 745 | "node_modules/forwarded": { 746 | "version": "0.2.0", 747 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 748 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 749 | "engines": { 750 | "node": ">= 0.6" 751 | } 752 | }, 753 | "node_modules/fresh": { 754 | "version": "0.5.2", 755 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 756 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 757 | "engines": { 758 | "node": ">= 0.6" 759 | } 760 | }, 761 | "node_modules/fsevents": { 762 | "version": "2.3.2", 763 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 764 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 765 | "dev": true, 766 | "hasInstallScript": true, 767 | "optional": true, 768 | "os": [ 769 | "darwin" 770 | ], 771 | "engines": { 772 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 773 | } 774 | }, 775 | "node_modules/function-bind": { 776 | "version": "1.1.1", 777 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 778 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 779 | }, 780 | "node_modules/get-intrinsic": { 781 | "version": "1.1.1", 782 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 783 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 784 | "dependencies": { 785 | "function-bind": "^1.1.1", 786 | "has": "^1.0.3", 787 | "has-symbols": "^1.0.1" 788 | }, 789 | "funding": { 790 | "url": "https://github.com/sponsors/ljharb" 791 | } 792 | }, 793 | "node_modules/get-stream": { 794 | "version": "4.1.0", 795 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 796 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 797 | "dev": true, 798 | "dependencies": { 799 | "pump": "^3.0.0" 800 | }, 801 | "engines": { 802 | "node": ">=6" 803 | } 804 | }, 805 | "node_modules/glob-parent": { 806 | "version": "5.1.2", 807 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 808 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 809 | "dev": true, 810 | "dependencies": { 811 | "is-glob": "^4.0.1" 812 | }, 813 | "engines": { 814 | "node": ">= 6" 815 | } 816 | }, 817 | "node_modules/global-dirs": { 818 | "version": "3.0.0", 819 | "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", 820 | "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", 821 | "dev": true, 822 | "dependencies": { 823 | "ini": "2.0.0" 824 | }, 825 | "engines": { 826 | "node": ">=10" 827 | }, 828 | "funding": { 829 | "url": "https://github.com/sponsors/sindresorhus" 830 | } 831 | }, 832 | "node_modules/got": { 833 | "version": "9.6.0", 834 | "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", 835 | "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", 836 | "dev": true, 837 | "dependencies": { 838 | "@sindresorhus/is": "^0.14.0", 839 | "@szmarczak/http-timer": "^1.1.2", 840 | "cacheable-request": "^6.0.0", 841 | "decompress-response": "^3.3.0", 842 | "duplexer3": "^0.1.4", 843 | "get-stream": "^4.1.0", 844 | "lowercase-keys": "^1.0.1", 845 | "mimic-response": "^1.0.1", 846 | "p-cancelable": "^1.0.0", 847 | "to-readable-stream": "^1.0.0", 848 | "url-parse-lax": "^3.0.0" 849 | }, 850 | "engines": { 851 | "node": ">=8.6" 852 | } 853 | }, 854 | "node_modules/graceful-fs": { 855 | "version": "4.2.10", 856 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", 857 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", 858 | "dev": true 859 | }, 860 | "node_modules/graphql": { 861 | "version": "15.8.0", 862 | "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", 863 | "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", 864 | "engines": { 865 | "node": ">= 10.x" 866 | } 867 | }, 868 | "node_modules/has": { 869 | "version": "1.0.3", 870 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 871 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 872 | "dependencies": { 873 | "function-bind": "^1.1.1" 874 | }, 875 | "engines": { 876 | "node": ">= 0.4.0" 877 | } 878 | }, 879 | "node_modules/has-flag": { 880 | "version": "3.0.0", 881 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 882 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 883 | "dev": true, 884 | "engines": { 885 | "node": ">=4" 886 | } 887 | }, 888 | "node_modules/has-symbols": { 889 | "version": "1.0.3", 890 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 891 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 892 | "engines": { 893 | "node": ">= 0.4" 894 | }, 895 | "funding": { 896 | "url": "https://github.com/sponsors/ljharb" 897 | } 898 | }, 899 | "node_modules/has-yarn": { 900 | "version": "2.1.0", 901 | "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", 902 | "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", 903 | "dev": true, 904 | "engines": { 905 | "node": ">=8" 906 | } 907 | }, 908 | "node_modules/http-cache-semantics": { 909 | "version": "4.1.0", 910 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", 911 | "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", 912 | "dev": true 913 | }, 914 | "node_modules/http-errors": { 915 | "version": "2.0.0", 916 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 917 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 918 | "dependencies": { 919 | "depd": "2.0.0", 920 | "inherits": "2.0.4", 921 | "setprototypeof": "1.2.0", 922 | "statuses": "2.0.1", 923 | "toidentifier": "1.0.1" 924 | }, 925 | "engines": { 926 | "node": ">= 0.8" 927 | } 928 | }, 929 | "node_modules/iconv-lite": { 930 | "version": "0.4.24", 931 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 932 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 933 | "dependencies": { 934 | "safer-buffer": ">= 2.1.2 < 3" 935 | }, 936 | "engines": { 937 | "node": ">=0.10.0" 938 | } 939 | }, 940 | "node_modules/ignore-by-default": { 941 | "version": "1.0.1", 942 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", 943 | "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", 944 | "dev": true 945 | }, 946 | "node_modules/import-lazy": { 947 | "version": "2.1.0", 948 | "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", 949 | "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", 950 | "dev": true, 951 | "engines": { 952 | "node": ">=4" 953 | } 954 | }, 955 | "node_modules/imurmurhash": { 956 | "version": "0.1.4", 957 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 958 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 959 | "dev": true, 960 | "engines": { 961 | "node": ">=0.8.19" 962 | } 963 | }, 964 | "node_modules/inherits": { 965 | "version": "2.0.4", 966 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 967 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 968 | }, 969 | "node_modules/ini": { 970 | "version": "2.0.0", 971 | "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", 972 | "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", 973 | "dev": true, 974 | "engines": { 975 | "node": ">=10" 976 | } 977 | }, 978 | "node_modules/ip": { 979 | "version": "2.0.0", 980 | "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", 981 | "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" 982 | }, 983 | "node_modules/ipaddr.js": { 984 | "version": "1.9.1", 985 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 986 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 987 | "engines": { 988 | "node": ">= 0.10" 989 | } 990 | }, 991 | "node_modules/is-binary-path": { 992 | "version": "2.1.0", 993 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 994 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 995 | "dev": true, 996 | "dependencies": { 997 | "binary-extensions": "^2.0.0" 998 | }, 999 | "engines": { 1000 | "node": ">=8" 1001 | } 1002 | }, 1003 | "node_modules/is-ci": { 1004 | "version": "2.0.0", 1005 | "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", 1006 | "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", 1007 | "dev": true, 1008 | "dependencies": { 1009 | "ci-info": "^2.0.0" 1010 | }, 1011 | "bin": { 1012 | "is-ci": "bin.js" 1013 | } 1014 | }, 1015 | "node_modules/is-extglob": { 1016 | "version": "2.1.1", 1017 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1018 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1019 | "dev": true, 1020 | "engines": { 1021 | "node": ">=0.10.0" 1022 | } 1023 | }, 1024 | "node_modules/is-fullwidth-code-point": { 1025 | "version": "3.0.0", 1026 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1027 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1028 | "dev": true, 1029 | "engines": { 1030 | "node": ">=8" 1031 | } 1032 | }, 1033 | "node_modules/is-glob": { 1034 | "version": "4.0.3", 1035 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1036 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1037 | "dev": true, 1038 | "dependencies": { 1039 | "is-extglob": "^2.1.1" 1040 | }, 1041 | "engines": { 1042 | "node": ">=0.10.0" 1043 | } 1044 | }, 1045 | "node_modules/is-installed-globally": { 1046 | "version": "0.4.0", 1047 | "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", 1048 | "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", 1049 | "dev": true, 1050 | "dependencies": { 1051 | "global-dirs": "^3.0.0", 1052 | "is-path-inside": "^3.0.2" 1053 | }, 1054 | "engines": { 1055 | "node": ">=10" 1056 | }, 1057 | "funding": { 1058 | "url": "https://github.com/sponsors/sindresorhus" 1059 | } 1060 | }, 1061 | "node_modules/is-npm": { 1062 | "version": "5.0.0", 1063 | "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", 1064 | "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", 1065 | "dev": true, 1066 | "engines": { 1067 | "node": ">=10" 1068 | }, 1069 | "funding": { 1070 | "url": "https://github.com/sponsors/sindresorhus" 1071 | } 1072 | }, 1073 | "node_modules/is-number": { 1074 | "version": "7.0.0", 1075 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1076 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1077 | "dev": true, 1078 | "engines": { 1079 | "node": ">=0.12.0" 1080 | } 1081 | }, 1082 | "node_modules/is-obj": { 1083 | "version": "2.0.0", 1084 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", 1085 | "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", 1086 | "dev": true, 1087 | "engines": { 1088 | "node": ">=8" 1089 | } 1090 | }, 1091 | "node_modules/is-path-inside": { 1092 | "version": "3.0.3", 1093 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 1094 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 1095 | "dev": true, 1096 | "engines": { 1097 | "node": ">=8" 1098 | } 1099 | }, 1100 | "node_modules/is-typedarray": { 1101 | "version": "1.0.0", 1102 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1103 | "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", 1104 | "dev": true 1105 | }, 1106 | "node_modules/is-yarn-global": { 1107 | "version": "0.3.0", 1108 | "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", 1109 | "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", 1110 | "dev": true 1111 | }, 1112 | "node_modules/json-buffer": { 1113 | "version": "3.0.0", 1114 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", 1115 | "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", 1116 | "dev": true 1117 | }, 1118 | "node_modules/kareem": { 1119 | "version": "2.5.1", 1120 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", 1121 | "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", 1122 | "engines": { 1123 | "node": ">=12.0.0" 1124 | } 1125 | }, 1126 | "node_modules/keyv": { 1127 | "version": "3.1.0", 1128 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", 1129 | "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", 1130 | "dev": true, 1131 | "dependencies": { 1132 | "json-buffer": "3.0.0" 1133 | } 1134 | }, 1135 | "node_modules/latest-version": { 1136 | "version": "5.1.0", 1137 | "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", 1138 | "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", 1139 | "dev": true, 1140 | "dependencies": { 1141 | "package-json": "^6.3.0" 1142 | }, 1143 | "engines": { 1144 | "node": ">=8" 1145 | } 1146 | }, 1147 | "node_modules/lowercase-keys": { 1148 | "version": "1.0.1", 1149 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 1150 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", 1151 | "dev": true, 1152 | "engines": { 1153 | "node": ">=0.10.0" 1154 | } 1155 | }, 1156 | "node_modules/lru-cache": { 1157 | "version": "6.0.0", 1158 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1159 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1160 | "dev": true, 1161 | "dependencies": { 1162 | "yallist": "^4.0.0" 1163 | }, 1164 | "engines": { 1165 | "node": ">=10" 1166 | } 1167 | }, 1168 | "node_modules/make-dir": { 1169 | "version": "3.1.0", 1170 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 1171 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 1172 | "dev": true, 1173 | "dependencies": { 1174 | "semver": "^6.0.0" 1175 | }, 1176 | "engines": { 1177 | "node": ">=8" 1178 | }, 1179 | "funding": { 1180 | "url": "https://github.com/sponsors/sindresorhus" 1181 | } 1182 | }, 1183 | "node_modules/make-dir/node_modules/semver": { 1184 | "version": "6.3.0", 1185 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1186 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1187 | "dev": true, 1188 | "bin": { 1189 | "semver": "bin/semver.js" 1190 | } 1191 | }, 1192 | "node_modules/media-typer": { 1193 | "version": "0.3.0", 1194 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1195 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 1196 | "engines": { 1197 | "node": ">= 0.6" 1198 | } 1199 | }, 1200 | "node_modules/memory-pager": { 1201 | "version": "1.5.0", 1202 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", 1203 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", 1204 | "optional": true 1205 | }, 1206 | "node_modules/merge-descriptors": { 1207 | "version": "1.0.1", 1208 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 1209 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 1210 | }, 1211 | "node_modules/methods": { 1212 | "version": "1.1.2", 1213 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 1214 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 1215 | "engines": { 1216 | "node": ">= 0.6" 1217 | } 1218 | }, 1219 | "node_modules/mime": { 1220 | "version": "1.6.0", 1221 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 1222 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 1223 | "bin": { 1224 | "mime": "cli.js" 1225 | }, 1226 | "engines": { 1227 | "node": ">=4" 1228 | } 1229 | }, 1230 | "node_modules/mime-db": { 1231 | "version": "1.52.0", 1232 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1233 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1234 | "engines": { 1235 | "node": ">= 0.6" 1236 | } 1237 | }, 1238 | "node_modules/mime-types": { 1239 | "version": "2.1.35", 1240 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1241 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1242 | "dependencies": { 1243 | "mime-db": "1.52.0" 1244 | }, 1245 | "engines": { 1246 | "node": ">= 0.6" 1247 | } 1248 | }, 1249 | "node_modules/mimic-response": { 1250 | "version": "1.0.1", 1251 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 1252 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 1253 | "dev": true, 1254 | "engines": { 1255 | "node": ">=4" 1256 | } 1257 | }, 1258 | "node_modules/minimatch": { 1259 | "version": "3.1.2", 1260 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1261 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1262 | "dev": true, 1263 | "dependencies": { 1264 | "brace-expansion": "^1.1.7" 1265 | }, 1266 | "engines": { 1267 | "node": "*" 1268 | } 1269 | }, 1270 | "node_modules/minimist": { 1271 | "version": "1.2.6", 1272 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 1273 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", 1274 | "dev": true 1275 | }, 1276 | "node_modules/mongodb": { 1277 | "version": "5.1.0", 1278 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.1.0.tgz", 1279 | "integrity": "sha512-qgKb7y+EI90y4weY3z5+lIgm8wmexbonz0GalHkSElQXVKtRuwqXuhXKccyvIjXCJVy9qPV82zsinY0W1FBnJw==", 1280 | "dependencies": { 1281 | "bson": "^5.0.1", 1282 | "mongodb-connection-string-url": "^2.6.0", 1283 | "socks": "^2.7.1" 1284 | }, 1285 | "engines": { 1286 | "node": ">=14.20.1" 1287 | }, 1288 | "optionalDependencies": { 1289 | "saslprep": "^1.0.3" 1290 | }, 1291 | "peerDependencies": { 1292 | "@aws-sdk/credential-providers": "^3.201.0", 1293 | "mongodb-client-encryption": "^2.3.0", 1294 | "snappy": "^7.2.2" 1295 | }, 1296 | "peerDependenciesMeta": { 1297 | "@aws-sdk/credential-providers": { 1298 | "optional": true 1299 | }, 1300 | "mongodb-client-encryption": { 1301 | "optional": true 1302 | }, 1303 | "snappy": { 1304 | "optional": true 1305 | } 1306 | } 1307 | }, 1308 | "node_modules/mongodb-connection-string-url": { 1309 | "version": "2.6.0", 1310 | "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", 1311 | "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", 1312 | "dependencies": { 1313 | "@types/whatwg-url": "^8.2.1", 1314 | "whatwg-url": "^11.0.0" 1315 | } 1316 | }, 1317 | "node_modules/mongoose": { 1318 | "version": "7.0.0", 1319 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.0.0.tgz", 1320 | "integrity": "sha512-U0YPURDld+k/nvvSG1mRClQSjZMRXwQKSU5yb9PslRnOmVz0UlBD7SjSnjUuGT0yk+7BH+kJNimsKqMxYAKkMA==", 1321 | "dependencies": { 1322 | "bson": "^5.0.1", 1323 | "kareem": "2.5.1", 1324 | "mongodb": "5.1.0", 1325 | "mpath": "0.9.0", 1326 | "mquery": "5.0.0", 1327 | "ms": "2.1.3", 1328 | "sift": "16.0.1" 1329 | }, 1330 | "engines": { 1331 | "node": ">=14.0.0" 1332 | }, 1333 | "funding": { 1334 | "type": "opencollective", 1335 | "url": "https://opencollective.com/mongoose" 1336 | } 1337 | }, 1338 | "node_modules/mongoose/node_modules/ms": { 1339 | "version": "2.1.3", 1340 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1341 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1342 | }, 1343 | "node_modules/mpath": { 1344 | "version": "0.9.0", 1345 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", 1346 | "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", 1347 | "engines": { 1348 | "node": ">=4.0.0" 1349 | } 1350 | }, 1351 | "node_modules/mquery": { 1352 | "version": "5.0.0", 1353 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", 1354 | "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", 1355 | "dependencies": { 1356 | "debug": "4.x" 1357 | }, 1358 | "engines": { 1359 | "node": ">=14.0.0" 1360 | } 1361 | }, 1362 | "node_modules/mquery/node_modules/debug": { 1363 | "version": "4.3.4", 1364 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 1365 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 1366 | "dependencies": { 1367 | "ms": "2.1.2" 1368 | }, 1369 | "engines": { 1370 | "node": ">=6.0" 1371 | }, 1372 | "peerDependenciesMeta": { 1373 | "supports-color": { 1374 | "optional": true 1375 | } 1376 | } 1377 | }, 1378 | "node_modules/mquery/node_modules/ms": { 1379 | "version": "2.1.2", 1380 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1381 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1382 | }, 1383 | "node_modules/ms": { 1384 | "version": "2.0.0", 1385 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1386 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 1387 | }, 1388 | "node_modules/negotiator": { 1389 | "version": "0.6.3", 1390 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 1391 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 1392 | "engines": { 1393 | "node": ">= 0.6" 1394 | } 1395 | }, 1396 | "node_modules/nodemon": { 1397 | "version": "2.0.16", 1398 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.16.tgz", 1399 | "integrity": "sha512-zsrcaOfTWRuUzBn3P44RDliLlp263Z/76FPoHFr3cFFkOz0lTPAcIw8dCzfdVIx/t3AtDYCZRCDkoCojJqaG3w==", 1400 | "dev": true, 1401 | "hasInstallScript": true, 1402 | "dependencies": { 1403 | "chokidar": "^3.5.2", 1404 | "debug": "^3.2.7", 1405 | "ignore-by-default": "^1.0.1", 1406 | "minimatch": "^3.0.4", 1407 | "pstree.remy": "^1.1.8", 1408 | "semver": "^5.7.1", 1409 | "supports-color": "^5.5.0", 1410 | "touch": "^3.1.0", 1411 | "undefsafe": "^2.0.5", 1412 | "update-notifier": "^5.1.0" 1413 | }, 1414 | "bin": { 1415 | "nodemon": "bin/nodemon.js" 1416 | }, 1417 | "engines": { 1418 | "node": ">=8.10.0" 1419 | }, 1420 | "funding": { 1421 | "type": "opencollective", 1422 | "url": "https://opencollective.com/nodemon" 1423 | } 1424 | }, 1425 | "node_modules/nodemon/node_modules/debug": { 1426 | "version": "3.2.7", 1427 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 1428 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 1429 | "dev": true, 1430 | "dependencies": { 1431 | "ms": "^2.1.1" 1432 | } 1433 | }, 1434 | "node_modules/nodemon/node_modules/ms": { 1435 | "version": "2.1.3", 1436 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1437 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1438 | "dev": true 1439 | }, 1440 | "node_modules/nopt": { 1441 | "version": "1.0.10", 1442 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", 1443 | "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", 1444 | "dev": true, 1445 | "dependencies": { 1446 | "abbrev": "1" 1447 | }, 1448 | "bin": { 1449 | "nopt": "bin/nopt.js" 1450 | }, 1451 | "engines": { 1452 | "node": "*" 1453 | } 1454 | }, 1455 | "node_modules/normalize-path": { 1456 | "version": "3.0.0", 1457 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1458 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1459 | "dev": true, 1460 | "engines": { 1461 | "node": ">=0.10.0" 1462 | } 1463 | }, 1464 | "node_modules/normalize-url": { 1465 | "version": "4.5.1", 1466 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", 1467 | "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", 1468 | "dev": true, 1469 | "engines": { 1470 | "node": ">=8" 1471 | } 1472 | }, 1473 | "node_modules/object-assign": { 1474 | "version": "4.1.1", 1475 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1476 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 1477 | "engines": { 1478 | "node": ">=0.10.0" 1479 | } 1480 | }, 1481 | "node_modules/object-inspect": { 1482 | "version": "1.12.2", 1483 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", 1484 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", 1485 | "funding": { 1486 | "url": "https://github.com/sponsors/ljharb" 1487 | } 1488 | }, 1489 | "node_modules/on-finished": { 1490 | "version": "2.4.1", 1491 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 1492 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 1493 | "dependencies": { 1494 | "ee-first": "1.1.1" 1495 | }, 1496 | "engines": { 1497 | "node": ">= 0.8" 1498 | } 1499 | }, 1500 | "node_modules/once": { 1501 | "version": "1.4.0", 1502 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1503 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1504 | "dev": true, 1505 | "dependencies": { 1506 | "wrappy": "1" 1507 | } 1508 | }, 1509 | "node_modules/p-cancelable": { 1510 | "version": "1.1.0", 1511 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", 1512 | "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", 1513 | "dev": true, 1514 | "engines": { 1515 | "node": ">=6" 1516 | } 1517 | }, 1518 | "node_modules/package-json": { 1519 | "version": "6.5.0", 1520 | "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", 1521 | "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", 1522 | "dev": true, 1523 | "dependencies": { 1524 | "got": "^9.6.0", 1525 | "registry-auth-token": "^4.0.0", 1526 | "registry-url": "^5.0.0", 1527 | "semver": "^6.2.0" 1528 | }, 1529 | "engines": { 1530 | "node": ">=8" 1531 | } 1532 | }, 1533 | "node_modules/package-json/node_modules/semver": { 1534 | "version": "6.3.0", 1535 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1536 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1537 | "dev": true, 1538 | "bin": { 1539 | "semver": "bin/semver.js" 1540 | } 1541 | }, 1542 | "node_modules/parseurl": { 1543 | "version": "1.3.3", 1544 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 1545 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 1546 | "engines": { 1547 | "node": ">= 0.8" 1548 | } 1549 | }, 1550 | "node_modules/path-to-regexp": { 1551 | "version": "0.1.7", 1552 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 1553 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 1554 | }, 1555 | "node_modules/picomatch": { 1556 | "version": "2.3.1", 1557 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1558 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1559 | "dev": true, 1560 | "engines": { 1561 | "node": ">=8.6" 1562 | }, 1563 | "funding": { 1564 | "url": "https://github.com/sponsors/jonschlinkert" 1565 | } 1566 | }, 1567 | "node_modules/prepend-http": { 1568 | "version": "2.0.0", 1569 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", 1570 | "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", 1571 | "dev": true, 1572 | "engines": { 1573 | "node": ">=4" 1574 | } 1575 | }, 1576 | "node_modules/proxy-addr": { 1577 | "version": "2.0.7", 1578 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 1579 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 1580 | "dependencies": { 1581 | "forwarded": "0.2.0", 1582 | "ipaddr.js": "1.9.1" 1583 | }, 1584 | "engines": { 1585 | "node": ">= 0.10" 1586 | } 1587 | }, 1588 | "node_modules/pstree.remy": { 1589 | "version": "1.1.8", 1590 | "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", 1591 | "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", 1592 | "dev": true 1593 | }, 1594 | "node_modules/pump": { 1595 | "version": "3.0.0", 1596 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 1597 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 1598 | "dev": true, 1599 | "dependencies": { 1600 | "end-of-stream": "^1.1.0", 1601 | "once": "^1.3.1" 1602 | } 1603 | }, 1604 | "node_modules/punycode": { 1605 | "version": "2.3.0", 1606 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", 1607 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", 1608 | "engines": { 1609 | "node": ">=6" 1610 | } 1611 | }, 1612 | "node_modules/pupa": { 1613 | "version": "2.1.1", 1614 | "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", 1615 | "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", 1616 | "dev": true, 1617 | "dependencies": { 1618 | "escape-goat": "^2.0.0" 1619 | }, 1620 | "engines": { 1621 | "node": ">=8" 1622 | } 1623 | }, 1624 | "node_modules/qs": { 1625 | "version": "6.10.3", 1626 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", 1627 | "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", 1628 | "dependencies": { 1629 | "side-channel": "^1.0.4" 1630 | }, 1631 | "engines": { 1632 | "node": ">=0.6" 1633 | }, 1634 | "funding": { 1635 | "url": "https://github.com/sponsors/ljharb" 1636 | } 1637 | }, 1638 | "node_modules/range-parser": { 1639 | "version": "1.2.1", 1640 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 1641 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 1642 | "engines": { 1643 | "node": ">= 0.6" 1644 | } 1645 | }, 1646 | "node_modules/raw-body": { 1647 | "version": "2.5.1", 1648 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 1649 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 1650 | "dependencies": { 1651 | "bytes": "3.1.2", 1652 | "http-errors": "2.0.0", 1653 | "iconv-lite": "0.4.24", 1654 | "unpipe": "1.0.0" 1655 | }, 1656 | "engines": { 1657 | "node": ">= 0.8" 1658 | } 1659 | }, 1660 | "node_modules/rc": { 1661 | "version": "1.2.8", 1662 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 1663 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 1664 | "dev": true, 1665 | "dependencies": { 1666 | "deep-extend": "^0.6.0", 1667 | "ini": "~1.3.0", 1668 | "minimist": "^1.2.0", 1669 | "strip-json-comments": "~2.0.1" 1670 | }, 1671 | "bin": { 1672 | "rc": "cli.js" 1673 | } 1674 | }, 1675 | "node_modules/rc/node_modules/ini": { 1676 | "version": "1.3.8", 1677 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 1678 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", 1679 | "dev": true 1680 | }, 1681 | "node_modules/readdirp": { 1682 | "version": "3.6.0", 1683 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1684 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1685 | "dev": true, 1686 | "dependencies": { 1687 | "picomatch": "^2.2.1" 1688 | }, 1689 | "engines": { 1690 | "node": ">=8.10.0" 1691 | } 1692 | }, 1693 | "node_modules/registry-auth-token": { 1694 | "version": "4.2.1", 1695 | "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", 1696 | "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", 1697 | "dev": true, 1698 | "dependencies": { 1699 | "rc": "^1.2.8" 1700 | }, 1701 | "engines": { 1702 | "node": ">=6.0.0" 1703 | } 1704 | }, 1705 | "node_modules/registry-url": { 1706 | "version": "5.1.0", 1707 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", 1708 | "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", 1709 | "dev": true, 1710 | "dependencies": { 1711 | "rc": "^1.2.8" 1712 | }, 1713 | "engines": { 1714 | "node": ">=8" 1715 | } 1716 | }, 1717 | "node_modules/responselike": { 1718 | "version": "1.0.2", 1719 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", 1720 | "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", 1721 | "dev": true, 1722 | "dependencies": { 1723 | "lowercase-keys": "^1.0.0" 1724 | } 1725 | }, 1726 | "node_modules/safe-buffer": { 1727 | "version": "5.2.1", 1728 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1729 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1730 | "funding": [ 1731 | { 1732 | "type": "github", 1733 | "url": "https://github.com/sponsors/feross" 1734 | }, 1735 | { 1736 | "type": "patreon", 1737 | "url": "https://www.patreon.com/feross" 1738 | }, 1739 | { 1740 | "type": "consulting", 1741 | "url": "https://feross.org/support" 1742 | } 1743 | ] 1744 | }, 1745 | "node_modules/safer-buffer": { 1746 | "version": "2.1.2", 1747 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1748 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1749 | }, 1750 | "node_modules/saslprep": { 1751 | "version": "1.0.3", 1752 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", 1753 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", 1754 | "optional": true, 1755 | "dependencies": { 1756 | "sparse-bitfield": "^3.0.3" 1757 | }, 1758 | "engines": { 1759 | "node": ">=6" 1760 | } 1761 | }, 1762 | "node_modules/semver": { 1763 | "version": "5.7.1", 1764 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1765 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 1766 | "dev": true, 1767 | "bin": { 1768 | "semver": "bin/semver" 1769 | } 1770 | }, 1771 | "node_modules/semver-diff": { 1772 | "version": "3.1.1", 1773 | "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", 1774 | "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", 1775 | "dev": true, 1776 | "dependencies": { 1777 | "semver": "^6.3.0" 1778 | }, 1779 | "engines": { 1780 | "node": ">=8" 1781 | } 1782 | }, 1783 | "node_modules/semver-diff/node_modules/semver": { 1784 | "version": "6.3.0", 1785 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1786 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1787 | "dev": true, 1788 | "bin": { 1789 | "semver": "bin/semver.js" 1790 | } 1791 | }, 1792 | "node_modules/send": { 1793 | "version": "0.18.0", 1794 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 1795 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 1796 | "dependencies": { 1797 | "debug": "2.6.9", 1798 | "depd": "2.0.0", 1799 | "destroy": "1.2.0", 1800 | "encodeurl": "~1.0.2", 1801 | "escape-html": "~1.0.3", 1802 | "etag": "~1.8.1", 1803 | "fresh": "0.5.2", 1804 | "http-errors": "2.0.0", 1805 | "mime": "1.6.0", 1806 | "ms": "2.1.3", 1807 | "on-finished": "2.4.1", 1808 | "range-parser": "~1.2.1", 1809 | "statuses": "2.0.1" 1810 | }, 1811 | "engines": { 1812 | "node": ">= 0.8.0" 1813 | } 1814 | }, 1815 | "node_modules/send/node_modules/ms": { 1816 | "version": "2.1.3", 1817 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1818 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1819 | }, 1820 | "node_modules/serve-static": { 1821 | "version": "1.15.0", 1822 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 1823 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 1824 | "dependencies": { 1825 | "encodeurl": "~1.0.2", 1826 | "escape-html": "~1.0.3", 1827 | "parseurl": "~1.3.3", 1828 | "send": "0.18.0" 1829 | }, 1830 | "engines": { 1831 | "node": ">= 0.8.0" 1832 | } 1833 | }, 1834 | "node_modules/setprototypeof": { 1835 | "version": "1.2.0", 1836 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 1837 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 1838 | }, 1839 | "node_modules/side-channel": { 1840 | "version": "1.0.4", 1841 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 1842 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 1843 | "dependencies": { 1844 | "call-bind": "^1.0.0", 1845 | "get-intrinsic": "^1.0.2", 1846 | "object-inspect": "^1.9.0" 1847 | }, 1848 | "funding": { 1849 | "url": "https://github.com/sponsors/ljharb" 1850 | } 1851 | }, 1852 | "node_modules/sift": { 1853 | "version": "16.0.1", 1854 | "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", 1855 | "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" 1856 | }, 1857 | "node_modules/signal-exit": { 1858 | "version": "3.0.7", 1859 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 1860 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 1861 | "dev": true 1862 | }, 1863 | "node_modules/smart-buffer": { 1864 | "version": "4.2.0", 1865 | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", 1866 | "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", 1867 | "engines": { 1868 | "node": ">= 6.0.0", 1869 | "npm": ">= 3.0.0" 1870 | } 1871 | }, 1872 | "node_modules/socks": { 1873 | "version": "2.7.1", 1874 | "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", 1875 | "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", 1876 | "dependencies": { 1877 | "ip": "^2.0.0", 1878 | "smart-buffer": "^4.2.0" 1879 | }, 1880 | "engines": { 1881 | "node": ">= 10.13.0", 1882 | "npm": ">= 3.0.0" 1883 | } 1884 | }, 1885 | "node_modules/sparse-bitfield": { 1886 | "version": "3.0.3", 1887 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 1888 | "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", 1889 | "optional": true, 1890 | "dependencies": { 1891 | "memory-pager": "^1.0.2" 1892 | } 1893 | }, 1894 | "node_modules/statuses": { 1895 | "version": "2.0.1", 1896 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 1897 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 1898 | "engines": { 1899 | "node": ">= 0.8" 1900 | } 1901 | }, 1902 | "node_modules/string-width": { 1903 | "version": "4.2.3", 1904 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1905 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1906 | "dev": true, 1907 | "dependencies": { 1908 | "emoji-regex": "^8.0.0", 1909 | "is-fullwidth-code-point": "^3.0.0", 1910 | "strip-ansi": "^6.0.1" 1911 | }, 1912 | "engines": { 1913 | "node": ">=8" 1914 | } 1915 | }, 1916 | "node_modules/strip-ansi": { 1917 | "version": "6.0.1", 1918 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1919 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1920 | "dev": true, 1921 | "dependencies": { 1922 | "ansi-regex": "^5.0.1" 1923 | }, 1924 | "engines": { 1925 | "node": ">=8" 1926 | } 1927 | }, 1928 | "node_modules/strip-json-comments": { 1929 | "version": "2.0.1", 1930 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1931 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 1932 | "dev": true, 1933 | "engines": { 1934 | "node": ">=0.10.0" 1935 | } 1936 | }, 1937 | "node_modules/supports-color": { 1938 | "version": "5.5.0", 1939 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1940 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1941 | "dev": true, 1942 | "dependencies": { 1943 | "has-flag": "^3.0.0" 1944 | }, 1945 | "engines": { 1946 | "node": ">=4" 1947 | } 1948 | }, 1949 | "node_modules/to-readable-stream": { 1950 | "version": "1.0.0", 1951 | "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", 1952 | "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", 1953 | "dev": true, 1954 | "engines": { 1955 | "node": ">=6" 1956 | } 1957 | }, 1958 | "node_modules/to-regex-range": { 1959 | "version": "5.0.1", 1960 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1961 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1962 | "dev": true, 1963 | "dependencies": { 1964 | "is-number": "^7.0.0" 1965 | }, 1966 | "engines": { 1967 | "node": ">=8.0" 1968 | } 1969 | }, 1970 | "node_modules/toidentifier": { 1971 | "version": "1.0.1", 1972 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 1973 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 1974 | "engines": { 1975 | "node": ">=0.6" 1976 | } 1977 | }, 1978 | "node_modules/touch": { 1979 | "version": "3.1.0", 1980 | "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", 1981 | "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", 1982 | "dev": true, 1983 | "dependencies": { 1984 | "nopt": "~1.0.10" 1985 | }, 1986 | "bin": { 1987 | "nodetouch": "bin/nodetouch.js" 1988 | } 1989 | }, 1990 | "node_modules/tr46": { 1991 | "version": "3.0.0", 1992 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", 1993 | "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", 1994 | "dependencies": { 1995 | "punycode": "^2.1.1" 1996 | }, 1997 | "engines": { 1998 | "node": ">=12" 1999 | } 2000 | }, 2001 | "node_modules/type-fest": { 2002 | "version": "0.20.2", 2003 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 2004 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 2005 | "dev": true, 2006 | "engines": { 2007 | "node": ">=10" 2008 | }, 2009 | "funding": { 2010 | "url": "https://github.com/sponsors/sindresorhus" 2011 | } 2012 | }, 2013 | "node_modules/type-is": { 2014 | "version": "1.6.18", 2015 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 2016 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 2017 | "dependencies": { 2018 | "media-typer": "0.3.0", 2019 | "mime-types": "~2.1.24" 2020 | }, 2021 | "engines": { 2022 | "node": ">= 0.6" 2023 | } 2024 | }, 2025 | "node_modules/typedarray-to-buffer": { 2026 | "version": "3.1.5", 2027 | "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", 2028 | "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", 2029 | "dev": true, 2030 | "dependencies": { 2031 | "is-typedarray": "^1.0.0" 2032 | } 2033 | }, 2034 | "node_modules/undefsafe": { 2035 | "version": "2.0.5", 2036 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", 2037 | "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", 2038 | "dev": true 2039 | }, 2040 | "node_modules/unique-string": { 2041 | "version": "2.0.0", 2042 | "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", 2043 | "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", 2044 | "dev": true, 2045 | "dependencies": { 2046 | "crypto-random-string": "^2.0.0" 2047 | }, 2048 | "engines": { 2049 | "node": ">=8" 2050 | } 2051 | }, 2052 | "node_modules/unpipe": { 2053 | "version": "1.0.0", 2054 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 2055 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", 2056 | "engines": { 2057 | "node": ">= 0.8" 2058 | } 2059 | }, 2060 | "node_modules/update-notifier": { 2061 | "version": "5.1.0", 2062 | "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", 2063 | "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", 2064 | "dev": true, 2065 | "dependencies": { 2066 | "boxen": "^5.0.0", 2067 | "chalk": "^4.1.0", 2068 | "configstore": "^5.0.1", 2069 | "has-yarn": "^2.1.0", 2070 | "import-lazy": "^2.1.0", 2071 | "is-ci": "^2.0.0", 2072 | "is-installed-globally": "^0.4.0", 2073 | "is-npm": "^5.0.0", 2074 | "is-yarn-global": "^0.3.0", 2075 | "latest-version": "^5.1.0", 2076 | "pupa": "^2.1.1", 2077 | "semver": "^7.3.4", 2078 | "semver-diff": "^3.1.1", 2079 | "xdg-basedir": "^4.0.0" 2080 | }, 2081 | "engines": { 2082 | "node": ">=10" 2083 | }, 2084 | "funding": { 2085 | "url": "https://github.com/yeoman/update-notifier?sponsor=1" 2086 | } 2087 | }, 2088 | "node_modules/update-notifier/node_modules/semver": { 2089 | "version": "7.3.7", 2090 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", 2091 | "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", 2092 | "dev": true, 2093 | "dependencies": { 2094 | "lru-cache": "^6.0.0" 2095 | }, 2096 | "bin": { 2097 | "semver": "bin/semver.js" 2098 | }, 2099 | "engines": { 2100 | "node": ">=10" 2101 | } 2102 | }, 2103 | "node_modules/url-parse-lax": { 2104 | "version": "3.0.0", 2105 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", 2106 | "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", 2107 | "dev": true, 2108 | "dependencies": { 2109 | "prepend-http": "^2.0.0" 2110 | }, 2111 | "engines": { 2112 | "node": ">=4" 2113 | } 2114 | }, 2115 | "node_modules/utils-merge": { 2116 | "version": "1.0.1", 2117 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 2118 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", 2119 | "engines": { 2120 | "node": ">= 0.4.0" 2121 | } 2122 | }, 2123 | "node_modules/vary": { 2124 | "version": "1.1.2", 2125 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 2126 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", 2127 | "engines": { 2128 | "node": ">= 0.8" 2129 | } 2130 | }, 2131 | "node_modules/webidl-conversions": { 2132 | "version": "7.0.0", 2133 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 2134 | "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", 2135 | "engines": { 2136 | "node": ">=12" 2137 | } 2138 | }, 2139 | "node_modules/whatwg-url": { 2140 | "version": "11.0.0", 2141 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", 2142 | "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", 2143 | "dependencies": { 2144 | "tr46": "^3.0.0", 2145 | "webidl-conversions": "^7.0.0" 2146 | }, 2147 | "engines": { 2148 | "node": ">=12" 2149 | } 2150 | }, 2151 | "node_modules/widest-line": { 2152 | "version": "3.1.0", 2153 | "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", 2154 | "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", 2155 | "dev": true, 2156 | "dependencies": { 2157 | "string-width": "^4.0.0" 2158 | }, 2159 | "engines": { 2160 | "node": ">=8" 2161 | } 2162 | }, 2163 | "node_modules/wrap-ansi": { 2164 | "version": "7.0.0", 2165 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2166 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2167 | "dev": true, 2168 | "dependencies": { 2169 | "ansi-styles": "^4.0.0", 2170 | "string-width": "^4.1.0", 2171 | "strip-ansi": "^6.0.0" 2172 | }, 2173 | "engines": { 2174 | "node": ">=10" 2175 | }, 2176 | "funding": { 2177 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2178 | } 2179 | }, 2180 | "node_modules/wrappy": { 2181 | "version": "1.0.2", 2182 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2183 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 2184 | "dev": true 2185 | }, 2186 | "node_modules/write-file-atomic": { 2187 | "version": "3.0.3", 2188 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", 2189 | "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", 2190 | "dev": true, 2191 | "dependencies": { 2192 | "imurmurhash": "^0.1.4", 2193 | "is-typedarray": "^1.0.0", 2194 | "signal-exit": "^3.0.2", 2195 | "typedarray-to-buffer": "^3.1.5" 2196 | } 2197 | }, 2198 | "node_modules/xdg-basedir": { 2199 | "version": "4.0.0", 2200 | "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", 2201 | "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", 2202 | "dev": true, 2203 | "engines": { 2204 | "node": ">=8" 2205 | } 2206 | }, 2207 | "node_modules/yallist": { 2208 | "version": "4.0.0", 2209 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2210 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 2211 | "dev": true 2212 | } 2213 | }, 2214 | "dependencies": { 2215 | "@sindresorhus/is": { 2216 | "version": "0.14.0", 2217 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", 2218 | "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", 2219 | "dev": true 2220 | }, 2221 | "@szmarczak/http-timer": { 2222 | "version": "1.1.2", 2223 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", 2224 | "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", 2225 | "dev": true, 2226 | "requires": { 2227 | "defer-to-connect": "^1.0.1" 2228 | } 2229 | }, 2230 | "@types/node": { 2231 | "version": "18.14.6", 2232 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.6.tgz", 2233 | "integrity": "sha512-93+VvleD3mXwlLI/xASjw0FzKcwzl3OdTCzm1LaRfqgS21gfFtK3zDXM5Op9TeeMsJVOaJ2VRDpT9q4Y3d0AvA==" 2234 | }, 2235 | "@types/webidl-conversions": { 2236 | "version": "7.0.0", 2237 | "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 2238 | "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==" 2239 | }, 2240 | "@types/whatwg-url": { 2241 | "version": "8.2.2", 2242 | "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", 2243 | "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", 2244 | "requires": { 2245 | "@types/node": "*", 2246 | "@types/webidl-conversions": "*" 2247 | } 2248 | }, 2249 | "abbrev": { 2250 | "version": "1.1.1", 2251 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 2252 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", 2253 | "dev": true 2254 | }, 2255 | "accepts": { 2256 | "version": "1.3.8", 2257 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 2258 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 2259 | "requires": { 2260 | "mime-types": "~2.1.34", 2261 | "negotiator": "0.6.3" 2262 | } 2263 | }, 2264 | "ansi-align": { 2265 | "version": "3.0.1", 2266 | "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", 2267 | "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", 2268 | "dev": true, 2269 | "requires": { 2270 | "string-width": "^4.1.0" 2271 | } 2272 | }, 2273 | "ansi-regex": { 2274 | "version": "5.0.1", 2275 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2276 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2277 | "dev": true 2278 | }, 2279 | "ansi-styles": { 2280 | "version": "4.3.0", 2281 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2282 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2283 | "dev": true, 2284 | "requires": { 2285 | "color-convert": "^2.0.1" 2286 | } 2287 | }, 2288 | "anymatch": { 2289 | "version": "3.1.2", 2290 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 2291 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 2292 | "dev": true, 2293 | "requires": { 2294 | "normalize-path": "^3.0.0", 2295 | "picomatch": "^2.0.4" 2296 | } 2297 | }, 2298 | "array-flatten": { 2299 | "version": "1.1.1", 2300 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 2301 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 2302 | }, 2303 | "balanced-match": { 2304 | "version": "1.0.2", 2305 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 2306 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 2307 | "dev": true 2308 | }, 2309 | "binary-extensions": { 2310 | "version": "2.2.0", 2311 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 2312 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 2313 | "dev": true 2314 | }, 2315 | "body-parser": { 2316 | "version": "1.20.0", 2317 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", 2318 | "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", 2319 | "requires": { 2320 | "bytes": "3.1.2", 2321 | "content-type": "~1.0.4", 2322 | "debug": "2.6.9", 2323 | "depd": "2.0.0", 2324 | "destroy": "1.2.0", 2325 | "http-errors": "2.0.0", 2326 | "iconv-lite": "0.4.24", 2327 | "on-finished": "2.4.1", 2328 | "qs": "6.10.3", 2329 | "raw-body": "2.5.1", 2330 | "type-is": "~1.6.18", 2331 | "unpipe": "1.0.0" 2332 | } 2333 | }, 2334 | "boxen": { 2335 | "version": "5.1.2", 2336 | "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", 2337 | "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", 2338 | "dev": true, 2339 | "requires": { 2340 | "ansi-align": "^3.0.0", 2341 | "camelcase": "^6.2.0", 2342 | "chalk": "^4.1.0", 2343 | "cli-boxes": "^2.2.1", 2344 | "string-width": "^4.2.2", 2345 | "type-fest": "^0.20.2", 2346 | "widest-line": "^3.1.0", 2347 | "wrap-ansi": "^7.0.0" 2348 | } 2349 | }, 2350 | "brace-expansion": { 2351 | "version": "1.1.11", 2352 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 2353 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 2354 | "dev": true, 2355 | "requires": { 2356 | "balanced-match": "^1.0.0", 2357 | "concat-map": "0.0.1" 2358 | } 2359 | }, 2360 | "braces": { 2361 | "version": "3.0.2", 2362 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 2363 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 2364 | "dev": true, 2365 | "requires": { 2366 | "fill-range": "^7.0.1" 2367 | } 2368 | }, 2369 | "bson": { 2370 | "version": "5.0.1", 2371 | "resolved": "https://registry.npmjs.org/bson/-/bson-5.0.1.tgz", 2372 | "integrity": "sha512-y09gBGusgHtinMon/GVbv1J6FrXhnr/+6hqLlSmEFzkz6PodqF6TxjyvfvY3AfO+oG1mgUtbC86xSbOlwvM62Q==" 2373 | }, 2374 | "bytes": { 2375 | "version": "3.1.2", 2376 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 2377 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" 2378 | }, 2379 | "cacheable-request": { 2380 | "version": "6.1.0", 2381 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", 2382 | "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", 2383 | "dev": true, 2384 | "requires": { 2385 | "clone-response": "^1.0.2", 2386 | "get-stream": "^5.1.0", 2387 | "http-cache-semantics": "^4.0.0", 2388 | "keyv": "^3.0.0", 2389 | "lowercase-keys": "^2.0.0", 2390 | "normalize-url": "^4.1.0", 2391 | "responselike": "^1.0.2" 2392 | }, 2393 | "dependencies": { 2394 | "get-stream": { 2395 | "version": "5.2.0", 2396 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 2397 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 2398 | "dev": true, 2399 | "requires": { 2400 | "pump": "^3.0.0" 2401 | } 2402 | }, 2403 | "lowercase-keys": { 2404 | "version": "2.0.0", 2405 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 2406 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", 2407 | "dev": true 2408 | } 2409 | } 2410 | }, 2411 | "call-bind": { 2412 | "version": "1.0.2", 2413 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 2414 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 2415 | "requires": { 2416 | "function-bind": "^1.1.1", 2417 | "get-intrinsic": "^1.0.2" 2418 | } 2419 | }, 2420 | "camelcase": { 2421 | "version": "6.3.0", 2422 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", 2423 | "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", 2424 | "dev": true 2425 | }, 2426 | "chalk": { 2427 | "version": "4.1.2", 2428 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 2429 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 2430 | "dev": true, 2431 | "requires": { 2432 | "ansi-styles": "^4.1.0", 2433 | "supports-color": "^7.1.0" 2434 | }, 2435 | "dependencies": { 2436 | "has-flag": { 2437 | "version": "4.0.0", 2438 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2439 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2440 | "dev": true 2441 | }, 2442 | "supports-color": { 2443 | "version": "7.2.0", 2444 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2445 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2446 | "dev": true, 2447 | "requires": { 2448 | "has-flag": "^4.0.0" 2449 | } 2450 | } 2451 | } 2452 | }, 2453 | "chokidar": { 2454 | "version": "3.5.3", 2455 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 2456 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 2457 | "dev": true, 2458 | "requires": { 2459 | "anymatch": "~3.1.2", 2460 | "braces": "~3.0.2", 2461 | "fsevents": "~2.3.2", 2462 | "glob-parent": "~5.1.2", 2463 | "is-binary-path": "~2.1.0", 2464 | "is-glob": "~4.0.1", 2465 | "normalize-path": "~3.0.0", 2466 | "readdirp": "~3.6.0" 2467 | } 2468 | }, 2469 | "ci-info": { 2470 | "version": "2.0.0", 2471 | "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", 2472 | "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", 2473 | "dev": true 2474 | }, 2475 | "cli-boxes": { 2476 | "version": "2.2.1", 2477 | "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", 2478 | "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", 2479 | "dev": true 2480 | }, 2481 | "clone-response": { 2482 | "version": "1.0.2", 2483 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", 2484 | "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", 2485 | "dev": true, 2486 | "requires": { 2487 | "mimic-response": "^1.0.0" 2488 | } 2489 | }, 2490 | "color-convert": { 2491 | "version": "2.0.1", 2492 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2493 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2494 | "dev": true, 2495 | "requires": { 2496 | "color-name": "~1.1.4" 2497 | } 2498 | }, 2499 | "color-name": { 2500 | "version": "1.1.4", 2501 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2502 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2503 | "dev": true 2504 | }, 2505 | "colors": { 2506 | "version": "1.4.0", 2507 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", 2508 | "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" 2509 | }, 2510 | "concat-map": { 2511 | "version": "0.0.1", 2512 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 2513 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 2514 | "dev": true 2515 | }, 2516 | "configstore": { 2517 | "version": "5.0.1", 2518 | "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", 2519 | "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", 2520 | "dev": true, 2521 | "requires": { 2522 | "dot-prop": "^5.2.0", 2523 | "graceful-fs": "^4.1.2", 2524 | "make-dir": "^3.0.0", 2525 | "unique-string": "^2.0.0", 2526 | "write-file-atomic": "^3.0.0", 2527 | "xdg-basedir": "^4.0.0" 2528 | } 2529 | }, 2530 | "content-disposition": { 2531 | "version": "0.5.4", 2532 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 2533 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 2534 | "requires": { 2535 | "safe-buffer": "5.2.1" 2536 | } 2537 | }, 2538 | "content-type": { 2539 | "version": "1.0.4", 2540 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 2541 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 2542 | }, 2543 | "cookie": { 2544 | "version": "0.5.0", 2545 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 2546 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" 2547 | }, 2548 | "cookie-signature": { 2549 | "version": "1.0.6", 2550 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 2551 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 2552 | }, 2553 | "cors": { 2554 | "version": "2.8.5", 2555 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", 2556 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 2557 | "requires": { 2558 | "object-assign": "^4", 2559 | "vary": "^1" 2560 | } 2561 | }, 2562 | "crypto-random-string": { 2563 | "version": "2.0.0", 2564 | "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", 2565 | "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", 2566 | "dev": true 2567 | }, 2568 | "debug": { 2569 | "version": "2.6.9", 2570 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 2571 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 2572 | "requires": { 2573 | "ms": "2.0.0" 2574 | } 2575 | }, 2576 | "decompress-response": { 2577 | "version": "3.3.0", 2578 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 2579 | "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", 2580 | "dev": true, 2581 | "requires": { 2582 | "mimic-response": "^1.0.0" 2583 | } 2584 | }, 2585 | "deep-extend": { 2586 | "version": "0.6.0", 2587 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 2588 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 2589 | "dev": true 2590 | }, 2591 | "defer-to-connect": { 2592 | "version": "1.1.3", 2593 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", 2594 | "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", 2595 | "dev": true 2596 | }, 2597 | "depd": { 2598 | "version": "2.0.0", 2599 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 2600 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" 2601 | }, 2602 | "destroy": { 2603 | "version": "1.2.0", 2604 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 2605 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" 2606 | }, 2607 | "dot-prop": { 2608 | "version": "5.3.0", 2609 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", 2610 | "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", 2611 | "dev": true, 2612 | "requires": { 2613 | "is-obj": "^2.0.0" 2614 | } 2615 | }, 2616 | "dotenv": { 2617 | "version": "16.0.1", 2618 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", 2619 | "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==", 2620 | "dev": true 2621 | }, 2622 | "duplexer3": { 2623 | "version": "0.1.4", 2624 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", 2625 | "integrity": "sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA==", 2626 | "dev": true 2627 | }, 2628 | "ee-first": { 2629 | "version": "1.1.1", 2630 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 2631 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 2632 | }, 2633 | "emoji-regex": { 2634 | "version": "8.0.0", 2635 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 2636 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 2637 | "dev": true 2638 | }, 2639 | "encodeurl": { 2640 | "version": "1.0.2", 2641 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 2642 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" 2643 | }, 2644 | "end-of-stream": { 2645 | "version": "1.4.4", 2646 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 2647 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 2648 | "dev": true, 2649 | "requires": { 2650 | "once": "^1.4.0" 2651 | } 2652 | }, 2653 | "escape-goat": { 2654 | "version": "2.1.1", 2655 | "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", 2656 | "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", 2657 | "dev": true 2658 | }, 2659 | "escape-html": { 2660 | "version": "1.0.3", 2661 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 2662 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 2663 | }, 2664 | "etag": { 2665 | "version": "1.8.1", 2666 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 2667 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" 2668 | }, 2669 | "express": { 2670 | "version": "4.18.1", 2671 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", 2672 | "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", 2673 | "requires": { 2674 | "accepts": "~1.3.8", 2675 | "array-flatten": "1.1.1", 2676 | "body-parser": "1.20.0", 2677 | "content-disposition": "0.5.4", 2678 | "content-type": "~1.0.4", 2679 | "cookie": "0.5.0", 2680 | "cookie-signature": "1.0.6", 2681 | "debug": "2.6.9", 2682 | "depd": "2.0.0", 2683 | "encodeurl": "~1.0.2", 2684 | "escape-html": "~1.0.3", 2685 | "etag": "~1.8.1", 2686 | "finalhandler": "1.2.0", 2687 | "fresh": "0.5.2", 2688 | "http-errors": "2.0.0", 2689 | "merge-descriptors": "1.0.1", 2690 | "methods": "~1.1.2", 2691 | "on-finished": "2.4.1", 2692 | "parseurl": "~1.3.3", 2693 | "path-to-regexp": "0.1.7", 2694 | "proxy-addr": "~2.0.7", 2695 | "qs": "6.10.3", 2696 | "range-parser": "~1.2.1", 2697 | "safe-buffer": "5.2.1", 2698 | "send": "0.18.0", 2699 | "serve-static": "1.15.0", 2700 | "setprototypeof": "1.2.0", 2701 | "statuses": "2.0.1", 2702 | "type-is": "~1.6.18", 2703 | "utils-merge": "1.0.1", 2704 | "vary": "~1.1.2" 2705 | } 2706 | }, 2707 | "express-graphql": { 2708 | "version": "0.12.0", 2709 | "resolved": "https://registry.npmjs.org/express-graphql/-/express-graphql-0.12.0.tgz", 2710 | "integrity": "sha512-DwYaJQy0amdy3pgNtiTDuGGM2BLdj+YO2SgbKoLliCfuHv3VVTt7vNG/ZqK2hRYjtYHE2t2KB705EU94mE64zg==", 2711 | "requires": { 2712 | "accepts": "^1.3.7", 2713 | "content-type": "^1.0.4", 2714 | "http-errors": "1.8.0", 2715 | "raw-body": "^2.4.1" 2716 | }, 2717 | "dependencies": { 2718 | "depd": { 2719 | "version": "1.1.2", 2720 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 2721 | "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" 2722 | }, 2723 | "http-errors": { 2724 | "version": "1.8.0", 2725 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz", 2726 | "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==", 2727 | "requires": { 2728 | "depd": "~1.1.2", 2729 | "inherits": "2.0.4", 2730 | "setprototypeof": "1.2.0", 2731 | "statuses": ">= 1.5.0 < 2", 2732 | "toidentifier": "1.0.0" 2733 | } 2734 | }, 2735 | "statuses": { 2736 | "version": "1.5.0", 2737 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 2738 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 2739 | }, 2740 | "toidentifier": { 2741 | "version": "1.0.0", 2742 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 2743 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" 2744 | } 2745 | } 2746 | }, 2747 | "fill-range": { 2748 | "version": "7.0.1", 2749 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 2750 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 2751 | "dev": true, 2752 | "requires": { 2753 | "to-regex-range": "^5.0.1" 2754 | } 2755 | }, 2756 | "finalhandler": { 2757 | "version": "1.2.0", 2758 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 2759 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 2760 | "requires": { 2761 | "debug": "2.6.9", 2762 | "encodeurl": "~1.0.2", 2763 | "escape-html": "~1.0.3", 2764 | "on-finished": "2.4.1", 2765 | "parseurl": "~1.3.3", 2766 | "statuses": "2.0.1", 2767 | "unpipe": "~1.0.0" 2768 | } 2769 | }, 2770 | "forwarded": { 2771 | "version": "0.2.0", 2772 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 2773 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" 2774 | }, 2775 | "fresh": { 2776 | "version": "0.5.2", 2777 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 2778 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" 2779 | }, 2780 | "fsevents": { 2781 | "version": "2.3.2", 2782 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 2783 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 2784 | "dev": true, 2785 | "optional": true 2786 | }, 2787 | "function-bind": { 2788 | "version": "1.1.1", 2789 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 2790 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 2791 | }, 2792 | "get-intrinsic": { 2793 | "version": "1.1.1", 2794 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 2795 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 2796 | "requires": { 2797 | "function-bind": "^1.1.1", 2798 | "has": "^1.0.3", 2799 | "has-symbols": "^1.0.1" 2800 | } 2801 | }, 2802 | "get-stream": { 2803 | "version": "4.1.0", 2804 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 2805 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 2806 | "dev": true, 2807 | "requires": { 2808 | "pump": "^3.0.0" 2809 | } 2810 | }, 2811 | "glob-parent": { 2812 | "version": "5.1.2", 2813 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 2814 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2815 | "dev": true, 2816 | "requires": { 2817 | "is-glob": "^4.0.1" 2818 | } 2819 | }, 2820 | "global-dirs": { 2821 | "version": "3.0.0", 2822 | "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", 2823 | "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", 2824 | "dev": true, 2825 | "requires": { 2826 | "ini": "2.0.0" 2827 | } 2828 | }, 2829 | "got": { 2830 | "version": "9.6.0", 2831 | "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", 2832 | "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", 2833 | "dev": true, 2834 | "requires": { 2835 | "@sindresorhus/is": "^0.14.0", 2836 | "@szmarczak/http-timer": "^1.1.2", 2837 | "cacheable-request": "^6.0.0", 2838 | "decompress-response": "^3.3.0", 2839 | "duplexer3": "^0.1.4", 2840 | "get-stream": "^4.1.0", 2841 | "lowercase-keys": "^1.0.1", 2842 | "mimic-response": "^1.0.1", 2843 | "p-cancelable": "^1.0.0", 2844 | "to-readable-stream": "^1.0.0", 2845 | "url-parse-lax": "^3.0.0" 2846 | } 2847 | }, 2848 | "graceful-fs": { 2849 | "version": "4.2.10", 2850 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", 2851 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", 2852 | "dev": true 2853 | }, 2854 | "graphql": { 2855 | "version": "15.8.0", 2856 | "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", 2857 | "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==" 2858 | }, 2859 | "has": { 2860 | "version": "1.0.3", 2861 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 2862 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 2863 | "requires": { 2864 | "function-bind": "^1.1.1" 2865 | } 2866 | }, 2867 | "has-flag": { 2868 | "version": "3.0.0", 2869 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 2870 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 2871 | "dev": true 2872 | }, 2873 | "has-symbols": { 2874 | "version": "1.0.3", 2875 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 2876 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" 2877 | }, 2878 | "has-yarn": { 2879 | "version": "2.1.0", 2880 | "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", 2881 | "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", 2882 | "dev": true 2883 | }, 2884 | "http-cache-semantics": { 2885 | "version": "4.1.0", 2886 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", 2887 | "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", 2888 | "dev": true 2889 | }, 2890 | "http-errors": { 2891 | "version": "2.0.0", 2892 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 2893 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 2894 | "requires": { 2895 | "depd": "2.0.0", 2896 | "inherits": "2.0.4", 2897 | "setprototypeof": "1.2.0", 2898 | "statuses": "2.0.1", 2899 | "toidentifier": "1.0.1" 2900 | } 2901 | }, 2902 | "iconv-lite": { 2903 | "version": "0.4.24", 2904 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 2905 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 2906 | "requires": { 2907 | "safer-buffer": ">= 2.1.2 < 3" 2908 | } 2909 | }, 2910 | "ignore-by-default": { 2911 | "version": "1.0.1", 2912 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", 2913 | "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", 2914 | "dev": true 2915 | }, 2916 | "import-lazy": { 2917 | "version": "2.1.0", 2918 | "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", 2919 | "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", 2920 | "dev": true 2921 | }, 2922 | "imurmurhash": { 2923 | "version": "0.1.4", 2924 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 2925 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 2926 | "dev": true 2927 | }, 2928 | "inherits": { 2929 | "version": "2.0.4", 2930 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2931 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 2932 | }, 2933 | "ini": { 2934 | "version": "2.0.0", 2935 | "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", 2936 | "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", 2937 | "dev": true 2938 | }, 2939 | "ip": { 2940 | "version": "2.0.0", 2941 | "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", 2942 | "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" 2943 | }, 2944 | "ipaddr.js": { 2945 | "version": "1.9.1", 2946 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 2947 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 2948 | }, 2949 | "is-binary-path": { 2950 | "version": "2.1.0", 2951 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 2952 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 2953 | "dev": true, 2954 | "requires": { 2955 | "binary-extensions": "^2.0.0" 2956 | } 2957 | }, 2958 | "is-ci": { 2959 | "version": "2.0.0", 2960 | "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", 2961 | "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", 2962 | "dev": true, 2963 | "requires": { 2964 | "ci-info": "^2.0.0" 2965 | } 2966 | }, 2967 | "is-extglob": { 2968 | "version": "2.1.1", 2969 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2970 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 2971 | "dev": true 2972 | }, 2973 | "is-fullwidth-code-point": { 2974 | "version": "3.0.0", 2975 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 2976 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 2977 | "dev": true 2978 | }, 2979 | "is-glob": { 2980 | "version": "4.0.3", 2981 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 2982 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 2983 | "dev": true, 2984 | "requires": { 2985 | "is-extglob": "^2.1.1" 2986 | } 2987 | }, 2988 | "is-installed-globally": { 2989 | "version": "0.4.0", 2990 | "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", 2991 | "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", 2992 | "dev": true, 2993 | "requires": { 2994 | "global-dirs": "^3.0.0", 2995 | "is-path-inside": "^3.0.2" 2996 | } 2997 | }, 2998 | "is-npm": { 2999 | "version": "5.0.0", 3000 | "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", 3001 | "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", 3002 | "dev": true 3003 | }, 3004 | "is-number": { 3005 | "version": "7.0.0", 3006 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 3007 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 3008 | "dev": true 3009 | }, 3010 | "is-obj": { 3011 | "version": "2.0.0", 3012 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", 3013 | "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", 3014 | "dev": true 3015 | }, 3016 | "is-path-inside": { 3017 | "version": "3.0.3", 3018 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 3019 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 3020 | "dev": true 3021 | }, 3022 | "is-typedarray": { 3023 | "version": "1.0.0", 3024 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 3025 | "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", 3026 | "dev": true 3027 | }, 3028 | "is-yarn-global": { 3029 | "version": "0.3.0", 3030 | "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", 3031 | "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", 3032 | "dev": true 3033 | }, 3034 | "json-buffer": { 3035 | "version": "3.0.0", 3036 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", 3037 | "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", 3038 | "dev": true 3039 | }, 3040 | "kareem": { 3041 | "version": "2.5.1", 3042 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", 3043 | "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==" 3044 | }, 3045 | "keyv": { 3046 | "version": "3.1.0", 3047 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", 3048 | "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", 3049 | "dev": true, 3050 | "requires": { 3051 | "json-buffer": "3.0.0" 3052 | } 3053 | }, 3054 | "latest-version": { 3055 | "version": "5.1.0", 3056 | "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", 3057 | "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", 3058 | "dev": true, 3059 | "requires": { 3060 | "package-json": "^6.3.0" 3061 | } 3062 | }, 3063 | "lowercase-keys": { 3064 | "version": "1.0.1", 3065 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 3066 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", 3067 | "dev": true 3068 | }, 3069 | "lru-cache": { 3070 | "version": "6.0.0", 3071 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 3072 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 3073 | "dev": true, 3074 | "requires": { 3075 | "yallist": "^4.0.0" 3076 | } 3077 | }, 3078 | "make-dir": { 3079 | "version": "3.1.0", 3080 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 3081 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 3082 | "dev": true, 3083 | "requires": { 3084 | "semver": "^6.0.0" 3085 | }, 3086 | "dependencies": { 3087 | "semver": { 3088 | "version": "6.3.0", 3089 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 3090 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 3091 | "dev": true 3092 | } 3093 | } 3094 | }, 3095 | "media-typer": { 3096 | "version": "0.3.0", 3097 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 3098 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" 3099 | }, 3100 | "memory-pager": { 3101 | "version": "1.5.0", 3102 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", 3103 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", 3104 | "optional": true 3105 | }, 3106 | "merge-descriptors": { 3107 | "version": "1.0.1", 3108 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 3109 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 3110 | }, 3111 | "methods": { 3112 | "version": "1.1.2", 3113 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 3114 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" 3115 | }, 3116 | "mime": { 3117 | "version": "1.6.0", 3118 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 3119 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 3120 | }, 3121 | "mime-db": { 3122 | "version": "1.52.0", 3123 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 3124 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" 3125 | }, 3126 | "mime-types": { 3127 | "version": "2.1.35", 3128 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 3129 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 3130 | "requires": { 3131 | "mime-db": "1.52.0" 3132 | } 3133 | }, 3134 | "mimic-response": { 3135 | "version": "1.0.1", 3136 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 3137 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 3138 | "dev": true 3139 | }, 3140 | "minimatch": { 3141 | "version": "3.1.2", 3142 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 3143 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 3144 | "dev": true, 3145 | "requires": { 3146 | "brace-expansion": "^1.1.7" 3147 | } 3148 | }, 3149 | "minimist": { 3150 | "version": "1.2.6", 3151 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 3152 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", 3153 | "dev": true 3154 | }, 3155 | "mongodb": { 3156 | "version": "5.1.0", 3157 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.1.0.tgz", 3158 | "integrity": "sha512-qgKb7y+EI90y4weY3z5+lIgm8wmexbonz0GalHkSElQXVKtRuwqXuhXKccyvIjXCJVy9qPV82zsinY0W1FBnJw==", 3159 | "requires": { 3160 | "bson": "^5.0.1", 3161 | "mongodb-connection-string-url": "^2.6.0", 3162 | "saslprep": "^1.0.3", 3163 | "socks": "^2.7.1" 3164 | } 3165 | }, 3166 | "mongodb-connection-string-url": { 3167 | "version": "2.6.0", 3168 | "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", 3169 | "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", 3170 | "requires": { 3171 | "@types/whatwg-url": "^8.2.1", 3172 | "whatwg-url": "^11.0.0" 3173 | } 3174 | }, 3175 | "mongoose": { 3176 | "version": "7.0.0", 3177 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.0.0.tgz", 3178 | "integrity": "sha512-U0YPURDld+k/nvvSG1mRClQSjZMRXwQKSU5yb9PslRnOmVz0UlBD7SjSnjUuGT0yk+7BH+kJNimsKqMxYAKkMA==", 3179 | "requires": { 3180 | "bson": "^5.0.1", 3181 | "kareem": "2.5.1", 3182 | "mongodb": "5.1.0", 3183 | "mpath": "0.9.0", 3184 | "mquery": "5.0.0", 3185 | "ms": "2.1.3", 3186 | "sift": "16.0.1" 3187 | }, 3188 | "dependencies": { 3189 | "ms": { 3190 | "version": "2.1.3", 3191 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 3192 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 3193 | } 3194 | } 3195 | }, 3196 | "mpath": { 3197 | "version": "0.9.0", 3198 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", 3199 | "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==" 3200 | }, 3201 | "mquery": { 3202 | "version": "5.0.0", 3203 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", 3204 | "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", 3205 | "requires": { 3206 | "debug": "4.x" 3207 | }, 3208 | "dependencies": { 3209 | "debug": { 3210 | "version": "4.3.4", 3211 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 3212 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 3213 | "requires": { 3214 | "ms": "2.1.2" 3215 | } 3216 | }, 3217 | "ms": { 3218 | "version": "2.1.2", 3219 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 3220 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 3221 | } 3222 | } 3223 | }, 3224 | "ms": { 3225 | "version": "2.0.0", 3226 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 3227 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 3228 | }, 3229 | "negotiator": { 3230 | "version": "0.6.3", 3231 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 3232 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" 3233 | }, 3234 | "nodemon": { 3235 | "version": "2.0.16", 3236 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.16.tgz", 3237 | "integrity": "sha512-zsrcaOfTWRuUzBn3P44RDliLlp263Z/76FPoHFr3cFFkOz0lTPAcIw8dCzfdVIx/t3AtDYCZRCDkoCojJqaG3w==", 3238 | "dev": true, 3239 | "requires": { 3240 | "chokidar": "^3.5.2", 3241 | "debug": "^3.2.7", 3242 | "ignore-by-default": "^1.0.1", 3243 | "minimatch": "^3.0.4", 3244 | "pstree.remy": "^1.1.8", 3245 | "semver": "^5.7.1", 3246 | "supports-color": "^5.5.0", 3247 | "touch": "^3.1.0", 3248 | "undefsafe": "^2.0.5", 3249 | "update-notifier": "^5.1.0" 3250 | }, 3251 | "dependencies": { 3252 | "debug": { 3253 | "version": "3.2.7", 3254 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 3255 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 3256 | "dev": true, 3257 | "requires": { 3258 | "ms": "^2.1.1" 3259 | } 3260 | }, 3261 | "ms": { 3262 | "version": "2.1.3", 3263 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 3264 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 3265 | "dev": true 3266 | } 3267 | } 3268 | }, 3269 | "nopt": { 3270 | "version": "1.0.10", 3271 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", 3272 | "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", 3273 | "dev": true, 3274 | "requires": { 3275 | "abbrev": "1" 3276 | } 3277 | }, 3278 | "normalize-path": { 3279 | "version": "3.0.0", 3280 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 3281 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 3282 | "dev": true 3283 | }, 3284 | "normalize-url": { 3285 | "version": "4.5.1", 3286 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", 3287 | "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", 3288 | "dev": true 3289 | }, 3290 | "object-assign": { 3291 | "version": "4.1.1", 3292 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 3293 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" 3294 | }, 3295 | "object-inspect": { 3296 | "version": "1.12.2", 3297 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", 3298 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" 3299 | }, 3300 | "on-finished": { 3301 | "version": "2.4.1", 3302 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 3303 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 3304 | "requires": { 3305 | "ee-first": "1.1.1" 3306 | } 3307 | }, 3308 | "once": { 3309 | "version": "1.4.0", 3310 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 3311 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 3312 | "dev": true, 3313 | "requires": { 3314 | "wrappy": "1" 3315 | } 3316 | }, 3317 | "p-cancelable": { 3318 | "version": "1.1.0", 3319 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", 3320 | "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", 3321 | "dev": true 3322 | }, 3323 | "package-json": { 3324 | "version": "6.5.0", 3325 | "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", 3326 | "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", 3327 | "dev": true, 3328 | "requires": { 3329 | "got": "^9.6.0", 3330 | "registry-auth-token": "^4.0.0", 3331 | "registry-url": "^5.0.0", 3332 | "semver": "^6.2.0" 3333 | }, 3334 | "dependencies": { 3335 | "semver": { 3336 | "version": "6.3.0", 3337 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 3338 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 3339 | "dev": true 3340 | } 3341 | } 3342 | }, 3343 | "parseurl": { 3344 | "version": "1.3.3", 3345 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 3346 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 3347 | }, 3348 | "path-to-regexp": { 3349 | "version": "0.1.7", 3350 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 3351 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 3352 | }, 3353 | "picomatch": { 3354 | "version": "2.3.1", 3355 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 3356 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 3357 | "dev": true 3358 | }, 3359 | "prepend-http": { 3360 | "version": "2.0.0", 3361 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", 3362 | "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", 3363 | "dev": true 3364 | }, 3365 | "proxy-addr": { 3366 | "version": "2.0.7", 3367 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 3368 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 3369 | "requires": { 3370 | "forwarded": "0.2.0", 3371 | "ipaddr.js": "1.9.1" 3372 | } 3373 | }, 3374 | "pstree.remy": { 3375 | "version": "1.1.8", 3376 | "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", 3377 | "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", 3378 | "dev": true 3379 | }, 3380 | "pump": { 3381 | "version": "3.0.0", 3382 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 3383 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 3384 | "dev": true, 3385 | "requires": { 3386 | "end-of-stream": "^1.1.0", 3387 | "once": "^1.3.1" 3388 | } 3389 | }, 3390 | "punycode": { 3391 | "version": "2.3.0", 3392 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", 3393 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" 3394 | }, 3395 | "pupa": { 3396 | "version": "2.1.1", 3397 | "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", 3398 | "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", 3399 | "dev": true, 3400 | "requires": { 3401 | "escape-goat": "^2.0.0" 3402 | } 3403 | }, 3404 | "qs": { 3405 | "version": "6.10.3", 3406 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", 3407 | "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", 3408 | "requires": { 3409 | "side-channel": "^1.0.4" 3410 | } 3411 | }, 3412 | "range-parser": { 3413 | "version": "1.2.1", 3414 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 3415 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 3416 | }, 3417 | "raw-body": { 3418 | "version": "2.5.1", 3419 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 3420 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 3421 | "requires": { 3422 | "bytes": "3.1.2", 3423 | "http-errors": "2.0.0", 3424 | "iconv-lite": "0.4.24", 3425 | "unpipe": "1.0.0" 3426 | } 3427 | }, 3428 | "rc": { 3429 | "version": "1.2.8", 3430 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 3431 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 3432 | "dev": true, 3433 | "requires": { 3434 | "deep-extend": "^0.6.0", 3435 | "ini": "~1.3.0", 3436 | "minimist": "^1.2.0", 3437 | "strip-json-comments": "~2.0.1" 3438 | }, 3439 | "dependencies": { 3440 | "ini": { 3441 | "version": "1.3.8", 3442 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 3443 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", 3444 | "dev": true 3445 | } 3446 | } 3447 | }, 3448 | "readdirp": { 3449 | "version": "3.6.0", 3450 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 3451 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 3452 | "dev": true, 3453 | "requires": { 3454 | "picomatch": "^2.2.1" 3455 | } 3456 | }, 3457 | "registry-auth-token": { 3458 | "version": "4.2.1", 3459 | "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", 3460 | "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", 3461 | "dev": true, 3462 | "requires": { 3463 | "rc": "^1.2.8" 3464 | } 3465 | }, 3466 | "registry-url": { 3467 | "version": "5.1.0", 3468 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", 3469 | "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", 3470 | "dev": true, 3471 | "requires": { 3472 | "rc": "^1.2.8" 3473 | } 3474 | }, 3475 | "responselike": { 3476 | "version": "1.0.2", 3477 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", 3478 | "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", 3479 | "dev": true, 3480 | "requires": { 3481 | "lowercase-keys": "^1.0.0" 3482 | } 3483 | }, 3484 | "safe-buffer": { 3485 | "version": "5.2.1", 3486 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 3487 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 3488 | }, 3489 | "safer-buffer": { 3490 | "version": "2.1.2", 3491 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 3492 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 3493 | }, 3494 | "saslprep": { 3495 | "version": "1.0.3", 3496 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", 3497 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", 3498 | "optional": true, 3499 | "requires": { 3500 | "sparse-bitfield": "^3.0.3" 3501 | } 3502 | }, 3503 | "semver": { 3504 | "version": "5.7.1", 3505 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 3506 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 3507 | "dev": true 3508 | }, 3509 | "semver-diff": { 3510 | "version": "3.1.1", 3511 | "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", 3512 | "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", 3513 | "dev": true, 3514 | "requires": { 3515 | "semver": "^6.3.0" 3516 | }, 3517 | "dependencies": { 3518 | "semver": { 3519 | "version": "6.3.0", 3520 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 3521 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 3522 | "dev": true 3523 | } 3524 | } 3525 | }, 3526 | "send": { 3527 | "version": "0.18.0", 3528 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 3529 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 3530 | "requires": { 3531 | "debug": "2.6.9", 3532 | "depd": "2.0.0", 3533 | "destroy": "1.2.0", 3534 | "encodeurl": "~1.0.2", 3535 | "escape-html": "~1.0.3", 3536 | "etag": "~1.8.1", 3537 | "fresh": "0.5.2", 3538 | "http-errors": "2.0.0", 3539 | "mime": "1.6.0", 3540 | "ms": "2.1.3", 3541 | "on-finished": "2.4.1", 3542 | "range-parser": "~1.2.1", 3543 | "statuses": "2.0.1" 3544 | }, 3545 | "dependencies": { 3546 | "ms": { 3547 | "version": "2.1.3", 3548 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 3549 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 3550 | } 3551 | } 3552 | }, 3553 | "serve-static": { 3554 | "version": "1.15.0", 3555 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 3556 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 3557 | "requires": { 3558 | "encodeurl": "~1.0.2", 3559 | "escape-html": "~1.0.3", 3560 | "parseurl": "~1.3.3", 3561 | "send": "0.18.0" 3562 | } 3563 | }, 3564 | "setprototypeof": { 3565 | "version": "1.2.0", 3566 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 3567 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 3568 | }, 3569 | "side-channel": { 3570 | "version": "1.0.4", 3571 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 3572 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 3573 | "requires": { 3574 | "call-bind": "^1.0.0", 3575 | "get-intrinsic": "^1.0.2", 3576 | "object-inspect": "^1.9.0" 3577 | } 3578 | }, 3579 | "sift": { 3580 | "version": "16.0.1", 3581 | "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", 3582 | "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" 3583 | }, 3584 | "signal-exit": { 3585 | "version": "3.0.7", 3586 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 3587 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 3588 | "dev": true 3589 | }, 3590 | "smart-buffer": { 3591 | "version": "4.2.0", 3592 | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", 3593 | "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" 3594 | }, 3595 | "socks": { 3596 | "version": "2.7.1", 3597 | "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", 3598 | "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", 3599 | "requires": { 3600 | "ip": "^2.0.0", 3601 | "smart-buffer": "^4.2.0" 3602 | } 3603 | }, 3604 | "sparse-bitfield": { 3605 | "version": "3.0.3", 3606 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 3607 | "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", 3608 | "optional": true, 3609 | "requires": { 3610 | "memory-pager": "^1.0.2" 3611 | } 3612 | }, 3613 | "statuses": { 3614 | "version": "2.0.1", 3615 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 3616 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" 3617 | }, 3618 | "string-width": { 3619 | "version": "4.2.3", 3620 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 3621 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 3622 | "dev": true, 3623 | "requires": { 3624 | "emoji-regex": "^8.0.0", 3625 | "is-fullwidth-code-point": "^3.0.0", 3626 | "strip-ansi": "^6.0.1" 3627 | } 3628 | }, 3629 | "strip-ansi": { 3630 | "version": "6.0.1", 3631 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3632 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3633 | "dev": true, 3634 | "requires": { 3635 | "ansi-regex": "^5.0.1" 3636 | } 3637 | }, 3638 | "strip-json-comments": { 3639 | "version": "2.0.1", 3640 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 3641 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 3642 | "dev": true 3643 | }, 3644 | "supports-color": { 3645 | "version": "5.5.0", 3646 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 3647 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 3648 | "dev": true, 3649 | "requires": { 3650 | "has-flag": "^3.0.0" 3651 | } 3652 | }, 3653 | "to-readable-stream": { 3654 | "version": "1.0.0", 3655 | "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", 3656 | "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", 3657 | "dev": true 3658 | }, 3659 | "to-regex-range": { 3660 | "version": "5.0.1", 3661 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3662 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3663 | "dev": true, 3664 | "requires": { 3665 | "is-number": "^7.0.0" 3666 | } 3667 | }, 3668 | "toidentifier": { 3669 | "version": "1.0.1", 3670 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 3671 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" 3672 | }, 3673 | "touch": { 3674 | "version": "3.1.0", 3675 | "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", 3676 | "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", 3677 | "dev": true, 3678 | "requires": { 3679 | "nopt": "~1.0.10" 3680 | } 3681 | }, 3682 | "tr46": { 3683 | "version": "3.0.0", 3684 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", 3685 | "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", 3686 | "requires": { 3687 | "punycode": "^2.1.1" 3688 | } 3689 | }, 3690 | "type-fest": { 3691 | "version": "0.20.2", 3692 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 3693 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 3694 | "dev": true 3695 | }, 3696 | "type-is": { 3697 | "version": "1.6.18", 3698 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 3699 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 3700 | "requires": { 3701 | "media-typer": "0.3.0", 3702 | "mime-types": "~2.1.24" 3703 | } 3704 | }, 3705 | "typedarray-to-buffer": { 3706 | "version": "3.1.5", 3707 | "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", 3708 | "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", 3709 | "dev": true, 3710 | "requires": { 3711 | "is-typedarray": "^1.0.0" 3712 | } 3713 | }, 3714 | "undefsafe": { 3715 | "version": "2.0.5", 3716 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", 3717 | "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", 3718 | "dev": true 3719 | }, 3720 | "unique-string": { 3721 | "version": "2.0.0", 3722 | "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", 3723 | "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", 3724 | "dev": true, 3725 | "requires": { 3726 | "crypto-random-string": "^2.0.0" 3727 | } 3728 | }, 3729 | "unpipe": { 3730 | "version": "1.0.0", 3731 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 3732 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 3733 | }, 3734 | "update-notifier": { 3735 | "version": "5.1.0", 3736 | "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", 3737 | "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", 3738 | "dev": true, 3739 | "requires": { 3740 | "boxen": "^5.0.0", 3741 | "chalk": "^4.1.0", 3742 | "configstore": "^5.0.1", 3743 | "has-yarn": "^2.1.0", 3744 | "import-lazy": "^2.1.0", 3745 | "is-ci": "^2.0.0", 3746 | "is-installed-globally": "^0.4.0", 3747 | "is-npm": "^5.0.0", 3748 | "is-yarn-global": "^0.3.0", 3749 | "latest-version": "^5.1.0", 3750 | "pupa": "^2.1.1", 3751 | "semver": "^7.3.4", 3752 | "semver-diff": "^3.1.1", 3753 | "xdg-basedir": "^4.0.0" 3754 | }, 3755 | "dependencies": { 3756 | "semver": { 3757 | "version": "7.3.7", 3758 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", 3759 | "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", 3760 | "dev": true, 3761 | "requires": { 3762 | "lru-cache": "^6.0.0" 3763 | } 3764 | } 3765 | } 3766 | }, 3767 | "url-parse-lax": { 3768 | "version": "3.0.0", 3769 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", 3770 | "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", 3771 | "dev": true, 3772 | "requires": { 3773 | "prepend-http": "^2.0.0" 3774 | } 3775 | }, 3776 | "utils-merge": { 3777 | "version": "1.0.1", 3778 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 3779 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 3780 | }, 3781 | "vary": { 3782 | "version": "1.1.2", 3783 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 3784 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 3785 | }, 3786 | "webidl-conversions": { 3787 | "version": "7.0.0", 3788 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 3789 | "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" 3790 | }, 3791 | "whatwg-url": { 3792 | "version": "11.0.0", 3793 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", 3794 | "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", 3795 | "requires": { 3796 | "tr46": "^3.0.0", 3797 | "webidl-conversions": "^7.0.0" 3798 | } 3799 | }, 3800 | "widest-line": { 3801 | "version": "3.1.0", 3802 | "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", 3803 | "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", 3804 | "dev": true, 3805 | "requires": { 3806 | "string-width": "^4.0.0" 3807 | } 3808 | }, 3809 | "wrap-ansi": { 3810 | "version": "7.0.0", 3811 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 3812 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 3813 | "dev": true, 3814 | "requires": { 3815 | "ansi-styles": "^4.0.0", 3816 | "string-width": "^4.1.0", 3817 | "strip-ansi": "^6.0.0" 3818 | } 3819 | }, 3820 | "wrappy": { 3821 | "version": "1.0.2", 3822 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3823 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 3824 | "dev": true 3825 | }, 3826 | "write-file-atomic": { 3827 | "version": "3.0.3", 3828 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", 3829 | "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", 3830 | "dev": true, 3831 | "requires": { 3832 | "imurmurhash": "^0.1.4", 3833 | "is-typedarray": "^1.0.0", 3834 | "signal-exit": "^3.0.2", 3835 | "typedarray-to-buffer": "^3.1.5" 3836 | } 3837 | }, 3838 | "xdg-basedir": { 3839 | "version": "4.0.0", 3840 | "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", 3841 | "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", 3842 | "dev": true 3843 | }, 3844 | "yallist": { 3845 | "version": "4.0.0", 3846 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 3847 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 3848 | "dev": true 3849 | } 3850 | } 3851 | } 3852 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "project-mgmt-app", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node server/index.js", 8 | "dev": "nodemon server/index.js" 9 | }, 10 | "keywords": [], 11 | "author": "", 12 | "license": "ISC", 13 | "dependencies": { 14 | "colors": "^1.4.0", 15 | "cors": "^2.8.5", 16 | "express": "^4.18.1", 17 | "express-graphql": "^0.12.0", 18 | "graphql": "^15.8.0", 19 | "mongoose": "^7.0.0" 20 | }, 21 | "devDependencies": { 22 | "dotenv": "^16.0.1", 23 | "nodemon": "^2.0.16" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /server/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:16-buster 2 | 3 | WORKDIR /app 4 | 5 | COPY package.json /app/package.json 6 | COPY package-lock.json /app/package-lock.json 7 | 8 | RUN npm ci 9 | 10 | COPY . /app 11 | 12 | EXPOSE 3000 13 | 14 | CMD [ "npm", "run", "start" ] -------------------------------------------------------------------------------- /server/config/db.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | 3 | const connectDB = async () => { 4 | const conn = await mongoose.connect(process.env.MONGO_URI); 5 | 6 | console.log(`MongoDB Connected: ${conn.connection.host}`.cyan.underline.bold); 7 | }; 8 | 9 | module.exports = connectDB; 10 | -------------------------------------------------------------------------------- /server/index.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const colors = require('colors'); 3 | const cors = require('cors'); 4 | require('dotenv').config(); 5 | const { graphqlHTTP } = require('express-graphql'); 6 | const schema = require('./schema/schema'); 7 | const connectDB = require('./config/db'); 8 | const port = process.env.PORT || 5000; 9 | 10 | const app = express(); 11 | 12 | // Connect to database 13 | connectDB(); 14 | 15 | app.use(cors()); 16 | 17 | app.use( 18 | '/graphql', 19 | graphqlHTTP({ 20 | schema, 21 | graphiql: process.env.NODE_ENV === 'development', 22 | }) 23 | ); 24 | 25 | app.listen(port, console.log(`Server running on port ${port}`)); 26 | -------------------------------------------------------------------------------- /server/models/Client.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | 3 | const ClientSchema = new mongoose.Schema({ 4 | name: { 5 | type: String, 6 | }, 7 | email: { 8 | type: String, 9 | }, 10 | phone: { 11 | type: String, 12 | }, 13 | }); 14 | 15 | module.exports = mongoose.model('Client', ClientSchema); 16 | -------------------------------------------------------------------------------- /server/models/Project.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | 3 | const ProjectSchema = new mongoose.Schema({ 4 | name: { 5 | type: String, 6 | }, 7 | description: { 8 | type: String, 9 | }, 10 | status: { 11 | type: String, 12 | enum: ['Not Started', 'In Progress', 'Completed'], 13 | }, 14 | clientId: { 15 | type: mongoose.Schema.Types.ObjectId, 16 | ref: 'Client', 17 | }, 18 | }); 19 | 20 | module.exports = mongoose.model('Project', ProjectSchema); 21 | -------------------------------------------------------------------------------- /server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "project-mgmt-app", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node index.js", 8 | "dev": "nodemon index.js" 9 | }, 10 | "keywords": [], 11 | "author": "", 12 | "license": "ISC", 13 | "dependencies": { 14 | "colors": "^1.4.0", 15 | "cors": "^2.8.5", 16 | "express": "^4.18.1", 17 | "express-graphql": "^0.12.0", 18 | "graphql": "^15.8.0", 19 | "mongoose": "^6.3.5" 20 | }, 21 | "devDependencies": { 22 | "dotenv": "^16.0.1", 23 | "nodemon": "^2.0.16" 24 | } 25 | } -------------------------------------------------------------------------------- /server/sampleData.js: -------------------------------------------------------------------------------- 1 | // Projects 2 | const projects = [ 3 | { 4 | id: '1', 5 | clientId: '1', 6 | name: 'eCommerce Website', 7 | description: 8 | 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu.', 9 | status: 'In Progress', 10 | }, 11 | { 12 | id: '2', 13 | clientId: '2', 14 | name: 'Dating App', 15 | description: 16 | 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu.', 17 | status: 'In Progress', 18 | }, 19 | { 20 | id: '3', 21 | clientId: '3', 22 | name: 'SEO Project', 23 | description: 24 | 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu.', 25 | status: 'In Progress', 26 | }, 27 | { 28 | id: '4', 29 | clientId: '4', 30 | name: 'Design Prototype', 31 | description: 32 | 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu.', 33 | status: 'Done', 34 | }, 35 | { 36 | id: '5', 37 | clientId: '5', 38 | name: 'Auction Website', 39 | description: 40 | 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu.', 41 | status: 'In Progress', 42 | }, 43 | ]; 44 | 45 | // Clients 46 | const clients = [ 47 | { 48 | id: '1', 49 | name: 'Tony Stark', 50 | email: 'ironman@gmail.com', 51 | phone: '343-567-4333', 52 | }, 53 | { 54 | id: '2', 55 | name: 'Natasha Romanova', 56 | email: 'blackwidow@gmail.com', 57 | phone: '223-567-3322', 58 | }, 59 | { 60 | id: '3', 61 | name: 'Thor Odinson', 62 | email: 'thor@gmail.com', 63 | phone: '324-331-4333', 64 | }, 65 | { 66 | id: '4', 67 | name: 'Steve Rogers', 68 | email: 'steve@gmail.com', 69 | phone: '344-562-6787', 70 | }, 71 | { 72 | id: '5', 73 | name: 'Bruce Banner', 74 | email: 'bruce@gmail.com', 75 | phone: '321-468-8887', 76 | }, 77 | ]; 78 | 79 | module.exports = { projects, clients }; 80 | -------------------------------------------------------------------------------- /server/schema/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradtraversy/project-mgmt-graphql/5c001d8ce54d4aed45032f662ff139ad45efe1ef/server/schema/.DS_Store -------------------------------------------------------------------------------- /server/schema/schema.js: -------------------------------------------------------------------------------- 1 | const Project = require('../models/Project'); 2 | const Client = require('../models/Client'); 3 | 4 | const { 5 | GraphQLObjectType, 6 | GraphQLID, 7 | GraphQLString, 8 | GraphQLSchema, 9 | GraphQLList, 10 | GraphQLNonNull, 11 | GraphQLEnumType, 12 | } = require('graphql'); 13 | 14 | // Project Type 15 | const ProjectType = new GraphQLObjectType({ 16 | name: 'Project', 17 | fields: () => ({ 18 | id: { type: GraphQLID }, 19 | name: { type: GraphQLString }, 20 | description: { type: GraphQLString }, 21 | status: { type: GraphQLString }, 22 | client: { 23 | type: ClientType, 24 | resolve(parent, args) { 25 | return Client.findById(parent.clientId); 26 | }, 27 | }, 28 | }), 29 | }); 30 | 31 | // Client Type 32 | const ClientType = new GraphQLObjectType({ 33 | name: 'Client', 34 | fields: () => ({ 35 | id: { type: GraphQLID }, 36 | name: { type: GraphQLString }, 37 | email: { type: GraphQLString }, 38 | phone: { type: GraphQLString }, 39 | }), 40 | }); 41 | 42 | const RootQuery = new GraphQLObjectType({ 43 | name: 'RootQueryType', 44 | fields: { 45 | projects: { 46 | type: new GraphQLList(ProjectType), 47 | resolve(parent, args) { 48 | return Project.find(); 49 | }, 50 | }, 51 | project: { 52 | type: ProjectType, 53 | args: { id: { type: GraphQLID } }, 54 | resolve(parent, args) { 55 | return Project.findById(args.id); 56 | }, 57 | }, 58 | clients: { 59 | type: new GraphQLList(ClientType), 60 | resolve(parent, args) { 61 | return Client.find(); 62 | }, 63 | }, 64 | client: { 65 | type: ClientType, 66 | args: { id: { type: GraphQLID } }, 67 | resolve(parent, args) { 68 | return Client.findById(args.id); 69 | }, 70 | }, 71 | }, 72 | }); 73 | 74 | // Mutations 75 | const mutation = new GraphQLObjectType({ 76 | name: 'Mutation', 77 | fields: { 78 | // Add a client 79 | addClient: { 80 | type: ClientType, 81 | args: { 82 | name: { type: GraphQLNonNull(GraphQLString) }, 83 | email: { type: GraphQLNonNull(GraphQLString) }, 84 | phone: { type: GraphQLNonNull(GraphQLString) }, 85 | }, 86 | resolve(parent, args) { 87 | const client = new Client({ 88 | name: args.name, 89 | email: args.email, 90 | phone: args.phone, 91 | }); 92 | 93 | return client.save(); 94 | }, 95 | }, 96 | // Delete a client 97 | deleteClient: { 98 | type: ClientType, 99 | args: { 100 | id: { type: GraphQLNonNull(GraphQLID) }, 101 | }, 102 | resolve(parent, args) { 103 | Project.find({ clientId: args.id }).then((projects) => { 104 | projects.forEach((project) => { 105 | project.deleteOne(); 106 | }); 107 | }); 108 | 109 | return Client.findByIdAndRemove(args.id); 110 | }, 111 | }, 112 | // Add a project 113 | addProject: { 114 | type: ProjectType, 115 | args: { 116 | name: { type: GraphQLNonNull(GraphQLString) }, 117 | description: { type: GraphQLNonNull(GraphQLString) }, 118 | status: { 119 | type: new GraphQLEnumType({ 120 | name: 'ProjectStatus', 121 | values: { 122 | new: { value: 'Not Started' }, 123 | progress: { value: 'In Progress' }, 124 | completed: { value: 'Completed' }, 125 | }, 126 | }), 127 | defaultValue: 'Not Started', 128 | }, 129 | clientId: { type: GraphQLNonNull(GraphQLID) }, 130 | }, 131 | resolve(parent, args) { 132 | const project = new Project({ 133 | name: args.name, 134 | description: args.description, 135 | status: args.status, 136 | clientId: args.clientId, 137 | }); 138 | 139 | return project.save(); 140 | }, 141 | }, 142 | // Delete a project 143 | deleteProject: { 144 | type: ProjectType, 145 | args: { 146 | id: { type: GraphQLNonNull(GraphQLID) }, 147 | }, 148 | resolve(parent, args) { 149 | return Project.findByIdAndRemove(args.id); 150 | }, 151 | }, 152 | // Update a project 153 | updateProject: { 154 | type: ProjectType, 155 | args: { 156 | id: { type: GraphQLNonNull(GraphQLID) }, 157 | name: { type: GraphQLString }, 158 | description: { type: GraphQLString }, 159 | status: { 160 | type: new GraphQLEnumType({ 161 | name: 'ProjectStatusUpdate', 162 | values: { 163 | new: { value: 'Not Started' }, 164 | progress: { value: 'In Progress' }, 165 | completed: { value: 'Completed' }, 166 | }, 167 | }), 168 | }, 169 | }, 170 | resolve(parent, args) { 171 | return Project.findByIdAndUpdate( 172 | args.id, 173 | { 174 | $set: { 175 | name: args.name, 176 | description: args.description, 177 | status: args.status, 178 | }, 179 | }, 180 | { new: true } 181 | ); 182 | }, 183 | }, 184 | }, 185 | }); 186 | 187 | module.exports = new GraphQLSchema({ 188 | query: RootQuery, 189 | mutation, 190 | }); 191 | --------------------------------------------------------------------------------