diff --git a/.eslintrc.js b/.eslintrc.js index ab6f22f..9f2e6a3 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -17,10 +17,12 @@ module.exports = { "babel/camelcase": 1, "babel/no-invalid-this": 1, "babel/object-curly-spacing": 1, - "babel/quotes": 1, + "babel/quotes": 0, "babel/semi": 1, "babel/no-unused-expressions": 1, - "babel/valid-typeof": 1 + "babel/valid-typeof": 1, + "@typescript-eslint/explicit-function-return-type":0, + "@typescript-eslint/no-use-before-define":0 } }; diff --git a/build/icons/1024x1024.png b/build/icons/1024x1024.png index 0ac62ba..a941a11 100644 Binary files a/build/icons/1024x1024.png and b/build/icons/1024x1024.png differ diff --git a/build/icons/128x128.png b/build/icons/128x128.png index 0fe854b..7bb5356 100644 Binary files a/build/icons/128x128.png and b/build/icons/128x128.png differ diff --git a/build/icons/16x16.png b/build/icons/16x16.png index 04d9e40..76d0136 100644 Binary files a/build/icons/16x16.png and b/build/icons/16x16.png differ diff --git a/build/icons/24x24.png b/build/icons/24x24.png index 9f7c592..d452690 100644 Binary files a/build/icons/24x24.png and b/build/icons/24x24.png differ diff --git a/build/icons/256x256.png b/build/icons/256x256.png index c7f2b22..4760b74 100644 Binary files a/build/icons/256x256.png and b/build/icons/256x256.png differ diff --git a/build/icons/32x32.png b/build/icons/32x32.png index f3fc56c..1424276 100644 Binary files a/build/icons/32x32.png and b/build/icons/32x32.png differ diff --git a/build/icons/48x48.png b/build/icons/48x48.png index 03071b6..2005f07 100644 Binary files a/build/icons/48x48.png and b/build/icons/48x48.png differ diff --git a/build/icons/512x512.png b/build/icons/512x512.png index 7285a3c..510bc08 100644 Binary files a/build/icons/512x512.png and b/build/icons/512x512.png differ diff --git a/build/icons/64x64.png b/build/icons/64x64.png index eaed9bf..a6fa4aa 100644 Binary files a/build/icons/64x64.png and b/build/icons/64x64.png differ diff --git a/build/icons/icon.icns b/build/icons/icon.icns index 9eebe3c..0706a63 100644 Binary files a/build/icons/icon.icns and b/build/icons/icon.icns differ diff --git a/build/icons/icon.ico b/build/icons/icon.ico index c8a3931..6bf74ee 100644 Binary files a/build/icons/icon.ico and b/build/icons/icon.ico differ diff --git a/package-lock.json b/package-lock.json index a19f86f..8846a60 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { - "name": "mockup-server", - "version": "0.2.4", + "name": "interact-server", + "version": "0.2.7", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -2636,6 +2636,43 @@ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", "dev": true }, + "axios": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", + "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", + "requires": { + "follow-redirects": "1.5.10", + "is-buffer": "^2.0.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "requires": { + "debug": "=3.1.0" + } + }, + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", @@ -9455,6 +9492,11 @@ } } }, + "moment": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -14494,6 +14536,11 @@ "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.10.tgz", "integrity": "sha512-ImThpeNU9HbdZL3utgMCq0oiMzAkt1mcgy3/E6zWC/G6AaQoeuFdsl9nDhTDU3X1R6FK7nsIUuRACVcjI+A2GQ==" }, + "vue-axios": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/vue-axios/-/vue-axios-2.1.5.tgz", + "integrity": "sha512-th5xVbInVoyIoe+qY+9GCflEVezxAvztD4xpFF39SRQYqpoKD2qkmX8yv08jJG9a2SgNOCjirjJGSwg/wTrbmA==" + }, "vue-class-component": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/vue-class-component/-/vue-class-component-7.1.0.tgz", diff --git a/package.json b/package.json index c739637..90a4c99 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mockup-server", - "version": "0.2.6", + "version": "1.0.0", "private": true, "scripts": { "build": "vue-cli-service build", @@ -15,14 +15,17 @@ "@types/cors": "^2.8.6", "@types/express": "^4.17.2", "@types/node": "^12.12.6", + "axios": "^0.19.0", "body-parser": "^1.19.0", "core-js": "^2.6.10", "cors": "^2.8.5", "eslint-plugin-babel": "^5.3.0", "express": "^4.17.1", + "moment": "^2.24.0", "style-loader": "^1.0.0", "ts-loader": "^6.2.1", "vue": "^2.6.10", + "vue-axios": "^2.1.5", "vue-class-component": "^7.0.2", "vue-property-decorator": "^8.3.0", "vue-router": "^3.0.3", @@ -71,4 +74,4 @@ "last 2 versions" ], "main": "background.js" -} \ No newline at end of file +} diff --git a/public/favicon.ico b/public/favicon.ico deleted file mode 100644 index df36fcf..0000000 Binary files a/public/favicon.ico and /dev/null differ diff --git a/public/icon.png b/public/icon.png index 8795111..48484ab 100644 Binary files a/public/icon.png and b/public/icon.png differ diff --git a/public/index.html b/public/index.html index 71d4fd8..79d79c2 100644 --- a/public/index.html +++ b/public/index.html @@ -1,6 +1,6 @@ - + @@ -8,8 +8,12 @@ mock server - - + + + + diff --git a/src/App.vue b/src/App.vue index dddf391..591ed07 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,24 +1,78 @@ +   + + diff --git a/src/assets/icons/mac/mockup-icon.icns b/src/assets/icons/mac/mockup-icon.icns deleted file mode 100644 index 4d60949..0000000 Binary files a/src/assets/icons/mac/mockup-icon.icns and /dev/null differ diff --git a/src/assets/icons/win/mockup-icon.ico b/src/assets/icons/win/mockup-icon.ico deleted file mode 100644 index e63dca9..0000000 Binary files a/src/assets/icons/win/mockup-icon.ico and /dev/null differ diff --git a/src/assets/logo.png b/src/assets/logo.png deleted file mode 100644 index f3d2503..0000000 Binary files a/src/assets/logo.png and /dev/null differ diff --git a/src/assets/logo.svg b/src/assets/logo.svg deleted file mode 100644 index 145b6d1..0000000 --- a/src/assets/logo.svg +++ /dev/null @@ -1 +0,0 @@ -Artboard 46 diff --git a/src/background.ts b/src/background.ts index 3ceed32..8577da3 100644 --- a/src/background.ts +++ b/src/background.ts @@ -15,15 +15,19 @@ protocol.registerSchemesAsPrivileged([ ]); function createWindow(): void { - let appWidth = 570; + let appWidth = 870; if (process.platform === 'darwin') { - appWidth = 540; + appWidth = 870; } // Create the browser window. win = new BrowserWindow({ resizable: true, width: appWidth, - height: 600, + titleBarStyle: 'hidden', + maximizable:false, + transparent: isDevelopment? false: true, + frame: isDevelopment? true: false, + height: 710, webPreferences: { nodeIntegration: true, }, diff --git a/src/components/ApiList.vue b/src/components/ApiList.vue index 70287d4..75195bd 100644 --- a/src/components/ApiList.vue +++ b/src/components/ApiList.vue @@ -13,9 +13,9 @@ + + diff --git a/src/const/mockConst.ts b/src/const/mockConst.ts index ed44e47..98236c7 100644 --- a/src/const/mockConst.ts +++ b/src/const/mockConst.ts @@ -1,3 +1,4 @@ +export const VERSION = '1.0.0'; export const STANDARD_PORT = '9000'; export const INDEX_JSON = '/index.json'; export const ERROR_JSON = '/error.json'; @@ -12,3 +13,9 @@ export const COLOR_PALLET = { export const DEFAULT = 'default'; export const CURSOR_POINTER = 'pointer'; +export const REQUEST_PARAM_JSON = '/requestLog.json' + +export const GET = 'GET'; +export const PUT = 'PUT'; +export const DELETE = 'DELETE'; +export const POST = 'POST'; \ No newline at end of file diff --git a/src/main.ts b/src/main.ts index 6738a09..5a0c49a 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3,6 +3,10 @@ import App from './App.vue'; import router from './router'; import store from './store'; import vuetify from './plugins/vuetify'; +import axios from 'axios'; +import VueAxios from 'vue-axios' + +Vue.use(VueAxios, axios) Vue.config.productionTip = false; diff --git a/src/store.ts b/src/store.ts index 02427e2..5472766 100644 --- a/src/store.ts +++ b/src/store.ts @@ -1,20 +1,43 @@ import Vue from 'vue'; import Vuex from 'vuex'; +import { stat } from 'fs'; Vue.use(Vuex); export default new Vuex.Store({ state: { apiInfoList: [], + apiRequestLog: [], + logHistroy:[], + rootPath: '', }, getters: { apiInfoList: state => { return state.apiInfoList; }, + apiRequestLog: state => { + return state.apiRequestLog; + }, + logHistory: state =>{ + return state.logHistroy; + }, + rootPath: state =>{ + return state.rootPath; + } }, mutations: { apiInfoList(state, payload): void { state.apiInfoList = payload; }, + rootPath(state,payload):void { + state.rootPath = payload; + }, + apiRequest(state,payload):void { + state.apiRequestLog = payload; + }, + logHistroy(state,payload):void { + state.logHistroy = payload; + } + }, }); diff --git a/src/utils/filetreeUtils.ts b/src/utils/filetreeUtils.ts index 2c427d5..54b9654 100644 --- a/src/utils/filetreeUtils.ts +++ b/src/utils/filetreeUtils.ts @@ -53,7 +53,6 @@ export default class FiletreeUtils { const settingInfo = this.readJson(settingPath); const indexJson = this.readJson(indexPath) const errorJson = this.readJson(errorPath); - const apiInfo = new ApiInfo(); apiInfo.api = api; apiInfo.index = indexJson; diff --git a/src/utils/server/jsonLogic.ts b/src/utils/server/jsonLogic.ts index a01a593..503ada9 100644 --- a/src/utils/server/jsonLogic.ts +++ b/src/utils/server/jsonLogic.ts @@ -11,7 +11,7 @@ export default class JsonLogic { }, false); if (!hasKey) { - if (Object.keys(req.body).length !== 0) { + if (req.body?.id) { restful.index.push(req.body); } } @@ -35,6 +35,8 @@ export default class JsonLogic { public putData(data: any, req: any): object { const result = data.map((value: any) => { + console.log('value :', value); + console.log('req :', req.params); const hasData = value['id'] === req.params.id ? true : false; return hasData ? this.objectMixin(value, req.body) : value; }); diff --git a/src/utils/server/logLogic.ts b/src/utils/server/logLogic.ts new file mode 100644 index 0000000..6deb40d --- /dev/null +++ b/src/utils/server/logLogic.ts @@ -0,0 +1,53 @@ +import store from '../../store'; +import { ApiInfo } from '@/const/mockType'; +import { REQUEST_PARAM_JSON } from '@/const/mockConst'; +import fs from 'fs'; +import { Moment } from 'moment' +let moment = require('moment'); +export const initLogObject = (self:any) =>{ + const data = store.state.apiInfoList; + const path = store.state.rootPath + REQUEST_PARAM_JSON; + const initLog = data.reduce((before:any, current:ApiInfo)=>{ + before[current.api] = { + api: current?.api, + description: current?.description, + requestParams: '', + update:'' + } + return before; + },{}); + + if (fs.existsSync(path)) { + const logObject = JSON.parse(fs.readFileSync(path,'utf8')); + store.state.apiRequestLog = logObject; + } else { + console.log('no files'); + store.state.apiRequestLog = initLog; + const jsonData = JSON.stringify(initLog,null, 2); + fs.writeFileSync(path, jsonData); + } +} + +export const saveLogInfo = (api:any, params:any) => { + // if(Object.keys(params).length === 0) return; + moment.locale(); + let now = moment().format('LLL'); + // @ts-ignore + store.state.apiRequestLog[api].requestParams = params + // @ts-ignore + store.state.apiRequestLog[api].update = now + //@ts-ignore + const jsonData = JSON.stringify(store.state.apiRequestLog,null, 2); + fs.writeFileSync(store.state.rootPath + '/requestLog.json', jsonData, 'utf8'); +} + +export const addLogHistroy = (api:string, http:any, params:any) => { + // if(Object.keys(params).length === 0) return; + const historyInfo = { + restful: http, + api, + params:JSON.stringify(params), + } + //@ts-ignore + store.state.logHistroy.push(historyInfo); +} diff --git a/src/utils/server/mockupServer.ts b/src/utils/server/mockupServer.ts index fc22548..18d53e7 100644 --- a/src/utils/server/mockupServer.ts +++ b/src/utils/server/mockupServer.ts @@ -1,11 +1,13 @@ import express from 'express'; import { ApiInfo } from '@/const/mockType'; +import { GET,PUT,DELETE,POST, COLOR_PALLET } from '@/const/mockConst'; import bodyParser from 'body-parser'; import JsonLogic from './jsonLogic'; import cors from 'cors'; +import { initLogObject, saveLogInfo, addLogHistroy } from './logLogic'; const app = express(); app.use(cors()); -app.use(bodyParser.urlencoded({ extended: false })); +app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); export default class MockupServer { @@ -25,6 +27,7 @@ export default class MockupServer { this.port = serverPort; this.self = vueComponent; this.restfullList = this.self.$store.state.apiInfoList; + initLogObject(this.self); } public start(): boolean { @@ -84,19 +87,22 @@ export default class MockupServer { ? this.jsonLogic.postData(req, restful) : restful.error; this.self.$store.state.apiInfoList[cnt].index = result; - this.setHeader(res, restful); + // res = this.setHeader(res, restful); + saveLogInfo(restful.api,req.body); + addLogHistroy(restful.api,POST,req.body); res.send(result); }); - + app.post( restful.api + '/:' + this.dynamicRoute(restful.dynamicRoute), (req: any, res: any) => { const result = this.jsonLogic.getJson(restful); const data = req.params.hasOwnProperty(this.dynamicRoute(restful.dynamicRoute)) - ? this.jsonLogic.selectData(result, req.params) - : result; - - this.setHeader(res, restful); + ? this.jsonLogic.selectData(result, req.params) + : result; + // res = this.setHeader(res, restful); + saveLogInfo(restful.api, req.body); + addLogHistroy(restful.api,POST,req.body); res.send(data); }, ); @@ -111,23 +117,28 @@ export default class MockupServer { ? this.jsonLogic.deleteData(result, req.params) : result; this.restfullList[cnt].index = data; - this.setHeader(res, restful); - res.send(data); + addLogHistroy(restful.api,DELETE,req.body); + // res = this.setHeader(res, restful); + res.sendStatus(200) }, ); } private putApi(restful: ApiInfo, cnt: number): void { + app.put( restful.api + '/:' + this.dynamicRoute(restful.dynamicRoute), (req: any, res: any) => { + const result = this.jsonLogic.getJson(restful); const data = req.params.hasOwnProperty(this.dynamicRoute(restful.dynamicRoute)) ? this.jsonLogic.putData(result, req) : result; this.restfullList[cnt].index = data; - this.setHeader(res, restful); - res.send(data); + // res = this.setHeader(res, restful); + addLogHistroy(restful.api,PUT,req.body); + saveLogInfo(restful.api, req.body); + res.sendStatus(200); }, ); } @@ -137,9 +148,10 @@ export default class MockupServer { const result = this.jsonLogic.getJson( this.self.$store.state.apiInfoList[cnt], ); - - this.setHeader(res, restful); + // res = this.setHeader(res, restful); + saveLogInfo(restful.api, req.body); res.send(result); + addLogHistroy(restful.api,GET,req.body); }); app.get( @@ -150,23 +162,25 @@ export default class MockupServer { ? this.jsonLogic.selectData(result, req.params) : result; - this.setHeader(res, restful); + // res = this.setHeader(res, restful); + saveLogInfo(restful.api, req.body); + addLogHistroy(restful.api,GET,req.body); res.send(data); }, ); } - private setHeader(res: any, restful: any) { - res.set(restful.header) - if (restful?.cookies) { - restful?.cookies.forEach((cookie: any, idx: number) => { - const key = Object.keys(cookie)[0]; - const name = cookie[key]; - res.cookie(key, name, cookie.options); - }); - } - return; - } + // private setHeader(res: any, restful: any) { + // res.set(restful.header) + // if (restful?.cookies) { + // restful?.cookies.forEach((cookie: any, idx: number) => { + // const key = Object.keys(cookie)[0]; + // const name = cookie[key]; + // res.cookie(key, name, cookie.options); + // }); + // } + // return res; + // } private dynamicRoute(dynamicRoute:string) { return dynamicRoute? dynamicRoute: this.DYNAMIC_API_ID; diff --git a/src/views/Home.vue b/src/views/Home.vue index d29922e..a0fdf95 100644 --- a/src/views/Home.vue +++ b/src/views/Home.vue @@ -1,32 +1,52 @@ @@ -85,11 +111,6 @@ export default class MockServer extends Vue { padding: 20px; background-color: #424242; } -button { - margin-left: 5px; - width: 165px; - height: 48px !important; -} .loacalhost-label { height: 48px; @@ -122,10 +143,78 @@ button { display: flex; } -.server-btn { - margin-bottom: 10px; - float: left; - width: max-content; +.setting-btns { + width: 100%; + height: 48px !important; + text-transform: none; + font-size: 18px; +} + +.setting-btn-width { + width: calc(100% - 5px); + height: 48px !important; + text-transform: none; + font-size: 18px; +} + +.server-container { + width: 610px; + height: 620px; +} + +.text-container { + margin-right: 5px !important; + margin-top: 0px !important; +} + +.screen-container { display: flex; + height: 570px; +} + +.api-list-outer { + width: 100%; + height: 500px; + overflow-y:auto; + overflow-x:hidden; + background: rgb(56, 56, 56); + border-radius: 5px; +} + +.empty-container { + text-align: center; + color:dimgray; + top: calc(50% - 120px); + position: relative; +} + +.empty-icon { + color: dimgray; + font-size: 100px; + top: calc(50% - 120px); + position: relative; +} + +.button-name { + margin-left: 5px; +} +.button-server { + margin-left: 5px; + width: 150px; +} + +::-webkit-scrollbar-thumb { + background-color: darkgrey; + outline: 1px solid slategrey; +} + +::-webkit-scrollbar { + width: 10px; +} + +::-webkit-scrollbar-thumb { + background-color: darkgrey; + outline: 1px solid slategrey; + } diff --git a/vue.config.js b/vue.config.js index c4def70..d502eef 100644 --- a/vue.config.js +++ b/vue.config.js @@ -1,9 +1,9 @@ module.exports = { runtimeCompiler: true, - lintOnSave: process.env.NODE_ENV !== 'production', + lintOnSave: process.env.NODE_ENV !== "production", pluginOptions: { electronBuilder: { - outputDir: 'dist_electron', + outputDir: "dist_electron", } } -} \ No newline at end of file +}; \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 3b49c43..7f93148 100644 --- a/yarn.lock +++ b/yarn.lock @@ -285,6 +285,14 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" +"@babel/plugin-proposal-optional-chaining@^7.7.5": + version "7.7.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.7.5.tgz#f0835f044cef85b31071a924010a2a390add11d4" + integrity sha512-sOwFqT8JSchtJeDD+CjmWCaiFoLxY4Ps7NjvwHC/U7l4e9i5pTRNt8nDMIFSOUL+ncFbYSwruHM8WknYItWdXw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-optional-chaining" "^7.7.4" + "@babel/plugin-proposal-unicode-property-regex@^7.2.0": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz#501ffd9826c0b91da22690720722ac7cb1ca9c78" @@ -343,6 +351,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-optional-chaining@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.7.4.tgz#c91fdde6de85d2eb8906daea7b21944c3610c901" + integrity sha512-2MqYD5WjZSbJdUagnJvIdSfkb/ucOC9/1fRJxm7GAxY6YQLWlUvkfxoNbUPcPLHJyetKUDQ4+yyuUyAoc0HriA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-arrow-functions@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" @@ -683,6 +698,30 @@ ajv "^6.1.0" ajv-keywords "^3.1.0" +"@fortawesome/fontawesome-common-types@^0.2.26": + version "0.2.26" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.26.tgz#6e0b13a752676036f8196f8a1500d53a27b4adc1" + integrity sha512-CcM/fIFwZlRdiWG/25xE/wHbtyUuCtqoCTrr6BsWw7hH072fR++n4L56KPydAr3ANgMJMjT8v83ZFIsDc7kE+A== + +"@fortawesome/fontawesome-svg-core@^1.2.26": + version "1.2.26" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.26.tgz#671569271d6b532cdea5e3deb8ff16f8b7ac251d" + integrity sha512-3Dfd/v2IztP1TxKOxZiB5+4kaOZK9mNy0KU1vVK7nFlPWz3gzxrCWB+AloQhQUoJ8HhGqbzjliK89Vl7PExGbw== + dependencies: + "@fortawesome/fontawesome-common-types" "^0.2.26" + +"@fortawesome/free-solid-svg-icons@^5.12.0": + version "5.12.0" + resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.12.0.tgz#8decac5844e60453cc0c7c51437d1461df053a35" + integrity sha512-CnpsWs6GhTs9ekNB3d8rcO5HYqRkXbYKf2YNiAlTWbj5eVlPqsd/XH1F9If8jkcR1aegryAbln/qYeKVZzpM0g== + dependencies: + "@fortawesome/fontawesome-common-types" "^0.2.26" + +"@fortawesome/vue-fontawesome@^0.1.9": + version "0.1.9" + resolved "https://registry.yarnpkg.com/@fortawesome/vue-fontawesome/-/vue-fontawesome-0.1.9.tgz#d3af6d4e50f337327de90447fe35fa1e117a2fbe" + integrity sha512-h/emhmZz+DfB2zOGLWawNwXq82UYhn9waTfUjLLmeaIqtnIyNt6kYlpQT/vzJjLZRDRvY2IEJAh1di5qKpKVpA== + "@hapi/address@2.x.x": version "2.1.1" resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.1.tgz#61395b5ed94c4cb19c2dc4c85969cff3d40d583f" @@ -1037,6 +1076,13 @@ dependencies: "@types/node" "*" +"@types/cors@^2.8.6": + version "2.8.6" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.6.tgz#cfaab33c49c15b1ded32f235111ce9123009bd02" + integrity sha512-invOmosX0DqbpA+cE2yoHGUlF/blyf7nB0OGYBBiH27crcVm5NmFaZkLP4Ta1hGaesckCi5lVLlydNJCxkTOSg== + dependencies: + "@types/express" "*" + "@types/debug@^4.1.4": version "4.1.5" resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.5.tgz#b14efa8852b7768d898906613c23f688713e02cd" @@ -1060,7 +1106,7 @@ "@types/node" "*" "@types/range-parser" "*" -"@types/express@^4.17.2": +"@types/express@*", "@types/express@^4.17.2": version "4.17.2" resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.2.tgz#a0fb7a23d8855bac31bc01d5a58cadd9b2173e6c" integrity sha512-5mHFNyavtLoJmnusB8OKJ5bshSzw+qkMIBAobLrIM48HJvunFva9mOa6aBwh64lBFyNwBbs0xiEFuj4eU/NjCA== @@ -1992,6 +2038,14 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== +axios@^0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.0.tgz#8e09bff3d9122e133f7b8101c8fbdd00ed3d2ab8" + integrity sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ== + dependencies: + follow-redirects "1.5.10" + is-buffer "^2.0.2" + babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" @@ -3103,6 +3157,14 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +cors@^2.8.5: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + cosmiconfig@^5.0.0: version "5.2.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" @@ -3448,6 +3510,13 @@ debug@2.6.9, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6. dependencies: ms "2.0.0" +debug@=3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + debug@^3.0.0, debug@^3.2.5, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" @@ -4108,6 +4177,13 @@ eslint-module-utils@^2.4.0: debug "^2.6.8" pkg-dir "^2.0.0" +eslint-plugin-babel@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-5.3.0.tgz#2e7f251ccc249326da760c1a4c948a91c32d0023" + integrity sha512-HPuNzSPE75O+SnxHIafbW5QB45r2w78fxqwK3HmjqIUoPfPzVrq6rD+CINU3yzoDSzEhUkX07VUphbF73Lth/w== + dependencies: + eslint-rule-composer "^0.3.0" + eslint-plugin-import@^2.18.2: version "2.18.2" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz#02f1180b90b077b33d447a17a2326ceb400aceb6" @@ -4132,6 +4208,11 @@ eslint-plugin-vue@^5.2.3: dependencies: vue-eslint-parser "^5.0.0" +eslint-rule-composer@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9" + integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== + eslint-scope@^4.0.0, eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -4676,6 +4757,13 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + dependencies: + debug "=3.1.0" + follow-redirects@^1.0.0: version "1.9.0" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.9.0.tgz#8d5bcdc65b7108fe1508649c79c12d732dcedb4f" @@ -5691,6 +5779,11 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== +is-buffer@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" + integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== + is-callable@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" @@ -6829,6 +6922,11 @@ mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdi dependencies: minimist "0.0.8" +moment@^2.24.0: + version "2.24.0" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" + integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== + move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" @@ -7202,7 +7300,7 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -9184,6 +9282,11 @@ serialize-javascript@^1.4.0, serialize-javascript@^1.7.0: resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== +serialize-javascript@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" + integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== + serve-index@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" @@ -10572,7 +10675,7 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -vary@~1.1.2: +vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= @@ -10601,6 +10704,11 @@ void-elements@^2.0.1: resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= +vue-axios@^2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/vue-axios/-/vue-axios-2.1.5.tgz#1af4bf1218ed71309c76afb38d0f683e312c24a7" + integrity sha512-th5xVbInVoyIoe+qY+9GCflEVezxAvztD4xpFF39SRQYqpoKD2qkmX8yv08jJG9a2SgNOCjirjJGSwg/wTrbmA== + vue-class-component@^7.0.2, vue-class-component@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/vue-class-component/-/vue-class-component-7.1.0.tgz#b33efcb10e17236d684f70b1e96f1946ec793e87"