diff --git a/bin/www b/bin/www index a2cfb54ad47e378f74757105655eb1143a80c9ef..de77799a5290c61932c0fa501ec999a0581eecf2 100644 --- a/bin/www +++ b/bin/www @@ -2,9 +2,9 @@ const express = require("express"); const {expressjwt} = require("express-jwt") const errorHandler=require('../middleware/error') const authHandler=require('../middleware/auth') +const {logOperateHandler,logErrorHandler}=require('../middleware/log') const app = express(); - app.use( expressjwt({ secret: "quick", @@ -23,7 +23,9 @@ app.use(express.json()) // app.use(cors(config)); // app.use(cors()); const { getIPAddress } = require("../utils/index"); -console.log(getIPAddress()) +// console.log(getIPAddress()) + +app.use(logOperateHandler) const indexRouter = require("../router/index"); const loginRouter = require("../router/login"); @@ -33,6 +35,7 @@ const menuRouter = require("../router/menu"); const dictionaryType = require("../router/dictionaryType"); const dictionary = require("../router/dictionary"); const dept = require("../router/dept"); +const log = require("../router/log"); app.use(indexRouter); app.use(loginRouter); app.use(userRouter); @@ -41,9 +44,10 @@ app.use(menuRouter); app.use(dictionaryType); app.use(dictionary); app.use(dept); +app.use(log); +app.use(logErrorHandler) app.use(errorHandler) - const server = app.listen(3102, function () { try { let host = server.address().address; diff --git a/config/db.config.js b/config/db.config.js index f7e151f75e817288cbbffa3e82ed25fd282e1af4..7e85d43361a75ba2b7a14c4cdd5d8fd4e26512d3 100644 --- a/config/db.config.js +++ b/config/db.config.js @@ -2,9 +2,9 @@ module.exports = { debug: false, //开启调试 host: "110.42.130.88", port: "3306", - user: "quick", - password: "quick", - database: "quick", + user: "quick1", + password: "quick1", + database: "quick1", timezone: "08:00", dateStrings:true, stringifyObjects: true, //是否序列化对象 diff --git a/config/db.js b/config/db.js index 63892fdc8f7c6620f3250d8511140192568576bb..0a0e600977092756ede3c79a6029e9d98c7a4d61 100644 --- a/config/db.js +++ b/config/db.js @@ -12,7 +12,6 @@ class DB { console.log("数据库连接失败"); throw err; } - console.log("数据库连接成功"); }); //3.执行sql查询 connection.query(sql, params, (err, results, fields) => { @@ -20,7 +19,6 @@ class DB { console.log("数据库操作失败"); throw err; } - console.log("数据库操作成功"); callBack && callBack({ results, fields }); }); //4.关闭连接 @@ -29,7 +27,6 @@ class DB { console.log("数据库关闭失败"); throw err; } - console.log("数据库关闭成功"); }); } @@ -45,7 +42,6 @@ class DB { reject(err); return; } - console.log("数据库连接成功"); }); //3.执行sql查询 connection.query(sql, params, (err, results, fields) => { @@ -54,7 +50,6 @@ class DB { reject(err); return; } - console.log("数据库操作成功"); resolve({ results, fields, @@ -67,7 +62,6 @@ class DB { reject(err); return; } - console.log("数据库关闭成功"); }); }); } diff --git a/config/dbPool.js b/config/dbPool.js index fddebc8ed417335a18e62ada60495b135b062a0a..6c2d70160230f80888766df1831a4a39f9116252 100644 --- a/config/dbPool.js +++ b/config/dbPool.js @@ -12,7 +12,6 @@ class DBPool { console.log("数据库连接失败"); throw err; } - console.log("数据库连接成功"); //3.执行sql查询 connection.query(sql, params, (err, results, fields) => { //4.释放连接 @@ -22,7 +21,6 @@ class DBPool { console.log("数据库操作失败"); throw err; } - console.log("数据库操作成功"); callBack && callBack({ results, fields }); }); }); @@ -37,7 +35,6 @@ class DBPool { reject(err); return; } - console.log("数据库连接成功"); connection.query(sql, params, (err, results, fields) => { connection.release(); // connection.destroy(); @@ -46,7 +43,6 @@ class DBPool { reject(err); return; } - console.log("数据库操作成功"); resolve({ results, fields, diff --git a/config/log.config.js b/config/log.config.js new file mode 100644 index 0000000000000000000000000000000000000000..a0ed1d03e600098aa76e915fcb62495861d70e7d --- /dev/null +++ b/config/log.config.js @@ -0,0 +1,50 @@ +module.exports = { + appenders: { + console:{ + type: "console", + category: "console" + }, + everything: { + type: "file", + filename: "log/log.log", + }, + info: { + type: "dateFile", + filename: "log/info/info", + pattern: "yyyy-MM-dd.log", + alwaysIncludePattern: true, + //最大文件大小,按字节计算 1024 * 1024 * 8 = 8M + //integer (optional) - the maximum size (in bytes) for the log file. If not specified, then no log rolling will happen. + maxLogSize: 1024 * 1024 * 8, + backups: 5, + keepFileExt: true, + compress: false, + }, + error: { + type: "file", + filename: "log/error/error", + pattern: "yyyy-MM-dd.log", + alwaysIncludePattern: true, + //最大文件大小,按字节计算 1024 * 1024 * 8 = 8M + //integer (optional) - the maximum size (in bytes) for the log file. If not specified, then no log rolling will happen. + maxLogSize: 1024 * 1024 * 8, + backups: 10, + keepFileExt: true, + compress: false, + }, + }, + categories: { + info: { + appenders: ["info","console"], + level: "info", + }, + error: { + appenders: ["error","console"], + level: "error", + }, + default: { + appenders: ["everything","console"], + level: "debug", + }, + }, +}; diff --git a/controllers/logController.js b/controllers/logController.js new file mode 100644 index 0000000000000000000000000000000000000000..af76d3ca816c0d4934cbcf8c00ddf78674415860 --- /dev/null +++ b/controllers/logController.js @@ -0,0 +1,28 @@ +const { + getLogPageList, + removeLog, + batchRemoveLog, +} = require("../services/logServices"); + +class LogController { + constructor() {} + getPageList(query) { + const { logType, current, size, startTime, endTime } = query; + return getLogPageList( + logType, + current, + size, + startTime, + endTime + ); + } + remove(body) { + const { id } = body; + return removeLog(id); + } + batchRemove(body) { + const { ids } = body; + return batchRemoveLog(ids); + } +} +module.exports = new LogController(); diff --git a/middleware/error.js b/middleware/error.js index fef5ae490755bc2f1008f35246c5d1d4fde6dbc6..bfc7831f9e150138a3b4cdbb9ed021e4e1d5c430 100644 --- a/middleware/error.js +++ b/middleware/error.js @@ -1,5 +1,4 @@ const errorHandler=(err,req,res,next)=>{ - console.log('err',err.name); let code=500 let message='Internal Server Error' if(err.name==='UnauthorizedError'){ @@ -8,8 +7,8 @@ const errorHandler=(err,req,res,next)=>{ } res.statusCode=code; res.send({ - status:code, - msg:message, + status:1, + msg:'服务器内部错误', data:null }) } diff --git a/middleware/log.js b/middleware/log.js new file mode 100644 index 0000000000000000000000000000000000000000..ced7eef8c4ccfe04be004b243d513d3df0be731a --- /dev/null +++ b/middleware/log.js @@ -0,0 +1,35 @@ +const log4js = require("log4js"); +const logConfig = require("../config/log.config"); +const { addOperateLog, addErrorLog } = require("../services/logServices"); + +log4js.configure(logConfig); + +module.exports = { + logOperateHandler: (req, res, next) => { + console.log('res',res); + const logger = log4js.getLogger("info"); + const log = { + operateApi: req.url, + requestParams: JSON.stringify({ query: req.query, body: req.body }), + ip: req.ip, + }; + // logger.info(log); + if(!req.url.startsWith('/api/log/getPageList')){ + addOperateLog(log); + } + next(); + }, + logErrorHandler: (err, req, res, next) => { + const logger = log4js.getLogger("error"); + const log = { + operateApi: req.url, + requestParams: JSON.stringify({ query: req.query, body: req.body }), + errorMessage: err.message, + exceptionMessage:err.stack, + ip: req.ip, + }; + logger.error(log); + addErrorLog(log); + next(err); + }, +}; diff --git a/model/logModel.js b/model/logModel.js new file mode 100644 index 0000000000000000000000000000000000000000..a6250ede9ffc08262528cfdb64e9d2d03dfc6387 --- /dev/null +++ b/model/logModel.js @@ -0,0 +1,47 @@ +const db = require("../config/dbPool"); +const { formatDate } = require("../utils/index"); +class LogModel { + selectPage(logType, current, size, startTime, endTime) { + let whereStr = `log_type=${logType}`; + if (startTime && endTime) { + startTime = formatDate(startTime); + endTime = formatDate(endTime); + whereStr = `${whereStr} and log_time>='${startTime}' and log_time<'${endTime}'`; + } + + const sql = `select * from sys_logs where ${whereStr} order by id desc limit ?,?`; + const sqlArr = [current, size]; + return db.queryAsync(sql, sqlArr); + } + selectTotal(logType, startTime, endTime) { + let whereStr = `log_type=${logType}`; + if (startTime && endTime) { + startTime = formatDate(startTime); + endTime = formatDate(endTime); + whereStr = `${whereStr} and log_time>='${startTime}' and log_time<'${endTime}'`; + } + + const sql = `select count(id) as total from sys_logs where ${whereStr}`; + const sqlArr = []; + return db.queryAsync(sql, sqlArr); + } + insert(log) { + const sql = `insert into sys_logs(log_time,operate_api,request_params,error_message,exception_message,log_type,ip) values(?,?,?,?,?,?,?)`; + const sqlArr = [ + log.logTime, + log.operateApi, + log.requestParams, + log.errorMessage, + log.exceptionMessage, + log.logType, + log.ip, + ]; + return db.queryAsync(sql, sqlArr); + } + remove(ids) { + const sql = `delete from sys_logs where id in (${ids})`; + const sqlArr = []; + return db.queryAsync(sql, sqlArr); + } +} +module.exports = new LogModel(); diff --git a/model/menuModel.js b/model/menuModel.js index dbc579e358f6b601a4add1b30106df15db23c368..e7cfd8c6e42c55e986a4f70fdfe70402dc70dfc6 100644 --- a/model/menuModel.js +++ b/model/menuModel.js @@ -20,16 +20,18 @@ class MenuModel { } insert(menu) { const sql = - "insert into sys_menus(menu_id, menu_name, path, menu_type, icon, sort, pid, link, enabled, status) values(?,?,?,?,?,?,?,?,?,?)"; + "insert into sys_menus(menu_id, menu_name, path,view_path, menu_type, icon, sort, pid, link,link_url, enabled, status) values(?,?,?,?,?,?,?,?,?,?,?,?)"; const sqlArr = [ menu.menuId, menu.menuName, menu.path, + menu.viewPath, menu.menuType, menu.icon, menu.sort, menu.pid, menu.link, + menu.linkUrl, menu.enabled, menu.status ]; @@ -37,16 +39,18 @@ class MenuModel { } update(menu) { const sql = - "update sys_menus set menu_id = ?, menu_name = ?, path = ?, menu_type = ?, icon = ?, sort = ?, pid = ?, link = ?, enabled = ?, status = ? where id= ?"; + "update sys_menus set menu_id = ?, menu_name = ?, path = ?, view_path = ?, menu_type = ?, icon = ?, sort = ?, pid = ?, link = ?,link_url=?, enabled = ?, status = ? where id= ?"; const sqlArr = [ menu.menuId, menu.menuName, menu.path, + menu.viewPath, menu.menuType, menu.icon, menu.sort, menu.pid, menu.link, + menu.linkUrl, menu.enabled, menu.status, menu.id diff --git a/package-lock.json b/package-lock.json index b2c041444729140994306ae3117d59c92b7f77f8..a295390153def6fab7f2aeac6161a8245520f175 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,129 +9,104 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "birdy-ui-test": "^0.0.5", "cors": "^2.8.5", "express": "^4.18.1", - "mysql": "^2.18.1" - } - }, - "node_modules/@babel/parser": { - "version": "7.18.5", - "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.18.5.tgz", - "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.2.37", - "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.37.tgz", - "integrity": "sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==", + "express-jwt": "^7.7.5", + "js-md5": "^0.7.3", + "jsonwebtoken": "^8.5.1", + "log4js": "^6.6.1", + "moment": "^2.29.4", + "mysql": "^2.18.1", + "nodemon": "^2.0.19" + } + }, + "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==", "dependencies": { - "@babel/parser": "^7.16.4", - "@vue/shared": "3.2.37", - "estree-walker": "^2.0.2", - "source-map": "^0.6.1" + "@types/connect": "*", + "@types/node": "*" } }, - "node_modules/@vue/compiler-dom": { - "version": "3.2.37", - "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz", - "integrity": "sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==", + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "dependencies": { - "@vue/compiler-core": "3.2.37", - "@vue/shared": "3.2.37" + "@types/node": "*" } }, - "node_modules/@vue/compiler-sfc": { - "version": "3.2.37", - "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz", - "integrity": "sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==", + "node_modules/@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", "dependencies": { - "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.37", - "@vue/compiler-dom": "3.2.37", - "@vue/compiler-ssr": "3.2.37", - "@vue/reactivity-transform": "3.2.37", - "@vue/shared": "3.2.37", - "estree-walker": "^2.0.2", - "magic-string": "^0.25.7", - "postcss": "^8.1.10", - "source-map": "^0.6.1" + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" } }, - "node_modules/@vue/compiler-ssr": { - "version": "3.2.37", - "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz", - "integrity": "sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==", + "node_modules/@types/express-serve-static-core": { + "version": "4.17.30", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz", + "integrity": "sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ==", "dependencies": { - "@vue/compiler-dom": "3.2.37", - "@vue/shared": "3.2.37" + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" } }, - "node_modules/@vue/devtools-api": { - "version": "6.1.4", - "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.1.4.tgz", - "integrity": "sha512-IiA0SvDrJEgXvVxjNkHPFfDx6SXw0b/TUkqMcDZWNg9fnCAHbTpoo59YfJ9QLFkwa3raau5vSlRVzMSLDnfdtQ==" - }, - "node_modules/@vue/reactivity": { - "version": "3.2.37", - "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.37.tgz", - "integrity": "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==", + "node_modules/@types/express-unless": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@types/express-unless/-/express-unless-0.5.3.tgz", + "integrity": "sha512-TyPLQaF6w8UlWdv4gj8i46B+INBVzURBNRahCozCSXfsK2VTlL1wNyTlMKw817VHygBtlcl5jfnPadlydr06Yw==", "dependencies": { - "@vue/shared": "3.2.37" + "@types/express": "*" } }, - "node_modules/@vue/reactivity-transform": { - "version": "3.2.37", - "resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz", - "integrity": "sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==", + "node_modules/@types/jsonwebtoken": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.8.tgz", + "integrity": "sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A==", "dependencies": { - "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.37", - "@vue/shared": "3.2.37", - "estree-walker": "^2.0.2", - "magic-string": "^0.25.7" + "@types/node": "*" } }, - "node_modules/@vue/runtime-core": { - "version": "3.2.37", - "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.37.tgz", - "integrity": "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==", - "dependencies": { - "@vue/reactivity": "3.2.37", - "@vue/shared": "3.2.37" - } + "node_modules/@types/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-fccbsHKqFDXClBZTDLA43zl0+TbxyIwyzIzwwhvoJvhNjOErCdeX2xJbURimv2EbSVUGav001PaCJg4mZxMl4w==" }, - "node_modules/@vue/runtime-dom": { - "version": "3.2.37", - "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz", - "integrity": "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==", - "dependencies": { - "@vue/runtime-core": "3.2.37", - "@vue/shared": "3.2.37", - "csstype": "^2.6.8" - } + "node_modules/@types/node": { + "version": "18.6.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.3.tgz", + "integrity": "sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg==" + }, + "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==" + }, + "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==" }, - "node_modules/@vue/server-renderer": { - "version": "3.2.37", - "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.37.tgz", - "integrity": "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==", + "node_modules/@types/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", "dependencies": { - "@vue/compiler-ssr": "3.2.37", - "@vue/shared": "3.2.37" - }, - "peerDependencies": { - "vue": "3.2.37" + "@types/mime": "*", + "@types/node": "*" } }, - "node_modules/@vue/shared": { - "version": "3.2.37", - "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.37.tgz", - "integrity": "sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==" + "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==" }, "node_modules/accepts": { "version": "1.3.8", @@ -146,12 +121,29 @@ "node": ">= 0.6" } }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "license": "MIT" }, + "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==" + }, "node_modules/bignumber.js": { "version": "9.0.0", "resolved": "https://registry.npmmirror.com/bignumber.js/-/bignumber.js-9.0.0.tgz", @@ -161,15 +153,12 @@ "node": "*" } }, - "node_modules/birdy-ui-test": { - "version": "0.0.5", - "resolved": "https://registry.npmmirror.com/birdy-ui-test/-/birdy-ui-test-0.0.5.tgz", - "integrity": "sha512-VuCeh/MMfb3KtO/tziT2hPSzi5Jzkpd8eaoF+9Xs6lUeFeo2wFYalAl/jfFlp9Yrg+yaR7RvyjQwLlGWPar9iw==", - "dependencies": { - "core-js": "^3.6.5", - "vue": "^3.0.0", - "vue-router": "^4.0.0-0", - "vuex": "^4.0.0-0" + "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==", + "engines": { + "node": ">=8" } }, "node_modules/body-parser": { @@ -196,6 +185,31 @@ "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==", + "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==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz", @@ -218,6 +232,37 @@ "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==", + "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==" + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz", @@ -274,12 +319,6 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "license": "MIT" }, - "node_modules/core-js": { - "version": "3.23.2", - "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.23.2.tgz", - "integrity": "sha512-ELJOWxNrJfOH/WK4VJ3Qd+fOqZuOuDNDJz0xG6Bt4mGg2eO/UT9CljCrbqDGovjLKUrGajEEBcoTOc0w+yBYeQ==", - "hasInstallScript": true - }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", @@ -298,10 +337,13 @@ "node": ">= 0.10" } }, - "node_modules/csstype": { - "version": "2.6.20", - "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.20.tgz", - "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==" + "node_modules/date-format": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.13.tgz", + "integrity": "sha512-bnYCwf8Emc3pTD8pXnre+wfnjGtfi5ncMDKy7+cWZXbmRAsdWkOQHrfC1yz/KiwP5thDp2kCHWYWKBX4HP1hoQ==", + "engines": { + "node": ">=4.0" + } }, "node_modules/debug": { "version": "2.6.9", @@ -331,6 +373,14 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", @@ -352,11 +402,6 @@ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "license": "MIT" }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz", @@ -408,6 +453,25 @@ "node": ">= 0.10.0" } }, + "node_modules/express-jwt": { + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/express-jwt/-/express-jwt-7.7.5.tgz", + "integrity": "sha512-2CMse20Ex2vbqvsuGAcai7TgQuvmFa1n39PwKLaEszTGhuRzckBERII4PwdZIibtwfYUGSNVQzPpf+QcGo2yHw==", + "dependencies": { + "@types/express-unless": "^0.5.3", + "@types/jsonwebtoken": "^8.5.8", + "express-unless": "^2.0.2", + "jsonwebtoken": "^8.5.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/express-unless": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/express-unless/-/express-unless-2.1.1.tgz", + "integrity": "sha512-IrDYOa3tgT4U67ILXCfrAEOggYSIr8DXgm7oiH7ZaetxlS0MYXtPOUQ5No2HLOFE2Z5x9euVoHGdc5QNrZ5SWw==" + }, "node_modules/express/node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -428,6 +492,17 @@ ], "license": "MIT" }, + "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==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/finalhandler": { "version": "1.2.0", "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.2.0.tgz", @@ -446,6 +521,11 @@ "node": ">= 0.8" } }, + "node_modules/flatted": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==" + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz", @@ -464,6 +544,32 @@ "node": ">= 0.6" } }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "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.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz", @@ -484,6 +590,22 @@ "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==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz", @@ -496,6 +618,14 @@ "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==", + "engines": { + "node": ">=4" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz", @@ -536,6 +666,11 @@ "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==" + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", @@ -551,20 +686,179 @@ "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==", + "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==", + "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==", + "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==", + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "license": "MIT" }, - "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "node_modules/js-md5": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/js-md5/-/js-md5-0.7.3.tgz", + "integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==" + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=4", + "npm": ">=1.4.28" + } + }, + "node_modules/jsonwebtoken/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/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "node_modules/log4js": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.6.1.tgz", + "integrity": "sha512-J8VYFH2UQq/xucdNu71io4Fo+purYYudyErgBbswWKO0MC6QVOERRomt5su/z6d3RJSmLyTGmXl3Q/XjKCf+/A==", "dependencies": { - "sourcemap-codec": "^1.4.8" + "date-format": "^4.0.13", + "debug": "^4.3.4", + "flatted": "^3.2.6", + "rfdc": "^1.3.0", + "streamroller": "^3.1.2" + }, + "engines": { + "node": ">=8.0" } }, + "node_modules/log4js/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/log4js/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==" + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz", @@ -622,6 +916,25 @@ "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==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } + }, "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", @@ -643,17 +956,6 @@ "node": ">= 0.6" } }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz", @@ -663,6 +965,69 @@ "node": ">= 0.6" } }, + "node_modules/nodemon": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz", + "integrity": "sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==", + "hasInstallScript": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "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==", + "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==" + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "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==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", @@ -707,22 +1072,15 @@ "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", "license": "MIT" }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", - "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/process-nextick-args": { @@ -744,6 +1102,11 @@ "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==" + }, "node_modules/qs": { "version": "6.10.3", "resolved": "https://registry.npmmirror.com/qs/-/qs-6.10.3.tgz", @@ -798,6 +1161,22 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -810,6 +1189,14 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/send": { "version": "0.18.0", "resolved": "https://registry.npmmirror.com/send/-/send-0.18.0.tgz", @@ -875,27 +1262,25 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/simple-update-notifier": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", + "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "dependencies": { + "semver": "~7.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8.10.0" } }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" - }, "node_modules/sqlstring": { "version": "2.3.1", "resolved": "https://registry.npmmirror.com/sqlstring/-/sqlstring-2.3.1.tgz", @@ -914,6 +1299,40 @@ "node": ">= 0.8" } }, + "node_modules/streamroller": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.2.tgz", + "integrity": "sha512-wZswqzbgGGsXYIrBYhOE0yP+nQ6XRk7xDcYwuQAGTYXdyAUmvgVFE0YU1g5pvQT0m7GBaQfYcSnlHbapuK0H0A==", + "dependencies": { + "date-format": "^4.0.13", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/streamroller/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/streamroller/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==" + }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", @@ -923,6 +1342,28 @@ "safe-buffer": "~5.1.0" } }, + "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==", + "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==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz", @@ -932,6 +1373,17 @@ "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==", + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz", @@ -945,6 +1397,19 @@ "node": ">= 0.6" } }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz", @@ -977,151 +1442,96 @@ "engines": { "node": ">= 0.8" } - }, - "node_modules/vue": { - "version": "3.2.37", - "resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.37.tgz", - "integrity": "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==", - "dependencies": { - "@vue/compiler-dom": "3.2.37", - "@vue/compiler-sfc": "3.2.37", - "@vue/runtime-dom": "3.2.37", - "@vue/server-renderer": "3.2.37", - "@vue/shared": "3.2.37" - } - }, - "node_modules/vue-router": { - "version": "4.0.16", - "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.0.16.tgz", - "integrity": "sha512-JcO7cb8QJLBWE+DfxGUL3xUDOae/8nhM1KVdnudadTAORbuxIC/xAydC5Zr/VLHUDQi1ppuTF5/rjBGzgzrJNA==", - "dependencies": { - "@vue/devtools-api": "^6.0.0" - }, - "peerDependencies": { - "vue": "^3.2.0" - } - }, - "node_modules/vuex": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/vuex/-/vuex-4.0.2.tgz", - "integrity": "sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==", - "dependencies": { - "@vue/devtools-api": "^6.0.0-beta.11" - }, - "peerDependencies": { - "vue": "^3.0.2" - } } }, "dependencies": { - "@babel/parser": { - "version": "7.18.5", - "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.18.5.tgz", - "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==" - }, - "@vue/compiler-core": { - "version": "3.2.37", - "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.37.tgz", - "integrity": "sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==", + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", "requires": { - "@babel/parser": "^7.16.4", - "@vue/shared": "3.2.37", - "estree-walker": "^2.0.2", - "source-map": "^0.6.1" + "@types/connect": "*", + "@types/node": "*" } }, - "@vue/compiler-dom": { - "version": "3.2.37", - "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz", - "integrity": "sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==", + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "requires": { - "@vue/compiler-core": "3.2.37", - "@vue/shared": "3.2.37" + "@types/node": "*" } }, - "@vue/compiler-sfc": { - "version": "3.2.37", - "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz", - "integrity": "sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==", + "@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", "requires": { - "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.37", - "@vue/compiler-dom": "3.2.37", - "@vue/compiler-ssr": "3.2.37", - "@vue/reactivity-transform": "3.2.37", - "@vue/shared": "3.2.37", - "estree-walker": "^2.0.2", - "magic-string": "^0.25.7", - "postcss": "^8.1.10", - "source-map": "^0.6.1" - } - }, - "@vue/compiler-ssr": { - "version": "3.2.37", - "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz", - "integrity": "sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==", - "requires": { - "@vue/compiler-dom": "3.2.37", - "@vue/shared": "3.2.37" + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" } }, - "@vue/devtools-api": { - "version": "6.1.4", - "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.1.4.tgz", - "integrity": "sha512-IiA0SvDrJEgXvVxjNkHPFfDx6SXw0b/TUkqMcDZWNg9fnCAHbTpoo59YfJ9QLFkwa3raau5vSlRVzMSLDnfdtQ==" - }, - "@vue/reactivity": { - "version": "3.2.37", - "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.37.tgz", - "integrity": "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==", + "@types/express-serve-static-core": { + "version": "4.17.30", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz", + "integrity": "sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ==", "requires": { - "@vue/shared": "3.2.37" + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" } }, - "@vue/reactivity-transform": { - "version": "3.2.37", - "resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz", - "integrity": "sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==", + "@types/express-unless": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@types/express-unless/-/express-unless-0.5.3.tgz", + "integrity": "sha512-TyPLQaF6w8UlWdv4gj8i46B+INBVzURBNRahCozCSXfsK2VTlL1wNyTlMKw817VHygBtlcl5jfnPadlydr06Yw==", "requires": { - "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.37", - "@vue/shared": "3.2.37", - "estree-walker": "^2.0.2", - "magic-string": "^0.25.7" + "@types/express": "*" } }, - "@vue/runtime-core": { - "version": "3.2.37", - "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.37.tgz", - "integrity": "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==", + "@types/jsonwebtoken": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.8.tgz", + "integrity": "sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A==", "requires": { - "@vue/reactivity": "3.2.37", - "@vue/shared": "3.2.37" + "@types/node": "*" } }, - "@vue/runtime-dom": { - "version": "3.2.37", - "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz", - "integrity": "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==", - "requires": { - "@vue/runtime-core": "3.2.37", - "@vue/shared": "3.2.37", - "csstype": "^2.6.8" - } + "@types/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-fccbsHKqFDXClBZTDLA43zl0+TbxyIwyzIzwwhvoJvhNjOErCdeX2xJbURimv2EbSVUGav001PaCJg4mZxMl4w==" + }, + "@types/node": { + "version": "18.6.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.3.tgz", + "integrity": "sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg==" + }, + "@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==" }, - "@vue/server-renderer": { - "version": "3.2.37", - "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.37.tgz", - "integrity": "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==", + "@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==" + }, + "@types/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", "requires": { - "@vue/compiler-ssr": "3.2.37", - "@vue/shared": "3.2.37" + "@types/mime": "*", + "@types/node": "*" } }, - "@vue/shared": { - "version": "3.2.37", - "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.37.tgz", - "integrity": "sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==" + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "accepts": { "version": "1.3.8", @@ -1132,26 +1542,34 @@ "negotiator": "0.6.3" } }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmmirror.com/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==" + }, "bignumber.js": { "version": "9.0.0", "resolved": "https://registry.npmmirror.com/bignumber.js/-/bignumber.js-9.0.0.tgz", "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==" }, - "birdy-ui-test": { - "version": "0.0.5", - "resolved": "https://registry.npmmirror.com/birdy-ui-test/-/birdy-ui-test-0.0.5.tgz", - "integrity": "sha512-VuCeh/MMfb3KtO/tziT2hPSzi5Jzkpd8eaoF+9Xs6lUeFeo2wFYalAl/jfFlp9Yrg+yaR7RvyjQwLlGWPar9iw==", - "requires": { - "core-js": "^3.6.5", - "vue": "^3.0.0", - "vue-router": "^4.0.0-0", - "vuex": "^4.0.0-0" - } + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, "body-parser": { "version": "1.20.0", @@ -1172,6 +1590,28 @@ "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==", + "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==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, "bytes": { "version": "3.1.2", "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz", @@ -1186,6 +1626,26 @@ "get-intrinsic": "^1.0.2" } }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "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==" + }, "content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz", @@ -1216,11 +1676,6 @@ "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, - "core-js": { - "version": "3.23.2", - "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.23.2.tgz", - "integrity": "sha512-ELJOWxNrJfOH/WK4VJ3Qd+fOqZuOuDNDJz0xG6Bt4mGg2eO/UT9CljCrbqDGovjLKUrGajEEBcoTOc0w+yBYeQ==" - }, "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", @@ -1235,10 +1690,10 @@ "vary": "^1" } }, - "csstype": { - "version": "2.6.20", - "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.20.tgz", - "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==" + "date-format": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.13.tgz", + "integrity": "sha512-bnYCwf8Emc3pTD8pXnre+wfnjGtfi5ncMDKy7+cWZXbmRAsdWkOQHrfC1yz/KiwP5thDp2kCHWYWKBX4HP1hoQ==" }, "debug": { "version": "2.6.9", @@ -1258,6 +1713,14 @@ "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", @@ -1273,11 +1736,6 @@ "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz", @@ -1328,6 +1786,30 @@ } } }, + "express-jwt": { + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/express-jwt/-/express-jwt-7.7.5.tgz", + "integrity": "sha512-2CMse20Ex2vbqvsuGAcai7TgQuvmFa1n39PwKLaEszTGhuRzckBERII4PwdZIibtwfYUGSNVQzPpf+QcGo2yHw==", + "requires": { + "@types/express-unless": "^0.5.3", + "@types/jsonwebtoken": "^8.5.8", + "express-unless": "^2.0.2", + "jsonwebtoken": "^8.5.1" + } + }, + "express-unless": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/express-unless/-/express-unless-2.1.1.tgz", + "integrity": "sha512-IrDYOa3tgT4U67ILXCfrAEOggYSIr8DXgm7oiH7ZaetxlS0MYXtPOUQ5No2HLOFE2Z5x9euVoHGdc5QNrZ5SWw==" + }, + "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==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, "finalhandler": { "version": "1.2.0", "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.2.0.tgz", @@ -1342,6 +1824,11 @@ "unpipe": "~1.0.0" } }, + "flatted": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==" + }, "forwarded": { "version": "0.2.0", "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz", @@ -1352,6 +1839,22 @@ "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz", @@ -1367,6 +1870,19 @@ "has-symbols": "^1.0.1" } }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz", @@ -1375,6 +1891,11 @@ "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==" + }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz", @@ -1400,6 +1921,11 @@ "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==" + }, "inherits": { "version": "2.0.4", "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", @@ -1410,17 +1936,153 @@ "resolved": "https://registry.npmmirror.com/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==", + "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==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "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==" + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, - "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "js-md5": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/js-md5/-/js-md5-0.7.3.tgz", + "integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==" + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "log4js": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.6.1.tgz", + "integrity": "sha512-J8VYFH2UQq/xucdNu71io4Fo+purYYudyErgBbswWKO0MC6QVOERRomt5su/z6d3RJSmLyTGmXl3Q/XjKCf+/A==", "requires": { - "sourcemap-codec": "^1.4.8" + "date-format": "^4.0.13", + "debug": "^4.3.4", + "flatted": "^3.2.6", + "rfdc": "^1.3.0", + "streamroller": "^3.1.2" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } } }, "media-typer": { @@ -1456,6 +2118,19 @@ "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==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", @@ -1472,16 +2147,56 @@ "sqlstring": "2.3.1" } }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" - }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, + "nodemon": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz", + "integrity": "sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==", + "requires": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "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==", + "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==" + } + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "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==" + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", @@ -1510,20 +2225,10 @@ "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", - "requires": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, "process-nextick-args": { "version": "2.0.1", @@ -1539,6 +2244,11 @@ "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==" + }, "qs": { "version": "6.10.3", "resolved": "https://registry.npmmirror.com/qs/-/qs-6.10.3.tgz", @@ -1577,6 +2287,19 @@ "util-deprecate": "~1.0.1" } }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -1587,6 +2310,11 @@ "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, "send": { "version": "0.18.0", "resolved": "https://registry.npmmirror.com/send/-/send-0.18.0.tgz", @@ -1640,20 +2368,20 @@ "object-inspect": "^1.9.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + "simple-update-notifier": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", + "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "requires": { + "semver": "~7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + } + } }, "sqlstring": { "version": "2.3.1", @@ -1665,6 +2393,31 @@ "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, + "streamroller": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.2.tgz", + "integrity": "sha512-wZswqzbgGGsXYIrBYhOE0yP+nQ6XRk7xDcYwuQAGTYXdyAUmvgVFE0YU1g5pvQT0m7GBaQfYcSnlHbapuK0H0A==", + "requires": { + "date-format": "^4.0.13", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", @@ -1673,11 +2426,35 @@ "safe-buffer": "~5.1.0" } }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "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==", + "requires": { + "is-number": "^7.0.0" + } + }, "toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/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==", + "requires": { + "nopt": "~1.0.10" + } + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz", @@ -1687,6 +2464,16 @@ "mime-types": "~2.1.24" } }, + "undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz", @@ -1706,34 +2493,6 @@ "version": "1.1.2", "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" - }, - "vue": { - "version": "3.2.37", - "resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.37.tgz", - "integrity": "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==", - "requires": { - "@vue/compiler-dom": "3.2.37", - "@vue/compiler-sfc": "3.2.37", - "@vue/runtime-dom": "3.2.37", - "@vue/server-renderer": "3.2.37", - "@vue/shared": "3.2.37" - } - }, - "vue-router": { - "version": "4.0.16", - "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.0.16.tgz", - "integrity": "sha512-JcO7cb8QJLBWE+DfxGUL3xUDOae/8nhM1KVdnudadTAORbuxIC/xAydC5Zr/VLHUDQi1ppuTF5/rjBGzgzrJNA==", - "requires": { - "@vue/devtools-api": "^6.0.0" - } - }, - "vuex": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/vuex/-/vuex-4.0.2.tgz", - "integrity": "sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==", - "requires": { - "@vue/devtools-api": "^6.0.0-beta.11" - } } } } diff --git a/package.json b/package.json index 0f2e3ed562e55ff60b339078b8984197d9153227..60bc295baf590e6aeb241a7f5857f4dc309f97bd 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "express-jwt": "^7.7.5", "js-md5": "^0.7.3", "jsonwebtoken": "^8.5.1", + "log4js": "^6.6.1", "moment": "^2.29.4", "mysql": "^2.18.1", "nodemon": "^2.0.19" diff --git a/router/dept.js b/router/dept.js index 89a4c8844853fc0da2963d67682d33b1cfac9c32..3015bdc2ba2ccbe7fcd9f2ecbd504593d452bfab 100644 --- a/router/dept.js +++ b/router/dept.js @@ -10,31 +10,76 @@ const { router.get("/api/dept/getListByPId", (req, res) => { const { query } = req; - getListByPId(query).then((data) => { - res.send(data); - }); + getListByPId(query) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "获取部门列表失败", + status: 1, + }); + next(err); + }); }); router.get("/api/dept/getList", (req, res) => { - getList().then((data) => { - res.send(data); - }); + getList() + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "获取部门列表失败", + status: 1, + }); + next(err); + }); }); router.post("/api/dept/add", (req, res) => { const { body } = req; - add(body).then((data) => { - res.send(data); - }); + add(body) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "添加部门失败", + status: 1, + }); + next(err); + }); }); router.post("/api/dept/update", (req, res) => { const { body } = req; - update(body).then((data) => { - res.send(data); - }); + update(body) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "修改部门失败", + status: 1, + }); + next(err); + }); }); router.post("/api/dept/delete", (req, res) => { const { body } = req; - remove(body).then((data) => { - res.send(data); - }); + remove(body) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "删除部门失败", + status: 1, + }); + next(err); + }); }); module.exports = router; diff --git a/router/dictionary.js b/router/dictionary.js index f5874ee3d2c53751d026e41a78c09860ee273220..2d16edc8e519c0bea16d284c22eb337f7a274ba5 100644 --- a/router/dictionary.js +++ b/router/dictionary.js @@ -9,26 +9,62 @@ const { router.get("/api/dictionary/getList", (req, res) => { const { query } = req; - getList(query).then((data) => { - res.send(data); - }); + getList(query) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "获取字典列表失败", + status: 1, + }); + next(err); + }); }); router.post("/api/dictionary/add", (req, res) => { const { body } = req; - add(body).then((data) => { - res.send(data); - }); + add(body) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "添加字典失败", + status: 1, + }); + next(err); + }); }); router.post("/api/dictionary/update", (req, res) => { const { body } = req; - update(body).then((data) => { - res.send(data); - }); + update(body) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "修改字典失败", + status: 1, + }); + next(err); + }); }); router.post("/api/dictionary/delete", (req, res) => { const { body } = req; - remove(body).then((data) => { - res.send(data); - }); + remove(body) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "删除失败", + status: 1, + }); + next(err); + }); }); module.exports = router; diff --git a/router/dictionaryType.js b/router/dictionaryType.js index 5db572370cb6560ede7a5a81dff8f568fb4e6278..9a0de626d2b83a8b5340b72f9fc72bd6fbb93b38 100644 --- a/router/dictionaryType.js +++ b/router/dictionaryType.js @@ -9,28 +9,64 @@ const { router.get("/api/dictionaryType/getList", (req, res) => { const { query } = req; - getList(query).then((data) => { - console.log('data',data); - res.send(data); - }); + getList(query) + .then((data) => { + console.log("data", data); + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "获取字典分类列表失败", + status: 1, + }); + next(err); + }); }); router.post("/api/dictionaryType/add", (req, res) => { const { body } = req; - add(body).then((data) => { - res.send(data); - }); + add(body) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "添加字典分类失败", + status: 1, + }); + next(err); + }); }); router.post("/api/dictionaryType/update", (req, res) => { const { body } = req; - update(body).then((data) => { - res.send(data); - }); + update(body) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "修改字典分类失败", + status: 1, + }); + next(err); + }); }); router.post("/api/dictionaryType/delete", (req, res) => { const { body } = req; - remove(body).then((data) => { - res.send(data); - }); + remove(body) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "删除字典失败", + status: 1, + }); + next(err); + }); }); module.exports = router; diff --git a/router/log.js b/router/log.js new file mode 100644 index 0000000000000000000000000000000000000000..40444c4627a63fa4331562af4a3007d1e31eadbd --- /dev/null +++ b/router/log.js @@ -0,0 +1,54 @@ +const express = require("express"); +const router = express.Router(); +const { + getPageList, + remove, + batchRemove, +} = require("../controllers/logController"); + +router.get("/api/log/getPageList", (req, res, next) => { + const { query } = req; + getPageList(query) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "获取日志分页列表失败", + status: 1, + }); + next(err); + }); +}); +router.post("/api/log/remove", (req, res, next) => { + const { body } = req; + remove(body) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "删除日志失败", + status: 1, + }); + next(err); + }); +}); +router.post("/api/log/batchRemove", (req, res, next) => { + const { body } = req; + batchRemove(body) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "删除日志失败", + status: 1, + }); + next(err); + }); +}); +module.exports = router; diff --git a/router/login.js b/router/login.js index 2e32c5c56169a30d7aad4db521409e09fb4db24d..8f8dbc488d974f65d73c4100be401a753999943c 100644 --- a/router/login.js +++ b/router/login.js @@ -3,10 +3,12 @@ const router = express.Router(); const { login } = require("../controllers/loginControoler"); -router.post("/api/login", (req, res) => { +router.post("/api/login", (req, res,next) => { const {body}=req login(body).then((data) => { res.send(data) + }).catch((err) => { + next(err) }); }); diff --git a/router/menu.js b/router/menu.js index 12fd8bb0f9373fa98dbef807e1d7c39b2dad01a9..4d519b98a3ded2a4df7acc1f9bd1358a01ee4aac 100644 --- a/router/menu.js +++ b/router/menu.js @@ -1,13 +1,10 @@ const express = require("express"); const router = express.Router(); const { - getRoleMenuLsit, - getPermission, getList, add, update, remove, - assign, } = require("../controllers/menuController"); router.get("/api/menu/getList", (req, res) => { @@ -15,24 +12,54 @@ router.get("/api/menu/getList", (req, res) => { getList(query).then((data) => { console.log('data',data); res.send(data); + }).catch((err)=>{ + res.send({ + data:null, + msg:'菜单列表获取出错', + status:1 + }); + next(err) }); }); -router.post("/api/menu/add", (req, res) => { +router.post("/api/menu/add", (req, res,next) => { const { body } = req; add(body).then((data) => { + console.log('1111111111111'); res.send(data); + }).catch((err)=>{ + console.log('2222222222222'); + res.send({ + data:null, + msg:'添加菜单失败', + status:1 + }); + next(err) }); }); router.post("/api/menu/update", (req, res) => { const { body } = req; update(body).then((data) => { res.send(data); + }).catch((err)=>{ + res.send({ + data:null, + msg:'修改菜单失败', + status:1 + }); + next(err) }); }); router.post("/api/menu/delete", (req, res) => { const { body } = req; remove(body).then((data) => { res.send(data); + }).catch((err)=>{ + res.send({ + data:null, + msg:'删除菜单失败', + status:1 + }); + next(err) }); }); diff --git a/router/role.js b/router/role.js index d7073959b75c9def6efce490fd79ea523aa2997f..d7e9d73a5123b26292886a7edf73577611d0ee52 100644 --- a/router/role.js +++ b/router/role.js @@ -13,51 +13,123 @@ const { router.get("/api/role/getUserPermission", (req, res) => { const { query } = req; - getUserPermission(query).then((data) => { - res.send(data); - }); + getUserPermission(query) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "获取用户权限失败", + status: 1, + }); + next(err); + }); }); router.get("/api/role/getMenuPermission", (req, res) => { const { query } = req; - getMenuPermission(query).then((data) => { - res.send(data); - }); + getMenuPermission(query) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "获取菜单权限失败", + status: 1, + }); + next(err); + }); }); router.get("/api/role/getList", (req, res) => { const { query } = req; - getList(query).then((data) => { - console.log('data',data); - res.send(data); - }); + getList(query) + .then((data) => { + console.log("data", data); + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "获取角色列表失败", + status: 1, + }); + next(err); + }); }); router.post("/api/role/add", (req, res) => { const { body } = req; - add(body).then((data) => { - res.send(data); - }); + add(body) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "添加角色失败", + status: 1, + }); + next(err); + }); }); router.post("/api/role/update", (req, res) => { const { body } = req; - update(body).then((data) => { - res.send(data); - }); + update(body) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "修改角色失败", + status: 1, + }); + next(err); + }); }); router.post("/api/role/delete", (req, res) => { const { body } = req; - remove(body).then((data) => { - res.send(data); - }); + remove(body) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "删除角色失败", + status: 1, + }); + next(err); + }); }); router.post("/api/role/assignPermission", (req, res) => { const { body } = req; - assignMenu(body).then((data) => { - res.send(data); - }); + assignMenu(body) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "分配权限失败", + status: 1, + }); + next(err); + }); }); router.post("/api/role/assignUser", (req, res) => { const { body } = req; - assignUser(body).then((data) => { - res.send(data); - }); + assignUser(body) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "分配用户失败", + status: 1, + }); + next(err); + }); }); module.exports = router; diff --git a/router/user.js b/router/user.js index 19ad6d95f9c20742edf755aa1cb32387f2c1ecf1..74a69f8e358dc58cffafcffdc1fb21d0dcf22ad0 100644 --- a/router/user.js +++ b/router/user.js @@ -16,83 +16,200 @@ const { disable, } = require("../controllers/userController"); -router.get("/api/user/getPermission", (req, res) => { +router.get("/api/user/getPermission", (req, res, next) => { const { query } = req; - getPermission(query).then((data) => { - res.send(data); - }); + getPermission(query) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "获取权限失败", + status: 1, + }); + next(err); + }); }); -router.get("/api/user/getPageList", (req, res) => { +router.get("/api/user/getPageList", (req, res, next) => { const { query } = req; - getPageList(query).then((data) => { - res.send(data); - }); + getPageList(query) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "获取用户分页列表失败", + status: 1, + }); + next(err); + }); }); -router.get("/api/user/getList", (req, res) => { +router.get("/api/user/getList", (req, res, next) => { const { query } = req; - getList(query).then((data) => { - res.send(data); - }); + getList(query) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "获取用户列表失败", + status: 1, + }); + next(err); + }); }); -router.get("/api/user/getDetail", (req, res) => { +router.get("/api/user/getDetail", (req, res, next) => { const { query } = req; - getDetail(query).then((data) => { - res.send(data); - }); + getDetail(query) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "获取用户详情失败", + status: 1, + }); + next(err); + }); }); -router.get("/api/user/getInfo", (req, res) => { +router.get("/api/user/getInfo", (req, res, next) => { const { query } = req; - getInfo(query).then((data) => { - res.send(data); - }); + getInfo(query) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "获取用户信息失败", + status: 1, + }); + next(err); + }); }); -router.post("/api/user/add", (req, res) => { +router.post("/api/user/add", (req, res, next) => { const { body } = req; - add(body).then((data) => { - res.send(data); - }); + add(body) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "添加用户失败", + status: 1, + }); + next(err); + }); }); -router.post("/api/user/update", (req, res) => { +router.post("/api/user/update", (req, res, next) => { const { body } = req; - update(body).then((data) => { - res.send(data); - }); + update(body) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "修改用户失败", + status: 1, + }); + next(err); + }); }); -router.post("/api/user/delete", (req, res) => { +router.post("/api/user/delete", (req, res, next) => { const { body } = req; - remove(body).then((data) => { - res.send(data); - }); + remove(body) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "删除用户失败", + status: 1, + }); + next(err); + }); }); -router.post("/api/user/batchRemove", (req, res) => { +router.post("/api/user/batchRemove", (req, res, next) => { const { body } = req; - batchRemove(body).then((data) => { - res.send(data); - }); + batchRemove(body) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "删除用户失败", + status: 1, + }); + next(err); + }); }); -router.post("/api/user/updatePassword", (req, res) => { +router.post("/api/user/updatePassword", (req, res, next) => { const { body } = req; - updatePassword(body).then((data) => { - res.send(data); - }); + updatePassword(body) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "修改用户失败", + status: 1, + }); + next(err); + }); }); -router.post("/api/user/resetPassword", (req, res) => { +router.post("/api/user/resetPassword", (req, res, next) => { const { body } = req; - resetPassword(body).then((data) => { - res.send(data); - }); + resetPassword(body) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "重置用户密码失败", + status: 1, + }); + next(err); + }); }); -router.post("/api/user/enabled", (req, res) => { +router.post("/api/user/enabled", (req, res, next) => { const { body } = req; - console.log('enabled-body',body); - enabled(body).then((data) => { - res.send(data); - }); + console.log("enabled-body", body); + enabled(body) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "启用用户失败", + status: 1, + }); + next(err); + }); }); -router.post("/api/user/disable", (req, res) => { +router.post("/api/user/disable", (req, res, next) => { const { body } = req; - disable(body).then((data) => { - res.send(data); - }); + disable(body) + .then((data) => { + res.send(data); + }) + .catch((err) => { + res.send({ + data: null, + msg: "禁用用户失败", + status: 1, + }); + next(err); + }); }); module.exports = router; diff --git a/services/deptServices.js b/services/deptServices.js index 1325ef8ee075953d7f721a67055356297e153e09..0c202a9ce4abdd66d1c08f2b1aa0d39f890cf481 100644 --- a/services/deptServices.js +++ b/services/deptServices.js @@ -1,59 +1,55 @@ +const { success } = require("../utils/jsonResult"); const { selectWhere, select, insert, update, - remove - } = require("../model/deptModel"); - + remove, +} = require("../model/deptModel"); + class DeptServices { constructor() {} - async getDeptListByPId(pid) { - const deptListResult = await selectWhere(pid); - const deptList = deptListResult.results && deptListResult.results; - const jsonObj = { - status: 0, - msg: "获取父级下的部门列表", - data:deptList - }; - return jsonObj; + async getDeptListByPId(pid) { + try { + const deptListResult = await selectWhere(pid); + const deptList = deptListResult.results && deptListResult.results; + return success("获取父级下的部门列表",deptList); + } catch (error) { + throw error; + } } - async getDeptList() { - const deptListResult = await select(); - const deptList = deptListResult.results && deptListResult.results; - const jsonObj = { - status: 0, - msg: "部门列表", - data:deptList - }; - return jsonObj; + async getDeptList() { + try { + const deptListResult = await select(); + const deptList = deptListResult.results && deptListResult.results; + return success("部门列表",deptList); + } catch (error) { + throw error; + } } async addDept(dept) { - await insert(dept); - const jsonObj = { - status: 0, - msg: "添加部门成功", - data: null, - }; - return jsonObj; + try { + await insert(dept); + return success("添加部门成功"); + } catch (error) { + throw error; + } } async updateDept(dept) { - await update(dept); - const jsonObj = { - status: 0, - msg: "修改部门成功", - data: null, - }; - return jsonObj; + try { + await update(dept); + return success("修改部门成功"); + } catch (error) { + throw error; + } } async deleteDept(id) { - await remove(id); - const jsonObj = { - status: 0, - msg: "删除部门成功", - data: null, - }; - return jsonObj; + try { + await remove(id); + return success("删除部门成功"); + } catch (error) { + throw error; + } } } module.exports = new DeptServices(); diff --git a/services/dictionaryServices.js b/services/dictionaryServices.js index 403b0b61c3082cfe18c6b5fed94a1e4df32e7b4e..fd2442a266ce619bb7fa3d37e889df81211b782f 100644 --- a/services/dictionaryServices.js +++ b/services/dictionaryServices.js @@ -1,48 +1,46 @@ +const { success } = require("../utils/jsonResult"); const { selectWhere, insert, update, - remove - } = require("../model/dictionaryModel"); - + remove, +} = require("../model/dictionaryModel"); + class DictionaryServices { constructor() {} - async getDictionaryList(dicTypeId) { - const dictionaryListResult = await selectWhere(dicTypeId); - const dictionaryList = dictionaryListResult.results && dictionaryListResult.results; - const jsonObj = { - status: 0, - msg: "字典列表", - data:dictionaryList - }; - return jsonObj; + async getDictionaryList(dicTypeId) { + try { + const dictionaryListResult = await selectWhere(dicTypeId); + const dictionaryList = + dictionaryListResult.results && dictionaryListResult.results; + return success( "字典列表",dictionaryList); + } catch (error) { + throw error; + } } async addDictionary(dictionary) { - await insert(dictionary); - const jsonObj = { - status: 0, - msg: "添加字典成功", - data: null, - }; - return jsonObj; + try { + await insert(dictionary); + return success("添加字典成功"); + } catch (error) { + throw error; + } } async updateDictionary(dictionary) { - await update(dictionary); - const jsonObj = { - status: 0, - msg: "修改字典成功", - data: null, - }; - return jsonObj; + try { + await update(dictionary); + return success("修改字典成功"); + } catch (error) { + throw error; + } } async deleteDictionary(id) { - await remove(id); - const jsonObj = { - status: 0, - msg: "删除字典成功", - data: null, - }; - return jsonObj; + try { + await remove(id); + return success("删除字典成功"); + } catch (error) { + throw error; + } } } module.exports = new DictionaryServices(); diff --git a/services/dictionaryTypeServices.js b/services/dictionaryTypeServices.js index db99a19cb15d039e29f96851a435d8cb45f2cb49..41b56c5541892d2f61b0f704f2f9d4beec2b14b9 100644 --- a/services/dictionaryTypeServices.js +++ b/services/dictionaryTypeServices.js @@ -1,48 +1,46 @@ +const { success } = require("../utils/jsonResult"); const { select, insert, update, - remove - } = require("../model/dictionaryTypeModel"); + remove, +} = require("../model/dictionaryTypeModel"); class DictionaryTypeServices { constructor() {} - async getDictionaryTypeList() { - const dictionaryTypeListResult = await select(); - const dictionaryTypeList = dictionaryTypeListResult.results && dictionaryTypeListResult.results; - const jsonObj = { - status: 0, - msg: "字典分类列表", - data:dictionaryTypeList - }; - return jsonObj; + async getDictionaryTypeList() { + try { + const dictionaryTypeListResult = await select(); + const dictionaryTypeList = + dictionaryTypeListResult.results && dictionaryTypeListResult.results; + return success("字典分类列表",dictionaryTypeList); + } catch (error) { + throw error; + } } async addDictionaryType(dictionaryType) { - await insert(dictionaryType); - const jsonObj = { - status: 0, - msg: "添加字典分类成功", - data: null, - }; - return jsonObj; + try { + await insert(dictionaryType); + return success("添加字典分类成功"); + } catch (error) { + throw error; + } } async updateDictionaryType(dictionaryType) { - await update(dictionaryType); - const jsonObj = { - status: 0, - msg: "修改字典分类成功", - data: null, - }; - return jsonObj; + try { + await update(dictionaryType); + return success("修改字典分类成功"); + } catch (error) { + throw error; + } } async deleteDictionaryType(id) { - await remove(id); - const jsonObj = { - status: 0, - msg: "删除字典分类成功", - data: null, - }; - return jsonObj; + try { + await remove(id); + return success("删除字典分类成功"); + } catch (error) { + throw error; + } } } module.exports = new DictionaryTypeServices(); diff --git a/services/logServices.js b/services/logServices.js new file mode 100644 index 0000000000000000000000000000000000000000..3bf332ff14648778ec5f35840a5f87bc99f91a57 --- /dev/null +++ b/services/logServices.js @@ -0,0 +1,93 @@ +const { getDate } = require("../utils/index"); +const { success } = require("../utils/jsonResult"); +const { + selectTotal, + selectPage, + insert, + remove, +} = require("../model/logModel"); + +class LogServices { + constructor() {} + async getLogPageList( + logType, + current, + size, + startTime, + endTime + ) { + try { + let pageIndex = 1; + let pageSize = 10; + if (current < 1) { + current = 1; + } + if (size < 1) { + size = 10; + } + current = parseInt(current); + size = parseInt(size); + pageIndex = size * (current - 1); + pageSize = size; + const pageListResult = await selectPage( + logType, + pageIndex, + pageSize, + startTime, + endTime + ); + const pageList = pageListResult.results; + const totalResult = await selectTotal( + logType, + startTime, + endTime + ); + console.log(totalResult); + const total = totalResult.results && totalResult.results[0].total; + return success("日志分页列表", pageList, { + current, + size, + total, + }); + } catch (error) { + throw error; + } + } + async addOperateLog(log) { + try { + log.logTime = getDate(); + log.logType = 0; + await insert(log); + return success(`添加操作日志成功`); + } catch (error) { + throw error; + } + } + async addErrorLog(log) { + try { + log.logTime = getDate(); + log.logType = 1; + await insert(log); + return success(`添加错误日志成功`); + } catch (error) { + throw error; + } + } + async removeLog(id) { + try { + await remove(id); + return success("删除日志成功"); + } catch (error) { + throw error; + } + } + async batchRemoveLog(ids) { + try { + await remove(ids); + return success("删除日志成功"); + } catch (error) { + throw error; + } + } +} +module.exports = new LogServices(); diff --git a/services/menuServices.js b/services/menuServices.js index 0ad5287954f91a5dfbfacfb1113377fa469e9f2f..18133025c7ca907a6b5823924cc9fbc80cdeac71 100644 --- a/services/menuServices.js +++ b/services/menuServices.js @@ -1,72 +1,68 @@ +const { success } = require("../utils/jsonResult"); const { select, selectWhere, selectOne, insert, update, - remove - } = require("../model/menuModel"); - + remove, +} = require("../model/menuModel"); class MenuServices { constructor() {} async getMenuListByIds(menuIds) { - const menuListResult = await selectWhere(menuIds); - const menuList = menuListResult.results && menuListResult.results; - const jsonObj = { - status: 0, - msg: "授权菜单列表", - data:menuList - }; - return jsonObj; + try { + const menuListResult = await selectWhere(menuIds); + const menuList = menuListResult.results && menuListResult.results; + return success("授权菜单列表",menuList); + } catch (error) { + throw error; + } } - async getMenuList() { - const menuListResult = await select(); - const menuList = menuListResult.results && menuListResult.results; - const jsonObj = { - status: 0, - msg: "菜单列表", - data:menuList - }; - return jsonObj; + async getMenuList() { + try { + const menuListResult = await select(); + const menuList = menuListResult.results && menuListResult.results; + return success("授权菜单列表",menuList); + } catch (error) { + throw error; + } } - async getMenuDetail(id){ - const menuResult=await selectOne(id) - console.log('22222222222'); - const menuDetail = menuResult.results && menuResult.results[0]; - const jsonObj = { - status: 0, - msg: "菜单详情", - data:menuDetail - }; - return jsonObj + async getMenuDetail(id) { + try { + const menuResult = await selectOne(id); + const menuDetail = menuResult.results && menuResult.results[0]; + return success("菜单详情",menuDetail); + } catch (error) { + throw error; + } } async addMenu(menu) { - await insert(menu); - const jsonObj = { - status: 0, - msg: "添加菜单成功", - data: null, - }; - return jsonObj; + try { + if(!menu.pid){ + menu.pid=0 + } + await insert(menu); + return success("添加菜单成功"); + } catch (error) { + throw error; + } } async updateMenu(menu) { - await update(menu); - const jsonObj = { - status: 0, - msg: "修改菜单成功", - data: null, - }; - return jsonObj; + try { + await update(menu); + return success("修改菜单成功"); + } catch (error) { + throw error; + } } async deleteMenu(id) { - await remove(id); - const jsonObj = { - status: 0, - msg: "删除菜单成功", - data: null, - }; - return jsonObj; + try { + await remove(id); + return success("删除菜单成功"); + } catch (error) { + throw error; + } } } module.exports = new MenuServices(); diff --git a/services/roleMenuServices.js b/services/roleMenuServices.js index 9cdb4a6df81f1fbfaad2c212089f129a1445c8d8..2034ef8ed649d422c3ed3186bc37803c4e27f46f 100644 --- a/services/roleMenuServices.js +++ b/services/roleMenuServices.js @@ -1,44 +1,40 @@ -const { - selectWhere, - removeWhere, - insert - } = require("../model/roleMenuModel"); +const { success } = require("../utils/jsonResult"); +const { selectWhere, removeWhere, insert } = require("../model/roleMenuModel"); class RoleMenuServices { constructor() {} - async getRoleMenuListByRoleIds(roleIds) { - const roleMenuListResult = await selectWhere(roleIds) - const roleMenuList = roleMenuListResult.results && roleMenuListResult.results; - const jsonObj = { - status: 0, - msg: "分配的菜单列表", - data:roleMenuList - }; - return jsonObj; + async getRoleMenuListByRoleIds(roleIds) { + try { + const roleMenuListResult = await selectWhere(roleIds); + const roleMenuList = + roleMenuListResult.results && roleMenuListResult.results; + return success("分配的菜单列表",roleMenuList); + } catch (error) { + throw error; + } } - async getAssignedUserList(userId) { - const userRoleListResult = await selectWhere('user_id',userId) - const userRoleList = userRoleListResult.results && userRoleListResult.results; - const jsonObj = { - status: 0, - msg: "分配的用户列表", - data:userRoleList - }; - return jsonObj; + async getAssignedUserList(userId) { + try { + const userRoleListResult = await selectWhere("user_id", userId); + const userRoleList = + userRoleListResult.results && userRoleListResult.results; + return success("分配的用户列表",userRoleList); + } catch (error) { + throw error; + } } - async bindMenuForRole(roleId,menuIds) { - await removeWhere(roleId) - const menuIdArr=menuIds.split(',') - menuIdArr.forEach(async (menuId)=>{ - const roleMenu={roleId,menuId} - await insert(roleMenu); - }) - const jsonObj = { - status: 0, - msg: "角色权限分配成功", - data: null, - }; - return jsonObj; + async bindMenuForRole(roleId, menuIds) { + try { + await removeWhere(roleId); + const menuIdArr = menuIds.split(","); + menuIdArr.forEach(async (menuId) => { + const roleMenu = { roleId, menuId }; + await insert(roleMenu); + }); + return success("角色权限分配成功"); + } catch (error) { + throw error; + } } } module.exports = new RoleMenuServices(); diff --git a/services/roleServices.js b/services/roleServices.js index e4a345fe4249961bfde46db12d9becc263ed6779..f281ed9a5433f149e9e163f797231013d06c1003 100644 --- a/services/roleServices.js +++ b/services/roleServices.js @@ -1,103 +1,94 @@ +const { success } = require("../utils/jsonResult"); +const { select, insert, update, remove } = require("../model/roleModel"); const { - select, - insert, - update, - remove - } = require("../model/roleModel"); - const { getRoleMenuListByRoleIds, - bindMenuForRole -} =require('./roleMenuServices') -const { - getMenuListByIds, -} =require('./menuServices') + bindMenuForRole, +} = require("./roleMenuServices"); +const { getMenuListByIds } = require("./menuServices"); const { getUserRoleListByRoleId, bindUserForRole, -} =require('./userRoleServices') +} = require("./userRoleServices"); class RoleServices { constructor() {} - async getPermissionUserListByRoleId(roleId){ - const userRoleReuslt=await getUserRoleListByRoleId(roleId) - const userRoleList=userRoleReuslt.data - const userIds=userRoleList.map(item=>{ - return item.user_id - }) - const jsonObj = { - status: 0, - msg: "分配的用户列表", - data:userIds - }; - return jsonObj; + async getPermissionUserListByRoleId(roleId) { + try { + const userRoleReuslt = await getUserRoleListByRoleId(roleId); + const userRoleList = userRoleReuslt.data; + const userIds = userRoleList.map((item) => { + return item.user_id; + }); + return success("分配的用户列表", userIds); + } catch (error) { + throw error; + } } - async getPermissionMenuListByRoleId(roleId){ - const menuIdArr=[] - const roleMenuReuslt=await getRoleMenuListByRoleIds(roleId) - const roleMenuList=roleMenuReuslt.data - roleMenuList.forEach(element => { - const menuId=element.menu_id - const index=menuIdArr.indexOf(menuId) - if(index==-1){ - menuIdArr.push(menuId) + async getPermissionMenuListByRoleId(roleId) { + try { + const menuIdArr = []; + const roleMenuReuslt = await getRoleMenuListByRoleIds(roleId); + const roleMenuList = roleMenuReuslt.data; + roleMenuList.forEach((element) => { + const menuId = element.menu_id; + const index = menuIdArr.indexOf(menuId); + if (index == -1) { + menuIdArr.push(menuId); + } + }); + if (menuIdArr.length <= 0) { + return success("授权菜单列表", []); } - }); - if(menuIdArr.length<=0){ - return { - status: 0, - msg: "授权菜单列表", - data:[] - }; - } - const menuIds= menuIdArr.join(',') - return await getMenuListByIds(menuIds); + const menuIds = menuIdArr.join(","); + const menuListResult = await getMenuListByIds(menuIds); + const menuList=menuListResult.data + return success("分配的用户列表", menuList); + } catch (error) { + throw error; + } } - async getRoleList() { - const roleListResult = await select(); - const roleList = roleListResult.results && roleListResult.results; - const jsonObj = { - status: 0, - msg: "角色列表", - data:roleList - }; - return jsonObj; + async getRoleList() { + try { + const roleListResult = await select(); + const roleList = roleListResult.results && roleListResult.results; + return success("角色列表", roleList); + } catch (error) { + throw error; + } } async addRole(role) { - await insert(role); - const jsonObj = { - status: 0, - msg: "添加角色成功", - data: null, - }; - return jsonObj; + try { + await insert(role); + return success("添加角色成功"); + } catch (error) { + throw error; + } } async updateRole(role) { - await update(role); - const jsonObj = { - status: 0, - msg: "修改角色成功", - data: null, - }; - return jsonObj; + try { + await update(role); + return success("修改角色成功"); + } catch (error) { + throw error; + } } async deleteRole(id) { - await remove(id); - const jsonObj = { - status: 0, - msg: "删除角色成功", - data: null, - }; - return jsonObj; + try { + await remove(id); + return success("删除角色成功"); + } catch (error) { + throw error; + } } - - async assignPermission(roleId,menuIds) { - const jsonObj =await bindMenuForRole(roleId,menuIds); + + async assignPermission(roleId, menuIds) { + const jsonObj = await bindMenuForRole(roleId, menuIds); return jsonObj; - } + } - async assignUserPermission(roleId,userIds) { - const jsonObj =await bindUserForRole(roleId,userIds); + async assignUserPermission(roleId, userIds) { + const jsonObj = await bindUserForRole(roleId, userIds); return jsonObj; - } + } } module.exports = new RoleServices(); diff --git a/services/userRoleServices.js b/services/userRoleServices.js index 79a00076f47cd77c0b495132edd462b098f8cf37..8c9dc87a43754d2879ca7020d6b762d939053a0a 100644 --- a/services/userRoleServices.js +++ b/services/userRoleServices.js @@ -1,49 +1,50 @@ -const { - selectWhere, - removeWhere, - insert - } = require("../model/userRoleModel"); +const { success } = require("../utils/jsonResult"); +const { selectWhere, removeWhere, insert } = require("../model/userRoleModel"); class UserRoleServices { constructor() {} - async getUserRoleListByRoleId(roleId) { - const userRoleListResult = await selectWhere('role_id',roleId) - const userRoleList = userRoleListResult.results && userRoleListResult.results; - const jsonObj = { - status: 0, - msg: "分配的用户列表", - data:userRoleList - }; - return jsonObj; + async getUserRoleListByRoleId(roleId) { + try { + const userRoleListResult = await selectWhere("role_id", roleId); + const userRoleList = + userRoleListResult.results && userRoleListResult.results; + return success("分配的用户列表", userRoleList); + } catch (error) { + throw error; + } } - async getUserRoleListByUserId(userId) { - const userRoleListResult = await selectWhere('user_id',userId) - const userRoleList = userRoleListResult.results && userRoleListResult.results; - return userRoleList + async getUserRoleListByUserId(userId) { + try { + const userRoleListResult = await selectWhere("user_id", userId); + const userRoleList = + userRoleListResult.results && userRoleListResult.results; + return success("分配的用户列表", userRoleList); + } catch (error) { + throw error; + } } - async getAssignedUserList(userId) { - const userRoleListResult = await selectWhere('user_id',userId) - const userRoleList = userRoleListResult.results && userRoleListResult.results; - const jsonObj = { - status: 0, - msg: "分配的用户列表", - data:userRoleList - }; - return jsonObj; - } - async bindUserForRole(roleId,userIds) { - await removeWhere(roleId) - const userIdArr=userIds.split(',') - userIdArr.forEach(async (userId)=>{ - const userRole={roleId,userId} - await insert(userRole); - }) - const jsonObj = { - status: 0, - msg: "角色用户分配成功", - data: null, - }; - return jsonObj; + // async getAssignedUserList(userId) { + // try { + // const userRoleListResult = await selectWhere("user_id", userId); + // const userRoleList = + // userRoleListResult.results && userRoleListResult.results; + // return success("分配的用户列表", userRoleList); + // } catch (error) { + // throw error; + // } + // } + async bindUserForRole(roleId, userIds) { + try { + await removeWhere(roleId); + const userIdArr = userIds.split(","); + userIdArr.forEach(async (userId) => { + const userRole = { roleId, userId }; + await insert(userRole); + }); + return success("角色用户分配成功"); + } catch (error) { + throw error; + } } } module.exports = new UserRoleServices(); diff --git a/services/userServices.js b/services/userServices.js index d20788415d6f14c3ac5433fa00b2d19528326ddb..d7343dfe4ab0fa0e1c6b3c4693a128fae42307e1 100644 --- a/services/userServices.js +++ b/services/userServices.js @@ -1,5 +1,6 @@ const { quickMd5, getDate } = require("../utils/index"); -const jwt = require("jsonwebtoken") +const { success } = require("../utils/jsonResult"); +const jwt = require("jsonwebtoken"); const { selectOneWhere, selectTotal, @@ -12,255 +13,229 @@ const { } = require("../model/userModel"); const { getUserRoleListByUserId } = require("./userRoleServices"); const { getRoleMenuListByRoleIds } = require("./roleMenuServices"); -const { - getMenuListByIds, - getMenuList, -} = require("./menuServices"); +const { getMenuListByIds, getMenuList } = require("./menuServices"); class UserServices { constructor() {} async getUserPermission(userId) { - const userRoleList = await getUserRoleListByUserId(userId); - const roleIdArr = []; - const menuIdArr = []; - userRoleList.forEach(async (element) => { - const roleId = element.role_id; - roleIdArr.push(roleId); - }); - if (roleIdArr.length <= 0) { - return { - status: 0, - msg: "授权菜单列表", - data: [], - }; - } - const roleIds = roleIdArr.join(","); - const roleMenuResult = await getRoleMenuListByRoleIds(roleIds); - const roleMenuList = roleMenuResult.data; - roleMenuList.forEach((element) => { - const menuId = element.menu_id; - const index = menuIdArr.indexOf(menuId); - if (index == -1) { - menuIdArr.push(menuId); + try { + const userRoleResult = await getUserRoleListByUserId(userId); + const userRoleList= userRoleResult.data + const roleIdArr = []; + const menuIdArr = []; + userRoleList.forEach(async (element) => { + const roleId = element.role_id; + roleIdArr.push(roleId); + }); + if (roleIdArr.length <= 0) { + return success("授权菜单列表"); } - }); - if (menuIdArr.length <= 0) { - return { - status: 0, - msg: "授权菜单列表", - data: [], - }; - } - const menuListResult = await getMenuList(); - const menuList = menuListResult.data; - - const menuIdArrNew = []; - menuIdArr.forEach((menuId) => { - const menu = menuList.find((x) => { - return x.id === menuId; + const roleIds = roleIdArr.join(","); + const roleMenuResult = await getRoleMenuListByRoleIds(roleIds); + const roleMenuList = roleMenuResult.data; + roleMenuList.forEach((element) => { + const menuId = element.menu_id; + const index = menuIdArr.indexOf(menuId); + if (index == -1) { + menuIdArr.push(menuId); + } }); - if(!menu){ - return + if (menuIdArr.length <= 0) { + return success("授权菜单列表"); } - menuIdArrNew.push(menuId); - console.log('menu',menu); - const pid = menu?.pid; - const index = menuIdArrNew.indexOf(pid); - if (pid !== 0 && index === -1) { - menuIdArrNew.push(pid); + const menuListResult = await getMenuList(); + const menuList = menuListResult.data; - const parentMenu = menuList.find((x) => { - return x.id === pid; + const menuIdArrNew = []; + menuIdArr.forEach((menuId) => { + const menu = menuList.find((x) => { + return x.id === menuId; }); - const pid1 = parentMenu.pid; - if(!parentMenu){ - return + if (!menu) { + return; } - const index1 = menuIdArrNew.indexOf(pid1); - if (pid1 !== 0 && index1 === -1) { - menuIdArrNew.push(pid1); + menuIdArrNew.push(menuId); + const pid = menu?.pid; + const index = menuIdArrNew.indexOf(pid); + if (pid !== 0 && index === -1) { + menuIdArrNew.push(pid); + + const parentMenu = menuList.find((x) => { + return x.id === pid; + }); + const pid1 = parentMenu.pid; + if (!parentMenu) { + return; + } + const index1 = menuIdArrNew.indexOf(pid1); + if (pid1 !== 0 && index1 === -1) { + menuIdArrNew.push(pid1); + } } - } - }); - const menuIds = menuIdArrNew.join(","); - return await getMenuListByIds(menuIds); + }); + const menuIds = menuIdArrNew.join(","); + const list = await getMenuListByIds(menuIds); + return list; + } catch (error) { + throw error; + } } async userLogin(loginInfo) { - const { userName, userPassword } = loginInfo; - const fields = ["user_name"]; - const values = [userName]; - const result = await selectOneWhere(fields, values); - const user = result.results && result.results[0]; - const password = user && user.password; - const passwordMd5 = quickMd5(userPassword); - let jsonObj = {}; - if (password !== passwordMd5) { - jsonObj = { - status: 1, - msg: "登录失败,用户名或密码错误", - data: null, - }; - }else{ - const token =jwt.sign({userName},'quick',{expiresIn:1000 * 60 * 5})//过期时间5分 - jsonObj = { - status: 0, - msg: "登录成功", - data: { + try { + const { userName, userPassword } = loginInfo; + const fields = ["user_name"]; + const values = [userName]; + const result = await selectOneWhere(fields, values); + const user = result.results && result.results[0]; + const password = user && user.password; + const passwordMd5 = quickMd5(userPassword); + if (password !== passwordMd5) { + throw error; + } else { + const token = jwt.sign({ id:user.id,userName:user.userName }, "quick", { + expiresIn: 1000 * 60 * 5, + }); //过期时间5分 + return success("登录成功", { token: token, - }, - }; + }); + } + } catch (error) { + throw error; } - return jsonObj; } async getUserPageList(current, size, userName) { - let pageIndex = 1; - let pageSize = 10; - if (current < 1) { - current = 1; - } - if (size < 1) { - size = 10; - } - current = parseInt(current); - size = parseInt(size); - pageIndex = size * (current - 1); - pageSize = size; - const pageListResult = await selectPage(pageIndex, pageSize, userName); - const pageList = pageListResult.results && pageListResult.results; - const totalResult = await selectTotal(userName); - const total = totalResult.results && totalResult.results[0].total; - const jsonObj = { - status: 0, - msg: "订单分页列表", - data: pageList, - page: { + try { + let pageIndex = 1; + let pageSize = 10; + if (current < 1) { + current = 1; + } + if (size < 1) { + size = 10; + } + current = parseInt(current); + size = parseInt(size); + pageIndex = size * (current - 1); + pageSize = size; + const pageListResult = await selectPage(pageIndex, pageSize, userName); + const pageList = pageListResult.results && pageListResult.results; + const totalResult = await selectTotal(userName); + const total = totalResult.results && totalResult.results[0].total; + return success("订单分页列表", pageList, { current, size, total, - }, - }; - return jsonObj; + }); + } catch (error) { + throw error; + } } async getUserList() { - const result = await select() - const user = result.results && result.results; - const jsonObj = { - status: 0, - msg: "用户列表", - data: user, - }; - return jsonObj; + try { + const result = await select(); + const user = result.results && result.results; + return success("用户列表", user); + } catch (error) { + throw error; + } } async getUserDetail(id) { - const fields = ["id"]; - const values = [id]; - const result = await selectOneWhere(fields, values); - const user = result.results && result.results[0]; - const jsonObj = { - status: 0, - msg: "用户详情", - data: user, - }; - return jsonObj; + try { + const fields = ["id"]; + const values = [id]; + const result = await selectOneWhere(fields, values); + const user = result.results && result.results[0]; + return success("用户详情", user); + } catch (error) { + throw error; + } } async getUserInfo(userName) { - const fields = ["user_name"]; - const values = [userName]; - const result = await selectOneWhere(fields, values); - const user = result.results && result.results[0]; - const jsonObj = { - status: 0, - msg: "登录用户信息", - data: user, - }; - return jsonObj; + try { + const fields = ["user_name"]; + const values = [userName]; + const result = await selectOneWhere(fields, values); + const user = result.results && result.results[0]; + return success("登录用户信息", user); + } catch (error) { + throw error; + } } async addUser(user) { - user.password = quickMd5(quickMd5("123456")); //初始密码123456,密码两次加密,代表前端一次,后端一次 - user.create_time = getDate(); - await insert(user); - const jsonObj = { - status: 0, - msg: "添加用户成功", - data: null, - }; - return jsonObj; + try { + user.password = quickMd5(quickMd5("123456")); //初始密码123456,密码两次加密,代表前端一次,后端一次 + user.create_time = getDate(); + await insert(user); + return success("添加用户成功"); + } catch (error) { + throw error; + } } async updateUser(user) { - await update(user); - const jsonObj = { - status: 0, - msg: "修改用户成功", - data: null, - }; - return jsonObj; + try { + await update(user); + return success("修改用户成功"); + } catch (error) { + throw error; + } } async removeUser(id) { - await remove(id); - const jsonObj = { - status: 0, - msg: "删除用户成功", - data: null, - }; - return jsonObj; + try { + await remove(id); + return success("删除用户成功"); + } catch (error) { + throw error; + } } async batchRemoveUser(ids) { - await remove(ids); - const jsonObj = { - status: 0, - msg: "删除用户成功", - data: null, - }; - return jsonObj; + try { + await remove(ids); + return success("删除用户成功"); + } catch (error) { + throw error; + } } async updateUserPassword(user) { - let password = quickMd5(user.newPassword); - const fields = ["password"]; - const values = [password]; - await updateField(user.id, fields, values); - const jsonObj = { - status: 0, - msg: "修改用户密码成功", - data: null, - }; - return jsonObj; + try { + let password = quickMd5(user.newPassword); + const fields = ["password"]; + const values = [password]; + await updateField(user.id, fields, values); + return success("修改用户密码成功"); + } catch (error) { + throw error; + } } async resetUserPassword(id) { - let password = quickMd5(quickMd5("123456")); //初始密码123456,密码两次加密,代表前端一次,后端一次 - const fields = ["password"]; - const values = [password]; - await updateField(id, fields, values); - const jsonObj = { - status: 0, - msg: "重置用户密码成功", - data: null, - }; - return jsonObj; + try { + let password = quickMd5(quickMd5("123456")); //初始密码123456,密码两次加密,代表前端一次,后端一次 + const fields = ["password"]; + const values = [password]; + await updateField(id, fields, values); + return success("重置用户密码成功"); + } catch (error) { + throw error; + } } async enabledUser(id) { - const fields = ["enabled"]; - const values = [0]; - await updateField(id, fields, values); - const jsonObj = { - status: 0, - msg: "启用用户成功", - data: null, - }; - return jsonObj; + try { + const fields = ["enabled"]; + const values = [0]; + await updateField(id, fields, values); + return success("启用用户成功"); + } catch (error) { + throw error; + } } async disableUser(id) { - if (!id) { - return null; + try { + const fields = ["enabled"]; + const values = [1]; + await updateField(id, fields, values); + return success("禁用用户成功"); + } catch (error) { + throw error; } - const fields = ["enabled"]; - const values = [1]; - await updateField(id, fields, values); - const jsonObj = { - status: 0, - msg: "禁用用户成功", - data: null, - }; - return jsonObj; } } module.exports = new UserServices(); diff --git a/utils/index.js b/utils/index.js index 2c0925ec986a9708654295e6915b0729eb855a8b..3754f59111a4f43df5eaef8b76da3861a410f195 100644 --- a/utils/index.js +++ b/utils/index.js @@ -1,6 +1,6 @@ const os = require("os"); const moment = require("moment"); -const md5 = require("js-md5") +const md5 = require("js-md5"); const orderNumber = () => { const now = new Date(); @@ -24,6 +24,14 @@ const getDate = (date = new Date(), format = "YYYY-MM-DD HH:mm:ss") => { return moment(date).format(format); }; +const formatDate = (timeStamp, format = "YYYY-MM-DD HH:mm:ss") => { + //timeStamp=1659542400 转换后 2022-08-04 00:00:00 + return moment(timeStamp * 1000).format(format); //s +}; + +const getTimeStamp = () => { + return moment().format("x"); +}; const getIPAddress = () => { const interfaces = os.networkInterfaces(); for (const devName in interfaces) { @@ -41,12 +49,14 @@ const getIPAddress = () => { } }; const quickMd5 = (str) => { - return md5(str) -} + return md5(str); +}; module.exports = { orderNumber, getDate, + formatDate, + getTimeStamp, getIPAddress, - quickMd5 + quickMd5, }; diff --git a/utils/jsonResult.js b/utils/jsonResult.js new file mode 100644 index 0000000000000000000000000000000000000000..6c3a46e957e5420137c49edf4f30c65270abecc1 --- /dev/null +++ b/utils/jsonResult.js @@ -0,0 +1,30 @@ +module.exports = { + success: (msg, data = null, page = null) => { + const obj = { + status: 0, + msg, + data, + }; + if (page) { + obj["page"] = page; + } + return obj; + }, + fail: (msg) => { + const obj = { + status: 1, + msg, + data: null, + }; + return obj; + }, + exception: (msg,err) => { + const obj = { + status: 1, + msg, + err, + data: null, + }; + return obj; + }, +}; diff --git a/yarn.lock b/yarn.lock index 2287f765ad01935de5fa169f007977358c5a998e..ca150f9822b1cc4a0eb756283611f21172c45b46 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,105 +2,86 @@ # yarn lockfile v1 -"@babel/parser@^7.16.4": - "integrity" "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==" - "resolved" "https://registry.npmmirror.com/@babel/parser/-/parser-7.18.5.tgz" - "version" "7.18.5" - -"@vue/compiler-core@3.2.37": - "integrity" "sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==" - "resolved" "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.37.tgz" - "version" "3.2.37" - dependencies: - "@babel/parser" "^7.16.4" - "@vue/shared" "3.2.37" - "estree-walker" "^2.0.2" - "source-map" "^0.6.1" - -"@vue/compiler-dom@3.2.37": - "integrity" "sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==" - "resolved" "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz" - "version" "3.2.37" - dependencies: - "@vue/compiler-core" "3.2.37" - "@vue/shared" "3.2.37" - -"@vue/compiler-sfc@3.2.37": - "integrity" "sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==" - "resolved" "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz" - "version" "3.2.37" - dependencies: - "@babel/parser" "^7.16.4" - "@vue/compiler-core" "3.2.37" - "@vue/compiler-dom" "3.2.37" - "@vue/compiler-ssr" "3.2.37" - "@vue/reactivity-transform" "3.2.37" - "@vue/shared" "3.2.37" - "estree-walker" "^2.0.2" - "magic-string" "^0.25.7" - "postcss" "^8.1.10" - "source-map" "^0.6.1" - -"@vue/compiler-ssr@3.2.37": - "integrity" "sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==" - "resolved" "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz" - "version" "3.2.37" - dependencies: - "@vue/compiler-dom" "3.2.37" - "@vue/shared" "3.2.37" - -"@vue/devtools-api@^6.0.0", "@vue/devtools-api@^6.0.0-beta.11": - "integrity" "sha512-IiA0SvDrJEgXvVxjNkHPFfDx6SXw0b/TUkqMcDZWNg9fnCAHbTpoo59YfJ9QLFkwa3raau5vSlRVzMSLDnfdtQ==" - "resolved" "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.1.4.tgz" - "version" "6.1.4" - -"@vue/reactivity-transform@3.2.37": - "integrity" "sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==" - "resolved" "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz" - "version" "3.2.37" - dependencies: - "@babel/parser" "^7.16.4" - "@vue/compiler-core" "3.2.37" - "@vue/shared" "3.2.37" - "estree-walker" "^2.0.2" - "magic-string" "^0.25.7" - -"@vue/reactivity@3.2.37": - "integrity" "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==" - "resolved" "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.37.tgz" - "version" "3.2.37" - dependencies: - "@vue/shared" "3.2.37" - -"@vue/runtime-core@3.2.37": - "integrity" "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==" - "resolved" "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.37.tgz" - "version" "3.2.37" - dependencies: - "@vue/reactivity" "3.2.37" - "@vue/shared" "3.2.37" - -"@vue/runtime-dom@3.2.37": - "integrity" "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==" - "resolved" "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz" - "version" "3.2.37" - dependencies: - "@vue/runtime-core" "3.2.37" - "@vue/shared" "3.2.37" - "csstype" "^2.6.8" - -"@vue/server-renderer@3.2.37": - "integrity" "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==" - "resolved" "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.37.tgz" - "version" "3.2.37" - dependencies: - "@vue/compiler-ssr" "3.2.37" - "@vue/shared" "3.2.37" - -"@vue/shared@3.2.37": - "integrity" "sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==" - "resolved" "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.37.tgz" - "version" "3.2.37" +"@types/body-parser@*": + "integrity" "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==" + "resolved" "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz" + "version" "1.19.2" + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/connect@*": + "integrity" "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==" + "resolved" "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz" + "version" "3.4.35" + dependencies: + "@types/node" "*" + +"@types/express-serve-static-core@^4.17.18": + "integrity" "sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ==" + "resolved" "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz" + "version" "4.17.30" + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express-unless@^0.5.3": + "integrity" "sha512-TyPLQaF6w8UlWdv4gj8i46B+INBVzURBNRahCozCSXfsK2VTlL1wNyTlMKw817VHygBtlcl5jfnPadlydr06Yw==" + "resolved" "https://registry.npmjs.org/@types/express-unless/-/express-unless-0.5.3.tgz" + "version" "0.5.3" + dependencies: + "@types/express" "*" + +"@types/express@*": + "integrity" "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==" + "resolved" "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz" + "version" "4.17.13" + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.18" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/jsonwebtoken@^8.5.8": + "integrity" "sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A==" + "resolved" "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.8.tgz" + "version" "8.5.8" + dependencies: + "@types/node" "*" + +"@types/mime@*": + "integrity" "sha512-fccbsHKqFDXClBZTDLA43zl0+TbxyIwyzIzwwhvoJvhNjOErCdeX2xJbURimv2EbSVUGav001PaCJg4mZxMl4w==" + "resolved" "https://registry.npmjs.org/@types/mime/-/mime-3.0.0.tgz" + "version" "3.0.0" + +"@types/node@*": + "integrity" "sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-18.6.3.tgz" + "version" "18.6.3" + +"@types/qs@*": + "integrity" "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + "resolved" "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" + "version" "6.9.7" + +"@types/range-parser@*": + "integrity" "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + "resolved" "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz" + "version" "1.2.4" + +"@types/serve-static@*": + "integrity" "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==" + "resolved" "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz" + "version" "1.15.0" + dependencies: + "@types/mime" "*" + "@types/node" "*" + +"abbrev@1": + "integrity" "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "resolved" "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + "version" "1.1.1" "accepts@~1.3.8": "integrity" "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==" @@ -110,25 +91,33 @@ "mime-types" "~2.1.34" "negotiator" "0.6.3" +"anymatch@~3.1.2": + "integrity" "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==" + "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "normalize-path" "^3.0.0" + "picomatch" "^2.0.4" + "array-flatten@1.1.1": "integrity" "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" "resolved" "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz" "version" "1.1.1" +"balanced-match@^1.0.0": + "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + "version" "1.0.2" + "bignumber.js@9.0.0": "integrity" "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==" "resolved" "https://registry.npmmirror.com/bignumber.js/-/bignumber.js-9.0.0.tgz" "version" "9.0.0" -"birdy-ui-test@^0.0.5": - "integrity" "sha512-VuCeh/MMfb3KtO/tziT2hPSzi5Jzkpd8eaoF+9Xs6lUeFeo2wFYalAl/jfFlp9Yrg+yaR7RvyjQwLlGWPar9iw==" - "resolved" "https://registry.npmmirror.com/birdy-ui-test/-/birdy-ui-test-0.0.5.tgz" - "version" "0.0.5" - dependencies: - "core-js" "^3.6.5" - "vue" "^3.0.0" - "vue-router" "^4.0.0-0" - "vuex" "^4.0.0-0" +"binary-extensions@^2.0.0": + "integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + "version" "2.2.0" "body-parser@1.20.0": "integrity" "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==" @@ -148,6 +137,26 @@ "type-is" "~1.6.18" "unpipe" "1.0.0" +"brace-expansion@^1.1.7": + "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + "version" "1.1.11" + dependencies: + "balanced-match" "^1.0.0" + "concat-map" "0.0.1" + +"braces@~3.0.2": + "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" + "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "fill-range" "^7.0.1" + +"buffer-equal-constant-time@1.0.1": + "integrity" "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + "resolved" "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz" + "version" "1.0.1" + "bytes@3.1.2": "integrity" "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" "resolved" "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz" @@ -161,6 +170,26 @@ "function-bind" "^1.1.1" "get-intrinsic" "^1.0.2" +"chokidar@^3.5.2": + "integrity" "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==" + "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" + "version" "3.5.3" + 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" + optionalDependencies: + "fsevents" "~2.3.2" + +"concat-map@0.0.1": + "integrity" "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "version" "0.0.1" + "content-disposition@0.5.4": "integrity" "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==" "resolved" "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz" @@ -183,11 +212,6 @@ "resolved" "https://registry.npmmirror.com/cookie/-/cookie-0.5.0.tgz" "version" "0.5.0" -"core-js@^3.6.5": - "integrity" "sha512-ELJOWxNrJfOH/WK4VJ3Qd+fOqZuOuDNDJz0xG6Bt4mGg2eO/UT9CljCrbqDGovjLKUrGajEEBcoTOc0w+yBYeQ==" - "resolved" "https://registry.npmmirror.com/core-js/-/core-js-3.23.2.tgz" - "version" "3.23.2" - "core-util-is@~1.0.0": "integrity" "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" "resolved" "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz" @@ -201,10 +225,24 @@ "object-assign" "^4" "vary" "^1" -"csstype@^2.6.8": - "integrity" "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==" - "resolved" "https://registry.npmmirror.com/csstype/-/csstype-2.6.20.tgz" - "version" "2.6.20" +"date-format@^4.0.13": + "integrity" "sha512-bnYCwf8Emc3pTD8pXnre+wfnjGtfi5ncMDKy7+cWZXbmRAsdWkOQHrfC1yz/KiwP5thDp2kCHWYWKBX4HP1hoQ==" + "resolved" "https://registry.npmjs.org/date-format/-/date-format-4.0.13.tgz" + "version" "4.0.13" + +"debug@^3.2.7": + "integrity" "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + "version" "3.2.7" + dependencies: + "ms" "^2.1.1" + +"debug@^4.3.4": + "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + "version" "4.3.4" + dependencies: + "ms" "2.1.2" "debug@2.6.9": "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" @@ -223,6 +261,13 @@ "resolved" "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz" "version" "1.2.0" +"ecdsa-sig-formatter@1.0.11": + "integrity" "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==" + "resolved" "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz" + "version" "1.0.11" + dependencies: + "safe-buffer" "^5.0.1" + "ee-first@1.1.1": "integrity" "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" "resolved" "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz" @@ -238,16 +283,26 @@ "resolved" "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz" "version" "1.0.3" -"estree-walker@^2.0.2": - "integrity" "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - "resolved" "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz" - "version" "2.0.2" - "etag@~1.8.1": "integrity" "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" "resolved" "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz" "version" "1.8.1" +"express-jwt@^7.7.5": + "integrity" "sha512-2CMse20Ex2vbqvsuGAcai7TgQuvmFa1n39PwKLaEszTGhuRzckBERII4PwdZIibtwfYUGSNVQzPpf+QcGo2yHw==" + "resolved" "https://registry.npmjs.org/express-jwt/-/express-jwt-7.7.5.tgz" + "version" "7.7.5" + dependencies: + "@types/express-unless" "^0.5.3" + "@types/jsonwebtoken" "^8.5.8" + "express-unless" "^2.0.2" + "jsonwebtoken" "^8.5.1" + +"express-unless@^2.0.2": + "integrity" "sha512-IrDYOa3tgT4U67ILXCfrAEOggYSIr8DXgm7oiH7ZaetxlS0MYXtPOUQ5No2HLOFE2Z5x9euVoHGdc5QNrZ5SWw==" + "resolved" "https://registry.npmjs.org/express-unless/-/express-unless-2.1.1.tgz" + "version" "2.1.1" + "express@^4.18.1": "integrity" "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==" "resolved" "https://registry.npmmirror.com/express/-/express-4.18.1.tgz" @@ -285,6 +340,13 @@ "utils-merge" "1.0.1" "vary" "~1.1.2" +"fill-range@^7.0.1": + "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" + "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "to-regex-range" "^5.0.1" + "finalhandler@1.2.0": "integrity" "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==" "resolved" "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.2.0.tgz" @@ -298,6 +360,11 @@ "statuses" "2.0.1" "unpipe" "~1.0.0" +"flatted@^3.2.6": + "integrity" "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==" + "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz" + "version" "3.2.6" + "forwarded@0.2.0": "integrity" "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" "resolved" "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz" @@ -308,6 +375,15 @@ "resolved" "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz" "version" "0.5.2" +"fs-extra@^8.1.0": + "integrity" "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" + "version" "8.1.0" + dependencies: + "graceful-fs" "^4.2.0" + "jsonfile" "^4.0.0" + "universalify" "^0.1.0" + "function-bind@^1.1.1": "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" "resolved" "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz" @@ -322,6 +398,23 @@ "has" "^1.0.3" "has-symbols" "^1.0.1" +"glob-parent@~5.1.2": + "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "is-glob" "^4.0.1" + +"graceful-fs@^4.1.6", "graceful-fs@^4.2.0": + "integrity" "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + "version" "4.2.10" + +"has-flag@^3.0.0": + "integrity" "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + "version" "3.0.0" + "has-symbols@^1.0.1": "integrity" "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" "resolved" "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz" @@ -352,6 +445,11 @@ dependencies: "safer-buffer" ">= 2.1.2 < 3" +"ignore-by-default@^1.0.1": + "integrity" "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" + "resolved" "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" + "version" "1.0.1" + "inherits@~2.0.3", "inherits@2.0.4": "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" "resolved" "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz" @@ -362,17 +460,125 @@ "resolved" "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz" "version" "1.9.1" +"is-binary-path@~2.1.0": + "integrity" "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==" + "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "binary-extensions" "^2.0.0" + +"is-extglob@^2.1.1": + "integrity" "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + "version" "2.1.1" + +"is-glob@^4.0.1", "is-glob@~4.0.1": + "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "is-extglob" "^2.1.1" + +"is-number@^7.0.0": + "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + "version" "7.0.0" + "isarray@~1.0.0": "integrity" "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" "resolved" "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz" "version" "1.0.0" -"magic-string@^0.25.7": - "integrity" "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==" - "resolved" "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz" - "version" "0.25.9" +"js-md5@^0.7.3": + "integrity" "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==" + "resolved" "https://registry.npmjs.org/js-md5/-/js-md5-0.7.3.tgz" + "version" "0.7.3" + +"jsonfile@^4.0.0": + "integrity" "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==" + "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" + "version" "4.0.0" + optionalDependencies: + "graceful-fs" "^4.1.6" + +"jsonwebtoken@^8.5.1": + "integrity" "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==" + "resolved" "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz" + "version" "8.5.1" + dependencies: + "jws" "^3.2.2" + "lodash.includes" "^4.3.0" + "lodash.isboolean" "^3.0.3" + "lodash.isinteger" "^4.0.4" + "lodash.isnumber" "^3.0.3" + "lodash.isplainobject" "^4.0.6" + "lodash.isstring" "^4.0.1" + "lodash.once" "^4.0.0" + "ms" "^2.1.1" + "semver" "^5.6.0" + +"jwa@^1.4.1": + "integrity" "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==" + "resolved" "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz" + "version" "1.4.1" + dependencies: + "buffer-equal-constant-time" "1.0.1" + "ecdsa-sig-formatter" "1.0.11" + "safe-buffer" "^5.0.1" + +"jws@^3.2.2": + "integrity" "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==" + "resolved" "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz" + "version" "3.2.2" + dependencies: + "jwa" "^1.4.1" + "safe-buffer" "^5.0.1" + +"lodash.includes@^4.3.0": + "integrity" "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + "resolved" "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz" + "version" "4.3.0" + +"lodash.isboolean@^3.0.3": + "integrity" "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + "resolved" "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" + "version" "3.0.3" + +"lodash.isinteger@^4.0.4": + "integrity" "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + "resolved" "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz" + "version" "4.0.4" + +"lodash.isnumber@^3.0.3": + "integrity" "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + "resolved" "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz" + "version" "3.0.3" + +"lodash.isplainobject@^4.0.6": + "integrity" "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + "resolved" "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" + "version" "4.0.6" + +"lodash.isstring@^4.0.1": + "integrity" "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + "resolved" "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz" + "version" "4.0.1" + +"lodash.once@^4.0.0": + "integrity" "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + "resolved" "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz" + "version" "4.1.1" + +"log4js@^6.6.1": + "integrity" "sha512-J8VYFH2UQq/xucdNu71io4Fo+purYYudyErgBbswWKO0MC6QVOERRomt5su/z6d3RJSmLyTGmXl3Q/XjKCf+/A==" + "resolved" "https://registry.npmjs.org/log4js/-/log4js-6.6.1.tgz" + "version" "6.6.1" dependencies: - "sourcemap-codec" "^1.4.8" + "date-format" "^4.0.13" + "debug" "^4.3.4" + "flatted" "^3.2.6" + "rfdc" "^1.3.0" + "streamroller" "^3.1.2" "media-typer@0.3.0": "integrity" "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" @@ -406,11 +612,33 @@ "resolved" "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz" "version" "1.6.0" +"minimatch@^3.0.4": + "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "brace-expansion" "^1.1.7" + +"moment@^2.29.4": + "integrity" "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + "resolved" "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz" + "version" "2.29.4" + +"ms@^2.1.1": + "integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + "version" "2.1.3" + "ms@2.0.0": "integrity" "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" "resolved" "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz" "version" "2.0.0" +"ms@2.1.2": + "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + "version" "2.1.2" + "ms@2.1.3": "integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" "resolved" "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz" @@ -426,16 +654,39 @@ "safe-buffer" "5.1.2" "sqlstring" "2.3.1" -"nanoid@^3.3.4": - "integrity" "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" - "resolved" "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz" - "version" "3.3.4" - "negotiator@0.6.3": "integrity" "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" "resolved" "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz" "version" "0.6.3" +"nodemon@^2.0.19": + "integrity" "sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==" + "resolved" "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz" + "version" "2.0.19" + dependencies: + "chokidar" "^3.5.2" + "debug" "^3.2.7" + "ignore-by-default" "^1.0.1" + "minimatch" "^3.0.4" + "pstree.remy" "^1.1.8" + "semver" "^5.7.1" + "simple-update-notifier" "^1.0.7" + "supports-color" "^5.5.0" + "touch" "^3.1.0" + "undefsafe" "^2.0.5" + +"nopt@~1.0.10": + "integrity" "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==" + "resolved" "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz" + "version" "1.0.10" + dependencies: + "abbrev" "1" + +"normalize-path@^3.0.0", "normalize-path@~3.0.0": + "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + "version" "3.0.0" + "object-assign@^4": "integrity" "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" "resolved" "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz" @@ -463,19 +714,10 @@ "resolved" "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz" "version" "0.1.7" -"picocolors@^1.0.0": - "integrity" "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - "resolved" "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz" - "version" "1.0.0" - -"postcss@^8.1.10": - "integrity" "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==" - "resolved" "https://registry.npmmirror.com/postcss/-/postcss-8.4.14.tgz" - "version" "8.4.14" - dependencies: - "nanoid" "^3.3.4" - "picocolors" "^1.0.0" - "source-map-js" "^1.0.2" +"picomatch@^2.0.4", "picomatch@^2.2.1": + "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + "version" "2.3.1" "process-nextick-args@~2.0.0": "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" @@ -490,6 +732,11 @@ "forwarded" "0.2.0" "ipaddr.js" "1.9.1" +"pstree.remy@^1.1.8": + "integrity" "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + "resolved" "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz" + "version" "1.1.8" + "qs@6.10.3": "integrity" "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==" "resolved" "https://registry.npmmirror.com/qs/-/qs-6.10.3.tgz" @@ -525,7 +772,19 @@ "string_decoder" "~1.1.1" "util-deprecate" "~1.0.1" -"safe-buffer@~5.1.0", "safe-buffer@~5.1.1", "safe-buffer@5.1.2": +"readdirp@~3.6.0": + "integrity" "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==" + "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "picomatch" "^2.2.1" + +"rfdc@^1.3.0": + "integrity" "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + "resolved" "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" + "version" "1.3.0" + +"safe-buffer@^5.0.1", "safe-buffer@~5.1.0", "safe-buffer@~5.1.1", "safe-buffer@5.1.2": "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" "resolved" "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz" "version" "5.1.2" @@ -540,6 +799,16 @@ "resolved" "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz" "version" "2.1.2" +"semver@^5.6.0", "semver@^5.7.1": + "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + "version" "5.7.1" + +"semver@~7.0.0": + "integrity" "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" + "version" "7.0.0" + "send@0.18.0": "integrity" "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==" "resolved" "https://registry.npmmirror.com/send/-/send-0.18.0.tgz" @@ -583,20 +852,12 @@ "get-intrinsic" "^1.0.2" "object-inspect" "^1.9.0" -"source-map-js@^1.0.2": - "integrity" "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - "resolved" "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz" - "version" "1.0.2" - -"source-map@^0.6.1": - "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - "resolved" "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz" - "version" "0.6.1" - -"sourcemap-codec@^1.4.8": - "integrity" "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" - "resolved" "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" - "version" "1.4.8" +"simple-update-notifier@^1.0.7": + "integrity" "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==" + "resolved" "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz" + "version" "1.0.7" + dependencies: + "semver" "~7.0.0" "sqlstring@2.3.1": "integrity" "sha512-ooAzh/7dxIG5+uDik1z/Rd1vli0+38izZhGzSa34FwR7IbelPWCCKSNIl8jlL/F7ERvy8CB2jNeM1E9i9mXMAQ==" @@ -608,6 +869,15 @@ "resolved" "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz" "version" "2.0.1" +"streamroller@^3.1.2": + "integrity" "sha512-wZswqzbgGGsXYIrBYhOE0yP+nQ6XRk7xDcYwuQAGTYXdyAUmvgVFE0YU1g5pvQT0m7GBaQfYcSnlHbapuK0H0A==" + "resolved" "https://registry.npmjs.org/streamroller/-/streamroller-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "date-format" "^4.0.13" + "debug" "^4.3.4" + "fs-extra" "^8.1.0" + "string_decoder@~1.1.1": "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" "resolved" "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz" @@ -615,11 +885,32 @@ dependencies: "safe-buffer" "~5.1.0" +"supports-color@^5.5.0": + "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + "version" "5.5.0" + dependencies: + "has-flag" "^3.0.0" + +"to-regex-range@^5.0.1": + "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" + "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "is-number" "^7.0.0" + "toidentifier@1.0.1": "integrity" "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" "resolved" "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz" "version" "1.0.1" +"touch@^3.1.0": + "integrity" "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==" + "resolved" "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "nopt" "~1.0.10" + "type-is@~1.6.18": "integrity" "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==" "resolved" "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz" @@ -628,6 +919,16 @@ "media-typer" "0.3.0" "mime-types" "~2.1.24" +"undefsafe@^2.0.5": + "integrity" "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" + "resolved" "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz" + "version" "2.0.5" + +"universalify@^0.1.0": + "integrity" "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "resolved" "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" + "version" "0.1.2" + "unpipe@~1.0.0", "unpipe@1.0.0": "integrity" "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" "resolved" "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz" @@ -647,28 +948,3 @@ "integrity" "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" "resolved" "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz" "version" "1.1.2" - -"vue-router@^4.0.0-0": - "integrity" "sha512-JcO7cb8QJLBWE+DfxGUL3xUDOae/8nhM1KVdnudadTAORbuxIC/xAydC5Zr/VLHUDQi1ppuTF5/rjBGzgzrJNA==" - "resolved" "https://registry.npmmirror.com/vue-router/-/vue-router-4.0.16.tgz" - "version" "4.0.16" - dependencies: - "@vue/devtools-api" "^6.0.0" - -"vue@^3.0.0", "vue@^3.0.2", "vue@^3.2.0", "vue@3.2.37": - "integrity" "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==" - "resolved" "https://registry.npmmirror.com/vue/-/vue-3.2.37.tgz" - "version" "3.2.37" - dependencies: - "@vue/compiler-dom" "3.2.37" - "@vue/compiler-sfc" "3.2.37" - "@vue/runtime-dom" "3.2.37" - "@vue/server-renderer" "3.2.37" - "@vue/shared" "3.2.37" - -"vuex@^4.0.0-0": - "integrity" "sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==" - "resolved" "https://registry.npmmirror.com/vuex/-/vuex-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "@vue/devtools-api" "^6.0.0-beta.11"