This commit is contained in:
Carlos Jimenez Ruiz 2019-12-12 08:29:23 +01:00
commit 77f9cd8e00
17 changed files with 547 additions and 199 deletions

View File

@ -346,6 +346,7 @@ let actions = {
waitForLastSnackbar: function() { waitForLastSnackbar: function() {
return this.wait(500) return this.wait(500)
.waitForSpinnerLoad()
.waitForLastShape('vn-snackbar .shape .text'); .waitForLastShape('vn-snackbar .shape .text');
}, },

View File

@ -1,46 +1,26 @@
// const Nightmare = require('nightmare'); const Nightmare = require('nightmare');
// const config = require('./config.js');
// let nightmare; let nightmare;
// module.exports = function createNightmare(width = 1280, height = 720) { module.exports = function createNightmare(width = 1280, height = 800) {
// if (nightmare) if (nightmare)
// return nightmare; return nightmare;
// nightmare = new Nightmare({ nightmare = new Nightmare({
// show: process.env.E2E_SHOW, show: process.env.E2E_SHOW,
// typeInterval: 10, typeInterval: 10,
// x: 0, x: 0,
// y: 0, y: 0,
// waitTimeout: 2000, waitTimeout: 2000,
// // openDevTools: {mode: 'detach'} // openDevTools: {mode: 'detach'}
// }).viewport(width, height); }).viewport(width, height);
// nightmare.on('console', (type, message, ...args) => { nightmare.on('console', (type, message, ...args) => {
// if (type === 'error') { if (type === 'error') {
// console[type](message, ...args); console[type](message, ...args);
// throw new Error(message); throw new Error(message);
// } else } else
// console[type](message, ...args); console[type](message, ...args);
// });
// nightmare.header('Accept-Language', 'en');
// return nightmare.goto(config.url);
// };
// changes for puppeteer
const Puppeteer = require('puppeteer');
let browser;
module.exports = async function createNightmare() {
if (browser)
return browser;
browser = await Puppeteer.launch({
headless: false,
slowMo: 0, // slow down by ms
}); });
return browser; return browser;

View File

