├── .DS_Store ├── final ├── .DS_Store ├── .gitignore ├── client │ ├── .gitignore │ ├── README.md │ ├── package-lock.json │ ├── package.json │ ├── public │ │ ├── favicon.ico │ │ ├── index.html │ │ ├── logo192.png │ │ ├── logo512.png │ │ ├── manifest.json │ │ └── robots.txt │ └── src │ │ ├── App.css │ │ ├── App.js │ │ ├── App.test.js │ │ ├── assets │ │ ├── image │ │ │ ├── cat.jpg │ │ │ ├── cham.jpg │ │ │ ├── dockey.jpg │ │ │ ├── dolphin.jpg │ │ │ ├── ele.jpg │ │ │ ├── gorilla.jpg │ │ │ ├── horse.jpg │ │ │ ├── kang.jpg │ │ │ ├── lion.png │ │ │ ├── lion2.jpg │ │ │ ├── ostrich.jpg │ │ │ ├── penguin.png │ │ │ ├── penguin2.jpg │ │ │ ├── rhino.png │ │ │ ├── snake.jpeg │ │ │ ├── stingray.jpg │ │ │ ├── tiger.jpeg │ │ │ └── tiger.png │ │ ├── images.js │ │ └── svg │ │ │ ├── loupe.svg │ │ │ ├── s.svg │ │ │ ├── shopping-cart.svg │ │ │ └── star.svg │ │ ├── components │ │ ├── Card │ │ │ ├── Card.css │ │ │ └── Card.js │ │ ├── CardDisplay │ │ │ └── CardDisplay.js │ │ ├── CategoryDisplay │ │ │ ├── CategoryDisplay.css │ │ │ └── CategoryDisplay.jsx │ │ ├── MainHero │ │ │ ├── MainHero.css │ │ │ └── MainHero.js │ │ └── Nav │ │ │ ├── Nav.css │ │ │ └── Nav.js │ │ ├── index.css │ │ ├── index.js │ │ ├── logo.svg │ │ ├── pages │ │ ├── AnimalPage │ │ │ ├── AnimalPage.css │ │ │ └── AnimalPage.js │ │ ├── CategoryPage.js │ │ └── LandingPage.js │ │ ├── reportWebVitals.js │ │ └── setupTests.js └── server │ ├── db.js │ ├── index.js │ ├── package-lock.json │ ├── package.json │ ├── resolvers │ ├── Animal.js │ ├── Category.js │ ├── Mutation.js │ └── Query.js │ └── schema.js └── start ├── .DS_Store └── client ├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── public ├── favicon.ico ├── index.html ├── logo192.png ├── logo512.png ├── manifest.json └── robots.txt └── src ├── App.css ├── App.js ├── App.test.js ├── assets ├── image │ ├── cat.jpg │ ├── cham.jpg │ ├── dockey.jpg │ ├── dolphin.jpg │ ├── ele.jpg │ ├── gorilla.jpg │ ├── horse.jpg │ ├── kang.jpg │ ├── lion.png │ ├── lion2.jpg │ ├── ostrich.jpg │ ├── penguin.png │ ├── penguin2.jpg │ ├── rhino.png │ ├── snake.jpeg │ ├── stingray.jpg │ ├── tiger.jpeg │ └── tiger.png ├── images.js └── svg │ ├── loupe.svg │ ├── s.svg │ ├── shopping-cart.svg │ └── star.svg ├── components ├── Card │ ├── Card.css │ └── Card.js ├── CardDisplay │ └── CardDisplay.js ├── CategoryDisplay │ ├── CategoryDisplay.css │ └── CategoryDisplay.jsx ├── MainHero │ ├── MainHero.css │ └── MainHero.js └── Nav │ ├── Nav.css │ └── Nav.js ├── index.css ├── index.js ├── logo.svg ├── pages ├── AnimalPage │ ├── AnimalPage.css │ └── AnimalPage.js ├── CategoryPage.js └── LandingPage.js ├── reportWebVitals.js └── setupTests.js /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/.DS_Store -------------------------------------------------------------------------------- /final/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/final/.DS_Store -------------------------------------------------------------------------------- /final/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /final/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 | -------------------------------------------------------------------------------- /final/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 | ### `yarn start` 10 | 11 | Runs the app in the development mode.\ 12 | Open [http://localhost:3000](http://localhost:3000) to view it in the browser. 13 | 14 | The page will reload if you make edits.\ 15 | You will also see any lint errors in the console. 16 | 17 | ### `yarn 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 | ### `yarn 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 | ### `yarn 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 | ### `yarn 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 | -------------------------------------------------------------------------------- /final/client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "client", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "@apollo/client": "^3.3.10", 7 | "@testing-library/jest-dom": "^5.11.4", 8 | "@testing-library/react": "^11.1.0", 9 | "@testing-library/user-event": "^12.1.10", 10 | "bootstrap": "^4.6.0", 11 | "graphql": "^15.5.0", 12 | "react": "^17.0.1", 13 | "react-bootstrap": "^1.4.3", 14 | "react-dom": "^17.0.1", 15 | "react-router-dom": "^5.2.0", 16 | "react-scripts": "4.0.2", 17 | "reactstrap": "^8.9.0", 18 | "web-vitals": "^1.0.1" 19 | }, 20 | "scripts": { 21 | "start": "react-scripts start", 22 | "build": "react-scripts build", 23 | "test": "react-scripts test", 24 | "eject": "react-scripts eject" 25 | }, 26 | "eslintConfig": { 27 | "extends": [ 28 | "react-app", 29 | "react-app/jest" 30 | ] 31 | }, 32 | "browserslist": { 33 | "production": [ 34 | ">0.2%", 35 | "not dead", 36 | "not op_mini all" 37 | ], 38 | "development": [ 39 | "last 1 chrome version", 40 | "last 1 firefox version", 41 | "last 1 safari version" 42 | ] 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /final/client/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/final/client/public/favicon.ico -------------------------------------------------------------------------------- /final/client/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 17 | 18 | 22 | 23 | 32 | Animazon 33 | 34 | 35 | 36 |
37 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /final/client/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/final/client/public/logo192.png -------------------------------------------------------------------------------- /final/client/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/final/client/public/logo512.png -------------------------------------------------------------------------------- /final/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 | -------------------------------------------------------------------------------- /final/client/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /final/client/src/App.css: -------------------------------------------------------------------------------- 1 | * { 2 | padding: 0; 3 | margin: 0; 4 | box-sizing: border-box; 5 | font-family: "Lato"; 6 | } 7 | -------------------------------------------------------------------------------- /final/client/src/App.js: -------------------------------------------------------------------------------- 1 | import logo from './logo.svg'; 2 | import './App.css'; 3 | import Nav from './components/Nav/Nav'; 4 | import { Switch, Route, BrowserRouter } from "react-router-dom" 5 | import LandingPage from './pages/LandingPage'; 6 | import CategoryPage from './pages/CategoryPage'; 7 | import AnimalPage from './pages/AnimalPage/AnimalPage'; 8 | import { ApolloClient, InMemoryCache, ApolloProvider } from "@apollo/client"; 9 | 10 | const client = new ApolloClient({ 11 | uri: "http://localhost:4000", 12 | cache: new InMemoryCache() 13 | }) 14 | 15 | function App() { 16 | return ( 17 |
18 | 19 | 20 |
29 | ); 30 | } 31 | 32 | export default App; 33 | -------------------------------------------------------------------------------- /final/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 | -------------------------------------------------------------------------------- /final/client/src/assets/image/cat.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/final/client/src/assets/image/cat.jpg -------------------------------------------------------------------------------- /final/client/src/assets/image/cham.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/final/client/src/assets/image/cham.jpg -------------------------------------------------------------------------------- /final/client/src/assets/image/dockey.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/final/client/src/assets/image/dockey.jpg -------------------------------------------------------------------------------- /final/client/src/assets/image/dolphin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/final/client/src/assets/image/dolphin.jpg -------------------------------------------------------------------------------- /final/client/src/assets/image/ele.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/final/client/src/assets/image/ele.jpg -------------------------------------------------------------------------------- /final/client/src/assets/image/gorilla.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/final/client/src/assets/image/gorilla.jpg -------------------------------------------------------------------------------- /final/client/src/assets/image/horse.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/final/client/src/assets/image/horse.jpg -------------------------------------------------------------------------------- /final/client/src/assets/image/kang.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/final/client/src/assets/image/kang.jpg -------------------------------------------------------------------------------- /final/client/src/assets/image/lion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/final/client/src/assets/image/lion.png -------------------------------------------------------------------------------- /final/client/src/assets/image/lion2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/final/client/src/assets/image/lion2.jpg -------------------------------------------------------------------------------- /final/client/src/assets/image/ostrich.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/final/client/src/assets/image/ostrich.jpg -------------------------------------------------------------------------------- /final/client/src/assets/image/penguin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/final/client/src/assets/image/penguin.png -------------------------------------------------------------------------------- /final/client/src/assets/image/penguin2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/final/client/src/assets/image/penguin2.jpg -------------------------------------------------------------------------------- /final/client/src/assets/image/rhino.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/final/client/src/assets/image/rhino.png -------------------------------------------------------------------------------- /final/client/src/assets/image/snake.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/final/client/src/assets/image/snake.jpeg -------------------------------------------------------------------------------- /final/client/src/assets/image/stingray.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/final/client/src/assets/image/stingray.jpg -------------------------------------------------------------------------------- /final/client/src/assets/image/tiger.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/final/client/src/assets/image/tiger.jpeg -------------------------------------------------------------------------------- /final/client/src/assets/image/tiger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/final/client/src/assets/image/tiger.png -------------------------------------------------------------------------------- /final/client/src/assets/images.js: -------------------------------------------------------------------------------- 1 | import lion from "./image/lion2.jpg" 2 | import cham from "./image/cham.jpg" 3 | import dolphin from "./image/dolphin.jpg" 4 | import gorilla from "./image/gorilla.jpg" 5 | import horse from "./image/horse.jpg" 6 | import kang from "./image/kang.jpg" 7 | import ele from "./image/ele.jpg" 8 | import donkey from "./image/dockey.jpg" 9 | import tiger from "./image/tiger.jpeg" 10 | import snake from "./image/snake.jpeg" 11 | import stingray from "./image/stingray.jpg" 12 | import ostrich from "./image/ostrich.jpg" 13 | import penguin from "./image/penguin2.jpg" 14 | import cat from "./image/cat.jpg" 15 | import rhino from "./image/rhino.png" 16 | 17 | export default { 18 | lion, 19 | cham, 20 | dolphin, 21 | gorilla, 22 | horse, 23 | kang, 24 | ele, 25 | donkey, 26 | tiger, 27 | snake, 28 | stingray, 29 | ostrich, 30 | penguin, 31 | cat, 32 | rhino 33 | } -------------------------------------------------------------------------------- /final/client/src/assets/svg/loupe.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /final/client/src/assets/svg/s.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/final/client/src/assets/svg/s.svg -------------------------------------------------------------------------------- /final/client/src/assets/svg/shopping-cart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /final/client/src/assets/svg/star.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /final/client/src/components/Card/Card.css: -------------------------------------------------------------------------------- 1 | .card-display { 2 | } 3 | 4 | .card-display-container { 5 | display: flex; 6 | justify-content: space-between; 7 | flex-wrap: wrap; 8 | } 9 | 10 | .main-img { 11 | height: 12.5rem; 12 | } 13 | 14 | .Card { 15 | width: 23%; 16 | margin-top: 2rem; 17 | cursor: pointer; 18 | color: black 19 | } 20 | 21 | .Card:hover { 22 | text-decoration: none; 23 | color: black 24 | } 25 | 26 | .Card img { 27 | width: 100%; 28 | } 29 | 30 | .Card h4 { 31 | font-size: 1rem; 32 | line-height: 1.5rem; 33 | margin-top: 0.2rem; 34 | } 35 | 36 | .card-start { 37 | margin-top: 0.2rem; 38 | display: flex; 39 | } 40 | 41 | .card-start img { 42 | width: 1.2rem; 43 | margin-right: 0.2rem; 44 | } 45 | 46 | .card-price { 47 | display: flex; 48 | margin-top: 0.5rem; 49 | } 50 | 51 | .card-price p { 52 | font-size: 0.75rem; 53 | margin-top: 0.25rem; 54 | margin-right: 0.05rem; 55 | } 56 | 57 | .card-price h4 { 58 | font-size: 1.25rem; 59 | font-weight: 400; 60 | } 61 | 62 | .card-prime { 63 | margin-top: 0.2rem; 64 | font-size: 1.25rem 65 | } 66 | 67 | .card-prime span { 68 | color: rgb(33, 145, 193); 69 | font-weight: 700; 70 | margin-right: 0.2rem; 71 | font-size: 1.25rem; 72 | } 73 | 74 | .card-prime .bold { 75 | color: black; 76 | } 77 | -------------------------------------------------------------------------------- /final/client/src/components/Card/Card.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import lion from "../../assets/image/lion2.jpg" 3 | import "./Card.css" 4 | import star from "../../assets/svg/star.svg" 5 | import animal from "../../assets/images" 6 | import { Link } from 'react-router-dom' 7 | 8 | function Card(props) { 9 | return ( 10 | 11 | 12 |

13 | {props.animal.title} 14 |

15 |
16 | 17 | 18 | 19 | 20 | 21 |
22 |
23 |

CAD $

24 |

{props.animal.price}

25 |
26 |
27 | prime FREE delivery by Tuesday, Feb 16 28 |
29 | 30 | ) 31 | } 32 | 33 | export default Card 34 | -------------------------------------------------------------------------------- /final/client/src/components/CardDisplay/CardDisplay.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Card from '../Card/Card' 3 | import {Container} from "react-bootstrap" 4 | 5 | function CardDisplay({animals}) { 6 | 7 | return ( 8 |
9 | 10 | {animals.map(animal => { 11 | return 12 | })} 13 | 14 |
15 | ) 16 | } 17 | 18 | export default CardDisplay 19 | -------------------------------------------------------------------------------- /final/client/src/components/CategoryDisplay/CategoryDisplay.css: -------------------------------------------------------------------------------- 1 | .CategoryDisplay { 2 | padding-top: 2rem 3 | } 4 | .CategoryDisplay-card { 5 | border-radius: 100%; 6 | overflow: hidden; 7 | width: 15rem; 8 | height: 15rem; 9 | padding-bottom: 2rem; 10 | } 11 | 12 | .CategoryDisplay-card-container { 13 | width: 15rem; 14 | text-align: center; 15 | } 16 | 17 | .CategoryDisplay-card img { 18 | height: 100%; 19 | width: 100% 20 | } 21 | 22 | .CategoryDisplay-card-container h3 { 23 | text-align: center; 24 | margin-top: -2rem; 25 | } 26 | 27 | .CategoryDisplay-container { 28 | display: flex; 29 | justify-content: space-between; 30 | } -------------------------------------------------------------------------------- /final/client/src/components/CategoryDisplay/CategoryDisplay.jsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react' 2 | import "./CategoryDisplay.css" 3 | import { Container } from 'react-bootstrap' 4 | import animals from '../../assets/images' 5 | import { useQuery, gql } from "@apollo/client" 6 | import { Link } from "react-router-dom" 7 | 8 | const CATEGORIES_QUERY = gql` 9 | { 10 | categories { 11 | id 12 | category 13 | image 14 | slug 15 | } 16 | } 17 | ` 18 | 19 | function CategoryDisplay() { 20 | 21 | const { loading, error, data } = useQuery(CATEGORIES_QUERY); 22 | 23 | if(loading) return
Loading...
; 24 | 25 | if(error) return
Error....
26 | 27 | return ( 28 |
29 | 30 | {data.categories.map(category => { 31 | return ( 32 | 33 |
34 | 35 |
36 |

{category.category}

37 | 38 | ) 39 | })} 40 |
41 |
42 | ) 43 | } 44 | 45 | export default CategoryDisplay 46 | -------------------------------------------------------------------------------- /final/client/src/components/MainHero/MainHero.css: -------------------------------------------------------------------------------- 1 | .MainHero { 2 | background-color: rgb(218, 247, 255); 3 | padding-bottom: 2rem; 4 | } 5 | 6 | .header-container { 7 | padding: 3rem; 8 | text-align: center; 9 | display: flex; 10 | align-items: center; 11 | justify-content: center; 12 | } 13 | 14 | .header-container h2 { 15 | font-size: 2.75rem; 16 | margin-right: 2rem; 17 | } 18 | 19 | .header-container img { 20 | width: 15rem; 21 | } 22 | 23 | .cards-container { 24 | display: flex; 25 | justify-content: space-between; 26 | } 27 | 28 | .card { 29 | width: 32%; 30 | background-color: white; 31 | height: 25rem; 32 | padding: 1rem; 33 | padding-bottom: 6rem; 34 | } 35 | 36 | .card p { 37 | font-weight: 900; 38 | margin-top: 1rem; 39 | font-size: 0.75rem; 40 | } 41 | 42 | .card img { 43 | width: 100%; 44 | height: 100%; 45 | margin-top: 1rem; 46 | } 47 | 48 | .boxs-container { 49 | display: flex; 50 | justify-content: space-between; 51 | flex-wrap: wrap; 52 | margin-top: 0.5rem; 53 | } 54 | 55 | .box-container { 56 | background-color: rgba(238, 130, 238, 0.151); 57 | width: 49%; 58 | height: 5rem; 59 | display: flex; 60 | align-items: flex-start; 61 | justify-content: center; 62 | margin-top: 1rem; 63 | } 64 | 65 | .box-container img { 66 | width: 5rem; 67 | } 68 | -------------------------------------------------------------------------------- /final/client/src/components/MainHero/MainHero.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import "./MainHero.css" 3 | import animals from "../../assets/images" 4 | import {Container} from "reactstrap"; 5 | import { useQuery, gql } from "@apollo/client" 6 | 7 | const FETCH_MAIN_CARDS = gql` 8 | { 9 | mainCards { 10 | image 11 | title 12 | } 13 | } 14 | ` 15 | 16 | function MainHero() { 17 | 18 | const { loading, error, data } = useQuery(FETCH_MAIN_CARDS) 19 | 20 | console.log(data) 21 | 22 | if(loading) return
loading...
23 | 24 | if(error) return
Some error happen
25 | 26 | return ( 27 |
28 | 29 |
30 |

Find your
new four-legged
best friend

31 | 32 |
33 |
34 | {data.mainCards.map(card => { 35 | return ( 36 |
37 |

{card.title}

38 | 39 |
40 | ) 41 | })} 42 |
43 |
44 |
45 | ) 46 | } 47 | 48 | export default MainHero 49 | -------------------------------------------------------------------------------- /final/client/src/components/Nav/Nav.css: -------------------------------------------------------------------------------- 1 | .Nav { 2 | background-color: rgb(19, 25, 33); 3 | height: 7.5vh; 4 | display: flex; 5 | align-items: center; 6 | padding: 0 2rem; 7 | } 8 | 9 | .nav-container { 10 | display: flex; 11 | width: 100%; 12 | align-items: center; 13 | } 14 | 15 | .header { 16 | font-family: "Poppins", sans-serif; 17 | color: white; 18 | font-size: 1.4rem; 19 | } 20 | 21 | .header span { 22 | font-size: 0.95rem; 23 | font-weight: 400; 24 | } 25 | 26 | .nav-delivery-info-container { 27 | margin-left: 2rem; 28 | font-size: 0.7rem; 29 | color: rgb(184, 181, 181); 30 | font-weight: 700; 31 | } 32 | 33 | .nav-delivery-info-container h2 { 34 | color: white; 35 | font-size: 1rem; 36 | } 37 | 38 | .nav-delivery-info-container p { 39 | margin-bottom: 0; 40 | } 41 | 42 | .nav-input-container { 43 | margin-left: 2rem; 44 | display: flex; 45 | height: 2.25rem; 46 | align-self: center; 47 | width: 75% 48 | } 49 | 50 | .nav-input-container select { 51 | height: 100%; 52 | border-radius: 0.2rem 0 0 0.2rem; 53 | padding: 0.2rem; 54 | background-color: rgb(218, 218, 218); 55 | border-color: rgba(128, 128, 128, 0.315); 56 | } 57 | 58 | .nav-input-container input { 59 | height: 100%; 60 | padding: 0.2rem; 61 | border: none; 62 | width: 100%; 63 | } 64 | 65 | .nav-input-container select:focus { 66 | outline: none; 67 | } 68 | 69 | .nav-btn { 70 | background-color: rgb(254, 189, 105); 71 | width: 3rem; 72 | border: none; 73 | border-radius: 0 0.2rem 0.2rem 0; 74 | height: 2.25rem; 75 | } 76 | 77 | .nav-btn img { 78 | width: 1.35rem; 79 | } 80 | 81 | .nav-cart-container { 82 | margin-left: 2rem; 83 | display: flex; 84 | color: white; 85 | } 86 | 87 | .nav-cart-container img { 88 | width: 2rem; 89 | } 90 | .nav-cart-container h2 { 91 | margin-top: 0.75rem; 92 | font-size: 1.25rem; 93 | margin-left: 0.25rem; 94 | } 95 | -------------------------------------------------------------------------------- /final/client/src/components/Nav/Nav.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import "./Nav.css"; 3 | import { Container } from "react-bootstrap" 4 | import search from '../../assets/svg/loupe.svg' 5 | import cart from '../../assets/svg/shopping-cart.svg' 6 | 7 | export default function Nav() { 8 | return ( 9 |
10 |
11 |

animazon.com

12 |
13 |

Deliver to Laith

14 |

432 Park Avenue

15 |
16 |
17 | 20 | 21 | 24 |
25 |
26 |

Hello, Laith

27 |

Account & Lists

28 |
29 |
30 |

Returns

31 |

& Orders

32 |
33 |
34 | 35 |

cart

36 |
37 |
38 |
39 | ) 40 | } 41 | -------------------------------------------------------------------------------- /final/client/src/index.css: -------------------------------------------------------------------------------- 1 | html { 2 | padding: 0; 3 | margin: 0; 4 | box-sizing: border-box; 5 | } 6 | 7 | -------------------------------------------------------------------------------- /final/client/src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import './index.css'; 4 | import App from './App'; 5 | import reportWebVitals from './reportWebVitals'; 6 | import "./index.css" 7 | 8 | ReactDOM.render( 9 | 10 | 11 | , 12 | document.getElementById('root') 13 | ); 14 | 15 | // If you want to start measuring performance in your app, pass a function 16 | // to log results (for example: reportWebVitals(console.log)) 17 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals 18 | reportWebVitals(); 19 | -------------------------------------------------------------------------------- /final/client/src/logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /final/client/src/pages/AnimalPage/AnimalPage.css: -------------------------------------------------------------------------------- 1 | .product-img { 2 | width: 40% 3 | } 4 | 5 | .text-container { 6 | width: 40%; 7 | } 8 | 9 | .text-container h1 { 10 | font-size: 1.25rem; 11 | line-height: 2rem; 12 | } 13 | 14 | .star-container img { 15 | width: 1rem 16 | } 17 | 18 | .star-container { 19 | display: flex; 20 | } 21 | 22 | .star-container p { 23 | color: rgb(33, 145, 193); 24 | margin-top: 1rem; 25 | margin-left: 0.5rem; 26 | } 27 | 28 | .about-container h4 { 29 | font-size: 1.15rem; 30 | font-weight: 700; 31 | } 32 | 33 | 34 | 35 | .cart-container { 36 | border-radius: 1rem; 37 | width: 20%; 38 | margin-left: 2rem; 39 | padding: 1rem 40 | } 41 | 42 | .cart-container button { 43 | width: 100%; 44 | border: none; 45 | background-color: #F2CB6A; 46 | padding: 0.35rem 0; 47 | font-size: 0.85rem; 48 | margin: 0.25rem 0 49 | } 50 | 51 | .price { 52 | color: rgb(141, 6, 6); 53 | 54 | } 55 | 56 | .delivery-time { 57 | padding-bottom: 4rem; 58 | } 59 | 60 | .buy-now-btn { 61 | margin-top: 1rem; 62 | } 63 | 64 | 65 | .rating-stock-container { 66 | width: 100%; 67 | display: flex; 68 | justify-content: space-between; 69 | } -------------------------------------------------------------------------------- /final/client/src/pages/AnimalPage/AnimalPage.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Container } from 'react-bootstrap' 3 | import animals from "../../assets/images" 4 | import star from "../../assets/svg/star.svg" 5 | import "./AnimalPage.css" 6 | import { useParams } from "react-router-dom" 7 | import { useQuery, gql } from "@apollo/client" 8 | 9 | const ANIMAL_QUERY = gql` 10 | query($slug: String!){ 11 | animal(slug: $slug) { 12 | title 13 | image 14 | stock 15 | description 16 | price 17 | } 18 | } 19 | ` 20 | 21 | function AnimalPage() { 22 | 23 | const { slug } = useParams(); 24 | 25 | const { data, loading, error } = useQuery(ANIMAL_QUERY, { 26 | variables: { 27 | slug 28 | } 29 | }) 30 | 31 | if(loading) return
loading...
32 | 33 | if(error) return
error...
34 | console.log(data) 35 | 36 | return ( 37 |
38 | 39 |
40 | 41 |
42 |

{data.animal.title}

43 |
44 | 45 | 46 | 47 | 48 | 49 |
50 |

1402 rating

51 |

{data.animal.stock} in stock

52 |
53 | 54 |
55 |
56 |

About this Animal

57 | {data.animal.description.map(description => { 58 | return
  • {description}
  • 59 | })} 60 |
    61 |
    62 |
    63 |

    CAD$ {data.animal.price}

    64 |

    FREE delivery: Thursday, Feb 25 Details 65 | 68 | 71 |

    72 |
    73 |
    74 |
    75 |
    76 | ) 77 | } 78 | 79 | export default AnimalPage 80 | -------------------------------------------------------------------------------- /final/client/src/pages/CategoryPage.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { useParams } from "react-router-dom" 3 | import { Container } from 'react-bootstrap' 4 | import CardDisplay from '../components/CardDisplay/CardDisplay' 5 | import { useQuery, gql } from "@apollo/client" 6 | 7 | const CATEGORY_QUERY = gql` 8 | query($slug: String!){ 9 | category(slug: $slug) { 10 | id 11 | category 12 | slug 13 | animals { 14 | id 15 | title 16 | price 17 | image 18 | } 19 | } 20 | } 21 | ` 22 | 23 | function CategoryPage() { 24 | 25 | const { slug } = useParams(); 26 | 27 | const {error, data, loading } = useQuery(CATEGORY_QUERY, { 28 | variables: { 29 | slug 30 | } 31 | }) 32 | 33 | if(loading) return
    Loading...
    ; 34 | 35 | if(error) return
    Error....
    36 | 37 | console.log(data) 38 | 39 | return ( 40 |
    41 | 42 |

    43 | {data.category.category} 44 | 47 |

    48 |
    49 |
    50 | ) 51 | } 52 | 53 | export default CategoryPage 54 | -------------------------------------------------------------------------------- /final/client/src/pages/LandingPage.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import MainHero from "../components/MainHero/MainHero" 3 | import CategoryDisplay from "../components/CategoryDisplay/CategoryDisplay" 4 | import CardDisplay from "../components/CardDisplay/CardDisplay" 5 | import { useQuery, useMutation, gql } from "@apollo/client" 6 | 7 | const ANIMALS_QUERY = gql` 8 | { 9 | animals { 10 | image 11 | id 12 | title 13 | price 14 | slug 15 | image 16 | } 17 | } 18 | ` 19 | 20 | const ADD_ANIMAL_MUTATION = gql` 21 | mutation( 22 | $image: String!, 23 | $category: String!, 24 | $title: String!, 25 | $stock: Int!, 26 | $price: String!, 27 | $description: [String!]! 28 | $rating: Float 29 | $slug: String! 30 | ) { 31 | addAnimal( 32 | image: $image, 33 | category: $category, 34 | title: $title, 35 | stock: $stock, 36 | price: $price, 37 | description: $description, 38 | rating: $rating, 39 | slug: $slug, 40 | ) { 41 | id 42 | } 43 | } 44 | ` 45 | 46 | function LandingPage() { 47 | 48 | const { loading, error, data } = useQuery(ANIMALS_QUERY); 49 | const [addAnimal] = useMutation(ADD_ANIMAL_MUTATION) 50 | 51 | if(loading) return
    Loading...
    ; 52 | 53 | if(error) return
    Error....
    54 | 55 | return ( 56 |
    57 | 58 | 59 | 60 | 74 |
    75 | ) 76 | } 77 | 78 | export default LandingPage 79 | -------------------------------------------------------------------------------- /final/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 | -------------------------------------------------------------------------------- /final/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 | -------------------------------------------------------------------------------- /final/server/db.js: -------------------------------------------------------------------------------- 1 | const mainCards = [ 2 | { 3 | title: "Recently Viewed", 4 | image: "lion", 5 | }, 6 | { 7 | title: 'Looking for a Gift?', 8 | image: 'penguin', 9 | }, 10 | { 11 | title: 'Best Behaved', 12 | image: 'cat', 13 | }, 14 | ]; 15 | 16 | const animals = [ 17 | { 18 | id: "1", 19 | image: "lion", 20 | title: "7-year Male Lion with Large Well Kept Main with a Beautiful Yellow/Brownish Color", 21 | rating: 5.0, 22 | price: "23,322", 23 | description: [ 24 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", 25 | "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.", 26 | "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", 27 | "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 28 | ], 29 | stock: 14, 30 | onSale: false, 31 | slug: "lion", 32 | category: "1" 33 | }, 34 | { 35 | id: "2", 36 | image: "cham", 37 | title: "Beautiful Highly Specialized Clade Lizard with 202 Different Color Combinations", 38 | price: "1,522", 39 | description: [ 40 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", 41 | "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.", 42 | "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", 43 | "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 44 | ], 45 | stock: 14, 46 | onSale: false, 47 | slug: "chameleons", 48 | category: "2" 49 | }, 50 | { 51 | id: "3", 52 | image: "dolphin", 53 | title: "Fast and Swift Aquatic Dolphin with Great Accordatic Skills in the Air", 54 | price: "101,432", 55 | description: [ 56 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", 57 | "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.", 58 | "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", 59 | "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 60 | ], 61 | stock: 14, 62 | onSale: false, 63 | slug: "dolphin", 64 | category: "3" 65 | }, 66 | { 67 | id: "4", 68 | image: "gorilla", 69 | title: "Black Haired Gorilla with Broad Chest and Shoulder. Would be an Excellent Spot at the Gym", 70 | price: "47,775", 71 | description: [ 72 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", 73 | "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.", 74 | "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", 75 | "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 76 | ], 77 | stock: 14, 78 | onSale: false, 79 | slug: "gorilla", 80 | category: "4" 81 | }, 82 | { 83 | id: "5", 84 | image: "horse", 85 | title: "17-year Female Horse with a Luxury Brown Exterior and a Beautiful Red Interior", 86 | price: "13,432", 87 | description: [ 88 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", 89 | "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.", 90 | "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", 91 | "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 92 | ], 93 | stock: 14, 94 | onSale: false, 95 | slug: "horse", 96 | category: "4" 97 | }, 98 | { 99 | id: "6", 100 | image: "kang", 101 | title: "Large Kangaroo with Muscular Leg and Tail and Pointly Teeth and Ears", 102 | price: "42,453", 103 | description: [ 104 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", 105 | "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.", 106 | "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", 107 | "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 108 | ], 109 | stock: 14, 110 | onSale: false, 111 | slug: "kangaroo", 112 | category: "4" 113 | }, 114 | { 115 | id: "7", 116 | image: "ele", 117 | title: "Grey Male 17 year Elephant with 12 Meter Truck and 5 Meter Tusk", 118 | price: "101,432", 119 | description: [ 120 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", 121 | "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.", 122 | "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", 123 | "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 124 | ], 125 | stock: 14, 126 | onSale: false, 127 | slug: "elephant", 128 | category: "4" 129 | }, 130 | { 131 | id: "8", 132 | image: "donkey", 133 | title: "This is the Voice Actor from the Dockey for Shrek.", 134 | price: "179,731", 135 | description: [ 136 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", 137 | "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.", 138 | "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", 139 | "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 140 | ], 141 | stock: 14, 142 | onSale: false, 143 | slug: "donkey", 144 | category: "4" 145 | } 146 | ] 147 | 148 | const categories = [ 149 | { 150 | id: "1", 151 | image: "tiger", 152 | category: "cats", 153 | slug: "cats" 154 | }, 155 | { 156 | id: "2", 157 | image: "snake", 158 | category: "reptiles", 159 | slug: "reptiles" 160 | }, 161 | { 162 | id: "3", 163 | image: "stingray", 164 | category: "ocean creatures", 165 | slug: "ocean-creatures" 166 | }, 167 | { 168 | id: "4", 169 | image: "donkey", 170 | category: "mammals", 171 | slug: "mammals" 172 | } 173 | ] 174 | 175 | module.exports = { 176 | mainCards, 177 | animals, 178 | categories 179 | } -------------------------------------------------------------------------------- /final/server/index.js: -------------------------------------------------------------------------------- 1 | const { ApolloServer } = require('apollo-server'); 2 | const { mainCards, animals, categories } = require('./db') 3 | const typeDefs = require('./schema') 4 | const Query = require("./resolvers/Query") 5 | const Mutation = require("./resolvers/Mutation") 6 | const Animal = require("./resolvers/Animal") 7 | const Category = require("./resolvers/Category") 8 | 9 | const server = new ApolloServer({ 10 | typeDefs, 11 | resolvers: { 12 | Query, 13 | Mutation, 14 | Animal, 15 | Category 16 | }, 17 | context: { 18 | mainCards, 19 | animals, 20 | categories 21 | } 22 | }); 23 | 24 | // The `listen` method launches a web server. 25 | server.listen().then(({ url }) => { 26 | console.log(`🚀 Server ready at ${url}`); 27 | }); -------------------------------------------------------------------------------- /final/server/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "server", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@apollo/protobufjs": { 8 | "version": "1.0.5", 9 | "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.0.5.tgz", 10 | "integrity": "sha512-ZtyaBH1icCgqwIGb3zrtopV2D5Q8yxibkJzlaViM08eOhTQc7rACdYu0pfORFfhllvdMZ3aq69vifYHszY4gNA==", 11 | "requires": { 12 | "@protobufjs/aspromise": "^1.1.2", 13 | "@protobufjs/base64": "^1.1.2", 14 | "@protobufjs/codegen": "^2.0.4", 15 | "@protobufjs/eventemitter": "^1.1.0", 16 | "@protobufjs/fetch": "^1.1.0", 17 | "@protobufjs/float": "^1.0.2", 18 | "@protobufjs/inquire": "^1.1.0", 19 | "@protobufjs/path": "^1.1.2", 20 | "@protobufjs/pool": "^1.1.0", 21 | "@protobufjs/utf8": "^1.1.0", 22 | "@types/long": "^4.0.0", 23 | "@types/node": "^10.1.0", 24 | "long": "^4.0.0" 25 | }, 26 | "dependencies": { 27 | "@types/node": { 28 | "version": "10.17.54", 29 | "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.54.tgz", 30 | "integrity": "sha512-c8Lm7+hXdSPmWH4B9z/P/xIXhFK3mCQin4yCYMd2p1qpMG5AfgyJuYZ+3q2dT7qLiMMMGMd5dnkFpdqJARlvtQ==" 31 | } 32 | } 33 | }, 34 | "@apollographql/apollo-tools": { 35 | "version": "0.4.9", 36 | "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.4.9.tgz", 37 | "integrity": "sha512-M50pk8oo3CGTu4waGOklIX3YtTZoPfWG9K/G9WB8NpyQGA1OwYTiBFv94XqUtKElTDoFwoMXpMQd3Wy5dINvxA==", 38 | "requires": { 39 | "apollo-env": "^0.6.6" 40 | } 41 | }, 42 | "@apollographql/graphql-playground-html": { 43 | "version": "1.6.26", 44 | "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.26.tgz", 45 | "integrity": "sha512-XAwXOIab51QyhBxnxySdK3nuMEUohhDsHQ5Rbco/V1vjlP75zZ0ZLHD9dTpXTN8uxKxopb2lUvJTq+M4g2Q0HQ==", 46 | "requires": { 47 | "xss": "^1.0.6" 48 | } 49 | }, 50 | "@apollographql/graphql-upload-8-fork": { 51 | "version": "8.1.3", 52 | "resolved": "https://registry.npmjs.org/@apollographql/graphql-upload-8-fork/-/graphql-upload-8-fork-8.1.3.tgz", 53 | "integrity": "sha512-ssOPUT7euLqDXcdVv3Qs4LoL4BPtfermW1IOouaqEmj36TpHYDmYDIbKoSQxikd9vtMumFnP87OybH7sC9fJ6g==", 54 | "requires": { 55 | "@types/express": "*", 56 | "@types/fs-capacitor": "*", 57 | "@types/koa": "*", 58 | "busboy": "^0.3.1", 59 | "fs-capacitor": "^2.0.4", 60 | "http-errors": "^1.7.3", 61 | "object-path": "^0.11.4" 62 | } 63 | }, 64 | "@protobufjs/aspromise": { 65 | "version": "1.1.2", 66 | "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", 67 | "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" 68 | }, 69 | "@protobufjs/base64": { 70 | "version": "1.1.2", 71 | "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", 72 | "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" 73 | }, 74 | "@protobufjs/codegen": { 75 | "version": "2.0.4", 76 | "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", 77 | "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" 78 | }, 79 | "@protobufjs/eventemitter": { 80 | "version": "1.1.0", 81 | "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", 82 | "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" 83 | }, 84 | "@protobufjs/fetch": { 85 | "version": "1.1.0", 86 | "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", 87 | "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", 88 | "requires": { 89 | "@protobufjs/aspromise": "^1.1.1", 90 | "@protobufjs/inquire": "^1.1.0" 91 | } 92 | }, 93 | "@protobufjs/float": { 94 | "version": "1.0.2", 95 | "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", 96 | "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" 97 | }, 98 | "@protobufjs/inquire": { 99 | "version": "1.1.0", 100 | "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", 101 | "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" 102 | }, 103 | "@protobufjs/path": { 104 | "version": "1.1.2", 105 | "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", 106 | "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" 107 | }, 108 | "@protobufjs/pool": { 109 | "version": "1.1.0", 110 | "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", 111 | "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" 112 | }, 113 | "@protobufjs/utf8": { 114 | "version": "1.1.0", 115 | "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", 116 | "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" 117 | }, 118 | "@types/accepts": { 119 | "version": "1.3.5", 120 | "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", 121 | "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", 122 | "requires": { 123 | "@types/node": "*" 124 | } 125 | }, 126 | "@types/body-parser": { 127 | "version": "1.19.0", 128 | "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz", 129 | "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", 130 | "requires": { 131 | "@types/connect": "*", 132 | "@types/node": "*" 133 | } 134 | }, 135 | "@types/connect": { 136 | "version": "3.4.34", 137 | "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz", 138 | "integrity": "sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==", 139 | "requires": { 140 | "@types/node": "*" 141 | } 142 | }, 143 | "@types/content-disposition": { 144 | "version": "0.5.3", 145 | "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.3.tgz", 146 | "integrity": "sha512-P1bffQfhD3O4LW0ioENXUhZ9OIa0Zn+P7M+pWgkCKaT53wVLSq0mrKksCID/FGHpFhRSxRGhgrQmfhRuzwtKdg==" 147 | }, 148 | "@types/cookies": { 149 | "version": "0.7.6", 150 | "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.6.tgz", 151 | "integrity": "sha512-FK4U5Qyn7/Sc5ih233OuHO0qAkOpEcD/eG6584yEiLKizTFRny86qHLe/rej3HFQrkBuUjF4whFliAdODbVN/w==", 152 | "requires": { 153 | "@types/connect": "*", 154 | "@types/express": "*", 155 | "@types/keygrip": "*", 156 | "@types/node": "*" 157 | } 158 | }, 159 | "@types/cors": { 160 | "version": "2.8.8", 161 | "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.8.tgz", 162 | "integrity": "sha512-fO3gf3DxU2Trcbr75O7obVndW/X5k8rJNZkLXlQWStTHhP71PkRqjwPIEI0yMnJdg9R9OasjU+Bsr+Hr1xy/0w==", 163 | "requires": { 164 | "@types/express": "*" 165 | } 166 | }, 167 | "@types/express": { 168 | "version": "4.17.11", 169 | "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.11.tgz", 170 | "integrity": "sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg==", 171 | "requires": { 172 | "@types/body-parser": "*", 173 | "@types/express-serve-static-core": "^4.17.18", 174 | "@types/qs": "*", 175 | "@types/serve-static": "*" 176 | } 177 | }, 178 | "@types/express-serve-static-core": { 179 | "version": "4.17.18", 180 | "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.18.tgz", 181 | "integrity": "sha512-m4JTwx5RUBNZvky/JJ8swEJPKFd8si08pPF2PfizYjGZOKr/svUWPcoUmLow6MmPzhasphB7gSTINY67xn3JNA==", 182 | "requires": { 183 | "@types/node": "*", 184 | "@types/qs": "*", 185 | "@types/range-parser": "*" 186 | } 187 | }, 188 | "@types/fs-capacitor": { 189 | "version": "2.0.0", 190 | "resolved": "https://registry.npmjs.org/@types/fs-capacitor/-/fs-capacitor-2.0.0.tgz", 191 | "integrity": "sha512-FKVPOCFbhCvZxpVAMhdBdTfVfXUpsh15wFHgqOKxh9N9vzWZVuWCSijZ5T4U34XYNnuj2oduh6xcs1i+LPI+BQ==", 192 | "requires": { 193 | "@types/node": "*" 194 | } 195 | }, 196 | "@types/http-assert": { 197 | "version": "1.5.1", 198 | "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.1.tgz", 199 | "integrity": "sha512-PGAK759pxyfXE78NbKxyfRcWYA/KwW17X290cNev/qAsn9eQIxkH4shoNBafH37wewhDG/0p1cHPbK6+SzZjWQ==" 200 | }, 201 | "@types/http-errors": { 202 | "version": "1.8.0", 203 | "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.0.tgz", 204 | "integrity": "sha512-2aoSC4UUbHDj2uCsCxcG/vRMXey/m17bC7UwitVm5hn22nI8O8Y9iDpA76Orc+DWkQ4zZrOKEshCqR/jSuXAHA==" 205 | }, 206 | "@types/keygrip": { 207 | "version": "1.0.2", 208 | "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz", 209 | "integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==" 210 | }, 211 | "@types/koa": { 212 | "version": "2.13.0", 213 | "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.13.0.tgz", 214 | "integrity": "sha512-hNs1Z2lX+R5sZroIy/WIGbPlH/719s/Nd5uIjSIAdHn9q+g7z6mxOnhwMjK1urE4/NUP0SOoYUOD4MnvD9FRNw==", 215 | "requires": { 216 | "@types/accepts": "*", 217 | "@types/content-disposition": "*", 218 | "@types/cookies": "*", 219 | "@types/http-assert": "*", 220 | "@types/http-errors": "*", 221 | "@types/keygrip": "*", 222 | "@types/koa-compose": "*", 223 | "@types/node": "*" 224 | } 225 | }, 226 | "@types/koa-compose": { 227 | "version": "3.2.5", 228 | "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz", 229 | "integrity": "sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==", 230 | "requires": { 231 | "@types/koa": "*" 232 | } 233 | }, 234 | "@types/long": { 235 | "version": "4.0.1", 236 | "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", 237 | "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" 238 | }, 239 | "@types/mime": { 240 | "version": "1.3.2", 241 | "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", 242 | "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" 243 | }, 244 | "@types/node": { 245 | "version": "14.14.31", 246 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz", 247 | "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==" 248 | }, 249 | "@types/node-fetch": { 250 | "version": "2.5.7", 251 | "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.7.tgz", 252 | "integrity": "sha512-o2WVNf5UhWRkxlf6eq+jMZDu7kjgpgJfl4xVNlvryc95O/6F2ld8ztKX+qu+Rjyet93WAWm5LjeX9H5FGkODvw==", 253 | "requires": { 254 | "@types/node": "*", 255 | "form-data": "^3.0.0" 256 | } 257 | }, 258 | "@types/qs": { 259 | "version": "6.9.5", 260 | "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.5.tgz", 261 | "integrity": "sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ==" 262 | }, 263 | "@types/range-parser": { 264 | "version": "1.2.3", 265 | "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", 266 | "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" 267 | }, 268 | "@types/serve-static": { 269 | "version": "1.13.9", 270 | "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz", 271 | "integrity": "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==", 272 | "requires": { 273 | "@types/mime": "^1", 274 | "@types/node": "*" 275 | } 276 | }, 277 | "@types/ws": { 278 | "version": "7.4.0", 279 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.0.tgz", 280 | "integrity": "sha512-Y29uQ3Uy+58bZrFLhX36hcI3Np37nqWE7ky5tjiDoy1GDZnIwVxS0CgF+s+1bXMzjKBFy+fqaRfb708iNzdinw==", 281 | "requires": { 282 | "@types/node": "*" 283 | } 284 | }, 285 | "@wry/equality": { 286 | "version": "0.1.11", 287 | "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.1.11.tgz", 288 | "integrity": "sha512-mwEVBDUVODlsQQ5dfuLUS5/Tf7jqUKyhKYHmVi4fPB6bDMOfWvUPJmKgS1Z7Za/sOI3vzWt4+O7yCiL/70MogA==", 289 | "requires": { 290 | "tslib": "^1.9.3" 291 | } 292 | }, 293 | "accepts": { 294 | "version": "1.3.7", 295 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 296 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", 297 | "requires": { 298 | "mime-types": "~2.1.24", 299 | "negotiator": "0.6.2" 300 | } 301 | }, 302 | "apollo-cache-control": { 303 | "version": "0.11.6", 304 | "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.11.6.tgz", 305 | "integrity": "sha512-YZ+uuIG+fPy+mkpBS2qKF0v1qlzZ3PW6xZVaDukeK3ed3iAs4L/2YnkTqau3OmoF/VPzX2FmSkocX/OVd59YSw==", 306 | "requires": { 307 | "apollo-server-env": "^3.0.0", 308 | "apollo-server-plugin-base": "^0.10.4" 309 | } 310 | }, 311 | "apollo-datasource": { 312 | "version": "0.7.3", 313 | "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.7.3.tgz", 314 | "integrity": "sha512-PE0ucdZYjHjUyXrFWRwT02yLcx2DACsZ0jm1Mp/0m/I9nZu/fEkvJxfsryXB6JndpmQO77gQHixf/xGCN976kA==", 315 | "requires": { 316 | "apollo-server-caching": "^0.5.3", 317 | "apollo-server-env": "^3.0.0" 318 | } 319 | }, 320 | "apollo-env": { 321 | "version": "0.6.6", 322 | "resolved": "https://registry.npmjs.org/apollo-env/-/apollo-env-0.6.6.tgz", 323 | "integrity": "sha512-hXI9PjJtzmD34XviBU+4sPMOxnifYrHVmxpjykqI/dUD2G3yTiuRaiQqwRwB2RCdwC1Ug/jBfoQ/NHDTnnjndQ==", 324 | "requires": { 325 | "@types/node-fetch": "2.5.7", 326 | "core-js": "^3.0.1", 327 | "node-fetch": "^2.2.0", 328 | "sha.js": "^2.4.11" 329 | } 330 | }, 331 | "apollo-graphql": { 332 | "version": "0.6.1", 333 | "resolved": "https://registry.npmjs.org/apollo-graphql/-/apollo-graphql-0.6.1.tgz", 334 | "integrity": "sha512-ZRXAV+k+hboCVS+FW86FW/QgnDR7gm/xMUwJPGXEbV53OLGuQQdIT0NCYK7AzzVkCfsbb7NJ3mmEclkZY9uuxQ==", 335 | "requires": { 336 | "apollo-env": "^0.6.6", 337 | "lodash.sortby": "^4.7.0" 338 | } 339 | }, 340 | "apollo-link": { 341 | "version": "1.2.14", 342 | "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.14.tgz", 343 | "integrity": "sha512-p67CMEFP7kOG1JZ0ZkYZwRDa369w5PIjtMjvrQd/HnIV8FRsHRqLqK+oAZQnFa1DDdZtOtHTi+aMIW6EatC2jg==", 344 | "requires": { 345 | "apollo-utilities": "^1.3.0", 346 | "ts-invariant": "^0.4.0", 347 | "tslib": "^1.9.3", 348 | "zen-observable-ts": "^0.8.21" 349 | } 350 | }, 351 | "apollo-reporting-protobuf": { 352 | "version": "0.6.2", 353 | "resolved": "https://registry.npmjs.org/apollo-reporting-protobuf/-/apollo-reporting-protobuf-0.6.2.tgz", 354 | "integrity": "sha512-WJTJxLM+MRHNUxt1RTl4zD0HrLdH44F2mDzMweBj1yHL0kSt8I1WwoiF/wiGVSpnG48LZrBegCaOJeuVbJTbtw==", 355 | "requires": { 356 | "@apollo/protobufjs": "^1.0.3" 357 | } 358 | }, 359 | "apollo-server": { 360 | "version": "2.21.0", 361 | "resolved": "https://registry.npmjs.org/apollo-server/-/apollo-server-2.21.0.tgz", 362 | "integrity": "sha512-OqngjOSB0MEH6VKGWHcrqt4y39HlhYh9CrMvn4PhadTt53IPYRmBglk5qSRA8xMorGqy60iKrOReqj5YfCjTOg==", 363 | "requires": { 364 | "apollo-server-core": "^2.21.0", 365 | "apollo-server-express": "^2.21.0", 366 | "express": "^4.0.0", 367 | "graphql-subscriptions": "^1.0.0", 368 | "graphql-tools": "^4.0.8", 369 | "stoppable": "^1.1.0" 370 | } 371 | }, 372 | "apollo-server-caching": { 373 | "version": "0.5.3", 374 | "resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.5.3.tgz", 375 | "integrity": "sha512-iMi3087iphDAI0U2iSBE9qtx9kQoMMEWr6w+LwXruBD95ek9DWyj7OeC2U/ngLjRsXM43DoBDXlu7R+uMjahrQ==", 376 | "requires": { 377 | "lru-cache": "^6.0.0" 378 | } 379 | }, 380 | "apollo-server-core": { 381 | "version": "2.21.0", 382 | "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.21.0.tgz", 383 | "integrity": "sha512-GtIiq2F0dVDLzzIuO5+dK/pGq/sGxYlKCqAuQQqzYg0fvZ7fukyluXtcTe0tMI+FJZjU0j0WnKgiLsboCoAlPQ==", 384 | "requires": { 385 | "@apollographql/apollo-tools": "^0.4.3", 386 | "@apollographql/graphql-playground-html": "1.6.26", 387 | "@apollographql/graphql-upload-8-fork": "^8.1.3", 388 | "@types/ws": "^7.0.0", 389 | "apollo-cache-control": "^0.11.6", 390 | "apollo-datasource": "^0.7.3", 391 | "apollo-graphql": "^0.6.0", 392 | "apollo-reporting-protobuf": "^0.6.2", 393 | "apollo-server-caching": "^0.5.3", 394 | "apollo-server-env": "^3.0.0", 395 | "apollo-server-errors": "^2.4.2", 396 | "apollo-server-plugin-base": "^0.10.4", 397 | "apollo-server-types": "^0.6.3", 398 | "apollo-tracing": "^0.12.2", 399 | "async-retry": "^1.2.1", 400 | "fast-json-stable-stringify": "^2.0.0", 401 | "graphql-extensions": "^0.12.8", 402 | "graphql-tag": "^2.11.0", 403 | "graphql-tools": "^4.0.8", 404 | "loglevel": "^1.6.7", 405 | "lru-cache": "^6.0.0", 406 | "sha.js": "^2.4.11", 407 | "subscriptions-transport-ws": "^0.9.11", 408 | "uuid": "^8.0.0", 409 | "ws": "^6.0.0" 410 | } 411 | }, 412 | "apollo-server-env": { 413 | "version": "3.0.0", 414 | "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-3.0.0.tgz", 415 | "integrity": "sha512-tPSN+VttnPsoQAl/SBVUpGbLA97MXG990XIwq6YUnJyAixrrsjW1xYG7RlaOqetxm80y5mBZKLrRDiiSsW/vog==", 416 | "requires": { 417 | "node-fetch": "^2.1.2", 418 | "util.promisify": "^1.0.0" 419 | } 420 | }, 421 | "apollo-server-errors": { 422 | "version": "2.4.2", 423 | "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.4.2.tgz", 424 | "integrity": "sha512-FeGxW3Batn6sUtX3OVVUm7o56EgjxDlmgpTLNyWcLb0j6P8mw9oLNyAm3B+deHA4KNdNHO5BmHS2g1SJYjqPCQ==" 425 | }, 426 | "apollo-server-express": { 427 | "version": "2.21.0", 428 | "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.21.0.tgz", 429 | "integrity": "sha512-zbOSNGuxUjlOFZnRrbMpga3pKDEroitF4NAqoVxgBivx7v2hGsE7rljct3PucTx2cMN90AyYe3cU4oA8jBxZIQ==", 430 | "requires": { 431 | "@apollographql/graphql-playground-html": "1.6.26", 432 | "@types/accepts": "^1.3.5", 433 | "@types/body-parser": "1.19.0", 434 | "@types/cors": "2.8.8", 435 | "@types/express": "4.17.7", 436 | "@types/express-serve-static-core": "4.17.18", 437 | "accepts": "^1.3.5", 438 | "apollo-server-core": "^2.21.0", 439 | "apollo-server-types": "^0.6.3", 440 | "body-parser": "^1.18.3", 441 | "cors": "^2.8.4", 442 | "express": "^4.17.1", 443 | "graphql-subscriptions": "^1.0.0", 444 | "graphql-tools": "^4.0.8", 445 | "parseurl": "^1.3.2", 446 | "subscriptions-transport-ws": "^0.9.16", 447 | "type-is": "^1.6.16" 448 | }, 449 | "dependencies": { 450 | "@types/express": { 451 | "version": "4.17.7", 452 | "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.7.tgz", 453 | "integrity": "sha512-dCOT5lcmV/uC2J9k0rPafATeeyz+99xTt54ReX11/LObZgfzJqZNcW27zGhYyX+9iSEGXGt5qLPwRSvBZcLvtQ==", 454 | "requires": { 455 | "@types/body-parser": "*", 456 | "@types/express-serve-static-core": "*", 457 | "@types/qs": "*", 458 | "@types/serve-static": "*" 459 | } 460 | } 461 | } 462 | }, 463 | "apollo-server-plugin-base": { 464 | "version": "0.10.4", 465 | "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.10.4.tgz", 466 | "integrity": "sha512-HRhbyHgHFTLP0ImubQObYhSgpmVH4Rk1BinnceZmwudIVLKrqayIVOELdyext/QnSmmzg5W7vF3NLGBcVGMqDg==", 467 | "requires": { 468 | "apollo-server-types": "^0.6.3" 469 | } 470 | }, 471 | "apollo-server-types": { 472 | "version": "0.6.3", 473 | "resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-0.6.3.tgz", 474 | "integrity": "sha512-aVR7SlSGGY41E1f11YYz5bvwA89uGmkVUtzMiklDhZ7IgRJhysT5Dflt5IuwDxp+NdQkIhVCErUXakopocFLAg==", 475 | "requires": { 476 | "apollo-reporting-protobuf": "^0.6.2", 477 | "apollo-server-caching": "^0.5.3", 478 | "apollo-server-env": "^3.0.0" 479 | } 480 | }, 481 | "apollo-tracing": { 482 | "version": "0.12.2", 483 | "resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.12.2.tgz", 484 | "integrity": "sha512-SYN4o0C0wR1fyS3+P0FthyvsQVHFopdmN3IU64IaspR/RZScPxZ3Ae8uu++fTvkQflAkglnFM0aX6DkZERBp6w==", 485 | "requires": { 486 | "apollo-server-env": "^3.0.0", 487 | "apollo-server-plugin-base": "^0.10.4" 488 | } 489 | }, 490 | "apollo-utilities": { 491 | "version": "1.3.4", 492 | "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.3.4.tgz", 493 | "integrity": "sha512-pk2hiWrCXMAy2fRPwEyhvka+mqwzeP60Jr1tRYi5xru+3ko94HI9o6lK0CT33/w4RDlxWchmdhDCrvdr+pHCig==", 494 | "requires": { 495 | "@wry/equality": "^0.1.2", 496 | "fast-json-stable-stringify": "^2.0.0", 497 | "ts-invariant": "^0.4.0", 498 | "tslib": "^1.10.0" 499 | } 500 | }, 501 | "array-flatten": { 502 | "version": "1.1.1", 503 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 504 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 505 | }, 506 | "async-limiter": { 507 | "version": "1.0.1", 508 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", 509 | "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" 510 | }, 511 | "async-retry": { 512 | "version": "1.3.1", 513 | "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.1.tgz", 514 | "integrity": "sha512-aiieFW/7h3hY0Bq5d+ktDBejxuwR78vRu9hDUdR8rNhSaQ29VzPL4AoIRG7D/c7tdenwOcKvgPM6tIxB3cB6HA==", 515 | "requires": { 516 | "retry": "0.12.0" 517 | } 518 | }, 519 | "asynckit": { 520 | "version": "0.4.0", 521 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 522 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 523 | }, 524 | "backo2": { 525 | "version": "1.0.2", 526 | "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", 527 | "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" 528 | }, 529 | "body-parser": { 530 | "version": "1.19.0", 531 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", 532 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", 533 | "requires": { 534 | "bytes": "3.1.0", 535 | "content-type": "~1.0.4", 536 | "debug": "2.6.9", 537 | "depd": "~1.1.2", 538 | "http-errors": "1.7.2", 539 | "iconv-lite": "0.4.24", 540 | "on-finished": "~2.3.0", 541 | "qs": "6.7.0", 542 | "raw-body": "2.4.0", 543 | "type-is": "~1.6.17" 544 | }, 545 | "dependencies": { 546 | "http-errors": { 547 | "version": "1.7.2", 548 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", 549 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", 550 | "requires": { 551 | "depd": "~1.1.2", 552 | "inherits": "2.0.3", 553 | "setprototypeof": "1.1.1", 554 | "statuses": ">= 1.5.0 < 2", 555 | "toidentifier": "1.0.0" 556 | } 557 | }, 558 | "inherits": { 559 | "version": "2.0.3", 560 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 561 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 562 | }, 563 | "setprototypeof": { 564 | "version": "1.1.1", 565 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 566 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 567 | } 568 | } 569 | }, 570 | "busboy": { 571 | "version": "0.3.1", 572 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz", 573 | "integrity": "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==", 574 | "requires": { 575 | "dicer": "0.3.0" 576 | } 577 | }, 578 | "bytes": { 579 | "version": "3.1.0", 580 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", 581 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" 582 | }, 583 | "call-bind": { 584 | "version": "1.0.2", 585 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 586 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 587 | "requires": { 588 | "function-bind": "^1.1.1", 589 | "get-intrinsic": "^1.0.2" 590 | } 591 | }, 592 | "combined-stream": { 593 | "version": "1.0.8", 594 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 595 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 596 | "requires": { 597 | "delayed-stream": "~1.0.0" 598 | } 599 | }, 600 | "commander": { 601 | "version": "2.20.3", 602 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 603 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" 604 | }, 605 | "content-disposition": { 606 | "version": "0.5.3", 607 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", 608 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", 609 | "requires": { 610 | "safe-buffer": "5.1.2" 611 | }, 612 | "dependencies": { 613 | "safe-buffer": { 614 | "version": "5.1.2", 615 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 616 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 617 | } 618 | } 619 | }, 620 | "content-type": { 621 | "version": "1.0.4", 622 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 623 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 624 | }, 625 | "cookie": { 626 | "version": "0.4.0", 627 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", 628 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" 629 | }, 630 | "cookie-signature": { 631 | "version": "1.0.6", 632 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 633 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 634 | }, 635 | "core-js": { 636 | "version": "3.9.0", 637 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.9.0.tgz", 638 | "integrity": "sha512-PyFBJaLq93FlyYdsndE5VaueA9K5cNB7CGzeCj191YYLhkQM0gdZR2SKihM70oF0wdqKSKClv/tEBOpoRmdOVQ==" 639 | }, 640 | "cors": { 641 | "version": "2.8.5", 642 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", 643 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 644 | "requires": { 645 | "object-assign": "^4", 646 | "vary": "^1" 647 | } 648 | }, 649 | "cssfilter": { 650 | "version": "0.0.10", 651 | "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", 652 | "integrity": "sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4=" 653 | }, 654 | "debug": { 655 | "version": "2.6.9", 656 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 657 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 658 | "requires": { 659 | "ms": "2.0.0" 660 | } 661 | }, 662 | "define-properties": { 663 | "version": "1.1.3", 664 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 665 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 666 | "requires": { 667 | "object-keys": "^1.0.12" 668 | } 669 | }, 670 | "delayed-stream": { 671 | "version": "1.0.0", 672 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 673 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 674 | }, 675 | "depd": { 676 | "version": "1.1.2", 677 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 678 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 679 | }, 680 | "deprecated-decorator": { 681 | "version": "0.1.6", 682 | "resolved": "https://registry.npmjs.org/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz", 683 | "integrity": "sha1-AJZjF7ehL+kvPMgx91g68ym4bDc=" 684 | }, 685 | "destroy": { 686 | "version": "1.0.4", 687 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 688 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 689 | }, 690 | "dicer": { 691 | "version": "0.3.0", 692 | "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz", 693 | "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==", 694 | "requires": { 695 | "streamsearch": "0.1.2" 696 | } 697 | }, 698 | "ee-first": { 699 | "version": "1.1.1", 700 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 701 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 702 | }, 703 | "encodeurl": { 704 | "version": "1.0.2", 705 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 706 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 707 | }, 708 | "es-abstract": { 709 | "version": "1.18.0-next.2", 710 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", 711 | "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", 712 | "requires": { 713 | "call-bind": "^1.0.2", 714 | "es-to-primitive": "^1.2.1", 715 | "function-bind": "^1.1.1", 716 | "get-intrinsic": "^1.0.2", 717 | "has": "^1.0.3", 718 | "has-symbols": "^1.0.1", 719 | "is-callable": "^1.2.2", 720 | "is-negative-zero": "^2.0.1", 721 | "is-regex": "^1.1.1", 722 | "object-inspect": "^1.9.0", 723 | "object-keys": "^1.1.1", 724 | "object.assign": "^4.1.2", 725 | "string.prototype.trimend": "^1.0.3", 726 | "string.prototype.trimstart": "^1.0.3" 727 | } 728 | }, 729 | "es-to-primitive": { 730 | "version": "1.2.1", 731 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 732 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 733 | "requires": { 734 | "is-callable": "^1.1.4", 735 | "is-date-object": "^1.0.1", 736 | "is-symbol": "^1.0.2" 737 | } 738 | }, 739 | "escape-html": { 740 | "version": "1.0.3", 741 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 742 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 743 | }, 744 | "etag": { 745 | "version": "1.8.1", 746 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 747 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 748 | }, 749 | "eventemitter3": { 750 | "version": "3.1.2", 751 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", 752 | "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" 753 | }, 754 | "express": { 755 | "version": "4.17.1", 756 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", 757 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", 758 | "requires": { 759 | "accepts": "~1.3.7", 760 | "array-flatten": "1.1.1", 761 | "body-parser": "1.19.0", 762 | "content-disposition": "0.5.3", 763 | "content-type": "~1.0.4", 764 | "cookie": "0.4.0", 765 | "cookie-signature": "1.0.6", 766 | "debug": "2.6.9", 767 | "depd": "~1.1.2", 768 | "encodeurl": "~1.0.2", 769 | "escape-html": "~1.0.3", 770 | "etag": "~1.8.1", 771 | "finalhandler": "~1.1.2", 772 | "fresh": "0.5.2", 773 | "merge-descriptors": "1.0.1", 774 | "methods": "~1.1.2", 775 | "on-finished": "~2.3.0", 776 | "parseurl": "~1.3.3", 777 | "path-to-regexp": "0.1.7", 778 | "proxy-addr": "~2.0.5", 779 | "qs": "6.7.0", 780 | "range-parser": "~1.2.1", 781 | "safe-buffer": "5.1.2", 782 | "send": "0.17.1", 783 | "serve-static": "1.14.1", 784 | "setprototypeof": "1.1.1", 785 | "statuses": "~1.5.0", 786 | "type-is": "~1.6.18", 787 | "utils-merge": "1.0.1", 788 | "vary": "~1.1.2" 789 | }, 790 | "dependencies": { 791 | "safe-buffer": { 792 | "version": "5.1.2", 793 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 794 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 795 | }, 796 | "setprototypeof": { 797 | "version": "1.1.1", 798 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 799 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 800 | } 801 | } 802 | }, 803 | "fast-json-stable-stringify": { 804 | "version": "2.1.0", 805 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 806 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" 807 | }, 808 | "finalhandler": { 809 | "version": "1.1.2", 810 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", 811 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", 812 | "requires": { 813 | "debug": "2.6.9", 814 | "encodeurl": "~1.0.2", 815 | "escape-html": "~1.0.3", 816 | "on-finished": "~2.3.0", 817 | "parseurl": "~1.3.3", 818 | "statuses": "~1.5.0", 819 | "unpipe": "~1.0.0" 820 | } 821 | }, 822 | "for-each": { 823 | "version": "0.3.3", 824 | "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", 825 | "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", 826 | "requires": { 827 | "is-callable": "^1.1.3" 828 | } 829 | }, 830 | "form-data": { 831 | "version": "3.0.1", 832 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", 833 | "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", 834 | "requires": { 835 | "asynckit": "^0.4.0", 836 | "combined-stream": "^1.0.8", 837 | "mime-types": "^2.1.12" 838 | } 839 | }, 840 | "forwarded": { 841 | "version": "0.1.2", 842 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 843 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 844 | }, 845 | "fresh": { 846 | "version": "0.5.2", 847 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 848 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 849 | }, 850 | "fs-capacitor": { 851 | "version": "2.0.4", 852 | "resolved": "https://registry.npmjs.org/fs-capacitor/-/fs-capacitor-2.0.4.tgz", 853 | "integrity": "sha512-8S4f4WsCryNw2mJJchi46YgB6CR5Ze+4L1h8ewl9tEpL4SJ3ZO+c/bS4BWhB8bK+O3TMqhuZarTitd0S0eh2pA==" 854 | }, 855 | "function-bind": { 856 | "version": "1.1.1", 857 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 858 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 859 | }, 860 | "get-intrinsic": { 861 | "version": "1.1.1", 862 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 863 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 864 | "requires": { 865 | "function-bind": "^1.1.1", 866 | "has": "^1.0.3", 867 | "has-symbols": "^1.0.1" 868 | } 869 | }, 870 | "graphql": { 871 | "version": "15.5.0", 872 | "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.5.0.tgz", 873 | "integrity": "sha512-OmaM7y0kaK31NKG31q4YbD2beNYa6jBBKtMFT6gLYJljHLJr42IqJ8KX08u3Li/0ifzTU5HjmoOOrwa5BRLeDA==" 874 | }, 875 | "graphql-extensions": { 876 | "version": "0.12.8", 877 | "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.12.8.tgz", 878 | "integrity": "sha512-xjsSaB6yKt9jarFNNdivl2VOx52WySYhxPgf8Y16g6GKZyAzBoIFiwyGw5PJDlOSUa6cpmzn6o7z8fVMbSAbkg==", 879 | "requires": { 880 | "@apollographql/apollo-tools": "^0.4.3", 881 | "apollo-server-env": "^3.0.0", 882 | "apollo-server-types": "^0.6.3" 883 | } 884 | }, 885 | "graphql-subscriptions": { 886 | "version": "1.2.0", 887 | "resolved": "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-1.2.0.tgz", 888 | "integrity": "sha512-uXvp729fztqwa7HFUFaAqKwNMwwOfsvu4HwOu7/35Cd44bNrMPCn97mNGN0ybuuZE36CPXBTaW/4U/xyOS4D9w==", 889 | "requires": { 890 | "iterall": "^1.3.0" 891 | } 892 | }, 893 | "graphql-tag": { 894 | "version": "2.11.0", 895 | "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.11.0.tgz", 896 | "integrity": "sha512-VmsD5pJqWJnQZMUeRwrDhfgoyqcfwEkvtpANqcoUG8/tOLkwNgU9mzub/Mc78OJMhHjx7gfAMTxzdG43VGg3bA==" 897 | }, 898 | "graphql-tools": { 899 | "version": "4.0.8", 900 | "resolved": "https://registry.npmjs.org/graphql-tools/-/graphql-tools-4.0.8.tgz", 901 | "integrity": "sha512-MW+ioleBrwhRjalKjYaLQbr+920pHBgy9vM/n47sswtns8+96sRn5M/G+J1eu7IMeKWiN/9p6tmwCHU7552VJg==", 902 | "requires": { 903 | "apollo-link": "^1.2.14", 904 | "apollo-utilities": "^1.0.1", 905 | "deprecated-decorator": "^0.1.6", 906 | "iterall": "^1.1.3", 907 | "uuid": "^3.1.0" 908 | }, 909 | "dependencies": { 910 | "uuid": { 911 | "version": "3.4.0", 912 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 913 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" 914 | } 915 | } 916 | }, 917 | "has": { 918 | "version": "1.0.3", 919 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 920 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 921 | "requires": { 922 | "function-bind": "^1.1.1" 923 | } 924 | }, 925 | "has-symbols": { 926 | "version": "1.0.1", 927 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", 928 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" 929 | }, 930 | "http-errors": { 931 | "version": "1.8.0", 932 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz", 933 | "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==", 934 | "requires": { 935 | "depd": "~1.1.2", 936 | "inherits": "2.0.4", 937 | "setprototypeof": "1.2.0", 938 | "statuses": ">= 1.5.0 < 2", 939 | "toidentifier": "1.0.0" 940 | } 941 | }, 942 | "iconv-lite": { 943 | "version": "0.4.24", 944 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 945 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 946 | "requires": { 947 | "safer-buffer": ">= 2.1.2 < 3" 948 | } 949 | }, 950 | "inherits": { 951 | "version": "2.0.4", 952 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 953 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 954 | }, 955 | "ipaddr.js": { 956 | "version": "1.9.1", 957 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 958 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 959 | }, 960 | "is-callable": { 961 | "version": "1.2.3", 962 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", 963 | "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" 964 | }, 965 | "is-date-object": { 966 | "version": "1.0.2", 967 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", 968 | "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" 969 | }, 970 | "is-negative-zero": { 971 | "version": "2.0.1", 972 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", 973 | "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" 974 | }, 975 | "is-regex": { 976 | "version": "1.1.2", 977 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", 978 | "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", 979 | "requires": { 980 | "call-bind": "^1.0.2", 981 | "has-symbols": "^1.0.1" 982 | } 983 | }, 984 | "is-symbol": { 985 | "version": "1.0.3", 986 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", 987 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", 988 | "requires": { 989 | "has-symbols": "^1.0.1" 990 | } 991 | }, 992 | "iterall": { 993 | "version": "1.3.0", 994 | "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.3.0.tgz", 995 | "integrity": "sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==" 996 | }, 997 | "lodash.sortby": { 998 | "version": "4.7.0", 999 | "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", 1000 | "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" 1001 | }, 1002 | "loglevel": { 1003 | "version": "1.7.1", 1004 | "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", 1005 | "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==" 1006 | }, 1007 | "long": { 1008 | "version": "4.0.0", 1009 | "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", 1010 | "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" 1011 | }, 1012 | "lru-cache": { 1013 | "version": "6.0.0", 1014 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1015 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1016 | "requires": { 1017 | "yallist": "^4.0.0" 1018 | } 1019 | }, 1020 | "media-typer": { 1021 | "version": "0.3.0", 1022 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1023 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 1024 | }, 1025 | "merge-descriptors": { 1026 | "version": "1.0.1", 1027 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 1028 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 1029 | }, 1030 | "methods": { 1031 | "version": "1.1.2", 1032 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 1033 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 1034 | }, 1035 | "mime": { 1036 | "version": "1.6.0", 1037 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 1038 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 1039 | }, 1040 | "mime-db": { 1041 | "version": "1.46.0", 1042 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", 1043 | "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==" 1044 | }, 1045 | "mime-types": { 1046 | "version": "2.1.29", 1047 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", 1048 | "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", 1049 | "requires": { 1050 | "mime-db": "1.46.0" 1051 | } 1052 | }, 1053 | "ms": { 1054 | "version": "2.0.0", 1055 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1056 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 1057 | }, 1058 | "negotiator": { 1059 | "version": "0.6.2", 1060 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 1061 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" 1062 | }, 1063 | "node-fetch": { 1064 | "version": "2.6.1", 1065 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", 1066 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" 1067 | }, 1068 | "object-assign": { 1069 | "version": "4.1.1", 1070 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1071 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 1072 | }, 1073 | "object-inspect": { 1074 | "version": "1.9.0", 1075 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", 1076 | "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==" 1077 | }, 1078 | "object-keys": { 1079 | "version": "1.1.1", 1080 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1081 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" 1082 | }, 1083 | "object-path": { 1084 | "version": "0.11.5", 1085 | "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.5.tgz", 1086 | "integrity": "sha512-jgSbThcoR/s+XumvGMTMf81QVBmah+/Q7K7YduKeKVWL7N111unR2d6pZZarSk6kY/caeNxUDyxOvMWyzoU2eg==" 1087 | }, 1088 | "object.assign": { 1089 | "version": "4.1.2", 1090 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", 1091 | "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", 1092 | "requires": { 1093 | "call-bind": "^1.0.0", 1094 | "define-properties": "^1.1.3", 1095 | "has-symbols": "^1.0.1", 1096 | "object-keys": "^1.1.1" 1097 | } 1098 | }, 1099 | "object.getownpropertydescriptors": { 1100 | "version": "2.1.1", 1101 | "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz", 1102 | "integrity": "sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng==", 1103 | "requires": { 1104 | "call-bind": "^1.0.0", 1105 | "define-properties": "^1.1.3", 1106 | "es-abstract": "^1.18.0-next.1" 1107 | } 1108 | }, 1109 | "on-finished": { 1110 | "version": "2.3.0", 1111 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 1112 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 1113 | "requires": { 1114 | "ee-first": "1.1.1" 1115 | } 1116 | }, 1117 | "parseurl": { 1118 | "version": "1.3.3", 1119 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 1120 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 1121 | }, 1122 | "path-to-regexp": { 1123 | "version": "0.1.7", 1124 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 1125 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 1126 | }, 1127 | "proxy-addr": { 1128 | "version": "2.0.6", 1129 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", 1130 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", 1131 | "requires": { 1132 | "forwarded": "~0.1.2", 1133 | "ipaddr.js": "1.9.1" 1134 | } 1135 | }, 1136 | "qs": { 1137 | "version": "6.7.0", 1138 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", 1139 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" 1140 | }, 1141 | "range-parser": { 1142 | "version": "1.2.1", 1143 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 1144 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 1145 | }, 1146 | "raw-body": { 1147 | "version": "2.4.0", 1148 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", 1149 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", 1150 | "requires": { 1151 | "bytes": "3.1.0", 1152 | "http-errors": "1.7.2", 1153 | "iconv-lite": "0.4.24", 1154 | "unpipe": "1.0.0" 1155 | }, 1156 | "dependencies": { 1157 | "http-errors": { 1158 | "version": "1.7.2", 1159 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", 1160 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", 1161 | "requires": { 1162 | "depd": "~1.1.2", 1163 | "inherits": "2.0.3", 1164 | "setprototypeof": "1.1.1", 1165 | "statuses": ">= 1.5.0 < 2", 1166 | "toidentifier": "1.0.0" 1167 | } 1168 | }, 1169 | "inherits": { 1170 | "version": "2.0.3", 1171 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1172 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 1173 | }, 1174 | "setprototypeof": { 1175 | "version": "1.1.1", 1176 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 1177 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 1178 | } 1179 | } 1180 | }, 1181 | "retry": { 1182 | "version": "0.12.0", 1183 | "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", 1184 | "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" 1185 | }, 1186 | "safe-buffer": { 1187 | "version": "5.2.1", 1188 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1189 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 1190 | }, 1191 | "safer-buffer": { 1192 | "version": "2.1.2", 1193 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1194 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1195 | }, 1196 | "send": { 1197 | "version": "0.17.1", 1198 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", 1199 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", 1200 | "requires": { 1201 | "debug": "2.6.9", 1202 | "depd": "~1.1.2", 1203 | "destroy": "~1.0.4", 1204 | "encodeurl": "~1.0.2", 1205 | "escape-html": "~1.0.3", 1206 | "etag": "~1.8.1", 1207 | "fresh": "0.5.2", 1208 | "http-errors": "~1.7.2", 1209 | "mime": "1.6.0", 1210 | "ms": "2.1.1", 1211 | "on-finished": "~2.3.0", 1212 | "range-parser": "~1.2.1", 1213 | "statuses": "~1.5.0" 1214 | }, 1215 | "dependencies": { 1216 | "http-errors": { 1217 | "version": "1.7.3", 1218 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", 1219 | "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", 1220 | "requires": { 1221 | "depd": "~1.1.2", 1222 | "inherits": "2.0.4", 1223 | "setprototypeof": "1.1.1", 1224 | "statuses": ">= 1.5.0 < 2", 1225 | "toidentifier": "1.0.0" 1226 | } 1227 | }, 1228 | "ms": { 1229 | "version": "2.1.1", 1230 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 1231 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" 1232 | }, 1233 | "setprototypeof": { 1234 | "version": "1.1.1", 1235 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 1236 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 1237 | } 1238 | } 1239 | }, 1240 | "serve-static": { 1241 | "version": "1.14.1", 1242 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", 1243 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", 1244 | "requires": { 1245 | "encodeurl": "~1.0.2", 1246 | "escape-html": "~1.0.3", 1247 | "parseurl": "~1.3.3", 1248 | "send": "0.17.1" 1249 | } 1250 | }, 1251 | "setprototypeof": { 1252 | "version": "1.2.0", 1253 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 1254 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 1255 | }, 1256 | "sha.js": { 1257 | "version": "2.4.11", 1258 | "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", 1259 | "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", 1260 | "requires": { 1261 | "inherits": "^2.0.1", 1262 | "safe-buffer": "^5.0.1" 1263 | } 1264 | }, 1265 | "statuses": { 1266 | "version": "1.5.0", 1267 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 1268 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 1269 | }, 1270 | "stoppable": { 1271 | "version": "1.1.0", 1272 | "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", 1273 | "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==" 1274 | }, 1275 | "streamsearch": { 1276 | "version": "0.1.2", 1277 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", 1278 | "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" 1279 | }, 1280 | "string.prototype.trimend": { 1281 | "version": "1.0.3", 1282 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", 1283 | "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", 1284 | "requires": { 1285 | "call-bind": "^1.0.0", 1286 | "define-properties": "^1.1.3" 1287 | } 1288 | }, 1289 | "string.prototype.trimstart": { 1290 | "version": "1.0.3", 1291 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", 1292 | "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", 1293 | "requires": { 1294 | "call-bind": "^1.0.0", 1295 | "define-properties": "^1.1.3" 1296 | } 1297 | }, 1298 | "subscriptions-transport-ws": { 1299 | "version": "0.9.18", 1300 | "resolved": "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.18.tgz", 1301 | "integrity": "sha512-tztzcBTNoEbuErsVQpTN2xUNN/efAZXyCyL5m3x4t6SKrEiTL2N8SaKWBFWM4u56pL79ULif3zjyeq+oV+nOaA==", 1302 | "requires": { 1303 | "backo2": "^1.0.2", 1304 | "eventemitter3": "^3.1.0", 1305 | "iterall": "^1.2.1", 1306 | "symbol-observable": "^1.0.4", 1307 | "ws": "^5.2.0" 1308 | }, 1309 | "dependencies": { 1310 | "ws": { 1311 | "version": "5.2.2", 1312 | "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", 1313 | "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", 1314 | "requires": { 1315 | "async-limiter": "~1.0.0" 1316 | } 1317 | } 1318 | } 1319 | }, 1320 | "symbol-observable": { 1321 | "version": "1.2.0", 1322 | "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", 1323 | "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" 1324 | }, 1325 | "toidentifier": { 1326 | "version": "1.0.0", 1327 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 1328 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" 1329 | }, 1330 | "ts-invariant": { 1331 | "version": "0.4.4", 1332 | "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.4.4.tgz", 1333 | "integrity": "sha512-uEtWkFM/sdZvRNNDL3Ehu4WVpwaulhwQszV8mrtcdeE8nN00BV9mAmQ88RkrBhFgl9gMgvjJLAQcZbnPXI9mlA==", 1334 | "requires": { 1335 | "tslib": "^1.9.3" 1336 | } 1337 | }, 1338 | "tslib": { 1339 | "version": "1.14.1", 1340 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 1341 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" 1342 | }, 1343 | "type-is": { 1344 | "version": "1.6.18", 1345 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 1346 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1347 | "requires": { 1348 | "media-typer": "0.3.0", 1349 | "mime-types": "~2.1.24" 1350 | } 1351 | }, 1352 | "unpipe": { 1353 | "version": "1.0.0", 1354 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1355 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 1356 | }, 1357 | "util.promisify": { 1358 | "version": "1.1.1", 1359 | "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.1.1.tgz", 1360 | "integrity": "sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==", 1361 | "requires": { 1362 | "call-bind": "^1.0.0", 1363 | "define-properties": "^1.1.3", 1364 | "for-each": "^0.3.3", 1365 | "has-symbols": "^1.0.1", 1366 | "object.getownpropertydescriptors": "^2.1.1" 1367 | } 1368 | }, 1369 | "utils-merge": { 1370 | "version": "1.0.1", 1371 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 1372 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 1373 | }, 1374 | "uuid": { 1375 | "version": "8.3.2", 1376 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", 1377 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" 1378 | }, 1379 | "vary": { 1380 | "version": "1.1.2", 1381 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 1382 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 1383 | }, 1384 | "ws": { 1385 | "version": "6.2.1", 1386 | "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", 1387 | "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", 1388 | "requires": { 1389 | "async-limiter": "~1.0.0" 1390 | } 1391 | }, 1392 | "xss": { 1393 | "version": "1.0.8", 1394 | "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.8.tgz", 1395 | "integrity": "sha512-3MgPdaXV8rfQ/pNn16Eio6VXYPTkqwa0vc7GkiymmY/DqR1SE/7VPAAVZz1GJsJFrllMYO3RHfEaiUGjab6TNw==", 1396 | "requires": { 1397 | "commander": "^2.20.3", 1398 | "cssfilter": "0.0.10" 1399 | } 1400 | }, 1401 | "yallist": { 1402 | "version": "4.0.0", 1403 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1404 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 1405 | }, 1406 | "zen-observable": { 1407 | "version": "0.8.15", 1408 | "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz", 1409 | "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==" 1410 | }, 1411 | "zen-observable-ts": { 1412 | "version": "0.8.21", 1413 | "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.21.tgz", 1414 | "integrity": "sha512-Yj3yXweRc8LdRMrCC8nIc4kkjWecPAUVh0TI0OUrWXx6aX790vLcDlWca6I4vsyCGH3LpWxq0dJRcMOFoVqmeg==", 1415 | "requires": { 1416 | "tslib": "^1.9.3", 1417 | "zen-observable": "^0.8.0" 1418 | } 1419 | } 1420 | } 1421 | } 1422 | -------------------------------------------------------------------------------- /final/server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "server", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "nodemon index.js" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "apollo-server": "^2.21.0", 14 | "graphql": "^15.5.0", 15 | "uuid": "^8.3.2" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /final/server/resolvers/Animal.js: -------------------------------------------------------------------------------- 1 | const Animal = { 2 | category: (parent, args, { categories }) => { 3 | return categories.find((category) => { 4 | return category.id === parent.category 5 | }) 6 | } 7 | } 8 | 9 | module.exports = Animal -------------------------------------------------------------------------------- /final/server/resolvers/Category.js: -------------------------------------------------------------------------------- 1 | 2 | const Category = { 3 | animals: (parent, args, { animals }) => { 4 | return animals.filter(animal => { 5 | return animal.category === parent.id 6 | }) 7 | } 8 | } 9 | 10 | module.exports = Category -------------------------------------------------------------------------------- /final/server/resolvers/Mutation.js: -------------------------------------------------------------------------------- 1 | const { v4 } = require("uuid") 2 | 3 | const Mutation = { 4 | addAnimal: (parent, {image, title, rating, price, description, slug, stock, onSale, category}, {animals}) => { 5 | let newAnimal = { 6 | id: v4(), 7 | image, 8 | title, 9 | rating, 10 | price, 11 | description, 12 | slug, 13 | stock, 14 | onSale, 15 | category, 16 | } 17 | 18 | animals.push(newAnimal) 19 | 20 | return newAnimal 21 | }, 22 | 23 | removeAnimal: (parent, { id }, { animals }) => { 24 | let index = animals.findIndex((animal) => { 25 | return animal.id === id 26 | }); 27 | 28 | animals.splice(index, 1); 29 | 30 | return true 31 | } 32 | } 33 | 34 | module.exports = Mutation 35 | 36 | // type Animal { 37 | // id: ID! 38 | // image: String! 39 | // title: String! 40 | // rating: Float 41 | // price: String! 42 | // description: [String!]! 43 | // slug: String! 44 | // stock: Int! 45 | // onSale: Boolean 46 | // category: Category 47 | // } -------------------------------------------------------------------------------- /final/server/resolvers/Query.js: -------------------------------------------------------------------------------- 1 | const Query = { 2 | mainCards: (parent, args, { mainCards }) => mainCards, 3 | animals: (parent, args, { animals }) => animals, 4 | animal: (parent, args, { animals }) => { 5 | let animal = animals.find((animal) => { 6 | return animal.slug === args.slug 7 | }) 8 | return animal 9 | }, 10 | categories: (parent, args, { categories }) => categories, 11 | category: (parent, args, { categories }) => { 12 | let category = categories.find((category) => { 13 | return category.slug === args.slug 14 | }); 15 | return category; 16 | } 17 | } 18 | 19 | module.exports = Query 20 | 21 | -------------------------------------------------------------------------------- /final/server/schema.js: -------------------------------------------------------------------------------- 1 | const { gql } = require('apollo-server'); 2 | 3 | const typeDefs = gql` 4 | 5 | type MainCard { 6 | title: String! 7 | image: String! 8 | } 9 | 10 | type Animal { 11 | id: ID! 12 | image: String! 13 | title: String! 14 | rating: Float 15 | price: String! 16 | description: [String!]! 17 | slug: String! 18 | stock: Int! 19 | onSale: Boolean 20 | category: Category 21 | } 22 | 23 | type Category { 24 | id: ID! 25 | image: String! 26 | category: String! 27 | slug: String! 28 | animals: [Animal!]! 29 | } 30 | 31 | type Query { 32 | mainCards: [MainCard] 33 | animals: [Animal!]! 34 | animal(slug: String!): Animal 35 | categories: [Category!]! 36 | category(slug: String!): Category 37 | } 38 | 39 | type Mutation { 40 | addAnimal( 41 | image: String! 42 | title: String! 43 | rating: Float 44 | price: String! 45 | description: [String!]! 46 | slug: String! 47 | stock: Int! 48 | onSale: Boolean 49 | category: String! 50 | ): Animal 51 | removeAnimal(id: ID!): Boolean! 52 | } 53 | 54 | `; 55 | 56 | module.exports = typeDefs -------------------------------------------------------------------------------- /start/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/start/.DS_Store -------------------------------------------------------------------------------- /start/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 | -------------------------------------------------------------------------------- /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 | ### `yarn start` 10 | 11 | Runs the app in the development mode.\ 12 | Open [http://localhost:3000](http://localhost:3000) to view it in the browser. 13 | 14 | The page will reload if you make edits.\ 15 | You will also see any lint errors in the console. 16 | 17 | ### `yarn 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 | ### `yarn 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 | ### `yarn 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 | ### `yarn 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 | -------------------------------------------------------------------------------- /start/client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "client", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "@apollo/client": "^3.3.10", 7 | "@testing-library/jest-dom": "^5.11.4", 8 | "@testing-library/react": "^11.1.0", 9 | "@testing-library/user-event": "^12.1.10", 10 | "bootstrap": "^4.6.0", 11 | "graphql": "^15.5.0", 12 | "react": "^17.0.1", 13 | "react-bootstrap": "^1.4.3", 14 | "react-dom": "^17.0.1", 15 | "react-router-dom": "^5.2.0", 16 | "react-scripts": "4.0.2", 17 | "reactstrap": "^8.9.0", 18 | "web-vitals": "^1.0.1" 19 | }, 20 | "scripts": { 21 | "start": "react-scripts start", 22 | "build": "react-scripts build", 23 | "test": "react-scripts test", 24 | "eject": "react-scripts eject" 25 | }, 26 | "eslintConfig": { 27 | "extends": [ 28 | "react-app", 29 | "react-app/jest" 30 | ] 31 | }, 32 | "browserslist": { 33 | "production": [ 34 | ">0.2%", 35 | "not dead", 36 | "not op_mini all" 37 | ], 38 | "development": [ 39 | "last 1 chrome version", 40 | "last 1 firefox version", 41 | "last 1 safari version" 42 | ] 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /start/client/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/start/client/public/favicon.ico -------------------------------------------------------------------------------- /start/client/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 17 | 18 | 22 | 23 | 32 | Animazon 33 | 34 | 35 | 36 |
    37 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /start/client/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/start/client/public/logo192.png -------------------------------------------------------------------------------- /start/client/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/start/client/public/logo512.png -------------------------------------------------------------------------------- /start/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 | -------------------------------------------------------------------------------- /start/client/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /start/client/src/App.css: -------------------------------------------------------------------------------- 1 | * { 2 | padding: 0; 3 | margin: 0; 4 | box-sizing: border-box; 5 | font-family: "Lato"; 6 | } 7 | -------------------------------------------------------------------------------- /start/client/src/App.js: -------------------------------------------------------------------------------- 1 | import logo from './logo.svg'; 2 | import './App.css'; 3 | import Nav from './components/Nav/Nav'; 4 | import { Switch, Route, BrowserRouter } from "react-router-dom" 5 | import LandingPage from './pages/LandingPage'; 6 | import CategoryPage from './pages/CategoryPage'; 7 | import AnimalPage from './pages/AnimalPage/AnimalPage'; 8 | 9 | function App() { 10 | return ( 11 |
    12 | 13 |
    21 | ); 22 | } 23 | 24 | export default App; 25 | -------------------------------------------------------------------------------- /start/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 | -------------------------------------------------------------------------------- /start/client/src/assets/image/cat.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/start/client/src/assets/image/cat.jpg -------------------------------------------------------------------------------- /start/client/src/assets/image/cham.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/start/client/src/assets/image/cham.jpg -------------------------------------------------------------------------------- /start/client/src/assets/image/dockey.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/start/client/src/assets/image/dockey.jpg -------------------------------------------------------------------------------- /start/client/src/assets/image/dolphin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/start/client/src/assets/image/dolphin.jpg -------------------------------------------------------------------------------- /start/client/src/assets/image/ele.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/start/client/src/assets/image/ele.jpg -------------------------------------------------------------------------------- /start/client/src/assets/image/gorilla.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/start/client/src/assets/image/gorilla.jpg -------------------------------------------------------------------------------- /start/client/src/assets/image/horse.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/start/client/src/assets/image/horse.jpg -------------------------------------------------------------------------------- /start/client/src/assets/image/kang.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/start/client/src/assets/image/kang.jpg -------------------------------------------------------------------------------- /start/client/src/assets/image/lion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/start/client/src/assets/image/lion.png -------------------------------------------------------------------------------- /start/client/src/assets/image/lion2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/start/client/src/assets/image/lion2.jpg -------------------------------------------------------------------------------- /start/client/src/assets/image/ostrich.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/start/client/src/assets/image/ostrich.jpg -------------------------------------------------------------------------------- /start/client/src/assets/image/penguin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/start/client/src/assets/image/penguin.png -------------------------------------------------------------------------------- /start/client/src/assets/image/penguin2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/start/client/src/assets/image/penguin2.jpg -------------------------------------------------------------------------------- /start/client/src/assets/image/rhino.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/start/client/src/assets/image/rhino.png -------------------------------------------------------------------------------- /start/client/src/assets/image/snake.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/start/client/src/assets/image/snake.jpeg -------------------------------------------------------------------------------- /start/client/src/assets/image/stingray.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/start/client/src/assets/image/stingray.jpg -------------------------------------------------------------------------------- /start/client/src/assets/image/tiger.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/start/client/src/assets/image/tiger.jpeg -------------------------------------------------------------------------------- /start/client/src/assets/image/tiger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/start/client/src/assets/image/tiger.png -------------------------------------------------------------------------------- /start/client/src/assets/images.js: -------------------------------------------------------------------------------- 1 | import lion from "./image/lion2.jpg" 2 | import cham from "./image/cham.jpg" 3 | import dolphin from "./image/dolphin.jpg" 4 | import gorilla from "./image/gorilla.jpg" 5 | import horse from "./image/horse.jpg" 6 | import kang from "./image/kang.jpg" 7 | import ele from "./image/ele.jpg" 8 | import donkey from "./image/dockey.jpg" 9 | import tiger from "./image/tiger.jpeg" 10 | import snake from "./image/snake.jpeg" 11 | import stingray from "./image/stingray.jpg" 12 | import ostrich from "./image/ostrich.jpg" 13 | import penguin from "./image/penguin2.jpg" 14 | import cat from "./image/cat.jpg" 15 | import rhino from "./image/rhino.png" 16 | 17 | export default { 18 | lion, 19 | cham, 20 | dolphin, 21 | gorilla, 22 | horse, 23 | kang, 24 | ele, 25 | donkey, 26 | tiger, 27 | snake, 28 | stingray, 29 | ostrich, 30 | penguin, 31 | cat, 32 | rhino 33 | } -------------------------------------------------------------------------------- /start/client/src/assets/svg/loupe.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /start/client/src/assets/svg/s.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harblaith7/GraphQL-Crash-Course/a02b725969b689d59b85262aa04572d817ca0a38/start/client/src/assets/svg/s.svg -------------------------------------------------------------------------------- /start/client/src/assets/svg/shopping-cart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /start/client/src/assets/svg/star.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /start/client/src/components/Card/Card.css: -------------------------------------------------------------------------------- 1 | .card-display { 2 | } 3 | 4 | .card-display-container { 5 | display: flex; 6 | justify-content: space-between; 7 | flex-wrap: wrap; 8 | } 9 | 10 | .main-img { 11 | height: 12.5rem; 12 | } 13 | 14 | .Card { 15 | width: 23%; 16 | margin-top: 2rem; 17 | cursor: pointer; 18 | color: black 19 | } 20 | 21 | .Card:hover { 22 | text-decoration: none; 23 | color: black 24 | } 25 | 26 | .Card img { 27 | width: 100%; 28 | } 29 | 30 | .Card h4 { 31 | font-size: 1rem; 32 | line-height: 1.5rem; 33 | margin-top: 0.2rem; 34 | } 35 | 36 | .card-start { 37 | margin-top: 0.2rem; 38 | display: flex; 39 | } 40 | 41 | .card-start img { 42 | width: 1.2rem; 43 | margin-right: 0.2rem; 44 | } 45 | 46 | .card-price { 47 | display: flex; 48 | margin-top: 0.5rem; 49 | } 50 | 51 | .card-price p { 52 | font-size: 0.75rem; 53 | margin-top: 0.25rem; 54 | margin-right: 0.05rem; 55 | } 56 | 57 | .card-price h4 { 58 | font-size: 1.25rem; 59 | font-weight: 400; 60 | } 61 | 62 | .card-prime { 63 | margin-top: 0.2rem; 64 | font-size: 1.25rem 65 | } 66 | 67 | .card-prime span { 68 | color: rgb(33, 145, 193); 69 | font-weight: 700; 70 | margin-right: 0.2rem; 71 | font-size: 1.25rem; 72 | } 73 | 74 | .card-prime .bold { 75 | color: black; 76 | } 77 | -------------------------------------------------------------------------------- /start/client/src/components/Card/Card.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import lion from "../../assets/image/lion2.jpg" 3 | import "./Card.css" 4 | import star from "../../assets/svg/star.svg" 5 | import animal from "../../assets/images" 6 | import { Link } from 'react-router-dom' 7 | 8 | function Card(props) { 9 | return ( 10 | 11 | 12 |

    13 | {props.animal.title} 14 |

    15 |
    16 | 17 | 18 | 19 | 20 | 21 |
    22 |
    23 |

    CAD $

    24 |

    {props.animal.price}

    25 |
    26 |
    27 | prime FREE delivery by Tuesday, Feb 16 28 |
    29 | 30 | ) 31 | } 32 | 33 | export default Card 34 | -------------------------------------------------------------------------------- /start/client/src/components/CardDisplay/CardDisplay.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Card from '../Card/Card' 3 | import {Container} from "react-bootstrap" 4 | 5 | function CardDisplay({animals}) { 6 | 7 | return ( 8 |
    9 | 10 | {animals.map(animal => { 11 | return 12 | })} 13 | 14 |
    15 | ) 16 | } 17 | 18 | export default CardDisplay 19 | -------------------------------------------------------------------------------- /start/client/src/components/CategoryDisplay/CategoryDisplay.css: -------------------------------------------------------------------------------- 1 | .CategoryDisplay { 2 | padding-top: 2rem 3 | } 4 | .CategoryDisplay-card { 5 | border-radius: 100%; 6 | overflow: hidden; 7 | width: 15rem; 8 | height: 15rem; 9 | padding-bottom: 2rem; 10 | } 11 | 12 | .CategoryDisplay-card-container { 13 | width: 15rem; 14 | text-align: center; 15 | } 16 | 17 | .CategoryDisplay-card img { 18 | height: 100%; 19 | width: 100% 20 | } 21 | 22 | .CategoryDisplay-card-container h3 { 23 | text-align: center; 24 | margin-top: -2rem; 25 | } 26 | 27 | .CategoryDisplay-container { 28 | display: flex; 29 | justify-content: space-between; 30 | } -------------------------------------------------------------------------------- /start/client/src/components/CategoryDisplay/CategoryDisplay.jsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react' 2 | import "./CategoryDisplay.css" 3 | import { Container } from 'react-bootstrap' 4 | import animals from '../../assets/images' 5 | 6 | import { Link } from "react-router-dom" 7 | 8 | 9 | function CategoryDisplay() { 10 | 11 | return ( 12 |
    13 | 14 | {[].map(category => { 15 | return ( 16 | 17 |
    18 | 19 |
    20 |

    {category.category}

    21 | 22 | ) 23 | })} 24 |
    25 |
    26 | ) 27 | } 28 | 29 | export default CategoryDisplay 30 | -------------------------------------------------------------------------------- /start/client/src/components/MainHero/MainHero.css: -------------------------------------------------------------------------------- 1 | .MainHero { 2 | background-color: rgb(218, 247, 255); 3 | padding-bottom: 2rem; 4 | } 5 | 6 | .header-container { 7 | padding: 3rem; 8 | text-align: center; 9 | display: flex; 10 | align-items: center; 11 | justify-content: center; 12 | } 13 | 14 | .header-container h2 { 15 | font-size: 2.75rem; 16 | margin-right: 2rem; 17 | } 18 | 19 | .header-container img { 20 | width: 15rem; 21 | } 22 | 23 | .cards-container { 24 | display: flex; 25 | justify-content: space-between; 26 | } 27 | 28 | .card { 29 | width: 32%; 30 | background-color: white; 31 | height: 25rem; 32 | padding: 1rem; 33 | padding-bottom: 6rem; 34 | } 35 | 36 | .card p { 37 | font-weight: 900; 38 | margin-top: 1rem; 39 | font-size: 0.75rem; 40 | } 41 | 42 | .card img { 43 | width: 100%; 44 | height: 100%; 45 | margin-top: 1rem; 46 | } 47 | 48 | .boxs-container { 49 | display: flex; 50 | justify-content: space-between; 51 | flex-wrap: wrap; 52 | margin-top: 0.5rem; 53 | } 54 | 55 | .box-container { 56 | background-color: rgba(238, 130, 238, 0.151); 57 | width: 49%; 58 | height: 5rem; 59 | display: flex; 60 | align-items: flex-start; 61 | justify-content: center; 62 | margin-top: 1rem; 63 | } 64 | 65 | .box-container img { 66 | width: 5rem; 67 | } 68 | -------------------------------------------------------------------------------- /start/client/src/components/MainHero/MainHero.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import "./MainHero.css" 3 | import animals from "../../assets/images" 4 | import {Container} from "reactstrap" 5 | 6 | function MainHero() { 7 | 8 | return ( 9 |
    10 | 11 |
    12 |

    Find your
    new four-legged
    best friend

    13 | 14 |
    15 |
    16 | {[].map(card => { 17 | return ( 18 |
    19 |

    {card.title}

    20 | 21 |
    22 | ) 23 | })} 24 |
    25 |
    26 |
    27 | ) 28 | } 29 | 30 | export default MainHero 31 | -------------------------------------------------------------------------------- /start/client/src/components/Nav/Nav.css: -------------------------------------------------------------------------------- 1 | .Nav { 2 | background-color: rgb(19, 25, 33); 3 | height: 7.5vh; 4 | display: flex; 5 | align-items: center; 6 | padding: 0 2rem; 7 | } 8 | 9 | .nav-container { 10 | display: flex; 11 | width: 100%; 12 | align-items: center; 13 | } 14 | 15 | .header { 16 | font-family: "Poppins", sans-serif; 17 | color: white; 18 | font-size: 1.4rem; 19 | } 20 | 21 | .header span { 22 | font-size: 0.95rem; 23 | font-weight: 400; 24 | } 25 | 26 | .nav-delivery-info-container { 27 | margin-left: 2rem; 28 | font-size: 0.7rem; 29 | color: rgb(184, 181, 181); 30 | font-weight: 700; 31 | } 32 | 33 | .nav-delivery-info-container h2 { 34 | color: white; 35 | font-size: 1rem; 36 | } 37 | 38 | .nav-delivery-info-container p { 39 | margin-bottom: 0; 40 | } 41 | 42 | .nav-input-container { 43 | margin-left: 2rem; 44 | display: flex; 45 | height: 2.25rem; 46 | align-self: center; 47 | width: 75% 48 | } 49 | 50 | .nav-input-container select { 51 | height: 100%; 52 | border-radius: 0.2rem 0 0 0.2rem; 53 | padding: 0.2rem; 54 | background-color: rgb(218, 218, 218); 55 | border-color: rgba(128, 128, 128, 0.315); 56 | } 57 | 58 | .nav-input-container input { 59 | height: 100%; 60 | padding: 0.2rem; 61 | border: none; 62 | width: 100%; 63 | } 64 | 65 | .nav-input-container select:focus { 66 | outline: none; 67 | } 68 | 69 | .nav-btn { 70 | background-color: rgb(254, 189, 105); 71 | width: 3rem; 72 | border: none; 73 | border-radius: 0 0.2rem 0.2rem 0; 74 | height: 2.25rem; 75 | } 76 | 77 | .nav-btn img { 78 | width: 1.35rem; 79 | } 80 | 81 | .nav-cart-container { 82 | margin-left: 2rem; 83 | display: flex; 84 | color: white; 85 | } 86 | 87 | .nav-cart-container img { 88 | width: 2rem; 89 | } 90 | .nav-cart-container h2 { 91 | margin-top: 0.75rem; 92 | font-size: 1.25rem; 93 | margin-left: 0.25rem; 94 | } 95 | -------------------------------------------------------------------------------- /start/client/src/components/Nav/Nav.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import "./Nav.css"; 3 | import { Container } from "react-bootstrap" 4 | import search from '../../assets/svg/loupe.svg' 5 | import cart from '../../assets/svg/shopping-cart.svg' 6 | 7 | export default function Nav() { 8 | return ( 9 |
    10 |
    11 |

    animazon.com

    12 |
    13 |

    Deliver to Laith

    14 |

    432 Park Avenue

    15 |
    16 |
    17 | 20 | 21 | 24 |
    25 |
    26 |

    Hello, Laith

    27 |

    Account & Lists

    28 |
    29 |
    30 |

    Returns

    31 |

    & Orders

    32 |
    33 |
    34 | 35 |

    cart

    36 |
    37 |
    38 |
    39 | ) 40 | } 41 | -------------------------------------------------------------------------------- /start/client/src/index.css: -------------------------------------------------------------------------------- 1 | html { 2 | padding: 0; 3 | margin: 0; 4 | box-sizing: border-box; 5 | } 6 | 7 | -------------------------------------------------------------------------------- /start/client/src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import './index.css'; 4 | import App from './App'; 5 | import reportWebVitals from './reportWebVitals'; 6 | import "./index.css" 7 | 8 | ReactDOM.render( 9 | 10 | 11 | , 12 | document.getElementById('root') 13 | ); 14 | 15 | // If you want to start measuring performance in your app, pass a function 16 | // to log results (for example: reportWebVitals(console.log)) 17 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals 18 | reportWebVitals(); 19 | -------------------------------------------------------------------------------- /start/client/src/logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /start/client/src/pages/AnimalPage/AnimalPage.css: -------------------------------------------------------------------------------- 1 | .product-img { 2 | width: 40% 3 | } 4 | 5 | .text-container { 6 | width: 40%; 7 | } 8 | 9 | .text-container h1 { 10 | font-size: 1.25rem; 11 | line-height: 2rem; 12 | } 13 | 14 | .star-container img { 15 | width: 1rem 16 | } 17 | 18 | .star-container { 19 | display: flex; 20 | } 21 | 22 | .star-container p { 23 | color: rgb(33, 145, 193); 24 | margin-top: 1rem; 25 | margin-left: 0.5rem; 26 | } 27 | 28 | .about-container h4 { 29 | font-size: 1.15rem; 30 | font-weight: 700; 31 | } 32 | 33 | 34 | 35 | .cart-container { 36 | border-radius: 1rem; 37 | width: 20%; 38 | margin-left: 2rem; 39 | padding: 1rem 40 | } 41 | 42 | .cart-container button { 43 | width: 100%; 44 | border: none; 45 | background-color: #F2CB6A; 46 | padding: 0.35rem 0; 47 | font-size: 0.85rem; 48 | margin: 0.25rem 0 49 | } 50 | 51 | .price { 52 | color: rgb(141, 6, 6); 53 | 54 | } 55 | 56 | .delivery-time { 57 | padding-bottom: 4rem; 58 | } 59 | 60 | .buy-now-btn { 61 | margin-top: 1rem; 62 | } 63 | 64 | 65 | .rating-stock-container { 66 | width: 100%; 67 | display: flex; 68 | justify-content: space-between; 69 | } -------------------------------------------------------------------------------- /start/client/src/pages/AnimalPage/AnimalPage.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Container } from 'react-bootstrap' 3 | import animals from "../../assets/images" 4 | import star from "../../assets/svg/star.svg" 5 | import "./AnimalPage.css" 6 | import { useParams } from "react-router-dom" 7 | 8 | function AnimalPage() { 9 | 10 | const { slug } = useParams(); 11 | 12 | 13 | return ( 14 |
    15 | 16 |
    17 | 18 |
    19 |

    {}

    20 |
    21 | 22 | 23 | 24 | 25 | 26 |
    27 |

    1402 rating

    28 |

    {} in stock

    29 |
    30 | 31 |
    32 |
    33 |

    About this Animal

    34 |
  • Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
  • 35 |
  • Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
  • 36 |
  • Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
  • 37 |
  • Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  • 38 |
    39 |
    40 |
    41 |

    CAD$ {}

    42 |

    FREE delivery: Thursday, Feb 25 Details 43 | 46 | 49 |

    50 |
    51 |
    52 |
    53 |
    54 | ) 55 | } 56 | 57 | export default AnimalPage 58 | -------------------------------------------------------------------------------- /start/client/src/pages/CategoryPage.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { useParams } from "react-router-dom" 3 | import { Container } from 'react-bootstrap' 4 | import CardDisplay from '../components/CardDisplay/CardDisplay' 5 | 6 | function CategoryPage() { 7 | 8 | const { slug } = useParams() 9 | 10 | return ( 11 |
    12 | 13 |

    14 | {} 15 | 18 |

    19 |
    20 |
    21 | ) 22 | } 23 | 24 | export default CategoryPage 25 | -------------------------------------------------------------------------------- /start/client/src/pages/LandingPage.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import MainHero from "../components/MainHero/MainHero" 3 | import CategoryDisplay from "../components/CategoryDisplay/CategoryDisplay" 4 | import CardDisplay from "../components/CardDisplay/CardDisplay" 5 | 6 | function LandingPage() { 7 | 8 | return ( 9 |
    10 | 11 | 12 | 13 |
    14 | ) 15 | } 16 | 17 | export default LandingPage 18 | -------------------------------------------------------------------------------- /start/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 | -------------------------------------------------------------------------------- /start/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 | --------------------------------------------------------------------------------