mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-02-25 18:45:27 -06:00
Experiment with forage store.
This commit is contained in:
parent
40bbed2a8b
commit
3be9493e9f
@ -35,6 +35,8 @@
|
|||||||
"icheck-bootstrap": "^3.0.1",
|
"icheck-bootstrap": "^3.0.1",
|
||||||
"jquery-ui": "^1.12.1",
|
"jquery-ui": "^1.12.1",
|
||||||
"leaflet": "^1.7.1",
|
"leaflet": "^1.7.1",
|
||||||
|
"localforage": "^1.9.0",
|
||||||
|
"localforage-memoryStorageDriver": "^0.9.2",
|
||||||
"overlayscrollbars": "^1.13.1",
|
"overlayscrollbars": "^1.13.1",
|
||||||
"sortablejs": "^1.13.0",
|
"sortablejs": "^1.13.0",
|
||||||
"v-calendar": "^2.3.0",
|
"v-calendar": "^2.3.0",
|
||||||
|
@ -33,11 +33,9 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
|
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header">
|
|
||||||
</div>
|
|
||||||
<div class="card-body p-0">
|
<div class="card-body p-0">
|
||||||
<b-table id="my-table" striped hover responsive="md" primary-key="id" :no-local-sorting="true"
|
<b-table id="my-table" striped hover responsive="md" primary-key="id" :no-local-sorting="false"
|
||||||
:items="itemsProvider" :fields="fields"
|
:items="accounts" :fields="fields"
|
||||||
:per-page="perPage"
|
:per-page="perPage"
|
||||||
sort-icon-left
|
sort-icon-left
|
||||||
ref="table"
|
ref="table"
|
||||||
@ -46,13 +44,14 @@
|
|||||||
:sort-by.sync="sortBy"
|
:sort-by.sync="sortBy"
|
||||||
:sort-desc.sync="sortDesc"
|
:sort-desc.sync="sortDesc"
|
||||||
>
|
>
|
||||||
|
<template #table-busy>
|
||||||
|
<i class="fa fa-spinner"></i>
|
||||||
|
</template>
|
||||||
<template #cell(name)="data">
|
<template #cell(name)="data">
|
||||||
<a :class="false === data.item.active ? 'text-muted' : ''" :href="'./accounts/show/' + data.item.id" :title="data.value">{{ data.value }}</a>
|
<a :class="false === data.item.active ? 'text-muted' : ''" :href="'./accounts/show/' + data.item.id" :title="data.value">{{ data.value }}</a>
|
||||||
</template>
|
</template>
|
||||||
<template #cell(number)="data">
|
<template #cell(acct_number)="data">
|
||||||
<span v-if="null !== data.item.iban && null === data.item.account_number">{{ data.item.iban }}</span>
|
{{ data.item.acct_number }}
|
||||||
<span v-if="null === data.item.iban && null !== data.item.account_number">{{ data.item.account_number }}</span>
|
|
||||||
<span v-if="null !== data.item.iban && null !== data.item.account_number">{{ data.item.iban }} ({{ data.item.account_number }})</span>
|
|
||||||
</template>
|
</template>
|
||||||
<template #cell(last_activity)="data">
|
<template #cell(last_activity)="data">
|
||||||
<span v-if="'asset' === type && 'loading' === data.item.last_activity">
|
<span v-if="'asset' === type && 'loading' === data.item.last_activity">
|
||||||
@ -150,10 +149,21 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="card-footer">
|
<div class="card-footer">
|
||||||
<a :href="'./accounts/create/' + type" class="btn btn-success" :title="$t('firefly.create_new_' + type)">{{ $t('firefly.create_new_' + type) }}</a>
|
<a :href="'./accounts/create/' + type" class="btn btn-success" :title="$t('firefly.create_new_' + type)">{{ $t('firefly.create_new_' + type) }}</a>
|
||||||
|
<a href="#" class="btn btn-info"><i class="fas fa-sync"></i></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
|
||||||
|
<b-pagination
|
||||||
|
v-model="currentPage"
|
||||||
|
:total-rows="total"
|
||||||
|
:per-page="perPage"
|
||||||
|
aria-controls="my-table"
|
||||||
|
></b-pagination>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -162,10 +172,12 @@
|
|||||||
import {mapGetters} from "vuex";
|
import {mapGetters} from "vuex";
|
||||||
import Sortable from "sortablejs";
|
import Sortable from "sortablejs";
|
||||||
import format from "date-fns/format";
|
import format from "date-fns/format";
|
||||||
import {setup} from 'axios-cache-adapter'
|
import {setup} from 'axios-cache-adapter';
|
||||||
// import {cacheAdapterEnhancer} from 'axios-extensions';
|
// import {cacheAdapterEnhancer} from 'axios-extensions';
|
||||||
// pas wat teruggeven als die pagina ook gevraagd wordt, anders een empty array
|
import {configureAxios} from "../../shared/forageStore";
|
||||||
// van X lang?
|
|
||||||
|
|
||||||
|
// get all and cache, dont keep the table busy.
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Index",
|
name: "Index",
|
||||||
@ -197,13 +209,13 @@ export default {
|
|||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
storeReady: function () {
|
storeReady: function () {
|
||||||
//this.getAccountList();
|
this.getAccountList();
|
||||||
},
|
},
|
||||||
start: function () {
|
start: function () {
|
||||||
//this.getAccountList();
|
this.getAccountList();
|
||||||
},
|
},
|
||||||
end: function () {
|
end: function () {
|
||||||
//this.getAccountList();
|
this.getAccountList();
|
||||||
},
|
},
|
||||||
orderMode: function (value) {
|
orderMode: function (value) {
|
||||||
// update the table headers
|
// update the table headers
|
||||||
@ -263,25 +275,25 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
itemsProvider: function (ctx, callback) {
|
// itemsProvider: function (ctx, callback) {
|
||||||
console.log('itemsProvider()');
|
// console.log('itemsProvider()');
|
||||||
console.log('ctx.currentPage = ' + ctx.currentPage);
|
// console.log('ctx.currentPage = ' + ctx.currentPage);
|
||||||
console.log('this.currentPage = ' + this.currentPage);
|
// console.log('this.currentPage = ' + this.currentPage);
|
||||||
if (ctx.currentPage === this.currentPage) {
|
// if (ctx.currentPage === this.currentPage) {
|
||||||
let direction = this.sortDesc ? '-' : '+';
|
// let direction = this.sortDesc ? '-' : '+';
|
||||||
let url = 'api/v1/accounts?type=' + this.type + '&page=' + ctx.currentPage + '&sort=' + direction + this.sortBy;
|
// let url = 'api/v1/accounts?type=' + this.type + '&page=' + ctx.currentPage + '&sort=' + direction + this.sortBy;
|
||||||
this.api.get(url)
|
// this.api.get(url)
|
||||||
.then(async (response) => {
|
// .then(async (response) => {
|
||||||
this.total = parseInt(response.data.meta.pagination.total);
|
// this.total = parseInt(response.data.meta.pagination.total);
|
||||||
let items = this.parseAccountsAndReturn(response.data.data);
|
// let items = this.parseAccountsAndReturn(response.data.data);
|
||||||
items = this.filterAccountListAndReturn(items);
|
// items = this.filterAccountListAndReturn(items);
|
||||||
callback(items);
|
// callback(items);
|
||||||
}
|
// }
|
||||||
);
|
// );
|
||||||
return null;
|
// return null;
|
||||||
}
|
// }
|
||||||
return [];
|
// return [];
|
||||||
},
|
// },
|
||||||
|
|
||||||
saveAccountSort: function (event) {
|
saveAccountSort: function (event) {
|
||||||
let oldIndex = parseInt(event.oldIndex);
|
let oldIndex = parseInt(event.oldIndex);
|
||||||
@ -333,7 +345,7 @@ export default {
|
|||||||
this.fields.push({key: 'interest', label: this.$t('list.interest') + ' (' + this.$t('list.interest_period') + ')', sortable: !this.orderMode});
|
this.fields.push({key: 'interest', label: this.$t('list.interest') + ' (' + this.$t('list.interest_period') + ')', sortable: !this.orderMode});
|
||||||
}
|
}
|
||||||
// add the rest
|
// add the rest
|
||||||
this.fields.push({key: 'number', label: this.$t('list.iban'), sortable: !this.orderMode});
|
this.fields.push({key: 'acct_number', label: this.$t('list.iban'), sortable: !this.orderMode});
|
||||||
this.fields.push({key: 'current_balance', label: this.$t('list.currentBalance'), sortable: !this.orderMode});
|
this.fields.push({key: 'current_balance', label: this.$t('list.currentBalance'), sortable: !this.orderMode});
|
||||||
if ('liabilities' === this.type) {
|
if ('liabilities' === this.type) {
|
||||||
this.fields.push({key: 'amount_due', label: this.$t('firefly.left_in_debt'), sortable: !this.orderMode});
|
this.fields.push({key: 'amount_due', label: this.$t('firefly.left_in_debt'), sortable: !this.orderMode});
|
||||||
@ -344,45 +356,50 @@ export default {
|
|||||||
this.fields.push({key: 'menu', label: ' ', sortable: false});
|
this.fields.push({key: 'menu', label: ' ', sortable: false});
|
||||||
},
|
},
|
||||||
getAccountList: function () {
|
getAccountList: function () {
|
||||||
// console.log('getAccountList()');
|
console.log('getAccountList()');
|
||||||
if (this.indexReady && !this.loading && !this.downloaded) {
|
if (this.indexReady && !this.loading && !this.downloaded) {
|
||||||
// console.log('Index ready, not loading and not already downloaded. Reset.');
|
console.log('Index ready, not loading and not already downloaded. Reset.');
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
this.perPage = this.listPageSize ?? 51;
|
this.perPage = this.listPageSize ?? 51;
|
||||||
this.accounts = [];
|
this.accounts = [];
|
||||||
this.allAccounts = [];
|
this.allAccounts = [];
|
||||||
//this.downloadAccountList(1);
|
this.downloadAccountList(1);
|
||||||
}
|
}
|
||||||
if (this.indexReady && !this.loading && this.downloaded) {
|
if (this.indexReady && !this.loading && this.downloaded) {
|
||||||
// console.log('Index ready, not loading and not downloaded.');
|
console.log('Index ready, not loading and not downloaded.');
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
this.filterAccountList();
|
this.filterAccountList();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
downloadAccountList: function (page) {
|
downloadAccountList: function (page) {
|
||||||
const http = axios.create({
|
console.log('downloadAccountList(' + page + ')');
|
||||||
baseURL: './',
|
|
||||||
headers: {'Cache-Control': 'no-cache'},
|
|
||||||
});
|
|
||||||
|
|
||||||
// console.log('downloadAccountList(' + page + ')');
|
// configure().then(async (api) => {
|
||||||
http.get('./api/v1/accounts?type=' + this.type + '&page=' + page)
|
// const response = await api.get('/url')
|
||||||
.then(response => {
|
//
|
||||||
let currentPage = parseInt(response.data.meta.pagination.current_page);
|
// // Display something beautiful with `response.data` ;)
|
||||||
let totalPage = parseInt(response.data.meta.pagination.total_pages);
|
// })
|
||||||
this.total = parseInt(response.data.meta.pagination.total);
|
|
||||||
this.parseAccounts(response.data.data);
|
|
||||||
if (currentPage < totalPage) {
|
configureAxios().then(async (api) => {
|
||||||
let nextPage = currentPage + 1;
|
api.get('./api/v1/accounts?type=' + this.type + '&page=' + page)
|
||||||
this.downloadAccountList(nextPage);
|
.then(response => {
|
||||||
|
let currentPage = parseInt(response.data.meta.pagination.current_page);
|
||||||
|
let totalPage = parseInt(response.data.meta.pagination.total_pages);
|
||||||
|
this.total = parseInt(response.data.meta.pagination.total);
|
||||||
|
this.parseAccounts(response.data.data);
|
||||||
|
if (currentPage < totalPage) {
|
||||||
|
let nextPage = currentPage + 1;
|
||||||
|
this.downloadAccountList(nextPage);
|
||||||
|
}
|
||||||
|
if (currentPage >= totalPage) {
|
||||||
|
// console.log('Looks like all downloaded.');
|
||||||
|
this.downloaded = true;
|
||||||
|
this.filterAccountList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (currentPage >= totalPage) {
|
);
|
||||||
// console.log('Looks like all downloaded.');
|
});
|
||||||
this.downloaded = true;
|
|
||||||
this.filterAccountList();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
filterAccountListAndReturn: function (allAccounts) {
|
filterAccountListAndReturn: function (allAccounts) {
|
||||||
console.log('filterAccountListAndReturn()');
|
console.log('filterAccountListAndReturn()');
|
||||||
@ -439,51 +456,51 @@ export default {
|
|||||||
},
|
},
|
||||||
parsePages: function (data) {
|
parsePages: function (data) {
|
||||||
this.total = parseInt(data.pagination.total);
|
this.total = parseInt(data.pagination.total);
|
||||||
//console.log('Total is now ' + this.total);
|
console.log('Total is now ' + this.total);
|
||||||
},
|
|
||||||
parseAccountsAndReturn: function (data) {
|
|
||||||
console.log('In parseAccountsAndReturn()');
|
|
||||||
let allAccounts = [];
|
|
||||||
for (let key in data) {
|
|
||||||
if (data.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294) {
|
|
||||||
let current = data[key];
|
|
||||||
let acct = {};
|
|
||||||
acct.id = parseInt(current.id);
|
|
||||||
acct.order = current.attributes.order;
|
|
||||||
acct.name = current.attributes.name;
|
|
||||||
acct.active = current.attributes.active;
|
|
||||||
acct.role = this.roleTranslate(current.attributes.account_role);
|
|
||||||
acct.account_number = current.attributes.account_number;
|
|
||||||
acct.current_balance = current.attributes.current_balance;
|
|
||||||
acct.currency_code = current.attributes.currency_code;
|
|
||||||
|
|
||||||
if ('liabilities' === this.type) {
|
|
||||||
acct.liability_type = this.$t('firefly.account_type_' + current.attributes.liability_type);
|
|
||||||
acct.liability_direction = this.$t('firefly.liability_direction_' + current.attributes.liability_direction + '_short');
|
|
||||||
acct.interest = current.attributes.interest;
|
|
||||||
acct.interest_period = this.$t('firefly.interest_calc_' + current.attributes.interest_period);
|
|
||||||
acct.amount_due = current.attributes.current_debt;
|
|
||||||
}
|
|
||||||
acct.balance_diff = 'loading';
|
|
||||||
acct.last_activity = 'loading';
|
|
||||||
|
|
||||||
if (null !== current.attributes.iban) {
|
|
||||||
acct.iban = current.attributes.iban.match(/.{1,4}/g).join(' ');
|
|
||||||
}
|
|
||||||
if (null === current.attributes.iban) {
|
|
||||||
acct.iban = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
allAccounts.push(acct);
|
|
||||||
if ('asset' === this.type) {
|
|
||||||
// TODO
|
|
||||||
//this.getAccountBalanceDifference(this.allAccounts.length - 1, current);
|
|
||||||
//this.getAccountLastActivity(this.allAccounts.length - 1, current);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return allAccounts;
|
|
||||||
},
|
},
|
||||||
|
// parseAccountsAndReturn: function (data) {
|
||||||
|
// console.log('In parseAccountsAndReturn()');
|
||||||
|
// let allAccounts = [];
|
||||||
|
// for (let key in data) {
|
||||||
|
// if (data.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294) {
|
||||||
|
// let current = data[key];
|
||||||
|
// let acct = {};
|
||||||
|
// acct.id = parseInt(current.id);
|
||||||
|
// acct.order = current.attributes.order;
|
||||||
|
// acct.name = current.attributes.name;
|
||||||
|
// acct.active = current.attributes.active;
|
||||||
|
// acct.role = this.roleTranslate(current.attributes.account_role);
|
||||||
|
// acct.account_number = current.attributes.account_number;
|
||||||
|
// acct.current_balance = current.attributes.current_balance;
|
||||||
|
// acct.currency_code = current.attributes.currency_code;
|
||||||
|
//
|
||||||
|
// if ('liabilities' === this.type) {
|
||||||
|
// acct.liability_type = this.$t('firefly.account_type_' + current.attributes.liability_type);
|
||||||
|
// acct.liability_direction = this.$t('firefly.liability_direction_' + current.attributes.liability_direction + '_short');
|
||||||
|
// acct.interest = current.attributes.interest;
|
||||||
|
// acct.interest_period = this.$t('firefly.interest_calc_' + current.attributes.interest_period);
|
||||||
|
// acct.amount_due = current.attributes.current_debt;
|
||||||
|
// }
|
||||||
|
// acct.balance_diff = 'loading';
|
||||||
|
// acct.last_activity = 'loading';
|
||||||
|
//
|
||||||
|
// if (null !== current.attributes.iban) {
|
||||||
|
// acct.iban = current.attributes.iban.match(/.{1,4}/g).join(' ');
|
||||||
|
// }
|
||||||
|
// if (null === current.attributes.iban) {
|
||||||
|
// acct.iban = null;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// allAccounts.push(acct);
|
||||||
|
// if ('asset' === this.type) {
|
||||||
|
// // TODO
|
||||||
|
// //this.getAccountBalanceDifference(this.allAccounts.length - 1, current);
|
||||||
|
// //this.getAccountLastActivity(this.allAccounts.length - 1, current);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return allAccounts;
|
||||||
|
// },
|
||||||
parseAccounts: function (data) {
|
parseAccounts: function (data) {
|
||||||
// console.log('In parseAccounts()');
|
// console.log('In parseAccounts()');
|
||||||
for (let key in data) {
|
for (let key in data) {
|
||||||
@ -495,7 +512,32 @@ export default {
|
|||||||
acct.name = current.attributes.name;
|
acct.name = current.attributes.name;
|
||||||
acct.active = current.attributes.active;
|
acct.active = current.attributes.active;
|
||||||
acct.role = this.roleTranslate(current.attributes.account_role);
|
acct.role = this.roleTranslate(current.attributes.account_role);
|
||||||
acct.account_number = current.attributes.account_number;
|
|
||||||
|
// account number in 'acct_number'
|
||||||
|
acct.acct_number = '';
|
||||||
|
let iban = null;
|
||||||
|
let acctNr = null;
|
||||||
|
acct.acct_number = '';
|
||||||
|
if (null !== current.attributes.iban) {
|
||||||
|
iban = current.attributes.iban.match(/.{1,4}/g).join(' ');
|
||||||
|
}
|
||||||
|
if (null !== current.attributes.account_number) {
|
||||||
|
acctNr = current.attributes.account_number;
|
||||||
|
}
|
||||||
|
// only account nr
|
||||||
|
if(null === iban && null !== acctNr) {
|
||||||
|
acct.acct_number = acctNr;
|
||||||
|
}
|
||||||
|
// only iban
|
||||||
|
if(null !== iban && null === acctNr) {
|
||||||
|
acct.acct_number = iban;
|
||||||
|
}
|
||||||
|
// both:
|
||||||
|
if(null !== iban && null !== acctNr) {
|
||||||
|
acct.acct_number = iban + ' (' + acctNr + ')';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
acct.current_balance = current.attributes.current_balance;
|
acct.current_balance = current.attributes.current_balance;
|
||||||
acct.currency_code = current.attributes.currency_code;
|
acct.currency_code = current.attributes.currency_code;
|
||||||
|
|
||||||
@ -509,13 +551,6 @@ export default {
|
|||||||
acct.balance_diff = 'loading';
|
acct.balance_diff = 'loading';
|
||||||
acct.last_activity = 'loading';
|
acct.last_activity = 'loading';
|
||||||
|
|
||||||
if (null !== current.attributes.iban) {
|
|
||||||
acct.iban = current.attributes.iban.match(/.{1,4}/g).join(' ');
|
|
||||||
}
|
|
||||||
if (null === current.attributes.iban) {
|
|
||||||
acct.iban = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.allAccounts.push(acct);
|
this.allAccounts.push(acct);
|
||||||
if ('asset' === this.type) {
|
if ('asset' === this.type) {
|
||||||
this.getAccountBalanceDifference(this.allAccounts.length - 1, current);
|
this.getAccountBalanceDifference(this.allAccounts.length - 1, current);
|
||||||
@ -566,7 +601,3 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
|
|
||||||
</style>
|
|
||||||
|
61
frontend/src/shared/forageStore.js
vendored
Normal file
61
frontend/src/shared/forageStore.js
vendored
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
* forageStore.js
|
||||||
|
* Copyright (c) 2021 james@firefly-iii.org
|
||||||
|
*
|
||||||
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import localforage from 'localforage'
|
||||||
|
import memoryDriver from 'localforage-memoryStorageDriver'
|
||||||
|
import {setup} from 'axios-cache-adapter'
|
||||||
|
|
||||||
|
// `async` wrapper to configure `localforage` and instantiate `axios` with `axios-cache-adapter`
|
||||||
|
export async function configureAxios() {
|
||||||
|
// Register the custom `memoryDriver` to `localforage`
|
||||||
|
await localforage.defineDriver(memoryDriver)
|
||||||
|
|
||||||
|
// Create `localforage` instance
|
||||||
|
const forageStore = localforage.createInstance({
|
||||||
|
// List of drivers used
|
||||||
|
driver: [
|
||||||
|
localforage.INDEXEDDB,
|
||||||
|
localforage.LOCALSTORAGE,
|
||||||
|
memoryDriver._driver
|
||||||
|
],
|
||||||
|
// Prefix all storage keys to prevent conflicts
|
||||||
|
name: 'my-cache'
|
||||||
|
})
|
||||||
|
|
||||||
|
// Create `axios` instance with pre-configured `axios-cache-adapter` using a `localforage` store
|
||||||
|
let token = document.head.querySelector('meta[name="csrf-token"]');
|
||||||
|
return setup({
|
||||||
|
// `axios` options
|
||||||
|
baseURL: './',
|
||||||
|
headers: {'X-CSRF-TOKEN': token.content, 'X-James-Rocks': 'oh yes'},
|
||||||
|
cache: {
|
||||||
|
// `axios-cache-adapter` options
|
||||||
|
maxAge: 24 * 60 * 60 * 1000, // one day.
|
||||||
|
readHeaders: false,
|
||||||
|
exclude: {
|
||||||
|
query: false,
|
||||||
|
},
|
||||||
|
debug: true,
|
||||||
|
store: forageStore,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
@ -1088,9 +1088,9 @@
|
|||||||
integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==
|
integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==
|
||||||
|
|
||||||
"@types/node@*":
|
"@types/node@*":
|
||||||
version "15.6.0"
|
version "15.6.1"
|
||||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-15.6.0.tgz#f0ddca5a61e52627c9dcb771a6039d44694597bc"
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-15.6.1.tgz#32d43390d5c62c5b6ec486a9bc9c59544de39a08"
|
||||||
integrity sha512-gCYSfQpy+LYhOFTKAeE8BkyGqaxmlFxe+n4DKM6DR0wzw/HISUE/hAmkC/KT8Sw5PCJblqg062b3z9gucv3k0A==
|
integrity sha512-7EIraBEyRHEe7CH+Fm1XvgqU6uwZN8Q7jppJGcqjROMT29qhAuuOxYB1uEY5UMYQKEmA5D+5tBnhdaPXSsLONA==
|
||||||
|
|
||||||
"@types/parse-glob@*":
|
"@types/parse-glob@*":
|
||||||
version "3.0.29"
|
version "3.0.29"
|
||||||
@ -2107,9 +2107,9 @@ chart.js@^2.9.4:
|
|||||||
moment "^2.10.2"
|
moment "^2.10.2"
|
||||||
|
|
||||||
chart.js@^3.2.0:
|
chart.js@^3.2.0:
|
||||||
version "3.2.1"
|
version "3.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-3.2.1.tgz#1a17d6a88cef324ef711949e227eb51d6c4c26d3"
|
resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-3.3.0.tgz#c5be3807cf902b19bfe166ef853d786f66a53f8b"
|
||||||
integrity sha512-XsNDf3854RGZkLCt+5vWAXGAtUdKP2nhfikLGZqud6G4CvRE2ts64TIxTTfspOin2kEZvPgomE29E6oU02dYjQ==
|
integrity sha512-3pO3kL2st1Lzhw+HTGvDwcNYWustHwvApM/v7b2td6CrthyEygbPoXaN/iGZfUpfuovZfJ4dy129RCr39BR1Bg==
|
||||||
|
|
||||||
chartjs-color-string@^0.6.0:
|
chartjs-color-string@^0.6.0:
|
||||||
version "0.6.0"
|
version "0.6.0"
|
||||||
@ -2570,9 +2570,9 @@ css-declaration-sorter@^4.0.1:
|
|||||||
timsort "^0.3.0"
|
timsort "^0.3.0"
|
||||||
|
|
||||||
css-loader@^5.0.0:
|
css-loader@^5.0.0:
|
||||||
version "5.2.5"
|
version "5.2.6"
|
||||||
resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.5.tgz#cdd18d6fe42748990793b4a7ec32eb16f36ba9d7"
|
resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.6.tgz#c3c82ab77fea1f360e587d871a6811f4450cc8d1"
|
||||||
integrity sha512-bH6QQacvSRtLX0lycAOs43S173n+lfXxB5cx4FjVkTLw5tAEwk5bxNLbkt5K1iETd5KxazRx70GpqOxsuwKiFA==
|
integrity sha512-0wyN5vXMQZu6BvjbrPdUJvkCzGEO24HC7IS7nW4llc6BBFC+zwR9CKtYGv63Puzsg10L/o12inMY5/2ByzfD6w==
|
||||||
dependencies:
|
dependencies:
|
||||||
icss-utils "^5.1.0"
|
icss-utils "^5.1.0"
|
||||||
loader-utils "^2.0.0"
|
loader-utils "^2.0.0"
|
||||||
@ -3116,9 +3116,9 @@ dns-equal@^1.0.0:
|
|||||||
integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0=
|
integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0=
|
||||||
|
|
||||||
dns-packet@^1.3.1:
|
dns-packet@^1.3.1:
|
||||||
version "1.3.1"
|
version "1.3.3"
|
||||||
resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a"
|
resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.3.tgz#7b62ee6e6aaac0c2de27cfc4a06af59cacb9cb38"
|
||||||
integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==
|
integrity sha512-dDwDMOJU+m6Qx+LhltSV+BWNrMaTqx3eXkAqgt/iouWTXGZMffg1rOSnG2xa3lWqmJ9xTBc7fgIe/css4S1rxA==
|
||||||
dependencies:
|
dependencies:
|
||||||
ip "^1.1.0"
|
ip "^1.1.0"
|
||||||
safe-buffer "^5.0.1"
|
safe-buffer "^5.0.1"
|
||||||
@ -3241,9 +3241,9 @@ ekko-lightbox@^5.3.0:
|
|||||||
integrity sha512-mbacwySuVD3Ad6F2hTkjSTvJt59bcVv2l/TmBerp4xZnLak8tPtA4AScUn4DL42c1ksTiAO6sGhJZ52P/1Qgew==
|
integrity sha512-mbacwySuVD3Ad6F2hTkjSTvJt59bcVv2l/TmBerp4xZnLak8tPtA4AScUn4DL42c1ksTiAO6sGhJZ52P/1Qgew==
|
||||||
|
|
||||||
electron-to-chromium@^1.3.723:
|
electron-to-chromium@^1.3.723:
|
||||||
version "1.3.735"
|
version "1.3.738"
|
||||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.735.tgz#fa1a8660f2790662291cb2136f0e446a444cdfdc"
|
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.738.tgz#aec24b091c82acbfabbdcce08076a703941d17ca"
|
||||||
integrity sha512-cp7MWzC3NseUJV2FJFgaiesdrS+A8ZUjX5fLAxdRlcaPDkaPGFplX930S5vf84yqDp4LjuLdKouWuVOTwUfqHQ==
|
integrity sha512-vCMf4gDOpEylPSLPLSwAEsz+R3ShP02Y3cAKMZvTqule3XcPp7tgc/0ESI7IS6ZeyBlGClE50N53fIOkcIVnpw==
|
||||||
|
|
||||||
elliptic@^6.5.3:
|
elliptic@^6.5.3:
|
||||||
version "6.5.4"
|
version "6.5.4"
|
||||||
@ -3299,9 +3299,9 @@ error-ex@^1.3.1:
|
|||||||
is-arrayish "^0.2.1"
|
is-arrayish "^0.2.1"
|
||||||
|
|
||||||
es-abstract@^1.17.2, es-abstract@^1.18.0-next.2:
|
es-abstract@^1.17.2, es-abstract@^1.18.0-next.2:
|
||||||
version "1.18.0"
|
version "1.18.1"
|
||||||
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4"
|
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.1.tgz#6ea1152314618f2d7ab572e9d86c715f4ca08d24"
|
||||||
integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==
|
integrity sha512-LEPRJp87wbQP5Skd3aMpAQePWPC3axO9VD3WmgFYL96dylzMi4xd2G4e/6lrH+wkSYchcPO+0hrSTugYOBjMdQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
call-bind "^1.0.2"
|
call-bind "^1.0.2"
|
||||||
es-to-primitive "^1.2.1"
|
es-to-primitive "^1.2.1"
|
||||||
@ -3311,14 +3311,14 @@ es-abstract@^1.17.2, es-abstract@^1.18.0-next.2:
|
|||||||
has-symbols "^1.0.2"
|
has-symbols "^1.0.2"
|
||||||
is-callable "^1.2.3"
|
is-callable "^1.2.3"
|
||||||
is-negative-zero "^2.0.1"
|
is-negative-zero "^2.0.1"
|
||||||
is-regex "^1.1.2"
|
is-regex "^1.1.3"
|
||||||
is-string "^1.0.5"
|
is-string "^1.0.6"
|
||||||
object-inspect "^1.9.0"
|
object-inspect "^1.10.3"
|
||||||
object-keys "^1.1.1"
|
object-keys "^1.1.1"
|
||||||
object.assign "^4.1.2"
|
object.assign "^4.1.2"
|
||||||
string.prototype.trimend "^1.0.4"
|
string.prototype.trimend "^1.0.4"
|
||||||
string.prototype.trimstart "^1.0.4"
|
string.prototype.trimstart "^1.0.4"
|
||||||
unbox-primitive "^1.0.0"
|
unbox-primitive "^1.0.1"
|
||||||
|
|
||||||
es-module-lexer@^0.4.0:
|
es-module-lexer@^0.4.0:
|
||||||
version "0.4.1"
|
version "0.4.1"
|
||||||
@ -3675,9 +3675,9 @@ fastq@^1.6.0:
|
|||||||
reusify "^1.0.4"
|
reusify "^1.0.4"
|
||||||
|
|
||||||
faye-websocket@^0.11.3:
|
faye-websocket@^0.11.3:
|
||||||
version "0.11.3"
|
version "0.11.4"
|
||||||
resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e"
|
resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da"
|
||||||
integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==
|
integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==
|
||||||
dependencies:
|
dependencies:
|
||||||
websocket-driver ">=0.5.1"
|
websocket-driver ">=0.5.1"
|
||||||
|
|
||||||
@ -4621,7 +4621,7 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4:
|
|||||||
dependencies:
|
dependencies:
|
||||||
isobject "^3.0.1"
|
isobject "^3.0.1"
|
||||||
|
|
||||||
is-regex@^1.0.4, is-regex@^1.1.2:
|
is-regex@^1.0.4, is-regex@^1.1.3:
|
||||||
version "1.1.3"
|
version "1.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f"
|
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f"
|
||||||
integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==
|
integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==
|
||||||
@ -4639,7 +4639,7 @@ is-stream@^2.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
|
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
|
||||||
integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
|
integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
|
||||||
|
|
||||||
is-string@^1.0.5:
|
is-string@^1.0.5, is-string@^1.0.6:
|
||||||
version "1.0.6"
|
version "1.0.6"
|
||||||
resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f"
|
resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f"
|
||||||
integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==
|
integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==
|
||||||
@ -4927,6 +4927,13 @@ levn@~0.3.0:
|
|||||||
prelude-ls "~1.1.2"
|
prelude-ls "~1.1.2"
|
||||||
type-check "~0.3.2"
|
type-check "~0.3.2"
|
||||||
|
|
||||||
|
lie@3.1.1:
|
||||||
|
version "3.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e"
|
||||||
|
integrity sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=
|
||||||
|
dependencies:
|
||||||
|
immediate "~3.0.5"
|
||||||
|
|
||||||
lie@~3.3.0:
|
lie@~3.3.0:
|
||||||
version "3.3.0"
|
version "3.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a"
|
resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a"
|
||||||
@ -4971,6 +4978,20 @@ loader-utils@^2.0.0:
|
|||||||
emojis-list "^3.0.0"
|
emojis-list "^3.0.0"
|
||||||
json5 "^2.1.2"
|
json5 "^2.1.2"
|
||||||
|
|
||||||
|
localforage-memoryStorageDriver@^0.9.2:
|
||||||
|
version "0.9.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/localforage-memoryStorageDriver/-/localforage-memoryStorageDriver-0.9.2.tgz#2e0f7ff2acb0e9ff5e82c52c9e2eb3d63b998d30"
|
||||||
|
integrity sha1-Lg9/8qyw6f9egsUsni6z1juZjTA=
|
||||||
|
dependencies:
|
||||||
|
localforage ">=1.4.0"
|
||||||
|
|
||||||
|
localforage@>=1.4.0, localforage@^1.9.0:
|
||||||
|
version "1.9.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.9.0.tgz#f3e4d32a8300b362b4634cc4e066d9d00d2f09d1"
|
||||||
|
integrity sha512-rR1oyNrKulpe+VM9cYmcFn6tsHuokyVHFaCM3+osEmxaHTbEk8oQu6eGDfS6DQLWi/N67XRmB8ECG37OES368g==
|
||||||
|
dependencies:
|
||||||
|
lie "3.1.1"
|
||||||
|
|
||||||
locate-path@^5.0.0:
|
locate-path@^5.0.0:
|
||||||
version "5.0.0"
|
version "5.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
|
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
|
||||||
@ -5454,7 +5475,7 @@ object-copy@^0.1.0:
|
|||||||
define-property "^0.2.5"
|
define-property "^0.2.5"
|
||||||
kind-of "^3.0.3"
|
kind-of "^3.0.3"
|
||||||
|
|
||||||
object-inspect@^1.6.0, object-inspect@^1.9.0:
|
object-inspect@^1.10.3, object-inspect@^1.6.0:
|
||||||
version "1.10.3"
|
version "1.10.3"
|
||||||
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369"
|
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369"
|
||||||
integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==
|
integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==
|
||||||
@ -5744,9 +5765,9 @@ path-key@^3.0.0, path-key@^3.1.0:
|
|||||||
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
|
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
|
||||||
|
|
||||||
path-parse@^1.0.6:
|
path-parse@^1.0.6:
|
||||||
version "1.0.6"
|
version "1.0.7"
|
||||||
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
|
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
|
||||||
integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
|
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
|
||||||
|
|
||||||
path-to-regexp@0.1.7:
|
path-to-regexp@0.1.7:
|
||||||
version "0.1.7"
|
version "0.1.7"
|
||||||
@ -7333,7 +7354,7 @@ typedarray@^0.0.6:
|
|||||||
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
||||||
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
|
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
|
||||||
|
|
||||||
unbox-primitive@^1.0.0:
|
unbox-primitive@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471"
|
resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471"
|
||||||
integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==
|
integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==
|
||||||
@ -7832,9 +7853,9 @@ wrappy@1:
|
|||||||
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
|
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
|
||||||
|
|
||||||
ws@^7.4.4:
|
ws@^7.4.4:
|
||||||
version "7.4.5"
|
version "7.4.6"
|
||||||
resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1"
|
resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c"
|
||||||
integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==
|
integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==
|
||||||
|
|
||||||
xmldoc@^1.1.2:
|
xmldoc@^1.1.2:
|
||||||
version "1.1.2"
|
version "1.1.2"
|
||||||
|
Loading…
Reference in New Issue
Block a user