@parcel/workers 2.0.0-nightly.130 → 2.0.0-nightly.1303

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/lib/WorkerFarm.js CHANGED
@@ -11,107 +11,129 @@ Object.defineProperty(exports, "Handle", {
11
11
  });
12
12
  exports.default = void 0;
13
13
 
14
- var _assert = _interopRequireDefault(require("assert"));
14
+ function _assert() {
15
+ const data = _interopRequireDefault(require("assert"));
15
16
 
16
- var _nullthrows = _interopRequireDefault(require("nullthrows"));
17
+ _assert = function () {
18
+ return data;
19
+ };
17
20
 
18
- var _events = _interopRequireDefault(require("events"));
21
+ return data;
22
+ }
19
23
 
20
- var _core = require("@parcel/core");
24
+ function _nullthrows() {
25
+ const data = _interopRequireDefault(require("nullthrows"));
21
26
 
22
- var _diagnostic = _interopRequireWildcard(require("@parcel/diagnostic"));
27
+ _nullthrows = function () {
28
+ return data;
29
+ };
23
30
 
24
- var _Worker = _interopRequireDefault(require("./Worker"));
31
+ return data;
32
+ }
25
33
 
26
- var _cpuCount = _interopRequireDefault(require("./cpuCount"));
34
+ function _events() {
35
+ const data = _interopRequireDefault(require("events"));
27
36
 
28
- var _Handle = _interopRequireDefault(require("./Handle"));
37
+ _events = function () {
38
+ return data;
39
+ };
29
40
 
30
- var _childState = require("./childState");
41
+ return data;
42
+ }
31
43
 
32
- var _backend = require("./backend");
44
+ function _core() {
45
+ const data = require("@parcel/core");
33
46
 
34
- var _Profiler = _interopRequireDefault(require("./Profiler"));
47
+ _core = function () {
48
+ return data;
49
+ };
35
50
 
36
- var _Trace = _interopRequireDefault(require("./Trace"));
51
+ return data;
52
+ }
37
53
 
38
- var _fs = _interopRequireDefault(require("fs"));
54
+ function _diagnostic() {
55
+ const data = _interopRequireWildcard(require("@parcel/diagnostic"));
39
56
 
40
- var _logger = _interopRequireDefault(require("@parcel/logger"));
57
+ _diagnostic = function () {
58
+ return data;
59
+ };
41
60
 
42
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
61
+ return data;
62
+ }
43
63
 
44
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
64
+ var _Worker = _interopRequireDefault(require("./Worker"));
45
65
 
46
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
66
+ var _cpuCount = _interopRequireDefault(require("./cpuCount"));
47
67
 
48
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
68
+ var _Handle = _interopRequireDefault(require("./Handle"));
49
69
 
50
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
70
+ var _childState = require("./childState");
51
71
 
52
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
72
+ var _backend = require("./backend");
53
73
 
