From 7d1d2258d4abb247f6c049153603f130e52ad111 Mon Sep 17 00:00:00 2001 From: itahTamar Date: Wed, 23 Aug 2023 19:52:01 +0300 Subject: [PATCH 01/10] user room1 --- .../class puzzel/tamar_grop/package.json | 24 ++++++++ .../class puzzel/tamar_grop/server.ts | 0 .../class puzzel/tamar_grop/tsconfig.json | 11 ++++ .../example/API/users/dist/userCont.js | 56 +++++++++++++++++++ .../example/API/users/dist/userModel.js | 14 +++++ .../example/API/users/dist/userRouter.js | 10 ++++ .../05-Routes/example/API/users/userCont.ts | 54 ++++++++++++++++++ .../05-Routes/example/API/users/userModel.ts | 12 ++++ .../05-Routes/example/API/users/userRouter.ts | 13 +++++ 05-node/05-Routes/example/dist/server.js | 24 ++++++++ 05-node/05-Routes/example/server.ts | 5 +- 11 files changed, 222 insertions(+), 1 deletion(-) create mode 100644 05-node/05-Routes/class puzzel/tamar_grop/package.json create mode 100644 05-node/05-Routes/class puzzel/tamar_grop/server.ts create mode 100644 05-node/05-Routes/class puzzel/tamar_grop/tsconfig.json create mode 100644 05-node/05-Routes/example/API/users/dist/userCont.js create mode 100644 05-node/05-Routes/example/API/users/dist/userModel.js create mode 100644 05-node/05-Routes/example/API/users/dist/userRouter.js create mode 100644 05-node/05-Routes/example/API/users/userCont.ts create mode 100644 05-node/05-Routes/example/API/users/userModel.ts create mode 100644 05-node/05-Routes/example/API/users/userRouter.ts create mode 100644 05-node/05-Routes/example/dist/server.js diff --git a/05-node/05-Routes/class puzzel/tamar_grop/package.json b/05-node/05-Routes/class puzzel/tamar_grop/package.json new file mode 100644 index 000000000..388af5d5e --- /dev/null +++ b/05-node/05-Routes/class puzzel/tamar_grop/package.json @@ -0,0 +1,24 @@ +{ + "name": "example", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "tsc", + "dev": "nodemon server.ts", + "start": "node dist/server.js", + "update": "npm install -g npm-check-updates && ncu -u && npm install" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "nodemon": "^3.0.1", + "ts-node": "^10.9.1", + "typescript": "^5.1.6" + }, + "dependencies": { + "express": "^4.18.2" + } +} diff --git a/05-node/05-Routes/class puzzel/tamar_grop/server.ts b/05-node/05-Routes/class puzzel/tamar_grop/server.ts new file mode 100644 index 000000000..e69de29bb diff --git a/05-node/05-Routes/class puzzel/tamar_grop/tsconfig.json b/05-node/05-Routes/class puzzel/tamar_grop/tsconfig.json new file mode 100644 index 000000000..bd2ebf947 --- /dev/null +++ b/05-node/05-Routes/class puzzel/tamar_grop/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "module": "commonjs", + "esModuleInterop": true, + "target": "es6", + "moduleResolution": "node", + "sourceMap": true, + "outDir": "dist" + }, + "lib": ["es2015"] + } \ No newline at end of file diff --git a/05-node/05-Routes/example/API/users/dist/userCont.js b/05-node/05-Routes/example/API/users/dist/userCont.js new file mode 100644 index 000000000..185b1bc6f --- /dev/null +++ b/05-node/05-Routes/example/API/users/dist/userCont.js @@ -0,0 +1,56 @@ +"use strict"; +exports.__esModule = true; +exports.updateUser = exports.deleteUser = exports.getUsers = exports.addUser = void 0; +var userModel_1 = require("./userModel"); +var users = [ + new userModel_1.User({ name: "test", phoneNum: "052-5381648", imgUrl: "bla" }) +]; +//add user controler +exports.addUser = function (req, res) { + var user = req.body; + console.log(user); + //add to users array + users.push(new userModel_1.User(user)); // --> add to Database + console.log(users); + res.send({ user: user }); +}; +//get users +exports.getUsers = function (req, res) { + try { + res.send({ users: users }); + } + catch (error) { + console.error(error); + } +}; +exports.deleteUser = function (req, res) { + try { + var id_1 = req.body.id; + console.log(id_1); + if (!id_1) + throw new Error("there is no id"); + users = users.filter(function (user) { return user.id !== id_1; }); //delete from the array + res.send({ users: users }); + } + catch (error) { + console.error(error); + res.send({ error: error }); + } +}; +exports.updateUser = function (req, res) { + try { + var _a = req.body, phoneNum = _a.phoneNum, id_2 = _a.id; + console.log(req.body); + if (!phoneNum || !id_2) + throw new Error("Please complete all fields"); + var user = users.find(function (user) { return user.id === id_2; }); + if (!user) + throw new Error("user not found"); + user.phoneNum = phoneNum; + res.send({ users: users }); + } + catch (error) { + console.error(error); + res.send({ error: error }); + } +}; diff --git a/05-node/05-Routes/example/API/users/dist/userModel.js b/05-node/05-Routes/example/API/users/dist/userModel.js new file mode 100644 index 000000000..3e6bce974 --- /dev/null +++ b/05-node/05-Routes/example/API/users/dist/userModel.js @@ -0,0 +1,14 @@ +"use strict"; +exports.__esModule = true; +exports.User = void 0; +var User = /** @class */ (function () { + function User(_a) { + var name = _a.name, phoneNum = _a.phoneNum, imgUrl = _a.imgUrl; + this.name = name; + this.phoneNum = phoneNum; + this.imgUrl = imgUrl; + this.id = Math.random().toString(); + } + return User; +}()); +exports.User = User; diff --git a/05-node/05-Routes/example/API/users/dist/userRouter.js b/05-node/05-Routes/example/API/users/dist/userRouter.js new file mode 100644 index 000000000..6c6a62a1e --- /dev/null +++ b/05-node/05-Routes/example/API/users/dist/userRouter.js @@ -0,0 +1,10 @@ +"use strict"; +exports.__esModule = true; +var express_1 = require("express"); +var userCont_1 = require("./userCont"); +var router = express_1["default"].Router(); +router + .get('/get-users', userCont_1.getUsers) + .post("/add-user", userCont_1.addUser)["delete"]("/delete-user", userCont_1.deleteUser) + .patch('/update-user', userCont_1.updateUser); +exports["default"] = router; diff --git a/05-node/05-Routes/example/API/users/userCont.ts b/05-node/05-Routes/example/API/users/userCont.ts new file mode 100644 index 000000000..2441dffb2 --- /dev/null +++ b/05-node/05-Routes/example/API/users/userCont.ts @@ -0,0 +1,54 @@ +import { User } from "./userModel"; + +let users: User[] = [ + new User({name:"test", phoneNum:"052-5381648", imgUrl:"bla"}) +]; + +//add user controler +export const addUser = (req: any, res: any) => { + const user: User = req.body; + console.log(user); + //add to users array + users.push(new User(user)); // --> add to Database + console.log(users); + res.send({ user }); +} + +//get users +export const getUsers = (req, res) => { + try { + res.send({ users }); + } catch (error) { + console.error(error); + } +} + +export const deleteUser = (req, res) => { + try { + const { id } = req.body; + console.log(id); + if (!id) throw new Error("there is no id"); + + users = users.filter((user) => user.id !== id); //delete from the array + res.send({ users }); + } catch (error) { + console.error(error); + res.send({ error }); + } +} + +export const updateUser = (req: any, res: any) => { + try { + const { phoneNum, id } = req.body; + console.log(req.body); + if (!phoneNum || !id) throw new Error("Please complete all fields"); + const user = users.find((user) => user.id === id); + + if (!user) throw new Error("user not found"); + user.phoneNum = phoneNum; + res.send({ users }); + } catch (error) { + console.error(error); + res.send({ error }); + } +} \ No newline at end of file diff --git a/05-node/05-Routes/example/API/users/userModel.ts b/05-node/05-Routes/example/API/users/userModel.ts new file mode 100644 index 000000000..95a2e103f --- /dev/null +++ b/05-node/05-Routes/example/API/users/userModel.ts @@ -0,0 +1,12 @@ +export class User { + name: string; + phoneNum: string; + imgUrl: string; + id: string; + constructor({ name, phoneNum, imgUrl }: {name:string, phoneNum:string, imgUrl:string}) { + this.name = name; + this.phoneNum = phoneNum; + this.imgUrl = imgUrl; + this.id = Math.random().toString(); + } + } \ No newline at end of file diff --git a/05-node/05-Routes/example/API/users/userRouter.ts b/05-node/05-Routes/example/API/users/userRouter.ts new file mode 100644 index 000000000..3e63e848b --- /dev/null +++ b/05-node/05-Routes/example/API/users/userRouter.ts @@ -0,0 +1,13 @@ +import express from 'express' +import { getUsers, addUser, deleteUser, updateUser } from './userCont'; +const router = express.Router(); + + +router + .get('/get-users', getUsers) + .post("/add-user", addUser) + .delete("/delete-user", deleteUser) + .patch('/update-user', updateUser) + + +export default router; \ No newline at end of file diff --git a/05-node/05-Routes/example/dist/server.js b/05-node/05-Routes/example/dist/server.js new file mode 100644 index 000000000..de42e3d26 --- /dev/null +++ b/05-node/05-Routes/example/dist/server.js @@ -0,0 +1,24 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const express_1 = __importDefault(require("express")); +const app = express_1.default(); +const port = process.env.PORT || 3000; +//static files +app.use(express_1.default.static("public")); +//body +app.use(express_1.default.json()); +//router to products +// get router from productsRouter +const productsRouter_1 = __importDefault(require("./API/products/productsRouter")); +//tells express to use proudctsRouter on the intial route "/API/products" +app.use("/API/products", productsRouter_1.default); +// get router from userRouter +const userRouter_1 = __importDefault(require("./API/users/userRouter")); +//tells express to use userRouter on the intial route "/API/users" +app.use("/API/users", userRouter_1.default); +app.listen(port, () => { + console.log(`Example app listening on port ${port}`); +}); diff --git a/05-node/05-Routes/example/server.ts b/05-node/05-Routes/example/server.ts index bbc169677..06b794283 100644 --- a/05-node/05-Routes/example/server.ts +++ b/05-node/05-Routes/example/server.ts @@ -20,7 +20,10 @@ import productsRouter from "./API/products/productsRouter"; //tells express to use proudctsRouter on the intial route "/API/products" app.use("/API/products", productsRouter) - +// get router from userRouter +import userRouter from "./API/users/userRouter"; +//tells express to use userRouter on the intial route "/API/users" +app.use("/API/users", userRouter) app.listen(port, () => { console.log(`Example app listening on port ${port}`); From 306f21ef0d4f1a1f9190d5341ea821c8a72f3255 Mon Sep 17 00:00:00 2001 From: itahTamar Date: Wed, 23 Aug 2023 19:58:34 +0300 Subject: [PATCH 02/10] update package file --- 05-node/05-Routes/example/package-lock.json | 90 ++++++++++++++++++++- 05-node/05-Routes/example/package.json | 1 + 2 files changed, 90 insertions(+), 1 deletion(-) diff --git a/05-node/05-Routes/example/package-lock.json b/05-node/05-Routes/example/package-lock.json index 8ada15b86..62333989f 100644 --- a/05-node/05-Routes/example/package-lock.json +++ b/05-node/05-Routes/example/package-lock.json @@ -12,6 +12,7 @@ "express": "^4.18.2" }, "devDependencies": { + "@types/express": "^4.17.17", "nodemon": "^3.0.1", "ts-node": "^10.9.1", "typescript": "^5.1.6" @@ -78,12 +79,99 @@ "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "dev": true }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.36", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.36.tgz", + "integrity": "sha512-zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, "node_modules/@types/node": { "version": "20.5.1", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.1.tgz", "integrity": "sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", + "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", "dev": true, - "peer": true + "dependencies": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } }, "node_modules/abbrev": { "version": "1.1.1", diff --git a/05-node/05-Routes/example/package.json b/05-node/05-Routes/example/package.json index 388af5d5e..f268f9518 100644 --- a/05-node/05-Routes/example/package.json +++ b/05-node/05-Routes/example/package.json @@ -14,6 +14,7 @@ "author": "", "license": "ISC", "devDependencies": { + "@types/express": "^4.17.17", "nodemon": "^3.0.1", "ts-node": "^10.9.1", "typescript": "^5.1.6" From 4283cc20caca0350737ff6665a9e982bcd0781b0 Mon Sep 17 00:00:00 2001 From: itahTamar Date: Wed, 23 Aug 2023 20:15:54 +0300 Subject: [PATCH 03/10] update html and user.ts --- 05-node/05-Routes/example/public/dist/user.js | 5 +++++ 05-node/05-Routes/example/public/index.html | 2 ++ 05-node/05-Routes/example/public/user.ts | 14 ++++++++++++++ 3 files changed, 21 insertions(+) create mode 100644 05-node/05-Routes/example/public/dist/user.js create mode 100644 05-node/05-Routes/example/public/user.ts diff --git a/05-node/05-Routes/example/public/dist/user.js b/05-node/05-Routes/example/public/dist/user.js new file mode 100644 index 000000000..0fa733961 --- /dev/null +++ b/05-node/05-Routes/example/public/dist/user.js @@ -0,0 +1,5 @@ +function handleUser() { + var toHtml = document.querySelector('#userRoot'); + var html = "\n

