├── .gitignore
├── README.md
├── backend
├── app.js
├── config.js
├── controllers
│ └── books.controller.js
├── database.js
├── index.js
├── models
│ └── Book.js
└── routes
│ └── books.routes.js
├── frontend
├── .gitignore
├── index.html
├── package.json
├── pnpm-lock.yaml
├── public
│ └── vite.svg
└── src
│ ├── UI.js
│ ├── components
│ └── bookForm.js
│ ├── main.js
│ ├── models
│ └── Book.js
│ ├── services
│ └── BookService.js
│ └── styles
│ └── app.css
├── package.json
├── pnpm-lock.yaml
└── requests
└── books.rest
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .env
3 | backend/public
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ### Javascript FullStack Course
2 |
3 | This is a practical example to learn How to develop a simple FullStack Javascript application using Javascript in the frontend (with Vite) and Nodejs Backend with MongoDB
4 |
5 | ### Development Backend Installation
6 |
7 | ```sh
8 | git clone https://github.com/FaztWeb/javascript-fullstack-simple
9 | cd javascript-fullstack-simple
10 | npm i
11 | npm run dev
12 | ```
13 |
14 | then continue with the frontend installation
15 |
16 | ### Development Frontend Installation
17 |
18 | ```sh
19 | cd frontend
20 | npm i
21 | npm run dev
22 | ```
--------------------------------------------------------------------------------
/backend/app.js:
--------------------------------------------------------------------------------
1 | import express from "express";
2 | import morgan from "morgan";
3 | import cors from "cors";
4 | import multer from "multer";
5 | import { dirname, extname, join } from "path";
6 | import { fileURLToPath } from "url";
7 | import booksRoutes from "./routes/books.routes.js";
8 |
9 | const app = express();
10 | const __dirname = dirname(fileURLToPath(import.meta.url));
11 |
12 | // middlewares
13 | app.use(morgan("dev"));
14 | app.use(cors());
15 | const storage = multer.diskStorage({
16 | destination: join(__dirname, "public/uploads"),
17 | filename(req, file, cb) {
18 | cb(null, new Date().getTime() + extname(file.originalname));
19 | },
20 | });
21 | app.use(multer({ storage }).single("image"));
22 | app.use(express.urlencoded({ extended: false }));
23 | app.use(express.json());
24 |
25 | // routes
26 | app.use("/api/books", booksRoutes);
27 |
28 | // static files
29 | app.use(express.static(join(__dirname, "public")));
30 |
31 | // uploads
32 | app.use("/uploads", express.static(join(__dirname, "public/uploads")));
33 |
34 | // frontend
35 | app.use(express.static(join(__dirname, "../frontend/dist")));
36 |
37 | export default app;
38 |
--------------------------------------------------------------------------------
/backend/config.js:
--------------------------------------------------------------------------------
1 | import { config } from "dotenv";
2 |
3 | config();
4 |
5 | export const PORT = process.env.PORT || 3000;
6 | export const MONGODB_URI =
7 | process.env.MONGODB_URI || "mongodb://localhost:27017/bookstore";
8 |
--------------------------------------------------------------------------------
/backend/controllers/books.controller.js:
--------------------------------------------------------------------------------
1 | import Book from "../models/Book.js";
2 | import path from "path";
3 | import fs from "fs/promises";
4 |
5 | export const getAllBooks = async (req, res) => {
6 | try {
7 | const books = await Book.find().sort("-_id");
8 | res.json(books);
9 | } catch (error) {
10 | return res.status(500).json({ message: error.message });
11 | }
12 | }
13 |
14 | export const createBook = async (req, res) => {
15 | try {
16 | const { title, author, isbn } = req.body;
17 |
18 | if (!title || !author || !isbn)
19 | return res.status(400).json({ message: "Please, provide all fields" });
20 |
21 | const newBook = new Book({ title, author, isbn });
22 |
23 | if (req.file) {
24 | newBook.imagePath = "/uploads/" + req.file.filename;
25 | }
26 |
27 | const savedBook = await newBook.save();
28 | res.json(savedBook);
29 | } catch (error) {
30 | return res.status(500).json({ message: error.message });
31 | }
32 | }
33 |
34 | export const deleteBook = async (req, res) => {
35 | try {
36 | const book = await Book.findByIdAndDelete(req.params.id);
37 | await fs.unlink(path.resolve("./backend/public/" + book.imagePath));
38 | res.json({ message: "Book Deleted" });
39 | } catch (error) {
40 | return res.status(500).json({ message: error.message });
41 | }
42 | }
43 |
44 | export const updateBook = async (req, res) => {
45 | try {
46 | const book = await Book.findByIdAndUpdate(req.params.id, req.body, {
47 | new: true,
48 | });
49 | res.json(book);
50 | } catch (error) {
51 | return res.status(500).json({ message: error.message });
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/backend/database.js:
--------------------------------------------------------------------------------
1 | import mongoose from "mongoose";
2 | import { MONGODB_URI } from "./config.js";
3 |
4 | try {
5 | const db = await mongoose.connect(MONGODB_URI);
6 | console.log("Database is connected to", db.connection.host);
7 | } catch (error) {
8 | console.error(error);
9 | }
10 |
--------------------------------------------------------------------------------
/backend/index.js:
--------------------------------------------------------------------------------
1 | import app from "./app.js";
2 | import { PORT } from "./config.js";
3 |
4 | // Initializations
5 | import "./database.js";
6 |
7 | // start the server
8 | app.listen(PORT);
9 | console.log(`Server started on port ${PORT}`);
10 |
--------------------------------------------------------------------------------
/backend/models/Book.js:
--------------------------------------------------------------------------------
1 | import mongoose from "mongoose";
2 |
3 | const BookSchema = new mongoose.Schema(
4 | {
5 | title: { type: String, required: true, trim: true },
6 | author: { type: String, required: true, trim: true },
7 | isbn: { type: String, required: true, trim: true },
8 | imagePath: { type: String },
9 | },
10 | {
11 | timestamps: true,
12 | }
13 | );
14 |
15 | export default mongoose.model("Book", BookSchema);
16 |
--------------------------------------------------------------------------------
/backend/routes/books.routes.js:
--------------------------------------------------------------------------------
1 | import { Router } from "express";
2 | import {
3 | createBook,
4 | deleteBook,
5 | getAllBooks,
6 | updateBook,
7 | } from "../controllers/books.controller.js";
8 |
9 | const router = Router();
10 |
11 | router.get("/", getAllBooks);
12 |
13 | router.post("/", createBook);
14 |
15 | router.delete("/:id", deleteBook);
16 |
17 | router.patch("/:id", updateBook);
18 |
19 | export default router;
20 |
--------------------------------------------------------------------------------
/frontend/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/frontend/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
11 | Vite App
12 |
13 |
14 |
15 |
20 |
64 |
65 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/frontend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "frontend",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "vite build",
9 | "preview": "vite preview"
10 | },
11 | "devDependencies": {
12 | "vite": "^3.0.0"
13 | }
14 | }
--------------------------------------------------------------------------------
/frontend/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: 5.4
2 |
3 | specifiers:
4 | vite: ^3.0.0
5 |
6 | devDependencies:
7 | vite: 3.2.3
8 |
9 | packages:
10 |
11 | /@esbuild/android-arm/0.15.13:
12 | resolution: {integrity: sha512-RY2fVI8O0iFUNvZirXaQ1vMvK0xhCcl0gqRj74Z6yEiO1zAUa7hbsdwZM1kzqbxHK7LFyMizipfXT3JME+12Hw==}
13 | engines: {node: '>=12'}
14 | cpu: [arm]
15 | os: [android]
16 | requiresBuild: true
17 | dev: true
18 | optional: true
19 |
20 | /@esbuild/linux-loong64/0.15.13:
21 | resolution: {integrity: sha512-+BoyIm4I8uJmH/QDIH0fu7MG0AEx9OXEDXnqptXCwKOlOqZiS4iraH1Nr7/ObLMokW3sOCeBNyD68ATcV9b9Ag==}
22 | engines: {node: '>=12'}
23 | cpu: [loong64]
24 | os: [linux]
25 | requiresBuild: true
26 | dev: true
27 | optional: true
28 |
29 | /esbuild-android-64/0.15.13:
30 | resolution: {integrity: sha512-yRorukXBlokwTip+Sy4MYskLhJsO0Kn0/Fj43s1krVblfwP+hMD37a4Wmg139GEsMLl+vh8WXp2mq/cTA9J97g==}
31 | engines: {node: '>=12'}
32 | cpu: [x64]
33 | os: [android]
34 | requiresBuild: true
35 | dev: true
36 | optional: true
37 |
38 | /esbuild-android-arm64/0.15.13:
39 | resolution: {integrity: sha512-TKzyymLD6PiVeyYa4c5wdPw87BeAiTXNtK6amWUcXZxkV51gOk5u5qzmDaYSwiWeecSNHamFsaFjLoi32QR5/w==}
40 | engines: {node: '>=12'}
41 | cpu: [arm64]
42 | os: [android]
43 | requiresBuild: true
44 | dev: true
45 | optional: true
46 |
47 | /esbuild-darwin-64/0.15.13:
48 | resolution: {integrity: sha512-WAx7c2DaOS6CrRcoYCgXgkXDliLnFv3pQLV6GeW1YcGEZq2Gnl8s9Pg7ahValZkpOa0iE/ojRVQ87sbUhF1Cbg==}
49 | engines: {node: '>=12'}
50 | cpu: [x64]
51 | os: [darwin]
52 | requiresBuild: true
53 | dev: true
54 | optional: true
55 |
56 | /esbuild-darwin-arm64/0.15.13:
57 | resolution: {integrity: sha512-U6jFsPfSSxC3V1CLiQqwvDuj3GGrtQNB3P3nNC3+q99EKf94UGpsG9l4CQ83zBs1NHrk1rtCSYT0+KfK5LsD8A==}
58 | engines: {node: '>=12'}
59 | cpu: [arm64]
60 | os: [darwin]
61 | requiresBuild: true
62 | dev: true
63 | optional: true
64 |
65 | /esbuild-freebsd-64/0.15.13:
66 | resolution: {integrity: sha512-whItJgDiOXaDG/idy75qqevIpZjnReZkMGCgQaBWZuKHoElDJC1rh7MpoUgupMcdfOd+PgdEwNQW9DAE6i8wyA==}
67 | engines: {node: '>=12'}
68 | cpu: [x64]
69 | os: [freebsd]
70 | requiresBuild: true
71 | dev: true
72 | optional: true
73 |
74 | /esbuild-freebsd-arm64/0.15.13:
75 | resolution: {integrity: sha512-6pCSWt8mLUbPtygv7cufV0sZLeylaMwS5Fznj6Rsx9G2AJJsAjQ9ifA+0rQEIg7DwJmi9it+WjzNTEAzzdoM3Q==}
76 | engines: {node: '>=12'}
77 | cpu: [arm64]
78 | os: [freebsd]
79 | requiresBuild: true
80 | dev: true
81 | optional: true
82 |
83 | /esbuild-linux-32/0.15.13:
84 | resolution: {integrity: sha512-VbZdWOEdrJiYApm2kkxoTOgsoCO1krBZ3quHdYk3g3ivWaMwNIVPIfEE0f0XQQ0u5pJtBsnk2/7OPiCFIPOe/w==}
85 | engines: {node: '>=12'}
86 | cpu: [ia32]
87 | os: [linux]
88 | requiresBuild: true
89 | dev: true
90 | optional: true
91 |
92 | /esbuild-linux-64/0.15.13:
93 | resolution: {integrity: sha512-rXmnArVNio6yANSqDQlIO4WiP+Cv7+9EuAHNnag7rByAqFVuRusLbGi2697A5dFPNXoO//IiogVwi3AdcfPC6A==}
94 | engines: {node: '>=12'}
95 | cpu: [x64]
96 | os: [linux]
97 | requiresBuild: true
98 | dev: true
99 | optional: true
100 |
101 | /esbuild-linux-arm/0.15.13:
102 | resolution: {integrity: sha512-Ac6LpfmJO8WhCMQmO253xX2IU2B3wPDbl4IvR0hnqcPrdfCaUa2j/lLMGTjmQ4W5JsJIdHEdW12dG8lFS0MbxQ==}
103 | engines: {node: '>=12'}
104 | cpu: [arm]
105 | os: [linux]
106 | requiresBuild: true
107 | dev: true
108 | optional: true
109 |
110 | /esbuild-linux-arm64/0.15.13:
111 | resolution: {integrity: sha512-alEMGU4Z+d17U7KQQw2IV8tQycO6T+rOrgW8OS22Ua25x6kHxoG6Ngry6Aq6uranC+pNWNMB6aHFPh7aTQdORQ==}
112 | engines: {node: '>=12'}
113 | cpu: [arm64]
114 | os: [linux]
115 | requiresBuild: true
116 | dev: true
117 | optional: true
118 |
119 | /esbuild-linux-mips64le/0.15.13:
120 | resolution: {integrity: sha512-47PgmyYEu+yN5rD/MbwS6DxP2FSGPo4Uxg5LwIdxTiyGC2XKwHhHyW7YYEDlSuXLQXEdTO7mYe8zQ74czP7W8A==}
121 | engines: {node: '>=12'}
122 | cpu: [mips64el]
123 | os: [linux]
124 | requiresBuild: true
125 | dev: true
126 | optional: true
127 |
128 | /esbuild-linux-ppc64le/0.15.13:
129 | resolution: {integrity: sha512-z6n28h2+PC1Ayle9DjKoBRcx/4cxHoOa2e689e2aDJSaKug3jXcQw7mM+GLg+9ydYoNzj8QxNL8ihOv/OnezhA==}
130 | engines: {node: '>=12'}
131 | cpu: [ppc64]
132 | os: [linux]
133 | requiresBuild: true
134 | dev: true
135 | optional: true
136 |
137 | /esbuild-linux-riscv64/0.15.13:
138 | resolution: {integrity: sha512-+Lu4zuuXuQhgLUGyZloWCqTslcCAjMZH1k3Xc9MSEJEpEFdpsSU0sRDXAnk18FKOfEjhu4YMGaykx9xjtpA6ow==}
139 | engines: {node: '>=12'}
140 | cpu: [riscv64]
141 | os: [linux]
142 | requiresBuild: true
143 | dev: true
144 | optional: true
145 |
146 | /esbuild-linux-s390x/0.15.13:
147 | resolution: {integrity: sha512-BMeXRljruf7J0TMxD5CIXS65y7puiZkAh+s4XFV9qy16SxOuMhxhVIXYLnbdfLrsYGFzx7U9mcdpFWkkvy/Uag==}
148 | engines: {node: '>=12'}
149 | cpu: [s390x]
150 | os: [linux]
151 | requiresBuild: true
152 | dev: true
153 | optional: true
154 |
155 | /esbuild-netbsd-64/0.15.13:
156 | resolution: {integrity: sha512-EHj9QZOTel581JPj7UO3xYbltFTYnHy+SIqJVq6yd3KkCrsHRbapiPb0Lx3EOOtybBEE9EyqbmfW1NlSDsSzvQ==}
157 | engines: {node: '>=12'}
158 | cpu: [x64]
159 | os: [netbsd]
160 | requiresBuild: true
161 | dev: true
162 | optional: true
163 |
164 | /esbuild-openbsd-64/0.15.13:
165 | resolution: {integrity: sha512-nkuDlIjF/sfUhfx8SKq0+U+Fgx5K9JcPq1mUodnxI0x4kBdCv46rOGWbuJ6eof2n3wdoCLccOoJAbg9ba/bT2w==}
166 | engines: {node: '>=12'}
167 | cpu: [x64]
168 | os: [openbsd]
169 | requiresBuild: true
170 | dev: true
171 | optional: true
172 |
173 | /esbuild-sunos-64/0.15.13:
174 | resolution: {integrity: sha512-jVeu2GfxZQ++6lRdY43CS0Tm/r4WuQQ0Pdsrxbw+aOrHQPHV0+LNOLnvbN28M7BSUGnJnHkHm2HozGgNGyeIRw==}
175 | engines: {node: '>=12'}
176 | cpu: [x64]
177 | os: [sunos]
178 | requiresBuild: true
179 | dev: true
180 | optional: true
181 |
182 | /esbuild-windows-32/0.15.13:
183 | resolution: {integrity: sha512-XoF2iBf0wnqo16SDq+aDGi/+QbaLFpkiRarPVssMh9KYbFNCqPLlGAWwDvxEVz+ywX6Si37J2AKm+AXq1kC0JA==}
184 | engines: {node: '>=12'}
185 | cpu: [ia32]
186 | os: [win32]
187 | requiresBuild: true
188 | dev: true
189 | optional: true
190 |
191 | /esbuild-windows-64/0.15.13:
192 | resolution: {integrity: sha512-Et6htEfGycjDrtqb2ng6nT+baesZPYQIW+HUEHK4D1ncggNrDNk3yoboYQ5KtiVrw/JaDMNttz8rrPubV/fvPQ==}
193 | engines: {node: '>=12'}
194 | cpu: [x64]
195 | os: [win32]
196 | requiresBuild: true
197 | dev: true
198 | optional: true
199 |
200 | /esbuild-windows-arm64/0.15.13:
201 | resolution: {integrity: sha512-3bv7tqntThQC9SWLRouMDmZnlOukBhOCTlkzNqzGCmrkCJI7io5LLjwJBOVY6kOUlIvdxbooNZwjtBvj+7uuVg==}
202 | engines: {node: '>=12'}
203 | cpu: [arm64]
204 | os: [win32]
205 | requiresBuild: true
206 | dev: true
207 | optional: true
208 |
209 | /esbuild/0.15.13:
210 | resolution: {integrity: sha512-Cu3SC84oyzzhrK/YyN4iEVy2jZu5t2fz66HEOShHURcjSkOSAVL8C/gfUT+lDJxkVHpg8GZ10DD0rMHRPqMFaQ==}
211 | engines: {node: '>=12'}
212 | hasBin: true
213 | requiresBuild: true
214 | optionalDependencies:
215 | '@esbuild/android-arm': 0.15.13
216 | '@esbuild/linux-loong64': 0.15.13
217 | esbuild-android-64: 0.15.13
218 | esbuild-android-arm64: 0.15.13
219 | esbuild-darwin-64: 0.15.13
220 | esbuild-darwin-arm64: 0.15.13
221 | esbuild-freebsd-64: 0.15.13
222 | esbuild-freebsd-arm64: 0.15.13
223 | esbuild-linux-32: 0.15.13
224 | esbuild-linux-64: 0.15.13
225 | esbuild-linux-arm: 0.15.13
226 | esbuild-linux-arm64: 0.15.13
227 | esbuild-linux-mips64le: 0.15.13
228 | esbuild-linux-ppc64le: 0.15.13
229 | esbuild-linux-riscv64: 0.15.13
230 | esbuild-linux-s390x: 0.15.13
231 | esbuild-netbsd-64: 0.15.13
232 | esbuild-openbsd-64: 0.15.13
233 | esbuild-sunos-64: 0.15.13
234 | esbuild-windows-32: 0.15.13
235 | esbuild-windows-64: 0.15.13
236 | esbuild-windows-arm64: 0.15.13
237 | dev: true
238 |
239 | /fsevents/2.3.2:
240 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
241 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
242 | os: [darwin]
243 | requiresBuild: true
244 | dev: true
245 | optional: true
246 |
247 | /function-bind/1.1.1:
248 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
249 | dev: true
250 |
251 | /has/1.0.3:
252 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
253 | engines: {node: '>= 0.4.0'}
254 | dependencies:
255 | function-bind: 1.1.1
256 | dev: true
257 |
258 | /is-core-module/2.11.0:
259 | resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==}
260 | dependencies:
261 | has: 1.0.3
262 | dev: true
263 |
264 | /nanoid/3.3.4:
265 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
266 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
267 | hasBin: true
268 | dev: true
269 |
270 | /path-parse/1.0.7:
271 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
272 | dev: true
273 |
274 | /picocolors/1.0.0:
275 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
276 | dev: true
277 |
278 | /postcss/8.4.19:
279 | resolution: {integrity: sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==}
280 | engines: {node: ^10 || ^12 || >=14}
281 | dependencies:
282 | nanoid: 3.3.4
283 | picocolors: 1.0.0
284 | source-map-js: 1.0.2
285 | dev: true
286 |
287 | /resolve/1.22.1:
288 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
289 | hasBin: true
290 | dependencies:
291 | is-core-module: 2.11.0
292 | path-parse: 1.0.7
293 | supports-preserve-symlinks-flag: 1.0.0
294 | dev: true
295 |
296 | /rollup/2.79.1:
297 | resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==}
298 | engines: {node: '>=10.0.0'}
299 | hasBin: true
300 | optionalDependencies:
301 | fsevents: 2.3.2
302 | dev: true
303 |
304 | /source-map-js/1.0.2:
305 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
306 | engines: {node: '>=0.10.0'}
307 | dev: true
308 |
309 | /supports-preserve-symlinks-flag/1.0.0:
310 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
311 | engines: {node: '>= 0.4'}
312 | dev: true
313 |
314 | /vite/3.2.3:
315 | resolution: {integrity: sha512-h8jl1TZ76eGs3o2dIBSsvXDLb1m/Ec1iej8ZMdz+PsaFUsftZeWe2CZOI3qogEsMNaywc17gu0q6cQDzh/weCQ==}
316 | engines: {node: ^14.18.0 || >=16.0.0}
317 | hasBin: true
318 | peerDependencies:
319 | '@types/node': '>= 14'
320 | less: '*'
321 | sass: '*'
322 | stylus: '*'
323 | sugarss: '*'
324 | terser: ^5.4.0
325 | peerDependenciesMeta:
326 | '@types/node':
327 | optional: true
328 | less:
329 | optional: true
330 | sass:
331 | optional: true
332 | stylus:
333 | optional: true
334 | sugarss:
335 | optional: true
336 | terser:
337 | optional: true
338 | dependencies:
339 | esbuild: 0.15.13
340 | postcss: 8.4.19
341 | resolve: 1.22.1
342 | rollup: 2.79.1
343 | optionalDependencies:
344 | fsevents: 2.3.2
345 | dev: true
346 |
--------------------------------------------------------------------------------
/frontend/public/vite.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/frontend/src/UI.js:
--------------------------------------------------------------------------------
1 | import { BookService } from "./services/BookService";
2 | import { format } from "timeago.js";
3 |
4 | const bookService = new BookService(
5 | `${import.meta.env.VITE_API_URL}/api/books`
6 | );
7 |
8 | export class UI {
9 | async renderBooks() {
10 | const books = await bookService.getBooks();
11 | const booksCardContainer = document.getElementById("books-cards");
12 | booksCardContainer.innerHTML = "";
13 |
14 | books.forEach((book) => {
15 | const div = document.createElement("div");
16 | div.className = "animated fadeInRight";
17 | div.innerHTML = `
18 |
19 |
20 |
21 |

26 |
27 |
28 |
29 |
30 | ${book.title}
31 | Delete
34 |
35 |
${book.author}
36 |
37 |
38 |
39 |
42 |
43 | `;
44 | booksCardContainer.appendChild(div);
45 | });
46 | }
47 |
48 | async addANewBook(book) {
49 | await bookService.postBook(book);
50 | this.renderBooks();
51 | this.clearBookForm();
52 | }
53 |
54 | clearBookForm() {
55 | document.getElementById("book-form").reset();
56 | document.getElementById("title").focus();
57 | }
58 |
59 | renderMessage(message, colorMessage, secondsToRemove) {
60 | // Creating a div
61 | const div = document.createElement("div");
62 | // Styling the div
63 | div.className = `message ${colorMessage}`;
64 | // Adding Text to the div
65 | div.appendChild(document.createTextNode(message));
66 | // Puting in the documnet
67 | const container = document.querySelector(".col-md-4");
68 | const bookForm = document.querySelector("#book-form");
69 | container.insertBefore(div, bookForm);
70 | // Removing the div after some secconds
71 | setTimeout(() => {
72 | document.querySelector(".message").remove();
73 | }, secondsToRemove);
74 | }
75 |
76 | async deleteBook(bookId) {
77 | await bookService.deleteBook(bookId);
78 | this.renderBooks();
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/frontend/src/components/bookForm.js:
--------------------------------------------------------------------------------
1 | import {UI} from "../UI.js";
2 |
3 | const bookForm = document.getElementById("book-form");
4 |
5 | bookForm.addEventListener("submit", (e) => {
6 | e.preventDefault();
7 | const title = bookForm["title"].value;
8 | const author = bookForm["author"].value;
9 | const isbn = bookForm["isbn"].value;
10 |
11 | const image = document.getElementById("image").files;
12 |
13 | const formData = new FormData();
14 | formData.append("image", image[0]);
15 | formData.append("title", title);
16 | formData.append("author", author);
17 | formData.append("isbn", isbn);
18 |
19 | for (var pair of formData.entries()) {
20 | console.log(pair[0] + ", " + pair[1]);
21 | }
22 |
23 | // Instatiating the UI
24 | const ui = new UI();
25 |
26 | // // Validating User Input
27 | if (title === "" || author === "" || isbn === "") {
28 | ui.renderMessage("Please fill all the fields", "error", 3000);
29 | } else {
30 | // Pass the new book to the UI
31 | ui.addANewBook(formData);
32 | ui.renderMessage("New Book Added Successfully", "success", 2000);
33 | }
34 | });
35 |
--------------------------------------------------------------------------------
/frontend/src/main.js:
--------------------------------------------------------------------------------
1 | import "./styles/app.css";
2 | import { UI } from "./UI.js";
3 | import "./components/bookForm.js";
4 |
5 | document.addEventListener("DOMContentLoaded", () => {
6 | const ui = new UI();
7 | ui.renderBooks();
8 | });
9 |
10 |
11 | document.getElementById("books-cards").addEventListener("click", (e) => {
12 | const ui = new UI();
13 | if (e.target.classList.contains("delete")) {
14 | ui.deleteBook(e.target.getAttribute("_id"));
15 | ui.renderMessage("Book Deleted Successfully", "success", 3000);
16 | }
17 | e.preventDefault();
18 | });
19 |
--------------------------------------------------------------------------------
/frontend/src/models/Book.js:
--------------------------------------------------------------------------------
1 | export class Book {
2 | constructor(title, author, isbn) {
3 | this.title = title;
4 | this.author = author;
5 | this.isbn = isbn;
6 | }
7 | }
8 |
9 | export default Book;
10 |
--------------------------------------------------------------------------------
/frontend/src/services/BookService.js:
--------------------------------------------------------------------------------
1 | export class BookService {
2 | constructor(URL) {
3 | this.URI = URL;
4 | }
5 |
6 | async getBooks() {
7 | return (await fetch(this.URI)).json()
8 | }
9 |
10 | async postBook(book) {
11 | const res = await fetch(this.URI, {
12 | method: "POST",
13 | body: book,
14 | });
15 | const data = await res.json();
16 | }
17 |
18 | async deleteBook(bookId) {
19 | const res = await fetch(`${this.URI}/${bookId}`, {
20 | headers: {
21 | "Content-Type": "application/json",
22 | },
23 | method: "Delete",
24 | });
25 | const data = await res.json();
26 | console.log(data);
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/frontend/src/styles/app.css:
--------------------------------------------------------------------------------
1 | .success, .error {
2 | color: white;
3 | padding: 10px;
4 | margin: 5px 0 15px 0;
5 | }
6 |
7 | .success {
8 | background: green;
9 | }
10 |
11 | .error {
12 | background: red;
13 | }
14 |
15 | body {
16 | background: #303030;
17 | }
18 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "javascript-fullstack-simple",
3 | "version": "1.0.0",
4 | "description": "",
5 | "type": "module",
6 | "main": "index.js",
7 | "scripts": {
8 | "dev": "nodemon backend/index.js --ignore frontend",
9 | "build": "npm run build --prefix frontend",
10 | "start": "node backend/index.js"
11 | },
12 | "keywords": [],
13 | "author": "",
14 | "license": "ISC",
15 | "devDependencies": {
16 | "nodemon": "^2.0.20",
17 | "timeago.js": "^4.0.2"
18 | },
19 | "dependencies": {
20 | "cors": "^2.8.5",
21 | "dotenv": "^16.0.3",
22 | "express": "^4.18.2",
23 | "mongoose": "^6.7.2",
24 | "morgan": "^1.10.0",
25 | "multer": "^1.4.4"
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: 5.4
2 |
3 | specifiers:
4 | cors: ^2.8.5
5 | dotenv: ^16.0.3
6 | express: ^4.18.2
7 | mongoose: ^6.7.2
8 | morgan: ^1.10.0
9 | multer: ^1.4.4
10 | nodemon: ^2.0.20
11 | timeago.js: ^4.0.2
12 |
13 | dependencies:
14 | cors: 2.8.5
15 | dotenv: 16.0.3
16 | express: 4.18.2
17 | mongoose: 6.7.2
18 | morgan: 1.10.0
19 | multer: 1.4.4
20 |
21 | devDependencies:
22 | nodemon: 2.0.20
23 | timeago.js: 4.0.2
24 |
25 | packages:
26 |
27 | /@aws-crypto/ie11-detection/2.0.2:
28 | resolution: {integrity: sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==}
29 | dependencies:
30 | tslib: 1.14.1
31 | dev: false
32 | optional: true
33 |
34 | /@aws-crypto/sha256-browser/2.0.0:
35 | resolution: {integrity: sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==}
36 | dependencies:
37 | '@aws-crypto/ie11-detection': 2.0.2
38 | '@aws-crypto/sha256-js': 2.0.0
39 | '@aws-crypto/supports-web-crypto': 2.0.2
40 | '@aws-crypto/util': 2.0.2
41 | '@aws-sdk/types': 3.208.0
42 | '@aws-sdk/util-locate-window': 3.208.0
43 | '@aws-sdk/util-utf8-browser': 3.188.0
44 | tslib: 1.14.1
45 | dev: false
46 | optional: true
47 |
48 | /@aws-crypto/sha256-js/2.0.0:
49 | resolution: {integrity: sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==}
50 | dependencies:
51 | '@aws-crypto/util': 2.0.2
52 | '@aws-sdk/types': 3.208.0
53 | tslib: 1.14.1
54 | dev: false
55 | optional: true
56 |
57 | /@aws-crypto/supports-web-crypto/2.0.2:
58 | resolution: {integrity: sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==}
59 | dependencies:
60 | tslib: 1.14.1
61 | dev: false
62 | optional: true
63 |
64 | /@aws-crypto/util/2.0.2:
65 | resolution: {integrity: sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==}
66 | dependencies:
67 | '@aws-sdk/types': 3.208.0
68 | '@aws-sdk/util-utf8-browser': 3.188.0
69 | tslib: 1.14.1
70 | dev: false
71 | optional: true
72 |
73 | /@aws-sdk/abort-controller/3.208.0:
74 | resolution: {integrity: sha512-mQkDR+8VLCafg9KI4TgftftBOL170ricyb+HgV8n5jLDrEG+TfOfud8e6us2lIFESEuMpohC+/8yIcf6JjKkMg==}
75 | engines: {node: '>=14.0.0'}
76 | dependencies:
77 | '@aws-sdk/types': 3.208.0
78 | tslib: 2.4.1
79 | dev: false
80 | optional: true
81 |
82 | /@aws-sdk/client-cognito-identity/3.209.0:
83 | resolution: {integrity: sha512-u7lqFKi2PXC/LZzBEBCczlF78/bclv5Gndy4AWxNBdDBbJyuQrE+hk+IIwQQznCeFfgFOhpQMcWFPZH3tSH/qQ==}
84 | engines: {node: '>=14.0.0'}
85 | dependencies:
86 | '@aws-crypto/sha256-browser': 2.0.0
87 | '@aws-crypto/sha256-js': 2.0.0
88 | '@aws-sdk/client-sts': 3.209.0
89 | '@aws-sdk/config-resolver': 3.209.0
90 | '@aws-sdk/credential-provider-node': 3.209.0
91 | '@aws-sdk/fetch-http-handler': 3.208.0
92 | '@aws-sdk/hash-node': 3.208.0
93 | '@aws-sdk/invalid-dependency': 3.208.0
94 | '@aws-sdk/middleware-content-length': 3.208.0
95 | '@aws-sdk/middleware-endpoint': 3.208.0
96 | '@aws-sdk/middleware-host-header': 3.208.0
97 | '@aws-sdk/middleware-logger': 3.208.0
98 | '@aws-sdk/middleware-recursion-detection': 3.208.0
99 | '@aws-sdk/middleware-retry': 3.209.0
100 | '@aws-sdk/middleware-serde': 3.208.0
101 | '@aws-sdk/middleware-signing': 3.208.0
102 | '@aws-sdk/middleware-stack': 3.208.0
103 | '@aws-sdk/middleware-user-agent': 3.208.0
104 | '@aws-sdk/node-config-provider': 3.209.0
105 | '@aws-sdk/node-http-handler': 3.208.0
106 | '@aws-sdk/protocol-http': 3.208.0
107 | '@aws-sdk/smithy-client': 3.209.0
108 | '@aws-sdk/types': 3.208.0
109 | '@aws-sdk/url-parser': 3.208.0
110 | '@aws-sdk/util-base64': 3.208.0
111 | '@aws-sdk/util-body-length-browser': 3.188.0
112 | '@aws-sdk/util-body-length-node': 3.208.0
113 | '@aws-sdk/util-defaults-mode-browser': 3.209.0
114 | '@aws-sdk/util-defaults-mode-node': 3.209.0
115 | '@aws-sdk/util-endpoints': 3.209.0
116 | '@aws-sdk/util-user-agent-browser': 3.208.0
117 | '@aws-sdk/util-user-agent-node': 3.209.0
118 | '@aws-sdk/util-utf8-browser': 3.188.0
119 | '@aws-sdk/util-utf8-node': 3.208.0
120 | tslib: 2.4.1
121 | transitivePeerDependencies:
122 | - aws-crt
123 | dev: false
124 | optional: true
125 |
126 | /@aws-sdk/client-sso-oidc/3.209.0:
127 | resolution: {integrity: sha512-KSmT181IcE32lqoZsS0h400qiL/BSQ84DS1iPOqP0NkLcgnvmOkKygVpYjTql2xSUWLQBwPNFihYJ+jmAj3HtQ==}
128 | engines: {node: '>=14.0.0'}
129 | dependencies:
130 | '@aws-crypto/sha256-browser': 2.0.0
131 | '@aws-crypto/sha256-js': 2.0.0
132 | '@aws-sdk/config-resolver': 3.209.0
133 | '@aws-sdk/fetch-http-handler': 3.208.0
134 | '@aws-sdk/hash-node': 3.208.0
135 | '@aws-sdk/invalid-dependency': 3.208.0
136 | '@aws-sdk/middleware-content-length': 3.208.0
137 | '@aws-sdk/middleware-endpoint': 3.208.0
138 | '@aws-sdk/middleware-host-header': 3.208.0
139 | '@aws-sdk/middleware-logger': 3.208.0
140 | '@aws-sdk/middleware-recursion-detection': 3.208.0
141 | '@aws-sdk/middleware-retry': 3.209.0
142 | '@aws-sdk/middleware-serde': 3.208.0
143 | '@aws-sdk/middleware-stack': 3.208.0
144 | '@aws-sdk/middleware-user-agent': 3.208.0
145 | '@aws-sdk/node-config-provider': 3.209.0
146 | '@aws-sdk/node-http-handler': 3.208.0
147 | '@aws-sdk/protocol-http': 3.208.0
148 | '@aws-sdk/smithy-client': 3.209.0
149 | '@aws-sdk/types': 3.208.0
150 | '@aws-sdk/url-parser': 3.208.0
151 | '@aws-sdk/util-base64': 3.208.0
152 | '@aws-sdk/util-body-length-browser': 3.188.0
153 | '@aws-sdk/util-body-length-node': 3.208.0
154 | '@aws-sdk/util-defaults-mode-browser': 3.209.0
155 | '@aws-sdk/util-defaults-mode-node': 3.209.0
156 | '@aws-sdk/util-endpoints': 3.209.0
157 | '@aws-sdk/util-user-agent-browser': 3.208.0
158 | '@aws-sdk/util-user-agent-node': 3.209.0
159 | '@aws-sdk/util-utf8-browser': 3.188.0
160 | '@aws-sdk/util-utf8-node': 3.208.0
161 | tslib: 2.4.1
162 | transitivePeerDependencies:
163 | - aws-crt
164 | dev: false
165 | optional: true
166 |
167 | /@aws-sdk/client-sso/3.209.0:
168 | resolution: {integrity: sha512-rh9QktLCOVTbvDzCb0ikSe4Q1I35Wxcx5XZ7k1J+2ze54FOBfCr3vOwcQpo5tpYWEe1Ysbt3gvA8RAqj9oDFdw==}
169 | engines: {node: '>=14.0.0'}
170 | dependencies:
171 | '@aws-crypto/sha256-browser': 2.0.0
172 | '@aws-crypto/sha256-js': 2.0.0
173 | '@aws-sdk/config-resolver': 3.209.0
174 | '@aws-sdk/fetch-http-handler': 3.208.0
175 | '@aws-sdk/hash-node': 3.208.0
176 | '@aws-sdk/invalid-dependency': 3.208.0
177 | '@aws-sdk/middleware-content-length': 3.208.0
178 | '@aws-sdk/middleware-endpoint': 3.208.0
179 | '@aws-sdk/middleware-host-header': 3.208.0
180 | '@aws-sdk/middleware-logger': 3.208.0
181 | '@aws-sdk/middleware-recursion-detection': 3.208.0
182 | '@aws-sdk/middleware-retry': 3.209.0
183 | '@aws-sdk/middleware-serde': 3.208.0
184 | '@aws-sdk/middleware-stack': 3.208.0
185 | '@aws-sdk/middleware-user-agent': 3.208.0
186 | '@aws-sdk/node-config-provider': 3.209.0
187 | '@aws-sdk/node-http-handler': 3.208.0
188 | '@aws-sdk/protocol-http': 3.208.0
189 | '@aws-sdk/smithy-client': 3.209.0
190 | '@aws-sdk/types': 3.208.0
191 | '@aws-sdk/url-parser': 3.208.0
192 | '@aws-sdk/util-base64': 3.208.0
193 | '@aws-sdk/util-body-length-browser': 3.188.0
194 | '@aws-sdk/util-body-length-node': 3.208.0
195 | '@aws-sdk/util-defaults-mode-browser': 3.209.0
196 | '@aws-sdk/util-defaults-mode-node': 3.209.0
197 | '@aws-sdk/util-endpoints': 3.209.0
198 | '@aws-sdk/util-user-agent-browser': 3.208.0
199 | '@aws-sdk/util-user-agent-node': 3.209.0
200 | '@aws-sdk/util-utf8-browser': 3.188.0
201 | '@aws-sdk/util-utf8-node': 3.208.0
202 | tslib: 2.4.1
203 | transitivePeerDependencies:
204 | - aws-crt
205 | dev: false
206 | optional: true
207 |
208 | /@aws-sdk/client-sts/3.209.0:
209 | resolution: {integrity: sha512-zWlM+9/JbshEgrG79KZlqYusUziKiKqe8vRlvQ9wcuEHNbQnAri4UvObEKik+7YpTBeP3mR+US1T71G0PqJByw==}
210 | engines: {node: '>=14.0.0'}
211 | dependencies:
212 | '@aws-crypto/sha256-browser': 2.0.0
213 | '@aws-crypto/sha256-js': 2.0.0
214 | '@aws-sdk/config-resolver': 3.209.0
215 | '@aws-sdk/credential-provider-node': 3.209.0
216 | '@aws-sdk/fetch-http-handler': 3.208.0
217 | '@aws-sdk/hash-node': 3.208.0
218 | '@aws-sdk/invalid-dependency': 3.208.0
219 | '@aws-sdk/middleware-content-length': 3.208.0
220 | '@aws-sdk/middleware-endpoint': 3.208.0
221 | '@aws-sdk/middleware-host-header': 3.208.0
222 | '@aws-sdk/middleware-logger': 3.208.0
223 | '@aws-sdk/middleware-recursion-detection': 3.208.0
224 | '@aws-sdk/middleware-retry': 3.209.0
225 | '@aws-sdk/middleware-sdk-sts': 3.208.0
226 | '@aws-sdk/middleware-serde': 3.208.0
227 | '@aws-sdk/middleware-signing': 3.208.0
228 | '@aws-sdk/middleware-stack': 3.208.0
229 | '@aws-sdk/middleware-user-agent': 3.208.0
230 | '@aws-sdk/node-config-provider': 3.209.0
231 | '@aws-sdk/node-http-handler': 3.208.0
232 | '@aws-sdk/protocol-http': 3.208.0
233 | '@aws-sdk/smithy-client': 3.209.0
234 | '@aws-sdk/types': 3.208.0
235 | '@aws-sdk/url-parser': 3.208.0
236 | '@aws-sdk/util-base64': 3.208.0
237 | '@aws-sdk/util-body-length-browser': 3.188.0
238 | '@aws-sdk/util-body-length-node': 3.208.0
239 | '@aws-sdk/util-defaults-mode-browser': 3.209.0
240 | '@aws-sdk/util-defaults-mode-node': 3.209.0
241 | '@aws-sdk/util-endpoints': 3.209.0
242 | '@aws-sdk/util-user-agent-browser': 3.208.0
243 | '@aws-sdk/util-user-agent-node': 3.209.0
244 | '@aws-sdk/util-utf8-browser': 3.188.0
245 | '@aws-sdk/util-utf8-node': 3.208.0
246 | fast-xml-parser: 4.0.11
247 | tslib: 2.4.1
248 | transitivePeerDependencies:
249 | - aws-crt
250 | dev: false
251 | optional: true
252 |
253 | /@aws-sdk/config-resolver/3.209.0:
254 | resolution: {integrity: sha512-wLXI1Jg9xx9wE8vdIfOgSKnoBWbn9j3IvW4+7PnM/nf5xC30/Jp4j+JndEG/BKyDQF7HJQTIeRpSkwKaqJhCRA==}
255 | engines: {node: '>=14.0.0'}
256 | dependencies:
257 | '@aws-sdk/signature-v4': 3.208.0
258 | '@aws-sdk/types': 3.208.0
259 | '@aws-sdk/util-config-provider': 3.208.0
260 | '@aws-sdk/util-middleware': 3.208.0
261 | tslib: 2.4.1
262 | dev: false
263 | optional: true
264 |
265 | /@aws-sdk/credential-provider-cognito-identity/3.209.0:
266 | resolution: {integrity: sha512-31OAwgElZlJyPoV0WwerRSIrrlMlbXX6rpoBceHu9m+wACu18P+GwqKjMCjTL04Q+z7zr699pLCLp5lbLYJe3w==}
267 | engines: {node: '>=14.0.0'}
268 | dependencies:
269 | '@aws-sdk/client-cognito-identity': 3.209.0
270 | '@aws-sdk/property-provider': 3.208.0
271 | '@aws-sdk/types': 3.208.0
272 | tslib: 2.4.1
273 | transitivePeerDependencies:
274 | - aws-crt
275 | dev: false
276 | optional: true
277 |
278 | /@aws-sdk/credential-provider-env/3.208.0:
279 | resolution: {integrity: sha512-FB+KUSpZc03wVTXxGnMmgtaP0sJOv0D7oyogHb7wcf5b7RjjwqoaeUcJHTdKRZaW6e1foLk3/L9uebxiWefDbQ==}
280 | engines: {node: '>=14.0.0'}
281 | dependencies:
282 | '@aws-sdk/property-provider': 3.208.0
283 | '@aws-sdk/types': 3.208.0
284 | tslib: 2.4.1
285 | dev: false
286 | optional: true
287 |
288 | /@aws-sdk/credential-provider-imds/3.209.0:
289 | resolution: {integrity: sha512-EjA1nWduIHjALjNF6O2lpKVOoTIlfGHgvqCxjFf7XNqBTTKWCxEflcmUgqXwo9A7TU0mTTyr7nLGMAsNE2CR3w==}
290 | engines: {node: '>=14.0.0'}
291 | dependencies:
292 | '@aws-sdk/node-config-provider': 3.209.0
293 | '@aws-sdk/property-provider': 3.208.0
294 | '@aws-sdk/types': 3.208.0
295 | '@aws-sdk/url-parser': 3.208.0
296 | tslib: 2.4.1
297 | dev: false
298 | optional: true
299 |
300 | /@aws-sdk/credential-provider-ini/3.209.0:
301 | resolution: {integrity: sha512-aszuzkKIg7V+tCcq8RNpr1dAyECXWvJRAvzlmE5ZBYtjHMIX/qVAqSP4sfLNeI/Qagyj7W0TeVA1XVRjkivjYA==}
302 | engines: {node: '>=14.0.0'}
303 | dependencies:
304 | '@aws-sdk/credential-provider-env': 3.208.0
305 | '@aws-sdk/credential-provider-imds': 3.209.0
306 | '@aws-sdk/credential-provider-sso': 3.209.0
307 | '@aws-sdk/credential-provider-web-identity': 3.208.0
308 | '@aws-sdk/property-provider': 3.208.0
309 | '@aws-sdk/shared-ini-file-loader': 3.209.0
310 | '@aws-sdk/types': 3.208.0
311 | tslib: 2.4.1
312 | transitivePeerDependencies:
313 | - aws-crt
314 | dev: false
315 | optional: true
316 |
317 | /@aws-sdk/credential-provider-node/3.209.0:
318 | resolution: {integrity: sha512-R0kV6B+GxbfdSowf/6eeEAHZC6X7P/IxJ/o/gCuMmAOixge0e6AWVgCvrd0cg0togJHWbmoYSuUyqWPIMxM1Yg==}
319 | engines: {node: '>=14.0.0'}
320 | dependencies:
321 | '@aws-sdk/credential-provider-env': 3.208.0
322 | '@aws-sdk/credential-provider-imds': 3.209.0
323 | '@aws-sdk/credential-provider-ini': 3.209.0
324 | '@aws-sdk/credential-provider-process': 3.209.0
325 | '@aws-sdk/credential-provider-sso': 3.209.0
326 | '@aws-sdk/credential-provider-web-identity': 3.208.0
327 | '@aws-sdk/property-provider': 3.208.0
328 | '@aws-sdk/shared-ini-file-loader': 3.209.0
329 | '@aws-sdk/types': 3.208.0
330 | tslib: 2.4.1
331 | transitivePeerDependencies:
332 | - aws-crt
333 | dev: false
334 | optional: true
335 |
336 | /@aws-sdk/credential-provider-process/3.209.0:
337 | resolution: {integrity: sha512-G0urC5p1kgUfgpK8lncdisSewa8onnoQAVdf2Uh51hOqc7UufGce+ouvLH8J2iMkMaL1MSyu8fqwfZNyDtH37g==}
338 | engines: {node: '>=14.0.0'}
339 | dependencies:
340 | '@aws-sdk/property-provider': 3.208.0
341 | '@aws-sdk/shared-ini-file-loader': 3.209.0
342 | '@aws-sdk/types': 3.208.0
343 | tslib: 2.4.1
344 | dev: false
345 | optional: true
346 |
347 | /@aws-sdk/credential-provider-sso/3.209.0:
348 | resolution: {integrity: sha512-SKzUYOn2EFx58+iU1KihGLtBz9s1jolWUQ6HYxOy4AkWnZVGUt9Vb4mIo6wB07nSSUgYRxOSYn21SKvvBzpc2g==}
349 | engines: {node: '>=14.0.0'}
350 | dependencies:
351 | '@aws-sdk/client-sso': 3.209.0
352 | '@aws-sdk/property-provider': 3.208.0
353 | '@aws-sdk/shared-ini-file-loader': 3.209.0
354 | '@aws-sdk/token-providers': 3.209.0
355 | '@aws-sdk/types': 3.208.0
356 | tslib: 2.4.1
357 | transitivePeerDependencies:
358 | - aws-crt
359 | dev: false
360 | optional: true
361 |
362 | /@aws-sdk/credential-provider-web-identity/3.208.0:
363 | resolution: {integrity: sha512-7wtrdEr8uvDr5t0stimrXGsW4G+TQyluZ9OucCCY0HXgNihmnk1BIu+COuOSxRtFXHwCh4rIPaVE1ABG2Mq24g==}
364 | engines: {node: '>=14.0.0'}
365 | dependencies:
366 | '@aws-sdk/property-provider': 3.208.0
367 | '@aws-sdk/types': 3.208.0
368 | tslib: 2.4.1
369 | dev: false
370 | optional: true
371 |
372 | /@aws-sdk/credential-providers/3.209.0:
373 | resolution: {integrity: sha512-/oQJwzTedZC5TbQJ2pwHcpbcZS7O1RzP/3+cICw73WrIjlrpS1JGmTCvTGrIfGE8RUk5GKdLN3fjgTpVCS82cA==}
374 | engines: {node: '>=14.0.0'}
375 | requiresBuild: true
376 | dependencies:
377 | '@aws-sdk/client-cognito-identity': 3.209.0
378 | '@aws-sdk/client-sso': 3.209.0
379 | '@aws-sdk/client-sts': 3.209.0
380 | '@aws-sdk/credential-provider-cognito-identity': 3.209.0
381 | '@aws-sdk/credential-provider-env': 3.208.0
382 | '@aws-sdk/credential-provider-imds': 3.209.0
383 | '@aws-sdk/credential-provider-ini': 3.209.0
384 | '@aws-sdk/credential-provider-node': 3.209.0
385 | '@aws-sdk/credential-provider-process': 3.209.0
386 | '@aws-sdk/credential-provider-sso': 3.209.0
387 | '@aws-sdk/credential-provider-web-identity': 3.208.0
388 | '@aws-sdk/property-provider': 3.208.0
389 | '@aws-sdk/shared-ini-file-loader': 3.209.0
390 | '@aws-sdk/types': 3.208.0
391 | tslib: 2.4.1
392 | transitivePeerDependencies:
393 | - aws-crt
394 | dev: false
395 | optional: true
396 |
397 | /@aws-sdk/fetch-http-handler/3.208.0:
398 | resolution: {integrity: sha512-GuwkwOeyLKCbSbnFlyHdlKd7u54cnQUI8NfVDAxpZvomY3PV476Tzg8XEyOYE67r5rR6XMqn6IK1PmFAACY+ew==}
399 | dependencies:
400 | '@aws-sdk/protocol-http': 3.208.0
401 | '@aws-sdk/querystring-builder': 3.208.0
402 | '@aws-sdk/types': 3.208.0
403 | '@aws-sdk/util-base64': 3.208.0
404 | tslib: 2.4.1
405 | dev: false
406 | optional: true
407 |
408 | /@aws-sdk/hash-node/3.208.0:
409 | resolution: {integrity: sha512-X5u6nD9+wzaA6qhqbobxsIgiyDJMW8NgqjZgHoc5x1wz4unHUCEuSBZy1kbIZ6+EPZ9bQHQZ21gKgf1j5vhsvQ==}
410 | engines: {node: '>=14.0.0'}
411 | dependencies:
412 | '@aws-sdk/types': 3.208.0
413 | '@aws-sdk/util-buffer-from': 3.208.0
414 | tslib: 2.4.1
415 | dev: false
416 | optional: true
417 |
418 | /@aws-sdk/invalid-dependency/3.208.0:
419 | resolution: {integrity: sha512-mUpbtijk14KntYy+w5FSvmsfj/Dqa8HylYeCKniKBKkQ1avjEz7CdizVoxyZrR3rldnLE3gItr0FEDRUhtfkAA==}
420 | dependencies:
421 | '@aws-sdk/types': 3.208.0
422 | tslib: 2.4.1
423 | dev: false
424 | optional: true
425 |
426 | /@aws-sdk/is-array-buffer/3.201.0:
427 | resolution: {integrity: sha512-UPez5qLh3dNgt0DYnPD/q0mVJY84rA17QE26hVNOW3fAji8W2wrwrxdacWOxyXvlxWsVRcKmr+lay1MDqpAMfg==}
428 | engines: {node: '>=14.0.0'}
429 | dependencies:
430 | tslib: 2.4.1
431 | dev: false
432 | optional: true
433 |
434 | /@aws-sdk/middleware-content-length/3.208.0:
435 | resolution: {integrity: sha512-8bLh7lHtmKQQ2fk0fGiP7pcVJglB/dz7Q9OooxFYK+eybqxfIDDUgKphA8AFT5W34tJRh5nhT3QTJ6zrOTQM3w==}
436 | engines: {node: '>=14.0.0'}
437 | dependencies:
438 | '@aws-sdk/protocol-http': 3.208.0
439 | '@aws-sdk/types': 3.208.0
440 | tslib: 2.4.1
441 | dev: false
442 | optional: true
443 |
444 | /@aws-sdk/middleware-endpoint/3.208.0:
445 | resolution: {integrity: sha512-pVa/cyB6ronfTVAoKUUTFbAPslDPU43DWOKXY/bACC3ys1lFo1CWjz4dLSQARxEEW3iZ1yZTy0zoHXnNrw5CFQ==}
446 | engines: {node: '>=14.0.0'}
447 | dependencies:
448 | '@aws-sdk/middleware-serde': 3.208.0
449 | '@aws-sdk/protocol-http': 3.208.0
450 | '@aws-sdk/signature-v4': 3.208.0
451 | '@aws-sdk/types': 3.208.0
452 | '@aws-sdk/url-parser': 3.208.0
453 | '@aws-sdk/util-config-provider': 3.208.0
454 | '@aws-sdk/util-middleware': 3.208.0
455 | tslib: 2.4.1
456 | dev: false
457 | optional: true
458 |
459 | /@aws-sdk/middleware-host-header/3.208.0:
460 | resolution: {integrity: sha512-3oyXK81TLWOZ2T/9Ltpbj/Z7R4QWSf+FCQRpY48ND2im/ALkgFRk/tmDTOshv+TQzW1q2lOSEeq4vK6yOCar7g==}
461 | engines: {node: '>=14.0.0'}
462 | dependencies:
463 | '@aws-sdk/protocol-http': 3.208.0
464 | '@aws-sdk/types': 3.208.0
465 | tslib: 2.4.1
466 | dev: false
467 | optional: true
468 |
469 | /@aws-sdk/middleware-logger/3.208.0:
470 | resolution: {integrity: sha512-mwSpuWruB8RrgUAAW7w/lvadnMDesl/bZ2IELBgJri+2rIqLGbAtygJBiG0Y3e8/IeOHuKuGkN1rFYZ4SKr7/A==}
471 | engines: {node: '>=14.0.0'}
472 | dependencies:
473 | '@aws-sdk/types': 3.208.0
474 | tslib: 2.4.1
475 | dev: false
476 | optional: true
477 |
478 | /@aws-sdk/middleware-recursion-detection/3.208.0:
479 | resolution: {integrity: sha512-Dgpf5NEOYXvkQuGcbxvDovTh4HwO4ULJReGko67NJjgdZZyFS1fNykVPncxenRpsN9SJBigswYs3lwPVpqijzA==}
480 | engines: {node: '>=14.0.0'}
481 | dependencies:
482 | '@aws-sdk/protocol-http': 3.208.0
483 | '@aws-sdk/types': 3.208.0
484 | tslib: 2.4.1
485 | dev: false
486 | optional: true
487 |
488 | /@aws-sdk/middleware-retry/3.209.0:
489 | resolution: {integrity: sha512-PGHbpGw74HxmtqsMEH+xn2oC5/BPdHVyapB66x83n+sywt1ejTiarbQhNs70YzcSsTrJfbhbrFP1V9AzRmMaQA==}
490 | engines: {node: '>=14.0.0'}
491 | dependencies:
492 | '@aws-sdk/protocol-http': 3.208.0
493 | '@aws-sdk/service-error-classification': 3.208.0
494 | '@aws-sdk/types': 3.208.0
495 | '@aws-sdk/util-middleware': 3.208.0
496 | tslib: 2.4.1
497 | uuid: 8.3.2
498 | dev: false
499 | optional: true
500 |
501 | /@aws-sdk/middleware-sdk-sts/3.208.0:
502 | resolution: {integrity: sha512-lFVodZHYLF7puXgNZ1m5ycKbyCPp79nqI+pkRXl066ZtZWzCW8+JKCaLjF3jfXlnvg6foPDJdxUvt0VU5EddGg==}
503 | engines: {node: '>=14.0.0'}
504 | dependencies:
505 | '@aws-sdk/middleware-signing': 3.208.0
506 | '@aws-sdk/property-provider': 3.208.0
507 | '@aws-sdk/protocol-http': 3.208.0
508 | '@aws-sdk/signature-v4': 3.208.0
509 | '@aws-sdk/types': 3.208.0
510 | tslib: 2.4.1
511 | dev: false
512 | optional: true
513 |
514 | /@aws-sdk/middleware-serde/3.208.0:
515 | resolution: {integrity: sha512-3h2yP6qyf/IhfdvyFeNX7w4BF37vOZvfUDBq+wb1QEc7DCAskoUKWtCCKJ9HDq3IJQp8hzqY82eawUir6flqlQ==}
516 | engines: {node: '>=14.0.0'}
517 | dependencies:
518 | '@aws-sdk/types': 3.208.0
519 | tslib: 2.4.1
520 | dev: false
521 | optional: true
522 |
523 | /@aws-sdk/middleware-signing/3.208.0:
524 | resolution: {integrity: sha512-cMSWhg8xOrxZw04EYKEQQQ7RT+03rigS4KS3Uy6x/M+jFyoM+sRiY/7376sJCwlpvKH2xJIVpwPbKk/uz4j4DA==}
525 | engines: {node: '>=14.0.0'}
526 | dependencies:
527 | '@aws-sdk/property-provider': 3.208.0
528 | '@aws-sdk/protocol-http': 3.208.0
529 | '@aws-sdk/signature-v4': 3.208.0
530 | '@aws-sdk/types': 3.208.0
531 | '@aws-sdk/util-middleware': 3.208.0
532 | tslib: 2.4.1
533 | dev: false
534 | optional: true
535 |
536 | /@aws-sdk/middleware-stack/3.208.0:
537 | resolution: {integrity: sha512-bvFPUa+RTB7PSRCUsO6bRlEtiEadrDES+dpNmInMNQ9kmbd4OhNOCb664hhtiglIIXX5cd8mSPEo+w/RV0kEEQ==}
538 | engines: {node: '>=14.0.0'}
539 | dependencies:
540 | tslib: 2.4.1
541 | dev: false
542 | optional: true
543 |
544 | /@aws-sdk/middleware-user-agent/3.208.0:
545 | resolution: {integrity: sha512-6RNf+TOZpiCy7xUcDSh8ji/x8ht1oAM+qIhm6hsEPLdI1cTvbPZrwowO9Y6L0J68V9OkEgLYiq77KKKYT7QQSw==}
546 | engines: {node: '>=14.0.0'}
547 | dependencies:
548 | '@aws-sdk/protocol-http': 3.208.0
549 | '@aws-sdk/types': 3.208.0
550 | tslib: 2.4.1
551 | dev: false
552 | optional: true
553 |
554 | /@aws-sdk/node-config-provider/3.209.0:
555 | resolution: {integrity: sha512-jNrUn8qTN9BIxHCcLTv2s2h8Riaz4kjwDhubVQNyI0WGZ+PYKATnZjA+Guzbnq2WMzZmwrMIE5GoOiVsPD8xYQ==}
556 | engines: {node: '>=14.0.0'}
557 | dependencies:
558 | '@aws-sdk/property-provider': 3.208.0
559 | '@aws-sdk/shared-ini-file-loader': 3.209.0
560 | '@aws-sdk/types': 3.208.0
561 | tslib: 2.4.1
562 | dev: false
563 | optional: true
564 |
565 | /@aws-sdk/node-http-handler/3.208.0:
566 | resolution: {integrity: sha512-2t0b9Id7WekluqxQdPugAZhe/wdzW0L53rfMEfDS3R0INNSq1sEfddIfCzJrmfWDCrCOGIDNyxo/w7Ki3NclzQ==}
567 | engines: {node: '>=14.0.0'}
568 | dependencies:
569 | '@aws-sdk/abort-controller': 3.208.0
570 | '@aws-sdk/protocol-http': 3.208.0
571 | '@aws-sdk/querystring-builder': 3.208.0
572 | '@aws-sdk/types': 3.208.0
573 | tslib: 2.4.1
574 | dev: false
575 | optional: true
576 |
577 | /@aws-sdk/property-provider/3.208.0:
578 | resolution: {integrity: sha512-aUhfuwXjZ5TGzLhBstuAMmbnxHXeSGhzoIS8yy465ifgc95p6cHFZf+ZibgwgCMaGrKlTDCia2zwwpKQHN+4cw==}
579 | engines: {node: '>=14.0.0'}
580 | dependencies:
581 | '@aws-sdk/types': 3.208.0
582 | tslib: 2.4.1
583 | dev: false
584 | optional: true
585 |
586 | /@aws-sdk/protocol-http/3.208.0:
587 | resolution: {integrity: sha512-Sr9dmaW0Z9X9s16NHZn94efLRpaqLyLqABFPgjqE8cYP6eLX/VrmZGNR62GFVxCiyEEpVxy4Ddk1YkbRwnuonA==}
588 | engines: {node: '>=14.0.0'}
589 | dependencies:
590 | '@aws-sdk/types': 3.208.0
591 | tslib: 2.4.1
592 | dev: false
593 | optional: true
594 |
595 | /@aws-sdk/querystring-builder/3.208.0:
596 | resolution: {integrity: sha512-1Rpauh5hWlK++KjsHQjHcSN7yE05hj1FVb0HaeLrFIJB5rQYWXK7DpOUhmv5SOmU+q6cIM2kNCrSxH31+WglMw==}
597 | engines: {node: '>=14.0.0'}
598 | dependencies:
599 | '@aws-sdk/types': 3.208.0
600 | '@aws-sdk/util-uri-escape': 3.201.0
601 | tslib: 2.4.1
602 | dev: false
603 | optional: true
604 |
605 | /@aws-sdk/querystring-parser/3.208.0:
606 | resolution: {integrity: sha512-dVVLdP3il9bJX74/BNBjFn59XrEVBUZ4xSKYH6t7dgSz9uSu8DcT4pPzwaq+/94dVewCW3zq2jVA1iw1rK7JVQ==}
607 | engines: {node: '>=14.0.0'}
608 | dependencies:
609 | '@aws-sdk/types': 3.208.0
610 | tslib: 2.4.1
611 | dev: false
612 | optional: true
613 |
614 | /@aws-sdk/service-error-classification/3.208.0:
615 | resolution: {integrity: sha512-ZZWV3AOTd8UDcfXCNoQ8v4sHaTgFxGaXWO0NHHgqFbVYr1d+8EXQiOy/v8JsY1jrfoXBWXptTOcioCTeM0xBpw==}
616 | engines: {node: '>=14.0.0'}
617 | dev: false
618 | optional: true
619 |
620 | /@aws-sdk/shared-ini-file-loader/3.209.0:
621 | resolution: {integrity: sha512-hji3B/q3zFuElaUQM/ZZUFbCFBsaVjpWATgiDTnSYP+MShWvvwm/WigeC2aCNos1bs/8HVizOy9cmvK63vLZbw==}
622 | engines: {node: '>=14.0.0'}
623 | dependencies:
624 | '@aws-sdk/types': 3.208.0
625 | tslib: 2.4.1
626 | dev: false
627 | optional: true
628 |
629 | /@aws-sdk/signature-v4/3.208.0:
630 | resolution: {integrity: sha512-+c5A8RsN4Lk3TXFiQ3ZsW7sJ4zYPPmYQ55ITSfjock5hzgM1vW43Mgvjjq6foW5L7SNfdhLH+NrhpgFwSF/GeA==}
631 | engines: {node: '>=14.0.0'}
632 | dependencies:
633 | '@aws-sdk/is-array-buffer': 3.201.0
634 | '@aws-sdk/types': 3.208.0
635 | '@aws-sdk/util-hex-encoding': 3.201.0
636 | '@aws-sdk/util-middleware': 3.208.0
637 | '@aws-sdk/util-uri-escape': 3.201.0
638 | tslib: 2.4.1
639 | dev: false
640 | optional: true
641 |
642 | /@aws-sdk/smithy-client/3.209.0:
643 | resolution: {integrity: sha512-+d9lPAFOu3hZdLfyzMurRU6xZ+eqwKbF6HY7mDL4hGafRb/uw28HBncSwyUk5s7MIND9+RnvY4F/MwBq9wznXg==}
644 | engines: {node: '>=14.0.0'}
645 | dependencies:
646 | '@aws-sdk/middleware-stack': 3.208.0
647 | '@aws-sdk/types': 3.208.0
648 | tslib: 2.4.1
649 | dev: false
650 | optional: true
651 |
652 | /@aws-sdk/token-providers/3.209.0:
653 | resolution: {integrity: sha512-MMtL/yD98SxjejcZYghLN4qhC1TDNeHjnzb+zBcXANxgh5m+QdhERsZkDGU8QiEo+DL6M2HKbwyXu82z89sqnQ==}
654 | engines: {node: '>=14.0.0'}
655 | dependencies:
656 | '@aws-sdk/client-sso-oidc': 3.209.0
657 | '@aws-sdk/property-provider': 3.208.0
658 | '@aws-sdk/shared-ini-file-loader': 3.209.0
659 | '@aws-sdk/types': 3.208.0
660 | tslib: 2.4.1
661 | transitivePeerDependencies:
662 | - aws-crt
663 | dev: false
664 | optional: true
665 |
666 | /@aws-sdk/types/3.208.0:
667 | resolution: {integrity: sha512-5AuOPtY1Hdf4xoEo+voRijl3OnFm8IB+oITXl+SN2iASJv+XPnRNw/QVbIxfGeWgWhmK31F+XdjTYsjT2rx8Qw==}
668 | engines: {node: '>=14.0.0'}
669 | dev: false
670 | optional: true
671 |
672 | /@aws-sdk/url-parser/3.208.0:
673 | resolution: {integrity: sha512-zhU231xkZbUh68Z/TGNRW30MGTZQVigGuMiJU6eOtL2aOulnKqI1Yjs/QejrTtPWsqSihWvxOUZ2cVRPyeOvrA==}
674 | dependencies:
675 | '@aws-sdk/querystring-parser': 3.208.0
676 | '@aws-sdk/types': 3.208.0
677 | tslib: 2.4.1
678 | dev: false
679 | optional: true
680 |
681 | /@aws-sdk/util-base64/3.208.0:
682 | resolution: {integrity: sha512-PQniZph5A6N7uuEOQi+1hnMz/FSOK/8kMFyFO+4DgA1dZ5pcKcn5wiFwHkcTb/BsgVqQa3Jx0VHNnvhlS8JyTg==}
683 | engines: {node: '>=14.0.0'}
684 | dependencies:
685 | '@aws-sdk/util-buffer-from': 3.208.0
686 | tslib: 2.4.1
687 | dev: false
688 | optional: true
689 |
690 | /@aws-sdk/util-body-length-browser/3.188.0:
691 | resolution: {integrity: sha512-8VpnwFWXhnZ/iRSl9mTf+VKOX9wDE8QtN4bj9pBfxwf90H1X7E8T6NkiZD3k+HubYf2J94e7DbeHs7fuCPW5Qg==}
692 | dependencies:
693 | tslib: 2.4.1
694 | dev: false
695 | optional: true
696 |
697 | /@aws-sdk/util-body-length-node/3.208.0:
698 | resolution: {integrity: sha512-3zj50e5g7t/MQf53SsuuSf0hEELzMtD8RX8C76f12OSRo2Bca4FLLYHe0TZbxcfQHom8/hOaeZEyTyMogMglqg==}
699 | engines: {node: '>=14.0.0'}
700 | dependencies:
701 | tslib: 2.4.1
702 | dev: false
703 | optional: true
704 |
705 | /@aws-sdk/util-buffer-from/3.208.0:
706 | resolution: {integrity: sha512-7L0XUixNEFcLUGPeBF35enCvB9Xl+K6SQsmbrPk1P3mlV9mguWSDQqbOBwY1Ir0OVbD6H/ZOQU7hI/9RtRI0Zw==}
707 | engines: {node: '>=14.0.0'}
708 | dependencies:
709 | '@aws-sdk/is-array-buffer': 3.201.0
710 | tslib: 2.4.1
711 | dev: false
712 | optional: true
713 |
714 | /@aws-sdk/util-config-provider/3.208.0:
715 | resolution: {integrity: sha512-DSRqwrERUsT34ug+anlMBIFooBEGwM8GejC7q00Y/9IPrQy50KnG5PW2NiTjuLKNi7pdEOlwTSEocJE15eDZIg==}
716 | engines: {node: '>=14.0.0'}
717 | dependencies:
718 | tslib: 2.4.1
719 | dev: false
720 | optional: true
721 |
722 | /@aws-sdk/util-defaults-mode-browser/3.209.0:
723 | resolution: {integrity: sha512-c+AlHqsgeDr9+87fS1wfnyVzEH3myt56GvNt0puzIv0QQqfpobMnfN8/Fy0cqMpf1eQNYY4a6lFlkComsXi5dw==}
724 | engines: {node: '>= 10.0.0'}
725 | dependencies:
726 | '@aws-sdk/property-provider': 3.208.0
727 | '@aws-sdk/types': 3.208.0
728 | bowser: 2.11.0
729 | tslib: 2.4.1
730 | dev: false
731 | optional: true
732 |
733 | /@aws-sdk/util-defaults-mode-node/3.209.0:
734 | resolution: {integrity: sha512-RljPVLog6EX052DQjx4XQ95n7ZiAbmn7Vd6YSn1x93U797umaC5CnrT7a/WusTQACtxBDFWcosRgO1ZGDXuRKQ==}
735 | engines: {node: '>= 10.0.0'}
736 | dependencies:
737 | '@aws-sdk/config-resolver': 3.209.0
738 | '@aws-sdk/credential-provider-imds': 3.209.0
739 | '@aws-sdk/node-config-provider': 3.209.0
740 | '@aws-sdk/property-provider': 3.208.0
741 | '@aws-sdk/types': 3.208.0
742 | tslib: 2.4.1
743 | dev: false
744 | optional: true
745 |
746 | /@aws-sdk/util-endpoints/3.209.0:
747 | resolution: {integrity: sha512-jwraCtWjQ0P4LyIg4qoQRF94mTUg0zFPmicy4v+Dq1V8BBRf6YWa9B10SoIdGIKQXmQvoyahK5OuH5SWKkY2pw==}
748 | engines: {node: '>=14.0.0'}
749 | dependencies:
750 | '@aws-sdk/types': 3.208.0
751 | tslib: 2.4.1
752 | dev: false
753 | optional: true
754 |
755 | /@aws-sdk/util-hex-encoding/3.201.0:
756 | resolution: {integrity: sha512-7t1vR1pVxKx0motd3X9rI3m/xNp78p3sHtP5yo4NP4ARpxyJ0fokBomY8ScaH2D/B+U5o9ARxldJUdMqyBlJcA==}
757 | engines: {node: '>=14.0.0'}
758 | dependencies:
759 | tslib: 2.4.1
760 | dev: false
761 | optional: true
762 |
763 | /@aws-sdk/util-locate-window/3.208.0:
764 | resolution: {integrity: sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg==}
765 | engines: {node: '>=14.0.0'}
766 | dependencies:
767 | tslib: 2.4.1
768 | dev: false
769 | optional: true
770 |
771 | /@aws-sdk/util-middleware/3.208.0:
772 | resolution: {integrity: sha512-oXilrYpXwaPyMw1uNjL1wmR54zeFzIWx2ve1MSMheIYr26deFP3RpMfKkGXwiOvXzZ9pzTcA8shNLhg1frO/zg==}
773 | engines: {node: '>=14.0.0'}
774 | dependencies:
775 | tslib: 2.4.1
776 | dev: false
777 | optional: true
778 |
779 | /@aws-sdk/util-uri-escape/3.201.0:
780 | resolution: {integrity: sha512-TeTWbGx4LU2c5rx0obHeDFeO9HvwYwQtMh1yniBz00pQb6Qt6YVOETVQikRZ+XRQwEyCg/dA375UplIpiy54mA==}
781 | engines: {node: '>=14.0.0'}
782 | dependencies:
783 | tslib: 2.4.1
784 | dev: false
785 | optional: true
786 |
787 | /@aws-sdk/util-user-agent-browser/3.208.0:
788 | resolution: {integrity: sha512-Z5n9Kg2pBstzzQgRymQRgb4pM0bNPLGQejB3ZmCAphaxvuTBfu2E6KO55h5WwkFHUuh0i5u2wn1BI9R66S8CgQ==}
789 | dependencies:
790 | '@aws-sdk/types': 3.208.0
791 | bowser: 2.11.0
792 | tslib: 2.4.1
793 | dev: false
794 | optional: true
795 |
796 | /@aws-sdk/util-user-agent-node/3.209.0:
797 | resolution: {integrity: sha512-lWfvnSX8rckMGaalrKZmBlPW7F0QOviG7XbLffwToN4HnYUyXcZXIE4EzOQzuOvDsOUlos/xLkUj6krdIAApcA==}
798 | engines: {node: '>=14.0.0'}
799 | peerDependencies:
800 | aws-crt: '>=1.0.0'
801 | peerDependenciesMeta:
802 | aws-crt:
803 | optional: true
804 | dependencies:
805 | '@aws-sdk/node-config-provider': 3.209.0
806 | '@aws-sdk/types': 3.208.0
807 | tslib: 2.4.1
808 | dev: false
809 | optional: true
810 |
811 | /@aws-sdk/util-utf8-browser/3.188.0:
812 | resolution: {integrity: sha512-jt627x0+jE+Ydr9NwkFstg3cUvgWh56qdaqAMDsqgRlKD21md/6G226z/Qxl7lb1VEW2LlmCx43ai/37Qwcj2Q==}
813 | dependencies:
814 | tslib: 2.4.1
815 | dev: false
816 | optional: true
817 |
818 | /@aws-sdk/util-utf8-node/3.208.0:
819 | resolution: {integrity: sha512-jKY87Acv0yWBdFxx6bveagy5FYjz+dtV8IPT7ay1E2WPWH1czoIdMAkc8tSInK31T6CRnHWkLZ1qYwCbgRfERQ==}
820 | engines: {node: '>=14.0.0'}
821 | dependencies:
822 | '@aws-sdk/util-buffer-from': 3.208.0
823 | tslib: 2.4.1
824 | dev: false
825 | optional: true
826 |
827 | /@types/node/18.11.9:
828 | resolution: {integrity: sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==}
829 | dev: false
830 |
831 | /@types/webidl-conversions/7.0.0:
832 | resolution: {integrity: sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==}
833 | dev: false
834 |
835 | /@types/whatwg-url/8.2.2:
836 | resolution: {integrity: sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==}
837 | dependencies:
838 | '@types/node': 18.11.9
839 | '@types/webidl-conversions': 7.0.0
840 | dev: false
841 |
842 | /abbrev/1.1.1:
843 | resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
844 | dev: true
845 |
846 | /accepts/1.3.8:
847 | resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
848 | engines: {node: '>= 0.6'}
849 | dependencies:
850 | mime-types: 2.1.35
851 | negotiator: 0.6.3
852 | dev: false
853 |
854 | /anymatch/3.1.2:
855 | resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==}
856 | engines: {node: '>= 8'}
857 | dependencies:
858 | normalize-path: 3.0.0
859 | picomatch: 2.3.1
860 | dev: true
861 |
862 | /append-field/1.0.0:
863 | resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==}
864 | dev: false
865 |
866 | /array-flatten/1.1.1:
867 | resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
868 | dev: false
869 |
870 | /balanced-match/1.0.2:
871 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
872 | dev: true
873 |
874 | /base64-js/1.5.1:
875 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
876 | dev: false
877 |
878 | /basic-auth/2.0.1:
879 | resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==}
880 | engines: {node: '>= 0.8'}
881 | dependencies:
882 | safe-buffer: 5.1.2
883 | dev: false
884 |
885 | /binary-extensions/2.2.0:
886 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
887 | engines: {node: '>=8'}
888 | dev: true
889 |
890 | /body-parser/1.20.1:
891 | resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==}
892 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
893 | dependencies:
894 | bytes: 3.1.2
895 | content-type: 1.0.4
896 | debug: 2.6.9
897 | depd: 2.0.0
898 | destroy: 1.2.0
899 | http-errors: 2.0.0
900 | iconv-lite: 0.4.24
901 | on-finished: 2.4.1
902 | qs: 6.11.0
903 | raw-body: 2.5.1
904 | type-is: 1.6.18
905 | unpipe: 1.0.0
906 | transitivePeerDependencies:
907 | - supports-color
908 | dev: false
909 |
910 | /bowser/2.11.0:
911 | resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==}
912 | dev: false
913 | optional: true
914 |
915 | /brace-expansion/1.1.11:
916 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
917 | dependencies:
918 | balanced-match: 1.0.2
919 | concat-map: 0.0.1
920 | dev: true
921 |
922 | /braces/3.0.2:
923 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
924 | engines: {node: '>=8'}
925 | dependencies:
926 | fill-range: 7.0.1
927 | dev: true
928 |
929 | /bson/4.7.0:
930 | resolution: {integrity: sha512-VrlEE4vuiO1WTpfof4VmaVolCVYkYTgB9iWgYNOrVlnifpME/06fhFRmONgBhClD5pFC1t9ZWqFUQEQAzY43bA==}
931 | engines: {node: '>=6.9.0'}
932 | dependencies:
933 | buffer: 5.7.1
934 | dev: false
935 |
936 | /buffer-from/1.1.2:
937 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
938 | dev: false
939 |
940 | /buffer/5.7.1:
941 | resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
942 | dependencies:
943 | base64-js: 1.5.1
944 | ieee754: 1.2.1
945 | dev: false
946 |
947 | /busboy/0.2.14:
948 | resolution: {integrity: sha512-InWFDomvlkEj+xWLBfU3AvnbVYqeTWmQopiW0tWWEy5yehYm2YkGEc59sUmw/4ty5Zj/b0WHGs1LgecuBSBGrg==}
949 | engines: {node: '>=0.8.0'}
950 | dependencies:
951 | dicer: 0.2.5
952 | readable-stream: 1.1.14
953 | dev: false
954 |
955 | /bytes/3.1.2:
956 | resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
957 | engines: {node: '>= 0.8'}
958 | dev: false
959 |
960 | /call-bind/1.0.2:
961 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
962 | dependencies:
963 | function-bind: 1.1.1
964 | get-intrinsic: 1.1.3
965 | dev: false
966 |
967 | /chokidar/3.5.3:
968 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
969 | engines: {node: '>= 8.10.0'}
970 | dependencies:
971 | anymatch: 3.1.2
972 | braces: 3.0.2
973 | glob-parent: 5.1.2
974 | is-binary-path: 2.1.0
975 | is-glob: 4.0.3
976 | normalize-path: 3.0.0
977 | readdirp: 3.6.0
978 | optionalDependencies:
979 | fsevents: 2.3.2
980 | dev: true
981 |
982 | /concat-map/0.0.1:
983 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
984 | dev: true
985 |
986 | /concat-stream/1.6.2:
987 | resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==}
988 | engines: {'0': node >= 0.8}
989 | dependencies:
990 | buffer-from: 1.1.2
991 | inherits: 2.0.4
992 | readable-stream: 2.3.7
993 | typedarray: 0.0.6
994 | dev: false
995 |
996 | /content-disposition/0.5.4:
997 | resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
998 | engines: {node: '>= 0.6'}
999 | dependencies:
1000 | safe-buffer: 5.2.1
1001 | dev: false
1002 |
1003 | /content-type/1.0.4:
1004 | resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==}
1005 | engines: {node: '>= 0.6'}
1006 | dev: false
1007 |
1008 | /cookie-signature/1.0.6:
1009 | resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
1010 | dev: false
1011 |
1012 | /cookie/0.5.0:
1013 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
1014 | engines: {node: '>= 0.6'}
1015 | dev: false
1016 |
1017 | /core-util-is/1.0.3:
1018 | resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
1019 | dev: false
1020 |
1021 | /cors/2.8.5:
1022 | resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
1023 | engines: {node: '>= 0.10'}
1024 | dependencies:
1025 | object-assign: 4.1.1
1026 | vary: 1.1.2
1027 | dev: false
1028 |
1029 | /debug/2.6.9:
1030 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
1031 | peerDependencies:
1032 | supports-color: '*'
1033 | peerDependenciesMeta:
1034 | supports-color:
1035 | optional: true
1036 | dependencies:
1037 | ms: 2.0.0
1038 | dev: false
1039 |
1040 | /debug/3.2.7_supports-color@5.5.0:
1041 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
1042 | peerDependencies:
1043 | supports-color: '*'
1044 | peerDependenciesMeta:
1045 | supports-color:
1046 | optional: true
1047 | dependencies:
1048 | ms: 2.1.3
1049 | supports-color: 5.5.0
1050 | dev: true
1051 |
1052 | /debug/4.3.4:
1053 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
1054 | engines: {node: '>=6.0'}
1055 | peerDependencies:
1056 | supports-color: '*'
1057 | peerDependenciesMeta:
1058 | supports-color:
1059 | optional: true
1060 | dependencies:
1061 | ms: 2.1.2
1062 | dev: false
1063 |
1064 | /denque/2.1.0:
1065 | resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==}
1066 | engines: {node: '>=0.10'}
1067 | dev: false
1068 |
1069 | /depd/2.0.0:
1070 | resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
1071 | engines: {node: '>= 0.8'}
1072 | dev: false
1073 |
1074 | /destroy/1.2.0:
1075 | resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
1076 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
1077 | dev: false
1078 |
1079 | /dicer/0.2.5:
1080 | resolution: {integrity: sha512-FDvbtnq7dzlPz0wyYlOExifDEZcu8h+rErEXgfxqmLfRfC/kJidEFh4+effJRO3P0xmfqyPbSMG0LveNRfTKVg==}
1081 | engines: {node: '>=0.8.0'}
1082 | dependencies:
1083 | readable-stream: 1.1.14
1084 | streamsearch: 0.1.2
1085 | dev: false
1086 |
1087 | /dotenv/16.0.3:
1088 | resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==}
1089 | engines: {node: '>=12'}
1090 | dev: false
1091 |
1092 | /ee-first/1.1.1:
1093 | resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
1094 | dev: false
1095 |
1096 | /encodeurl/1.0.2:
1097 | resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
1098 | engines: {node: '>= 0.8'}
1099 | dev: false
1100 |
1101 | /escape-html/1.0.3:
1102 | resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
1103 | dev: false
1104 |
1105 | /etag/1.8.1:
1106 | resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
1107 | engines: {node: '>= 0.6'}
1108 | dev: false
1109 |
1110 | /express/4.18.2:
1111 | resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==}
1112 | engines: {node: '>= 0.10.0'}
1113 | dependencies:
1114 | accepts: 1.3.8
1115 | array-flatten: 1.1.1
1116 | body-parser: 1.20.1
1117 | content-disposition: 0.5.4
1118 | content-type: 1.0.4
1119 | cookie: 0.5.0
1120 | cookie-signature: 1.0.6
1121 | debug: 2.6.9
1122 | depd: 2.0.0
1123 | encodeurl: 1.0.2
1124 | escape-html: 1.0.3
1125 | etag: 1.8.1
1126 | finalhandler: 1.2.0
1127 | fresh: 0.5.2
1128 | http-errors: 2.0.0
1129 | merge-descriptors: 1.0.1
1130 | methods: 1.1.2
1131 | on-finished: 2.4.1
1132 | parseurl: 1.3.3
1133 | path-to-regexp: 0.1.7
1134 | proxy-addr: 2.0.7
1135 | qs: 6.11.0
1136 | range-parser: 1.2.1
1137 | safe-buffer: 5.2.1
1138 | send: 0.18.0
1139 | serve-static: 1.15.0
1140 | setprototypeof: 1.2.0
1141 | statuses: 2.0.1
1142 | type-is: 1.6.18
1143 | utils-merge: 1.0.1
1144 | vary: 1.1.2
1145 | transitivePeerDependencies:
1146 | - supports-color
1147 | dev: false
1148 |
1149 | /fast-xml-parser/4.0.11:
1150 | resolution: {integrity: sha512-4aUg3aNRR/WjQAcpceODG1C3x3lFANXRo8+1biqfieHmg9pyMt7qB4lQV/Ta6sJCTbA5vfD8fnA8S54JATiFUA==}
1151 | hasBin: true
1152 | dependencies:
1153 | strnum: 1.0.5
1154 | dev: false
1155 | optional: true
1156 |
1157 | /fill-range/7.0.1:
1158 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
1159 | engines: {node: '>=8'}
1160 | dependencies:
1161 | to-regex-range: 5.0.1
1162 | dev: true
1163 |
1164 | /finalhandler/1.2.0:
1165 | resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==}
1166 | engines: {node: '>= 0.8'}
1167 | dependencies:
1168 | debug: 2.6.9
1169 | encodeurl: 1.0.2
1170 | escape-html: 1.0.3
1171 | on-finished: 2.4.1
1172 | parseurl: 1.3.3
1173 | statuses: 2.0.1
1174 | unpipe: 1.0.0
1175 | transitivePeerDependencies:
1176 | - supports-color
1177 | dev: false
1178 |
1179 | /forwarded/0.2.0:
1180 | resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
1181 | engines: {node: '>= 0.6'}
1182 | dev: false
1183 |
1184 | /fresh/0.5.2:
1185 | resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
1186 | engines: {node: '>= 0.6'}
1187 | dev: false
1188 |
1189 | /fsevents/2.3.2:
1190 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
1191 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1192 | os: [darwin]
1193 | requiresBuild: true
1194 | dev: true
1195 | optional: true
1196 |
1197 | /function-bind/1.1.1:
1198 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
1199 | dev: false
1200 |
1201 | /get-intrinsic/1.1.3:
1202 | resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==}
1203 | dependencies:
1204 | function-bind: 1.1.1
1205 | has: 1.0.3
1206 | has-symbols: 1.0.3
1207 | dev: false
1208 |
1209 | /glob-parent/5.1.2:
1210 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
1211 | engines: {node: '>= 6'}
1212 | dependencies:
1213 | is-glob: 4.0.3
1214 | dev: true
1215 |
1216 | /has-flag/3.0.0:
1217 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
1218 | engines: {node: '>=4'}
1219 | dev: true
1220 |
1221 | /has-symbols/1.0.3:
1222 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
1223 | engines: {node: '>= 0.4'}
1224 | dev: false
1225 |
1226 | /has/1.0.3:
1227 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
1228 | engines: {node: '>= 0.4.0'}
1229 | dependencies:
1230 | function-bind: 1.1.1
1231 | dev: false
1232 |
1233 | /http-errors/2.0.0:
1234 | resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
1235 | engines: {node: '>= 0.8'}
1236 | dependencies:
1237 | depd: 2.0.0
1238 | inherits: 2.0.4
1239 | setprototypeof: 1.2.0
1240 | statuses: 2.0.1
1241 | toidentifier: 1.0.1
1242 | dev: false
1243 |
1244 | /iconv-lite/0.4.24:
1245 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
1246 | engines: {node: '>=0.10.0'}
1247 | dependencies:
1248 | safer-buffer: 2.1.2
1249 | dev: false
1250 |
1251 | /ieee754/1.2.1:
1252 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
1253 | dev: false
1254 |
1255 | /ignore-by-default/1.0.1:
1256 | resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==}
1257 | dev: true
1258 |
1259 | /inherits/2.0.4:
1260 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1261 | dev: false
1262 |
1263 | /ip/2.0.0:
1264 | resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==}
1265 | dev: false
1266 |
1267 | /ipaddr.js/1.9.1:
1268 | resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
1269 | engines: {node: '>= 0.10'}
1270 | dev: false
1271 |
1272 | /is-binary-path/2.1.0:
1273 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
1274 | engines: {node: '>=8'}
1275 | dependencies:
1276 | binary-extensions: 2.2.0
1277 | dev: true
1278 |
1279 | /is-extglob/2.1.1:
1280 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1281 | engines: {node: '>=0.10.0'}
1282 | dev: true
1283 |
1284 | /is-glob/4.0.3:
1285 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1286 | engines: {node: '>=0.10.0'}
1287 | dependencies:
1288 | is-extglob: 2.1.1
1289 | dev: true
1290 |
1291 | /is-number/7.0.0:
1292 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1293 | engines: {node: '>=0.12.0'}
1294 | dev: true
1295 |
1296 | /isarray/0.0.1:
1297 | resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==}
1298 | dev: false
1299 |
1300 | /isarray/1.0.0:
1301 | resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
1302 | dev: false
1303 |
1304 | /kareem/2.4.1:
1305 | resolution: {integrity: sha512-aJ9opVoXroQUPfovYP5kaj2lM7Jn02Gw13bL0lg9v0V7SaUc0qavPs0Eue7d2DcC3NjqI6QAUElXNsuZSeM+EA==}
1306 | dev: false
1307 |
1308 | /media-typer/0.3.0:
1309 | resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
1310 | engines: {node: '>= 0.6'}
1311 | dev: false
1312 |
1313 | /memory-pager/1.5.0:
1314 | resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==}
1315 | dev: false
1316 | optional: true
1317 |
1318 | /merge-descriptors/1.0.1:
1319 | resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
1320 | dev: false
1321 |
1322 | /methods/1.1.2:
1323 | resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
1324 | engines: {node: '>= 0.6'}
1325 | dev: false
1326 |
1327 | /mime-db/1.52.0:
1328 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
1329 | engines: {node: '>= 0.6'}
1330 | dev: false
1331 |
1332 | /mime-types/2.1.35:
1333 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
1334 | engines: {node: '>= 0.6'}
1335 | dependencies:
1336 | mime-db: 1.52.0
1337 | dev: false
1338 |
1339 | /mime/1.6.0:
1340 | resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
1341 | engines: {node: '>=4'}
1342 | hasBin: true
1343 | dev: false
1344 |
1345 | /minimatch/3.1.2:
1346 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
1347 | dependencies:
1348 | brace-expansion: 1.1.11
1349 | dev: true
1350 |
1351 | /minimist/1.2.7:
1352 | resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==}
1353 | dev: false
1354 |
1355 | /mkdirp/0.5.6:
1356 | resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
1357 | hasBin: true
1358 | dependencies:
1359 | minimist: 1.2.7
1360 | dev: false
1361 |
1362 | /mongodb-connection-string-url/2.5.4:
1363 | resolution: {integrity: sha512-SeAxuWs0ez3iI3vvmLk/j2y+zHwigTDKQhtdxTgt5ZCOQQS5+HW4g45/Xw5vzzbn7oQXCNQ24Z40AkJsizEy7w==}
1364 | dependencies:
1365 | '@types/whatwg-url': 8.2.2
1366 | whatwg-url: 11.0.0
1367 | dev: false
1368 |
1369 | /mongodb/4.11.0:
1370 | resolution: {integrity: sha512-9l9n4Nk2BYZzljW3vHah3Z0rfS5npKw6ktnkmFgTcnzaXH1DRm3pDl6VMHu84EVb1lzmSaJC4OzWZqTkB5i2wg==}
1371 | engines: {node: '>=12.9.0'}
1372 | dependencies:
1373 | bson: 4.7.0
1374 | denque: 2.1.0
1375 | mongodb-connection-string-url: 2.5.4
1376 | socks: 2.7.1
1377 | optionalDependencies:
1378 | '@aws-sdk/credential-providers': 3.209.0
1379 | saslprep: 1.0.3
1380 | transitivePeerDependencies:
1381 | - aws-crt
1382 | dev: false
1383 |
1384 | /mongoose/6.7.2:
1385 | resolution: {integrity: sha512-lrP2V5U1qhaf+z33fiIn7aYAZZ1fVDly+TkFRjTujNBF/FIHESATj2RbgAOSlWqv32fsZXkXejXzeVfjbv35Ow==}
1386 | engines: {node: '>=12.0.0'}
1387 | dependencies:
1388 | bson: 4.7.0
1389 | kareem: 2.4.1
1390 | mongodb: 4.11.0
1391 | mpath: 0.9.0
1392 | mquery: 4.0.3
1393 | ms: 2.1.3
1394 | sift: 16.0.1
1395 | transitivePeerDependencies:
1396 | - aws-crt
1397 | - supports-color
1398 | dev: false
1399 |
1400 | /morgan/1.10.0:
1401 | resolution: {integrity: sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==}
1402 | engines: {node: '>= 0.8.0'}
1403 | dependencies:
1404 | basic-auth: 2.0.1
1405 | debug: 2.6.9
1406 | depd: 2.0.0
1407 | on-finished: 2.3.0
1408 | on-headers: 1.0.2
1409 | transitivePeerDependencies:
1410 | - supports-color
1411 | dev: false
1412 |
1413 | /mpath/0.9.0:
1414 | resolution: {integrity: sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==}
1415 | engines: {node: '>=4.0.0'}
1416 | dev: false
1417 |
1418 | /mquery/4.0.3:
1419 | resolution: {integrity: sha512-J5heI+P08I6VJ2Ky3+33IpCdAvlYGTSUjwTPxkAr8i8EoduPMBX2OY/wa3IKZIQl7MU4SbFk8ndgSKyB/cl1zA==}
1420 | engines: {node: '>=12.0.0'}
1421 | dependencies:
1422 | debug: 4.3.4
1423 | transitivePeerDependencies:
1424 | - supports-color
1425 | dev: false
1426 |
1427 | /ms/2.0.0:
1428 | resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
1429 | dev: false
1430 |
1431 | /ms/2.1.2:
1432 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
1433 | dev: false
1434 |
1435 | /ms/2.1.3:
1436 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
1437 |
1438 | /multer/1.4.4:
1439 | resolution: {integrity: sha512-2wY2+xD4udX612aMqMcB8Ws2Voq6NIUPEtD1be6m411T4uDH/VtL9i//xvcyFlTVfRdaBsk7hV5tgrGQqhuBiw==}
1440 | engines: {node: '>= 0.10.0'}
1441 | deprecated: Multer 1.x is affected by CVE-2022-24434. This is fixed in v1.4.4-lts.1 which drops support for versions of Node.js before 6. Please upgrade to at least Node.js 6 and version 1.4.4-lts.1 of Multer. If you need support for older versions of Node.js, we are open to accepting patches that would fix the CVE on the main 1.x release line, whilst maintaining compatibility with Node.js 0.10.
1442 | dependencies:
1443 | append-field: 1.0.0
1444 | busboy: 0.2.14
1445 | concat-stream: 1.6.2
1446 | mkdirp: 0.5.6
1447 | object-assign: 4.1.1
1448 | on-finished: 2.4.1
1449 | type-is: 1.6.18
1450 | xtend: 4.0.2
1451 | dev: false
1452 |
1453 | /negotiator/0.6.3:
1454 | resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
1455 | engines: {node: '>= 0.6'}
1456 | dev: false
1457 |
1458 | /nodemon/2.0.20:
1459 | resolution: {integrity: sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==}
1460 | engines: {node: '>=8.10.0'}
1461 | hasBin: true
1462 | dependencies:
1463 | chokidar: 3.5.3
1464 | debug: 3.2.7_supports-color@5.5.0
1465 | ignore-by-default: 1.0.1
1466 | minimatch: 3.1.2
1467 | pstree.remy: 1.1.8
1468 | semver: 5.7.1
1469 | simple-update-notifier: 1.0.7
1470 | supports-color: 5.5.0
1471 | touch: 3.1.0
1472 | undefsafe: 2.0.5
1473 | dev: true
1474 |
1475 | /nopt/1.0.10:
1476 | resolution: {integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==}
1477 | hasBin: true
1478 | dependencies:
1479 | abbrev: 1.1.1
1480 | dev: true
1481 |
1482 | /normalize-path/3.0.0:
1483 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
1484 | engines: {node: '>=0.10.0'}
1485 | dev: true
1486 |
1487 | /object-assign/4.1.1:
1488 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
1489 | engines: {node: '>=0.10.0'}
1490 | dev: false
1491 |
1492 | /object-inspect/1.12.2:
1493 | resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==}
1494 | dev: false
1495 |
1496 | /on-finished/2.3.0:
1497 | resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==}
1498 | engines: {node: '>= 0.8'}
1499 | dependencies:
1500 | ee-first: 1.1.1
1501 | dev: false
1502 |
1503 | /on-finished/2.4.1:
1504 | resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
1505 | engines: {node: '>= 0.8'}
1506 | dependencies:
1507 | ee-first: 1.1.1
1508 | dev: false
1509 |
1510 | /on-headers/1.0.2:
1511 | resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==}
1512 | engines: {node: '>= 0.8'}
1513 | dev: false
1514 |
1515 | /parseurl/1.3.3:
1516 | resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
1517 | engines: {node: '>= 0.8'}
1518 | dev: false
1519 |
1520 | /path-to-regexp/0.1.7:
1521 | resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
1522 | dev: false
1523 |
1524 | /picomatch/2.3.1:
1525 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1526 | engines: {node: '>=8.6'}
1527 | dev: true
1528 |
1529 | /process-nextick-args/2.0.1:
1530 | resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
1531 | dev: false
1532 |
1533 | /proxy-addr/2.0.7:
1534 | resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
1535 | engines: {node: '>= 0.10'}
1536 | dependencies:
1537 | forwarded: 0.2.0
1538 | ipaddr.js: 1.9.1
1539 | dev: false
1540 |
1541 | /pstree.remy/1.1.8:
1542 | resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==}
1543 | dev: true
1544 |
1545 | /punycode/2.1.1:
1546 | resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==}
1547 | engines: {node: '>=6'}
1548 | dev: false
1549 |
1550 | /qs/6.11.0:
1551 | resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
1552 | engines: {node: '>=0.6'}
1553 | dependencies:
1554 | side-channel: 1.0.4
1555 | dev: false
1556 |
1557 | /range-parser/1.2.1:
1558 | resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
1559 | engines: {node: '>= 0.6'}
1560 | dev: false
1561 |
1562 | /raw-body/2.5.1:
1563 | resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==}
1564 | engines: {node: '>= 0.8'}
1565 | dependencies:
1566 | bytes: 3.1.2
1567 | http-errors: 2.0.0
1568 | iconv-lite: 0.4.24
1569 | unpipe: 1.0.0
1570 | dev: false
1571 |
1572 | /readable-stream/1.1.14:
1573 | resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==}
1574 | dependencies:
1575 | core-util-is: 1.0.3
1576 | inherits: 2.0.4
1577 | isarray: 0.0.1
1578 | string_decoder: 0.10.31
1579 | dev: false
1580 |
1581 | /readable-stream/2.3.7:
1582 | resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==}
1583 | dependencies:
1584 | core-util-is: 1.0.3
1585 | inherits: 2.0.4
1586 | isarray: 1.0.0
1587 | process-nextick-args: 2.0.1
1588 | safe-buffer: 5.1.2
1589 | string_decoder: 1.1.1
1590 | util-deprecate: 1.0.2
1591 | dev: false
1592 |
1593 | /readdirp/3.6.0:
1594 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1595 | engines: {node: '>=8.10.0'}
1596 | dependencies:
1597 | picomatch: 2.3.1
1598 | dev: true
1599 |
1600 | /safe-buffer/5.1.2:
1601 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
1602 | dev: false
1603 |
1604 | /safe-buffer/5.2.1:
1605 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
1606 | dev: false
1607 |
1608 | /safer-buffer/2.1.2:
1609 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
1610 | dev: false
1611 |
1612 | /saslprep/1.0.3:
1613 | resolution: {integrity: sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==}
1614 | engines: {node: '>=6'}
1615 | requiresBuild: true
1616 | dependencies:
1617 | sparse-bitfield: 3.0.3
1618 | dev: false
1619 | optional: true
1620 |
1621 | /semver/5.7.1:
1622 | resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
1623 | hasBin: true
1624 | dev: true
1625 |
1626 | /semver/7.0.0:
1627 | resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==}
1628 | hasBin: true
1629 | dev: true
1630 |
1631 | /send/0.18.0:
1632 | resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==}
1633 | engines: {node: '>= 0.8.0'}
1634 | dependencies:
1635 | debug: 2.6.9
1636 | depd: 2.0.0
1637 | destroy: 1.2.0
1638 | encodeurl: 1.0.2
1639 | escape-html: 1.0.3
1640 | etag: 1.8.1
1641 | fresh: 0.5.2
1642 | http-errors: 2.0.0
1643 | mime: 1.6.0
1644 | ms: 2.1.3
1645 | on-finished: 2.4.1
1646 | range-parser: 1.2.1
1647 | statuses: 2.0.1
1648 | transitivePeerDependencies:
1649 | - supports-color
1650 | dev: false
1651 |
1652 | /serve-static/1.15.0:
1653 | resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==}
1654 | engines: {node: '>= 0.8.0'}
1655 | dependencies:
1656 | encodeurl: 1.0.2
1657 | escape-html: 1.0.3
1658 | parseurl: 1.3.3
1659 | send: 0.18.0
1660 | transitivePeerDependencies:
1661 | - supports-color
1662 | dev: false
1663 |
1664 | /setprototypeof/1.2.0:
1665 | resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
1666 | dev: false
1667 |
1668 | /side-channel/1.0.4:
1669 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
1670 | dependencies:
1671 | call-bind: 1.0.2
1672 | get-intrinsic: 1.1.3
1673 | object-inspect: 1.12.2
1674 | dev: false
1675 |
1676 | /sift/16.0.1:
1677 | resolution: {integrity: sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==}
1678 | dev: false
1679 |
1680 | /simple-update-notifier/1.0.7:
1681 | resolution: {integrity: sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==}
1682 | engines: {node: '>=8.10.0'}
1683 | dependencies:
1684 | semver: 7.0.0
1685 | dev: true
1686 |
1687 | /smart-buffer/4.2.0:
1688 | resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
1689 | engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
1690 | dev: false
1691 |
1692 | /socks/2.7.1:
1693 | resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==}
1694 | engines: {node: '>= 10.13.0', npm: '>= 3.0.0'}
1695 | dependencies:
1696 | ip: 2.0.0
1697 | smart-buffer: 4.2.0
1698 | dev: false
1699 |
1700 | /sparse-bitfield/3.0.3:
1701 | resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==}
1702 | dependencies:
1703 | memory-pager: 1.5.0
1704 | dev: false
1705 | optional: true
1706 |
1707 | /statuses/2.0.1:
1708 | resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
1709 | engines: {node: '>= 0.8'}
1710 | dev: false
1711 |
1712 | /streamsearch/0.1.2:
1713 | resolution: {integrity: sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA==}
1714 | engines: {node: '>=0.8.0'}
1715 | dev: false
1716 |
1717 | /string_decoder/0.10.31:
1718 | resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==}
1719 | dev: false
1720 |
1721 | /string_decoder/1.1.1:
1722 | resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
1723 | dependencies:
1724 | safe-buffer: 5.1.2
1725 | dev: false
1726 |
1727 | /strnum/1.0.5:
1728 | resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==}
1729 | dev: false
1730 | optional: true
1731 |
1732 | /supports-color/5.5.0:
1733 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
1734 | engines: {node: '>=4'}
1735 | dependencies:
1736 | has-flag: 3.0.0
1737 | dev: true
1738 |
1739 | /timeago.js/4.0.2:
1740 | resolution: {integrity: sha512-a7wPxPdVlQL7lqvitHGGRsofhdwtkoSXPGATFuSOA2i1ZNQEPLrGnj68vOp2sOJTCFAQVXPeNMX/GctBaO9L2w==}
1741 | dev: true
1742 |
1743 | /to-regex-range/5.0.1:
1744 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1745 | engines: {node: '>=8.0'}
1746 | dependencies:
1747 | is-number: 7.0.0
1748 | dev: true
1749 |
1750 | /toidentifier/1.0.1:
1751 | resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
1752 | engines: {node: '>=0.6'}
1753 | dev: false
1754 |
1755 | /touch/3.1.0:
1756 | resolution: {integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==}
1757 | hasBin: true
1758 | dependencies:
1759 | nopt: 1.0.10
1760 | dev: true
1761 |
1762 | /tr46/3.0.0:
1763 | resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==}
1764 | engines: {node: '>=12'}
1765 | dependencies:
1766 | punycode: 2.1.1
1767 | dev: false
1768 |
1769 | /tslib/1.14.1:
1770 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
1771 | dev: false
1772 | optional: true
1773 |
1774 | /tslib/2.4.1:
1775 | resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==}
1776 | dev: false
1777 | optional: true
1778 |
1779 | /type-is/1.6.18:
1780 | resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
1781 | engines: {node: '>= 0.6'}
1782 | dependencies:
1783 | media-typer: 0.3.0
1784 | mime-types: 2.1.35
1785 | dev: false
1786 |
1787 | /typedarray/0.0.6:
1788 | resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
1789 | dev: false
1790 |
1791 | /undefsafe/2.0.5:
1792 | resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==}
1793 | dev: true
1794 |
1795 | /unpipe/1.0.0:
1796 | resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
1797 | engines: {node: '>= 0.8'}
1798 | dev: false
1799 |
1800 | /util-deprecate/1.0.2:
1801 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
1802 | dev: false
1803 |
1804 | /utils-merge/1.0.1:
1805 | resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
1806 | engines: {node: '>= 0.4.0'}
1807 | dev: false
1808 |
1809 | /uuid/8.3.2:
1810 | resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
1811 | hasBin: true
1812 | dev: false
1813 | optional: true
1814 |
1815 | /vary/1.1.2:
1816 | resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
1817 | engines: {node: '>= 0.8'}
1818 | dev: false
1819 |
1820 | /webidl-conversions/7.0.0:
1821 | resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
1822 | engines: {node: '>=12'}
1823 | dev: false
1824 |
1825 | /whatwg-url/11.0.0:
1826 | resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==}
1827 | engines: {node: '>=12'}
1828 | dependencies:
1829 | tr46: 3.0.0
1830 | webidl-conversions: 7.0.0
1831 | dev: false
1832 |
1833 | /xtend/4.0.2:
1834 | resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
1835 | engines: {node: '>=0.4'}
1836 | dev: false
1837 |
--------------------------------------------------------------------------------
/requests/books.rest:
--------------------------------------------------------------------------------
1 | ### Get books
2 | GET http://localhost:4000/api/books
3 |
4 | ### create new book
5 | POST http://localhost:4000/api/books
6 | Content-Type: application/json
7 |
8 | {
9 | "title": "The Lord of the Rings",
10 | "author": "J.R.R. Tolkien",
11 | "isbn": "0-395-19395-8"
12 | }
--------------------------------------------------------------------------------