@darkpos/pricing 1.0.32 → 1.0.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/__TEST__/order/split.test.js +356 -0
- package/lib/item/getItemsTotalQuantity.js +7 -0
- package/lib/item/getItemsTotalWeight.js +7 -0
- package/lib/item/getTotalPieces.js +1 -1
- package/lib/item/getTotalQuantity.js +5 -0
- package/lib/item/getTotalWeight.js +7 -0
- package/lib/item/index.js +8 -0
- package/lib/modifier/index.js +0 -2
- package/lib/order/splitByDepartments.js +37 -7
- package/package.json +3 -3
- package/lib/modifier/includePiecesInQuantity.js +0 -10
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
const usePricing = require('../../index');
|
|
2
|
+
const mockStores = require('../mocks/stores');
|
|
3
|
+
|
|
4
|
+
const session = {
|
|
5
|
+
store: mockStores[0],
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
const pricingService = usePricing(session);
|
|
9
|
+
|
|
10
|
+
const dryCleaningModNoAutoSplit = {
|
|
11
|
+
name: 'Dry Cleaning',
|
|
12
|
+
attributes: ['department'],
|
|
13
|
+
code: 'D',
|
|
14
|
+
_id: '66d89d9b4f04f9eb99666483',
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const laundryModNoAutoSplit = {
|
|
18
|
+
name: 'Laundry',
|
|
19
|
+
attributes: ['department'],
|
|
20
|
+
code: 'L',
|
|
21
|
+
_id: '66d89d9b4f04f9eb99666487',
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const tailorinModNoAutoSplit = {
|
|
25
|
+
name: 'Tailoring',
|
|
26
|
+
attributes: ['department'],
|
|
27
|
+
code: 'T',
|
|
28
|
+
_id: '66d89d9b4f04f9eb99666484',
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
describe('Auto Split', () => {
|
|
32
|
+
test('Auto split only by department', () => {
|
|
33
|
+
const { autoSplit } = pricingService.order;
|
|
34
|
+
|
|
35
|
+
// Mock item to compare
|
|
36
|
+
const item1 = {
|
|
37
|
+
_id: '123',
|
|
38
|
+
itemId: '234',
|
|
39
|
+
modifiers: [laundryModNoAutoSplit],
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const item2 = {
|
|
43
|
+
_id: '123',
|
|
44
|
+
itemId: '234',
|
|
45
|
+
modifiers: [dryCleaningModNoAutoSplit],
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
const item3 = {
|
|
49
|
+
_id: '567',
|
|
50
|
+
itemId: '567',
|
|
51
|
+
modifiers: [tailorinModNoAutoSplit],
|
|
52
|
+
quantity: 1000,
|
|
53
|
+
pieces: 2,
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
const item4 = {
|
|
57
|
+
_id: '444',
|
|
58
|
+
itemId: '444',
|
|
59
|
+
quantity: 1000,
|
|
60
|
+
modifiers: [tailorinModNoAutoSplit],
|
|
61
|
+
pieces: 2,
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const subOrders = autoSplit({
|
|
65
|
+
parentOrder: {
|
|
66
|
+
items: [item1, item2, item3, item4],
|
|
67
|
+
status: {},
|
|
68
|
+
modifiers: [],
|
|
69
|
+
displayId: 1,
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
expect(subOrders.length).toEqual(3);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
test('Auto split by department and Items Quantity', () => {
|
|
77
|
+
const { autoSplit } = pricingService.order;
|
|
78
|
+
|
|
79
|
+
const laundryModMaxItemsQuantity4 = {
|
|
80
|
+
...laundryModNoAutoSplit,
|
|
81
|
+
properties: {
|
|
82
|
+
department: { autoSplit: true, maxItems: 2, splitUnit: 'quantity' },
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
// Mock item to compare
|
|
87
|
+
const item1 = {
|
|
88
|
+
_id: '123',
|
|
89
|
+
itemId: '234',
|
|
90
|
+
modifiers: [laundryModMaxItemsQuantity4],
|
|
91
|
+
quantity: 5,
|
|
92
|
+
pieces: 4,
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
const item2 = {
|
|
96
|
+
_id: '123',
|
|
97
|
+
itemId: '234',
|
|
98
|
+
modifiers: [laundryModMaxItemsQuantity4],
|
|
99
|
+
quantity: 5,
|
|
100
|
+
pieces: 4,
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
const item3 = {
|
|
104
|
+
_id: '567',
|
|
105
|
+
itemId: '567',
|
|
106
|
+
modifiers: [dryCleaningModNoAutoSplit],
|
|
107
|
+
quantity: 1000,
|
|
108
|
+
pieces: 2,
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
const item4 = {
|
|
112
|
+
_id: '444',
|
|
113
|
+
itemId: '444',
|
|
114
|
+
quantity: 1000,
|
|
115
|
+
modifiers: [tailorinModNoAutoSplit],
|
|
116
|
+
pieces: 2,
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
const subOrders = autoSplit({
|
|
120
|
+
parentOrder: {
|
|
121
|
+
items: [item1, item2, item3, item4],
|
|
122
|
+
status: {},
|
|
123
|
+
modifiers: [],
|
|
124
|
+
displayId: 1,
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
expect(subOrders.length).toEqual(7);
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
test('Auto split by department and Items Pieces', () => {
|
|
132
|
+
const { autoSplit } = pricingService.order;
|
|
133
|
+
|
|
134
|
+
const laundryModMaxItemsQuantity4 = {
|
|
135
|
+
...laundryModNoAutoSplit,
|
|
136
|
+
properties: {
|
|
137
|
+
department: { autoSplit: true, maxItems: 2, splitUnit: 'pieces' },
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
// Mock item to compare
|
|
142
|
+
const item1 = {
|
|
143
|
+
_id: '123',
|
|
144
|
+
itemId: '234',
|
|
145
|
+
modifiers: [laundryModMaxItemsQuantity4],
|
|
146
|
+
quantity: 5,
|
|
147
|
+
pieces: 2,
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
const item2 = {
|
|
151
|
+
_id: '123',
|
|
152
|
+
itemId: '234',
|
|
153
|
+
modifiers: [laundryModMaxItemsQuantity4],
|
|
154
|
+
quantity: 5,
|
|
155
|
+
pieces: 2,
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
const item3 = {
|
|
159
|
+
_id: '567',
|
|
160
|
+
itemId: '567',
|
|
161
|
+
modifiers: [dryCleaningModNoAutoSplit],
|
|
162
|
+
quantity: 1000,
|
|
163
|
+
pieces: 2,
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
const item4 = {
|
|
167
|
+
_id: '444',
|
|
168
|
+
itemId: '444',
|
|
169
|
+
quantity: 1000,
|
|
170
|
+
modifiers: [tailorinModNoAutoSplit],
|
|
171
|
+
pieces: 2,
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
const subOrders = autoSplit({
|
|
175
|
+
parentOrder: {
|
|
176
|
+
items: [item1, item2, item3, item4],
|
|
177
|
+
status: {},
|
|
178
|
+
modifiers: [],
|
|
179
|
+
displayId: 1,
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
expect(subOrders.length).toEqual(12);
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
test('Auto split by department and Items Pieces 2', () => {
|
|
187
|
+
const { autoSplit } = pricingService.order;
|
|
188
|
+
|
|
189
|
+
const laundryModMaxItemsQuantity4 = {
|
|
190
|
+
...laundryModNoAutoSplit,
|
|
191
|
+
properties: {
|
|
192
|
+
department: { autoSplit: true, maxItems: 6, splitUnit: 'pieces' },
|
|
193
|
+
},
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
const item1 = {
|
|
197
|
+
_id: '123',
|
|
198
|
+
itemId: '234',
|
|
199
|
+
modifiers: [laundryModMaxItemsQuantity4],
|
|
200
|
+
quantity: 10,
|
|
201
|
+
pieces: 2,
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
const subOrders = autoSplit({
|
|
205
|
+
parentOrder: {
|
|
206
|
+
items: [item1],
|
|
207
|
+
status: {},
|
|
208
|
+
modifiers: [],
|
|
209
|
+
displayId: 1,
|
|
210
|
+
},
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
expect(subOrders.length).toEqual(4);
|
|
214
|
+
expect(subOrders[0].items[0].quantity).toEqual(3);
|
|
215
|
+
expect(subOrders[1].items[0].quantity).toEqual(3);
|
|
216
|
+
expect(subOrders[2].items[0].quantity).toEqual(3);
|
|
217
|
+
expect(subOrders[3].items[0].quantity).toEqual(1);
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
test('Auto split by department and Items Pieces 3', () => {
|
|
221
|
+
const { autoSplit } = pricingService.order;
|
|
222
|
+
|
|
223
|
+
const laundryModMaxItemsQuantity4 = {
|
|
224
|
+
...laundryModNoAutoSplit,
|
|
225
|
+
properties: {
|
|
226
|
+
department: { autoSplit: true, maxItems: 6, splitUnit: 'pieces' },
|
|
227
|
+
},
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
const item1 = {
|
|
231
|
+
_id: '123',
|
|
232
|
+
itemId: '234',
|
|
233
|
+
modifiers: [laundryModMaxItemsQuantity4],
|
|
234
|
+
quantity: 10,
|
|
235
|
+
pieces: 2,
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
const item2 = {
|
|
239
|
+
_id: '123',
|
|
240
|
+
itemId: '234',
|
|
241
|
+
modifiers: [tailorinModNoAutoSplit],
|
|
242
|
+
quantity: 5,
|
|
243
|
+
pieces: 2,
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
const item3 = {
|
|
247
|
+
_id: '567',
|
|
248
|
+
itemId: '567',
|
|
249
|
+
modifiers: [dryCleaningModNoAutoSplit],
|
|
250
|
+
quantity: 1000,
|
|
251
|
+
pieces: 2,
|
|
252
|
+
};
|
|
253
|
+
|
|
254
|
+
const subOrders = autoSplit({
|
|
255
|
+
parentOrder: {
|
|
256
|
+
items: [item1, item2, item3],
|
|
257
|
+
status: {},
|
|
258
|
+
modifiers: [],
|
|
259
|
+
displayId: 1,
|
|
260
|
+
},
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
expect(subOrders.length).toEqual(6);
|
|
264
|
+
expect(subOrders[0].items[0].quantity).toEqual(3);
|
|
265
|
+
expect(subOrders[1].items[0].quantity).toEqual(3);
|
|
266
|
+
expect(subOrders[2].items[0].quantity).toEqual(3);
|
|
267
|
+
expect(subOrders[3].items[0].quantity).toEqual(1);
|
|
268
|
+
expect(subOrders[4].items[0].quantity).toEqual(5);
|
|
269
|
+
expect(subOrders[5].items[0].quantity).toEqual(1000);
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
test('Auto split by department and Items Weight', () => {
|
|
273
|
+
const { autoSplit } = pricingService.order;
|
|
274
|
+
|
|
275
|
+
const laundryModMaxItems = {
|
|
276
|
+
...laundryModNoAutoSplit,
|
|
277
|
+
properties: {
|
|
278
|
+
department: {
|
|
279
|
+
autoSplit: true,
|
|
280
|
+
maxItems: 100,
|
|
281
|
+
splitUnit: 'weight',
|
|
282
|
+
},
|
|
283
|
+
},
|
|
284
|
+
};
|
|
285
|
+
|
|
286
|
+
const item1 = {
|
|
287
|
+
_id: '123',
|
|
288
|
+
itemId: '234',
|
|
289
|
+
modifiers: [laundryModMaxItems],
|
|
290
|
+
quantity: 10,
|
|
291
|
+
pieces: 2,
|
|
292
|
+
weight: 30,
|
|
293
|
+
};
|
|
294
|
+
|
|
295
|
+
const subOrders = autoSplit({
|
|
296
|
+
parentOrder: {
|
|
297
|
+
items: [item1],
|
|
298
|
+
status: {},
|
|
299
|
+
modifiers: [],
|
|
300
|
+
displayId: 1,
|
|
301
|
+
},
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
expect(subOrders.length).toEqual(4);
|
|
305
|
+
expect(subOrders[0].items[0].quantity).toEqual(3);
|
|
306
|
+
expect(subOrders[1].items[0].quantity).toEqual(3);
|
|
307
|
+
expect(subOrders[2].items[0].quantity).toEqual(3);
|
|
308
|
+
expect(subOrders[3].items[0].quantity).toEqual(1);
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
test('Auto split by department and Items Weight 2', () => {
|
|
312
|
+
const { autoSplit } = pricingService.order;
|
|
313
|
+
|
|
314
|
+
const laundryModMaxItems = {
|
|
315
|
+
...laundryModNoAutoSplit,
|
|
316
|
+
properties: {
|
|
317
|
+
department: {
|
|
318
|
+
autoSplit: true,
|
|
319
|
+
maxItems: 25,
|
|
320
|
+
splitUnit: 'weight',
|
|
321
|
+
},
|
|
322
|
+
},
|
|
323
|
+
};
|
|
324
|
+
|
|
325
|
+
const item1 = {
|
|
326
|
+
_id: '123',
|
|
327
|
+
itemId: '234',
|
|
328
|
+
modifiers: [laundryModMaxItems],
|
|
329
|
+
quantity: 1,
|
|
330
|
+
pieces: 2,
|
|
331
|
+
weight: 25,
|
|
332
|
+
};
|
|
333
|
+
|
|
334
|
+
const item2 = {
|
|
335
|
+
_id: '322',
|
|
336
|
+
itemId: '4555',
|
|
337
|
+
modifiers: [laundryModMaxItems],
|
|
338
|
+
quantity: 1,
|
|
339
|
+
pieces: 2,
|
|
340
|
+
weight: 25,
|
|
341
|
+
};
|
|
342
|
+
|
|
343
|
+
const subOrders = autoSplit({
|
|
344
|
+
parentOrder: {
|
|
345
|
+
items: [item1, item2],
|
|
346
|
+
status: {},
|
|
347
|
+
modifiers: [],
|
|
348
|
+
displayId: 1,
|
|
349
|
+
},
|
|
350
|
+
});
|
|
351
|
+
|
|
352
|
+
expect(subOrders.length).toEqual(2);
|
|
353
|
+
expect(subOrders[0].items[0].quantity).toEqual(1);
|
|
354
|
+
expect(subOrders[1].items[0].quantity).toEqual(1);
|
|
355
|
+
});
|
|
356
|
+
});
|
package/lib/item/index.js
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
const getItemsTotalPieces = require('./getItemsTotalPieces');
|
|
2
2
|
const getTotalPieces = require('./getTotalPieces');
|
|
3
|
+
const getItemsTotalQuantity = require('./getItemsTotalQuantity');
|
|
4
|
+
const getTotalQuantity = require('./getTotalQuantity');
|
|
5
|
+
const getItemsTotalWeight = require('./getItemsTotalWeight');
|
|
6
|
+
const getTotalWeight = require('./getTotalWeight');
|
|
3
7
|
const removeModifier = require('./removeModifier');
|
|
4
8
|
const removeModifiers = require('./removeModifiers');
|
|
5
9
|
const findOriginalItem = require('./findOriginalItem');
|
|
@@ -45,6 +49,10 @@ const itemActions = (deps = {}) => {
|
|
|
45
49
|
};
|
|
46
50
|
|
|
47
51
|
const freezedActions = Object.freeze({
|
|
52
|
+
getItemsTotalWeight: getItemsTotalWeight(innerDeps),
|
|
53
|
+
getTotalWeight: getTotalWeight(innerDeps),
|
|
54
|
+
getItemsTotalQuantity: getItemsTotalQuantity(innerDeps),
|
|
55
|
+
getTotalQuantity: getTotalQuantity(innerDeps),
|
|
48
56
|
getItemsTotalPieces: getItemsTotalPieces(innerDeps),
|
|
49
57
|
getTotalPieces: getTotalPieces(innerDeps),
|
|
50
58
|
removeModifier: removeModifier(innerDeps),
|
package/lib/modifier/index.js
CHANGED
|
@@ -76,7 +76,6 @@ const hasModifier = require('./hasModifier');
|
|
|
76
76
|
const hasRelatedItems = require('./hasRelatedItems');
|
|
77
77
|
const hasFixedModifier = require('./hasFixedModifier');
|
|
78
78
|
const hasCreditModifier = require('./hasCreditModifier');
|
|
79
|
-
const includePiecesInQuantity = require('./includePiecesInQuantity');
|
|
80
79
|
const includesInGroup = require('./includesInGroup');
|
|
81
80
|
const isTrackUsageSubscription = require('./isTrackUsageSubscription');
|
|
82
81
|
const isDirect = require('./isDirect');
|
|
@@ -218,7 +217,6 @@ const modifierActions = (deps = {}) => {
|
|
|
218
217
|
hasAttributes: hasAttributes(innerDeps),
|
|
219
218
|
hasFixedModifier: hasFixedModifier(innerDeps),
|
|
220
219
|
hasCreditModifier: hasCreditModifier(innerDeps),
|
|
221
|
-
includePiecesInQuantity: includePiecesInQuantity(innerDeps),
|
|
222
220
|
includesInGroup: includesInGroup(innerDeps),
|
|
223
221
|
isTrackUsageSubscription: isTrackUsageSubscription(innerDeps),
|
|
224
222
|
isDirect: isDirect(innerDeps),
|
|
@@ -80,6 +80,9 @@ module.exports = ({ utils, _, itemActions, modifierActions, settings }) => {
|
|
|
80
80
|
return (deps.length && deps[0].name) || 'other';
|
|
81
81
|
};
|
|
82
82
|
|
|
83
|
+
const isSplitByPieces = splitUnit => splitUnit === 'pieces';
|
|
84
|
+
const isSplitByWeight = splitUnit => splitUnit === 'weight';
|
|
85
|
+
|
|
83
86
|
return function splitByDepartments(order) {
|
|
84
87
|
const { items } = order;
|
|
85
88
|
const itemsByDepartments = _.groupBy(items, getDepartmentName);
|
|
@@ -94,11 +97,37 @@ module.exports = ({ utils, _, itemActions, modifierActions, settings }) => {
|
|
|
94
97
|
const departmentName = getDepartmentName(newItems[0]);
|
|
95
98
|
const maxItems = modifierActions.getDepartmentMaxItems(department);
|
|
96
99
|
|
|
97
|
-
|
|
98
|
-
department
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
)
|
|
100
|
+
const autoSplit = _.get(
|
|
101
|
+
department || {},
|
|
102
|
+
'properties.department.autoSplit',
|
|
103
|
+
false
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
const splitUnit = _.get(
|
|
107
|
+
department || {},
|
|
108
|
+
'properties.department.splitUnit',
|
|
109
|
+
'quantity'
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
const getItemsTotalCount = itemsParam => {
|
|
113
|
+
if (isSplitByPieces(splitUnit))
|
|
114
|
+
return itemActions.getItemsTotalPieces(itemsParam);
|
|
115
|
+
if (isSplitByWeight(splitUnit))
|
|
116
|
+
return itemActions.getItemsTotalWeight(itemsParam);
|
|
117
|
+
return itemActions.getItemsTotalQuantity(itemsParam);
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
const getItemTotalCount = itemParam => {
|
|
121
|
+
if (isSplitByPieces(splitUnit))
|
|
122
|
+
return itemActions.getTotalPieces(itemParam);
|
|
123
|
+
if (isSplitByWeight(splitUnit))
|
|
124
|
+
return itemActions.getTotalWeight(itemParam);
|
|
125
|
+
return itemActions.getTotalQuantity(itemParam);
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
const totalCount = getItemsTotalCount(newItems);
|
|
129
|
+
|
|
130
|
+
if (department && autoSplit && maxItems && totalCount > maxItems) {
|
|
102
131
|
newItems.forEach(newItem => {
|
|
103
132
|
for (let j = 0; j < newItem.quantity; j += 1) {
|
|
104
133
|
const item = {
|
|
@@ -106,11 +135,12 @@ module.exports = ({ utils, _, itemActions, modifierActions, settings }) => {
|
|
|
106
135
|
quantity: 1,
|
|
107
136
|
_id: helpers.getObjectID(),
|
|
108
137
|
};
|
|
109
|
-
const
|
|
138
|
+
const totalCountPerItem = getItemTotalCount(item);
|
|
139
|
+
|
|
110
140
|
const index = splitOrders.findIndex(
|
|
111
141
|
newOrder =>
|
|
112
142
|
newOrder.items &&
|
|
113
|
-
|
|
143
|
+
getItemsTotalCount(newOrder.items) + totalCountPerItem <=
|
|
114
144
|
maxItems &&
|
|
115
145
|
departmentName === getDepartmentName(newOrder.items[0])
|
|
116
146
|
);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@darkpos/pricing",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.34",
|
|
4
4
|
"description": "Pricing calculator",
|
|
5
5
|
"author": "Dark POS",
|
|
6
6
|
"license": "ISC",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"access": "public"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@darkpos/utils": "1.0.
|
|
22
|
+
"@darkpos/utils": "1.0.10",
|
|
23
23
|
"lodash": "^4.17.21",
|
|
24
24
|
"moment-timezone": "^0.5.34"
|
|
25
25
|
},
|
|
@@ -36,5 +36,5 @@
|
|
|
36
36
|
"supertest": "^6.2.3",
|
|
37
37
|
"supervisor": "^0.12.0"
|
|
38
38
|
},
|
|
39
|
-
"gitHead": "
|
|
39
|
+
"gitHead": "e34041588c206612b5c2dff2e27aa34ac838137e"
|
|
40
40
|
}
|