Add User

\n
\n \n \n \n \n
"; + toHtml.innerHTML = html; +} diff --git a/05-node/05-Routes/example/public/index.html b/05-node/05-Routes/example/public/index.html index d556b63e2..3ad98d7f4 100644 --- a/05-node/05-Routes/example/public/index.html +++ b/05-node/05-Routes/example/public/index.html @@ -20,5 +20,7 @@

Add Product

+ + \ No newline at end of file diff --git a/05-node/05-Routes/example/public/user.ts b/05-node/05-Routes/example/public/user.ts new file mode 100644 index 000000000..00373845f --- /dev/null +++ b/05-node/05-Routes/example/public/user.ts @@ -0,0 +1,14 @@ +function handleUser() { + const toHtml = document.querySelector('#userRoot'); + const html = ` +

Add User

+
+ + + + +
` + + toHtml.innerHTML = html +} + From 2faaf7316e9d90bda4322b39046bb696a7287007 Mon Sep 17 00:00:00 2001 From: itahTamar Date: Wed, 23 Aug 2023 20:34:30 +0300 Subject: [PATCH 04/10] updare --- 05-node/05-Routes/example/public/dist/user.js | 4 ++-- 05-node/05-Routes/example/public/index.html | 4 +++- 05-node/05-Routes/example/public/user.ts | 4 ++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/05-node/05-Routes/example/public/dist/user.js b/05-node/05-Routes/example/public/dist/user.js index 0fa733961..65b5f6171 100644 --- a/05-node/05-Routes/example/public/dist/user.js +++ b/05-node/05-Routes/example/public/dist/user.js @@ -1,5 +1,5 @@ -function handleUser() { +function handleGetUser() { var toHtml = document.querySelector('#userRoot'); var html = "\n

Add User

\n
\n \n \n \n \n
"; - toHtml.innerHTML = html; + toHtml.innerHTML += html; } diff --git a/05-node/05-Routes/example/public/index.html b/05-node/05-Routes/example/public/index.html index 3ad98d7f4..1a0c86d52 100644 --- a/05-node/05-Routes/example/public/index.html +++ b/05-node/05-Routes/example/public/index.html @@ -21,6 +21,8 @@

Add Product

- + +
+ \ No newline at end of file diff --git a/05-node/05-Routes/example/public/user.ts b/05-node/05-Routes/example/public/user.ts index 00373845f..0a325fe6b 100644 --- a/05-node/05-Routes/example/public/user.ts +++ b/05-node/05-Routes/example/public/user.ts @@ -1,4 +1,4 @@ -function handleUser() { +function handleGetUser() { const toHtml = document.querySelector('#userRoot'); const html = `

Add User

@@ -9,6 +9,6 @@ function handleUser() { ` - toHtml.innerHTML = html + toHtml.innerHTML += html } From bc6fde4cdc06914caea1939ba1c53b1e7df48c42 Mon Sep 17 00:00:00 2001 From: itahTamar <125893355+itahTamar@users.noreply.github.com> Date: Thu, 24 Aug 2023 12:42:05 +0300 Subject: [PATCH 05/10] start tasks hw --- .../API/tasks/dist/tasksCont.js | 60 +++++++++++++++++++ .../API/tasks/dist/tasksModel.js | 14 +++++ .../API/tasks/dist/tasksRouter.js | 9 +++ .../tamar-home-puzzle/API/tasks/tasksCont.ts | 56 +++++++++++++++++ .../tamar-home-puzzle/API/tasks/tasksModel.ts | 12 ++++ .../API/tasks/tasksRouter.ts | 11 ++++ .../tamar-home-puzzle/dist/server.js | 0 .../tamar-home-puzzle/hw_instraction.md | 28 +++++++++ .../05-Routes/tamar-home-puzzle/package.json | 24 ++++++++ 05-node/05-Routes/tamar-home-puzzle/server.ts | 0 .../05-Routes/tamar-home-puzzle/tsconfig.json | 11 ++++ 11 files changed, 225 insertions(+) create mode 100644 05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksCont.js create mode 100644 05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksModel.js create mode 100644 05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksRouter.js create mode 100644 05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksCont.ts create mode 100644 05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksModel.ts create mode 100644 05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksRouter.ts create mode 100644 05-node/05-Routes/tamar-home-puzzle/dist/server.js create mode 100644 05-node/05-Routes/tamar-home-puzzle/hw_instraction.md create mode 100644 05-node/05-Routes/tamar-home-puzzle/package.json create mode 100644 05-node/05-Routes/tamar-home-puzzle/server.ts create mode 100644 05-node/05-Routes/tamar-home-puzzle/tsconfig.json diff --git a/05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksCont.js b/05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksCont.js new file mode 100644 index 000000000..a4ee21eee --- /dev/null +++ b/05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksCont.js @@ -0,0 +1,60 @@ +"use strict"; +exports.__esModule = true; +exports.deleteTask = exports.updateTaskStatus = exports.getTasks = exports.addTask = void 0; +var tasksModel_1 = require("./tasksModel"); +var tasks = []; +//the cintrollers: +//add task to server +exports.addTask = function (req, res) { + try { + var task = req.body; //tack data from user + console.log(task); + if (!task) + throw new Error("no req.body task found"); + tasks.push(new tasksModel_1.Task(task)); //server add the task to tasks array + console.log(tasks); + res.send({ tasks: tasks }); //server send update array to client + } + catch (error) { + console.error(error); + } +}; +//get all tasks from server +exports.getTasks = function (req, res) { + try { + res.send({ tasks: tasks }); + } + catch (error) { + console.error(error); + } +}; +//update specific task +exports.updateTaskStatus = function (req, res) { + try { + var _a = req.body, status = _a.status, id_1 = _a.id; //get knew status from user and req to update it in the specific task + console.log(req.body); + if (!status || !id_1) + throw new Error("please fill status field"); + var task = tasks.find(function (task) { return task.id === id_1; }); + if (!task) + throw new Error("no task match found"); + task.status = status; //update the status + res.send({ tasks: tasks }); //server send the updated array to client + } + catch (error) { + console.error(error); + } +}; +//delete specific task +exports.deleteTask = function (req, res) { + try { + var id_2 = req.body.id; + console.log(id_2); + tasks = tasks.filter(function (task) { return task.id !== id_2; }); + res.send({ tasks: tasks }); + } + catch (error) { + console.error(error); + res.send({ error: error }); + } +}; diff --git a/05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksModel.js b/05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksModel.js new file mode 100644 index 000000000..312b6b97d --- /dev/null +++ b/05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksModel.js @@ -0,0 +1,14 @@ +"use strict"; +exports.__esModule = true; +exports.Task = void 0; +var Task = /** @class */ (function () { + function Task(_a) { + var title = _a.title, description = _a.description; + this.title = title; + this.description = description; + this.status = "To-Do"; + this.id = Math.random().toString(); + } + return Task; +}()); +exports.Task = Task; diff --git a/05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksRouter.js b/05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksRouter.js new file mode 100644 index 000000000..07d57d62f --- /dev/null +++ b/05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksRouter.js @@ -0,0 +1,9 @@ +"use strict"; +exports.__esModule = true; +var tasksCont_1 = require("./tasksCont"); +var router = express.Router(); +router + .post('/add-task', tasksCont_1.addTask) + .get('/get-tasks', tasksCont_1.getTasks) + .patch('/update-task-status', tasksCont_1.updateTaskStatus)["delete"]('/delet-task', tasksCont_1.deleteTask); +exports["default"] = router; diff --git a/05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksCont.ts b/05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksCont.ts new file mode 100644 index 000000000..4f0f252d3 --- /dev/null +++ b/05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksCont.ts @@ -0,0 +1,56 @@ +import { compileString } from "sass"; +import { Task } from "./tasksModel"; + +let tasks: Task[] = []; + +//the cintrollers: +//add task to server +export const addTask = (req: any, res: any) => { + try { + const task: Task = req.body; //tack data from user + console.log(task); + if (!task) throw new Error("no req.body task found"); + tasks.push(new Task(task)); //server add the task to tasks array + console.log(tasks); + res.send({ tasks }) //server send update array to client + } catch (error) { + console.error(error); + } +} + +//get all tasks from server +export const getTasks = (req: any, res: any) => { + try { + res.send({ tasks }); + } catch (error) { + console.error(error); + } +} + +//update specific task +export const updateTaskStatus = (req: any, res: any) => { + try { + const { status, id } = req.body; //get knew status from user and req to update it in the specific task + console.log(req.body); + if (!status || !id) throw new Error("please fill status field"); + const task = tasks.find((task) => task.id === id); + if (!task) throw new Error("no task match found"); + task.status = status; //update the status + res.send({tasks}) //server send the updated array to client + } catch (error) { + console.error(error); + } +} + +//delete specific task +export const deleteTask = (req: any, res: any) => { + try { + const { id } = req.body; + console.log(id); + tasks = tasks.filter((task) => task.id !== id); + res.send({ tasks }); + } catch (error) { + console.error(error); + res.send({error}) + } +} diff --git a/05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksModel.ts b/05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksModel.ts new file mode 100644 index 000000000..978178d44 --- /dev/null +++ b/05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksModel.ts @@ -0,0 +1,12 @@ +export class Task { + title: string; + description: string; + status: string; + id: string; + constructor({ title, description }: {title:string, description: string}) { + this.title = title; + this.description = description; + this.status = "To-Do" ; + this.id = Math.random().toString(); + } + } diff --git a/05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksRouter.ts b/05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksRouter.ts new file mode 100644 index 000000000..b44c99cff --- /dev/null +++ b/05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksRouter.ts @@ -0,0 +1,11 @@ +import { Express } from "express"; +import { addTask, deleteTask, getTasks, updateTaskStatus } from "./tasksCont"; +const router = express.Router(); + +router + .post('/add-task', addTask) + .get('/get-tasks', getTasks) + .patch('/update-task-status', updateTaskStatus) + .delete('/delet-task', deleteTask) + +export default router; \ No newline at end of file diff --git a/05-node/05-Routes/tamar-home-puzzle/dist/server.js b/05-node/05-Routes/tamar-home-puzzle/dist/server.js new file mode 100644 index 000000000..e69de29bb diff --git a/05-node/05-Routes/tamar-home-puzzle/hw_instraction.md b/05-node/05-Routes/tamar-home-puzzle/hw_instraction.md new file mode 100644 index 000000000..39bfeaf38 --- /dev/null +++ b/05-node/05-Routes/tamar-home-puzzle/hw_instraction.md @@ -0,0 +1,28 @@ +**Scenario: Task Manager** + +You are building a basic task manager application. Each task has: + a unique ID, + a title, + a description, and + a status (either "To-Do," "Done"). + Your task is to implement the CRUD operations for managing tasks. + +**Exercise Tasks:** + +1. **Create:** + Implement a function/method that allows the user to create a new task. The function should take input for the task's title, description, and status. It should assign a unique ID to the task and add it to the list of tasks. + +2. **Read:** + Implement a function/method that allows the user to view tasks. The function should provide options to view all tasks, tasks by status, or a specific task by its ID. + +3. **Update:** + Implement a function/method that allows the user to update a task. The function should take the task's ID as input and provide options to update the title, description, or status of the task. + +4. **Delete:** + Implement a function/method that allows the user to delete a task. The function should take the task's ID as input and remove the task from the list of tasks. + +** Levels ** + +1) Do the above, only for entitiy Task. (Entities are just Taks, no Users) +2) Each user will have, her own list of tasks. (use Users and Tasks).The user can be chosen from a list of users in the main screen +3) The same as level 2, only that the user can create a new user, and choose it from the list of users in the main screen (use register and login screens) \ No newline at end of file diff --git a/05-node/05-Routes/tamar-home-puzzle/package.json b/05-node/05-Routes/tamar-home-puzzle/package.json new file mode 100644 index 000000000..388af5d5e --- /dev/null +++ b/05-node/05-Routes/tamar-home-puzzle/package.json @@ -0,0 +1,24 @@ +{ + "name": "example", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "tsc", + "dev": "nodemon server.ts", + "start": "node dist/server.js", + "update": "npm install -g npm-check-updates && ncu -u && npm install" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "nodemon": "^3.0.1", + "ts-node": "^10.9.1", + "typescript": "^5.1.6" + }, + "dependencies": { + "express": "^4.18.2" + } +} diff --git a/05-node/05-Routes/tamar-home-puzzle/server.ts b/05-node/05-Routes/tamar-home-puzzle/server.ts new file mode 100644 index 000000000..e69de29bb diff --git a/05-node/05-Routes/tamar-home-puzzle/tsconfig.json b/05-node/05-Routes/tamar-home-puzzle/tsconfig.json new file mode 100644 index 000000000..bd2ebf947 --- /dev/null +++ b/05-node/05-Routes/tamar-home-puzzle/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "module": "commonjs", + "esModuleInterop": true, + "target": "es6", + "moduleResolution": "node", + "sourceMap": true, + "outDir": "dist" + }, + "lib": ["es2015"] + } \ No newline at end of file From a0fcad4263c1e60f790ffdd9c956ae1d7c7909fa Mon Sep 17 00:00:00 2001 From: itahTamar Date: Thu, 24 Aug 2023 17:35:27 +0300 Subject: [PATCH 06/10] finish 1st level dont work yet --- 05-node/00-basic files for all/dist/server.js | 8 + 05-node/00-basic files for all/server.ts | 3 + .../API/tasks/dist/tasksCont.js | 4 +- .../API/tasks/dist/tasksRouter.js | 3 +- .../tamar-home-puzzle/API/tasks/tasksCont.ts | 4 +- .../API/tasks/tasksRouter.ts | 2 +- .../tamar-home-puzzle/dist/server.js | 18 + .../tamar-home-puzzle/package-lock.json | 2027 +++++++++++++++++ .../tamar-home-puzzle/public/dist/index.js | 80 + .../tamar-home-puzzle/public/dist/style.css | 0 .../tamar-home-puzzle/public/index.html | 13 + .../tamar-home-puzzle/public/index.ts | 29 + .../tamar-home-puzzle/public/style.scss | 0 05-node/05-Routes/tamar-home-puzzle/server.ts | 25 + 14 files changed, 2212 insertions(+), 4 deletions(-) create mode 100644 05-node/00-basic files for all/dist/server.js create mode 100644 05-node/05-Routes/tamar-home-puzzle/package-lock.json create mode 100644 05-node/05-Routes/tamar-home-puzzle/public/dist/index.js create mode 100644 05-node/05-Routes/tamar-home-puzzle/public/dist/style.css create mode 100644 05-node/05-Routes/tamar-home-puzzle/public/index.html create mode 100644 05-node/05-Routes/tamar-home-puzzle/public/index.ts create mode 100644 05-node/05-Routes/tamar-home-puzzle/public/style.scss diff --git a/05-node/00-basic files for all/dist/server.js b/05-node/00-basic files for all/dist/server.js new file mode 100644 index 000000000..8436a9ea8 --- /dev/null +++ b/05-node/00-basic files for all/dist/server.js @@ -0,0 +1,8 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const express_1 = __importDefault(require("express")); +const app = express_1.default(); +const port = process.env.PORT || 3000; diff --git a/05-node/00-basic files for all/server.ts b/05-node/00-basic files for all/server.ts index e69de29bb..9faa1fd52 100644 --- a/05-node/00-basic files for all/server.ts +++ b/05-node/00-basic files for all/server.ts @@ -0,0 +1,3 @@ +import express from "express" +const app = express() +const port = process.env.PORT || 3000 \ No newline at end of file diff --git a/05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksCont.js b/05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksCont.js index a4ee21eee..46c2d9c5b 100644 --- a/05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksCont.js +++ b/05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksCont.js @@ -2,7 +2,9 @@ exports.__esModule = true; exports.deleteTask = exports.updateTaskStatus = exports.getTasks = exports.addTask = void 0; var tasksModel_1 = require("./tasksModel"); -var tasks = []; +var tasks = [ + new tasksModel_1.Task({ title: "garbige", description: "throw the garbige" }) +]; //the cintrollers: //add task to server exports.addTask = function (req, res) { diff --git a/05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksRouter.js b/05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksRouter.js index 07d57d62f..e9c61629f 100644 --- a/05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksRouter.js +++ b/05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksRouter.js @@ -1,7 +1,8 @@ "use strict"; exports.__esModule = true; +var express_1 = require("express"); var tasksCont_1 = require("./tasksCont"); -var router = express.Router(); +var router = express_1["default"].Router(); router .post('/add-task', tasksCont_1.addTask) .get('/get-tasks', tasksCont_1.getTasks) diff --git a/05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksCont.ts b/05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksCont.ts index 4f0f252d3..c86f2e0f3 100644 --- a/05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksCont.ts +++ b/05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksCont.ts @@ -1,7 +1,9 @@ import { compileString } from "sass"; import { Task } from "./tasksModel"; -let tasks: Task[] = []; +let tasks: Task[] = [ + new Task({title:"garbige", description: "throw the garbige"}) +]; //the cintrollers: //add task to server diff --git a/05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksRouter.ts b/05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksRouter.ts index b44c99cff..f2c8abe46 100644 --- a/05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksRouter.ts +++ b/05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksRouter.ts @@ -1,4 +1,4 @@ -import { Express } from "express"; +import express from "express"; import { addTask, deleteTask, getTasks, updateTaskStatus } from "./tasksCont"; const router = express.Router(); diff --git a/05-node/05-Routes/tamar-home-puzzle/dist/server.js b/05-node/05-Routes/tamar-home-puzzle/dist/server.js index e69de29bb..7d5e48690 100644 --- a/05-node/05-Routes/tamar-home-puzzle/dist/server.js +++ b/05-node/05-Routes/tamar-home-puzzle/dist/server.js @@ -0,0 +1,18 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const express_1 = __importDefault(require("express")); +const app = express_1.default(); +const port = process.env.PORT || 3000; +//static files +//app.use(express.static("public")) //not yet created +//body +app.use(express_1.default.json()); +//routers: +//to task: +//get: +const tasksRouter_1 = __importDefault(require("./API/tasks/tasksRouter")); +//tells express to use this route on the initial rout "/API/tasks" +app.use("/API/tasks", tasksRouter_1.default); diff --git a/05-node/05-Routes/tamar-home-puzzle/package-lock.json b/05-node/05-Routes/tamar-home-puzzle/package-lock.json new file mode 100644 index 000000000..3d7db8cae --- /dev/null +++ b/05-node/05-Routes/tamar-home-puzzle/package-lock.json @@ -0,0 +1,2027 @@ +{ + "name": "example", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "example", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "express": "^4.18.2" + }, + "devDependencies": { + "nodemon": "^3.0.1", + "ts-node": "^10.9.1", + "typescript": "^5.1.6" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.5.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.4.tgz", + "integrity": "sha512-Y9vbIAoM31djQZrPYjpTLo0XlaSwOIsrlfE3LpulZeRblttsLQRFRlBAppW0LOxyT3ALj2M5vU1ucQQayQH3jA==", + "dev": true, + "peer": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nodemon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.1.tgz", + "integrity": "sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + } + }, + "dependencies": { + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "@types/node": { + "version": "20.5.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.4.tgz", + "integrity": "sha512-Y9vbIAoM31djQZrPYjpTLo0XlaSwOIsrlfE3LpulZeRblttsLQRFRlBAppW0LOxyT3ALj2M5vU1ucQQayQH3jA==", + "dev": true, + "peer": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "nodemon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.1.tgz", + "integrity": "sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==", + "dev": true, + "requires": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "requires": { + "semver": "^7.5.3" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "requires": { + "nopt": "~1.0.10" + } + }, + "ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + } + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typescript": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "dev": true + }, + "undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + } + } +} diff --git a/05-node/05-Routes/tamar-home-puzzle/public/dist/index.js b/05-node/05-Routes/tamar-home-puzzle/public/dist/index.js new file mode 100644 index 000000000..9aa4a2e39 --- /dev/null +++ b/05-node/05-Routes/tamar-home-puzzle/public/dist/index.js @@ -0,0 +1,80 @@ +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +function getTasks() { + return __awaiter(this, void 0, void 0, function () { + var response, result, tasks, error_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 3, , 4]); + return [4 /*yield*/, fetch('/API/tasks/get-tasks')]; + case 1: + response = _a.sent(); + return [4 /*yield*/, response.json()]; + case 2: + result = _a.sent(); + tasks = result.tasks; + if (!Array.isArray(tasks)) + throw new Error("tasks are not array"); + console.log(tasks); + console.log(result); + return [2 /*return*/, tasks]; + case 3: + error_1 = _a.sent(); + console.error(error_1); + return [2 /*return*/, []]; + case 4: return [2 /*return*/]; + } + }); + }); +} +getTasks(); +function handelGetTasks() { + return __awaiter(this, void 0, void 0, function () { + var tasks, root; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, getTasks()]; + case 1: + tasks = _a.sent(); + root = document.querySelector('#root'); + renderTasks(tasks, root); + return [2 /*return*/]; + } + }); + }); +} diff --git a/05-node/05-Routes/tamar-home-puzzle/public/dist/style.css b/05-node/05-Routes/tamar-home-puzzle/public/dist/style.css new file mode 100644 index 000000000..e69de29bb diff --git a/05-node/05-Routes/tamar-home-puzzle/public/index.html b/05-node/05-Routes/tamar-home-puzzle/public/index.html new file mode 100644 index 000000000..ea734eb67 --- /dev/null +++ b/05-node/05-Routes/tamar-home-puzzle/public/index.html @@ -0,0 +1,13 @@ + + + + + + + + Document + + +

Hello User

+ + \ No newline at end of file diff --git a/05-node/05-Routes/tamar-home-puzzle/public/index.ts b/05-node/05-Routes/tamar-home-puzzle/public/index.ts new file mode 100644 index 000000000..8b74cbf86 --- /dev/null +++ b/05-node/05-Routes/tamar-home-puzzle/public/index.ts @@ -0,0 +1,29 @@ +interface Task { + title: string; + description: string; + status: string; + id?:string +} + +async function getTasks () { + try { + const response = await fetch('/API/tasks/get-tasks') + const result = await response.json() + const {tasks} = result + if (!Array.isArray(tasks)) throw new Error("tasks are not array") + console.log(tasks) + console.log(result) + return tasks; + } catch (error) { + console.error(error) + return [] + } +} + +getTasks(); + +async function handelGetTasks() { + const tasks = await getTasks() + const root = document.querySelector('#root') + renderTasks(tasks, root as HTMLDivElement) +} \ No newline at end of file diff --git a/05-node/05-Routes/tamar-home-puzzle/public/style.scss b/05-node/05-Routes/tamar-home-puzzle/public/style.scss new file mode 100644 index 000000000..e69de29bb diff --git a/05-node/05-Routes/tamar-home-puzzle/server.ts b/05-node/05-Routes/tamar-home-puzzle/server.ts index e69de29bb..0ec0d9e10 100644 --- a/05-node/05-Routes/tamar-home-puzzle/server.ts +++ b/05-node/05-Routes/tamar-home-puzzle/server.ts @@ -0,0 +1,25 @@ +import express from "express" +const app = express() +const port = process.env.PORT || 3000 + +//interfaces: + +interface _Task { + title: string; + description: string; + status: string; +} + +//static files +//app.use(express.static("public")) //not yet created + +//body +app.use(express.json()) + +//routers: +//to task: +//get: +import tasksRouter from "./API/tasks/tasksRouter" + +//tells express to use this route on the initial rout "/API/tasks" +app.use("/API/tasks", tasksRouter) From 87a79ba35cbf801c177b309c3058cc8fbb56f199 Mon Sep 17 00:00:00 2001 From: itahTamar Date: Thu, 24 Aug 2023 21:38:22 +0300 Subject: [PATCH 07/10] add users --- .../API/tasks/dist/tasksCont.js | 4 +- .../tamar-home-puzzle/API/tasks/tasksCont.ts | 5 +- .../API/users/dist/usersCont.js | 64 +++++++++++++++++++ .../API/users/dist/usersModel.js | 12 ++++ .../API/users/dist/usersRouter.js | 10 +++ .../tamar-home-puzzle/API/users/usersCont.ts | 60 +++++++++++++++++ .../tamar-home-puzzle/API/users/usersModel.ts | 9 +++ .../API/users/usersRouter.ts | 11 ++++ .../tamar-home-puzzle/dist/server.js | 9 ++- 05-node/05-Routes/tamar-home-puzzle/server.ts | 11 +++- 10 files changed, 188 insertions(+), 7 deletions(-) create mode 100644 05-node/05-Routes/tamar-home-puzzle/API/users/dist/usersCont.js create mode 100644 05-node/05-Routes/tamar-home-puzzle/API/users/dist/usersModel.js create mode 100644 05-node/05-Routes/tamar-home-puzzle/API/users/dist/usersRouter.js create mode 100644 05-node/05-Routes/tamar-home-puzzle/API/users/usersCont.ts create mode 100644 05-node/05-Routes/tamar-home-puzzle/API/users/usersModel.ts create mode 100644 05-node/05-Routes/tamar-home-puzzle/API/users/usersRouter.ts diff --git a/05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksCont.js b/05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksCont.js index 46c2d9c5b..0999eaf46 100644 --- a/05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksCont.js +++ b/05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksCont.js @@ -5,7 +5,7 @@ var tasksModel_1 = require("./tasksModel"); var tasks = [ new tasksModel_1.Task({ title: "garbige", description: "throw the garbige" }) ]; -//the cintrollers: +//the controllers: //add task to server exports.addTask = function (req, res) { try { @@ -39,7 +39,7 @@ exports.updateTaskStatus = function (req, res) { throw new Error("please fill status field"); var task = tasks.find(function (task) { return task.id === id_1; }); if (!task) - throw new Error("no task match found"); + throw new Error("no match task found"); task.status = status; //update the status res.send({ tasks: tasks }); //server send the updated array to client } diff --git a/05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksCont.ts b/05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksCont.ts index c86f2e0f3..3180211c6 100644 --- a/05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksCont.ts +++ b/05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksCont.ts @@ -1,11 +1,10 @@ -import { compileString } from "sass"; import { Task } from "./tasksModel"; let tasks: Task[] = [ new Task({title:"garbige", description: "throw the garbige"}) ]; -//the cintrollers: +//the controllers: //add task to server export const addTask = (req: any, res: any) => { try { @@ -36,7 +35,7 @@ export const updateTaskStatus = (req: any, res: any) => { console.log(req.body); if (!status || !id) throw new Error("please fill status field"); const task = tasks.find((task) => task.id === id); - if (!task) throw new Error("no task match found"); + if (!task) throw new Error("no match task found"); task.status = status; //update the status res.send({tasks}) //server send the updated array to client } catch (error) { diff --git a/05-node/05-Routes/tamar-home-puzzle/API/users/dist/usersCont.js b/05-node/05-Routes/tamar-home-puzzle/API/users/dist/usersCont.js new file mode 100644 index 000000000..d6b43914b --- /dev/null +++ b/05-node/05-Routes/tamar-home-puzzle/API/users/dist/usersCont.js @@ -0,0 +1,64 @@ +"use strict"; +exports.__esModule = true; +exports.deleteUser = exports.updateUserTasks = exports.getUsers = exports.addUser = void 0; +var usersModel_1 = require("./usersModel"); +var users = [ + new usersModel_1.User({ name: "Tamar" }), + new usersModel_1.User({ name: "Amir" }), + new usersModel_1.User({ name: "Sivan" }), + new usersModel_1.User({ name: "Ofir" }), + new usersModel_1.User({ name: "Eliya" }) +]; +//the controllers: +//add User to server +exports.addUser = function (req, res) { + try { + var user = req.body; //tack data from client + console.log(user); + if (!user) + throw new Error("no req.body User found"); + users.push(new usersModel_1.User(user)); //server add the Userto users array + console.log(users); + res.send({ users: users }); //server send update array to client + } + catch (error) { + console.error(error); + } +}; +//get all users from server +exports.getUsers = function (req, res) { + try { + res.send({ users: users }); + } + catch (error) { + console.error(error); + } +}; +//update specific user +exports.updateUserTasks = function (req, res) { + try { + var id_1 = req.body.id; + console.log(id_1); + var user = users.find(function (user) { return user.id === id_1; }); + if (!user) + throw new Error("no match User found"); + user.tasks = //**need to be fill */ + res.send({ users: users }); //server send the updated array to client + } + catch (error) { + console.error(error); + } +}; +//delete specific user +exports.deleteUser = function (req, res) { + try { + var id_2 = req.body.id; + console.log(id_2); + users = users.filter(function (user) { return user.id !== id_2; }); + res.send({ users: users }); + } + catch (error) { + console.error(error); + res.send({ error: error }); + } +}; diff --git a/05-node/05-Routes/tamar-home-puzzle/API/users/dist/usersModel.js b/05-node/05-Routes/tamar-home-puzzle/API/users/dist/usersModel.js new file mode 100644 index 000000000..944410ce2 --- /dev/null +++ b/05-node/05-Routes/tamar-home-puzzle/API/users/dist/usersModel.js @@ -0,0 +1,12 @@ +"use strict"; +exports.__esModule = true; +exports.User = void 0; +var User = /** @class */ (function () { + function User(_a) { + var name = _a.name; + this.name = name; + this.id = Math.random().toString(); + } + return User; +}()); +exports.User = User; diff --git a/05-node/05-Routes/tamar-home-puzzle/API/users/dist/usersRouter.js b/05-node/05-Routes/tamar-home-puzzle/API/users/dist/usersRouter.js new file mode 100644 index 000000000..07d8f7f4c --- /dev/null +++ b/05-node/05-Routes/tamar-home-puzzle/API/users/dist/usersRouter.js @@ -0,0 +1,10 @@ +"use strict"; +exports.__esModule = true; +var express_1 = require("express"); +var usersCont_1 = require("./usersCont"); +var router = express_1["default"].Router(); +router + .post('/add-user', usersCont_1.addUser) + .get('/get-users', usersCont_1.getUsers) + .patch('/update-user-tasks', usersCont_1.updateUserTasks)["delete"]('/delet-user', usersCont_1.deleteUser); +exports["default"] = router; diff --git a/05-node/05-Routes/tamar-home-puzzle/API/users/usersCont.ts b/05-node/05-Routes/tamar-home-puzzle/API/users/usersCont.ts new file mode 100644 index 000000000..b0e7524d6 --- /dev/null +++ b/05-node/05-Routes/tamar-home-puzzle/API/users/usersCont.ts @@ -0,0 +1,60 @@ +import { User} from "./usersModel"; + +let users: User[] = [ + new User({name:"Tamar"}), + new User({name:"Amir"}), + new User({name:"Sivan"}), + new User({name:"Ofir"}), + new User({name:"Eliya"}) +]; + +//the controllers: +//add User to server +export const addUser= (req: any, res: any) => { + try { + const user: User= req.body; //tack data from client + console.log(user); + if (!user) throw new Error("no req.body User found"); + users.push(new User(user)); //server add the Userto users array + console.log(users); + res.send({ users }) //server send update array to client + } catch (error) { + console.error(error); + } +} + +//get all users from server +export const getUsers = (req: any, res: any) => { + try { + res.send({ users }); + } catch (error) { + console.error(error); + } +} + +//update specific user +export const updateUserTasks = (req: any, res: any) => { + try { + const { id } = req.body; + console.log(id); + const user = users.find((user) => user.id === id); + if (!user) throw new Error("no match User found"); + user.tasks = //**need to be fill */ + res.send({users}) //server send the updated array to client + } catch (error) { + console.error(error); + } +} + +//delete specific user +export const deleteUser= (req: any, res: any) => { + try { + const { id } = req.body; + console.log(id); + users = users.filter((user) => user.id !== id); + res.send({ users }); + } catch (error) { + console.error(error); + res.send({error}) + } +} diff --git a/05-node/05-Routes/tamar-home-puzzle/API/users/usersModel.ts b/05-node/05-Routes/tamar-home-puzzle/API/users/usersModel.ts new file mode 100644 index 000000000..0399db5f2 --- /dev/null +++ b/05-node/05-Routes/tamar-home-puzzle/API/users/usersModel.ts @@ -0,0 +1,9 @@ +export class User { + name: string; + tasks: Task[]; + id: string; + constructor({ name }: {name:string}) { + this.name = name; + this.id = Math.random().toString(); + } + } diff --git a/05-node/05-Routes/tamar-home-puzzle/API/users/usersRouter.ts b/05-node/05-Routes/tamar-home-puzzle/API/users/usersRouter.ts new file mode 100644 index 000000000..92e67c989 --- /dev/null +++ b/05-node/05-Routes/tamar-home-puzzle/API/users/usersRouter.ts @@ -0,0 +1,11 @@ +import express from "express"; +import { addUser, deleteUser, getUsers, updateUserTasks } from "./usersCont"; +const router = express.Router(); + +router + .post('/add-user', addUser) + .get('/get-users', getUsers) + .patch('/update-user-tasks', updateUserTasks) + .delete('/delet-user', deleteUser) + +export default router; \ No newline at end of file diff --git a/05-node/05-Routes/tamar-home-puzzle/dist/server.js b/05-node/05-Routes/tamar-home-puzzle/dist/server.js index 7d5e48690..0e5fce7e0 100644 --- a/05-node/05-Routes/tamar-home-puzzle/dist/server.js +++ b/05-node/05-Routes/tamar-home-puzzle/dist/server.js @@ -11,8 +11,15 @@ const port = process.env.PORT || 3000; //body app.use(express_1.default.json()); //routers: -//to task: +//get router from taskRouter: //get: const tasksRouter_1 = __importDefault(require("./API/tasks/tasksRouter")); //tells express to use this route on the initial rout "/API/tasks" app.use("/API/tasks", tasksRouter_1.default); +//get router from userRouter: +const usersRouter_1 = __importDefault(require("./API/users/usersRouter")); +//tells express to use userRouter on the intial route "/API/users" +app.use("/API/users", usersRouter_1.default); +app.listen(port, () => { + console.log(`app listening on pors ${port}`); +}); diff --git a/05-node/05-Routes/tamar-home-puzzle/server.ts b/05-node/05-Routes/tamar-home-puzzle/server.ts index 0ec0d9e10..8668574d9 100644 --- a/05-node/05-Routes/tamar-home-puzzle/server.ts +++ b/05-node/05-Routes/tamar-home-puzzle/server.ts @@ -17,9 +17,18 @@ interface _Task { app.use(express.json()) //routers: -//to task: +//get router from taskRouter: //get: import tasksRouter from "./API/tasks/tasksRouter" //tells express to use this route on the initial rout "/API/tasks" app.use("/API/tasks", tasksRouter) + +//get router from userRouter: +import usersRouter from "./API/users/usersRouter"; +//tells express to use userRouter on the intial route "/API/users" +app.use("/API/users", usersRouter) + +app.listen(port, () => { + console.log(`app listening on pors ${port}`) +}) From 85a0e7a42f0fca92f4f880fe6560e5e6689301cf Mon Sep 17 00:00:00 2001 From: itahTamar Date: Thu, 24 Aug 2023 22:27:23 +0300 Subject: [PATCH 08/10] mvc - add m add c in index.ts --- .../tamar-home-puzzle/API/users/usersModel.ts | 1 + .../tamar-home-puzzle/public/dist/index.js | 112 +++++++++++++++++- .../tamar-home-puzzle/public/index.ts | 93 ++++++++++++++- 3 files changed, 198 insertions(+), 8 deletions(-) diff --git a/05-node/05-Routes/tamar-home-puzzle/API/users/usersModel.ts b/05-node/05-Routes/tamar-home-puzzle/API/users/usersModel.ts index 0399db5f2..73e6e8ec2 100644 --- a/05-node/05-Routes/tamar-home-puzzle/API/users/usersModel.ts +++ b/05-node/05-Routes/tamar-home-puzzle/API/users/usersModel.ts @@ -1,3 +1,4 @@ +import { Task } from "../tasks/tasksModel"; export class User { name: string; tasks: Task[]; diff --git a/05-node/05-Routes/tamar-home-puzzle/public/dist/index.js b/05-node/05-Routes/tamar-home-puzzle/public/dist/index.js index 9aa4a2e39..044e76be7 100644 --- a/05-node/05-Routes/tamar-home-puzzle/public/dist/index.js +++ b/05-node/05-Routes/tamar-home-puzzle/public/dist/index.js @@ -34,9 +34,47 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +//view (all render function): +//controllers: +function handleAddTask(event) { + return __awaiter(this, void 0, void 0, function () { + var title, description, task, response, result, error_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 3, , 4]); + event.preventDefault(); + title = event.target.title.value; + description = event.target.description.value; + if (!title || !description) + throw new Error("Pleas complete all fields"); + task = { title: title, description: description }; + return [4 /*yield*/, fetch('/API/tasks/add-task', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(task) + })]; + case 1: + response = _a.sent(); + return [4 /*yield*/, response.json()]; + case 2: + result = _a.sent(); + console.log(result); + return [3 /*break*/, 4]; + case 3: + error_1 = _a.sent(); + console.error(error_1); + return [3 /*break*/, 4]; + case 4: return [2 /*return*/]; + } + }); + }); +} function getTasks() { return __awaiter(this, void 0, void 0, function () { - var response, result, tasks, error_1; + var response, result, tasks, error_2; return __generator(this, function (_a) { switch (_a.label) { case 0: @@ -54,8 +92,8 @@ function getTasks() { console.log(result); return [2 /*return*/, tasks]; case 3: - error_1 = _a.sent(); - console.error(error_1); + error_2 = _a.sent(); + console.error(error_2); return [2 /*return*/, []]; case 4: return [2 /*return*/]; } @@ -78,3 +116,71 @@ function handelGetTasks() { }); }); } +function handelDeleteTask(id) { + return __awaiter(this, void 0, void 0, function () { + var response, result, products, error_3; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 3, , 4]); + return [4 /*yield*/, fetch('/API/tasks/delet-task', { + method: 'DELETE', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ id: id }) + })]; + case 1: + response = _a.sent(); + return [4 /*yield*/, response.json()]; + case 2: + result = _a.sent(); + console.log(result); + products = result.products; + renderTasks(products, document.querySelector('#root')); + return [3 /*break*/, 4]; + case 3: + error_3 = _a.sent(); + console.error(error_3); + return [3 /*break*/, 4]; + case 4: return [2 /*return*/]; + } + }); + }); +} +function handleUpdateTaskStatus(ev) { + return __awaiter(this, void 0, void 0, function () { + var status, id, response, result, products, error_4; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 3, , 4]); + ev.preventDefault(); + status = ev.target.ststus.value; + id = ev.target.id; + console.log(id, status); + return [4 /*yield*/, fetch('/API/tasks/update-task-status', { + method: 'PATCH', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ id: id, status: status }) + })]; + case 1: + response = _a.sent(); + return [4 /*yield*/, response.json()]; + case 2: + result = _a.sent(); + console.log(result); + products = result.products; + rendertasks(products, document.querySelector('#root')); + return [3 /*break*/, 4]; + case 3: + error_4 = _a.sent(); + console.error(error_4); + return [3 /*break*/, 4]; + case 4: return [2 /*return*/]; + } + }); + }); +} diff --git a/05-node/05-Routes/tamar-home-puzzle/public/index.ts b/05-node/05-Routes/tamar-home-puzzle/public/index.ts index 8b74cbf86..024915ba7 100644 --- a/05-node/05-Routes/tamar-home-puzzle/public/index.ts +++ b/05-node/05-Routes/tamar-home-puzzle/public/index.ts @@ -1,15 +1,53 @@ +//mvc +//model interface Task { title: string; description: string; - status: string; - id?:string + status?: string; + id?: string } -async function getTasks () { +interface User { + name: string; + tasks: Task[]; + id?: string; +} + +//view (all render function): + + + +//controllers: + +async function handleAddTask(event: any) { + try { + event.preventDefault() + const title = event.target.title.value; + const description = event.target.description.value; + if (!title || !description) throw new Error("Pleas complete all fields"); + const task: Task = {title, description} + + const response = await fetch('/API/tasks/add-task', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(task) + }); + + const result = await response.json(); + console.log(result); + + } catch (error) { + console.error(error); + } +} + +async function getTasks() { try { const response = await fetch('/API/tasks/get-tasks') const result = await response.json() - const {tasks} = result + const { tasks } = result if (!Array.isArray(tasks)) throw new Error("tasks are not array") console.log(tasks) console.log(result) @@ -26,4 +64,49 @@ async function handelGetTasks() { const tasks = await getTasks() const root = document.querySelector('#root') renderTasks(tasks, root as HTMLDivElement) -} \ No newline at end of file +} + +async function handelDeleteTask(id: string) { + try { + const response = await fetch('/API/tasks/delet-task', { + method: 'DELETE', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({id}) + }); + const result = await response.json(); + console.log(result); + const {products} = result; + + renderTasks(products, document.querySelector('#root') as HTMLDivElement); + + } catch (error) { + console.error(error) + } +} + +async function handleUpdateTaskStatus(ev:any){ + try { + ev.preventDefault(); + const status = ev.target.ststus.value; + const id = ev.target.id; + console.log(id, status) + + const response = await fetch('/API/tasks/update-task-status', { + method: 'PATCH', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({id, status}) + }); + + const result = await response.json(); + console.log(result); + const {products} = result; + rendertasks(products, document.querySelector('#root') as HTMLDivElement); + + } catch (error) { + console.error(error) + } + } \ No newline at end of file From 6adafb92e09392abf772d6fe2cc5798bc80a6fce Mon Sep 17 00:00:00 2001 From: itahTamar Date: Sat, 26 Aug 2023 19:16:35 +0300 Subject: [PATCH 09/10] cont hw- user task --- .../05-Routes/example/public/dist/index.js | 2 +- 05-node/05-Routes/example/public/index.ts | 5 +- .../API/tasks/dist/tasksCont.js | 62 ++++++- .../tamar-home-puzzle/API/tasks/tasksCont.ts | 4 +- .../API/users/dist/usersCont.js | 11 +- .../API/users/dist/usersModel.js | 59 +++++++ .../tamar-home-puzzle/API/users/usersCont.ts | 15 +- .../tamar-home-puzzle/API/users/usersModel.ts | 28 +++- .../tamar-home-puzzle/public/dist/index.js | 128 ++++++++++++--- .../tamar-home-puzzle/public/index.html | 16 ++ .../tamar-home-puzzle/public/index.ts | 152 ++++++++++++++---- 05-node/05-Routes/tamar-home-puzzle/server.ts | 8 - 12 files changed, 408 insertions(+), 82 deletions(-) diff --git a/05-node/05-Routes/example/public/dist/index.js b/05-node/05-Routes/example/public/dist/index.js index 566c39134..77a0446ef 100644 --- a/05-node/05-Routes/example/public/dist/index.js +++ b/05-node/05-Routes/example/public/dist/index.js @@ -103,7 +103,7 @@ function getproducts() { } function renderProductHTML(product) { try { - var html = "
\n \n

" + product.title + "

\n

Price: " + product.price + "

\n
\n \n
"; + var html = "
\n \n

" + product.title + "

\n

Price: " + product.price + "

\n
\n \n \n
\n \n
"; return html; } catch (error) { diff --git a/05-node/05-Routes/example/public/index.ts b/05-node/05-Routes/example/public/index.ts index cd5139827..a5bf47e0f 100644 --- a/05-node/05-Routes/example/public/index.ts +++ b/05-node/05-Routes/example/public/index.ts @@ -59,7 +59,10 @@ function renderProductHTML(product: Product) {

${product.title}

Price: ${product.price}

-
+
+ + +
` return html; diff --git a/05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksCont.js b/05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksCont.js index 0999eaf46..851bde797 100644 --- a/05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksCont.js +++ b/05-node/05-Routes/tamar-home-puzzle/API/tasks/dist/tasksCont.js @@ -1,4 +1,40 @@ "use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; exports.__esModule = true; exports.deleteTask = exports.updateTaskStatus = exports.getTasks = exports.addTask = void 0; var tasksModel_1 = require("./tasksModel"); @@ -22,14 +58,24 @@ exports.addTask = function (req, res) { } }; //get all tasks from server -exports.getTasks = function (req, res) { - try { - res.send({ tasks: tasks }); - } - catch (error) { - console.error(error); - } -}; +exports.getTasks = function (req, res) { return __awaiter(void 0, void 0, void 0, function () { + var error_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]); + return [4 /*yield*/, res.send({ tasks: tasks })]; + case 1: + _a.sent(); + return [3 /*break*/, 3]; + case 2: + error_1 = _a.sent(); + console.error(error_1); + return [3 /*break*/, 3]; + case 3: return [2 /*return*/]; + } + }); +}); }; //update specific task exports.updateTaskStatus = function (req, res) { try { diff --git a/05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksCont.ts b/05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksCont.ts index 3180211c6..930e5241d 100644 --- a/05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksCont.ts +++ b/05-node/05-Routes/tamar-home-puzzle/API/tasks/tasksCont.ts @@ -20,9 +20,9 @@ export const addTask = (req: any, res: any) => { } //get all tasks from server -export const getTasks = (req: any, res: any) => { +export const getTasks = async (req: any, res: any) => { try { - res.send({ tasks }); + await res.send({ tasks }); } catch (error) { console.error(error); } diff --git a/05-node/05-Routes/tamar-home-puzzle/API/users/dist/usersCont.js b/05-node/05-Routes/tamar-home-puzzle/API/users/dist/usersCont.js index d6b43914b..4c304e703 100644 --- a/05-node/05-Routes/tamar-home-puzzle/API/users/dist/usersCont.js +++ b/05-node/05-Routes/tamar-home-puzzle/API/users/dist/usersCont.js @@ -2,6 +2,7 @@ exports.__esModule = true; exports.deleteUser = exports.updateUserTasks = exports.getUsers = exports.addUser = void 0; var usersModel_1 = require("./usersModel"); +var tasksModel_1 = require("../tasks/tasksModel"); var users = [ new usersModel_1.User({ name: "Tamar" }), new usersModel_1.User({ name: "Amir" }), @@ -9,6 +10,14 @@ var users = [ new usersModel_1.User({ name: "Ofir" }), new usersModel_1.User({ name: "Eliya" }) ]; +//create demo tasks +var task1 = new tasksModel_1.Task({ title: 'task1', description: 'description t1' }); +var task2 = new tasksModel_1.Task({ title: 'task2', description: 'description t2' }); +//creat demo user and assign tasks to him +var demoUser = new usersModel_1.User({ name: "demo" }); +demoUser.tasks.push(task1, task2); +console.log(demoUser); +users.push(demoUser); //the controllers: //add User to server exports.addUser = function (req, res) { @@ -42,7 +51,7 @@ exports.updateUserTasks = function (req, res) { var user = users.find(function (user) { return user.id === id_1; }); if (!user) throw new Error("no match User found"); - user.tasks = //**need to be fill */ + user.tasks = //**need to be fill*/ res.send({ users: users }); //server send the updated array to client } catch (error) { diff --git a/05-node/05-Routes/tamar-home-puzzle/API/users/dist/usersModel.js b/05-node/05-Routes/tamar-home-puzzle/API/users/dist/usersModel.js index 944410ce2..d26e181f9 100644 --- a/05-node/05-Routes/tamar-home-puzzle/API/users/dist/usersModel.js +++ b/05-node/05-Routes/tamar-home-puzzle/API/users/dist/usersModel.js @@ -1,10 +1,69 @@ "use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; exports.__esModule = true; exports.User = void 0; +var index_1 = require("../../public/index"); var User = /** @class */ (function () { function User(_a) { + var _this = this; var name = _a.name; this.name = name; + this.tasks = []; //initialize with an empty array + // Call an async function using 'await' + (function () { return __awaiter(_this, void 0, void 0, function () { + var tasks, error_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]); + return [4 /*yield*/, index_1.getTasks()]; + case 1: + tasks = _a.sent(); + this.tasks = tasks; + return [3 /*break*/, 3]; + case 2: + error_1 = _a.sent(); + console.error(error_1); + return [3 /*break*/, 3]; + case 3: return [2 /*return*/]; + } + }); + }); })(); this.id = Math.random().toString(); } return User; diff --git a/05-node/05-Routes/tamar-home-puzzle/API/users/usersCont.ts b/05-node/05-Routes/tamar-home-puzzle/API/users/usersCont.ts index b0e7524d6..2b85aa1f8 100644 --- a/05-node/05-Routes/tamar-home-puzzle/API/users/usersCont.ts +++ b/05-node/05-Routes/tamar-home-puzzle/API/users/usersCont.ts @@ -1,4 +1,5 @@ import { User} from "./usersModel"; +import { Task } from "../tasks/tasksModel"; let users: User[] = [ new User({name:"Tamar"}), @@ -8,6 +9,18 @@ let users: User[] = [ new User({name:"Eliya"}) ]; +//create demo tasks +const task1 = new Task({title: 'task1', description:'description t1'}) +const task2 = new Task({title: 'task2', description:'description t2'}) + +//creat demo user and assign tasks to him +const demoUser = new User({name: "demo"}) +demoUser.tasks.push(task1, task2); + +console.log(demoUser) + +users.push(demoUser) + //the controllers: //add User to server export const addUser= (req: any, res: any) => { @@ -39,7 +52,7 @@ export const updateUserTasks = (req: any, res: any) => { console.log(id); const user = users.find((user) => user.id === id); if (!user) throw new Error("no match User found"); - user.tasks = //**need to be fill */ + user.tasks = //**need to be fill*/ res.send({users}) //server send the updated array to client } catch (error) { console.error(error); diff --git a/05-node/05-Routes/tamar-home-puzzle/API/users/usersModel.ts b/05-node/05-Routes/tamar-home-puzzle/API/users/usersModel.ts index 73e6e8ec2..8393935e0 100644 --- a/05-node/05-Routes/tamar-home-puzzle/API/users/usersModel.ts +++ b/05-node/05-Routes/tamar-home-puzzle/API/users/usersModel.ts @@ -1,10 +1,24 @@ import { Task } from "../tasks/tasksModel"; +import { getTasks } from "../../public/index"; export class User { - name: string; - tasks: Task[]; - id: string; - constructor({ name }: {name:string}) { - this.name = name; - this.id = Math.random().toString(); - } + name: string; + tasks: Task[]; + id: string; + + constructor({ name }: { name: string }) { + this.name = name; + this.tasks = []; //initialize with an empty array + + // Call an async function using 'await' + (async () => { + try { + const tasks = await getTasks(); // Assuming getTasks() returns tasks + this.tasks = tasks; + } catch (error) { + console.error(error); + } + })(); + + this.id = Math.random().toString(); } +} diff --git a/05-node/05-Routes/tamar-home-puzzle/public/dist/index.js b/05-node/05-Routes/tamar-home-puzzle/public/dist/index.js index 044e76be7..80f4a5fb4 100644 --- a/05-node/05-Routes/tamar-home-puzzle/public/dist/index.js +++ b/05-node/05-Routes/tamar-home-puzzle/public/dist/index.js @@ -1,3 +1,4 @@ +"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { @@ -34,11 +35,99 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +exports.__esModule = true; +exports.getTasks = void 0; //view (all render function): +//show single task +function renderTaskToHTML(task) { + try { + var html = "
\n

" + task.title + "

\n

" + task.description + "

\n

" + task.status + "

\n
\n \n \n \n \n \n \n
\n \n
"; + } + catch (error) { + console.error(error); + } +} +//show all tasks +function renderTasks(tasks, HTMLElement) { + try { + if (!HTMLDivElement) + throw new Error("HTMLElement not found"); + console.log(tasks); + if (!Array.isArray(tasks)) + throw new Error("tasks are not array"); + var tasksHTML = tasks.map(function (task) { return renderTaskToHTML(task); }).join(""); + HTMLElement.innerHTML = tasksHTML; + } + catch (error) { + console.error(error); + } +} //controllers: +//users +function getUsers() { + return __awaiter(this, void 0, void 0, function () { + var response, result, users, error_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 3, , 4]); + return [4 /*yield*/, fetch('/API/users/get-users')]; + case 1: + response = _a.sent(); + return [4 /*yield*/, response.json()]; + case 2: + result = _a.sent(); + users = result.users; + if (!Array.isArray(users)) + throw new Error("users are not array"); + console.log(users); + console.log(result); + return [2 /*return*/, users]; + case 3: + error_1 = _a.sent(); + console.error(error_1); + return [2 /*return*/, []]; + case 4: return [2 /*return*/]; + } + }); + }); +} +//get the specific user we want +function handelGetUser(ev) { + return __awaiter(this, void 0, void 0, function () { + var name, id_1, users, user, root, error_2; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]); + ev.preventDefault(); + name = ev.target.name.value; + id_1 = ev.target.id; + console.log(id_1, name); + if (!name) + throw new Error("please select your name"); + return [4 /*yield*/, getUsers()]; + case 1: + users = _a.sent(); + if (!users) + throw new Error("no users found"); + console.log(users); + user = users.find(function (user) { return user.id === id_1; }); + root = document.querySelector('#userTasksRoot'); + renderTasks(user.tasks, root); + return [3 /*break*/, 3]; + case 2: + error_2 = _a.sent(); + return [3 /*break*/, 3]; + case 3: return [2 /*return*/]; + } + }); + }); +} +//tasks function handleAddTask(event) { return __awaiter(this, void 0, void 0, function () { - var title, description, task, response, result, error_1; + var title, description, task, response, result, error_3; return __generator(this, function (_a) { switch (_a.label) { case 0: @@ -64,8 +153,8 @@ function handleAddTask(event) { console.log(result); return [3 /*break*/, 4]; case 3: - error_1 = _a.sent(); - console.error(error_1); + error_3 = _a.sent(); + console.error(error_3); return [3 /*break*/, 4]; case 4: return [2 /*return*/]; } @@ -74,7 +163,7 @@ function handleAddTask(event) { } function getTasks() { return __awaiter(this, void 0, void 0, function () { - var response, result, tasks, error_2; + var response, result, tasks, error_4; return __generator(this, function (_a) { switch (_a.label) { case 0: @@ -92,15 +181,15 @@ function getTasks() { console.log(result); return [2 /*return*/, tasks]; case 3: - error_2 = _a.sent(); - console.error(error_2); + error_4 = _a.sent(); + console.error(error_4); return [2 /*return*/, []]; case 4: return [2 /*return*/]; } }); }); } -getTasks(); +exports.getTasks = getTasks; function handelGetTasks() { return __awaiter(this, void 0, void 0, function () { var tasks, root; @@ -109,7 +198,7 @@ function handelGetTasks() { case 0: return [4 /*yield*/, getTasks()]; case 1: tasks = _a.sent(); - root = document.querySelector('#root'); + root = document.querySelector('#userTasksRoot'); renderTasks(tasks, root); return [2 /*return*/]; } @@ -118,7 +207,7 @@ function handelGetTasks() { } function handelDeleteTask(id) { return __awaiter(this, void 0, void 0, function () { - var response, result, products, error_3; + var response, result, products, error_5; return __generator(this, function (_a) { switch (_a.label) { case 0: @@ -137,28 +226,31 @@ function handelDeleteTask(id) { result = _a.sent(); console.log(result); products = result.products; - renderTasks(products, document.querySelector('#root')); + renderTasks(products, document.querySelector('#userTasksRoot')); return [3 /*break*/, 4]; case 3: - error_3 = _a.sent(); - console.error(error_3); + error_5 = _a.sent(); + console.error(error_5); return [3 /*break*/, 4]; case 4: return [2 /*return*/]; } }); }); } -function handleUpdateTaskStatus(ev) { +//update all task data +function handleUpdateTask(ev) { return __awaiter(this, void 0, void 0, function () { - var status, id, response, result, products, error_4; + var title, description, status, id, response, result, products, error_6; return __generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 3, , 4]); ev.preventDefault(); + title = ev.target.title.value; + description = ev.target.description.value; status = ev.target.ststus.value; id = ev.target.id; - console.log(id, status); + console.log(id, title, description, status); return [4 /*yield*/, fetch('/API/tasks/update-task-status', { method: 'PATCH', headers: { @@ -173,11 +265,11 @@ function handleUpdateTaskStatus(ev) { result = _a.sent(); console.log(result); products = result.products; - rendertasks(products, document.querySelector('#root')); + renderTasks(products, document.querySelector('#userTasksRoot')); return [3 /*break*/, 4]; case 3: - error_4 = _a.sent(); - console.error(error_4); + error_6 = _a.sent(); + console.error(error_6); return [3 /*break*/, 4]; case 4: return [2 /*return*/]; } diff --git a/05-node/05-Routes/tamar-home-puzzle/public/index.html b/05-node/05-Routes/tamar-home-puzzle/public/index.html index ea734eb67..4dd550c56 100644 --- a/05-node/05-Routes/tamar-home-puzzle/public/index.html +++ b/05-node/05-Routes/tamar-home-puzzle/public/index.html @@ -1,5 +1,6 @@ + @@ -7,7 +8,22 @@ Document +

Hello User

+
+ +

+ +
+
+ \ No newline at end of file diff --git a/05-node/05-Routes/tamar-home-puzzle/public/index.ts b/05-node/05-Routes/tamar-home-puzzle/public/index.ts index 024915ba7..e2e2d43b3 100644 --- a/05-node/05-Routes/tamar-home-puzzle/public/index.ts +++ b/05-node/05-Routes/tamar-home-puzzle/public/index.ts @@ -1,5 +1,7 @@ //mvc //model +//import { User } from "../API/users/usersModel"; +//import { Task } from "../API/tasks/tasksModel"; interface Task { title: string; description: string; @@ -13,19 +15,98 @@ interface User { id?: string; } + //view (all render function): +//show single task +function renderTaskToHTML(task: Task) { + try { + const html = `
+

${task.title}

+

${task.description}

+

${task.status}

+
+ + + + + + +
+ +
` + } catch (error) { + console.error(error) + } +} + +//show all tasks +function renderTasks(tasks: Task[], HTMLElement: HTMLDivElement) { + try { + if (!HTMLDivElement) throw new Error("HTMLElement not found"); + console.log(tasks); + if (!Array.isArray(tasks)) throw new Error("tasks are not array"); + const tasksHTML = tasks.map(task => renderTaskToHTML(task)).join("") + HTMLElement.innerHTML = tasksHTML; + } catch (error) { + console.error(error) + } +} //controllers: +//users + +async function getUsers() { + try { + const response = await fetch('/API/users/get-users') + const result = await response.json() + const { users } = result + if (!Array.isArray(users)) throw new Error("users are not array") + console.log(users) + console.log(result) + return users; + } catch (error) { + console.error(error) + return [] + } +} + +//get the specific user we want +async function handelGetUser(ev: any) { + try { + ev.preventDefault() + const name = ev.target.name.value; + const id = ev.target.id; + console.log(id, name) + if (!name) throw new Error("please select your name"); + + const users = await getUsers(); + if (!users) throw new Error("no users found"); + console.log(users) + + const user = users.find((user) => user.id === id); //find the selected user + const root = document.querySelector('#userTasksRoot') + renderTasks(user.tasks, root as HTMLDivElement) + } catch (error) { + + } +} + + +//tasks async function handleAddTask(event: any) { try { event.preventDefault() const title = event.target.title.value; const description = event.target.description.value; if (!title || !description) throw new Error("Pleas complete all fields"); - const task: Task = {title, description} + const task: Task = { title, description } const response = await fetch('/API/tasks/add-task', { method: 'POST', @@ -37,13 +118,13 @@ async function handleAddTask(event: any) { const result = await response.json(); console.log(result); - + } catch (error) { console.error(error); } } -async function getTasks() { +export async function getTasks() { try { const response = await fetch('/API/tasks/get-tasks') const result = await response.json() @@ -58,11 +139,9 @@ async function getTasks() { } } -getTasks(); - async function handelGetTasks() { const tasks = await getTasks() - const root = document.querySelector('#root') + const root = document.querySelector('#userTasksRoot') renderTasks(tasks, root as HTMLDivElement) } @@ -71,42 +150,45 @@ async function handelDeleteTask(id: string) { const response = await fetch('/API/tasks/delet-task', { method: 'DELETE', headers: { - 'Content-Type': 'application/json' + 'Content-Type': 'application/json' }, - body: JSON.stringify({id}) - }); - const result = await response.json(); - console.log(result); - const {products} = result; - - renderTasks(products, document.querySelector('#root') as HTMLDivElement); + body: JSON.stringify({ id }) + }); + const result = await response.json(); + console.log(result); + const { products } = result; + + renderTasks(products, document.querySelector('#userTasksRoot') as HTMLDivElement); } catch (error) { console.error(error) } } -async function handleUpdateTaskStatus(ev:any){ +//update all task data +async function handleUpdateTask(ev: any) { try { - ev.preventDefault(); - const status = ev.target.ststus.value; - const id = ev.target.id; - console.log(id, status) - - const response = await fetch('/API/tasks/update-task-status', { - method: 'PATCH', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({id, status}) - }); - - const result = await response.json(); - console.log(result); - const {products} = result; - rendertasks(products, document.querySelector('#root') as HTMLDivElement); - + ev.preventDefault(); + const title = ev.target.title.value; + const description = ev.target.description.value; + const status = ev.target.ststus.value; + const id = ev.target.id; + console.log(id, title, description, status) + + const response = await fetch('/API/tasks/update-task-status', { + method: 'PATCH', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ id, status }) + }); + + const result = await response.json(); + console.log(result); + const { products } = result; + renderTasks(products, document.querySelector('#userTasksRoot') as HTMLDivElement); + } catch (error) { - console.error(error) + console.error(error) } - } \ No newline at end of file +} \ No newline at end of file diff --git a/05-node/05-Routes/tamar-home-puzzle/server.ts b/05-node/05-Routes/tamar-home-puzzle/server.ts index 8668574d9..f98aee559 100644 --- a/05-node/05-Routes/tamar-home-puzzle/server.ts +++ b/05-node/05-Routes/tamar-home-puzzle/server.ts @@ -2,14 +2,6 @@ import express from "express" const app = express() const port = process.env.PORT || 3000 -//interfaces: - -interface _Task { - title: string; - description: string; - status: string; -} - //static files //app.use(express.static("public")) //not yet created From f3eb0b578a5f56fa209ad32b5e1346734b2b8848 Mon Sep 17 00:00:00 2001 From: Tal Yaron Date: Sun, 27 Aug 2023 17:58:41 +0300 Subject: [PATCH 10/10] cont --- .../API/users/dist/usersModel.js | 66 +++---------------- .../tamar-home-puzzle/API/users/usersModel.ts | 16 ++--- 2 files changed, 16 insertions(+), 66 deletions(-) diff --git a/05-node/05-Routes/tamar-home-puzzle/API/users/dist/usersModel.js b/05-node/05-Routes/tamar-home-puzzle/API/users/dist/usersModel.js index d26e181f9..6d9427b47 100644 --- a/05-node/05-Routes/tamar-home-puzzle/API/users/dist/usersModel.js +++ b/05-node/05-Routes/tamar-home-puzzle/API/users/dist/usersModel.js @@ -1,71 +1,25 @@ "use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } +var __spreadArrays = (this && this.__spreadArrays) || function () { + for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; + for (var r = Array(s), k = 0, i = 0; i < il; i++) + for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) + r[k] = a[j]; + return r; }; exports.__esModule = true; exports.User = void 0; -var index_1 = require("../../public/index"); var User = /** @class */ (function () { function User(_a) { - var _this = this; var name = _a.name; this.name = name; this.tasks = []; //initialize with an empty array // Call an async function using 'await' - (function () { return __awaiter(_this, void 0, void 0, function () { - var tasks, error_1; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - _a.trys.push([0, 2, , 3]); - return [4 /*yield*/, index_1.getTasks()]; - case 1: - tasks = _a.sent(); - this.tasks = tasks; - return [3 /*break*/, 3]; - case 2: - error_1 = _a.sent(); - console.error(error_1); - return [3 /*break*/, 3]; - case 3: return [2 /*return*/]; - } - }); - }); })(); this.id = Math.random().toString(); } + //method + User.prototype.addTasks = function (tasks) { + this.tasks = __spreadArrays(this.tasks, tasks); + }; return User; }()); exports.User = User; diff --git a/05-node/05-Routes/tamar-home-puzzle/API/users/usersModel.ts b/05-node/05-Routes/tamar-home-puzzle/API/users/usersModel.ts index 8393935e0..d853bd801 100644 --- a/05-node/05-Routes/tamar-home-puzzle/API/users/usersModel.ts +++ b/05-node/05-Routes/tamar-home-puzzle/API/users/usersModel.ts @@ -1,5 +1,5 @@ import { Task } from "../tasks/tasksModel"; -import { getTasks } from "../../public/index"; + export class User { name: string; tasks: Task[]; @@ -10,15 +10,11 @@ export class User { this.tasks = []; //initialize with an empty array // Call an async function using 'await' - (async () => { - try { - const tasks = await getTasks(); // Assuming getTasks() returns tasks - this.tasks = tasks; - } catch (error) { - console.error(error); - } - })(); - + this.id = Math.random().toString(); } + //method + addTasks(tasks:Task[]){ + this.tasks = [...this.tasks, ...tasks]; + } }