Merge branch 'dev' of https://gitea.verdnatura.es/verdnatura/salix into dev
gitea/salix/dev This commit looks good Details

This commit is contained in:
Javi Gallego 2019-04-25 18:30:17 +02:00
commit 24fedff62f
50 changed files with 519 additions and 300 deletions

View File

@ -307,15 +307,14 @@ export default {
ticketsIndex: { ticketsIndex: {
newTicketButton: 'vn-ticket-index > a', newTicketButton: 'vn-ticket-index > a',
searchResult: `vn-ticket-index vn-card > div > vn-table > div > vn-tbody > a.vn-tr`, searchResult: `vn-ticket-index vn-card > div > vn-table > div > vn-tbody > a.vn-tr`,
searchResultDate: `vn-ticket-index vn-table vn-tbody > a:nth-child(1) > vn-td:nth-child(4)`, searchResultDate: 'vn-ticket-index vn-table vn-tbody > a:nth-child(1) > vn-td:nth-child(5)',
searchResultAddress: `vn-ticket-index vn-table vn-tbody > a:nth-child(1) > vn-td:nth-child(6)`,
searchTicketInput: `vn-ticket-index ${components.vnTextfield}`, searchTicketInput: `vn-ticket-index ${components.vnTextfield}`,
searchButton: `vn-ticket-index vn-searchbar vn-icon[icon="search"]`, searchButton: `vn-ticket-index vn-searchbar vn-icon[icon="search"]`,
moreMenu: `vn-ticket-index vn-icon-menu[vn-id="more-button"] > div > vn-icon`, moreMenu: 'vn-ticket-index vn-icon-menu[vn-id="more-button"] > div > vn-icon',
moreMenuTurns: `vn-ticket-index vn-icon-menu vn-drop-down > vn-popover li`, moreMenuTurns: 'vn-ticket-index vn-icon-menu vn-drop-down > vn-popover li:nth-child(2)',
sixthWeeklyTicketTurn: `vn-ticket-weekly > form > div > vn-card > div > vn-table > div > vn-tbody > vn-tr:nth-child(6) > vn-td:nth-child(3) > vn-autocomplete > div > div > input`, sixthWeeklyTicketTurn: 'vn-ticket-weekly > form > div > vn-card > div > vn-table > div > vn-tbody > vn-tr:nth-child(6) > vn-td:nth-child(3) > vn-autocomplete > div > div > input',
weeklyTicket: `vn-ticket-weekly vn-table > div > vn-tbody > vn-tr`, weeklyTicket: 'vn-ticket-weekly vn-table > div > vn-tbody > vn-tr',
sixthWeeklyTicketDeleteIcon: `vn-ticket-weekly > form vn-tbody > vn-tr:nth-child(6) > vn-td:nth-child(6) > vn-icon-button[icon="delete"]` sixthWeeklyTicketDeleteIcon: 'vn-ticket-weekly > form vn-tbody > vn-tr:nth-child(6) > vn-td:nth-child(6) > vn-icon-button[icon="delete"]'
}, },
createTicketView: { createTicketView: {
clientAutocomplete: 'vn-ticket-create vn-autocomplete[field="$ctrl.clientFk"]', clientAutocomplete: 'vn-ticket-create vn-autocomplete[field="$ctrl.clientFk"]',

View File

@ -1,4 +1,12 @@
set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;
log_format upstreamlog
'[$time_local] $remote_addr -> $proxy_host:$upstream_addr '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log upstreamlog;
upstream back { upstream back {
server back_1:3000; server back_1:3000;
server back_2:3000; server back_2:3000;

View File

@ -70,14 +70,16 @@ module.exports = Self => {
discount: 100 discount: 100
}, {transaction: transaction}); }, {transaction: transaction});
await sendMessage(ctx, { if (sale.ticket().client().salesPerson()) {
itemFk: sale.itemFk, await sendMessage(ctx, {
ticketFk: sale.ticketFk, itemFk: sale.itemFk,
recipientFk: sale.item().itemType().worker().userFk, ticketFk: sale.ticketFk,
quantity: sale.quantity, recipientFk: sale.ticket().client().salesPerson().userFk,
concept: sale.concept, quantity: sale.quantity,
nickname: address.nickname concept: sale.concept,
}, transaction); nickname: address.nickname
}, transaction);
}
} }
let claim = await Self.findById(params.claimFk); let claim = await Self.findById(params.claimFk);
@ -99,23 +101,14 @@ module.exports = Self => {
include: [ include: [
{ {
relation: 'ticket', relation: 'ticket',
scope: {fields: ['warehouseFk', 'companyFk']}
},
{
relation: 'item',
scope: { scope: {
fields: ['typeFk'], fields: ['clientFk', 'warehouseFk', 'companyFk'],
include: { include: {
relation: 'itemType', relation: 'client',
scope: { scope: {
fields: ['workerFk'],
include: { include: {
relation: 'worker', relation: 'salesPerson'
scope: {
fields: ['id', 'userFk'],
}
} }
} }
} }
} }

View File

@ -26,7 +26,7 @@
value="{{$ctrl.claim.claimState.description}}"> value="{{$ctrl.claim.claimState.description}}">
</vn-label-value> </vn-label-value>
<vn-label-value label="Created" <vn-label-value label="Created"
value="{{$ctrl.claim.created | dateTime: 'dd/MM/yyyy'}}"> value="{{$ctrl.claim.created | dateTime: 'dd/MM/yyyy HH:mm'}}">
</vn-label-value> </vn-label-value>
<vn-label-value label="Salesperson" <vn-label-value label="Salesperson"
value="{{$ctrl.claim.client.salesPerson.user.nickname}}"> value="{{$ctrl.claim.client.salesPerson.user.nickname}}">

View File

@ -68,7 +68,7 @@
<vn-client-descriptor-popover vn-id="clientDescriptor"></vn-client-descriptor-popover> <vn-client-descriptor-popover vn-id="clientDescriptor"></vn-client-descriptor-popover>
<vn-worker-descriptor-popover <vn-worker-descriptor-popover
vn-id="workerDescriptor" vn-id="workerDescriptor"
user-id="$ctrl.selectedWorker"> worker-fk="$ctrl.selectedWorker">
</vn-worker-descriptor-popover> </vn-worker-descriptor-popover>
<vn-dialog class="dialog-summary" <vn-dialog class="dialog-summary"
vn-id="dialog-summary-claim"> vn-id="dialog-summary-claim">

View File

@ -25,10 +25,10 @@ export default class Controller {
event.stopImmediatePropagation(); event.stopImmediatePropagation();
} }
showWorkerDescriptor(event, userId) { showWorkerDescriptor(event, workerFk) {
event.preventDefault(); event.preventDefault();
event.stopImmediatePropagation(); event.stopImmediatePropagation();
this.selectedWorker = userId; this.selectedWorker = workerFk;
this.$.workerDescriptor.parent = event.target; this.$.workerDescriptor.parent = event.target;
this.$.workerDescriptor.show(); this.$.workerDescriptor.show();
} }

View File

@ -93,7 +93,7 @@
<vn-td expand> <vn-td expand>
<span <span
class="link" class="link"
ng-click="$ctrl.showWorkerDescriptor($event, development.worker.user.id)"> ng-click="$ctrl.showWorkerDescriptor($event, development.workerFk)">
{{::development.worker.user.nickname}} {{::development.worker.user.nickname}}
</span> </span>
</vn-td> </vn-td>
@ -156,7 +156,7 @@
</vn-item-descriptor-popover> </vn-item-descriptor-popover>
<vn-worker-descriptor-popover <vn-worker-descriptor-popover
vn-id="workerDescriptor" vn-id="workerDescriptor"
user-id="$ctrl.selectedWorker"> worker-fk="$ctrl.selectedWorker">
</vn-worker-descriptor-popover> </vn-worker-descriptor-popover>
<vn-ticket-descriptor-popover <vn-ticket-descriptor-popover
vn-id="ticketDescriptor"> vn-id="ticketDescriptor">

View File

@ -32,8 +32,8 @@ class Controller {
this.$.itemDescriptor.show(); this.$.itemDescriptor.show();
} }
showWorkerDescriptor(event, userId) { showWorkerDescriptor(event, workerFk) {
this.selectedWorker = userId; this.selectedWorker = workerFk;
this.$.workerDescriptor.parent = event.target; this.$.workerDescriptor.parent = event.target;
this.$.workerDescriptor.show(); this.$.workerDescriptor.show();
} }

View File

@ -34,6 +34,7 @@ module.exports = Self => {
r.id, r.id,
r.isConciliate, r.isConciliate,
r.payed, r.payed,
r.workerFk,
c.code company, c.code company,
r.created, r.created,
r.invoiceFk ref, r.invoiceFk ref,
@ -41,7 +42,6 @@ module.exports = Self => {
r.amountPaid credit, r.amountPaid credit,
r.bankFk, r.bankFk,
u.nickname userNickname, u.nickname userNickname,
u.id userId,
r.clientFk, r.clientFk,
FALSE pdf, FALSE pdf,
FALSE isInvoice FALSE isInvoice

View File

@ -88,7 +88,7 @@ class Controller {
} }
Controller.$inject = ['$scope', '$state', '$http', 'vnApp', '$translate']; Controller.$inject = ['$scope', '$state', '$http', 'vnApp', '$translate'];
ngModule.component('vnClientBalance', { ngModule.component('vnClientBalanceCreate', {
template: require('./index.html'), template: require('./index.html'),
controller: Controller, controller: Controller,
bindings: { bindings: {

View File

@ -62,7 +62,7 @@
<vn-td> <vn-td>
<span <span
class="link" class="link"
ng-click="$ctrl.showWorkerDescriptor($event, balance.userId)"> ng-click="$ctrl.showWorkerDescriptor($event, balance.workerFk)">
{{::balance.userNickname}} {{::balance.userNickname}}
</span> </span>
</vn-td> </vn-td>
@ -116,7 +116,7 @@
<vn-worker-descriptor-popover <vn-worker-descriptor-popover
vn-id="workerDescriptor" vn-id="workerDescriptor"
user-id="$ctrl.selectedWorker"> worker-fk="$ctrl.selectedWorker">
</vn-worker-descriptor-popover> </vn-worker-descriptor-popover>
<vn-invoice-out-descriptor-popover <vn-invoice-out-descriptor-popover

View File

@ -91,13 +91,13 @@ class Controller {
alert('Not implemented yet'); alert('Not implemented yet');
} }
showWorkerDescriptor(event, userId) { showWorkerDescriptor(event, workerFk) {
if (event.defaultPrevented) return; if (event.defaultPrevented) return;
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();
this.selectedWorker = userId; this.selectedWorker = workerFk;
this.$.workerDescriptor.parent = event.target; this.$.workerDescriptor.parent = event.target;
this.$.workerDescriptor.show(); this.$.workerDescriptor.show();
} }

View File

@ -0,0 +1,128 @@
const ParameterizedSQL = require('loopback-connector').ParameterizedSQL;
const buildFilter = require('vn-loopback/util/filter').buildFilter;
const mergeFilters = require('vn-loopback/util/filter').mergeFilters;
module.exports = Self => {
Self.remoteMethodCtx('filter', {
description: 'Find all instances of the model matched by filter from the data source.',
accessType: 'READ',
accepts: [
{
arg: 'filter',
type: 'Object',
description: 'Filter defining where, order, offset, and limit - must be a JSON-encoded string',
http: {source: 'query'}
},
{
arg: 'search',
type: 'String',
description: 'Searchs the invoiceOut by id',
http: {source: 'query'}
}, {
arg: 'clientFk',
type: 'Integer',
description: 'The client id',
http: {source: 'query'}
}, {
arg: 'hasPdf',
type: 'Boolean',
description: 'Whether the the invoiceOut has PDF or not',
http: {source: 'query'}
}, {
arg: 'amount',
type: 'Number',
description: 'The amount filter',
http: {source: 'query'}
}, {
arg: 'min',
type: 'Number',
description: 'The minimun amount flter',
http: {source: 'query'}
}, {
arg: 'max',
type: 'Number',
description: 'The maximun amount flter',
http: {source: 'query'}
}, {
arg: 'issued',
type: 'Date',
description: 'The issued date filter',
http: {source: 'query'}
}, {
arg: 'created',
type: 'Date',
description: 'The created date filter',
http: {source: 'query'}
}, {
arg: 'dued',
type: 'Date',
description: 'The due date filter',
http: {source: 'query'}
}
],
returns: {
type: ['Object'],
root: true
},
http: {
path: `/filter`,
verb: 'GET'
}
});
Self.filter = async(ctx, filter) => {
let conn = Self.dataSource.connector;
let where = buildFilter(ctx.args, (param, value) => {
switch (param) {
case 'search':
return {ref: {like: `%${value}%`}};
case 'min':
return {amount: {gte: value}};
case 'max':
return {amount: {lte: value}};
case 'hasPdf':
return {'i.pdf': value};
case 'created':
return {'i.created': value};
case 'amount':
case 'clientFk':
case 'companyFk':
case 'issued':
case 'dued':
return {[param]: value};
}
});
filter = mergeFilters(ctx.args.filter, {where});
let stmts = [];
let stmt;
stmt = new ParameterizedSQL(
`SELECT
i.id,
i.ref,
i.issued,
i.amount,
i.created,
i.dued,
i.clientFk,
i.pdf AS hasPdf,
c.socialName AS clientSocialName,
co.code AS companyCode
FROM invoiceOut i
LEFT JOIN client c ON c.id = i.clientFk
LEFT JOIN company co ON co.id = i.companyFk`
);
stmt.merge(conn.makeSuffix(filter));
let itemsIndex = stmts.push(stmt) - 1;
let sql = ParameterizedSQL.join(stmts, ';');
let result = await conn.executeStmt(sql);
return itemsIndex === 0 ? result : result[itemsIndex];
};
};

View File

@ -1,4 +1,5 @@
module.exports = Self => { module.exports = Self => {
require('../methods/invoiceOut/filter')(Self);
require('../methods/invoiceOut/summary')(Self); require('../methods/invoiceOut/summary')(Self);
require('../methods/invoiceOut/download')(Self); require('../methods/invoiceOut/download')(Self);
}; };

View File

@ -1,20 +1,16 @@
<vn-crud-model <vn-crud-model
vn-id="model" vn-id="model"
url="/api/InvoiceOuts" url="/api/InvoiceOuts/filter"
filter="::$ctrl.filter"
limit="20" limit="20"
data="invoicesOut" data="invoiceOuts"
order="issued DESC" order="issued DESC">
auto-load="false">
</vn-crud-model> </vn-crud-model>
<div class="content-block"> <div class="content-block">
<div class="vn-list"> <div class="vn-list">
<vn-card pad-medium-h> <vn-card pad-medium-h>
<vn-searchbar <vn-searchbar
panel="vn-invoice-search-panel" panel="vn-invoice-search-panel"
model="model" on-search="$ctrl.onSearch($params)"
expr-builder="$ctrl.exprBuilder(param, value)"
auto-load="true"
info="Search invoices by reference" info="Search invoices by reference"
vn-focus> vn-focus>
</vn-searchbar> </vn-searchbar>
@ -36,7 +32,7 @@
</vn-tr> </vn-tr>
</vn-thead> </vn-thead>
<vn-tbody> <vn-tbody>
<a ng-repeat="invoiceOut in invoicesOut" <a ng-repeat="invoiceOut in invoiceOuts"
class="clickable vn-tr searchResult" class="clickable vn-tr searchResult"
ui-sref="invoiceOut.card.summary({id: {{::invoiceOut.id}}})"> ui-sref="invoiceOut.card.summary({id: {{::invoiceOut.id}}})">
<vn-td>{{::invoiceOut.ref | dashIfEmpty}}</vn-td> <vn-td>{{::invoiceOut.ref | dashIfEmpty}}</vn-td>
@ -46,11 +42,11 @@
<span <span
class="link" class="link"
ng-click="$ctrl.showClientDescriptor($event, invoiceOut.clientFk)"> ng-click="$ctrl.showClientDescriptor($event, invoiceOut.clientFk)">
{{::invoiceOut.client.name | dashIfEmpty}} {{::invoiceOut.clientSocialName | dashIfEmpty}}
</span> </span>
</vn-td> </vn-td>
<vn-td>{{::invoiceOut.created | dateTime:'dd/MM/yyyy' | dashIfEmpty}}</vn-td> <vn-td>{{::invoiceOut.created | dateTime:'dd/MM/yyyy' | dashIfEmpty}}</vn-td>
<vn-td>{{::invoiceOut.company.code | dashIfEmpty}}</vn-td> <vn-td>{{::invoiceOut.companyCode | dashIfEmpty}}</vn-td>
<vn-td>{{::invoiceOut.dued | dateTime:'dd/MM/yyyy' | dashIfEmpty}}</vn-td> <vn-td>{{::invoiceOut.dued | dateTime:'dd/MM/yyyy' | dashIfEmpty}}</vn-td>
<vn-td> <vn-td>
<vn-icon-button <vn-icon-button

View File

@ -5,42 +5,6 @@ export default class Controller {
this.accessToken = vnToken.token; this.accessToken = vnToken.token;
this.$ = $scope; this.$ = $scope;
this.selectedInvoiceOut = null; this.selectedInvoiceOut = null;
this.filter = {
include: [
{
relation: 'client',
scope: {
fields: ['name']
}
},
{
relation: 'company',
scope: {
fields: ['code']
}
}
]
};
}
exprBuilder(param, value) {
switch (param) {
case 'search':
return {ref: {like: `%${value}%`}};
case 'min':
return {amount: {gte: value}};
case 'max':
return {amount: {lte: value}};
case 'hasPdf':
case 'amount':
case 'clientFk':
case 'companyFk':
case 'issued':
case 'created':
case 'dued':
return {[param]: value};
}
} }
showClientDescriptor(event, clientFk) { showClientDescriptor(event, clientFk) {
@ -68,6 +32,13 @@ export default class Controller {
event.preventDefault(); event.preventDefault();
event.stopImmediatePropagation(); event.stopImmediatePropagation();
} }
onSearch(params) {
if (params)
this.$.model.applyFilter(null, params);
else
this.$.model.clear();
}
} }
Controller.$inject = ['$scope', 'vnToken']; Controller.$inject = ['$scope', 'vnToken'];

View File

@ -19,9 +19,9 @@
</vn-label-value> </vn-label-value>
</vn-one> </vn-one>
<vn-two> <vn-two>
<h4 translate>Desglose impositivo</h4>
<vn-table model="model"> <vn-table model="model">
<vn-thead> <vn-thead>
<h4 translate>Desglose impositivo</h4>
<vn-tr> <vn-tr>
<vn-th>Type</vn-th> <vn-th>Type</vn-th>
<vn-th>Taxable base</vn-th> <vn-th>Taxable base</vn-th>

View File

@ -1,11 +1,3 @@
Driver: Conductor
Vehicle: Vehículo
Packages: Bultos
Starting time: H. Inicio
Finishing time: H. Fin
Km Start: Km de inicio
Km End: Km de fin
PC: CP
Date: Fecha Date: Fecha
Created: Creada Created: Creada
Due: Vencimiento Due: Vencimiento

View File

@ -1,7 +1,7 @@
@import "variables"; @import "variables";
vn-route-summary .summary { vn-invoice-out-summary .summary {
max-width: $width-large; max-width: $width-large;
vn-icon[icon=insert_drive_file]{ vn-icon[icon=insert_drive_file]{

View File

@ -41,7 +41,7 @@ module.exports = Self => {
}, { }, {
arg: 'hasVisible', arg: 'hasVisible',
type: 'Boolean', type: 'Boolean',
description: 'Whether the the item has o not visible', description: 'Whether the the item has visible or not',
http: {source: 'query'} http: {source: 'query'}
}, { }, {
arg: 'isActive', arg: 'isActive',
@ -73,7 +73,7 @@ module.exports = Self => {
case 'search': case 'search':
return /^\d+$/.test(value) return /^\d+$/.test(value)
? {or: [{'i.id': value}, {'ib.code': value}]} ? {or: [{'i.id': value}, {'ib.code': value}]}
: {'i.name': {like: `%${value}%`}}; : {or: [{'i.name': {like: `%${value}%`}}, {'ib.code': value}]};
case 'id': case 'id':
return {'i.id': value}; return {'i.id': value};
case 'description': case 'description':
@ -94,16 +94,30 @@ module.exports = Self => {
let stmt; let stmt;
stmt = new ParameterizedSQL( stmt = new ParameterizedSQL(
`SELECT i.id, i.image, i.name, i.description, `SELECT i.id,
i.size, i.tag5, i.value5, i.tag6, i.value6, i.image,
i.tag7, i.value7, i.tag8, i.value8, i.name,
i.tag9, i.value9, i.tag10, i.value10, i.subName, i.description,
i.isActive, t.name type, u.nickname userNickname, i.size,
t.name type, u.id userId, i.tag5, i.value5,
intr.description AS intrastat, i.stems, i.tag6, i.value6,
ori.code AS origin, t.name AS type, i.tag7, i.value7,
ic.name AS category, i.density, i.tag8, i.value8,
b.grouping, b.packing, itn.code AS niche, @visibleCalc i.tag9, i.value9,
i.tag10, i.value10,
i.subName,
i.isActive,
t.name type,
t.workerFk buyerFk,
u.nickname userNickname,
intr.description AS intrastat,
i.stems,
ori.code AS origin,
ic.name AS category,
i.density,
b.grouping,
b.packing,
itn.code AS niche, @visibleCalc
FROM item i FROM item i
LEFT JOIN itemType t ON t.id = i.typeFk LEFT JOIN itemType t ON t.id = i.typeFk
LEFT JOIN itemCategory ic ON ic.id = t.categoryFk LEFT JOIN itemCategory ic ON ic.id = t.categoryFk

View File

@ -94,7 +94,7 @@
<vn-td shrink title="{{::item.userNickname}}"> <vn-td shrink title="{{::item.userNickname}}">
<span <span
class="link" class="link"
ng-click="$ctrl.showWorkerDescriptor($event, item.userId)"> ng-click="$ctrl.showWorkerDescriptor($event, item.buyerFk)">
{{::item.userNickname}} {{::item.userNickname}}
</span> </span>
</vn-td> </vn-td>
@ -143,5 +143,5 @@
</vn-item-descriptor-popover> </vn-item-descriptor-popover>
<vn-worker-descriptor-popover <vn-worker-descriptor-popover
vn-id="workerDescriptor" vn-id="workerDescriptor"
user-id="$ctrl.selectedWorker"> worker-fk="$ctrl.selectedWorker">
</vn-worker-descriptor-popover> </vn-worker-descriptor-popover>

View File

@ -68,13 +68,13 @@ class Controller {
} }
showWorkerDescriptor(event, userId) { showWorkerDescriptor(event, workerFk) {
if (event.defaultPrevented) return; if (event.defaultPrevented) return;
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();
this.selectedWorker = userId; this.selectedWorker = workerFk;
this.$.workerDescriptor.parent = event.target; this.$.workerDescriptor.parent = event.target;
this.$.workerDescriptor.show(); this.$.workerDescriptor.show();
} }

View File

@ -53,7 +53,7 @@
<vn-td> <vn-td>
<span <span
class="link" class="link"
ng-click="$ctrl.showWorkerDescriptor($event, request.salesPersonUserFk)"> ng-click="$ctrl.showWorkerDescriptor($event, request.salesPersonFk)">
{{::request.salesPersonNickname}} {{::request.salesPersonNickname}}
</span> </span>
</vn-td> </vn-td>
@ -69,7 +69,7 @@
<vn-td> <vn-td>
<span <span
class="link" class="link"
ng-click="$ctrl.showWorkerDescriptor($event, request.atenderUserFk)"> ng-click="$ctrl.showWorkerDescriptor($event, request.atenderFk)">
{{::request.atenderNickname}} {{::request.atenderNickname}}
</span> </span>
</vn-td> </vn-td>

View File

@ -122,8 +122,8 @@ export default class Controller {
this.$.itemDescriptor.show(); this.$.itemDescriptor.show();
} }
showWorkerDescriptor(event, userId) { showWorkerDescriptor(event, workerFk) {
this.$.workerDescriptor.userId = userId; this.$.workerDescriptor.workerFk = workerFk;
this.$.workerDescriptor.parent = event.target; this.$.workerDescriptor.parent = event.target;
this.$.workerDescriptor.show(); this.$.workerDescriptor.show();
} }

View File

@ -114,8 +114,8 @@ module.exports = Self => {
o.source_app sourceApp, o.source_app sourceApp,
o.confirmed isConfirmed, o.confirmed isConfirmed,
c.name clientName, c.name clientName,
c.salesPersonFk,
u.nickname workerNickname, u.nickname workerNickname,
u.id userId,
co.code companyCode co.code companyCode
FROM hedera.order o FROM hedera.order o
LEFT JOIN address a ON a.id = o.address_id LEFT JOIN address a ON a.id = o.address_id

View File

@ -45,7 +45,7 @@
<vn-td expand> <vn-td expand>
<span <span
class="link" class="link"
ng-click="$ctrl.showWorkerDescriptor($event, order.userId)"> ng-click="$ctrl.showWorkerDescriptor($event, order.salesPersonFk)">
{{::order.workerNickname | dashIfEmpty}} {{::order.workerNickname | dashIfEmpty}}
</span> </span>
</vn-td> </vn-td>
@ -81,7 +81,7 @@
</vn-client-descriptor-popover> </vn-client-descriptor-popover>
<vn-worker-descriptor-popover <vn-worker-descriptor-popover
vn-id="workerDescriptor" vn-id="workerDescriptor"
user-id="$ctrl.selectedWorker"> worker-fk="$ctrl.selectedWorker">
</vn-worker-descriptor-popover> </vn-worker-descriptor-popover>
<vn-dialog <vn-dialog
vn-id="summary" vn-id="summary"

View File

@ -23,10 +23,10 @@ export default class Controller {
event.stopImmediatePropagation(); event.stopImmediatePropagation();
} }
showWorkerDescriptor(event, userId) { showWorkerDescriptor(event, workerFk) {
event.preventDefault(); event.preventDefault();
event.stopImmediatePropagation(); event.stopImmediatePropagation();
this.selectedWorker = userId; this.selectedWorker = workerFk;
this.$.workerDescriptor.parent = event.target; this.$.workerDescriptor.parent = event.target;
this.$.workerDescriptor.show(); this.$.workerDescriptor.show();
} }

View File

@ -0,0 +1,131 @@
const ParameterizedSQL = require('loopback-connector').ParameterizedSQL;
const buildFilter = require('vn-loopback/util/filter').buildFilter;
const mergeFilters = require('vn-loopback/util/filter').mergeFilters;
module.exports = Self => {
Self.remoteMethodCtx('filter', {
description: 'Find all instances of the model matched by filter from the data source.',
accessType: 'READ',
accepts: [
{
arg: 'filter',
type: 'Object',
description: 'Filter defining where, order, offset, and limit - must be a JSON-encoded string',
http: {source: 'query'}
}, {
arg: 'search',
type: 'String',
description: 'Searchs the route by id',
http: {source: 'query'}
}, {
arg: 'workerFk',
type: 'Integer',
description: 'The worker id',
http: {source: 'query'}
}, {
arg: 'agencyModeFk',
type: 'Integer',
description: 'The agencyMode id',
http: {source: 'query'}
}, {
arg: 'to',
type: 'Date',
description: 'The to date filter',
http: {source: 'query'}
}, {
arg: 'from',
type: 'Date',
description: 'The to date filter',
http: {source: 'query'}
}, {
arg: 'vehicleFk',
type: 'Integer',
description: 'The vehicle id',
http: {source: 'query'}
}, {
arg: 'm3',
type: 'Number',
description: 'The m3 filter',
http: {source: 'query'}
}, {
arg: 'description',
type: 'String',
description: 'The description filter',
http: {source: 'query'}
}
],
returns: {
type: ['Object'],
root: true
},
http: {
path: `/filter`,
verb: 'GET'
}
});
Self.filter = async(ctx, filter) => {
let conn = Self.dataSource.connector;
let where = buildFilter(ctx.args, (param, value) => {
switch (param) {
case 'search':
return {'r.id': value};
case 'from':
return {'r.created': {gte: value}};
case 'to':
return {'r.created': {lte: value}};
case 'm3':
return {'r.m3': value};
case 'description':
return {'r.description': {like: `%${value}%`}};
case 'workerFk':
case 'vehicleFk':
case 'agencyModeFk':
return {[param]: value};
}
});
filter = mergeFilters(ctx.args.filter, {where});
let stmts = [];
let stmt;
stmt = new ParameterizedSQL(
`SELECT
r.id,
r.workerFk,
r.created,
r.vehicleFk,
r.agencyModeFk,
r.time,
r.isOk,
r.kmStart,
r.kmEnd,
r.started,
r.finished,
r.gestdocFk,
r.cost,
r.m3,
r.description,
am.name agencyName,
u.nickname AS workerNickname,
v.numberPlate AS vehiclePlateNumber
FROM route r
LEFT JOIN agencyMode am ON am.id = r.agencyModeFk
LEFT JOIN vehicle v ON v.id = r.vehicleFk
LEFT JOIN worker w ON w.id = r.workerFk
LEFT JOIN account.user u ON u.id = w.userFk`
);
stmt.merge(conn.makeSuffix(filter));
let itemsIndex = stmts.push(stmt) - 1;
let sql = ParameterizedSQL.join(stmts, ';');
let result = await conn.executeStmt(sql);
return itemsIndex === 0 ? result : result[itemsIndex];
};
};

View File

@ -1,4 +1,5 @@
module.exports = Self => { module.exports = Self => {
require('../methods/route/filter')(Self);
require('../methods/route/summary')(Self); require('../methods/route/summary')(Self);
require('../methods/route/getTickets')(Self); require('../methods/route/getTickets')(Self);
require('../methods/route/guessPriority')(Self); require('../methods/route/guessPriority')(Self);

View File

@ -1,7 +1,6 @@
<vn-crud-model <vn-crud-model
vn-id="model" vn-id="model"
url="/api/Routes" url="/api/Routes/filter"
filter="::$ctrl.filter"
limit="20" limit="20"
data="routes" data="routes"
order="created DESC"> order="created DESC">
@ -11,9 +10,7 @@
<vn-card pad-medium-h> <vn-card pad-medium-h>
<vn-searchbar <vn-searchbar
panel="vn-route-search-panel" panel="vn-route-search-panel"
model="model" on-search="$ctrl.onSearch($params)"
expr-builder="$ctrl.exprBuilder(param, value)"
auto-load="true"
info="Search routes by id" info="Search routes by id"
vn-focus> vn-focus>
</vn-searchbar> </vn-searchbar>
@ -41,12 +38,12 @@
<vn-td expand> <vn-td expand>
<span <span
class="link" class="link"
ng-click="$ctrl.showWorkerDescriptor($event, route.worker.id)"> ng-click="$ctrl.showWorkerDescriptor($event, route.workerFk)">
{{::route.worker.user.nickname}} {{::route.workerNickname}}
</span> </span>
</vn-td> </vn-td>
<vn-td>{{::route.agencyMode.name | dashIfEmpty}}</vn-td> <vn-td>{{::route.agencyName | dashIfEmpty}}</vn-td>
<vn-td>{{::route.vehicle.numberPlate | dashIfEmpty}}</vn-td> <vn-td>{{::route.vehiclePlateNumber | dashIfEmpty}}</vn-td>
<vn-td>{{::route.created | dateTime:'dd/MM/yyyy' | dashIfEmpty}}</vn-td> <vn-td>{{::route.created | dateTime:'dd/MM/yyyy' | dashIfEmpty}}</vn-td>
<vn-td number>{{::route.m3 | dashIfEmpty}}</vn-td> <vn-td number>{{::route.m3 | dashIfEmpty}}</vn-td>
<vn-td>{{::route.description | dashIfEmpty}}</vn-td> <vn-td>{{::route.description | dashIfEmpty}}</vn-td>
@ -72,7 +69,7 @@
</vn-dialog> </vn-dialog>
<vn-worker-descriptor-popover <vn-worker-descriptor-popover
vn-id="workerDescriptor" vn-id="workerDescriptor"
user-id="$ctrl.selectedWorker"> worker-fk="$ctrl.selectedWorker">
</vn-worker-descriptor-popover> </vn-worker-descriptor-popover>
<a ui-sref="route.create" vn-tooltip="New route" vn-bind="+" fixed-bottom-right> <a ui-sref="route.create" vn-tooltip="New route" vn-bind="+" fixed-bottom-right>
<vn-float-button icon="add"></vn-float-button> <vn-float-button icon="add"></vn-float-button>

View File

@ -4,61 +4,15 @@ export default class Controller {
constructor($scope, vnToken) { constructor($scope, vnToken) {
this.accessToken = vnToken.token; this.accessToken = vnToken.token;
this.$ = $scope; this.$ = $scope;
this.filter = {
include: [
{
relation: 'agencyMode',
scope: {
fields: ['name']
}
},
{
relation: 'vehicle',
scope: {
fields: ['numberPlate']
}
},
{
relation: 'worker',
scope: {
fields: ['userFk'],
include: {
relation: 'user',
scope: {
fields: ['nickname']
}
}
}
},
]
};
} }
exprBuilder(param, value) { showWorkerDescriptor(event, workerFk) {
switch (param) {
case 'search':
return {id: value};
case 'from':
return {created: {gte: value}};
case 'to':
return {created: {lte: value}};
case 'workerFk':
case 'vehicleFk':
case 'agencyModeFk':
case 'm3':
case 'description':
return {[param]: value};
}
}
showWorkerDescriptor(event, userId) {
if (event.defaultPrevented) return; if (event.defaultPrevented) return;
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopImmediatePropagation();
this.selectedWorker = userId; this.selectedWorker = workerFk;
this.$.workerDescriptor.parent = event.target; this.$.workerDescriptor.parent = event.target;
this.$.workerDescriptor.show(); this.$.workerDescriptor.show();
} }
@ -69,6 +23,13 @@ export default class Controller {
event.preventDefault(); event.preventDefault();
event.stopImmediatePropagation(); event.stopImmediatePropagation();
} }
onSearch(params) {
if (params)
this.$.model.applyFilter(null, params);
else
this.$.model.clear();
}
} }
Controller.$inject = ['$scope', 'vnToken']; Controller.$inject = ['$scope', 'vnToken'];

View File

@ -25,11 +25,18 @@ module.exports = Self => {
Self.filter = async filter => { Self.filter = async filter => {
const stmt = new ParameterizedSQL( const stmt = new ParameterizedSQL(
`SELECT `SELECT
e.id, e.ticketFk, e.isBox, e.id,
i1.name namePackage, e.counter, e.ticketFk,
e.checked, i2.name nameBox, e.isBox,
e.itemFk, u.nickname userNickname, e.workerFk,
u.id userId, e.created, e.externalId i1.name namePackage,
e.counter,
e.checked,
i2.name nameBox,
e.itemFk,
u.nickname userNickname,
e.created,
e.externalId
FROM FROM
vn.expedition e vn.expedition e
LEFT JOIN vn.item i2 ON i2.id = e.itemFk LEFT JOIN vn.item i2 ON i2.id = e.itemFk

View File

@ -32,7 +32,6 @@ module.exports = Self => {
st.created, st.created,
st.workerFk, st.workerFk,
u.nickname userNickname, u.nickname userNickname,
u.id userId,
ste.name AS state ste.name AS state
FROM saleTracking st FROM saleTracking st
JOIN sale s ON s.id = st.saleFk JOIN sale s ON s.id = st.saleFk

View File

@ -116,8 +116,7 @@ module.exports = Self => {
w.name AS warehouse, w.name AS warehouse,
u.nickname AS salesPersonNickname, u.nickname AS salesPersonNickname,
ua.nickname AS atenderNickname, ua.nickname AS atenderNickname,
u.id AS salesPersonUserFk, c.salesPersonFk
ua.id AS atenderUserFk
FROM ticketRequest tr FROM ticketRequest tr
LEFT JOIN ticket t ON t.id = tr.ticketFk LEFT JOIN ticket t ON t.id = tr.ticketFk
LEFT JOIN warehouse w ON w.id = t.warehouseFk LEFT JOIN warehouse w ON w.id = t.warehouseFk

View File

@ -192,7 +192,7 @@ module.exports = Self => {
ts.alertLevel as alertLevel, ts.alertLevel as alertLevel,
ts.code as alertLevelCode, ts.code as alertLevelCode,
u.nickname userNickname, u.nickname userNickname,
u.id userId c.salesPersonFk
FROM ticket t FROM ticket t
LEFT JOIN address a ON a.id = t.addressFk LEFT JOIN address a ON a.id = t.addressFk
LEFT JOIN province p ON p.id = a.provinceFk LEFT JOIN province p ON p.id = a.provinceFk

View File

@ -48,7 +48,7 @@
<vn-td expand> <vn-td expand>
<span <span
class="link" class="link"
ng-click="$ctrl.showWorkerDescriptor($event, expedition.userId)"> ng-click="$ctrl.showWorkerDescriptor($event, expedition.workerFk)">
{{::expedition.userNickname | dashIfEmpty}} {{::expedition.userNickname | dashIfEmpty}}
</span> </span>
</vn-td> </vn-td>
@ -67,7 +67,7 @@
</vn-item-descriptor-popover> </vn-item-descriptor-popover>
<vn-worker-descriptor-popover <vn-worker-descriptor-popover
vn-id="workerDescriptor" vn-id="workerDescriptor"
user-id="$ctrl.selectedWorker"> worker-fk="$ctrl.selectedWorker">
</vn-worker-descriptor-popover> </vn-worker-descriptor-popover>
<vn-confirm <vn-confirm
vn-id="delete-expedition" vn-id="delete-expedition"

View File

@ -38,10 +38,10 @@ class Controller {
this.$.itemDescriptor.show(); this.$.itemDescriptor.show();
} }
showWorkerDescriptor(event, userId) { showWorkerDescriptor(event, workerFk) {
event.preventDefault(); event.preventDefault();
event.stopImmediatePropagation(); event.stopImmediatePropagation();
this.selectedWorker = userId; this.selectedWorker = workerFk;
this.$.workerDescriptor.parent = event.target; this.$.workerDescriptor.parent = event.target;
this.$.workerDescriptor.show(); this.$.workerDescriptor.show();
} }

View File

@ -94,7 +94,7 @@
<vn-td expand> <vn-td expand>
<span <span
class="link" class="link"
ng-click="$ctrl.showWorkerDescriptor($event, ticket.userId)"> ng-click="$ctrl.showWorkerDescriptor($event, ticket.salesPersonFk)">
{{::ticket.userNickname | dashIfEmpty}} {{::ticket.userNickname | dashIfEmpty}}
</span> </span>
</vn-td> </vn-td>
@ -154,7 +154,7 @@
</vn-client-descriptor-popover> </vn-client-descriptor-popover>
<vn-worker-descriptor-popover <vn-worker-descriptor-popover
vn-id="workerDescriptor" vn-id="workerDescriptor"
user-id="$ctrl.selectedWorker"> worker-fk="$ctrl.selectedWorker">
</vn-worker-descriptor-popover> </vn-worker-descriptor-popover>
<vn-client-balance-create <vn-client-balance-create
vn-id="balanceCreateDialog"> vn-id="balanceCreateDialog">

View File

@ -126,9 +126,9 @@ export default class Controller {
this.$.clientDescriptor.show(); this.$.clientDescriptor.show();
} }
showWorkerDescriptor(event, userId) { showWorkerDescriptor(event, workerFk) {
this.preventDefault(event); this.preventDefault(event);
this.selectedWorker = userId; this.selectedWorker = workerFk;
this.$.workerDescriptor.parent = event.target; this.$.workerDescriptor.parent = event.target;
this.$.workerDescriptor.show(); this.$.workerDescriptor.show();
} }

View File

@ -38,14 +38,14 @@
<vn-td expand> <vn-td expand>
<span <span
class="link" class="link"
ng-click="$ctrl.showWorkerDescriptor($event, request.requester.user.id)"> ng-click="$ctrl.showWorkerDescriptor($event, request.requesterFk)">
{{::request.requester.user.nickname | dashIfEmpty}} {{::request.requester.user.nickname | dashIfEmpty}}
</span> </span>
</vn-td> </vn-td>
<vn-td expand> <vn-td expand>
<span <span
class="link" class="link"
ng-click="$ctrl.showWorkerDescriptor($event, request.atender.user.id)"> ng-click="$ctrl.showWorkerDescriptor($event, request.atenderFk)">
{{::request.atender.user.nickname | dashIfEmpty}} {{::request.atender.user.nickname | dashIfEmpty}}
</span> </span>
</vn-td> </vn-td>
@ -87,7 +87,7 @@
</vn-item-descriptor-popover> </vn-item-descriptor-popover>
<vn-worker-descriptor-popover <vn-worker-descriptor-popover
vn-id="workerDescriptor" vn-id="workerDescriptor"
user-id="$ctrl.selectedWorker"> worker-fk="$ctrl.selectedWorker">
</vn-worker-descriptor-popover> </vn-worker-descriptor-popover>
<a ui-sref="ticket.card.request.create" <a ui-sref="ticket.card.request.create"
vn-tooltip="New request" vn-tooltip="New request"

View File

@ -60,10 +60,10 @@ class Controller {
this.$.itemDescriptor.show(); this.$.itemDescriptor.show();
} }
showWorkerDescriptor(event, userId) { showWorkerDescriptor(event, workerFk) {
event.preventDefault(); event.preventDefault();
event.stopImmediatePropagation(); event.stopImmediatePropagation();
this.selectedWorker = userId; this.selectedWorker = workerFk;
this.$.workerDescriptor.parent = event.target; this.$.workerDescriptor.parent = event.target;
this.$.workerDescriptor.show(); this.$.workerDescriptor.show();
} }

View File

@ -49,7 +49,7 @@
<vn-td expand> <vn-td expand>
<span <span
class="link" class="link"
ng-click="$ctrl.showWorkerDescriptor($event, sale.userId)"> ng-click="$ctrl.showWorkerDescriptor($event, sale.workerFk)">
{{::sale.userNickname | dashIfEmpty}} {{::sale.userNickname | dashIfEmpty}}
</span> </span>
</vn-td> </vn-td>
@ -67,5 +67,5 @@
</vn-item-descriptor-popover> </vn-item-descriptor-popover>
<vn-worker-descriptor-popover <vn-worker-descriptor-popover
vn-id="workerDescriptor" vn-id="workerDescriptor"
user-id="$ctrl.selectedWorker"> worker-fk="$ctrl.selectedWorker">
</vn-worker-descriptor-popover> </vn-worker-descriptor-popover>

View File

@ -23,10 +23,10 @@ class Controller {
this.$.itemDescriptor.show(); this.$.itemDescriptor.show();
} }
showWorkerDescriptor(event, userId) { showWorkerDescriptor(event, workerFk) {
event.preventDefault(); event.preventDefault();
event.stopImmediatePropagation(); event.stopImmediatePropagation();
this.selectedWorker = userId; this.selectedWorker = workerFk;
this.$.workerDescriptor.parent = event.target; this.$.workerDescriptor.parent = event.target;
this.$.workerDescriptor.show(); this.$.workerDescriptor.show();
} }

View File

@ -41,5 +41,5 @@
</a> </a>
<vn-worker-descriptor-popover <vn-worker-descriptor-popover
vn-id="workerDescriptor" vn-id="workerDescriptor"
user-id="$ctrl.selectedWorker"> worker-fk="$ctrl.selectedWorker">
</vn-worker-descriptor-popover> </vn-worker-descriptor-popover>

View File

@ -28,10 +28,10 @@ class Controller {
}; };
} }
showWorkerDescriptor(event, userId) { showWorkerDescriptor(event, workerFk) {
event.preventDefault(); event.preventDefault();
event.stopImmediatePropagation(); event.stopImmediatePropagation();
this.selectedWorker = userId; this.selectedWorker = workerFk;
this.$.workerDescriptor.parent = event.target; this.$.workerDescriptor.parent = event.target;
this.$.workerDescriptor.show(); this.$.workerDescriptor.show();
} }

View File

@ -11,16 +11,16 @@ class Controller extends Component {
this.worker = null; this.worker = null;
} }
set userId(id) { set workerFk(workerFk) {
if (id == this._userId) return; if (workerFk == this._workerFk) return;
this._userId = id; this._workerFk = workerFk;
this.worker = null; this.worker = null;
this.loadData(); this.loadData();
} }
get userId() { get workerFk() {
return this._userId; return this._workerFk;
} }
set quicklinks(value = {}) { set quicklinks(value = {}) {
@ -40,7 +40,7 @@ class Controller extends Component {
let query = `api/Workers/findOne`; let query = `api/Workers/findOne`;
let filter = { let filter = {
where: { where: {
userFk: this._userId id: this._workerFk
}, },
include: [ include: [
{ {
@ -88,7 +88,7 @@ ngModule.component('vnWorkerDescriptorPopover', {
template: require('./index.html'), template: require('./index.html'),
controller: Controller, controller: Controller,
bindings: { bindings: {
userId: '<', workerFk: '<',
quicklinks: '<' quicklinks: '<'
} }
}); });

View File

@ -21,23 +21,23 @@ describe('worker Component vnWorkerDescriptorPopover', () => {
describe('workerFk()', () => { describe('workerFk()', () => {
it(`should not apply any changes if the received id is the same stored in _workerFk`, () => { it(`should not apply any changes if the received id is the same stored in _workerFk`, () => {
controller.worker = 'I exist!'; controller.worker = 'I exist!';
controller._userId = 1; controller._workerFk = 1;
spyOn(controller, 'loadData'); spyOn(controller, 'loadData');
controller.userId = 1; controller.workerFk = 1;
expect(controller.worker).toEqual('I exist!'); expect(controller.worker).toEqual('I exist!');
expect(controller._userId).toEqual(1); expect(controller._workerFk).toEqual(1);
expect(controller.loadData).not.toHaveBeenCalled(); expect(controller.loadData).not.toHaveBeenCalled();
}); });
it(`should set the received id into _workerFk, set the worker to null and then call loadData()`, () => { it(`should set the received id into _workerFk, set the worker to null and then call loadData()`, () => {
controller.worker = `Please don't`; controller.worker = `Please don't`;
controller._userId = 1; controller._workerFk = 1;
spyOn(controller, 'loadData'); spyOn(controller, 'loadData');
controller.userId = 999; controller.workerFk = 999;
expect(controller.worker).toBeNull(); expect(controller.worker).toBeNull();
expect(controller._userId).toEqual(999); expect(controller._workerFk).toEqual(999);
expect(controller.loadData).toHaveBeenCalledWith(); expect(controller.loadData).toHaveBeenCalledWith();
}); });
}); });
@ -53,14 +53,14 @@ describe('worker Component vnWorkerDescriptorPopover', () => {
describe('loadData()', () => { describe('loadData()', () => {
it(`should perform a get query to store the worker data into the controller`, () => { it(`should perform a get query to store the worker data into the controller`, () => {
controller.userId = 1; controller.workerFk = 1;
controller.canceler = null; controller.canceler = null;
let response = {}; let response = {};
let config = { let config = {
filter: { filter: {
where: { where: {
userFk: controller.userId id: controller.workerFk
}, },
include: [ include: [
{ {

View File

@ -94,5 +94,5 @@
</vn-vertical> </vn-vertical>
<vn-worker-descriptor-popover <vn-worker-descriptor-popover
vn-id="workerDescriptor" vn-id="workerDescriptor"
user-id="$ctrl.selectedWorker"> worker-fk="$ctrl.selectedWorker">
</vn-worker-descriptor-popover> </vn-worker-descriptor-popover>

View File

@ -12,13 +12,13 @@ export default class Controller {
}; };
} }
showWorkerDescriptor(event, userId) { showWorkerDescriptor(event, workerFk) {
if (event.defaultPrevented) return; if (event.defaultPrevented) return;
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();
this.selectedWorker = userId; this.selectedWorker = workerFk;
this.$.workerDescriptor.parent = event.target; this.$.workerDescriptor.parent = event.target;
this.$.workerDescriptor.show(); this.$.workerDescriptor.show();
} }

164
package-lock.json generated
View File

@ -1505,7 +1505,7 @@
}, },
"util": { "util": {
"version": "0.10.3", "version": "0.10.3",
"resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz",
"integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -1733,7 +1733,7 @@
"base": { "base": {
"version": "0.11.2", "version": "0.11.2",
"resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
"integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
"dev": true, "dev": true,
"requires": { "requires": {
"cache-base": "^1.0.1", "cache-base": "^1.0.1",
@ -2097,7 +2097,7 @@
}, },
"browserify-rsa": { "browserify-rsa": {
"version": "4.0.1", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
"integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -2147,7 +2147,7 @@
}, },
"buffer": { "buffer": {
"version": "4.9.1", "version": "4.9.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
"integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -2321,7 +2321,7 @@
"cache-base": { "cache-base": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
"integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"collection-visit": "^1.0.0", "collection-visit": "^1.0.0",
@ -2365,7 +2365,7 @@
}, },
"camelcase-keys": { "camelcase-keys": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
"integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -2496,7 +2496,7 @@
"class-utils": { "class-utils": {
"version": "0.3.6", "version": "0.3.6",
"resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
"integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
"dev": true, "dev": true,
"requires": { "requires": {
"arr-union": "^3.1.0", "arr-union": "^3.1.0",
@ -2656,7 +2656,7 @@
}, },
"string_decoder": { "string_decoder": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true, "dev": true,
"requires": { "requires": {
@ -2730,7 +2730,7 @@
}, },
"colors": { "colors": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", "resolved": "http://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
"integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
"dev": true "dev": true
}, },
@ -2925,7 +2925,7 @@
}, },
"content-disposition": { "content-disposition": {
"version": "0.5.2", "version": "0.5.2",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", "resolved": "http://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
"integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
}, },
"content-security-policy-builder": { "content-security-policy-builder": {
@ -3194,13 +3194,13 @@
"dependencies": { "dependencies": {
"jsesc": { "jsesc": {
"version": "0.5.0", "version": "0.5.0",
"resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
"integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
"dev": true "dev": true
}, },
"regexpu-core": { "regexpu-core": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "http://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz",
"integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -3211,13 +3211,13 @@
}, },
"regjsgen": { "regjsgen": {
"version": "0.2.0", "version": "0.2.0",
"resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
"integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
"dev": true "dev": true
}, },
"regjsparser": { "regjsparser": {
"version": "0.1.5", "version": "0.1.5",
"resolved": "http://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
"integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -3720,7 +3720,7 @@
}, },
"readable-stream": { "readable-stream": {
"version": "1.1.14", "version": "1.1.14",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
"integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -3847,7 +3847,7 @@
"dependencies": { "dependencies": {
"fs-extra": { "fs-extra": {
"version": "0.30.0", "version": "0.30.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", "resolved": "http://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
"integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -4844,7 +4844,7 @@
}, },
"file-loader": { "file-loader": {
"version": "1.1.11", "version": "1.1.11",
"resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", "resolved": "http://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz",
"integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==",
"dev": true, "dev": true,
"requires": { "requires": {
@ -5108,7 +5108,7 @@
}, },
"fs-access": { "fs-access": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", "resolved": "http://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz",
"integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -5181,7 +5181,8 @@
"ansi-regex": { "ansi-regex": {
"version": "2.1.1", "version": "2.1.1",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"aproba": { "aproba": {
"version": "1.2.0", "version": "1.2.0",
@ -5596,7 +5597,8 @@
"safe-buffer": { "safe-buffer": {
"version": "5.1.2", "version": "5.1.2",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"safer-buffer": { "safer-buffer": {
"version": "2.1.2", "version": "2.1.2",
@ -5652,6 +5654,7 @@
"version": "3.0.1", "version": "3.0.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"ansi-regex": "^2.0.0" "ansi-regex": "^2.0.0"
} }
@ -5695,12 +5698,14 @@
"wrappy": { "wrappy": {
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"yallist": { "yallist": {
"version": "3.0.3", "version": "3.0.3",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
} }
} }
}, },
@ -5902,7 +5907,7 @@
"global-modules": { "global-modules": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
"integrity": "sha1-bXcPDrUjrHgWTXK15xqIdyZcw+o=", "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
"dev": true, "dev": true,
"requires": { "requires": {
"global-prefix": "^1.0.1", "global-prefix": "^1.0.1",
@ -5939,7 +5944,7 @@
}, },
"globby": { "globby": {
"version": "5.0.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", "resolved": "http://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
"integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -5984,7 +5989,7 @@
}, },
"got": { "got": {
"version": "6.7.1", "version": "6.7.1",
"resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz",
"integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -6254,7 +6259,7 @@
}, },
"kind-of": { "kind-of": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", "resolved": "http://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz",
"integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=",
"dev": true "dev": true
}, },
@ -6438,7 +6443,7 @@
"dependencies": { "dependencies": {
"es6-promise": { "es6-promise": {
"version": "3.3.1", "version": "3.3.1",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", "resolved": "http://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
"integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=",
"dev": true "dev": true
}, },
@ -7275,7 +7280,7 @@
}, },
"is-builtin-module": { "is-builtin-module": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
"integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -7422,7 +7427,7 @@
}, },
"is-obj": { "is-obj": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
"integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
"dev": true "dev": true
}, },
@ -7453,7 +7458,7 @@
"is-plain-object": { "is-plain-object": {
"version": "2.0.4", "version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true, "dev": true,
"requires": { "requires": {
"isobject": "^3.0.1" "isobject": "^3.0.1"
@ -7623,7 +7628,7 @@
}, },
"jasmine-core": { "jasmine-core": {
"version": "2.99.1", "version": "2.99.1",
"resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz", "resolved": "http://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz",
"integrity": "sha1-5kAN8ea1bhMLYcS80JPap/boyhU=", "integrity": "sha1-5kAN8ea1bhMLYcS80JPap/boyhU=",
"dev": true "dev": true
}, },
@ -7875,7 +7880,7 @@
"karma-chrome-launcher": { "karma-chrome-launcher": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz",
"integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", "integrity": "sha1-zxudBxNswY/iOTJ9JGVMPbw2is8=",
"dev": true, "dev": true,
"requires": { "requires": {
"fs-access": "^1.0.0", "fs-access": "^1.0.0",
@ -8065,7 +8070,7 @@
}, },
"load-json-file": { "load-json-file": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
"integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -9539,7 +9544,7 @@
}, },
"media-typer": { "media-typer": {
"version": "0.3.0", "version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
}, },
"mem": { "mem": {
@ -9562,7 +9567,7 @@
}, },
"meow": { "meow": {
"version": "3.7.0", "version": "3.7.0",
"resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
"integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -9685,7 +9690,7 @@
}, },
"minimist": { "minimist": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
}, },
"minstache": { "minstache": {
@ -9699,7 +9704,7 @@
"dependencies": { "dependencies": {
"commander": { "commander": {
"version": "1.0.4", "version": "1.0.4",
"resolved": "http://registry.npmjs.org/commander/-/commander-1.0.4.tgz", "resolved": "https://registry.npmjs.org/commander/-/commander-1.0.4.tgz",
"integrity": "sha1-Xt6xruI8T7VBprcNaSq+8ZZpotM=", "integrity": "sha1-Xt6xruI8T7VBprcNaSq+8ZZpotM=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -9767,7 +9772,7 @@
}, },
"mkdirp": { "mkdirp": {
"version": "0.5.1", "version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"requires": { "requires": {
"minimist": "0.0.8" "minimist": "0.0.8"
@ -9775,7 +9780,7 @@
"dependencies": { "dependencies": {
"minimist": { "minimist": {
"version": "0.0.8", "version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
} }
} }
@ -9927,7 +9932,7 @@
}, },
"multipipe": { "multipipe": {
"version": "0.1.2", "version": "0.1.2",
"resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", "resolved": "http://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
"integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -10157,7 +10162,7 @@
"dependencies": { "dependencies": {
"jsesc": { "jsesc": {
"version": "0.5.0", "version": "0.5.0",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
"integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
"dev": true "dev": true
} }
@ -10787,7 +10792,8 @@
"ansi-regex": { "ansi-regex": {
"version": "2.1.1", "version": "2.1.1",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"aproba": { "aproba": {
"version": "1.2.0", "version": "1.2.0",
@ -10815,6 +10821,7 @@
"version": "1.1.11", "version": "1.1.11",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"balanced-match": "^1.0.0", "balanced-match": "^1.0.0",
"concat-map": "0.0.1" "concat-map": "0.0.1"
@ -10829,7 +10836,8 @@
"code-point-at": { "code-point-at": {
"version": "1.1.0", "version": "1.1.0",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"concat-map": { "concat-map": {
"version": "0.0.1", "version": "0.0.1",
@ -10840,7 +10848,8 @@
"console-control-strings": { "console-control-strings": {
"version": "1.1.0", "version": "1.1.0",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"core-util-is": { "core-util-is": {
"version": "1.0.2", "version": "1.0.2",
@ -10957,7 +10966,8 @@
"inherits": { "inherits": {
"version": "2.0.3", "version": "2.0.3",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"ini": { "ini": {
"version": "1.3.5", "version": "1.3.5",
@ -10969,6 +10979,7 @@
"version": "1.0.0", "version": "1.0.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"number-is-nan": "^1.0.0" "number-is-nan": "^1.0.0"
} }
@ -10983,6 +10994,7 @@
"version": "3.0.4", "version": "3.0.4",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"brace-expansion": "^1.1.7" "brace-expansion": "^1.1.7"
} }
@ -10990,12 +11002,14 @@
"minimist": { "minimist": {
"version": "0.0.8", "version": "0.0.8",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"minipass": { "minipass": {
"version": "2.3.5", "version": "2.3.5",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"safe-buffer": "^5.1.2", "safe-buffer": "^5.1.2",
"yallist": "^3.0.0" "yallist": "^3.0.0"
@ -11014,6 +11028,7 @@
"version": "0.5.1", "version": "0.5.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"minimist": "0.0.8" "minimist": "0.0.8"
} }
@ -11094,7 +11109,8 @@
"number-is-nan": { "number-is-nan": {
"version": "1.0.1", "version": "1.0.1",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"object-assign": { "object-assign": {
"version": "4.1.1", "version": "4.1.1",
@ -11106,6 +11122,7 @@
"version": "1.4.0", "version": "1.4.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"wrappy": "1" "wrappy": "1"
} }
@ -11191,7 +11208,8 @@
"safe-buffer": { "safe-buffer": {
"version": "5.1.2", "version": "5.1.2",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"safer-buffer": { "safer-buffer": {
"version": "2.1.2", "version": "2.1.2",
@ -11227,6 +11245,7 @@
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"code-point-at": "^1.0.0", "code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0", "is-fullwidth-code-point": "^1.0.0",
@ -11246,6 +11265,7 @@
"version": "3.0.1", "version": "3.0.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"ansi-regex": "^2.0.0" "ansi-regex": "^2.0.0"
} }
@ -11289,12 +11309,14 @@
"wrappy": { "wrappy": {
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"yallist": { "yallist": {
"version": "3.0.3", "version": "3.0.3",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
} }
} }
}, },
@ -11593,7 +11615,7 @@
"dependencies": { "dependencies": {
"minimist": { "minimist": {
"version": "0.0.10", "version": "0.0.10",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
"integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
"dev": true "dev": true
}, },
@ -11655,7 +11677,7 @@
}, },
"os-homedir": { "os-homedir": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
"integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
"dev": true "dev": true
}, },
@ -11671,7 +11693,7 @@
}, },
"os-tmpdir": { "os-tmpdir": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
"dev": true "dev": true
}, },
@ -11860,7 +11882,7 @@
}, },
"path-browserify": { "path-browserify": {
"version": "0.0.0", "version": "0.0.0",
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", "resolved": "http://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
"integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
"dev": true "dev": true
}, },
@ -12149,7 +12171,7 @@
}, },
"pretty-bytes": { "pretty-bytes": {
"version": "1.0.4", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", "resolved": "http://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz",
"integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -12232,13 +12254,13 @@
}, },
"string_decoder": { "string_decoder": {
"version": "0.10.31", "version": "0.10.31",
"resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
"dev": true "dev": true
}, },
"through2": { "through2": {
"version": "0.2.3", "version": "0.2.3",
"resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", "resolved": "http://registry.npmjs.org/through2/-/through2-0.2.3.tgz",
"integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -13129,7 +13151,7 @@
}, },
"safe-regex": { "safe-regex": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
"integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -13254,7 +13276,7 @@
"dependencies": { "dependencies": {
"source-map": { "source-map": {
"version": "0.4.4", "version": "0.4.4",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
"integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -13394,7 +13416,7 @@
"set-value": { "set-value": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
"integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=", "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
"dev": true, "dev": true,
"requires": { "requires": {
"extend-shallow": "^2.0.1", "extend-shallow": "^2.0.1",
@ -13505,7 +13527,7 @@
}, },
"string-width": { "string-width": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "http://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -13581,7 +13603,7 @@
"snapdragon-node": { "snapdragon-node": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
"integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
"dev": true, "dev": true,
"requires": { "requires": {
"define-property": "^1.0.0", "define-property": "^1.0.0",
@ -13632,7 +13654,7 @@
"snapdragon-util": { "snapdragon-util": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
"integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"kind-of": "^3.2.0" "kind-of": "^3.2.0"
@ -13988,7 +14010,7 @@
"split-string": { "split-string": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
"integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
"dev": true, "dev": true,
"requires": { "requires": {
"extend-shallow": "^3.0.0" "extend-shallow": "^3.0.0"
@ -13997,7 +14019,7 @@
"split2": { "split2": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz",
"integrity": "sha1-GGsldbz4PoW30YRldWI47k7kJJM=", "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==",
"dev": true, "dev": true,
"requires": { "requires": {
"through2": "^2.0.2" "through2": "^2.0.2"
@ -14172,7 +14194,7 @@
}, },
"string_decoder": { "string_decoder": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true, "dev": true,
"requires": { "requires": {
@ -14279,7 +14301,7 @@
}, },
"strip-ansi": { "strip-ansi": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -14704,7 +14726,7 @@
}, },
"tar": { "tar": {
"version": "2.2.1", "version": "2.2.1",
"resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", "resolved": "http://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
"integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -14874,7 +14896,7 @@
}, },
"through": { "through": {
"version": "2.3.8", "version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
}, },
"through2": { "through2": {
@ -15146,7 +15168,7 @@
}, },
"tty-browserify": { "tty-browserify": {
"version": "0.0.0", "version": "0.0.0",
"resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", "resolved": "http://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
"integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
"dev": true "dev": true
}, },
@ -15777,7 +15799,7 @@
}, },
"vm-browserify": { "vm-browserify": {
"version": "0.0.4", "version": "0.0.4",
"resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", "resolved": "http://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
"integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
"dev": true, "dev": true,
"requires": { "requires": {