cr
gitea/salix/pipeline/head This commit looks good
Details
gitea/salix/pipeline/head This commit looks good
Details
This commit is contained in:
parent
b335eb4b1f
commit
d8871c0bce
|
@ -22,6 +22,7 @@ module.exports = Self => {
|
|||
Self.getSummary = async id => {
|
||||
let promises = [];
|
||||
let summary = {};
|
||||
const models = Self.app.models;
|
||||
|
||||
// Item basic data and taxes
|
||||
let filter = {
|
||||
|
@ -66,7 +67,7 @@ module.exports = Self => {
|
|||
}
|
||||
]
|
||||
};
|
||||
promises.push(Self.app.models.Item.find(filter));
|
||||
promises.push(models.Item.find(filter));
|
||||
|
||||
// Tags
|
||||
filter = {
|
||||
|
@ -78,21 +79,21 @@ module.exports = Self => {
|
|||
relation: 'tag'
|
||||
}
|
||||
};
|
||||
promises.push(Self.app.models.ItemTag.find(filter));
|
||||
promises.push(models.ItemTag.find(filter));
|
||||
|
||||
// Botanical
|
||||
filter = {
|
||||
where: {itemFk: id},
|
||||
include: [{relation: 'genus'}, {relation: 'specie'}]
|
||||
};
|
||||
promises.push(Self.app.models.ItemBotanical.find(filter));
|
||||
promises.push(models.ItemBotanical.find(filter));
|
||||
|
||||
// Niches
|
||||
filter = {
|
||||
where: {itemFk: id},
|
||||
include: {relation: 'warehouse'}
|
||||
};
|
||||
promises.push(Self.app.models.ItemNiche.find(filter));
|
||||
promises.push(models.ItemNiche.find(filter));
|
||||
|
||||
let res = await Promise.all(promises);
|
||||
|
||||
|
@ -101,15 +102,10 @@ module.exports = Self => {
|
|||
[summary.botanical] = res[2];
|
||||
summary.niches = res[3];
|
||||
|
||||
// Visible Avaible
|
||||
let query = `
|
||||
CALL vn.item_getVisibleAvailable(?,curdate(),?,?)`;
|
||||
res = await models.Item.getVisibleAvailable(summary.item.id, summary.item.itemType().warehouseFk);
|
||||
|
||||
let options = [summary.item.id, summary.item.itemType().warehouseFk, false];
|
||||
[res] = await Self.rawSql(query, options);
|
||||
|
||||
summary.available = res[0].available ? res[0].available : '-';
|
||||
summary.visible = res[0].visible ? res[0].visible : '-';
|
||||
summary.available = res.available;
|
||||
summary.visible = res.visible;
|
||||
return summary;
|
||||
};
|
||||
};
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
const ParameterizedSQL = require('loopback-connector').ParameterizedSQL;
|
||||
module.exports = Self => {
|
||||
Self.remoteMethod('getVisibleAvailable', {
|
||||
description: 'Returns visible and available for params',
|
||||
|
@ -11,6 +12,11 @@ module.exports = Self => {
|
|||
arg: 'warehouseFk',
|
||||
type: 'Number',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
arg: 'dated',
|
||||
type: 'Date',
|
||||
required: false,
|
||||
}],
|
||||
returns: {
|
||||
type: ['object'],
|
||||
|
@ -22,15 +28,35 @@ module.exports = Self => {
|
|||
}
|
||||
});
|
||||
|
||||
Self.getVisibleAvailable = async(id, warehouseFk) => {
|
||||
let query = `
|
||||
CALL vn.item_getVisibleAvailable(?,curdate(),?,?)`;
|
||||
Self.getVisibleAvailable = async(id, warehouseFk, dated = new Date()) => {
|
||||
let stmts = [];
|
||||
|
||||
let options = [id, warehouseFk, false];
|
||||
[res] = await Self.rawSql(query, options);
|
||||
stmts.push(new ParameterizedSQL(
|
||||
'CALL cache.available_refresh(@availableCalc, FALSE, ?, ?)', [
|
||||
warehouseFk,
|
||||
dated
|
||||
]
|
||||
));
|
||||
stmts.push(new ParameterizedSQL(
|
||||
'CALL cache.visible_refresh(@visibleCalc, FALSE,?)', [
|
||||
warehouseFk
|
||||
]
|
||||
));
|
||||
const visibleIndex = stmts.push(new ParameterizedSQL(
|
||||
'SELECT visible FROM cache.visible WHERE calc_id = @visibleCalc AND item_id = ?', [
|
||||
id
|
||||
]
|
||||
)) - 1;
|
||||
const availableIndex = stmts.push(new ParameterizedSQL(
|
||||
'SELECT available FROM cache.available WHERE calc_id = @availableCalc AND item_id = ?', [
|
||||
id
|
||||
]
|
||||
)) - 1;
|
||||
const sql = ParameterizedSQL.join(stmts, ';');
|
||||
let res = await Self.rawStmt(sql);
|
||||
|
||||
return {
|
||||
available: res[0].available,
|
||||
visible: res[0].visible};
|
||||
available: res[availableIndex][0] ? res[availableIndex][0].available : 0,
|
||||
visible: res[visibleIndex][0] ? res[visibleIndex][0].visible : 0};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -61,13 +61,9 @@ module.exports = Self => {
|
|||
}, options);
|
||||
}
|
||||
|
||||
let query = `
|
||||
CALL vn.item_getVisibleAvailable(?,curdate(),?,?)`;
|
||||
res = await models.Item.getVisibleAvailable(itemFk, warehouseFk);
|
||||
|
||||
let params = [itemFk, warehouseFk, true];
|
||||
let [res] = await Self.rawSql(query, params, options);
|
||||
|
||||
let newQuantity = res[0].visible - quantity;
|
||||
let newQuantity = res.visible - quantity;
|
||||
|
||||
await models.Sale.create({
|
||||
ticketFk: ticketFk,
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
const app = require('vn-loopback/server/server');
|
||||
|
||||
describe('item getVisibleAvailable()', () => {
|
||||
it('should check available visible for today', async() => {
|
||||
const itemFk = 1;
|
||||
const warehouseFk = 1;
|
||||
const dated = new Date();
|
||||
let result = await app.models.Item.getVisibleAvailable(itemFk, warehouseFk, dated);
|
||||
|
||||
expect(result.available).toEqual(187);
|
||||
expect(result.visible).toEqual(92);
|
||||
});
|
||||
|
||||
it('should check available visible for no dated', async() => {
|
||||
const itemFk = 1;
|
||||
const warehouseFk = 1;
|
||||
let result = await app.models.Item.getVisibleAvailable(itemFk, warehouseFk);
|
||||
|
||||
expect(result.available).toEqual(187);
|
||||
expect(result.visible).toEqual(92);
|
||||
});
|
||||
|
||||
it('should check available visible for yesterday', async() => {
|
||||
const itemFk = 1;
|
||||
const warehouseFk = 1;
|
||||
let dated = new Date();
|
||||
dated.setDate(dated.getDate() - 1);
|
||||
let result = await app.models.Item.getVisibleAvailable(itemFk, warehouseFk, dated);
|
||||
|
||||
expect(result.available).toEqual(0);
|
||||
expect(result.visible).toEqual(92);
|
||||
});
|
||||
});
|
|
@ -14,13 +14,8 @@ describe('regularize()', () => {
|
|||
|
||||
it('should create a new ticket and add a line', async() => {
|
||||
let ctx = {req: {accessToken: {userId: 18}}};
|
||||
|
||||
let query = `CALL vn.item_getVisibleAvailable(?,curdate(),?,?)`;
|
||||
|
||||
let options = [itemFk, warehouseFk, true];
|
||||
|
||||
let [res] = await app.models.Item.rawSql(query, options);
|
||||
let visible = res[0].visible;
|
||||
let res = await app.models.Item.getVisibleAvailable(itemFk, warehouseFk);
|
||||
let visible = res.visible;
|
||||
let saleQuantity = visible - 11;
|
||||
|
||||
let ticketFk = await app.models.Item.regularize(ctx, itemFk, 11, warehouseFk);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<slot-descriptor>
|
||||
<vn-item-descriptor warehouse-fk="$ctrl.warehouseFk">
|
||||
<vn-item-descriptor warehouse-fk="$ctrl.warehouseFk" dated="$ctrl.dated">
|
||||
<btn-three>
|
||||
<vn-quick-link
|
||||
tooltip="Item diary"
|
||||
|
|
|
@ -2,14 +2,16 @@ import ngModule from '../module';
|
|||
import DescriptorPopover from 'salix/components/descriptor-popover';
|
||||
|
||||
class Controller extends DescriptorPopover {
|
||||
show(parent, id, lineFk) {
|
||||
show(parent, id, lineFk, dated) {
|
||||
super.show(parent, id);
|
||||
this.lineFk = lineFk;
|
||||
this.dated = dated;
|
||||
}
|
||||
|
||||
hide() {
|
||||
super.hide();
|
||||
this.lineFk = null;
|
||||
this.dated = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -18,6 +20,7 @@ ngModule.vnComponent('vnItemDescriptorPopover', {
|
|||
controller: Controller,
|
||||
bindings: {
|
||||
warehouseFk: '<?',
|
||||
lineFk: '<?'
|
||||
lineFk: '<?',
|
||||
dated: '<?'
|
||||
}
|
||||
});
|
||||
|
|
|
@ -31,7 +31,8 @@ class Controller extends Descriptor {
|
|||
if (!this.item) return;
|
||||
|
||||
const params = {
|
||||
warehouseFk: this.item.itemType.warehouseFk
|
||||
warehouseFk: this.item.itemType.warehouseFk,
|
||||
dated: this.dated
|
||||
};
|
||||
|
||||
return this.$http.get(`Items/${this.id}/getVisibleAvailable`, {params})
|
||||
|
@ -65,6 +66,7 @@ ngModule.vnComponent('vnItemDescriptor', {
|
|||
template: require('./index.html'),
|
||||
controller: Controller,
|
||||
bindings: {
|
||||
item: '<'
|
||||
item: '<',
|
||||
dated: '<'
|
||||
}
|
||||
});
|
||||
|
|
|
@ -33,4 +33,14 @@ describe('vnItemDescriptor', () => {
|
|||
expect(controller.item).toEqual(item);
|
||||
});
|
||||
});
|
||||
|
||||
describe('updateStock()', () => {
|
||||
it(`should perform a get query to store the item data into the controller`, () => {
|
||||
$httpBackend.expectGET(`Items/${item.id}/getCard`).respond(item);
|
||||
controller.id = item.id;
|
||||
$httpBackend.flush();
|
||||
|
||||
expect(controller.item).toEqual(item);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -47,14 +47,9 @@ module.exports = Self => {
|
|||
include: {relation: 'ticket'}
|
||||
}, options);
|
||||
|
||||
let [[stock]] = await Self.rawSql(`CALL vn.item_getVisibleAvailable(?,?,?,?)`, [
|
||||
ctx.args.itemFk,
|
||||
request.ticket().shipped,
|
||||
request.ticket().warehouseFk,
|
||||
false
|
||||
], options);
|
||||
const res = await models.Item.getVisibleAvailable(ctx.args.itemFk, request.ticket().warehouseFk, request.ticket().shipped);
|
||||
|
||||
if (stock.available < 0)
|
||||
if (res.available < 0)
|
||||
throw new UserError(`This item is not available`);
|
||||
|
||||
if (request.saleFk) {
|
||||
|
|
|
@ -42,15 +42,9 @@ module.exports = Self => {
|
|||
const item = await models.Item.findById(itemId);
|
||||
const ticket = await models.Ticket.findById(id);
|
||||
|
||||
const shouldRefresh = false;
|
||||
const [[stock]] = await Self.rawSql(`CALL vn.item_getVisibleAvailable(?, ?, ?, ?)`, [
|
||||
itemId,
|
||||
ticket.shipped,
|
||||
ticket.warehouseFk,
|
||||
shouldRefresh
|
||||
]);
|
||||
const res = await models.Item.getVisibleAvailable(itemId, ticket.warehouseFk, ticket.shipped);
|
||||
|
||||
if (stock.available < quantity)
|
||||
if (res.available < quantity)
|
||||
throw new UserError(`This item is not available`);
|
||||
|
||||
const newSale = await models.Sale.create({
|
||||
|
|
|
@ -121,7 +121,7 @@
|
|||
</vn-td>
|
||||
<vn-td number shrink>
|
||||
<span
|
||||
ng-click="descriptor.show($event, sale.itemFk, sale.id)"
|
||||
ng-click="descriptor.show($event, sale.itemFk, sale.id, $ctrl.ticket.shipped)"
|
||||
class="link">
|
||||
{{sale.itemFk | zeroFill:6}}
|
||||
</span>
|
||||
|
|
|
@ -61,8 +61,8 @@ describe('Zone Component vnZoneDeliveryDays', () => {
|
|||
expect(controller.$.data).toEqual(expectedData);
|
||||
});
|
||||
});
|
||||
// Petición #2259 cread
|
||||
xdescribe('onSelection()', () => {
|
||||
|
||||
describe('onSelection()', () => {
|
||||
it('should not call the show popover method if events array is empty', () => {
|
||||
jest.spyOn(controller.$.zoneEvents, 'show');
|
||||
|
||||
|
|
|
@ -3244,7 +3244,7 @@
|
|||
},
|
||||
"util": {
|
||||
"version": "0.10.3",
|
||||
"resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz",
|
||||
"resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
|
||||
"integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
|
@ -4060,7 +4060,7 @@
|
|||
"base": {
|
||||
"version": "0.11.2",
|
||||
"resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
|
||||
"integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
|
||||
"integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"cache-base": "^1.0.1",
|
||||
|
@ -4577,7 +4577,7 @@
|
|||
"cache-base": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
|
||||
"integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
|
||||
"integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"collection-visit": "^1.0.0",
|
||||
|
@ -4754,7 +4754,7 @@
|
|||
"class-utils": {
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
|
||||
"integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
|
||||
"integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"arr-union": "^3.1.0",
|
||||
|
@ -5816,7 +5816,7 @@
|
|||
"dot-prop": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
|
||||
"integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
|
||||
"integrity": "sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc=",
|
||||
"requires": {
|
||||
"is-obj": "^1.0.0"
|
||||
}
|
||||
|
@ -6751,7 +6751,7 @@
|
|||
},
|
||||
"file-loader": {
|
||||
"version": "1.1.11",
|
||||
"resolved": "http://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz",
|
||||
"resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz",
|
||||
"integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
|
@ -7918,7 +7918,7 @@
|
|||
"global-modules": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
|
||||
"integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
|
||||
"integrity": "sha1-bXcPDrUjrHgWTXK15xqIdyZcw+o=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"global-prefix": "^1.0.1",
|
||||
|
@ -8500,7 +8500,7 @@
|
|||
"dependencies": {
|
||||
"es6-promise": {
|
||||
"version": "3.3.1",
|
||||
"resolved": "http://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
|
||||
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
|
||||
"integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=",
|
||||
"dev": true
|
||||
},
|
||||
|
@ -9579,7 +9579,7 @@
|
|||
"is-plain-object": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
|
||||
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
|
||||
"integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"isobject": "^3.0.1"
|
||||
|
@ -9935,7 +9935,7 @@
|
|||
"jasmine-spec-reporter": {
|
||||
"version": "4.2.1",
|
||||
"resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-4.2.1.tgz",
|
||||
"integrity": "sha512-FZBoZu7VE5nR7Nilzy+Np8KuVIOxF4oXDPDknehCYBDE080EnlPu0afdZNmpGDBRCUBv3mj5qgqCRmk6W/K8vg==",
|
||||
"integrity": "sha1-HWMq7ANBZwrTJPkrqEtLMrNeniI=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"colors": "1.1.2"
|
||||
|
@ -11932,7 +11932,7 @@
|
|||
},
|
||||
"minimist": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
|
||||
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
|
||||
},
|
||||
"mississippi": {
|
||||
|
@ -12972,7 +12972,7 @@
|
|||
"dependencies": {
|
||||
"minimist": {
|
||||
"version": "0.0.10",
|
||||
"resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
|
||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
|
||||
"integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
|
||||
"dev": true
|
||||
},
|
||||
|
@ -14180,7 +14180,7 @@
|
|||
"dependencies": {
|
||||
"jsesc": {
|
||||
"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=",
|
||||
"dev": true
|
||||
}
|
||||
|
@ -14558,7 +14558,7 @@
|
|||
},
|
||||
"safe-regex": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
|
||||
"integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
|
@ -14648,7 +14648,7 @@
|
|||
"dependencies": {
|
||||
"source-map": {
|
||||
"version": "0.4.4",
|
||||
"resolved": "http://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
|
||||
"integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
|
@ -15006,7 +15006,7 @@
|
|||
"snapdragon-node": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
|
||||
"integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
|
||||
"integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"define-property": "^1.0.0",
|
||||
|
@ -15057,7 +15057,7 @@
|
|||
"snapdragon-util": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
|
||||
"integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
|
||||
"integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"kind-of": "^3.2.0"
|
||||
|
@ -15332,7 +15332,7 @@
|
|||
"split-string": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
|
||||
"integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
|
||||
"integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"extend-shallow": "^3.0.0"
|
||||
|
@ -16409,7 +16409,7 @@
|
|||
"touch": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
|
||||
"integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
|
||||
"integrity": "sha1-/jZfX3XsntTlaCXgu3bSSrdK+Ds=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"nopt": "~1.0.10"
|
||||
|
|
Loading…
Reference in New Issue