@ -75,7 +75,8 @@ export default {
hasToInvoiceCheckbox: 'vn-check[label="Has to invoice"]', hasToInvoiceCheckbox: 'vn-check[label="Has to invoice"]',
invoiceByMailCheckbox: 'vn-check[label="Invoice by mail"]', invoiceByMailCheckbox: 'vn-check[label="Invoice by mail"]',
viesCheckbox: 'vn-check[label="Vies"]', viesCheckbox: 'vn-check[label="Vies"]',
saveButton: `button[type=submit]` saveButton: `button[type=submit]`,
watcher: 'vn-client-fiscal-data vn-watcher'
}, },
clientBillingData: { clientBillingData: {
payMethodAutocomplete: 'vn-client-billing-data vn-autocomplete[ng-model="$ctrl.client.payMethodFk"]', payMethodAutocomplete: 'vn-client-billing-data vn-autocomplete[ng-model="$ctrl.client.payMethodFk"]',
@ -91,7 +92,8 @@ export default {
newBankEntityBIC: '.vn-dialog.shown [name="bic"]', newBankEntityBIC: '.vn-dialog.shown [name="bic"]',
newBankEntityCode: '.vn-dialog.shown [name="id"]', newBankEntityCode: '.vn-dialog.shown [name="id"]',
acceptBankEntityButton: '.vn-dialog.shown button[response="accept"]', acceptBankEntityButton: '.vn-dialog.shown button[response="accept"]',
saveButton: `button[type=submit]` saveButton: `button[type=submit]`,
watcher: 'vn-client-billing-data vn-watcher'
}, },
clientAddresses: { clientAddresses: {
addressesButton: 'vn-left-menu a[ui-sref="client.card.address.index"]', addressesButton: 'vn-left-menu a[ui-sref="client.card.address.index"]',

View File

@ -307,6 +307,7 @@ describe('Client Edit fiscalData path', () => {
it('should navigate back to fiscal data to confirm invoice by address is now checked', async() => { it('should navigate back to fiscal data to confirm invoice by address is now checked', async() => {
const result = await nightmare const result = await nightmare
.waitToClick(selectors.clientFiscalData.fiscalDataButton) .waitToClick(selectors.clientFiscalData.fiscalDataButton)
.waitForWatcherData(selectors.clientFiscalData.watcher)
.checkboxState(selectors.clientFiscalData.invoiceByAddressCheckbox); .checkboxState(selectors.clientFiscalData.invoiceByAddressCheckbox);
expect(result).toBe('checked'); expect(result).toBe('checked');

View File

@ -62,8 +62,8 @@ describe('Client Edit billing data path', () => {
it(`should clear the BIC code field, update the IBAN to see how he BIC code autocompletes`, async() => { it(`should clear the BIC code field, update the IBAN to see how he BIC code autocompletes`, async() => {
const AutomaticCode = await nightmare const AutomaticCode = await nightmare
.clearInput(selectors.clientBillingData.IBANInput) .clearInput(selectors.clientBillingData.IBANInput)
.waitToClick(selectors.clientBillingData.clearswiftBicButton)
.write(selectors.clientBillingData.IBANInput, 'ES9121000418450200051332') .write(selectors.clientBillingData.IBANInput, 'ES9121000418450200051332')
.waitForTextInInput(`${selectors.clientBillingData.swiftBicAutocomplete} input`, 'caixesbb')
.waitToGetProperty(`${selectors.clientBillingData.swiftBicAutocomplete} input`, 'value'); .waitToGetProperty(`${selectors.clientBillingData.swiftBicAutocomplete} input`, 'value');
expect(AutomaticCode).toEqual('CAIXESBB Caixa Bank'); expect(AutomaticCode).toEqual('CAIXESBB Caixa Bank');
@ -71,6 +71,7 @@ describe('Client Edit billing data path', () => {
it(`should save the form with all its new data`, async() => { it(`should save the form with all its new data`, async() => {
const snackbarMessages = await nightmare const snackbarMessages = await nightmare
.waitForWatcherData(selectors.clientBillingData.watcher)
.waitToClick(selectors.clientBillingData.saveButton) .waitToClick(selectors.clientBillingData.saveButton)
.waitForSnackbar(); .waitForSnackbar();

View File

@ -99,6 +99,7 @@ describe('Client Add address path', () => {
it(`should click on the active checkbox and receive an error to save it because it is the default address`, async() => { it(`should click on the active checkbox and receive an error to save it because it is the default address`, async() => {
const result = await nightmare const result = await nightmare
.waitForWatcherData(selectors.clientAddresses.watcher)
.waitToClick(selectors.clientAddresses.activeCheckbox) .waitToClick(selectors.clientAddresses.activeCheckbox)
.waitToClick(selectors.clientAddresses.saveButton) .waitToClick(selectors.clientAddresses.saveButton)
.waitForLastSnackbar(); .waitForLastSnackbar();

View File

@ -57,6 +57,7 @@ describe('Client balance path', () => {
it('should check balance is now 0 and the company is now VNL becouse the user local settings were removed', async() => { it('should check balance is now 0 and the company is now VNL becouse the user local settings were removed', async() => {
let company = await nightmare let company = await nightmare
.waitForSpinnerLoad()
.waitToGetProperty(`${selectors.clientBalance.companyAutocomplete} input`, 'value'); .waitToGetProperty(`${selectors.clientBalance.companyAutocomplete} input`, 'value');
let firstBalanceLine = await nightmare let firstBalanceLine = await nightmare

View File

@ -33,6 +33,7 @@ describe('Ticket diary path', () => {
const url = await nightmare const url = await nightmare
.waitToClick(selectors.ticketSummary.firstSaleItemId) .waitToClick(selectors.ticketSummary.firstSaleItemId)
.waitToClick(selectors.ticketSummary.popoverDiaryButton) .waitToClick(selectors.ticketSummary.popoverDiaryButton)
.waitForURL('/diary')
.parsedUrl(); .parsedUrl();
expect(url.hash).toContain('/diary'); expect(url.hash).toContain('/diary');

View File

@ -11,6 +11,27 @@
"type": "Number", "type": "Number",
"id": true, "id": true,
"description": "Identifier" "description": "Identifier"
},
"claimFk": {
"required": true
},
"claimResponsibleFk": {
"required": true
},
"workerFk": {
"required": true
},
"claimReasonFk": {
"required": true
},
"claimResultFk": {
"required": true
},
"claimRedeliveryFk": {
"required": true
},
"claimDestinationFk": {
"required": true
} }
}, },
"relations": { "relations": {
@ -29,11 +50,6 @@
"model": "Worker", "model": "Worker",
"foreignKey": "workerFk" "foreignKey": "workerFk"
}, },
"claimDestination": {
"type": "belongsTo",
"model": "ClaimDestination",
"foreignKey": "claimDestinationFk"
},
"claimReason": { "claimReason": {
"type": "belongsTo", "type": "belongsTo",
"model": "ClaimReason", "model": "ClaimReason",
@ -48,6 +64,11 @@
"type": "belongsTo", "type": "belongsTo",
"model": "ClaimRedelivery", "model": "ClaimRedelivery",
"foreignKey": "claimRedeliveryFk" "foreignKey": "claimRedeliveryFk"
},
"claimDestination": {
"type": "belongsTo",
"model": "ClaimDestination",
"foreignKey": "claimDestinationFk"
} }
} }
} }

View File

@ -49,7 +49,7 @@
data="claimReasons" data="claimReasons"
fields="['id', 'description']" fields="['id', 'description']"
show-field="description" show-field="description"
vn-acl="salesAssistant"> rule>
</vn-autocomplete> </vn-autocomplete>
<vn-autocomplete <vn-autocomplete
vn-one vn-one
@ -58,7 +58,7 @@
data="claimResults" data="claimResults"
fields="['id', 'description']" fields="['id', 'description']"
show-field="description" show-field="description"
vn-acl="salesAssistant"> rule>
</vn-autocomplete> </vn-autocomplete>
<vn-autocomplete <vn-autocomplete
vn-one vn-one
@ -67,7 +67,7 @@
data="claimResponsibles" data="claimResponsibles"
fields="['id', 'description']" fields="['id', 'description']"
show-field="description" show-field="description"
vn-acl="salesAssistant"> rule>
</vn-autocomplete> </vn-autocomplete>
<vn-autocomplete <vn-autocomplete
vn-one vn-one
@ -78,7 +78,7 @@
value-field="id" value-field="id"
where="{role: 'employee'}" where="{role: 'employee'}"
label="Worker" label="Worker"
vn-acl="salesAssistant"> rule>
</vn-autocomplete> </vn-autocomplete>
<vn-autocomplete <vn-autocomplete
vn-one vn-one
@ -87,15 +87,14 @@
data="claimRedeliveries" data="claimRedeliveries"
fields="['id', 'description']" fields="['id', 'description']"
show-field="description" show-field="description"
vn-acl="salesAssistant"> rule>
</vn-autocomplete> </vn-autocomplete>
<vn-icon-button <vn-icon-button
class="vn-my-md" class="vn-my-md"
vn-tooltip="Remove sale" vn-tooltip="Remove sale"
icon="delete" icon="delete"
ng-click="model.remove($index)" ng-click="model.remove($index)"
tabindex="-1" tabindex="-1">
vn-acl="salesAssistant">
</vn-icon-button> </vn-icon-button>
</vn-horizontal> </vn-horizontal>
</form> </form>
@ -104,8 +103,7 @@
vn-bind="+" vn-bind="+"
vn-tooltip="Add sale" vn-tooltip="Add sale"
icon="add_circle" icon="add_circle"
ng-click="model.insert()" ng-click="model.insert()">
vn-acl="salesAssistant">
</vn-icon-button> </vn-icon-button>
</vn-one> </vn-one>
</vn-vertical> </vn-vertical>
@ -113,8 +111,7 @@
<vn-button-bar> <vn-button-bar>
<vn-submit <vn-submit
label="Save" label="Save"
ng-click="$ctrl.onSubmit()" ng-click="$ctrl.onSubmit()">
vn-acl="salesAssistant">
</vn-submit> </vn-submit>
</vn-button-bar> </vn-button-bar>
</vn-vertical> </vn-vertical>

View File

@ -1,5 +1,8 @@
module.exports = Self => { module.exports = Self => {
Self.validatesPresenceOf('name', { Self.validatesPresenceOf('name', {
message: 'Name cannot be blank' message: `Name cannot be blank`
});
Self.validatesPresenceOf('bic', {
message: `Swift / BIC can't be empty`
}); });
}; };

View File

@ -13,7 +13,7 @@
"description": "Identifier" "description": "Identifier"
}, },
"bic": { "bic": {
"type": "String" "type": "String"
}, },
"name": { "name": {
"type": "String" "type": "String"

View File

@ -61,8 +61,8 @@
<vn-icon-button <vn-icon-button
vn-auto vn-auto
icon="add_circle" icon="add_circle"
ng-click="$ctrl.onAddEntityClick($event)"
vn-tooltip="New bank entity" vn-tooltip="New bank entity"
vn-dialog="bankEntityDialog"
vn-acl="salesAssistant"> vn-acl="salesAssistant">
</vn-icon-button> </vn-icon-button>
</append> </append>
@ -98,8 +98,7 @@
<!-- Create bank entity dialog --> <!-- Create bank entity dialog -->
<vn-dialog class="edit" <vn-dialog class="edit"
vn-id="bankEntityDialog" vn-id="bankEntityDialog"
on-open="$ctrl.onBankEntityOpen()" on-accept="$ctrl.onBankEntityAccept()">
on-response="$ctrl.onBankEntityResponse($response)">
<tpl-body> <tpl-body>
<h5 class="vn-py-sm" translate>New bank entity</h5> <h5 class="vn-py-sm" translate>New bank entity</h5>
<vn-horizontal> <vn-horizontal>

View File

@ -1,13 +1,7 @@
import ngModule from '../module'; import ngModule from '../module';
import Section from 'salix/components/section';
export default class Controller { export default class Controller extends Section {
constructor($scope, $http, vnApp, $translate) {
this.$scope = $scope;
this.$http = $http;
this.vnApp = vnApp;
this.$translate = $translate;
}
get client() { get client() {
return this._client; return this._client;
} }
@ -19,10 +13,6 @@ export default class Controller {
if (!value.bankEntityFk) if (!value.bankEntityFk)
this.autofillBic(); this.autofillBic();
this.newBankEntity = {
countryFk: Number.parseInt(value.countryFk)
};
} }
onSubmit() { onSubmit() {
@ -31,14 +21,14 @@ export default class Controller {
if (this.hasPaymethodChanges()) if (this.hasPaymethodChanges())
shouldNotify = true; shouldNotify = true;
this.$scope.watcher.submit().then(() => { this.$.watcher.submit().then(() => {
if (shouldNotify) if (shouldNotify)
this.vnApp.showMessage(this.$translate.instant('Notification sent!')); this.vnApp.showMessage(this.$t('Notification sent!'));
}); });
} }
hasPaymethodChanges() { hasPaymethodChanges() {
let orgData = this.$scope.watcher.orgData; let orgData = this.$.watcher.orgData;
let payMethod = orgData.payMethodFk != this.client.payMethodFk; let payMethod = orgData.payMethodFk != this.client.payMethodFk;
let iban = orgData.iban != this.client.iban; let iban = orgData.iban != this.client.iban;
@ -47,31 +37,17 @@ export default class Controller {
return payMethod || iban || dueDay; return payMethod || iban || dueDay;
} }
onBankEntityOpen() { onAddEntityClick(event) {
this.newBankEntity.name = ''; event.preventDefault();
this.newBankEntity.id = ''; this.newBankEntity = {
this.newBankEntity.bic = ''; countryFk: Number.parseInt(this.client.countryFk)
this.$scope.$apply(); };
this.$.bankEntityDialog.show();
} }
onBankEntityResponse(response) { onBankEntityAccept() {
if (response == 'accept') { return this.$http.post(`BankEntities`, this.newBankEntity)
try { .then(res => this.client.bankEntityFk = res.data.id);
if (!this.newBankEntity.name)
throw new Error(`Name can't be empty`);
if (!this.newBankEntity.bic)
throw new Error(`Swift / BIC can't be empty`);
this.$http.post(`BankEntities`, this.newBankEntity).then(response => {
if (response.data)
this.client.bankEntityFk = response.data.id;
});
} catch (e) {
this.vnApp.showError(this.$translate.instant(e.message));
return false;
}
}
return true;
} }
get ibanCountry() { get ibanCountry() {
@ -90,8 +66,7 @@ export default class Controller {
if (this.ibanCountry != 'ES') return; if (this.ibanCountry != 'ES') return;
let json = encodeURIComponent(JSON.stringify(filter)); this.$http.get(`BankEntities`, {filter}).then(response => {
this.$http.get(`BankEntities?filter=${json}`).then(response => {
const hasData = response.data && response.data[0]; const hasData = response.data && response.data[0];
if (hasData) if (hasData)
@ -101,7 +76,6 @@ export default class Controller {
}); });
} }
} }
Controller.$inject = ['$scope', '$http', 'vnApp', '$translate'];
ngModule.component('vnClientBillingData', { ngModule.component('vnClientBillingData', {
template: require('./index.html'), template: require('./index.html'),

View File

@ -10,12 +10,13 @@ describe('Client', () => {
beforeEach(ngModule('client')); beforeEach(ngModule('client'));
beforeEach(angular.mock.inject(($componentController, $rootScope, _$httpBackend_, _vnApp_) => { beforeEach(angular.mock.inject(($componentController, $rootScope, _$httpBackend_, _vnApp_) => {
let $element = angular.element('<vn-client-billing-data></vn-client-billing-data>');
$httpBackend = _$httpBackend_; $httpBackend = _$httpBackend_;
vnApp = _vnApp_; vnApp = _vnApp_;
$scope = $rootScope.$new(); $scope = $rootScope.$new();
$scope.watcher = {}; $scope.watcher = {};
spyOn(vnApp, 'showError'); spyOn(vnApp, 'showError');
controller = $componentController('vnClientBillingData', {$scope}); controller = $componentController('vnClientBillingData', {$element, $scope});
controller.client = {id: 101, name: 'Client name', payMethodFk: 4}; controller.client = {id: 101, name: 'Client name', payMethodFk: 4};
$scope.watcher.orgData = {id: 101, name: 'Client name', payMethodFk: 4}; $scope.watcher.orgData = {id: 101, name: 'Client name', payMethodFk: 4};
})); }));
@ -34,42 +35,7 @@ describe('Client', () => {
}); });
}); });
describe('onBankEntityOpen()', () => { describe('onBankEntityAccept()', () => {
it('should set reset the new bank entity properties', () => {
controller.newBankEntity.name = 'My new bank entity';
controller.newBankEntity.bic = 'ES123';
controller.onBankEntityOpen();
expect(controller.newBankEntity.name).toBe('');
expect(controller.newBankEntity.bic).toBe('');
});
});
describe('onBankEntityResponse()', () => {
it(`should throw an error if name property is empty`, () => {
controller.newBankEntity = {
name: '',
bic: 'ES123',
countryFk: 1,
id: 999
};
controller.onBankEntityResponse('accept');
expect(vnApp.showError).toHaveBeenCalledWith(`Name can't be empty`);
});
it(`should throw an error if bic property is empty`, () => {
controller.newBankEntity = {
name: 'My new bank entity',
bic: '',
countryFk: 1,
id: 999
};
controller.onBankEntityResponse('accept');
expect(vnApp.showError).toHaveBeenCalledWith(`Swift / BIC can't be empty`);
});
it('should request to create a new bank entity', () => { it('should request to create a new bank entity', () => {
let newBankEntity = { let newBankEntity = {
name: 'My new bank entity', name: 'My new bank entity',
@ -78,40 +44,49 @@ describe('Client', () => {
id: 999 id: 999
}; };
controller.newBankEntity = newBankEntity; controller.newBankEntity = newBankEntity;
$httpBackend.when('POST', 'BankEntities').respond('done'); $httpBackend.expectPOST('BankEntities', newBankEntity).respond({id: 999});
$httpBackend.expectPOST('BankEntities', newBankEntity); controller.onBankEntityAccept();
controller.onBankEntityResponse('accept');
$httpBackend.flush(); $httpBackend.flush();
expect(controller.client.bankEntityFk).toEqual(newBankEntity.id);
}); });
}); });
describe('autofillBic() should perform a GET query if client iban is specified and country code is "ES".', () => { describe('autofillBic()', () => {
it(`Should not define bankEntityFk property`, () => { it(`Should do nothing if there is not client`, () => {
controller.client.payMethodFk = 5; controller.client = undefined;
controller.client.iban = 'ES9121000418450200051332';
let expectedFilter = {where: {id: 2100}}; controller.autofillBic();
let json = encodeURIComponent(JSON.stringify(expectedFilter));
expect(controller.client).toBeUndefined();
});
it(`Should do nothing if the iban is not spanish`, () => {
controller.client.iban = 'FR9121000418450200051332';
$httpBackend.when('GET', `BankEntities?filter=${json}`).respond('done');
$httpBackend.expect('GET', `BankEntities?filter=${json}`);
controller.autofillBic(); controller.autofillBic();
$httpBackend.flush();
expect(controller.client.bankEntityFk).toBeUndefined(); expect(controller.client.bankEntityFk).toBeUndefined();
}); });
it(`Should define bankEntityFk property`, () => { it(`Should set the bankEntityId in the client`, () => {
controller.client.payMethodFk = 5; controller.client.iban = 'ES9121000418450200051332';
controller.client.iban = 'ES1501280010120123456789';
let expectedFilter = {where: {id: 128}};
let json = encodeURIComponent(JSON.stringify(expectedFilter));
$httpBackend.when('GET', `BankEntities?filter=${json}`).respond([{id: 128}]); $httpBackend.whenRoute('GET', `BankEntities`).respond([{id: 123}]);
$httpBackend.expect('GET', `BankEntities?filter=${json}`);
controller.autofillBic(); controller.autofillBic();
$httpBackend.flush(); $httpBackend.flush();
expect(controller.client.bankEntityFk).toEqual(128); expect(controller.client.bankEntityFk).toEqual(123);
});
it(`Should set clients bankEntityFk to null if no bank entity founds`, () => {
controller.client.iban = 'ES9121000418450200051332';
$httpBackend.whenRoute('GET', `BankEntities`).respond([]);
controller.autofillBic();
$httpBackend.flush();
expect(controller.client.bankEntityFk).toBeNull();
}); });
}); });

466
package-lock.json generated
View File

@ -942,6 +942,77 @@
"minimist": "^1.2.0" "minimist": "^1.2.0"
} }
}, },
"@electron/get": {
"version": "1.7.1",
"resolved": "https://registry.npmjs.org/@electron/get/-/get-1.7.1.tgz",
"integrity": "sha512-+BOIzkmYbe+oOBGqSByq8zXYXCFztccoymR3uNkvX5ckJ/5xU+4peVyEvFyH6+zfv58hCo99RxgIpwuaMfRtRg==",
"requires": {
"debug": "^4.1.1",
"env-paths": "^2.2.0",
"fs-extra": "^8.1.0",
"global-agent": "^2.0.2",
"global-tunnel-ng": "^2.7.1",
"got": "^9.6.0",
"sanitize-filename": "^1.6.2",
"sumchecker": "^3.0.0"
},
"dependencies": {
"debug": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"requires": {
"ms": "^2.1.1"
}
},
"fs-extra": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
"integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
"requires": {
"graceful-fs": "^4.2.0",
"jsonfile": "^4.0.0",
"universalify": "^0.1.0"
}
},
"got": {
"version": "9.6.0",
"resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
"integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
"requires": {
"@sindresorhus/is": "^0.14.0",
"@szmarczak/http-timer": "^1.1.2",
"cacheable-request": "^6.0.0",
"decompress-response": "^3.3.0",
"duplexer3": "^0.1.4",
"get-stream": "^4.1.0",
"lowercase-keys": "^1.0.1",
"mimic-response": "^1.0.1",
"p-cancelable": "^1.0.0",
"to-readable-stream": "^1.0.0",
"url-parse-lax": "^3.0.0"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"prepend-http": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
"integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc="
},
"url-parse-lax": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
"integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
"requires": {
"prepend-http": "^2.0.0"
}
}
}
},
"@google-cloud/common": { "@google-cloud/common": {
"version": "0.32.1", "version": "0.32.1",
"resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-0.32.1.tgz", "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-0.32.1.tgz",
@ -1293,6 +1364,19 @@
"resolved": "https://registry.npmjs.org/@kyleshockey/object-assign-deep/-/object-assign-deep-0.4.2.tgz", "resolved": "https://registry.npmjs.org/@kyleshockey/object-assign-deep/-/object-assign-deep-0.4.2.tgz",
"integrity": "sha1-hJAPDu/DcnmPR1G1JigwuCCJIuw=" "integrity": "sha1-hJAPDu/DcnmPR1G1JigwuCCJIuw="
}, },
"@sindresorhus/is": {
"version": "0.14.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
"integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ=="
},
"@szmarczak/http-timer": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
"integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
"requires": {
"defer-to-connect": "^1.0.1"
}
},
"@types/babel__core": { "@types/babel__core": {
"version": "7.1.3", "version": "7.1.3",
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.3.tgz", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.3.tgz",
@ -3150,6 +3234,12 @@
"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
"dev": true "dev": true
}, },
"boolean": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/boolean/-/boolean-3.0.0.tgz",
"integrity": "sha512-OElxJ1lUSinuoUnkpOgLmxp0DC4ytEhODEL6QJU0NpxE/mI4rUSh8h1P1Wkvfi3xQEBcxXR2gBIPNYNuaFcAbQ==",
"optional": true
},
"bops": { "bops": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/bops/-/bops-1.0.0.tgz", "resolved": "https://registry.npmjs.org/bops/-/bops-1.0.0.tgz",
@ -3504,6 +3594,35 @@
"unset-value": "^1.0.0" "unset-value": "^1.0.0"
} }
}, },
"cacheable-request": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
"integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
"requires": {
"clone-response": "^1.0.2",
"get-stream": "^5.1.0",
"http-cache-semantics": "^4.0.0",
"keyv": "^3.0.0",
"lowercase-keys": "^2.0.0",
"normalize-url": "^4.1.0",
"responselike": "^1.0.2"
},
"dependencies": {
"get-stream": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz",
"integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==",
"requires": {
"pump": "^3.0.0"
}
},
"lowercase-keys": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
"integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="
}
}
},
"callsites": { "callsites": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
@ -3802,6 +3921,14 @@
"shallow-clone": "^1.0.0" "shallow-clone": "^1.0.0"
} }
}, },
"clone-response": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
"integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
"requires": {
"mimic-response": "^1.0.0"
}
},
"clone-stats": { "clone-stats": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
@ -3980,6 +4107,16 @@
} }
} }
}, },
"config-chain": {
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz",
"integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==",
"optional": true,
"requires": {
"ini": "^1.3.4",
"proto-list": "~1.2.1"
}
},
"configstore": { "configstore": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/configstore/-/configstore-4.0.0.tgz", "resolved": "https://registry.npmjs.org/configstore/-/configstore-4.0.0.tgz",
@ -4436,6 +4573,14 @@
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
"dev": true "dev": true
}, },
"decompress-response": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
"integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
"requires": {
"mimic-response": "^1.0.0"
}
},
"deep-defaults": { "deep-defaults": {
"version": "1.0.5", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/deep-defaults/-/deep-defaults-1.0.5.tgz", "resolved": "https://registry.npmjs.org/deep-defaults/-/deep-defaults-1.0.5.tgz",
@ -4511,11 +4656,15 @@
} }
} }
}, },
"defer-to-connect": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.0.tgz",
"integrity": "sha512-WE2sZoctWm/v4smfCAdjYbrfS55JiMRdlY9ZubFhsYbteCK9+BvAx4YV7nPjYM6ZnX5BcoVKwfmyx9sIFTgQMQ=="
},
"define-properties": { "define-properties": {
"version": "1.1.3", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
"integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
"dev": true,
"requires": { "requires": {
"object-keys": "^1.0.12" "object-keys": "^1.0.12"
} }
@ -4642,8 +4791,7 @@
"detect-node": { "detect-node": {
"version": "2.0.4", "version": "2.0.4",
"resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
"integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw=="
"dev": true
}, },
"diff": { "diff": {
"version": "1.4.0", "version": "1.4.0",
@ -4822,8 +4970,7 @@
"duplexer3": { "duplexer3": {
"version": "0.1.4", "version": "0.1.4",
"resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
"integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
"dev": true
}, },
"duplexify": { "duplexify": {
"version": "3.7.1", "version": "3.7.1",
@ -4887,21 +5034,19 @@
"integrity": "sha512-PcW2a0tyTuPHz3tWyYqtK6r1fZ3gp+3Sop8Ph+ZYN81Ob5rwmbHEzaqs10N3BEsaGTkh/ooniXK+WwszGlc2+Q==" "integrity": "sha512-PcW2a0tyTuPHz3tWyYqtK6r1fZ3gp+3Sop8Ph+ZYN81Ob5rwmbHEzaqs10N3BEsaGTkh/ooniXK+WwszGlc2+Q=="
}, },
"electron": { "electron": {
"version": "2.0.18", "version": "7.1.2",
"resolved": "https://registry.npmjs.org/electron/-/electron-2.0.18.tgz", "resolved": "https://registry.npmjs.org/electron/-/electron-7.1.2.tgz",
"integrity": "sha512-PQRHtFvLxHdJzMMIwTddUtkS+Te/fZIs+PHO+zPmTUTBE76V3Od3WRGzMQwiJHxN679licmCKhJpMyxZfDEVWQ==", "integrity": "sha512-7hjONYt2GlQfKuKgQrhhUL1P9lbGWLBfMUq+2QFU3yeLtCvM0ROfPJCRP4OF5pVp3KDyfFp4DtmhuVzAnxV3jA==",
"dev": true,
"requires": { "requires": {
"@types/node": "^8.0.24", "@electron/get": "^1.0.1",
"electron-download": "^3.0.1", "@types/node": "^12.0.12",
"extract-zip": "^1.0.3" "extract-zip": "^1.0.3"
}, },
"dependencies": { "dependencies": {
"@types/node": { "@types/node": {
"version": "8.10.49", "version": "12.12.12",
"resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.49.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.12.tgz",
"integrity": "sha512-YX30JVx0PvSmJ3Eqr74fYLGeBxD+C7vIL20ek+GGGLJeUbVYRUW3EzyAXpIRA0K8c8o0UWqR/GwEFYiFoz1T8w==", "integrity": "sha512-MGuvYJrPU0HUwqF7LqvIj50RZUX23Z+m583KBygKYUZLlZ88n6w28XRNJRJgsHukLEnLz6w6SvxZoLgbr5wLqQ=="
"dev": true
} }
} }
}, },
@ -4952,6 +5097,16 @@
"requires": { "requires": {
"pinkie-promise": "^2.0.0" "pinkie-promise": "^2.0.0"
} }
},
"sumchecker": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-1.3.1.tgz",
"integrity": "sha1-ebs7RFbdBPGOvbwNcDodHa7FEF0=",
"dev": true,
"requires": {
"debug": "^2.2.0",
"es6-promise": "^4.0.5"
}
} }
} }
}, },
@ -5060,6 +5215,11 @@
"resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
"integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
}, },
"env-paths": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz",
"integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA=="
},
"errlop": { "errlop": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/errlop/-/errlop-1.1.1.tgz", "resolved": "https://registry.npmjs.org/errlop/-/errlop-1.1.1.tgz",
@ -5138,6 +5298,12 @@
"next-tick": "^1.0.0" "next-tick": "^1.0.0"
} }
}, },
"es6-error": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
"integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
"optional": true
},
"es6-iterator": { "es6-iterator": {
"version": "2.0.3", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
@ -5703,7 +5869,6 @@
"version": "1.6.7", "version": "1.6.7",
"resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz",
"integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=",
"dev": true,
"requires": { "requires": {
"concat-stream": "1.6.2", "concat-stream": "1.6.2",
"debug": "2.6.9", "debug": "2.6.9",
@ -5715,7 +5880,6 @@
"version": "1.6.2", "version": "1.6.2",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
"integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
"dev": true,
"requires": { "requires": {
"buffer-from": "^1.0.0", "buffer-from": "^1.0.0",
"inherits": "^2.0.3", "inherits": "^2.0.3",
@ -5804,7 +5968,6 @@
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
"integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
"dev": true,
"requires": { "requires": {
"pend": "~1.2.0" "pend": "~1.2.0"
} }
@ -6747,8 +6910,7 @@
"function-bind": { "function-bind": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
"dev": true
}, },
"function-source": { "function-source": {
"version": "0.1.0", "version": "0.1.0",
@ -6999,6 +7161,35 @@
"object.defaults": "^1.1.0" "object.defaults": "^1.1.0"
} }
}, },
"global-agent": {
"version": "2.1.7",
"resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.1.7.tgz",
"integrity": "sha512-ooK7eqGYZku+LgnbfH/Iv0RJ74XfhrBZDlke1QSzcBt0bw1PmJcnRADPAQuFE+R45pKKDTynAr25SBasY2kvow==",
"optional": true,
"requires": {
"boolean": "^3.0.0",
"core-js": "^3.4.1",
"es6-error": "^4.1.1",
"matcher": "^2.0.0",
"roarr": "^2.14.5",
"semver": "^6.3.0",
"serialize-error": "^5.0.0"
},
"dependencies": {
"core-js": {
"version": "3.4.2",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.4.2.tgz",
"integrity": "sha512-bUTfqFWtNKWp73oNIfRkqwYZJeNT3lstzZcAkhhiuvDraRSgOH1/+F9ZklbpR4zpdKuo4cpXN8tKP7s61yjX+g==",
"optional": true
},
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"optional": true
}
}
},
"global-dirs": { "global-dirs": {
"version": "0.1.1", "version": "0.1.1",
"resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
@ -7032,6 +7223,18 @@
"which": "^1.2.14" "which": "^1.2.14"
} }
}, },
"global-tunnel-ng": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz",
"integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==",
"optional": true,
"requires": {
"encodeurl": "^1.0.2",
"lodash": "^4.17.10",
"npm-conf": "^1.1.3",
"tunnel": "^0.0.6"
}
},
"globalize": { "globalize": {
"version": "1.4.2", "version": "1.4.2",
"resolved": "https://registry.npmjs.org/globalize/-/globalize-1.4.2.tgz", "resolved": "https://registry.npmjs.org/globalize/-/globalize-1.4.2.tgz",
@ -7046,6 +7249,17 @@
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true "dev": true
}, },
"globalthis": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.0.tgz",
"integrity": "sha512-vcCAZTJ3r5Qcu5l8/2oyVdoFwxKgfYnMTR2vwWeux/NAVZK3PwcMaWkdUIn4GJbmKuRK7xcvDsLuK+CKcXyodg==",
"optional": true,
"requires": {
"define-properties": "^1.1.2",
"function-bind": "^1.1.1",
"object-keys": "^1.0.12"
}
},
"globby": { "globby": {
"version": "5.0.0", "version": "5.0.0",
"resolved": "http://registry.npmjs.org/globby/-/globby-5.0.0.tgz", "resolved": "http://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
@ -8012,9 +8226,9 @@
} }
}, },
"home-path": { "home-path": {
"version": "1.0.6", "version": "1.0.7",
"resolved": "https://registry.npmjs.org/home-path/-/home-path-1.0.6.tgz", "resolved": "https://registry.npmjs.org/home-path/-/home-path-1.0.7.tgz",
"integrity": "sha512-wo+yjrdAtoXt43Vy92a+0IPCYViiyLAHyp0QVS4xL/tfvVz5sXIW1ubLZk3nhVkD92fQpUMKX+fzMjr5F489vw==", "integrity": "sha512-tM1pVa+u3ZqQwIkXcWfhUlY3HWS3TsnKsfi2OHHvnhkX52s9etyktPyy1rQotkr0euWimChDq+QkQuDe8ngUlQ==",
"dev": true "dev": true
}, },
"homedir-polyfill": { "homedir-polyfill": {
@ -8171,6 +8385,11 @@
} }
} }
}, },
"http-cache-semantics": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz",
"integrity": "sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew=="
},
"http-deceiver": { "http-deceiver": {
"version": "1.2.7", "version": "1.2.7",
"resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
@ -8450,8 +8669,7 @@
"ini": { "ini": {
"version": "1.3.5", "version": "1.3.5",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
"dev": true
}, },
"inquirer": { "inquirer": {
"version": "6.4.1", "version": "6.4.1",
@ -10122,6 +10340,21 @@
"integrity": "sha1-SjGI1CkbZrT2XtuZ+AaqmuKTWSo=", "integrity": "sha1-SjGI1CkbZrT2XtuZ+AaqmuKTWSo=",
"dev": true "dev": true
}, },
"keyv": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
"integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
"requires": {
"json-buffer": "3.0.0"
},
"dependencies": {
"json-buffer": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
"integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg="
}
}
},
"killable": { "killable": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz",
@ -10873,8 +11106,7 @@
"lowercase-keys": { "lowercase-keys": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
"integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA=="
"dev": true
}, },
"lru-cache": { "lru-cache": {
"version": "5.1.1", "version": "5.1.1",
@ -11001,6 +11233,23 @@
} }
} }
}, },
"matcher": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/matcher/-/matcher-2.1.0.tgz",
"integrity": "sha512-o+nZr+vtJtgPNklyeUKkkH42OsK8WAfdgaJE2FNxcjLPg+5QbeEoT6vRj8Xq/iv18JlQ9cmKsEu0b94ixWf1YQ==",
"optional": true,
"requires": {
"escape-string-regexp": "^2.0.0"
},
"dependencies": {
"escape-string-regexp": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
"integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
"optional": true
}
}
},
"math-interval-parser": { "math-interval-parser": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/math-interval-parser/-/math-interval-parser-1.1.0.tgz", "resolved": "https://registry.npmjs.org/math-interval-parser/-/math-interval-parser-1.1.0.tgz",
@ -11158,6 +11407,11 @@
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
}, },
"mimic-response": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
"integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="
},
"minimalistic-assert": { "minimalistic-assert": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
@ -11691,6 +11945,23 @@
"split2": "^2.0.1" "split2": "^2.0.1"
}, },
"dependencies": { "dependencies": {
"@types/node": {
"version": "8.10.59",
"resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.59.tgz",
"integrity": "sha512-8RkBivJrDCyPpBXhVZcjh7cQxVBSmRk9QM7hOketZzp6Tg79c0N8kkpAIito9bnJ3HCVCHVYz+KHTEbfQNfeVQ==",
"dev": true
},
"electron": {
"version": "2.0.18",
"resolved": "https://registry.npmjs.org/electron/-/electron-2.0.18.tgz",
"integrity": "sha512-PQRHtFvLxHdJzMMIwTddUtkS+Te/fZIs+PHO+zPmTUTBE76V3Od3WRGzMQwiJHxN679licmCKhJpMyxZfDEVWQ==",
"dev": true,
"requires": {
"@types/node": "^8.0.24",
"electron-download": "^3.0.1",
"extract-zip": "^1.0.3"
}
},
"glob": { "glob": {
"version": "7.1.4", "version": "7.1.4",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
@ -12104,6 +12375,11 @@
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true "dev": true
}, },
"normalize-url": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
"integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ=="
},
"now-and-later": { "now-and-later": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz",
@ -12113,6 +12389,24 @@
"once": "^1.3.2" "once": "^1.3.2"
} }
}, },
"npm-conf": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz",
"integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==",
"optional": true,
"requires": {
"config-chain": "^1.1.11",
"pify": "^3.0.0"
},
"dependencies": {
"pify": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
"optional": true
}
}
},
"npm-run-path": { "npm-run-path": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
@ -12219,8 +12513,7 @@
"object-keys": { "object-keys": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
"dev": true
}, },
"object-visit": { "object-visit": {
"version": "1.0.1", "version": "1.0.1",
@ -12441,6 +12734,11 @@
"os-tmpdir": "^1.0.0" "os-tmpdir": "^1.0.0"
} }
}, },
"p-cancelable": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
"integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw=="
},
"p-defer": { "p-defer": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
@ -12721,8 +13019,7 @@
"pend": { "pend": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
"integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA="
"dev": true
}, },
"performance-now": { "performance-now": {
"version": "2.1.0", "version": "2.1.0",
@ -13094,6 +13391,12 @@
"sisteransi": "^1.0.3" "sisteransi": "^1.0.3"
} }
}, },
"proto-list": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
"integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
"optional": true
},
"proxy-addr": { "proxy-addr": {
"version": "2.0.5", "version": "2.0.5",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
@ -13760,6 +14063,14 @@
"integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
"dev": true "dev": true
}, },
"responselike": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
"integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
"requires": {
"lowercase-keys": "^1.0.0"
}
},
"restore-cursor": { "restore-cursor": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
@ -13838,6 +14149,20 @@
"inherits": "^2.0.1" "inherits": "^2.0.1"
} }
}, },
"roarr": {
"version": "2.14.6",
"resolved": "https://registry.npmjs.org/roarr/-/roarr-2.14.6.tgz",
"integrity": "sha512-qjbw0BEesKA+3XFBPt+KVe1PC/Z6ShfJ4wPlx2XifqH5h2Lj8/KQT5XJTsy3n1Es5kai+BwKALaECW3F70B1cg==",
"optional": true,
"requires": {
"boolean": "^3.0.0",
"detect-node": "^2.0.4",
"globalthis": "^1.0.0",
"json-stringify-safe": "^5.0.1",
"semver-compare": "^1.0.0",
"sprintf-js": "^1.1.2"
}
},
"rsvp": { "rsvp": {
"version": "4.8.5", "version": "4.8.5",
"resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz",
@ -13915,6 +14240,14 @@
"walker": "~1.0.5" "walker": "~1.0.5"
} }
}, },
"sanitize-filename": {
"version": "1.6.3",
"resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz",
"integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==",
"requires": {
"truncate-utf8-bytes": "^1.0.0"
}
},
"sass-graph": { "sass-graph": {
"version": "2.2.4", "version": "2.2.4",
"resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
@ -14040,6 +14373,12 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
"integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA=="
}, },
"semver-compare": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
"integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
"optional": true
},
"semver-diff": { "semver-diff": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
@ -14096,6 +14435,15 @@
"integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=", "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=",
"dev": true "dev": true
}, },
"serialize-error": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-5.0.0.tgz",
"integrity": "sha512-/VtpuyzYf82mHYTtI4QKtwHa79vAdU5OQpNPAmE/0UDdlGT0ZxHwC+J6gXkw29wwoVI8fMPsfcVHOwXtUQYYQA==",
"optional": true,
"requires": {
"type-fest": "^0.8.0"
}
},
"serialize-javascript": { "serialize-javascript": {
"version": "1.7.0", "version": "1.7.0",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz",
@ -15294,13 +15642,26 @@
} }
}, },
"sumchecker": { "sumchecker": {
"version": "1.3.1", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-1.3.1.tgz", "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.0.tgz",
"integrity": "sha1-ebs7RFbdBPGOvbwNcDodHa7FEF0=", "integrity": "sha512-yreseuC/z4iaodVoq07XULEOO9p4jnQazO7mbrnDSvWAU/y2cbyIKs+gWJptfcGu9R+1l27K8Rkj0bfvqnBpgQ==",
"dev": true,
"requires": { "requires": {
"debug": "^2.2.0", "debug": "^4.1.0"
"es6-promise": "^4.0.5" },
"dependencies": {
"debug": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"requires": {
"ms": "^2.1.1"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
} }
}, },
"supports-color": { "supports-color": {
@ -15818,6 +16179,11 @@
} }
} }
}, },
"to-readable-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
"integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q=="
},
"to-regex": { "to-regex": {
"version": "3.0.2", "version": "3.0.2",
"resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
@ -15969,6 +16335,14 @@
} }
} }
}, },
"truncate-utf8-bytes": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz",
"integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=",
"requires": {
"utf8-byte-length": "^1.0.1"
}
},
"tryit": { "tryit": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz",
@ -15987,6 +16361,12 @@
"integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
"dev": true "dev": true
}, },
"tunnel": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
"integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
"optional": true
},
"tunnel-agent": { "tunnel-agent": {
"version": "0.6.0", "version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
@ -16015,6 +16395,12 @@
"prelude-ls": "~1.1.2" "prelude-ls": "~1.1.2"
} }
}, },
"type-fest": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
"integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
"optional": true
},
"type-is": { "type-is": {
"version": "1.6.18", "version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
@ -16359,6 +16745,11 @@
"integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
"dev": true "dev": true
}, },
"utf8-byte-length": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz",
"integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E="
},
"utf8-bytes": { "utf8-bytes": {
"version": "0.0.1", "version": "0.0.1",
"resolved": "https://registry.npmjs.org/utf8-bytes/-/utf8-bytes-0.0.1.tgz", "resolved": "https://registry.npmjs.org/utf8-bytes/-/utf8-bytes-0.0.1.tgz",
@ -17510,7 +17901,6 @@
"version": "2.4.1", "version": "2.4.1",
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz",
"integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=",
"dev": true,
"requires": { "requires": {
"fd-slicer": "~1.0.1" "fd-slicer": "~1.0.1"
} }

View File

@ -10,6 +10,7 @@
}, },
"dependencies": { "dependencies": {
"compression": "^1.7.3", "compression": "^1.7.3",
"electron": "^7.1.2",
"fs-extra": "^5.0.0", "fs-extra": "^5.0.0",
"helmet": "^3.21.1", "helmet": "^3.21.1",
"i18n": "^0.8.3", "i18n": "^0.8.3",