Merge branch 'master' into community_start_decay

This commit is contained in:
einhornimmond 2021-05-10 20:16:37 +02:00
commit cbf96299ce
58 changed files with 543 additions and 435 deletions

View File

@ -184,7 +184,10 @@ class TransactionsTable extends Table
$current = $su_transaction; $current = $su_transaction;
//echo "decay between " . $prev->transaction_id . " and " . $current->transaction_id . "<br>"; //echo "decay between " . $prev->transaction_id . " and " . $current->transaction_id . "<br>";
$calculated_decay = $stateBalancesTable->calculateDecay($prev->balance, $prev->balance_date, $current->balance_date, true); $calculated_decay = $stateBalancesTable->calculateDecay($prev->balance, $prev->balance_date, $current->balance_date, true);
$balance = floatval($prev->balance - $diff_amount);
// skip small decays (smaller than 0,00 GDD)
if(abs($balance) >= 100) {
//echo $interval->format('%R%a days'); //echo $interval->format('%R%a days');
//echo "prev balance: " . $prev->balance . ", diff_amount: $diff_amount, summe: " . (-intval($prev->balance - $diff_amount)) . "<br>"; //echo "prev balance: " . $prev->balance . ", diff_amount: $diff_amount, summe: " . (-intval($prev->balance - $diff_amount)) . "<br>";
$final_transactions[] = [ $final_transactions[] = [
@ -195,6 +198,7 @@ class TransactionsTable extends Table
]; ];
} }
} }
}
// sender or receiver when user has sended money // sender or receiver when user has sended money
// group name if creation // group name if creation
@ -265,6 +269,8 @@ class TransactionsTable extends Table
if($decay_start_date > $su_transaction->balance_date) { if($decay_start_date > $su_transaction->balance_date) {
$duration = $decay_start_date->timeAgoInWords(); $duration = $decay_start_date->timeAgoInWords();
} }
$balance = floatval($su_transaction->balance - $state_balance->decay);
if($balance > 100) {
$final_transactions[] = [ $final_transactions[] = [
'type' => 'decay', 'type' => 'decay',
'balance' => floatval($su_transaction->balance - $calculated_decay['balance']), 'balance' => floatval($su_transaction->balance - $calculated_decay['balance']),
@ -273,6 +279,7 @@ class TransactionsTable extends Table
]; ];
} }
} }
}
return $final_transactions; return $final_transactions;

View File

@ -3,28 +3,24 @@ module.exports = {
env: { env: {
browser: true, browser: true,
node: true, node: true,
jest: true jest: true,
}, },
parserOptions: { parserOptions: {
parser: 'babel-eslint' parser: 'babel-eslint',
}, },
extends: [ extends: ['standard', 'plugin:vue/essential', 'plugin:prettier/recommended'],
'plugin:vue/essential',
'plugin:prettier/recommended'
],
// required to lint *.vue files // required to lint *.vue files
plugins: [ plugins: ['vue', 'prettier', 'jest'],
'vue',
'prettier',
'jest'
],
// add your custom rules here // add your custom rules here
rules: { rules: {
'no-console': ['error'], 'no-console': ['error'],
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'vue/component-name-in-template-casing': ['error', 'kebab-case'], 'vue/component-name-in-template-casing': ['error', 'kebab-case'],
'prettier/prettier': ['error', { 'prettier/prettier': [
htmlWhitespaceSensitivity: 'ignore' 'error',
}], {
} htmlWhitespaceSensitivity: 'ignore',
},
],
},
} }

View File