54
- let profileId = 1;
55
- let referenceId = 1;
74
+ function _profiler() {
75
+ const data = require("@parcel/profiler");
56
76
 
57
- /**
58
- * workerPath should always be defined inside farmOptions
59
- */
60
- class WorkerFarm extends _events.default {
61
- constructor(farmOptions = {}) {
62
- super();
77
+ _profiler = function () {
78
+ return data;
79
+ };
63
80
 
64
- _defineProperty(this, "callQueue", []);
81
+ return data;
82
+ }
65
83
 
66
- _defineProperty(this, "ending", false);
84
+ function _fs() {
85
+ const data = _interopRequireDefault(require("fs"));
67
86
 
68
- _defineProperty(this, "localWorker", void 0);
87
+ _fs = function () {
88
+ return data;
89
+ };
69
90
 
70
- _defineProperty(this, "options", void 0);
91
+ return data;
92
+ }
71
93
 
72
- _defineProperty(this, "run", void 0);
94
+ function _logger() {
95
+ const data = _interopRequireDefault(require("@parcel/logger"));
73
96
 
74
- _defineProperty(this, "warmWorkers", 0);
97
+ _logger = function () {
98
+ return data;
99
+ };
75
100
 
76
- _defineProperty(this, "workers", new Map());
101
+ return data;
102
+ }
77
103
 
78
- _defineProperty(this, "handles", new Map());
104
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
79
105
 
80
- _defineProperty(this, "sharedReferences", new Map());
106
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
81
107
 
82
- _defineProperty(this, "sharedReferencesByValue", new Map());
108
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
83
109
 
84
- _defineProperty(this, "profiler", void 0);
110
+ let referenceId = 1;
85
111
 
86
- _defineProperty(this, "workerApi", {
87
- callMaster: async (request, awaitResponse = true) => {
88
- // $FlowFixMe
89
- let result = await this.processRequest(_objectSpread({}, request, {
90
- awaitResponse
91
- }));
92
- return (0, _core.deserialize)((0, _core.serialize)(result));
93
- },
94
- createReverseHandle: fn => this.createReverseHandle(fn),
95
- callChild: (childId, request) => new Promise((resolve, reject) => {
96
- (0, _nullthrows.default)(this.workers.get(childId)).call(_objectSpread({}, request, {
97
- resolve,
98
- reject,
99
- retries: 0
100
- }));
101
- }),
102
- getSharedReference: ref => this.sharedReferences.get(ref),
103
- resolveSharedReference: value => this.sharedReferencesByValue.get(value)
104
- });
112
+ /**
113
+ * workerPath should always be defined inside farmOptions
114
+ */
115
+ class WorkerFarm extends _events().default {
116
+ callQueue = [];
117
+ ending = false;
118
+ warmWorkers = 0;
119
+ workers = new Map();
120
+ handles = new Map();
121
+ sharedReferences = new Map();
122
+ sharedReferencesByValue = new Map();
123
+ serializedSharedReferences = new Map();
105
124
 
106
- this.options = _objectSpread({
125
+ constructor(farmOptions = {}) {
126
+ super();
127
+ this.options = {
107
128
  maxConcurrentWorkers: WorkerFarm.getNumWorkers(),
108
129
  maxConcurrentCallsPerWorker: WorkerFarm.getConcurrentCallsPerWorker(),
109
130
  forcedKillTime: 500,
110
131
  warmWorkers: false,
111
132
  useLocalWorker: true,
112
133
  // TODO: setting this to false makes some tests fail, figure out why
113
- backend: (0, _backend.detectBackend)()
114
- }, farmOptions);
134
+ backend: (0, _backend.detectBackend)(),
135
+ ...farmOptions
136
+ };
115
137
 
116
138
  if (!this.options.workerPath) {
117
139
  throw new Error('Please provide a worker path!');
@@ -119,10 +141,44 @@ class WorkerFarm extends _events.default {
119
141
 
120
142
 
121
143
  this.localWorker = require(this.options.workerPath);
122
- this.run = this.createHandle('run');
144
+ this.localWorkerInit = this.localWorker.childInit != null ? this.localWorker.childInit() : null;
145
+ this.run = this.createHandle('run'); // Worker thread stdout is by default piped into the process stdout, if there are enough worker
146
+ // threads to exceed the default listener limit, then anything else piping into stdout will trigger
147
+ // the `MaxListenersExceededWarning`, so we should ensure the max listeners is at least equal to the
148
+ // number of workers + 1 for the main thread.
149
+ //
150
+ // Note this can't be fixed easily where other things pipe into stdout - even after starting > 10 worker
151
+ // threads `process.stdout.getMaxListeners()` will still return 10, however adding another pipe into `stdout`
152
+ // will give the warning with `<worker count + 1>` as the number of listeners.
153
+
154
+ process.stdout.setMaxListeners(Math.max(process.stdout.getMaxListeners(), WorkerFarm.getNumWorkers() + 1));
123
155
  this.startMaxWorkers();
124
156
  }
125
157
 
158
+ workerApi = {
159
+ callMaster: async (request, awaitResponse = true) => {
160
+ // $FlowFixMe
161
+ let result = await this.processRequest({ ...request,
162
+ awaitResponse
163
+ });
164
+ return (0, _core().deserialize)((0, _core().serialize)(result));
165
+ },
166
+ createReverseHandle: fn => this.createReverseHandle(fn),
167
+ callChild: (childId, request) => new Promise((resolve, reject) => {
168
+ (0, _nullthrows().default)(this.workers.get(childId)).call({ ...request,
169
+ resolve,
170
+ reject,
171
+ retries: 0
172
+ });
173
+ }),
174
+ runHandle: (handle, args) => this.workerApi.callChild((0, _nullthrows().default)(handle.childId), {
175
+ handle: handle.id,
176
+ args
177
+ }),
178
+ getSharedReference: ref => this.sharedReferences.get(ref),
179
+ resolveSharedReference: value => this.sharedReferencesByValue.get(value)
180
+ };
181
+
126
182
  warmupWorker(method, args) {
127
183
  // Workers are already stopping
128
184
  if (this.ending) {
@@ -149,19 +205,35 @@ class WorkerFarm extends _events.default {
149
205
  return this.options.maxConcurrentWorkers > 0 || !this.options.useLocalWorker;
150
206
  }
151
207
 
152
- createHandle(method) {
153
- return (...args) => {
208
+ createHandle(method, useMainThread = false) {
209
+ if (!this.options.useLocalWorker) {
210
+ useMainThread = false;
211
+ }
212
+
213
+ return async (...args) => {
154
214
  // Child process workers are slow to start (~600ms).
155
215
  // While we're waiting, just run on the main thread.
156
216
  // This significantly speeds up startup time.
157
- if (this.shouldUseRemoteWorkers()) {
217
+ if (this.shouldUseRemoteWorkers() && !useMainThread) {
158
218
  return this.addCall(method, [...args, false]);
159
219
  } else {
160
220
  if (this.options.warmWorkers && this.shouldStartRemoteWorkers()) {
161
221
  this.warmupWorker(method, args);
162
222
  }
163
223
 
164
- let processedArgs = (0, _core.restoreDeserializedObject)((0, _core.prepareForSerialization)([...args, false]));
224
+ let processedArgs;
225
+
226
+ if (!useMainThread) {
227
+ processedArgs = (0, _core().restoreDeserializedObject)((0, _core().prepareForSerialization)([...args, false]));
228
+ } else {
229
+ processedArgs = args;
230
+ }
231
+
232
+ if (this.localWorkerInit != null) {
233
+ await this.localWorkerInit;
234
+ this.localWorkerInit = null;
235
+ }
236
+
165
237
  return this.localWorker[method](this.workerApi, ...processedArgs);
166
238
  }
167
239
  };
@@ -171,6 +243,8 @@ class WorkerFarm extends _events.default {
171
243
  // Handle ipc errors
172
244
  if (error.code === 'ERR_IPC_CHANNEL_CLOSED') {
173
245
  return this.stopWorker(worker);
246
+ } else {
247
+ _logger().default.error(error, '@parcel/workers');
174
248
  }
175
249
  }
176
250
 
@@ -178,9 +252,11 @@ class WorkerFarm extends _events.default {
178
252
  let worker = new _Worker.default({
179
253
  forcedKillTime: this.options.forcedKillTime,
180
254
  backend: this.options.backend,
181
- patchConsole: this.options.patchConsole
255
+ shouldPatchConsole: this.options.shouldPatchConsole,
256
+ shouldTrace: this.options.shouldTrace,
257
+ sharedReferences: this.sharedReferences
182
258
  });
183
- worker.fork((0, _nullthrows.default)(this.options.workerPath));
259
+ worker.fork((0, _nullthrows().default)(this.options.workerPath));
184
260
  worker.on('request', data => this.processRequest(data, worker));
185
261
  worker.on('ready', () => this.processQueue());
186
262
  worker.on('response', () => this.processQueue());
@@ -215,7 +291,9 @@ class WorkerFarm extends _events.default {
215
291
  this.startChild();
216
292
  }
217
293
 
218
- for (let worker of this.workers.values()) {
294
+ let workers = [...this.workers.values()].sort((a, b) => a.calls.size - b.calls.size);
295
+
296
+ for (let worker of workers) {
219
297
  if (!this.callQueue.length) {
220
298
  break;
221
299
  }
@@ -225,9 +303,19 @@ class WorkerFarm extends _events.default {
225
303
  }
226
304
 
227
305
  if (worker.calls.size < this.options.maxConcurrentCallsPerWorker) {
228
- worker.call(this.callQueue.shift());
306
+ this.callWorker(worker, this.callQueue.shift());
307
+ }
308
+ }
309
+ }
310
+
311
+ async callWorker(worker, call) {
312
+ for (let ref of this.sharedReferences.keys()) {
313
+ if (!worker.sentSharedReferences.has(ref)) {
314
+ await worker.sendSharedReference(ref, this.getSerializedSharedReference(ref));
229
315
  }
230
316
  }
317
+
318
+ worker.call(call);
231
319
  }
232
320
 
233
321
  async processRequest(data, worker) {
@@ -242,7 +330,9 @@ class WorkerFarm extends _events.default {
242
330
  let mod;
243
331
 
244
332
  if (handleId != null) {
245
- mod = (0, _nullthrows.default)(this.handles.get(handleId)).fn;
333
+ var _this$handles$get;
334
+
335
+ mod = (0, _nullthrows().default)((_this$handles$get = this.handles.get(handleId)) === null || _this$handles$get === void 0 ? void 0 : _this$handles$get.fn);
246
336
  } else if (location) {
247
337
  // $FlowFixMe this must be dynamic
248
338
  mod = require(location);
@@ -261,27 +351,26 @@ class WorkerFarm extends _events.default {
261
351
  idx,
262
352
  type: 'response',
263
353
  contentType: 'error',
264
- content: (0, _diagnostic.anyToDiagnostic)(e)
354
+ content: (0, _diagnostic().anyToDiagnostic)(e)
265
355
  });
266
356
 
267
357
  let result;
268
358
 
269
359
  if (method == null) {
270
360
  try {
271
- result = responseFromContent((await mod(...args)));
361
+ result = responseFromContent(await mod(...args));
272
362
  } catch (e) {
273
363
  result = errorResponseFromError(e);
274
364
  }
275
365
  } else {
276
366
  // ESModule default interop
277
- // $FlowFixMe
278
367
  if (mod.__esModule && !mod[method] && mod.default) {
279
368
  mod = mod.default;
280
369
  }
281
370
 
282
371
  try {
283
372
  // $FlowFixMe
284
- result = responseFromContent((await mod[method](...args)));
373
+ result = responseFromContent(await mod[method](...args));
285
374
  } catch (e) {
286
375
  result = errorResponseFromError(e);
287
376
  }
@@ -292,7 +381,7 @@ class WorkerFarm extends _events.default {
292
381
  worker.send(result);
293
382
  } else {
294
383
  if (result.contentType === 'error') {
295
- throw new _diagnostic.default({
384
+ throw new (_diagnostic().default)({
296
385
  diagnostic: result.content
297
386
  });
298
387
  }
@@ -321,6 +410,7 @@ class WorkerFarm extends _events.default {
321
410
 
322
411
  async end() {
323
412
  this.ending = true;
413
+ await Promise.all(Array.from(this.workers.values()).map(worker => this.stopWorker(worker)));
324
414
 
325
415
  for (let handle of this.handles.values()) {
326
416
  handle.dispose();
@@ -329,7 +419,6 @@ class WorkerFarm extends _events.default {
329
419
  this.handles = new Map();
330
420
  this.sharedReferences = new Map();
331
421
  this.sharedReferencesByValue = new Map();
332
- await Promise.all(Array.from(this.workers.values()).map(worker => this.stopWorker(worker)));
333
422
  this.ending = false;
334
423
  }
335
424
 
@@ -350,46 +439,42 @@ class WorkerFarm extends _events.default {
350
439
 
351
440
  createReverseHandle(fn) {
352
441
  let handle = new _Handle.default({
353
- fn,
354
- workerApi: this.workerApi
442
+ fn
355
443
  });
356
444
  this.handles.set(handle.id, handle);
357
445
  return handle;
358
446
  }
359
447
 
360
- async createSharedReference(value) {
448
+ createSharedReference(value, isCacheable = true) {
361
449
  let ref = referenceId++;
362
450
  this.sharedReferences.set(ref, value);
363
451
  this.sharedReferencesByValue.set(value, ref);
364
- let promises = [];
365
452
 
366
- for (let worker of this.workers.values()) {
367
- promises.push(new Promise((resolve, reject) => {
368
- worker.call({
369
- method: 'createSharedReference',
370
- args: [ref, value],
371
- resolve,
372
- reject,
373
- retries: 0
374
- });
375
- }));
453
+ if (!isCacheable) {
454
+ this.serializedSharedReferences.set(ref, null);
376
455
  }
377
456
 
378
- await Promise.all(promises);
379
457
  return {
380
458
  ref,
381
459
  dispose: () => {
382
460
  this.sharedReferences.delete(ref);
383
461
  this.sharedReferencesByValue.delete(value);
462
+ this.serializedSharedReferences.delete(ref);
384
463
  let promises = [];
385
464
 
386
465
  for (let worker of this.workers.values()) {
466
+ if (!worker.sentSharedReferences.has(ref)) {
467
+ continue;
468
+ }
469
+
470
+ worker.sentSharedReferences.delete(ref);
387
471
  promises.push(new Promise((resolve, reject) => {
388
472
  worker.call({
389
473
  method: 'deleteSharedReference',
390
474
  args: [ref],
391
475
  resolve,
392
476
  reject,
477
+ skipReadyCheck: true,
393
478
  retries: 0
394
479
  });
395
480
  }));
@@ -400,6 +485,24 @@ class WorkerFarm extends _events.default {
400
485
  };
401
486
  }
402
487
 
488
+ getSerializedSharedReference(ref) {
489
+ let cached = this.serializedSharedReferences.get(ref);
490
+
491
+ if (cached) {
492
+ return cached;
493
+ }
494
+
495
+ let value = this.sharedReferences.get(ref);
496
+ let buf = (0, _core().serialize)(value).buffer; // If the reference was created with the isCacheable option set to false,
497
+ // serializedSharedReferences will contain `null` as the value.
498
+
499
+ if (cached !== null) {
500
+ this.serializedSharedReferences.set(ref, buf);
501
+ }
502
+
503
+ return buf;
504
+ }
505
+
403
506
  async startProfile() {
404
507
  let promises = [];
405
508
 
@@ -410,12 +513,13 @@ class WorkerFarm extends _events.default {
410
513
  args: [],
411
514
  resolve,
412
515
  reject,
413
- retries: 0
516
+ retries: 0,
517
+ skipReadyCheck: true
414
518
  });
415
519
  }));
416
520
  }
417
521
 
418
- this.profiler = new _Profiler.default();
522
+ this.profiler = new (_profiler().SamplingProfiler)();
419
523
  promises.push(this.profiler.startProfiling());
420
524
  await Promise.all(promises);
421
525
  }
@@ -436,15 +540,16 @@ class WorkerFarm extends _events.default {
436
540
  args: [],
437
541
  resolve,
438
542
  reject,
439
- retries: 0
543
+ retries: 0,
544
+ skipReadyCheck: true
440
545
  });
441
546
  }));
442
547
  }
443
548
 
444
549
  var profiles = await Promise.all(promises);
445
- let trace = new _Trace.default();
446
- let filename = `profile-${profileId++}.trace`;
447
- let stream = trace.pipe(_fs.default.createWriteStream(filename));
550
+ let trace = new (_profiler().Trace)();
551
+ let filename = `profile-${getTimeId()}.trace`;
552
+ let stream = trace.pipe(_fs().default.createWriteStream(filename));
448
553
 
449
554
  for (let profile of profiles) {
450
555
  trace.addCPUProfile(names.shift(), profile);
@@ -455,14 +560,60 @@ class WorkerFarm extends _events.default {
455
560
  stream.once('finish', resolve);
456
561
  });
457
562
 
458
- _logger.default.info({
563
+ _logger().default.info({
459
564
  origin: '@parcel/workers',
460
- message: `Wrote profile to ${filename}`
565
+ message: (0, _diagnostic().md)`Wrote profile to ${filename}`
461
566
  });
462
567
  }
463
568
 
569
+ async callAllWorkers(method, args) {
570
+ let promises = [];
571
+
572
+ for (let worker of this.workers.values()) {
573
+ promises.push(new Promise((resolve, reject) => {
574
+ worker.call({
575
+ method,
576
+ args,
577
+ resolve,
578
+ reject,
579
+ retries: 0
580
+ });
581
+ }));
582
+ }
583
+
584
+ promises.push(this.localWorker[method](this.workerApi, ...args));
585
+ await Promise.all(promises);
586
+ }
587
+
588
+ async takeHeapSnapshot() {
589
+ let snapshotId = getTimeId();
590
+
591
+ try {
592
+ let snapshotPaths = await Promise.all([...this.workers.values()].map(worker => new Promise((resolve, reject) => {
593
+ worker.call({
594
+ method: 'takeHeapSnapshot',
595
+ args: [snapshotId],
596
+ resolve,
597
+ reject,
598
+ retries: 0,
599
+ skipReadyCheck: true
600
+ });
601
+ })));
602
+
603
+ _logger().default.info({
604
+ origin: '@parcel/workers',
605
+ message: (0, _diagnostic().md)`Wrote heap snapshots to the following paths:\n${snapshotPaths.join('\n')}`
606
+ });
607
+ } catch {
608
+ _logger().default.error({
609
+ origin: '@parcel/workers',
610
+ message: 'Unable to take heap snapshots. Note: requires Node 11.13.0+'
611
+ });
612
+ }
613
+ }
614
+
464
615
  static getNumWorkers() {
465
- return process.env.PARCEL_WORKERS ? parseInt(process.env.PARCEL_WORKERS, 10) : (0, _cpuCount.default)();
616
+ return process.env.PARCEL_WORKERS ? parseInt(process.env.PARCEL_WORKERS, 10) : Math.ceil((0, _cpuCount.default)() / 2);
466
617
  }
467
618
 
468
619
  static isWorker() {
@@ -470,14 +621,19 @@ class WorkerFarm extends _events.default {
470
621
  }
471
622
 
472
623
  static getWorkerApi() {
473
- (0, _assert.default)(_childState.child != null, 'WorkerFarm.getWorkerApi can only be called within workers');
624
+ (0, _assert().default)(_childState.child != null, 'WorkerFarm.getWorkerApi can only be called within workers');
474
625
  return _childState.child.workerApi;
475
626
  }
476
627
 
477
628
  static getConcurrentCallsPerWorker() {
478
- return parseInt(process.env.PARCEL_MAX_CONCURRENT_CALLS, 10) || 5;
629
+ return parseInt(process.env.PARCEL_MAX_CONCURRENT_CALLS, 10) || 30;
479
630
  }
480
631
 
481
632
  }
482
633
 
483
- exports.default = WorkerFarm;
634
+ exports.default = WorkerFarm;
635
+
636
+ function getTimeId() {
637
+ let now = new Date();
638
+ return String(now.getFullYear()) + String(now.getMonth() + 1).padStart(2, '0') + String(now.getDate()).padStart(2, '0') + '-' + String(now.getHours()).padStart(2, '0') + String(now.getMinutes()).padStart(2, '0') + String(now.getSeconds()).padStart(2, '0');
639
+ }
package/lib/bus.js CHANGED
@@ -5,13 +5,21 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _events = _interopRequireDefault(require("events"));
8
+ function _events() {
9
+ const data = _interopRequireDefault(require("events"));
10
+
11
+ _events = function () {
12
+ return data;
13
+ };
14
+
15
+ return data;
16
+ }
9
17
 
10
18
  var _childState = require("./childState");
11
19
 
12
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
21
 
14
- class Bus extends _events.default {
22
+ class Bus extends _events().default {
15
23
  emit(event, ...args) {
16
24
  if (_childState.child) {
17
25
  _childState.child.workerApi.callMaster({