Merge branch 'master' into typescript

This commit is contained in:
Matthias 2020-06-20 17:31:46 +02:00
commit 07109699ea
20 changed files with 372 additions and 13070 deletions

View File

@ -22,17 +22,22 @@ RUN apt-get update \
&& apt-get clean -y \
&& rm -rf /var/lib/apt/lists/*
RUN yarn global add @vue/cli
USER $USERNAME
ENV HOME /home/$USERNAME
RUN mkdir -p $HOME/frequi/node_modules
WORKDIR $HOME/frequi
COPY ./package.json .
# install dependencies
RUN yarn install
RUN yarn global add @vue/cli
USER $USERNAME
EXPOSE 8080

View File

@ -8,8 +8,8 @@ services:
image: freqtradeorg/frequi:dev
user: dev
volumes:
- ../node_modules:/home/dev/frequi/node_modules
- ../:/home/dev/frequi
- frequi-node-modules:/home/dev/frequi/node_modules
command: /bin/sh -c "while sleep 1000; do :; done"
networks:
- frequi
@ -17,4 +17,7 @@ services:
- 8080:8080
networks:
frequi:
frequi:
volumes:
frequi-node-modules:

View File

@ -24,4 +24,4 @@ jobs:
- name: Run Lint
run: |
npm run lint-ci
yarn lint-ci

View File

@ -13,25 +13,25 @@ It will require Freqtrade to be running on the same host with the API enabled un
### Project setup
```
npm install
yarn install
```
### Compiles and hot-reloads for development
```
npm run serve
yarn serve
```
### Compiles and minifies for production
```
npm run build
yarn build
```
### Lints and fixes files
```
npm run lint
yarn lint
```
### Customize configuration
@ -76,4 +76,4 @@ View > Command palette > Enter: Remote-Containers rebuild container
yarn serve
```
You now have useful vscode extentions, git support, your command history of the project.
You now have useful vscode extentions, git support, your command history of the project.

12914
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -14,6 +14,7 @@
"bootstrap-vue": "^2.14.0",
"bootswatch": "^4.5.0",
"core-js": "^3.6.4",
"moment": "^2.26.0",
"vue": "^2.6.11",
"vue-class-component": "^7.2.3",
"vue-property-decorator": "^9.0.0",
@ -42,8 +43,8 @@
"popper.js": "^1.16.0",
"portal-vue": "^2.1.6",
"prettier": "^2.0.5",
"sass": "^1.19.0",
"sass-loader": "^8.0.0",
"sass": "^1.26.8",
"sass-loader": "^8.0.2",
"typescript": "~3.9.3",
"vue-cli-plugin-bootstrap-vue": "~0.6.0",
"vue-template-compiler": "^2.6.11"

View File

@ -0,0 +1,67 @@
<template>
<div>
<button @click="refreshAll()" class="btn btn-secondary">
Refresh all
</button>
<b-form-checkbox class="float-right" v-model="autoRefresh" size="lg" switch
>AutoRefresh</b-form-checkbox
>
</div>
</template>
<script>
import { mapActions } from 'vuex';
export default {
name: 'reloadcontrol',
data() {
return {
autoRefresh: true,
refresh_interval: null,
refresh_interval_slow: null,
};
},
created() {
this.refreshOnce();
this.refreshAll();
},
methods: {
...mapActions(['refreshSlow', 'refreshFrequent', 'refreshAll', 'refreshOnce']),
startRefresh() {
console.log('Starting automatic refresh.');
this.refreshFrequent();
this.refresh_interval = setInterval(() => {
this.refreshFrequent();
}, 5000);
this.refreshSlow();
this.refresh_interval_slow = setInterval(() => {
this.refreshSlow();
}, 60000);
},
stopRefresh() {
console.log('Stopping automatic refresh.');
clearInterval(this.refresh_interval);
clearInterval(this.refresh_interval_slow);
},
},
mounted() {
this.startRefresh();
},
beforeDestroy() {
this.stopRefresh();
},
watch: {
autoRefresh(val) {
if (val) {
this.startRefresh();
} else {
this.stopRefresh();
}
},
},
};
</script>
<style>
</style>

View File

@ -0,0 +1,55 @@
<template>
<b-card header="Trade detail">
<ValuePair description="TradeId">{{ trade.trade_id }}</ValuePair>
<ValuePair description="Pair">{{ trade.pair }}</ValuePair>
<ValuePair description="Stoploss">
{{ formatPercent(trade.stop_loss_pct / 100) }} |
{{ formatPrice(trade.stop_loss) }}
</ValuePair>
<ValuePair description="Initial Stoploss">
{{ formatPercent(trade.initial_stop_loss_pct / 100) }} |
{{ formatPrice(trade.initial_stop_loss) }}
</ValuePair>
<ValuePair description="Current stoploss dist">
{{ formatPercent(trade.stoploss_current_dist_ratio) }} |
{{ formatPrice(trade.stoploss_current_dist) }}
</ValuePair>
<ValuePair description="Open Rate">{{ trade.open_rate }}</ValuePair>
<ValuePair description="Close Rate" v-if="!trade.is_open">{{ trade.close_rate }}</ValuePair>
<ValuePair description="Min Rate">{{ trade.min_rate }}</ValuePair>
<ValuePair description="Max Rate">{{ trade.max_rate }}</ValuePair>
<ValuePair description="Open date">{{ timestampms(trade.open_timestamp) }}</ValuePair>
<ValuePair description="Close date" v-if="trade.close_timestamp">
{{ timestampms(trade.close_timestamp) }}
</ValuePair>
<ValuePair description="Stoploss last updated">
{{ timestampms(trade.stoploss_last_update_timestamp) }}
</ValuePair>
<ValuePair description="Current profit" v-if="trade.current_profit_abs">
{{ trade.current_profit_abs }}
</ValuePair>
</b-card>
</template>
<script>
import { formatPercent, formatPrice, timestampms } from '@/shared/formatters';
import ValuePair from '@/components/ftbot/ValuePair.vue';
export default {
name: 'TradeDetail',
props: {
trade: {
type: Object,
required: true,
},
},
components: { ValuePair },
methods: {
formatPercent,
formatPrice,
timestampms,
},
};
</script>
<style scoped>
</style>

View File

@ -1,7 +1,6 @@
<template>
<div class="card">
<div class="card-header">{{ title }}</div>
<div class="card-body">
<b-card :header="title" no-body>
<b-card-body>
<b-table
class="table-sm"
:items="trades"
@ -14,6 +13,7 @@
<b-button size="sm" @click="forcesellHandler(row.item, row.index, $event.target)">
Forcesell
</b-button>
<b-button size="sm" @click="showDetails(row.item)">D</b-button>
</template>
<template v-slot:cell(pair)="row">
<span class="mr-1" v-html="profitSymbol(row.item)"></span>
@ -22,12 +22,13 @@
</span>
</template>
</b-table>
</div>
</div>
</b-card-body>
</b-card>
</template>
<script>
import { mapActions } from 'vuex';
import { mapActions, mapMutations, mapGetters, mapState } from 'vuex';
import { formatPercent } from '@/shared/formatters';
export default {
name: 'TradeList',
@ -52,6 +53,10 @@ export default {
default: 'No Trades to show.',
},
},
computed: {
...mapGetters('ftbot', ['openTradeDetail']),
...mapState('ftbot', ['detailTradeId']),
},
data() {
return {
tableFields: [
@ -77,9 +82,9 @@ export default {
},
methods: {
...mapActions('ftbot', ['forcesell']),
formatPercent(value) {
return `${(value * 100).toFixed(3)}%`;
},
...mapMutations('ftbot', ['setDetailTrade']),
formatPercent,
profitSymbol(item) {
// Red arrow / green circle
return item.close_profit < 0 || item.current_profit < 0 ? `&#x1F534;` : `&#x1F7E2;`;
@ -98,6 +103,13 @@ export default {
// log the selected item to the console
console.log(item);
},
showDetails(trade) {
if (this.detailTradeId === trade.trade_id) {
this.setDetailTrade(null);
} else {
this.setDetailTrade(trade);
}
},
},
};
</script>

View File

@ -0,0 +1,29 @@
<template>
<div class="row">
<label class="col-4">{{ description }}</label>
<div class="col-8">
<slot></slot>
</div>
</div>
</template>
<script>
export default {
name: 'ValuePair',
props: {
description: {
type: String,
required: true,
},
},
};
</script>
<style scoped>
label {
font-weight: bold;
}
.row {
max-width: 50em;
}
</style>

View File

@ -2,7 +2,6 @@ import Vue from 'vue';
import BootstrapVue from 'bootstrap-vue';
import 'bootstrap/dist/css/bootstrap.min.css';
import 'bootstrap-vue/dist/bootstrap-vue.css';
import '@/styles/main.scss';
Vue.use(BootstrapVue);

19
src/shared/formatters.js Normal file
View File

@ -0,0 +1,19 @@
import moment from 'moment';
export function formatPercent(value) {
return value ? `${(value * 100).toFixed(3)}%` : '';
}
export function formatPrice(value) {
return value ? value.toFixed(8) : '';
}
export function timestampms(ts) {
return moment(ts).format('YYYY-MM-DD hh:mm:ss');
}
export default {
formatPrice,
formatPercent,
timestampms,
};

View File

@ -15,12 +15,17 @@ export default {
balance: {},
dailyStats: [],
pairlistMethods: [],
detailTradeId: null,
},
getters: {
openTrades(state) {
return state.openTrades;
// return state.trades.filter((item) => item.is_open);
},
openTradeDetail(state) {
const [dTrade] = state.openTrades.filter((item) => item.trade_id === state.detailTradeId);
return dTrade;
},
closedtrades(state) {
return state.trades.filter((item) => !item.is_open);
},
@ -58,6 +63,9 @@ export default {
updateVersion(state, version) {
state.version = version.version;
},
setDetailTrade(state, trade) {
state.detailTradeId = trade ? trade.trade_id : null;
},
},
actions: {
ping({ commit }) {
@ -139,7 +147,7 @@ export default {
return api.post('/stopbuy', {}).catch(console.error);
},
reloadConfig() {
return api.post('/reload_conf', {}).catch(console.error);
return api.post('/reload_config', {}).catch(console.error);
},
forcesell({ dispatch }, tradeid) {
console.log(tradeid);

View File

@ -0,0 +1 @@
// Overwrite bootstrap scss variables

View File

@ -0,0 +1,5 @@
// global main style
// html, body, #app{
// }

View File

@ -0,0 +1 @@
// variables created for the project and not overwrite of bootstrap

8
src/styles/main.scss Normal file
View File

@ -0,0 +1,8 @@
@import 'bootstrap_variables_ovw.scss';
@import '~bootstrap/scss/bootstrap';
@import '~bootstrap-vue/src/index.scss';
@import '_variables.scss';
@import '_styles_ovw.scss';

View File

@ -5,15 +5,7 @@
<div class="col-md-12">
<div class="row">
<div class="col-md-12">
<div>
<button @click="refreshAll()" class="btn btn-secondary">
Refresh all
</button>
<b-form-checkbox class="float-right" v-model="autoRefresh" size="lg" switch
>AutoRefresh</b-form-checkbox
>
</div>
<ReloadControl />
<BotControls class="mt-3" />
</div>
<div class="col-md-12">
@ -58,7 +50,9 @@
:trades="closedtrades"
title="Trade history"
emptyText="No closed trades so far."
v-if="!detailTradeId"
/>
<TradeDetail v-if="detailTradeId" :trade="openTradeDetail"></TradeDetail>
</div>
</div>
</div>
@ -67,7 +61,7 @@
</template>
<script>
import { mapActions, mapState, mapGetters } from 'vuex';
import { mapState, mapGetters } from 'vuex';
import TradeList from '@/components/ftbot/TradeList.vue';
import Performance from '@/components/ftbot/Performance.vue';
@ -76,6 +70,8 @@ import BotStatus from '@/components/ftbot/BotStatus.vue';
import Balance from '@/components/ftbot/Balance.vue';
import DailyStats from '@/components/ftbot/DailyStats.vue';
import FTBotAPIPairList from '@/components/ftbot/FTBotAPIPairList.vue';
import TradeDetail from '@/components/ftbot/TradeDetail.vue';
import ReloadControl from '@/components/ftbot/ReloadControl.vue';
export default {
name: 'Trade',
@ -87,56 +83,13 @@ export default {
Balance,
DailyStats,
FTBotAPIPairList,
TradeDetail,
ReloadControl,
},
created() {
this.refreshOnce();
this.refreshAll();
},
data() {
return {
autoRefresh: true,
refreshInterval: null,
refreshIntervalSlow: null,
};
},
computed: {
...mapState('ftbot', ['open_trades']),
...mapGetters('ftbot', ['openTrades', 'closedtrades']),
},
methods: {
...mapActions(['refreshSlow', 'refreshFrequent', 'refreshAll', 'refreshOnce']),
// ...mapActions('ftbot', ['getTrades', 'getProfit', 'getState']),
startRefresh() {
console.log('Starting automatic refresh.');
this.refreshFrequent();
this.refreshInterval = setInterval(() => {
this.refreshFrequent();
}, 5000);
this.refreshSlow();
this.refreshIntervalSlow = setInterval(() => {
this.refreshSlow();
}, 60000);
},
stopRefresh() {
console.log('Stopping automatic refresh.');
clearInterval(this.refreshInterval);
clearInterval(this.refreshIntervalSlow);
},
},
mounted() {
this.startRefresh();
},
beforeDestroy() {
this.stopRefresh();
},
watch: {
autoRefresh(val) {
if (val) {
this.startRefresh();
} else {
this.stopRefresh();
}
},
...mapState('ftbot', ['open_trades', 'detailTradeId']),
...mapGetters('ftbot', ['openTrades', 'closedtrades', 'openTradeDetail']),
},
};
</script>

View File

@ -7,4 +7,11 @@ module.exports = {
},
},
},
css: {
loaderOptions: {
sass: {
prependData: `@import "@/styles/_variables.scss";`,
},
},
},
};

189
yarn.lock
View File

@ -895,9 +895,9 @@
string-width "^2.0.0"
"@soda/get-current-script@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@soda/get-current-script/-/get-current-script-1.0.0.tgz#623aa40623550e3b94767cffeb096a6fb597ed09"
integrity sha512-9GvTek+7cVw7r+L7TNGOG1astZJWXz2h5q4BqMXl28KN+24iSCm1xo+RhZOZvwdT3bzNe9hD7riJc/lBoO7mgg==
version "1.0.1"
resolved "https://registry.yarnpkg.com/@soda/get-current-script/-/get-current-script-1.0.1.tgz#f4afffcb36e069a801d5339c90499601c47a2516"
integrity sha512-zeOomWIE52M9JpYXlsR3iOf7TXTTmNQHnSbqjMsQZ5phzfAenHzL/1+vQ0ZoJfagocK11LNf8vnn2JG0ufRMUQ==
"@types/color-name@^1.1.1":
version "1.1.1"
@ -909,24 +909,23 @@
resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"
integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==
"@types/events@*":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7"
integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==
"@types/glob@^7.1.1":
version "7.1.1"
resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575"
integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==
version "7.1.2"
resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.2.tgz#06ca26521353a545d94a0adc74f38a59d232c987"
integrity sha512-VgNIkxK+j7Nz5P7jvUZlRvhuPSmsEfS03b0alKcq5V/STUKAa3Plemsn5mrQUO7am6OErJ4rhGEGJbACclrtRA==
dependencies:
"@types/events" "*"
"@types/minimatch" "*"
"@types/node" "*"
"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.4":
version "7.0.4"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339"
integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==
version "7.0.5"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd"
integrity sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==
"@types/json5@^0.0.29":
version "0.0.29"
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
"@types/minimatch@*":
version "3.0.3"
@ -934,9 +933,9 @@
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
"@types/node@*":
version "14.0.10"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.10.tgz#dbfaa170bd9eafccccb6d7060743a761b0844afd"
integrity sha512-Bz23oN/5bi0rniKT24ExLf4cK0JdvN3dH/3k0whYkdN4eI4vS2ZW/2ENNn2uxHCzWcbdHIa/GRuWQytfzCjRYw==
version "14.0.12"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.12.tgz#9c1d8ffb8084e8936603a6122a7649e40e68e04b"
integrity sha512-/sjzehvjkkpvLpYtN6/2dv5kg41otMGuHQUt9T2aiAuIfleCQRQHXXzF1eAw/qkZTj5Kcf4JSTf7EIizHocy6Q==
"@types/normalize-package-data@^2.4.0":
version "2.4.0"
@ -1119,12 +1118,12 @@
"@vue/cli-shared-utils" "^4.4.1"
"@vue/cli-plugin-typescript@~4.4.0":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@vue/cli-plugin-typescript/-/cli-plugin-typescript-4.4.1.tgz#00f2e0af3a50e00074cb01dea53ebb75bb50f392"
integrity sha512-WfgaT5N/eUlGXWsucl8vPskB3QYZFw77P1e/0TEwekVsz8yyT5/MEnZaQSH9emufcAagjpWHHL3fNQdIVg70eQ==
version "4.4.4"
resolved "https://registry.yarnpkg.com/@vue/cli-plugin-typescript/-/cli-plugin-typescript-4.4.4.tgz#bac7a4d33bc40df48ef1e49310183de029976e64"
integrity sha512-7ds7JwrA10YnMAdIYE4PnFltiZzjMclaTl5J6Ibwh0tGwRqAIX+AJ3euX7KqYi2hcPGwFZPx8zhSQhrxtkdrZA==
dependencies:
"@types/webpack-env" "^1.15.2"
"@vue/cli-shared-utils" "^4.4.1"
"@vue/cli-shared-utils" "^4.4.4"
cache-loader "^4.1.0"
fork-ts-checker-webpack-plugin "^3.1.1"
globby "^9.2.0"
@ -1221,6 +1220,25 @@
semver "^6.1.0"
strip-ansi "^6.0.0"
"@vue/cli-shared-utils@^4.4.4":
version "4.4.4"
resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-4.4.4.tgz#b9685b73a604c8a7ee82d6fc3319fe7bb2cdb274"
integrity sha512-ccMZtTMSutR35V5nrU/eyj+zRMomTRGBTLwJPmaJ2sRiW/93MTggQGXDWC8JRAA8yiU1N8xza8mjBxS0O2wIAA==
dependencies:
"@hapi/joi" "^15.0.1"
chalk "^2.4.2"
execa "^1.0.0"
launch-editor "^2.2.1"
lru-cache "^5.1.1"
node-ipc "^9.1.1"
open "^6.3.0"
ora "^3.4.0"
read-pkg "^5.1.1"
request "^2.88.2"
request-promise-native "^1.0.8"
semver "^6.1.0"
strip-ansi "^6.0.0"
"@vue/component-compiler-utils@^3.0.2", "@vue/component-compiler-utils@^3.1.0", "@vue/component-compiler-utils@^3.1.2":
version "3.1.2"
resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.1.2.tgz#8213a5ff3202f9f2137fe55370f9e8b9656081c3"
@ -1610,7 +1628,7 @@ array-flatten@^2.1.0:
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
array-includes@^3.0.3:
array-includes@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348"
integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==
@ -1636,7 +1654,7 @@ array-unique@^0.3.2:
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
array.prototype.flat@^1.2.1:
array.prototype.flat@^1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b"
integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==
@ -2201,9 +2219,9 @@ caniuse-api@^3.0.0:
lodash.uniq "^4.5.0"
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001043, caniuse-lite@^1.0.30001061:
version "1.0.30001077"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001077.tgz#5d7da6a120b08d9f4fd94823786ecb454aaa5626"
integrity sha512-AEzsGvjBJL0lby/87W96PyEvwN0GsYvk5LHsglLg9tW37K4BqvAvoSCdWIE13OZQ8afupqZ73+oL/1LkedN8hA==
version "1.0.30001079"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001079.tgz#ed3e5225cd9a6850984fdd88bf24ce45d69b9c22"
integrity sha512-2KaYheg0iOY+CMmDuAB3DHehrXhhb4OZU4KBVGDr/YKyYAcpudaiUQ9PJ9rxrPlKEoJ3ATasQ5AN48MqpwS43Q==
case-sensitive-paths-webpack-plugin@^2.3.0:
version "2.3.0"
@ -2244,9 +2262,9 @@ chalk@^3.0.0:
supports-color "^7.1.0"
chalk@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.0.0.tgz#6e98081ed2d17faab615eb52ac66ec1fe6209e72"
integrity sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==
version "4.1.0"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
dependencies:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
@ -3246,9 +3264,9 @@ ejs@^2.6.1:
integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==
electron-to-chromium@^1.3.413:
version "1.3.459"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.459.tgz#49a43d78f60b5bf42312b636f3af43c695e0c652"
integrity sha512-aN3Z89qEYIwVjzGi9SrcTjjopRZ3STUA6xTufS0fxZy8xOO2iqVw8rYKdT32CHgOKHOYj5KGmz3n6xUKE4QJiQ==
version "1.3.465"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.465.tgz#d692e5c383317570c2bd82092a24a0308c6ccf29"
integrity sha512-K/lUeT3NLAsJ5SHRDhK3/zd0tw7OUllYD8w+fTOXm6ljCPsp2qq+vMzxpLo8u1M27ZjZAjRbsA6rirvne2nAMQ==
elliptic@^6.0.0, elliptic@^6.5.2:
version "6.5.2"
@ -3295,7 +3313,16 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0:
dependencies:
once "^1.4.0"
enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0:
enhanced-resolve@^4.0.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.2.0.tgz#5d43bda4a0fd447cb0ebbe71bef8deff8805ad0d"
integrity sha512-S7eiFb/erugyd1rLb6mQ3Vuq+EXHv5cpCkNqqIkYkBgN2QdFnyCZzFBleqwGEx4lgNGYij81BWnCrFNK7vxvjQ==
dependencies:
graceful-fs "^4.1.2"
memory-fs "^0.5.0"
tapable "^1.0.0"
enhanced-resolve@^4.1.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66"
integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==
@ -3405,7 +3432,7 @@ eslint-config-prettier@^6.11.0:
dependencies:
get-stdin "^6.0.0"
eslint-import-resolver-node@^0.3.2, eslint-import-resolver-node@^0.3.3:
eslint-import-resolver-node@^0.3.3:
version "0.3.3"
resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404"
integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==
@ -3440,7 +3467,7 @@ eslint-loader@^2.2.1:
object-hash "^1.1.4"
rimraf "^2.6.1"
eslint-module-utils@^2.4.1:
eslint-module-utils@^2.6.0:
version "2.6.0"
resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6"
integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==
@ -3449,22 +3476,23 @@ eslint-module-utils@^2.4.1:
pkg-dir "^2.0.0"
eslint-plugin-import@^2.18.2:
version "2.20.2"
resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz#91fc3807ce08be4837141272c8b99073906e588d"
integrity sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==
version "2.21.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.21.1.tgz#3398318e5e4abbd23395c4964ce61538705154c8"
integrity sha512-qYOOsgUv63vHof7BqbzuD+Ud34bXHxFJxntuAC1ZappFZXYbRIek3aJ7jc9i2dHDGDyZ/0zlO0cpioES265Lsw==
dependencies:
array-includes "^3.0.3"
array.prototype.flat "^1.2.1"
array-includes "^3.1.1"
array.prototype.flat "^1.2.3"
contains-path "^0.1.0"
debug "^2.6.9"
doctrine "1.5.0"
eslint-import-resolver-node "^0.3.2"
eslint-module-utils "^2.4.1"
eslint-import-resolver-node "^0.3.3"
eslint-module-utils "^2.6.0"
has "^1.0.3"
minimatch "^3.0.4"
object.values "^1.1.0"
object.values "^1.1.1"
read-pkg-up "^2.0.0"
resolve "^1.12.0"
resolve "^1.17.0"
tsconfig-paths "^3.9.0"
eslint-plugin-prettier-vue@^2.1.0:
version "2.1.0"
@ -3502,9 +3530,9 @@ eslint-scope@^4.0.3:
estraverse "^4.1.1"
eslint-scope@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9"
integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==
version "5.1.0"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5"
integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==
dependencies:
esrecurse "^4.1.0"
estraverse "^4.1.1"
@ -3517,16 +3545,16 @@ eslint-utils@^1.4.3:
eslint-visitor-keys "^1.1.0"
eslint-utils@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.0.0.tgz#7be1cc70f27a72a76cd14aa698bcabed6890e1cd"
integrity sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==
version "2.1.0"
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
dependencies:
eslint-visitor-keys "^1.1.0"
eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2"
integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==
version "1.2.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.2.0.tgz#74415ac884874495f78ec2a97349525344c981fa"
integrity sha512-WFb4ihckKil6hu3Dp798xdzSfddwKKU3+nGniKF6HfeW6OLd2OUDEPP7TcHtB5+QXOKg2s6B2DaMPE1Nn/kxKQ==
eslint@^6.7.2:
version "6.8.0"
@ -3794,9 +3822,9 @@ extsprintf@^1.2.0:
integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
fast-deep-equal@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4"
integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==
version "3.1.3"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
fast-diff@^1.1.2:
version "1.2.0"
@ -5619,6 +5647,11 @@ mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1:
dependencies:
minimist "^1.2.5"
moment@^2.26.0:
version "2.26.0"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.26.0.tgz#5e1f82c6bafca6e83e808b30c8705eed0dcbd39a"
integrity sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw==
move-concurrently@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
@ -5660,9 +5693,9 @@ multicast-dns@^6.0.1:
thunky "^1.0.2"
mutationobserver-shim@^0.3.3:
version "0.3.5"
resolved "https://registry.yarnpkg.com/mutationobserver-shim/-/mutationobserver-shim-0.3.5.tgz#6f35ce85867b21aa1e58f78892d0ab4eee942c0e"
integrity sha512-YAMuSp4Oi19SYQF04dGnRajyFp4Wyam+jKKWzm5roPcNh1Rip8dnHPxls5F/xBgY0H2gV+3IzWuIvYQPDAvmBQ==
version "0.3.7"
resolved "https://registry.yarnpkg.com/mutationobserver-shim/-/mutationobserver-shim-0.3.7.tgz#8bf633b0c0b0291a1107255ed32c13088a8c5bf3"
integrity sha512-oRIDTyZQU96nAiz2AQyngwx1e89iApl2hN5AOYwyxLUB47UYsU3Wv9lJWqH5y/QdiYkc5HQLi23ZNB3fELdHcQ==
mute-stream@0.0.8:
version "0.0.8"
@ -5936,7 +5969,7 @@ object.pick@^1.3.0:
dependencies:
isobject "^3.0.1"
object.values@^1.1.0:
object.values@^1.1.0, object.values@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e"
integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==
@ -6277,9 +6310,9 @@ path-type@^3.0.0:
pify "^3.0.0"
pbkdf2@^3.0.3:
version "3.1.0"
resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.0.tgz#8839d778223e922164803a411dc62fddb57d3b02"
integrity sha512-wHMFZ6HTLGlB9f/WsQBs5OwMQJoLXYuJUzbA+j+hRBf7+Y8KcXpatzIviIcTy1OAyhWQp08nyiPO8Dnv0z4Sww==
version "3.1.1"
resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94"
integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==
dependencies:
create-hash "^1.1.2"
create-hmac "^1.1.4"
@ -7001,9 +7034,9 @@ regenerate-unicode-properties@^8.2.0:
regenerate "^1.4.0"
regenerate@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==
version "1.4.1"
resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f"
integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==
regenerator-runtime@^0.13.4:
version "0.13.5"
@ -7178,7 +7211,7 @@ resolve-url@^0.2.1:
resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.3.2, resolve@^1.8.1:
resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.3.2, resolve@^1.8.1:
version "1.17.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
@ -7284,7 +7317,7 @@ safe-regex@^1.1.0:
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
sass-loader@^8.0.0:
sass-loader@^8.0.2:
version "8.0.2"
resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-8.0.2.tgz#debecd8c3ce243c76454f2e8290482150380090d"
integrity sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==
@ -7295,10 +7328,10 @@ sass-loader@^8.0.0:
schema-utils "^2.6.1"
semver "^6.3.0"
sass@^1.19.0:
version "1.26.7"
resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.7.tgz#d3c9f3dd9771632bfb60af8746c308da3765166d"
integrity sha512-xgNazdkr6yvgHEfNaOjKtZzhDZmKYMCmoRKMPrTDo7YvjaITIzU2DDYsIUuN/atAg7/JOxPeCQHH7TtCo5Tq2g==
sass@^1.26.8:
version "1.26.8"
resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.8.tgz#312652530721f9568d4c4000b0db07ec6eb23325"
integrity sha512-yvtzyrKLGiXQu7H12ekXqsfoGT/aTKeMDyVzCB675k1HYuaj0py63i8Uf4SI9CHXj6apDhpfwbUr3gGOjdpu2Q==
dependencies:
chokidar ">=2.0.0 <4.0.0"
@ -8160,6 +8193,16 @@ ts-pnp@^1.1.6:
resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92"
integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==
tsconfig-paths@^3.9.0:
version "3.9.0"
resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b"
integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==
dependencies:
"@types/json5" "^0.0.29"
json5 "^1.0.1"
minimist "^1.2.0"
strip-bom "^3.0.0"
tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0:
version "1.13.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"