From 955758ec4cabd30a2c1dc30efc33e3dc444f6f15 Mon Sep 17 00:00:00 2001 From: TobiZog Date: Wed, 4 Sep 2024 16:42:37 +0200 Subject: [PATCH] Add SQLite database to backend, interacting with the frontend --- .gitignore | 3 +- README.md | 9 + misc/database.drawio | 156 ++ misc/images/database.png | Bin 0 -> 72821 bytes software/backend/database.ts | 26 + software/backend/models/categories.model.ts | 7 + software/backend/routes/api.routes.ts | 7 + software/backend/routes/categories.routes.ts | 20 + software/backend/routes/routes.ts | 11 - software/backend/server.ts | 12 +- software/package-lock.json | 1623 +++++++++++++++++- software/package.json | 4 + software/src/App.vue | 40 +- software/tsconfig.json | 2 + 14 files changed, 1892 insertions(+), 28 deletions(-) create mode 100644 misc/database.drawio create mode 100644 misc/images/database.png create mode 100644 software/backend/database.ts create mode 100644 software/backend/models/categories.model.ts create mode 100644 software/backend/routes/api.routes.ts create mode 100644 software/backend/routes/categories.routes.ts delete mode 100644 software/backend/routes/routes.ts diff --git a/.gitignore b/.gitignore index a6688bc..227a76a 100644 --- a/.gitignore +++ b/.gitignore @@ -30,4 +30,5 @@ coverage *.tsbuildinfo # Build and package files/folders -build \ No newline at end of file +build +*.sqlite \ No newline at end of file diff --git a/README.md b/README.md index 1ece75d..371b329 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,12 @@ # HackMyCart The most hackable Web Shop! + +## Compile for production + +TODO + +## Internal structure + +### Database +![database-erm](misc/images//database.png) diff --git a/misc/database.drawio b/misc/database.drawio new file mode 100644 index 0000000..92b4be4 --- /dev/null +++ b/misc/database.drawio @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/misc/images/database.png b/misc/images/database.png new file mode 100644 index 0000000000000000000000000000000000000000..b46e45ecd728dc22960884367ab44331c92d5a60 GIT binary patch literal 72821 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 literal 0 HcmV?d00001 diff --git a/software/backend/database.ts b/software/backend/database.ts new file mode 100644 index 0000000..5e0a23e --- /dev/null +++ b/software/backend/database.ts @@ -0,0 +1,26 @@ +import { Sequelize } from "sequelize-typescript" + +// Models +import { Categories } from "./models/categories.model" + +const dbName = "database" +const dbUser = "root" +const dbPassword = "123456" + +// Definition of the database +export const sequelize = new Sequelize({ + database: dbName, + dialect: "sqlite", + username: dbUser, + password: dbPassword, + storage: "database.sqlite", + models: [ Categories ] +}) + +export function startDatabase() { + // Create database and tables + sequelize.sync({ force: false }) + .then(() => { + console.log(`Database & tables created!`) + }) +} diff --git a/software/backend/models/categories.model.ts b/software/backend/models/categories.model.ts new file mode 100644 index 0000000..2cdca4b --- /dev/null +++ b/software/backend/models/categories.model.ts @@ -0,0 +1,7 @@ +import { Table, Column, Model, PrimaryKey, AutoIncrement } from 'sequelize-typescript'; + +@Table +export class Categories extends Model { + @Column + name: string +} \ No newline at end of file diff --git a/software/backend/routes/api.routes.ts b/software/backend/routes/api.routes.ts new file mode 100644 index 0000000..97c5241 --- /dev/null +++ b/software/backend/routes/api.routes.ts @@ -0,0 +1,7 @@ +import { Request, Response, NextFunction, Router } from 'express' + +export const api = Router() + +api.get("/", (req: Request, res: Response, next: NextFunction) => { + res.send("Hello World!") +}) \ No newline at end of file diff --git a/software/backend/routes/categories.routes.ts b/software/backend/routes/categories.routes.ts new file mode 100644 index 0000000..f79001e --- /dev/null +++ b/software/backend/routes/categories.routes.ts @@ -0,0 +1,20 @@ +import { Router, Request, Response, NextFunction } from "express"; +import { Categories } from "../models/categories.model"; + +export const categories = Router() + +categories.get("/", (req: Request, res: Response, next: NextFunction) => { + Categories.findAll() + .then(categories => res.json(categories)) + .catch(next) +}) + +categories.post("/", (req: Request, res: Response, next: NextFunction) => { + try { + console.log(req.body) + const category = Categories.create(req.body) + res.status(201).json(category) + } catch (e) { + next(e) + } +}) \ No newline at end of file diff --git a/software/backend/routes/routes.ts b/software/backend/routes/routes.ts deleted file mode 100644 index 629d979..0000000 --- a/software/backend/routes/routes.ts +++ /dev/null @@ -1,11 +0,0 @@ -import express, { Request, Response, NextFunction } from 'express' - -export const routes = app => { - var router = express.Router() - - router.get("/", (req: Request, res: Response, next: NextFunction) => { - res.send("Hello World from the backend!") - }) - - app.use("/api/", router) -} \ No newline at end of file diff --git a/software/backend/server.ts b/software/backend/server.ts index a52f44d..36ffaf2 100644 --- a/software/backend/server.ts +++ b/software/backend/server.ts @@ -1,7 +1,9 @@ import express from 'express' import cors from 'cors' import bodyParser from 'body-parser' -import { routes } from './routes/routes' +import { api } from './routes/api.routes' +import { categories } from './routes/categories.routes' +import { startDatabase } from './database' const app = express() const port = 3000 @@ -12,8 +14,12 @@ app.use(cors()) // Process JSON parameter app.use(bodyParser.json()) -// Use the app routes -routes(app) +// Create database and tables +startDatabase() + +// Routes +app.use("/api", api) +app.use("/categories", categories) // Start server app.listen(port, () => { diff --git a/software/package-lock.json b/software/package-lock.json index 91633e5..466c8e6 100644 --- a/software/package-lock.json +++ b/software/package-lock.json @@ -14,6 +14,10 @@ "concurrently": "^8.2.2", "cors": "^2.8.5", "express": "^4.19.2", + "reflect-metadata": "^0.2.2", + "sequelize": "^6.37.3", + "sequelize-typescript": "^2.1.6", + "sqlite3": "^5.1.7", "vue": "^3.4.29", "vuetify": "^3.7.1", "wait-on": "^8.0.0" @@ -477,6 +481,13 @@ "node": ">=12" } }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "license": "MIT", + "optional": true + }, "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", @@ -504,6 +515,32 @@ "integrity": "sha512-43MtGpd585SNzHZPcYowu/84Vz2a2g31TvPMTm9uTiCSWzaheQySUcSyUH/46fPnuPQWof2yd0pGBtzee/IQWw==", "license": "Apache-2.0" }, + "node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "license": "MIT", + "optional": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.2.tgz", @@ -749,6 +786,16 @@ "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", "license": "BSD-3-Clause" }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/@types/body-parser": { "version": "1.19.5", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", @@ -780,6 +827,15 @@ "@types/node": "*" } }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -827,11 +883,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", + "license": "MIT" + }, "node_modules/@types/node": { "version": "22.5.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.2.tgz", "integrity": "sha512-acJsPTEqYqulZS/Yp/S3GgeE6GZ0qYODUR8aVr/DkhHQ8l9nd4j5x1/ZJy9/gHrRlFMqkO6i0I3E27Alu4jjPg==", - "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.19.2" @@ -874,6 +935,12 @@ "@types/send": "*" } }, + "node_modules/@types/validator": { + "version": "13.12.1", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.12.1.tgz", + "integrity": "sha512-w0URwf7BQb0rD/EuiG12KP0bailHKHP5YVviJG9zw3ykAokL0TuxU2TUqMB7EwZ59bDHYdeTIvjI5m0S7qHfOA==", + "license": "MIT" + }, "node_modules/@vitejs/plugin-vue": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.1.3.tgz", @@ -988,6 +1055,13 @@ "integrity": "sha512-q0xCiLkuWWQLzVrecPb0RMsNWyxICOjPrcrwxTUEHb1fsnvni4dcuyG7RT/Ie7VPTvnjzIaWzRMUBsrqNj/hhw==", "license": "MIT" }, + "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==", + "license": "ISC", + "optional": true + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -1001,6 +1075,71 @@ "node": ">= 0.6" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT", + "optional": true + }, + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "license": "MIT", + "optional": true, + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "license": "MIT", + "optional": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -1039,6 +1178,28 @@ "node": ">= 8" } }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "license": "ISC", + "optional": true + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -1066,7 +1227,26 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT" }, "node_modules/binary-extensions": { @@ -1082,6 +1262,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, "node_modules/body-parser": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", @@ -1110,7 +1310,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -1130,6 +1329,30 @@ "node": ">=8" } }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -1139,6 +1362,36 @@ "node": ">= 0.8" } }, + "node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -1211,6 +1464,25 @@ "fsevents": "~2.3.2" } }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -1243,6 +1515,16 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "license": "ISC", + "optional": true, + "bin": { + "color-support": "bin.js" + } + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -1259,7 +1541,6 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, "license": "MIT" }, "node_modules/concurrently": { @@ -1289,6 +1570,13 @@ "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" } }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "license": "ISC", + "optional": true + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -1369,6 +1657,30 @@ "ms": "2.0.0" } }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -1395,6 +1707,13 @@ "node": ">=0.4.0" } }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "license": "MIT", + "optional": true + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -1414,6 +1733,21 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dottie": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.6.tgz", + "integrity": "sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==", + "license": "MIT" + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -1435,6 +1769,38 @@ "node": ">= 0.8" } }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -1447,6 +1813,23 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "license": "MIT", + "optional": true + }, "node_modules/es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", @@ -1537,6 +1920,15 @@ "node": ">= 0.6" } }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", + "engines": { + "node": ">=6" + } + }, "node_modules/express": { "version": "4.19.2", "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", @@ -1579,6 +1971,12 @@ "node": ">= 0.10.0" } }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT" + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -1662,6 +2060,30 @@ "node": ">= 0.6" } }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -1686,6 +2108,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -1714,6 +2157,34 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "optional": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -1739,6 +2210,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC", + "optional": true + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -1784,6 +2262,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "license": "ISC", + "optional": true + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -1796,6 +2281,13 @@ "node": ">= 0.4" } }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "license": "BSD-2-Clause", + "optional": true + }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -1812,6 +2304,95 @@ "node": ">= 0.8" } }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT", + "optional": true + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "optional": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT", + "optional": true + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "^2.0.0" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -1824,6 +2405,26 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", @@ -1831,12 +2432,79 @@ "dev": true, "license": "ISC" }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "license": "ISC", + "optional": true + }, + "node_modules/inflection": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.4.tgz", + "integrity": "sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==", + "engines": [ + "node >= 0.4.0" + ], + "license": "MIT" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "license": "MIT", + "optional": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -1891,6 +2559,13 @@ "node": ">=0.10.0" } }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "license": "MIT", + "optional": true + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -1901,6 +2576,13 @@ "node": ">=0.12.0" } }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC", + "optional": true + }, "node_modules/joi": { "version": "17.13.3", "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", @@ -1914,12 +2596,32 @@ "@sideway/pinpoint": "^2.0.0" } }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "license": "MIT", + "optional": true + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "license": "MIT" }, + "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==", + "license": "ISC", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/magic-string": { "version": "0.30.11", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", @@ -1929,6 +2631,34 @@ "@jridgewell/sourcemap-codec": "^1.5.0" } }, + "node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "license": "ISC", + "optional": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -1986,11 +2716,22 @@ "node": ">= 0.6" } }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "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, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -2008,6 +2749,140 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "license": "ISC", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "license": "MIT", + "optional": true, + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "license": "ISC", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "license": "ISC", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "license": "ISC", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT" + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.45", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.45.tgz", + "integrity": "sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==", + "license": "MIT", + "dependencies": { + "moment": "^2.29.4" + }, + "engines": { + "node": "*" + } + }, "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -2032,6 +2907,12 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "license": "MIT" + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -2041,6 +2922,49 @@ "node": ">= 0.6" } }, + "node_modules/node-abi": { + "version": "3.67.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.67.0.tgz", + "integrity": "sha512-bLn/fU/ALVBE9wj+p4Y21ZJWYFjUXLXPi/IewyLZkx3ApxKDNBWCKdReeKOtD8dWpOdDCeMyLh6ZewzcLsG2Nw==", + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT" + }, + "node_modules/node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "license": "MIT", + "optional": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, "node_modules/nodemon": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.4.tgz", @@ -2118,6 +3042,22 @@ "node": ">=4" } }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -2128,6 +3068,23 @@ "node": ">=0.10.0" } }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -2161,6 +3118,31 @@ "node": ">= 0.8" } }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -2170,12 +3152,27 @@ "node": ">= 0.8" } }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "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==", "license": "MIT" }, + "node_modules/pg-connection-string": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.4.tgz", + "integrity": "sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==", + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", @@ -2223,6 +3220,53 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/prebuild-install": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", + "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "license": "ISC", + "optional": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "license": "MIT", + "optional": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -2249,6 +3293,16 @@ "dev": true, "license": "MIT" }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/qs": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", @@ -2288,6 +3342,35 @@ "node": ">= 0.8" } }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -2301,6 +3384,12 @@ "node": ">=8.10.0" } }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "license": "Apache-2.0" + }, "node_modules/regenerator-runtime": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", @@ -2316,6 +3405,39 @@ "node": ">=0.10.0" } }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/retry-as-promised": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-7.0.4.tgz", + "integrity": "sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA==", + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "optional": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/rollup": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.2.tgz", @@ -2391,7 +3513,6 @@ "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -2430,6 +3551,139 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/sequelize": { + "version": "6.37.3", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.37.3.tgz", + "integrity": "sha512-V2FTqYpdZjPy3VQrZvjTPnOoLm0KudCRXfGWp48QwhyPPp2yW8z0p0sCYZd/em847Tl2dVxJJ1DR+hF+O77T7A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/sequelize" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.1.8", + "@types/validator": "^13.7.17", + "debug": "^4.3.4", + "dottie": "^2.0.6", + "inflection": "^1.13.4", + "lodash": "^4.17.21", + "moment": "^2.29.4", + "moment-timezone": "^0.5.43", + "pg-connection-string": "^2.6.1", + "retry-as-promised": "^7.0.4", + "semver": "^7.5.4", + "sequelize-pool": "^7.1.0", + "toposort-class": "^1.0.1", + "uuid": "^8.3.2", + "validator": "^13.9.0", + "wkx": "^0.5.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependenciesMeta": { + "ibm_db": { + "optional": true + }, + "mariadb": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "oracledb": { + "optional": true + }, + "pg": { + "optional": true + }, + "pg-hstore": { + "optional": true + }, + "snowflake-sdk": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "tedious": { + "optional": true + } + } + }, + "node_modules/sequelize-pool": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz", + "integrity": "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/sequelize-typescript": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/sequelize-typescript/-/sequelize-typescript-2.1.6.tgz", + "integrity": "sha512-Vc2N++3en346RsbGjL3h7tgAl2Y7V+2liYTAOZ8XL0KTw3ahFHsyAUzOwct51n+g70I1TOUDgs06Oh6+XGcFkQ==", + "license": "MIT", + "dependencies": { + "glob": "7.2.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "@types/validator": "*", + "reflect-metadata": "*", + "sequelize": ">=6.20.1" + } + }, + "node_modules/sequelize-typescript/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sequelize/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/sequelize/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, "node_modules/serve-static": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", @@ -2445,6 +3699,13 @@ "node": ">= 0.8.0" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC", + "optional": true + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -2495,6 +3756,58 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC", + "optional": true + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "node_modules/simple-update-notifier": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", @@ -2508,6 +3821,72 @@ "node": ">=10" } }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "license": "MIT", + "optional": true, + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/socks-proxy-agent/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socks-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT", + "optional": true + }, "node_modules/source-map-js": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", @@ -2522,6 +3901,50 @@ "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==" }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/sqlite3": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.7.tgz", + "integrity": "sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "bindings": "^1.5.0", + "node-addon-api": "^7.0.0", + "prebuild-install": "^7.1.1", + "tar": "^6.1.11" + }, + "optionalDependencies": { + "node-gyp": "8.x" + }, + "peerDependencies": { + "node-gyp": "8.x" + }, + "peerDependenciesMeta": { + "node-gyp": { + "optional": true + } + } + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -2531,6 +3954,15 @@ "node": ">= 0.8" } }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -2557,6 +3989,15 @@ "node": ">=8" } }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -2572,6 +4013,66 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", + "engines": { + "node": ">=8" + } + }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -2603,6 +4104,12 @@ "node": ">=0.6" } }, + "node_modules/toposort-class": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", + "integrity": "sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg==", + "license": "MIT" + }, "node_modules/touch": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", @@ -2628,6 +4135,18 @@ "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "license": "0BSD" }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -2667,9 +4186,28 @@ "version": "6.19.8", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true, "license": "MIT" }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "license": "ISC", + "optional": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -2679,6 +4217,12 @@ "node": ">= 0.8" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -2688,6 +4232,24 @@ "node": ">= 0.4.0" } }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validator": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz", + "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -2827,6 +4389,41 @@ "node": ">=12.0.0" } }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "optional": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "license": "ISC", + "optional": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wkx": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", + "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -2844,6 +4441,12 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -2853,6 +4456,12 @@ "node": ">=10" } }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", diff --git a/software/package.json b/software/package.json index d8ff134..6fe5a7b 100644 --- a/software/package.json +++ b/software/package.json @@ -22,6 +22,10 @@ "concurrently": "^8.2.2", "cors": "^2.8.5", "express": "^4.19.2", + "reflect-metadata": "^0.2.2", + "sequelize": "^6.37.3", + "sequelize-typescript": "^2.1.6", + "sqlite3": "^5.1.7", "vue": "^3.4.29", "vuetify": "^3.7.1", "wait-on": "^8.0.0" diff --git a/software/src/App.vue b/software/src/App.vue index 3123510..c48c03b 100644 --- a/software/src/App.vue +++ b/software/src/App.vue @@ -3,14 +3,25 @@ import { ref } from 'vue'; import axios from 'axios'; const showDrawer = ref(true) -const testResponse = ref("") +const apiCategories = ref([]) +const newCategory = ref("") +function requestAllCategories() { + axios.get('http://127.0.0.1:3000/categories') + .then(function (response) { + console.log(response) + apiCategories.value = response.data + }) +} -axios.get('http://127.0.0.1:3000/api') - .then(function (response) { - console.log(response) - testResponse.value = response.data +function addCategory() { + axios.post("http://127.0.0.1:3000/categories", { + name: newCategory.value }) + .then(requestAllCategories) +} + +requestAllCategories()