@ -3,7 +3,7 @@ module.exports = {
collectCoverageFrom: ['src/**/*.{js,vue}', '!**/node_modules/**', '!**/?(*.)+(spec|test).js?(x)'], collectCoverageFrom: ['src/**/*.{js,vue}', '!**/node_modules/**', '!**/?(*.)+(spec|test).js?(x)'],
moduleFileExtensions: [ moduleFileExtensions: [
'js', 'js',
//'jsx', // 'jsx',
'json', 'json',
'vue', 'vue',
], ],

View File

@ -31,7 +31,7 @@
"dropzone": "^5.5.1", "dropzone": "^5.5.1",
"element-ui": "2.4.11", "element-ui": "2.4.11",
"es6-promise": "^4.1.1", "es6-promise": "^4.1.1",
"eslint": "^5.16.0", "eslint": "^7.25.0",
"eslint-config-prettier": "^8.1.0", "eslint-config-prettier": "^8.1.0",
"eslint-config-standard": "^16.0.2", "eslint-config-standard": "^16.0.2",
"eslint-loader": "^4.0.2", "eslint-loader": "^4.0.2",
@ -40,7 +40,6 @@
"eslint-plugin-node": "^11.1.0", "eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^3.3.1", "eslint-plugin-prettier": "^3.3.1",
"eslint-plugin-promise": "^4.3.1", "eslint-plugin-promise": "^4.3.1",
"eslint-plugin-standard": "^5.0.0",
"eslint-plugin-vue": "^7.8.0", "eslint-plugin-vue": "^7.8.0",
"express": "^4.17.1", "express": "^4.17.1",
"flatpickr": "^4.5.7", "flatpickr": "^4.5.7",

View File

@ -7,6 +7,7 @@ const port = process.env.PORT || 3000
// Express Server // Express Server
const app = express() const app = express()
// eslint-disable-next-line node/no-path-concat
app.use(serveStatic(__dirname + '/../dist')) app.use(serveStatic(__dirname + '/../dist'))
app.listen(port) app.listen(port)

View File

@ -36,11 +36,6 @@ export default {
DashboardLayout, DashboardLayout,
AuthLayoutGDD, AuthLayoutGDD,
}, },
data() {
return {
language: 'en',
}
},
data() { data() {
return { return {
config: { config: {

View File

@ -32,17 +32,17 @@ const apiPost = async (url, payload) => {
} }
const communityAPI = { const communityAPI = {
balance: async (session_id) => { balance: async (sessionId) => {
return apiGet(CONFIG.COMMUNITY_API_URL + 'getBalance/' + session_id) return apiGet(CONFIG.COMMUNITY_API_URL + 'getBalance/' + sessionId)
}, },
transactions: async (session_id, firstPage = 1, items = 25, order = 'DESC') => { transactions: async (sessionId, firstPage = 1, items = 25, order = 'DESC') => {
return apiGet( return apiGet(
`${CONFIG.COMMUNITY_API_URL}listTransactions/${firstPage}/${items}/${order}/${session_id}`, `${CONFIG.COMMUNITY_API_URL}listTransactions/${firstPage}/${items}/${order}/${sessionId}`,
) )
}, },
/*create: async (session_id, email, amount, memo, target_date = new Date() ) => { /* create: async (sessionId, email, amount, memo, target_date = new Date() ) => {
const payload = { const payload = {
session_id, sessionId,
email, email,
amount, amount,
target_date, target_date,
@ -50,14 +50,14 @@ const communityAPI = {
auto_sign: true, auto_sign: true,
} }
return apiPost(CONFIG.COMMUNITY_API__URL + 'createCoins/', payload) return apiPost(CONFIG.COMMUNITY_API__URL + 'createCoins/', payload)
},*/ }, */
send: async (session_id, email, amount, memo, target_date) => { send: async (sessionId, email, amount, memo, targetDate) => {
const payload = { const payload = {
session_id, session_id: sessionId,
email, email,
amount, amount,
memo, memo,
target_date, target_date: targetDate,
auto_sign: true, auto_sign: true,
} }
return apiPost(CONFIG.COMMUNITY_API_URL + 'sendCoins/', payload) return apiPost(CONFIG.COMMUNITY_API_URL + 'sendCoins/', payload)

View File

@ -29,7 +29,7 @@ const apiPost = async (url, payload) => {
throw new Error('HTTP Status Error ' + result.status) throw new Error('HTTP Status Error ' + result.status)
} }
if (result.data.state === 'warning') { if (result.data.state === 'warning') {
return { success: true, result: error } return { success: true, result: result.error }
} }
if (result.data.state !== 'success') { if (result.data.state !== 'success') {
throw new Error(result.data.msg) throw new Error(result.data.msg)
@ -48,15 +48,15 @@ const loginAPI = {
} }
return apiPost(CONFIG.LOGIN_API_URL + 'unsecureLogin', payload) return apiPost(CONFIG.LOGIN_API_URL + 'unsecureLogin', payload)
}, },
logout: async (session_id) => { logout: async (sessionId) => {
const payload = { session_id } const payload = { session_id: sessionId }
return apiPost(CONFIG.LOGIN_API_URL + 'logout', payload) return apiPost(CONFIG.LOGIN_API_URL + 'logout', payload)
}, },
create: async (email, first_name, last_name, password) => { create: async (email, firstName, lastName, password) => {
const payload = { const payload = {
email, email,
first_name, first_name: firstName,
last_name, last_name: lastName,
password, password,
emailType: EMAIL_TYPE.DEFAULT, emailType: EMAIL_TYPE.DEFAULT,
login_after_register: true, login_after_register: true,
@ -76,9 +76,9 @@ const loginAPI = {
CONFIG.LOGIN_API_URL + 'loginViaEmailVerificationCode?emailVerificationCode=' + optin, CONFIG.LOGIN_API_URL + 'loginViaEmailVerificationCode?emailVerificationCode=' + optin,
) )
}, },
changePassword: async (session_id, email, password) => { changePassword: async (sessionId, email, password) => {
const payload = { const payload = {
session_id, session_id: sessionId,
email, email,
update: { update: {
'User.password': password, 'User.password': password,

View File

@ -42,7 +42,7 @@ export default {
FadeTransition, FadeTransition,
}, },
created() { created() {
//console.log('base-alert gesetzt in =>', this.$route.path) // console.log('base-alert gesetzt in =>', this.$route.path)
}, },
props: { props: {
type: { type: {

View File

@ -62,7 +62,7 @@ export default {
}) })
const slider = this.$el.noUiSlider const slider = this.$el.noUiSlider
slider.on('slide', () => { slider.on('slide', () => {
let value = slider.get() const value = slider.get()
if (value !== this.value) { if (value !== this.value) {
this.$emit('input', value) this.$emit('input', value)
} }

View File

@ -2,7 +2,7 @@ import { parseOptions } from '@/components/Charts/optionHelpers'
import Chart from 'chart.js' import Chart from 'chart.js'
export const Charts = { export const Charts = {
mode: 'light', //(themeMode) ? themeMode : 'light'; mode: 'light', // (themeMode) ? themeMode : 'light';
fonts: { fonts: {
base: 'Open Sans', base: 'Open Sans',
}, },
@ -34,9 +34,9 @@ export const Charts = {
} }
function chartOptions() { function chartOptions() {
let { colors, mode, fonts } = Charts const { colors, mode, fonts } = Charts
// Options // Options
let options = { const options = {
defaults: { defaults: {
global: { global: {
responsive: true, responsive: true,
@ -59,21 +59,21 @@ function chartOptions() {
elements: { elements: {
point: { point: {
radius: 0, radius: 0,
backgroundColor: colors.theme['primary'], backgroundColor: colors.theme.primary,
}, },
line: { line: {
tension: 0.4, tension: 0.4,
borderWidth: 4, borderWidth: 4,
borderColor: colors.theme['primary'], borderColor: colors.theme.primary,
backgroundColor: colors.transparent, backgroundColor: colors.transparent,
borderCapStyle: 'rounded', borderCapStyle: 'rounded',
}, },
rectangle: { rectangle: {
backgroundColor: colors.theme['warning'], backgroundColor: colors.theme.warning,
}, },
arc: { arc: {
backgroundColor: colors.theme['primary'], backgroundColor: colors.theme.primary,
borderColor: mode == 'dark' ? colors.gray[800] : colors.white, borderColor: mode === 'dark' ? colors.gray[800] : colors.white,
borderWidth: 4, borderWidth: 4,
}, },
}, },
@ -94,11 +94,11 @@ function chartOptions() {
}, },
cutoutPercentage: 83, cutoutPercentage: 83,
legendCallback: function (chart) { legendCallback: function (chart) {
let data = chart.data const data = chart.data
let content = '' let content = ''
data.labels.forEach(function (label, index) { data.labels.forEach(function (label, index) {
let bgColor = data.datasets[0].backgroundColor[index] const bgColor = data.datasets[0].backgroundColor[index]
content += '<span class="chart-legend-item">' content += '<span class="chart-legend-item">'
content += content +=
@ -172,7 +172,7 @@ export const basicOptions = {
}, },
responsive: true, responsive: true,
} }
export let blueChartOptions = { export const blueChartOptions = {
scales: { scales: {
yAxes: [ yAxes: [
{ {
@ -185,7 +185,7 @@ export let blueChartOptions = {
}, },
} }
export let lineChartOptionsBlue = { export const lineChartOptionsBlue = {
...basicOptions, ...basicOptions,
tooltips: { tooltips: {
backgroundColor: '#f5f5f5', backgroundColor: '#f5f5f5',

View File

@ -1,6 +1,6 @@
// Parse global options // Parse global options
export function parseOptions(parent, options) { export function parseOptions(parent, options) {
for (let item in options) { for (const item in options) {
if (typeof options[item] !== 'object') { if (typeof options[item] !== 'object') {
parent[item] = options[item] parent[item] = options[item]
} else { } else {

View File

@ -4,13 +4,13 @@
// //
import Chart from 'chart.js' import Chart from 'chart.js'
Chart.elements.Rectangle.prototype.draw = function () { Chart.elements.Rectangle.prototype.draw = function () {
let ctx = this._chart.ctx const ctx = this._chart.ctx
let vm = this._view const vm = this._view
let left, right, top, bottom, signX, signY, borderSkipped, radius let left, right, top, bottom, signX, signY, borderSkipped
let borderWidth = vm.borderWidth let borderWidth = vm.borderWidth
// Set Radius Here // Set Radius Here
// If radius is large enough to cause drawing errors a max radius is imposed // If radius is large enough to cause drawing errors a max radius is imposed
let cornerRadius = 6 const cornerRadius = 6
if (!vm.horizontal) { if (!vm.horizontal) {
// bar // bar
@ -36,14 +36,14 @@ Chart.elements.Rectangle.prototype.draw = function () {
// adjust the sizes to fit if we're setting a stroke on the line // adjust the sizes to fit if we're setting a stroke on the line
if (borderWidth) { if (borderWidth) {
// borderWidth shold be less than bar width and bar height. // borderWidth shold be less than bar width and bar height.
let barSize = Math.min(Math.abs(left - right), Math.abs(top - bottom)) const barSize = Math.min(Math.abs(left - right), Math.abs(top - bottom))
borderWidth = borderWidth > barSize ? barSize : borderWidth borderWidth = borderWidth > barSize ? barSize : borderWidth
let halfStroke = borderWidth / 2 const halfStroke = borderWidth / 2
// Adjust borderWidth when bar top position is near vm.base(zero). // Adjust borderWidth when bar top position is near vm.base(zero).
let borderLeft = left + (borderSkipped !== 'left' ? halfStroke * signX : 0) const borderLeft = left + (borderSkipped !== 'left' ? halfStroke * signX : 0)
let borderRight = right + (borderSkipped !== 'right' ? -halfStroke * signX : 0) const borderRight = right + (borderSkipped !== 'right' ? -halfStroke * signX : 0)
let borderTop = top + (borderSkipped !== 'top' ? halfStroke * signY : 0) const borderTop = top + (borderSkipped !== 'top' ? halfStroke * signY : 0)
let borderBottom = bottom + (borderSkipped !== 'bottom' ? -halfStroke * signY : 0) const borderBottom = bottom + (borderSkipped !== 'bottom' ? -halfStroke * signY : 0)
// not become a vertical line? // not become a vertical line?
if (borderLeft !== borderRight) { if (borderLeft !== borderRight) {
top = borderTop top = borderTop
@ -64,7 +64,7 @@ Chart.elements.Rectangle.prototype.draw = function () {
// Corner points, from bottom-left to bottom-right clockwise // Corner points, from bottom-left to bottom-right clockwise
// | 1 2 | // | 1 2 |
// | 0 3 | // | 0 3 |
let corners = [ const corners = [
[left, bottom], [left, bottom],
[left, top], [left, top],
[right, top], [right, top],
@ -72,7 +72,7 @@ Chart.elements.Rectangle.prototype.draw = function () {
] ]
// Find first (starting) corner with fallback to 'bottom' // Find first (starting) corner with fallback to 'bottom'
let borders = ['bottom', 'left', 'top', 'right'] const borders = ['bottom', 'left', 'top', 'right']
let startCorner = borders.indexOf(borderSkipped, 0) let startCorner = borders.indexOf(borderSkipped, 0)
if (startCorner === -1) { if (startCorner === -1) {
startCorner = 0 startCorner = 0
@ -89,16 +89,14 @@ Chart.elements.Rectangle.prototype.draw = function () {
for (let i = 1; i < 4; i++) { for (let i = 1; i < 4; i++) {
corner = cornerAt(i) corner = cornerAt(i)
let nextCornerId = i + 1 let nextCornerId = i + 1
if (nextCornerId == 4) { if (nextCornerId === 4) {
nextCornerId = 0 nextCornerId = 0
} }
let nextCorner = cornerAt(nextCornerId) const width = corners[2][0] - corners[1][0]
const height = corners[0][1] - corners[1][1]
let width = corners[2][0] - corners[1][0] const x = corners[1][0]
let height = corners[0][1] - corners[1][1] const y = corners[1][1]
let x = corners[1][0]
let y = corners[1][1]
let radius = cornerRadius let radius = cornerRadius

View File

@ -6,7 +6,7 @@ const localVue = global.localVue
describe('CloseButton', () => { describe('CloseButton', () => {
let wrapper let wrapper
let propsData = { const propsData = {
target: 'Target', target: 'Target',
expanded: false, expanded: false,
} }

View File

@ -70,7 +70,7 @@ export default {
}, },
methods: { methods: {
activate() { activate() {
let wasActive = this.active const wasActive = this.active
if (!this.multipleActive) { if (!this.multipleActive) {
this.deactivateAll() this.deactivateAll()
} }

View File

@ -170,7 +170,7 @@ export default {
}, },
methods: { methods: {
updateValue(evt) { updateValue(evt) {
let value = evt.target.value const value = evt.target.value
this.$emit('input', value) this.$emit('input', value)
}, },
onFocus(evt) { onFocus(evt) {

View File

@ -60,7 +60,7 @@ export default {
type: String, type: String,
default: '', default: '',
validator(value) { validator(value) {
let acceptedValues = ['', 'notice', 'mini'] const acceptedValues = ['', 'notice', 'mini']
return acceptedValues.indexOf(value) !== -1 return acceptedValues.indexOf(value) !== -1
}, },
description: 'Modal type (notice|mini|"") ', description: 'Modal type (notice|mini|"") ',
@ -73,7 +73,7 @@ export default {
type: String, type: String,
description: 'Modal size', description: 'Modal size',
validator(value) { validator(value) {
let acceptedValues = ['', 'sm', 'lg'] const acceptedValues = ['', 'sm', 'lg']
return acceptedValues.indexOf(value) !== -1 return acceptedValues.indexOf(value) !== -1
}, },
}, },

View File

@ -39,7 +39,7 @@ export default {
submittedNames: [], submittedNames: [],
} }
}, },
/*Modal*/ /* Modal */
checkFormValidity() { checkFormValidity() {
const valid = this.$refs.form.checkValidity() const valid = this.$refs.form.checkValidity()
this.nameState = valid this.nameState = valid

View File

@ -90,8 +90,8 @@ export default {
}, },
computed: { computed: {
classes() { classes() {
let color = `bg-${this.type}` const color = `bg-${this.type}`
let classes = [ const classes = [
{ 'navbar-transparent': this.transparent }, { 'navbar-transparent': this.transparent },
{ [`navbar-expand-${this.expand}`]: this.expand }, { [`navbar-expand-${this.expand}`]: this.expand },
] ]

View File

@ -59,7 +59,7 @@ export default {
type: String, type: String,
default: 'top', default: 'top',
validator: (value) => { validator: (value) => {
let acceptedValues = ['top', 'bottom'] const acceptedValues = ['top', 'bottom']
return acceptedValues.indexOf(value) !== -1 return acceptedValues.indexOf(value) !== -1
}, },
description: 'Vertical alignment of notification (top|bottom)', description: 'Vertical alignment of notification (top|bottom)',
@ -68,7 +68,7 @@ export default {
type: String, type: String,
default: 'right', default: 'right',
validator: (value) => { validator: (value) => {
let acceptedValues = ['left', 'center', 'right'] const acceptedValues = ['left', 'center', 'right']
return acceptedValues.indexOf(value) !== -1 return acceptedValues.indexOf(value) !== -1
}, },
description: 'Horizontal alignment of notification (left|center|right)', description: 'Horizontal alignment of notification (left|center|right)',
@ -77,7 +77,7 @@ export default {
type: String, type: String,
default: 'info', default: 'info',
validator: (value) => { validator: (value) => {
let acceptedValues = ['default', 'info', 'primary', 'danger', 'warning', 'success'] const acceptedValues = ['default', 'info', 'primary', 'danger', 'warning', 'success']
return acceptedValues.indexOf(value) !== -1 return acceptedValues.indexOf(value) !== -1
}, },
description: description:
@ -129,8 +129,8 @@ export default {
return `alert-${this.type}` return `alert-${this.type}`
}, },
customPosition() { customPosition() {
let initialMargin = 20 const initialMargin = 20
let alertHeight = this.elmHeight + 10 const alertHeight = this.elmHeight + 10
let sameAlertsCount = this.$notifications.state.filter((alert) => { let sameAlertsCount = this.$notifications.state.filter((alert) => {
return ( return (
alert.horizontalAlign === this.horizontalAlign && alert.horizontalAlign === this.horizontalAlign &&
@ -141,8 +141,8 @@ export default {
if (this.$notifications.settings.overlap) { if (this.$notifications.settings.overlap) {
sameAlertsCount = 1 sameAlertsCount = 1
} }
let pixels = (sameAlertsCount - 1) * alertHeight + initialMargin const pixels = (sameAlertsCount - 1) * alertHeight + initialMargin
let styles = {} const styles = {}
if (this.verticalAlign === 'top') { if (this.verticalAlign === 'top') {
styles.top = `${pixels}px` styles.top = `${pixels}px`
} else { } else {

View File

@ -44,7 +44,7 @@ const NotificationStore = {
const NotificationsPlugin = { const NotificationsPlugin = {
install(Vue, options) { install(Vue, options) {
let app = new Vue({ const app = new Vue({
data: { data: {
notificationStore: NotificationStore, notificationStore: NotificationStore,
}, },

View File

@ -5,7 +5,7 @@
import VueBootstrapTypeahead from 'vue-bootstrap-typeahead' import VueBootstrapTypeahead from 'vue-bootstrap-typeahead'
// Global registration // Global registration
//Vue.component('vue-bootstrap-typeahead', VueBootstrapTypeahead) // Vue.component('vue-bootstrap-typeahead', VueBootstrapTypeahead)
// OR // OR

View File

@ -50,6 +50,7 @@
<a <a
:href="`https://elopage.com/s/gradido/sign_in?locale=${$i18n.locale}`" :href="`https://elopage.com/s/gradido/sign_in?locale=${$i18n.locale}`"
class="nav-link text-lg" class="nav-link text-lg"
target="_blank"
> >
{{ $t('members_area') }} {{ $t('members_area') }}
</a> </a>

View File

@ -110,7 +110,7 @@ export default {
}, },
linkPrefix() { linkPrefix() {
if (this.link.name) { if (this.link.name) {
let words = this.link.name.split(' ') const words = this.link.name.split(' ')
return words.map((word) => word.substring(0, 1)).join('') return words.map((word) => word.substring(0, 1)).join('')
} }
return '' return ''
@ -120,7 +120,7 @@ export default {
}, },
isActive() { isActive() {
if (this.$route && this.$route.path) { if (this.$route && this.$route.path) {
let matchingRoute = this.children.find((c) => this.$route.path.startsWith(c.link.path)) const matchingRoute = this.children.find((c) => this.$route.path.startsWith(c.link.path))
if (matchingRoute !== undefined) { if (matchingRoute !== undefined) {
return true return true
} }

View File

@ -29,7 +29,7 @@ const SidebarPlugin = {
if (options && options.sidebarLinks) { if (options && options.sidebarLinks) {
SidebarStore.sidebarLinks = options.sidebarLinks SidebarStore.sidebarLinks = options.sidebarLinks
} }
let app = new Vue({ const app = new Vue({
data: { data: {
sidebarStore: SidebarStore, sidebarStore: SidebarStore,
}, },

View File

@ -67,7 +67,7 @@ export default {
type: String, type: String,
default: 'primary', default: 'primary',
validator: (value) => { validator: (value) => {
let acceptedValues = ['primary', 'info', 'success', 'warning', 'danger'] const acceptedValues = ['primary', 'info', 'success', 'warning', 'danger']
return acceptedValues.indexOf(value) !== -1 return acceptedValues.indexOf(value) !== -1
}, },
}, },
@ -102,7 +102,7 @@ export default {
}, },
methods: { methods: {
findAndActivateTab(title) { findAndActivateTab(title) {
let tabToActivate = this.tabs.find((t) => t.title === title) const tabToActivate = this.tabs.find((t) => t.title === title)
if (tabToActivate) { if (tabToActivate) {
this.activateTab(tabToActivate) this.activateTab(tabToActivate)
} }

View File

@ -2,7 +2,7 @@ export default {
bind: function (el, binding, vnode) { bind: function (el, binding, vnode) {
el.clickOutsideEvent = function (event) { el.clickOutsideEvent = function (event) {
// here I check that click was outside the el and his childrens // here I check that click was outside the el and his childrens
if (!(el == event.target || el.contains(event.target))) { if (!(el === event.target || el.contains(event.target))) {
// and if it did, call method provided in attribute value // and if it did, call method provided in attribute value
vnode.context[binding.expression](event) vnode.context[binding.expression](event)
} }

View File

@ -2,7 +2,6 @@ import Vue from 'vue'
import DashboardPlugin from './plugins/dashboard-plugin' import DashboardPlugin from './plugins/dashboard-plugin'
import App from './App.vue' import App from './App.vue'
import i18n from './i18n.js' import i18n from './i18n.js'
import VeeValidate from './vee-validate.js'
// store // store
import { store } from './store/store' import { store } from './store/store'
@ -15,7 +14,7 @@ Vue.use(DashboardPlugin)
Vue.config.productionTip = false Vue.config.productionTip = false
router.beforeEach((to, from, next) => { router.beforeEach((to, from, next) => {
if (to.meta.requiresAuth && !store.state.session_id) { if (to.meta.requiresAuth && !store.state.sessionId) {
next({ path: '/login' }) next({ path: '/login' })
} else { } else {
next() next()

View File

@ -3,7 +3,7 @@ import '@/polyfills'
// Notifications plugin. Used on Notifications page // Notifications plugin. Used on Notifications page
import Notifications from '@/components/NotificationPlugin' import Notifications from '@/components/NotificationPlugin'
// Validation plugin used to validate forms // Validation plugin used to validate forms
import { configure } from 'vee-validate' import { configure, extend } from 'vee-validate'
// A plugin file where you could register global components used across the app // A plugin file where you could register global components used across the app
import GlobalComponents from './globalComponents' import GlobalComponents from './globalComponents'
// A plugin file where you could register global directives // A plugin file where you could register global directives
@ -14,7 +14,6 @@ import SideBar from '@/components/SidebarPlugin'
// element ui language configuration // element ui language configuration
import lang from 'element-ui/lib/locale/lang/en' import lang from 'element-ui/lib/locale/lang/en'
import locale from 'element-ui/lib/locale' import locale from 'element-ui/lib/locale'
locale.use(lang)
// vue-bootstrap // vue-bootstrap
import { BootstrapVue, IconsPlugin } from 'bootstrap-vue' import { BootstrapVue, IconsPlugin } from 'bootstrap-vue'
@ -22,7 +21,6 @@ import { BootstrapVue, IconsPlugin } from 'bootstrap-vue'
// asset imports // asset imports
import '@/assets/scss/argon.scss' import '@/assets/scss/argon.scss'
import '@/assets/vendor/nucleo/css/nucleo.css' import '@/assets/vendor/nucleo/css/nucleo.css'
import { extend } from 'vee-validate'
import * as rules from 'vee-validate/dist/rules' import * as rules from 'vee-validate/dist/rules'
import { messages } from 'vee-validate/dist/locale/en.json' import { messages } from 'vee-validate/dist/locale/en.json'
@ -40,6 +38,7 @@ import VueMoment from 'vue-moment'
import Loading from 'vue-loading-overlay' import Loading from 'vue-loading-overlay'
// import the styles // import the styles
import 'vue-loading-overlay/dist/vue-loading.css' import 'vue-loading-overlay/dist/vue-loading.css'
locale.use(lang)
Object.keys(rules).forEach((rule) => { Object.keys(rules).forEach((rule) => {
extend(rule, { extend(rule, {

View File

@ -21,20 +21,20 @@ const routes = [
requiresAuth: true, requiresAuth: true,
}, },
}, },
//{ // {
// path: '/profileedit', // path: '/profileedit',
// component: () => import('../views/Pages/UserProfileEdit.vue'), // component: () => import('../views/Pages/UserProfileEdit.vue'),
// meta: { // meta: {
// requiresAuth: true, // requiresAuth: true,
// }, // },
//}, // },
//{ // {
// path: '/activity', // path: '/activity',
// component: () => import('../views/Pages/UserProfileActivity.vue'), // component: () => import('../views/Pages/UserProfileActivity.vue'),
// meta: { // meta: {
// requiresAuth: true, // requiresAuth: true,
// }, // },
//}, // },
{ {
path: '/transactions', path: '/transactions',
component: () => import('../views/Pages/UserProfileTransactionList.vue'), component: () => import('../views/Pages/UserProfileTransactionList.vue'),

View File

@ -1,7 +1,7 @@
import Vue from 'vue' import Vue from 'vue'
import Vuex from 'vuex' import Vuex from 'vuex'
Vue.use(Vuex)
import createPersistedState from 'vuex-persistedstate' import createPersistedState from 'vuex-persistedstate'
Vue.use(Vuex)
export const mutations = { export const mutations = {
language: (state, language) => { language: (state, language) => {
@ -10,18 +10,18 @@ export const mutations = {
email: (state, email) => { email: (state, email) => {
state.email = email state.email = email
}, },
session_id: (state, session_id) => { sessionId: (state, sessionId) => {
state.session_id = session_id state.sessionId = sessionId
}, },
} }
export const actions = { export const actions = {
login: ({ dispatch, commit }, data) => { login: ({ dispatch, commit }, data) => {
commit('session_id', data.session_id) commit('sessionId', data.sessionId)
commit('email', data.email) commit('email', data.email)
}, },
logout: ({ commit, state }) => { logout: ({ commit, state }) => {
commit('session_id', null) commit('sessionId', null)
commit('email', null) commit('email', null)
sessionStorage.clear() sessionStorage.clear()
}, },
@ -34,7 +34,7 @@ export const store = new Vuex.Store({
}), }),
], ],
state: { state: {
session_id: null, sessionId: null,
email: '', email: '',
language: 'en', language: 'en',
modals: false, modals: false,

View File

@ -1,6 +1,6 @@
import { mutations, actions } from './store' import { mutations, actions } from './store'
const { language, email, session_id } = mutations const { language, email, sessionId } = mutations
const { login, logout } = actions const { login, logout } = actions
describe('Vuex store', () => { describe('Vuex store', () => {
@ -21,11 +21,11 @@ describe('Vuex store', () => {
}) })
}) })
describe('session_id', () => { describe('sessionId', () => {
it('sets the state of session_id', () => { it('sets the state of sessionId', () => {
const state = { session_id: null } const state = { sessionId: null }
session_id(state, '1234') sessionId(state, '1234')
expect(state.session_id).toEqual('1234') expect(state.sessionId).toEqual('1234')
}) })
}) })
}) })
@ -36,17 +36,17 @@ describe('Vuex store', () => {
const state = {} const state = {}
it('calls two commits', () => { it('calls two commits', () => {
login({ commit, state }, { session_id: 1234, email: 'someone@there.is' }) login({ commit, state }, { sessionId: 1234, email: 'someone@there.is' })
expect(commit).toHaveBeenCalledTimes(2) expect(commit).toHaveBeenCalledTimes(2)
}) })
it('commits session_id', () => { it('commits sessionId', () => {
login({ commit, state }, { session_id: 1234, email: 'someone@there.is' }) login({ commit, state }, { sessionId: 1234, email: 'someone@there.is' })
expect(commit).toHaveBeenNthCalledWith(1, 'session_id', 1234) expect(commit).toHaveBeenNthCalledWith(1, 'sessionId', 1234)
}) })
it('commits email', () => { it('commits email', () => {
login({ commit, state }, { session_id: 1234, email: 'someone@there.is' }) login({ commit, state }, { sessionId: 1234, email: 'someone@there.is' })
expect(commit).toHaveBeenNthCalledWith(2, 'email', 'someone@there.is') expect(commit).toHaveBeenNthCalledWith(2, 'email', 'someone@there.is')
}) })
}) })
@ -60,9 +60,9 @@ describe('Vuex store', () => {
expect(commit).toHaveBeenCalledTimes(2) expect(commit).toHaveBeenCalledTimes(2)
}) })
it('commits session_id', () => { it('commits sessionId', () => {
logout({ commit, state }) logout({ commit, state })
expect(commit).toHaveBeenNthCalledWith(1, 'session_id', null) expect(commit).toHaveBeenNthCalledWith(1, 'sessionId', null)
}) })
it('commits email', () => { it('commits email', () => {

View File

@ -7,7 +7,7 @@ const localVue = global.localVue
describe('ContentFooter', () => { describe('ContentFooter', () => {
let wrapper let wrapper
let mocks = { const mocks = {
$i18n: { $i18n: {
locale: 'en', locale: 'en',
}, },
@ -98,6 +98,12 @@ describe('ContentFooter', () => {
) )
}) })
it('links to the support', () => {
expect(wrapper.findAll('a.nav-link').at(4).attributes('href')).toEqual(
'https://gradido.net/en/contact/',
)
})
describe('links are localized', () => { describe('links are localized', () => {
beforeEach(() => { beforeEach(() => {
mocks.$i18n.locale = 'de' mocks.$i18n.locale = 'de'
@ -132,6 +138,12 @@ describe('ContentFooter', () => {
'https://docs.google.com/document/d/1jZp-DiiMPI9ZPNXmjsvOQ1BtnfDFfx8BX7CDmA8KKjY/edit?usp=sharing', 'https://docs.google.com/document/d/1jZp-DiiMPI9ZPNXmjsvOQ1BtnfDFfx8BX7CDmA8KKjY/edit?usp=sharing',
) )
}) })
it('links to the German support-page when locale is de', () => {
expect(wrapper.findAll('a.nav-link').at(4).attributes('href')).toEqual(
'https://gradido.net/de/contact/',
)
})
}) })
}) })
}) })

View File

@ -4,7 +4,11 @@
<b-col> <b-col>
<div class="copyright text-center text-lg-center text-muted"> <div class="copyright text-center text-lg-center text-muted">
© {{ year }} © {{ year }}
<a :href="`https://gradido.net/${$i18n.locale}`" class="font-weight-bold ml-1"> <a
:href="`https://gradido.net/${$i18n.locale}`"
class="font-weight-bold ml-1"
target="_blank"
>
Gradido-Akademie Gradido-Akademie
</a> </a>
| |
@ -39,6 +43,9 @@
> >
{{ $t('whitepaper') }} {{ $t('whitepaper') }}
</b-nav-item> </b-nav-item>
<b-nav-item :href="`https://gradido.net/${$i18n.locale}/contact/`" target="_blank">
{{ $t('site.navbar.support') }}
</b-nav-item>
</b-nav> </b-nav>
</b-col> </b-col>
</b-row> </b-row>

View File

@ -20,7 +20,7 @@ const transitionStub = () => ({
describe('DashboardLayoutGdd', () => { describe('DashboardLayoutGdd', () => {
let wrapper let wrapper
let mocks = { const mocks = {
$i18n: { $i18n: {
locale: 'en', locale: 'en',
}, },
@ -28,7 +28,7 @@ describe('DashboardLayoutGdd', () => {
$n: jest.fn(), $n: jest.fn(),
} }
let state = { const state = {
user: { user: {
name: 'Peter Lustig', name: 'Peter Lustig',
balance: 2546, balance: 2546,
@ -37,12 +37,12 @@ describe('DashboardLayoutGdd', () => {
email: 'peter.lustig@example.org', email: 'peter.lustig@example.org',
} }
let stubs = { const stubs = {
RouterLink: RouterLinkStub, RouterLink: RouterLinkStub,
FadeTransition: transitionStub(), FadeTransition: transitionStub(),
} }
let store = new Vuex.Store({ const store = new Vuex.Store({
state, state,
}) })
@ -79,7 +79,7 @@ describe('DashboardLayoutGdd', () => {
}) })
it('has five items in the navbar', () => { it('has five items in the navbar', () => {
expect(navbar.findAll('ul > li')).toHaveLength(3) expect(navbar.findAll('ul > li')).toHaveLength(2)
}) })
it('has first item "send" in navbar', () => { it('has first item "send" in navbar', () => {
@ -104,41 +104,41 @@ describe('DashboardLayoutGdd', () => {
expect(wrapper.findComponent(RouterLinkStub).props().to).toBe('/transactions') expect(wrapper.findComponent(RouterLinkStub).props().to).toBe('/transactions')
}) })
it('has third item "My profile" in navbar', () => { // it('has third item "My profile" in navbar', () => {
expect(navbar.findAll('ul > li').at(2).text()).toEqual('site.navbar.my-profil') // expect(navbar.findAll('ul > li').at(2).text()).toEqual('site.navbar.my-profil')
}) // })
it.skip('has third item "My profile" linked to profile in navbar', async () => {
navbar.findAll('ul > li > a').at(2).trigger('click')
await flushPromises()
await jest.runAllTimers()
await flushPromises()
expect(wrapper.findComponent(RouterLinkStub).props().to).toBe('/profile')
})
//it('has fourth item "Settigs" in navbar', () => {
// expect(navbar.findAll('ul > li').at(3).text()).toEqual('site.navbar.settings')
//})
// //
//it.skip('has fourth item "Settings" linked to profileedit in navbar', async () => { // it.skip('has third item "My profile" linked to profile in navbar', async () => {
// navbar.findAll('ul > li > a').at(2).trigger('click')
// await flushPromises()
// await jest.runAllTimers()
// await flushPromises()
// expect(wrapper.findComponent(RouterLinkStub).props().to).toBe('/profile')
// })
// it('has fourth item "Settigs" in navbar', () => {
// expect(navbar.findAll('ul > li').at(3).text()).toEqual('site.navbar.settings')
// })
//
// it.skip('has fourth item "Settings" linked to profileedit in navbar', async () => {
// navbar.findAll('ul > li > a').at(3).trigger('click') // navbar.findAll('ul > li > a').at(3).trigger('click')
// await flushPromises() // await flushPromises()
// await jest.runAllTimers() // await jest.runAllTimers()
// await flushPromises() // await flushPromises()
// expect(wrapper.findComponent(RouterLinkStub).props().to).toBe('/profileedit') // expect(wrapper.findComponent(RouterLinkStub).props().to).toBe('/profileedit')
//}) // })
//it('has fifth item "Activity" in navbar', () => { // it('has fifth item "Activity" in navbar', () => {
// expect(navbar.findAll('ul > li').at(4).text()).toEqual('site.navbar.activity') // expect(navbar.findAll('ul > li').at(4).text()).toEqual('site.navbar.activity')
//}) // })
// //
//it.skip('has fourth item "Activity" linked to activity in navbar', async () => { // it.skip('has fourth item "Activity" linked to activity in navbar', async () => {
// navbar.findAll('ul > li > a').at(4).trigger('click') // navbar.findAll('ul > li > a').at(4).trigger('click')
// await flushPromises() // await flushPromises()
// await jest.runAllTimers() // await jest.runAllTimers()
// await flushPromises() // await flushPromises()
// expect(wrapper.findComponent(RouterLinkStub).props().to).toBe('/activity') // expect(wrapper.findComponent(RouterLinkStub).props().to).toBe('/activity')
//}) // })
}) })
}) })
}) })

View File

@ -9,10 +9,10 @@
<b-nav-item href="#!" to="/transactions"> <b-nav-item href="#!" to="/transactions">
<b-nav-text class="p-0 text-lg text-muted">{{ $t('transactions') }}</b-nav-text> <b-nav-text class="p-0 text-lg text-muted">{{ $t('transactions') }}</b-nav-text>
</b-nav-item> </b-nav-item>
<!--
<b-nav-item href="#!" to="/profile"> <b-nav-item href="#!" to="/profile">
<b-nav-text class="p-0 text-lg text-muted">{{ $t('site.navbar.my-profil') }}</b-nav-text> <b-nav-text class="p-0 text-lg text-muted">{{ $t('site.navbar.my-profil') }}</b-nav-text>
</b-nav-item> </b-nav-item>
<!--
<b-nav-item href="#!" to="/profileedit"> <b-nav-item href="#!" to="/profileedit">
<b-nav-text class="p-0 text-lg text-muted">{{ $t('site.navbar.settings') }}</b-nav-text> <b-nav-text class="p-0 text-lg text-muted">{{ $t('site.navbar.settings') }}</b-nav-text>
</b-nav-item> </b-nav-item>
@ -32,6 +32,7 @@
:balance="balance" :balance="balance"
:gdt-balance="GdtBalance" :gdt-balance="GdtBalance"
:transactions="transactions" :transactions="transactions"
:transactionCount="transactionCount"
@update-balance="updateBalance" @update-balance="updateBalance"
@update-transactions="updateTransactions" @update-transactions="updateTransactions"
></router-view> ></router-view>
@ -46,12 +47,19 @@ import PerfectScrollbar from 'perfect-scrollbar'
import 'perfect-scrollbar/css/perfect-scrollbar.css' import 'perfect-scrollbar/css/perfect-scrollbar.css'
import loginAPI from '../../apis/loginAPI' import loginAPI from '../../apis/loginAPI'
import DashboardNavbar from './DashboardNavbar.vue'
import ContentFooter from './ContentFooter.vue'
// import DashboardContent from './Content.vue';
import { FadeTransition } from 'vue2-transitions'
import communityAPI from '../../apis/communityAPI'
function hasElement(className) { function hasElement(className) {
return document.getElementsByClassName(className).length > 0 return document.getElementsByClassName(className).length > 0
} }
function initScrollbar(className) { function initScrollbar(className) {
if (hasElement(className)) { if (hasElement(className)) {
// eslint-disable-next-line no-new
new PerfectScrollbar(`.${className}`) new PerfectScrollbar(`.${className}`)
} else { } else {
// try to init it later in case this component is loaded async // try to init it later in case this component is loaded async
@ -61,12 +69,6 @@ function initScrollbar(className) {
} }
} }
import DashboardNavbar from './DashboardNavbar.vue'
import ContentFooter from './ContentFooter.vue'
// import DashboardContent from './Content.vue';
import { FadeTransition } from 'vue2-transitions'
import communityAPI from '../../apis/communityAPI'
export default { export default {
components: { components: {
DashboardNavbar, DashboardNavbar,
@ -80,28 +82,30 @@ export default {
GdtBalance: 0, GdtBalance: 0,
transactions: [], transactions: [],
bookedBalance: 0, bookedBalance: 0,
transactionCount: 0,
} }
}, },
methods: { methods: {
initScrollbar() { initScrollbar() {
let isWindows = navigator.platform.startsWith('Win') const isWindows = navigator.platform.startsWith('Win')
if (isWindows) { if (isWindows) {
initScrollbar('sidenav') initScrollbar('sidenav')
} }
}, },
async logout() { async logout() {
const result = await loginAPI.logout(this.$store.state.session_id) await loginAPI.logout(this.$store.state.sessionId)
// do we have to check success? // do we have to check success?
this.$store.dispatch('logout') this.$store.dispatch('logout')
this.$router.push('/login') this.$router.push('/login')
}, },
async updateTransactions() { async updateTransactions() {
const result = await communityAPI.transactions(this.$store.state.session_id) const result = await communityAPI.transactions(this.$store.state.sessionId)
if (result.success) { if (result.success) {
this.GdtBalance = Number(result.result.data.gdtSum) this.GdtBalance = Number(result.result.data.gdtSum)
this.transactions = result.result.data.transactions this.transactions = result.result.data.transactions
this.balance = Number(result.result.data.decay) this.balance = Number(result.result.data.decay)
this.bookedBalance = Number(result.result.data.balance) this.bookedBalance = Number(result.result.data.balance)
this.transactionCount = result.result.data.count
} else { } else {
// what to do when loading balance fails? // what to do when loading balance fails?
} }

View File

@ -4,7 +4,7 @@
<div class="header py-1 py-lg-1 pt-lg-3"> <div class="header py-1 py-lg-1 pt-lg-3">
<b-container> <b-container>
<div class="header-body text-center mb-3"> <div class="header-body text-center mb-3">
<a href="/login" to="/login"> <a href="login" to="login">
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col-sm-12 col-md-12 mt-5 mb-5"> <div class="col-sm-12 col-md-12 mt-5 mb-5">

View File

@ -6,7 +6,7 @@ const localVue = global.localVue
describe('AccountOverview', () => { describe('AccountOverview', () => {
let wrapper let wrapper
let mocks = { const mocks = {
$t: jest.fn((t) => t), $t: jest.fn((t) => t),
} }

View File

@ -1,7 +1,7 @@
<template> <template>
<div> <div>
<base-header class="pb-4 pt-2 bg-transparent"></base-header> <base-header class="pb-4 pt-2 bg-transparent"></base-header>
<b-container fluid class="p-2"> <b-container fluid class="p-2 mt-5">
<gdd-status v-if="showTransactionList" :balance="balance" :gdt-balance="GdtBalance" /> <gdd-status v-if="showTransactionList" :balance="balance" :gdt-balance="GdtBalance" />
<br /> <br />
<gdd-send <gdd-send
@ -15,8 +15,11 @@
v-if="showTransactionList" v-if="showTransactionList"
:transactions="transactions" :transactions="transactions"
:max="5" :max="5"
:timestamp="timestamp"
:transactionCount="transactionCount"
@update-transactions="updateTransactions" @update-transactions="updateTransactions"
/> />
<gdd-table-footer :count="transactionCount" />
</b-container> </b-container>
</div> </div>
</template> </template>
@ -24,12 +27,20 @@
import GddStatus from './AccountOverview/GddStatus.vue' import GddStatus from './AccountOverview/GddStatus.vue'
import GddSend from './AccountOverview/GddSend.vue' import GddSend from './AccountOverview/GddSend.vue'
import GddTable from './AccountOverview/GddTable.vue' import GddTable from './AccountOverview/GddTable.vue'
import GddTableFooter from './AccountOverview/GddTableFooter.vue'
export default { export default {
name: 'Overview', name: 'Overview',
components: {
GddStatus,
GddSend,
GddTable,
GddTableFooter,
},
data() { data() {
return { return {
showTransactionList: true, showTransactionList: true,
timestamp: Date.now(),
} }
}, },
props: { props: {
@ -38,11 +49,7 @@ export default {
transactions: { transactions: {
default: () => [], default: () => [],
}, },
}, transactionCount: { type: Number, default: 0 },
components: {
GddStatus,
GddSend,
GddTable,
}, },
methods: { methods: {
toggleShowList(bool) { toggleShowList(bool) {

View File

@ -102,7 +102,7 @@ export default {
created() {}, created() {},
watch: { watch: {
$form: function () { $form: function () {
stunden(this.form) this.stunden(this.form)
}, },
}, },
mounted() {}, mounted() {},
@ -133,16 +133,16 @@ export default {
}, },
deleteNewMessage: function (event) { deleteNewMessage: function (event) {
this.form.splice(event, null) this.form.splice(event, null)
this.messages.splice(index, 1) this.messages.splice(this.index, 1)
this.index-- this.index--
}, },
submitForm: function (e) { submitForm: function (e) {
//console.log('submitForm') // console.log('submitForm')
this.messages = [{ DaysNumber: '', TextDecoded: '' }] this.messages = [{ DaysNumber: '', TextDecoded: '' }]
this.submitted = true this.submitted = true
}, },
textFocus() { textFocus() {
//console.log('textFocus TODO') // console.log('textFocus TODO')
}, },
newWorkForm() { newWorkForm() {
this.formular = ` this.formular = `

View File

@ -7,18 +7,18 @@ const localVue = global.localVue
describe('GddSend', () => { describe('GddSend', () => {
let wrapper let wrapper
let state = { const state = {
user: { user: {
balance: 1234, balance: 1234,
balance_gdt: 9876, balance_gdt: 9876,
}, },
} }
let store = new Vuex.Store({ const store = new Vuex.Store({
state, state,
}) })
let mocks = { const mocks = {
// $n: jest.fn((n) => n), // $n: jest.fn((n) => n),
$t: jest.fn((t) => t), $t: jest.fn((t) => t),
$moment: jest.fn((m) => ({ $moment: jest.fn((m) => ({

View File

@ -154,7 +154,7 @@
</b-list-group-item> </b-list-group-item>
<b-list-group-item class="d-flex justify-content-between align-items-center"> <b-list-group-item class="d-flex justify-content-between align-items-center">
{{ ajaxCreateData.memo }} {{ ajaxCreateData.memo ? ajaxCreateData.memo : '-' }}
<b-badge variant="primary" pill>{{ $t('form.message') }}</b-badge> <b-badge variant="primary" pill>{{ $t('form.message') }}</b-badge>
</b-list-group-item> </b-list-group-item>
<b-list-group-item class="d-flex justify-content-between align-items-center"> <b-list-group-item class="d-flex justify-content-between align-items-center">
@ -240,7 +240,7 @@ export default {
this.scan = false this.scan = false
}, },
async onSubmit() { async onSubmit() {
//event.preventDefault() // event.preventDefault()
this.ajaxCreateData.email = this.form.email this.ajaxCreateData.email = this.form.email
this.ajaxCreateData.amount = this.form.amount this.ajaxCreateData.amount = this.form.amount
const now = new Date(Date.now()).toISOString() const now = new Date(Date.now()).toISOString()
@ -252,7 +252,7 @@ export default {
}, },
async sendTransaction() { async sendTransaction() {
const result = await communityAPI.send( const result = await communityAPI.send(
this.$store.state.session_id, this.$store.state.sessionId,
this.ajaxCreateData.email, this.ajaxCreateData.email,
this.ajaxCreateData.amount, this.ajaxCreateData.amount,
this.ajaxCreateData.memo, this.ajaxCreateData.memo,

View File

@ -6,11 +6,11 @@ const localVue = global.localVue
describe('GddStatus', () => { describe('GddStatus', () => {
let wrapper let wrapper
let mocks = { const mocks = {
$n: jest.fn((n) => n), $n: jest.fn((n) => n),
} }
let propsData = { const propsData = {
balance: 1234, balance: 1234,
GdtBalance: 9876, GdtBalance: 9876,
} }

View File

@ -1,7 +1,7 @@
<template> <template>
<div> <div>
<b-row> <b-row>
<b-col col="6"> <b-col>
<stats-card <stats-card
type="gradient-red" type="gradient-red"
sub-title="balance_gdd" sub-title="balance_gdd"
@ -11,7 +11,7 @@
{{ $n(balance) }} GDD {{ $n(balance) }} GDD
</stats-card> </stats-card>
</b-col> </b-col>
<b-col col="6"> <b-col>
<stats-card <stats-card
type="gradient-orange" type="gradient-orange"
sub-title="balance_gdt" sub-title="balance_gdt"

View File

@ -88,15 +88,10 @@
</b-card> </b-card>
</b-collapse> </b-collapse>
</b-list-group-item> </b-list-group-item>
<b-list-group-item v-show="this.$route.path == '/overview'"> <b-list-group-item>
<b-alert v-if="transactions.length === 0" show variant="secondary"> <b-alert v-if="transactions.length === 0" show variant="secondary">
<span class="alert-text">{{ $t('transaction.nullTransactions') }}</span> <span class="alert-text">{{ $t('transaction.nullTransactions') }}</span>
</b-alert> </b-alert>
<router-link
v-else-if="transactions.length > 5"
to="/transactions"
v-html="$t('transaction.show_all', { count: count })"
></router-link>
</b-list-group-item> </b-list-group-item>
</b-list-group> </b-list-group>
</div> </div>
@ -108,37 +103,25 @@ export default {
props: { props: {
transactions: { default: [] }, transactions: { default: [] },
max: { type: Number, default: 25 }, max: { type: Number, default: 25 },
timestamp: { type: Number, default: 0 },
transactionCount: { type: Number, default: 0 },
}, },
data() { data() {
return { return {
form: [], form: [],
fields: ['balance', 'date', 'memo', 'name', 'transaction_id', 'type', 'details'], fields: ['balance', 'date', 'memo', 'name', 'transaction_id', 'type', 'details'],
items: [], items: [],
count: 0,
} }
}, },
created() { watch: {
this.$emit('change-transactions') timestamp: {
}, immediate: true,
computed: { handler: 'updateTransactions',
filteredItems() {
return this.ojectToArray(this.items).reverse()
}, },
}, },
methods: { methods: {
ojectToArray(obj) { updateTransactions() {
let result = new Array(Object.keys(obj).length) this.$emit('update-transactions')
Object.entries(obj).forEach((entry) => {
const [key, value] = entry
result[key] = value
})
return result
},
rowClass(item, type) {
if (!item || type !== 'row') return
if (item.type === 'receive') return 'table-success'
if (item.type === 'send') return 'table-warning'
if (item.type === 'creation') return 'table-primary'
}, },
}, },
} }

View File

@ -0,0 +1,21 @@
<template>
<div>
<b-list-group>
<b-list-group-item v-if="count > 5">
<router-link
to="/transactions"
v-html="$t('transaction.show_all', { count: count })"
></router-link>
</b-list-group-item>
</b-list-group>
</div>
</template>
<script>
export default {
name: 'GddTableFooter',
props: {
count: { count: Number },
},
}
</script>

View File

@ -68,6 +68,7 @@ export default {
if (item.status === 'earned') return 'table-primary' if (item.status === 'earned') return 'table-primary'
}, },
toogle(item) { toogle(item) {
// eslint-disable-next-line no-unused-vars
const temp = const temp =
'<b-collapse visible v-bind:id="item.id">xxx <small class="text-muted">porta</small></b-collapse>' '<b-collapse visible v-bind:id="item.id">xxx <small class="text-muted">porta</small></b-collapse>'
}, },

View File

@ -9,22 +9,22 @@ const localVue = global.localVue
describe('Login', () => { describe('Login', () => {
let wrapper let wrapper
let mocks = { const mocks = {
$i18n: { $i18n: {
locale: 'en', locale: 'en',
}, },
$t: jest.fn((t) => t), $t: jest.fn((t) => t),
} }
let state = { const state = {
loginfail: false, loginfail: false,
} }
let store = new Vuex.Store({ const store = new Vuex.Store({
state, state,
}) })
let stubs = { const stubs = {
RouterLink: RouterLinkStub, RouterLink: RouterLinkStub,
} }

View File

@ -44,24 +44,14 @@
v-model="model.password" v-model="model.password"
></base-input> ></base-input>
<b-alert v-show="loginfail" show variant="warning"> <b-alert v-show="loginfail" show dismissible variant="warning">
<span class="alert-text bv-example-row"> <span class="alert-text bv-example-row">
<b-row> <b-row>
<b-col class="col-9 text-left"> <b-col class="col-9 text-left text-dark">
<strong> <strong>
Leider konnten wir keinen Account finden mit diesen Daten! Leider konnten wir keinen Account finden mit diesen Daten!
</strong> </strong>
</b-col> </b-col>
<b-col class="text-right">
<a @click="closeAlert">
<div>
<b-icon-exclamation-triangle-fill
class="h2 mb-0"
></b-icon-exclamation-triangle-fill>
<b-icon-x class="h1 pl-2"></b-icon-x>
</div>
</a>
</b-col>
</b-row> </b-row>
</span> </span>
</b-alert> </b-alert>
@ -112,13 +102,15 @@ export default {
}, },
methods: { methods: {
async onSubmit() { async onSubmit() {
let loader = this.$loading.show({ // error info ausschalten
this.loginfail = false
const loader = this.$loading.show({
container: this.$refs.submitButton, container: this.$refs.submitButton,
}) })
const result = await loginAPI.login(this.model.email, this.model.password) const result = await loginAPI.login(this.model.email, this.model.password)
if (result.success) { if (result.success) {
this.$store.dispatch('login', { this.$store.dispatch('login', {
session_id: result.result.data.session_id, sessionId: result.result.data.session_id,
email: this.model.email, email: this.model.email,
}) })
this.$router.push('/overview') this.$router.push('/overview')
@ -128,10 +120,6 @@ export default {
this.loginfail = true this.loginfail = true
} }
}, },
closeAlert() {
loader.hide()
this.loginfail = false
},
}, },
} }
</script> </script>

View File

@ -9,22 +9,22 @@ const localVue = global.localVue
describe('Register', () => { describe('Register', () => {
let wrapper let wrapper
let mocks = { const mocks = {
$i18n: { $i18n: {
locale: 'en', locale: 'en',
}, },
$t: jest.fn((t) => t), $t: jest.fn((t) => t),
} }
let state = { const state = {
// loginfail: false, // loginfail: false,
} }
let store = new Vuex.Store({ const store = new Vuex.Store({
state, state,
}) })
let stubs = { const stubs = {
RouterLink: RouterLinkStub, RouterLink: RouterLinkStub,
} }

View File

@ -191,7 +191,7 @@ export default {
) )
if (result.success) { if (result.success) {
this.$store.dispatch('login', { this.$store.dispatch('login', {
session_id: result.result.data.session_id, sessionId: result.result.data.session_id,
email: this.model.email, email: this.model.email,
}) })
this.model.email = '' this.model.email = ''
@ -232,8 +232,8 @@ export default {
return this.model.email !== '' return this.model.email !== ''
}, },
passwordValidation() { passwordValidation() {
let errors = [] const errors = []
for (let condition of this.rules) { for (const condition of this.rules) {
if (!condition.regex.test(this.password)) { if (!condition.regex.test(this.password)) {
errors.push(condition.message) errors.push(condition.message)
} }

View File

@ -11,9 +11,9 @@ const router = new VueRouter({ routes })
describe('ResetPassword', () => { describe('ResetPassword', () => {
let wrapper let wrapper
let emailVerification = jest.fn() const emailVerification = jest.fn()
let mocks = { const mocks = {
$i18n: { $i18n: {
locale: 'en', locale: 'en',
}, },
@ -49,13 +49,13 @@ describe('ResetPassword', () => {
expect(wrapper.find('div.resetpwd-form').exists()).toBeTruthy() expect(wrapper.find('div.resetpwd-form').exists()).toBeTruthy()
}) })
//describe('Register header', () => { // describe('Register header', () => {
// it('has a welcome message', () => { // it('has a welcome message', () => {
// expect(wrapper.find('div.header').text()).toBe('site.signup.title site.signup.subtitle') // expect(wrapper.find('div.header').text()).toBe('site.signup.title site.signup.subtitle')
// }) // })
//}) // })
//describe('links', () => { // describe('links', () => {
// it('has a link "Back"', () => { // it('has a link "Back"', () => {
// expect(wrapper.findAllComponents(RouterLinkStub).at(0).text()).toEqual('back') // expect(wrapper.findAllComponents(RouterLinkStub).at(0).text()).toEqual('back')
// }) // })
@ -63,9 +63,9 @@ describe('ResetPassword', () => {
// it('links to /login when clicking "Back"', () => { // it('links to /login when clicking "Back"', () => {
// expect(wrapper.findAllComponents(RouterLinkStub).at(0).props().to).toBe('/login') // expect(wrapper.findAllComponents(RouterLinkStub).at(0).props().to).toBe('/login')
// }) // })
//}) // })
//describe('Register form', () => { // describe('Register form', () => {
// it('has a register form', () => { // it('has a register form', () => {
// expect(wrapper.find('form').exists()).toBeTruthy() // expect(wrapper.find('form').exists()).toBeTruthy()
// }) // })
@ -108,7 +108,7 @@ describe('ResetPassword', () => {
// }) // })
// //TODO test different invalid password combinations // //TODO test different invalid password combinations
//}) // })
// TODO test submit button // TODO test submit button
}) })

View File

@ -35,11 +35,8 @@
></b-form-input> ></b-form-input>
<b-input-group-append> <b-input-group-append>
<b-button variant="outline-primary"> <b-button variant="outline-primary" @click="togglePasswordVisibility">
<b-icon <b-icon :icon="passwordVisible ? 'eye' : 'eye-slash'" />
:icon="passwordVisible ? 'eye' : 'eye-slash'"
@click="togglePasswordVisibility"
/>
</b-button> </b-button>
</b-input-group-append> </b-input-group-append>
</b-input-group> </b-input-group>
@ -104,7 +101,7 @@ export default {
passwordVisible: false, passwordVisible: false,
submitted: false, submitted: false,
authenticated: false, authenticated: false,
session_id: null, sessionId: null,
email: null, email: null,
} }
}, },
@ -113,7 +110,7 @@ export default {
this.passwordVisible = !this.passwordVisible this.passwordVisible = !this.passwordVisible
}, },
async onSubmit() { async onSubmit() {
const result = await loginAPI.changePassword(this.session_id, this.email, this.password) const result = await loginAPI.changePassword(this.sessionId, this.email, this.password)
if (result.success) { if (result.success) {
this.password = '' this.password = ''
this.$router.push('/thx') this.$router.push('/thx')
@ -126,7 +123,7 @@ export default {
const result = await loginAPI.loginViaEmailVerificationCode(optin) const result = await loginAPI.loginViaEmailVerificationCode(optin)
if (result.success) { if (result.success) {
this.authenticated = true this.authenticated = true
this.session_id = result.result.data.session_id this.sessionId = result.result.data.session_id
this.email = result.result.data.user.email this.email = result.result.data.user.email
} else { } else {
alert(result.result.message) alert(result.result.message)
@ -141,8 +138,8 @@ export default {
return this.password !== '' && this.checkPassword !== '' return this.password !== '' && this.checkPassword !== ''
}, },
passwordValidation() { passwordValidation() {
let errors = [] const errors = []
for (let condition of this.rules) { for (const condition of this.rules) {
if (!condition.regex.test(this.password)) { if (!condition.regex.test(this.password)) {
errors.push(condition.message) errors.push(condition.message)
} }

View File

@ -43,11 +43,11 @@ export default {
}, },
onFileChange(fieldName, file) { onFileChange(fieldName, file) {
const { maxSize } = this const { maxSize } = this
let imageFile = file[0] const imageFile = file[0]
//check if user actually selected a file // check if user actually selected a file
if (file.length > 0) { if (file.length > 0) {
let size = imageFile.size / maxSize / maxSize const size = imageFile.size / maxSize / maxSize
if (!imageFile.type.match('image.*')) { if (!imageFile.type.match('image.*')) {
// check whether the upload is an image // check whether the upload is an image
this.errorDialog = true this.errorDialog = true
@ -58,8 +58,8 @@ export default {
this.errorText = 'Your file is too big! Please select an image under 1MB' this.errorText = 'Your file is too big! Please select an image under 1MB'
} else { } else {
// Append file into FormData & turn file into image URL // Append file into FormData & turn file into image URL
let formData = new FormData() const formData = new FormData()
let imageURL = URL.createObjectURL(imageFile) const imageURL = URL.createObjectURL(imageFile)
formData.append(fieldName, imageFile) formData.append(fieldName, imageFile)
// Emit FormData & image URL to the parent component // Emit FormData & image URL to the parent component
this.$emit('input', { formData, imageURL }) this.$emit('input', { formData, imageURL })

View File

@ -7,12 +7,14 @@
<b-container fluid class="mt--6"> <b-container fluid class="mt--6">
<b-row> <b-row>
<b-col class="order-xl-1"> <b-col class="order-xl-1">
<gdd-table :transactions="transactions" @update-transactions="updateTransactions" /> <gdd-table
:timestamp="timestamp"
:transactionCount="transactionCount"
:transactions="transactions"
@update-transactions="updateTransactions"
/>
</b-col> </b-col>
</b-row> </b-row>
<b-row class="text-center mb-6" v-if="transactions.length == 0">
<b-col class="h2">{{ $t('transaction.nullTransactions') }}</b-col>
</b-row>
</b-container> </b-container>
</div> </div>
</template> </template>
@ -27,6 +29,12 @@ export default {
transactions: { transactions: {
default: [], default: [],
}, },
transactionCount: { type: Number, default: 0 },
},
data() {
return {
timestamp: Date.now(),
}
}, },
methods: { methods: {
updateTransactions() { updateTransactions() {

View File

@ -2,9 +2,9 @@ import { createLocalVue } from '@vue/test-utils'
import ElementUI from 'element-ui' import ElementUI from 'element-ui'
import { BootstrapVue, IconsPlugin } from 'bootstrap-vue' import { BootstrapVue, IconsPlugin } from 'bootstrap-vue'
import Vuex from 'vuex' import Vuex from 'vuex'
import { ValidationProvider, ValidationObserver } from 'vee-validate' import { ValidationProvider, ValidationObserver, extend } from 'vee-validate'
import * as rules from 'vee-validate/dist/rules' import * as rules from 'vee-validate/dist/rules'
import { extend } from 'vee-validate'
import { messages } from 'vee-validate/dist/locale/en.json' import { messages } from 'vee-validate/dist/locale/en.json'
import BaseInput from '@/components/Inputs/BaseInput.vue' import BaseInput from '@/components/Inputs/BaseInput.vue'
import BaseButton from '@/components/BaseButton.vue' import BaseButton from '@/components/BaseButton.vue'

View File

@ -23,6 +23,7 @@ module.exports = {
assets: path.join(__dirname, 'src/assets'), assets: path.join(__dirname, 'src/assets'),
}, },
}, },
// eslint-disable-next-line new-cap
plugins: [new dotenv()], plugins: [new dotenv()],
}, },
css: { css: {

View File

@ -2,6 +2,13 @@
# yarn lockfile v1 # yarn lockfile v1
"@babel/code-frame@7.12.11":
version "7.12.11"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f"
integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==
dependencies:
"@babel/highlight" "^7.10.4"
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13": "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13":
version "7.12.13" version "7.12.13"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658"
@ -356,6 +363,11 @@
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed"
integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==
"@babel/helper-validator-identifier@^7.14.0":
version "7.14.0"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288"
integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==
"@babel/helper-validator-option@^7.12.17": "@babel/helper-validator-option@^7.12.17":
version "7.12.17" version "7.12.17"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831"
@ -389,6 +401,15 @@
"@babel/traverse" "^7.13.0" "@babel/traverse" "^7.13.0"
"@babel/types" "^7.13.0" "@babel/types" "^7.13.0"
"@babel/highlight@^7.10.4":
version "7.14.0"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.0.tgz#3197e375711ef6bf834e67d0daec88e4f46113cf"
integrity sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==
dependencies:
"@babel/helper-validator-identifier" "^7.14.0"
chalk "^2.0.0"
js-tokens "^4.0.0"
"@babel/highlight@^7.12.13": "@babel/highlight@^7.12.13":
version "7.12.13" version "7.12.13"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.12.13.tgz#8ab538393e00370b26271b01fa08f7f27f2e795c" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.12.13.tgz#8ab538393e00370b26271b01fa08f7f27f2e795c"
@ -1218,6 +1239,21 @@
exec-sh "^0.3.2" exec-sh "^0.3.2"
minimist "^1.2.0" minimist "^1.2.0"
"@eslint/eslintrc@^0.4.0":
version "0.4.0"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547"
integrity sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==
dependencies:
ajv "^6.12.4"
debug "^4.1.1"
espree "^7.3.0"
globals "^12.1.0"
ignore "^4.0.6"
import-fresh "^3.2.1"
js-yaml "^3.13.1"
minimatch "^3.0.4"
strip-json-comments "^3.1.1"
"@hapi/address@2.x.x": "@hapi/address@2.x.x":
version "2.1.4" version "2.1.4"
resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5"
@ -2364,7 +2400,7 @@ acorn-jsx@^3.0.0:
dependencies: dependencies:
acorn "^3.0.4" acorn "^3.0.4"
acorn-jsx@^5.0.0, acorn-jsx@^5.2.0: acorn-jsx@^5.2.0, acorn-jsx@^5.3.1:
version "5.3.1" version "5.3.1"
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b"
integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==
@ -2389,12 +2425,12 @@ acorn@^5.5.0, acorn@^5.5.3:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e"
integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==
acorn@^6.0.1, acorn@^6.0.7, acorn@^6.1.1, acorn@^6.4.1: acorn@^6.0.1, acorn@^6.1.1, acorn@^6.4.1:
version "6.4.2" version "6.4.2"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==
acorn@^7.1.0, acorn@^7.1.1: acorn@^7.1.0, acorn@^7.1.1, acorn@^7.4.0:
version "7.4.1" version "7.4.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
@ -2434,7 +2470,7 @@ ajv@^5.2.3, ajv@^5.3.0:
fast-json-stable-stringify "^2.0.0" fast-json-stable-stringify "^2.0.0"
json-schema-traverse "^0.3.0" json-schema-traverse "^0.3.0"
ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.9.1: ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4:
version "6.12.6" version "6.12.6"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
@ -2444,6 +2480,16 @@ ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.9.1:
json-schema-traverse "^0.4.1" json-schema-traverse "^0.4.1"
uri-js "^4.2.2" uri-js "^4.2.2"
ajv@^8.0.1:
version "8.2.0"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.2.0.tgz#c89d3380a784ce81b2085f48811c4c101df4c602"
integrity sha512-WSNGFuyWd//XO8n/m/EaOlNLtO0yL8EXT/74LqT4khdhpZjP7lkj/kT5uwRmGitKEVp/Oj7ZUHeGfPtgHhQ5CA==
dependencies:
fast-deep-equal "^3.1.1"
json-schema-traverse "^1.0.0"
require-from-string "^2.0.2"
uri-js "^4.2.2"
alphanum-sort@^1.0.0: alphanum-sort@^1.0.0:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
@ -2459,7 +2505,12 @@ ansi-colors@^3.0.0:
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf"
integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==
ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: ansi-colors@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
ansi-escapes@^3.0.0:
version "3.2.0" version "3.2.0"
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
@ -2678,6 +2729,11 @@ astral-regex@^1.0.0:
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
astral-regex@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
async-each@^1.0.1: async-each@^1.0.1:
version "1.0.3" version "1.0.3"
resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
@ -3640,11 +3696,6 @@ chardet@^0.4.0:
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=
chardet@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
chart.js@^2.9.3: chart.js@^2.9.3:
version "2.9.4" version "2.9.4"
resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-2.9.4.tgz#0827f9563faffb2dc5c06562f8eb10337d5b9684" resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-2.9.4.tgz#0827f9563faffb2dc5c06562f8eb10337d5b9684"
@ -4229,7 +4280,7 @@ cross-spawn@^5.0.1, cross-spawn@^5.1.0:
shebang-command "^1.2.0" shebang-command "^1.2.0"
which "^1.2.9" which "^1.2.9"
cross-spawn@^6.0.0, cross-spawn@^6.0.5: cross-spawn@^6.0.0:
version "6.0.5" version "6.0.5"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
@ -4240,7 +4291,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5:
shebang-command "^1.2.0" shebang-command "^1.2.0"
which "^1.2.9" which "^1.2.9"
cross-spawn@^7.0.0: cross-spawn@^7.0.0, cross-spawn@^7.0.2:
version "7.0.3" version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
@ -4860,7 +4911,7 @@ deep-equal@^1.0.1:
object-keys "^1.1.1" object-keys "^1.1.1"
regexp.prototype.flags "^1.2.0" regexp.prototype.flags "^1.2.0"
deep-is@~0.1.3: deep-is@^0.1.3, deep-is@~0.1.3:
version "0.1.3" version "0.1.3"
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
@ -5316,6 +5367,13 @@ enhanced-resolve@^4.5.0:
memory-fs "^0.5.0" memory-fs "^0.5.0"
tapable "^1.0.0" tapable "^1.0.0"
enquirer@^2.3.5:
version "2.3.6"
resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
dependencies:
ansi-colors "^4.1.1"
entities@^1.1.1: entities@^1.1.1:
version "1.1.2" version "1.1.2"
resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
@ -5646,11 +5704,6 @@ eslint-plugin-promise@^4.3.1:
resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz#61485df2a359e03149fdafc0a68b0e030ad2ac45" resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz#61485df2a359e03149fdafc0a68b0e030ad2ac45"
integrity sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ== integrity sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==
eslint-plugin-standard@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-5.0.0.tgz#c43f6925d669f177db46f095ea30be95476b1ee4"
integrity sha512-eSIXPc9wBM4BrniMzJRBm2uoVuXz2EPa+NXPk2+itrVt+r5SbKFERx/IgrK/HmfjddyKVz2f+j+7gBRvu19xLg==
eslint-plugin-vue@^4.7.1: eslint-plugin-vue@^4.7.1:
version "4.7.1" version "4.7.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-4.7.1.tgz#c829b9fc62582c1897b5a0b94afd44ecca511e63" resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-4.7.1.tgz#c829b9fc62582c1897b5a0b94afd44ecca511e63"
@ -5684,7 +5737,7 @@ eslint-scope@^4.0.3:
esrecurse "^4.1.0" esrecurse "^4.1.0"
estraverse "^4.1.1" estraverse "^4.1.1"
eslint-scope@^5.0.0: eslint-scope@^5.0.0, eslint-scope@^5.1.1:
version "5.1.1" version "5.1.1"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
@ -5692,13 +5745,6 @@ eslint-scope@^5.0.0:
esrecurse "^4.3.0" esrecurse "^4.3.0"
estraverse "^4.1.1" estraverse "^4.1.1"
eslint-utils@^1.3.1:
version "1.4.3"
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==
dependencies:
eslint-visitor-keys "^1.1.0"
eslint-utils@^2.0.0, eslint-utils@^2.1.0: eslint-utils@^2.0.0, eslint-utils@^2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
@ -5706,7 +5752,7 @@ eslint-utils@^2.0.0, eslint-utils@^2.1.0:
dependencies: dependencies:
eslint-visitor-keys "^1.1.0" eslint-visitor-keys "^1.1.0"
eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
version "1.3.0" version "1.3.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
@ -5760,47 +5806,48 @@ eslint@^4.19.1:
table "4.0.2" table "4.0.2"
text-table "~0.2.0" text-table "~0.2.0"
eslint@^5.16.0: eslint@^7.25.0:
version "5.16.0" version "7.25.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.25.0.tgz#1309e4404d94e676e3e831b3a3ad2b050031eb67"
integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== integrity sha512-TVpSovpvCNpLURIScDRB6g5CYu/ZFq9GfX2hLNIV4dSBKxIWojeDODvYl3t0k0VtMxYeR8OXPCFE5+oHMlGfhw==
dependencies: dependencies:
"@babel/code-frame" "^7.0.0" "@babel/code-frame" "7.12.11"
ajv "^6.9.1" "@eslint/eslintrc" "^0.4.0"
chalk "^2.1.0" ajv "^6.10.0"
cross-spawn "^6.0.5" chalk "^4.0.0"
cross-spawn "^7.0.2"
debug "^4.0.1" debug "^4.0.1"
doctrine "^3.0.0" doctrine "^3.0.0"
eslint-scope "^4.0.3" enquirer "^2.3.5"
eslint-utils "^1.3.1" eslint-scope "^5.1.1"
eslint-visitor-keys "^1.0.0" eslint-utils "^2.1.0"
espree "^5.0.1" eslint-visitor-keys "^2.0.0"
esquery "^1.0.1" espree "^7.3.1"
esquery "^1.4.0"
esutils "^2.0.2" esutils "^2.0.2"
file-entry-cache "^5.0.1" file-entry-cache "^6.0.1"
functional-red-black-tree "^1.0.1" functional-red-black-tree "^1.0.1"
glob "^7.1.2" glob-parent "^5.0.0"
globals "^11.7.0" globals "^13.6.0"
ignore "^4.0.6" ignore "^4.0.6"
import-fresh "^3.0.0" import-fresh "^3.0.0"
imurmurhash "^0.1.4" imurmurhash "^0.1.4"
inquirer "^6.2.2" is-glob "^4.0.0"
js-yaml "^3.13.0" js-yaml "^3.13.1"
json-stable-stringify-without-jsonify "^1.0.1" json-stable-stringify-without-jsonify "^1.0.1"
levn "^0.3.0" levn "^0.4.1"
lodash "^4.17.11" lodash "^4.17.21"
minimatch "^3.0.4" minimatch "^3.0.4"
mkdirp "^0.5.1"
natural-compare "^1.4.0" natural-compare "^1.4.0"
optionator "^0.8.2" optionator "^0.9.1"
path-is-inside "^1.0.2"
progress "^2.0.0" progress "^2.0.0"
regexpp "^2.0.1" regexpp "^3.1.0"
semver "^5.5.1" semver "^7.2.1"
strip-ansi "^4.0.0" strip-ansi "^6.0.0"
strip-json-comments "^2.0.1" strip-json-comments "^3.1.0"
table "^5.2.3" table "^6.0.4"
text-table "^0.2.0" text-table "^0.2.0"
v8-compile-cache "^2.0.3"
esm@^3.2.13: esm@^3.2.13:
version "3.2.25" version "3.2.25"
@ -5815,15 +5862,6 @@ espree@^3.5.2, espree@^3.5.4:
acorn "^5.5.0" acorn "^5.5.0"
acorn-jsx "^3.0.0" acorn-jsx "^3.0.0"
espree@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a"
integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==
dependencies:
acorn "^6.0.7"
acorn-jsx "^5.0.0"
eslint-visitor-keys "^1.0.0"
espree@^6.2.1: espree@^6.2.1:
version "6.2.1" version "6.2.1"
resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a"
@ -5833,6 +5871,15 @@ espree@^6.2.1:
acorn-jsx "^5.2.0" acorn-jsx "^5.2.0"
eslint-visitor-keys "^1.1.0" eslint-visitor-keys "^1.1.0"
espree@^7.3.0, espree@^7.3.1:
version "7.3.1"
resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6"
integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==
dependencies:
acorn "^7.4.0"
acorn-jsx "^5.3.1"
eslint-visitor-keys "^1.3.0"
esprima@^3.1.3: esprima@^3.1.3:
version "3.1.3" version "3.1.3"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
@ -5843,7 +5890,7 @@ esprima@^4.0.0, esprima@^4.0.1:
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
esquery@^1.0.0, esquery@^1.0.1, esquery@^1.4.0: esquery@^1.0.0, esquery@^1.4.0:
version "1.4.0" version "1.4.0"
resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==
@ -6096,15 +6143,6 @@ external-editor@^2.0.4:
iconv-lite "^0.4.17" iconv-lite "^0.4.17"
tmp "^0.0.33" tmp "^0.0.33"
external-editor@^3.0.3:
version "3.1.0"
resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
dependencies:
chardet "^0.7.0"
iconv-lite "^0.4.24"
tmp "^0.0.33"
extglob@^2.0.4: extglob@^2.0.4:
version "2.0.4" version "2.0.4"
resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
@ -6195,7 +6233,7 @@ fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0:
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
fast-levenshtein@~2.0.6: fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
version "2.0.6" version "2.0.6"
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
@ -6246,12 +6284,12 @@ file-entry-cache@^2.0.0:
flat-cache "^1.2.1" flat-cache "^1.2.1"
object-assign "^4.0.1" object-assign "^4.0.1"
file-entry-cache@^5.0.1: file-entry-cache@^6.0.1:
version "5.0.1" version "6.0.1"
resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
dependencies: dependencies:
flat-cache "^2.0.1" flat-cache "^3.0.4"
file-loader@^3.0.1: file-loader@^3.0.1:
version "3.0.1" version "3.0.1"
@ -6385,14 +6423,13 @@ flat-cache@^1.2.1:
rimraf "~2.6.2" rimraf "~2.6.2"
write "^0.2.1" write "^0.2.1"
flat-cache@^2.0.1: flat-cache@^3.0.4:
version "2.0.1" version "3.0.4"
resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
dependencies: dependencies:
flatted "^2.0.0" flatted "^3.1.0"
rimraf "2.6.3" rimraf "^3.0.2"
write "1.0.3"
flat@^5.0.0: flat@^5.0.0:
version "5.0.2" version "5.0.2"
@ -6404,10 +6441,10 @@ flatpickr@^4.5.7, flatpickr@^4.6.6:
resolved "https://registry.yarnpkg.com/flatpickr/-/flatpickr-4.6.9.tgz#9a13383e8a6814bda5d232eae3fcdccb97dc1499" resolved "https://registry.yarnpkg.com/flatpickr/-/flatpickr-4.6.9.tgz#9a13383e8a6814bda5d232eae3fcdccb97dc1499"
integrity sha512-F0azNNi8foVWKSF+8X+ZJzz8r9sE1G4hl06RyceIaLvyltKvDl6vqk9Lm/6AUUCi5HWaIjiUbk7UpeE/fOXOpw== integrity sha512-F0azNNi8foVWKSF+8X+ZJzz8r9sE1G4hl06RyceIaLvyltKvDl6vqk9Lm/6AUUCi5HWaIjiUbk7UpeE/fOXOpw==
flatted@^2.0.0: flatted@^3.1.0:
version "2.0.2" version "3.1.1"
resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469"
integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==
flush-promises@^1.0.2: flush-promises@^1.0.2:
version "1.0.2" version "1.0.2"
@ -6648,7 +6685,7 @@ glob-parent@^3.1.0:
is-glob "^3.1.0" is-glob "^3.1.0"
path-dirname "^1.0.0" path-dirname "^1.0.0"
glob-parent@^5.1.0: glob-parent@^5.0.0, glob-parent@^5.1.0:
version "5.1.2" version "5.1.2"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
@ -6679,11 +6716,25 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, gl
once "^1.3.0" once "^1.3.0"
path-is-absolute "^1.0.0" path-is-absolute "^1.0.0"
globals@^11.0.1, globals@^11.1.0, globals@^11.7.0: globals@^11.0.1, globals@^11.1.0:
version "11.12.0" version "11.12.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
globals@^12.1.0:
version "12.4.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8"
integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==
dependencies:
type-fest "^0.8.1"
globals@^13.6.0:
version "13.8.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-13.8.0.tgz#3e20f504810ce87a8d72e55aecf8435b50f4c1b3"
integrity sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==
dependencies:
type-fest "^0.20.2"
globals@^9.18.0: globals@^9.18.0:
version "9.18.0" version "9.18.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
@ -7115,7 +7166,7 @@ iconv-lite@0.2:
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.2.11.tgz#1ce60a3a57864a292d1321ff4609ca4bb965adc8" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.2.11.tgz#1ce60a3a57864a292d1321ff4609ca4bb965adc8"
integrity sha1-HOYKOleGSiktEyH/RgnKS7llrcg= integrity sha1-HOYKOleGSiktEyH/RgnKS7llrcg=
iconv-lite@0.4, iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24: iconv-lite@0.4, iconv-lite@0.4.24, iconv-lite@^0.4.17:
version "0.4.24" version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@ -7181,7 +7232,7 @@ import-fresh@^2.0.0:
caller-path "^2.0.0" caller-path "^2.0.0"
resolve-from "^3.0.0" resolve-from "^3.0.0"
import-fresh@^3.0.0: import-fresh@^3.0.0, import-fresh@^3.2.1:
version "3.3.0" version "3.3.0"
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
@ -7287,25 +7338,6 @@ inquirer@^3.0.6:
strip-ansi "^4.0.0" strip-ansi "^4.0.0"
through "^2.3.6" through "^2.3.6"
inquirer@^6.2.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca"
integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==
dependencies:
ansi-escapes "^3.2.0"
chalk "^2.4.2"
cli-cursor "^2.1.0"
cli-width "^2.0.0"
external-editor "^3.0.3"
figures "^2.0.0"
lodash "^4.17.12"
mute-stream "0.0.7"
run-async "^2.2.0"
rxjs "^6.4.0"
string-width "^2.1.0"
strip-ansi "^5.1.0"
through "^2.3.6"
internal-ip@^4.3.0: internal-ip@^4.3.0:
version "4.3.0" version "4.3.0"
resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907"
@ -8626,7 +8658,7 @@ js-tokens@^3.0.2:
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.9.1: js-yaml@^3.13.1, js-yaml@^3.9.1:
version "3.14.1" version "3.14.1"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
@ -8765,6 +8797,11 @@ json-schema-traverse@^0.4.1:
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
json-schema-traverse@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
json-schema@0.2.3: json-schema@0.2.3:
version "0.2.3" version "0.2.3"
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
@ -8888,6 +8925,14 @@ levn@^0.3.0, levn@~0.3.0:
prelude-ls "~1.1.2" prelude-ls "~1.1.2"
type-check "~0.3.2" type-check "~0.3.2"
levn@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
dependencies:
prelude-ls "^1.2.1"
type-check "~0.4.0"
lines-and-columns@^1.1.6: lines-and-columns@^1.1.6:
version "1.1.6" version "1.1.6"
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
@ -9048,12 +9093,17 @@ lodash.transform@^4.6.0:
resolved "https://registry.yarnpkg.com/lodash.transform/-/lodash.transform-4.6.0.tgz#12306422f63324aed8483d3f38332b5f670547a0" resolved "https://registry.yarnpkg.com/lodash.transform/-/lodash.transform-4.6.0.tgz#12306422f63324aed8483d3f38332b5f670547a0"
integrity sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A= integrity sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=
lodash.truncate@^4.4.2:
version "4.4.2"
resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193"
integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=
lodash.uniq@^4.5.0: lodash.uniq@^4.5.0:
version "4.5.0" version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@~4.17.10: lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@~4.17.10:
version "4.17.21" version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
@ -9972,6 +10022,18 @@ optionator@^0.8.1, optionator@^0.8.2:
type-check "~0.3.2" type-check "~0.3.2"
word-wrap "~1.2.3" word-wrap "~1.2.3"
optionator@^0.9.1:
version "0.9.1"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
dependencies:
deep-is "^0.1.3"
fast-levenshtein "^2.0.6"
levn "^0.4.1"
prelude-ls "^1.2.1"
type-check "^0.4.0"
word-wrap "^1.2.3"
ora@^3.4.0: ora@^3.4.0:
version "3.4.0" version "3.4.0"
resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318"
@ -10780,6 +10842,11 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.27, postcss@^7.0.3
source-map "^0.6.1" source-map "^0.6.1"
supports-color "^6.1.0" supports-color "^6.1.0"
prelude-ls@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
prelude-ls@~1.1.2: prelude-ls@~1.1.2:
version "1.1.2" version "1.1.2"
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
@ -11264,12 +11331,7 @@ regexpp@^1.0.1:
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab"
integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw== integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==
regexpp@^2.0.1: regexpp@^3.0.0, regexpp@^3.1.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
regexpp@^3.0.0:
version "3.1.0" version "3.1.0"
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"
integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==
@ -11383,6 +11445,11 @@ require-directory@^2.1.1:
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
require-from-string@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
require-main-filename@^2.0.0: require-main-filename@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
@ -11503,20 +11570,20 @@ rimraf@2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3:
dependencies: dependencies:
glob "^7.1.3" glob "^7.1.3"
rimraf@2.6.3, rimraf@~2.6.2: rimraf@^3.0.0, rimraf@^3.0.2:
version "2.6.3"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
dependencies:
glob "^7.1.3"
rimraf@^3.0.0:
version "3.0.2" version "3.0.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
dependencies: dependencies:
glob "^7.1.3" glob "^7.1.3"
rimraf@~2.6.2:
version "2.6.3"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
dependencies:
glob "^7.1.3"
ripemd160@^2.0.0, ripemd160@^2.0.1: ripemd160@^2.0.0, ripemd160@^2.0.1:
version "2.0.2" version "2.0.2"
resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
@ -11573,13 +11640,6 @@ rx-lite@*, rx-lite@^4.0.8:
resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=
rxjs@^6.4.0:
version "6.6.3"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552"
integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==
dependencies:
tslib "^1.9.0"
safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2" version "5.1.2"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
@ -11705,7 +11765,7 @@ selfsigned@^1.10.8:
dependencies: dependencies:
node-forge "^0.10.0" node-forge "^0.10.0"
"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0: "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0:
version "5.7.1" version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
@ -11720,6 +11780,13 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semve
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
semver@^7.2.1:
version "7.3.5"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
dependencies:
lru-cache "^6.0.0"
semver@^7.3.2: semver@^7.3.2:
version "7.3.4" version "7.3.4"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97"
@ -11928,14 +11995,14 @@ slice-ansi@1.0.0:
dependencies: dependencies:
is-fullwidth-code-point "^2.0.0" is-fullwidth-code-point "^2.0.0"
slice-ansi@^2.1.0: slice-ansi@^4.0.0:
version "2.1.0" version "4.0.0"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==
dependencies: dependencies:
ansi-styles "^3.2.0" ansi-styles "^4.0.0"
astral-regex "^1.0.0" astral-regex "^2.0.0"
is-fullwidth-code-point "^2.0.0" is-fullwidth-code-point "^3.0.0"
snapdragon-node@^2.0.1: snapdragon-node@^2.0.1:
version "2.1.1" version "2.1.1"
@ -12423,11 +12490,16 @@ strip-indent@^2.0.0:
resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68"
integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=
strip-json-comments@^2.0.0, strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: strip-json-comments@^2.0.0, strip-json-comments@~2.0.1:
version "2.0.1" version "2.0.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
stylehacks@^4.0.0: stylehacks@^4.0.0:
version "4.0.3" version "4.0.3"
resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5"
@ -12517,15 +12589,17 @@ table@4.0.2:
slice-ansi "1.0.0" slice-ansi "1.0.0"
string-width "^2.1.1" string-width "^2.1.1"
table@^5.2.3: table@^6.0.4:
version "5.4.6" version "6.7.0"
resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" resolved "https://registry.yarnpkg.com/table/-/table-6.7.0.tgz#26274751f0ee099c547f6cb91d3eff0d61d155b2"
integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== integrity sha512-SAM+5p6V99gYiiy2gT5ArdzgM1dLDed0nkrWmG6Fry/bUS/m9x83BwpJUOf1Qj/x2qJd+thL6IkIx7qPGRxqBw==
dependencies: dependencies:
ajv "^6.10.2" ajv "^8.0.1"
lodash "^4.17.14" lodash.clonedeep "^4.5.0"
slice-ansi "^2.1.0" lodash.truncate "^4.4.2"
string-width "^3.0.0" slice-ansi "^4.0.0"
string-width "^4.2.0"
strip-ansi "^6.0.0"
tapable@^1.0.0, tapable@^1.1.3: tapable@^1.0.0, tapable@^1.1.3:
version "1.1.3" version "1.1.3"
@ -12873,6 +12947,13 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0:
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
type-check@^0.4.0, type-check@~0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
dependencies:
prelude-ls "^1.2.1"
type-check@~0.3.2: type-check@~0.3.2:
version "0.3.2" version "0.3.2"
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
@ -12890,6 +12971,11 @@ type-fest@^0.11.0:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1"
integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==
type-fest@^0.20.2:
version "0.20.2"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
type-fest@^0.6.0: type-fest@^0.6.0:
version "0.6.0" version "0.6.0"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
@ -13148,6 +13234,11 @@ uuid@^8.3.0:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
v8-compile-cache@^2.0.3:
version "2.3.0"
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
v8-to-istanbul@^7.0.0: v8-to-istanbul@^7.0.0:
version "7.1.0" version "7.1.0"
resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz#5b95cef45c0f83217ec79f8fc7ee1c8b486aee07" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz#5b95cef45c0f83217ec79f8fc7ee1c8b486aee07"
@ -13728,7 +13819,7 @@ wide-align@^1.1.0:
dependencies: dependencies:
string-width "^1.0.2 || 2" string-width "^1.0.2 || 2"
word-wrap@~1.2.3: word-wrap@^1.2.3, word-wrap@~1.2.3:
version "1.2.3" version "1.2.3"
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
@ -13796,13 +13887,6 @@ write-file-atomic@^3.0.0:
signal-exit "^3.0.2" signal-exit "^3.0.2"
typedarray-to-buffer "^3.1.5" typedarray-to-buffer "^3.1.5"
write@1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
dependencies:
mkdirp "^0.5.1"
write@^0.2.1: write@^0.2.1:
version "0.2.1" version "0.2.1"
resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"