@parcel/workers 2.8.3 → 2.9.0
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/index.d.ts +10 -9
- package/lib/Handle.js +4 -15
- package/lib/Worker.js +6 -43
- package/lib/WorkerFarm.js +35 -128
- package/lib/backend.js +0 -6
- package/lib/bus.js +0 -10
- package/lib/child.js +29 -65
- package/lib/childState.js +0 -1
- package/lib/cpuCount.js +2 -20
- package/lib/index.js +12 -24
- package/lib/process/ProcessChild.js +0 -17
- package/lib/process/ProcessWorker.js +0 -22
- package/lib/threads/ThreadsChild.js +0 -20
- package/lib/threads/ThreadsWorker.js +0 -18
- package/package.json +8 -8
- package/src/Worker.js +2 -0
- package/src/WorkerFarm.js +20 -7
- package/src/child.js +13 -3
- package/src/index.js +7 -1
- package/lib/Profiler.js +0 -80
- package/lib/Trace.js +0 -131
- package/src/Profiler.js +0 -93
- package/src/Trace.js +0 -125
package/index.d.ts
CHANGED
@@ -3,14 +3,15 @@ import {FilePath} from '@parcel/types';
|
|
3
3
|
type BackendType = 'process' | 'threads';
|
4
4
|
|
5
5
|
export type FarmOptions = {
|
6
|
-
maxConcurrentWorkers: number
|
7
|
-
maxConcurrentCallsPerWorker: number
|
8
|
-
forcedKillTime: number
|
9
|
-
useLocalWorker: boolean
|
10
|
-
warmWorkers: boolean
|
11
|
-
workerPath?: FilePath
|
12
|
-
backend: BackendType
|
13
|
-
shouldPatchConsole?: boolean
|
6
|
+
maxConcurrentWorkers: number;
|
7
|
+
maxConcurrentCallsPerWorker: number;
|
8
|
+
forcedKillTime: number;
|
9
|
+
useLocalWorker: boolean;
|
10
|
+
warmWorkers: boolean;
|
11
|
+
workerPath?: FilePath;
|
12
|
+
backend: BackendType;
|
13
|
+
shouldPatchConsole?: boolean;
|
14
|
+
shouldTrace?: boolean;
|
14
15
|
};
|
15
16
|
|
16
17
|
declare class WorkerFarm {
|
@@ -19,4 +20,4 @@ declare class WorkerFarm {
|
|
19
20
|
end(): Promise<void>;
|
20
21
|
}
|
21
22
|
|
22
|
-
export default WorkerFarm;
|
23
|
+
export default WorkerFarm;
|
package/lib/Handle.js
CHANGED
@@ -4,54 +4,43 @@ Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
5
5
|
});
|
6
6
|
exports.default = void 0;
|
7
|
-
|
8
7
|
function _core() {
|
9
8
|
const data = require("@parcel/core");
|
10
|
-
|
11
9
|
_core = function () {
|
12
10
|
return data;
|
13
11
|
};
|
14
|
-
|
15
12
|
return data;
|
16
13
|
}
|
17
|
-
|
18
14
|
var _package = _interopRequireDefault(require("../package.json"));
|
19
|
-
|
20
15
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
21
|
-
|
22
16
|
// $FlowFixMe
|
23
|
-
let HANDLE_ID = 0;
|
17
|
+
let HANDLE_ID = 0;
|
18
|
+
// $FlowFixMe
|
24
19
|
|
25
20
|
const handleById = new Map();
|
26
|
-
|
27
21
|
class Handle {
|
28
22
|
constructor(opts) {
|
29
23
|
var _opts$id;
|
30
|
-
|
31
24
|
this.id = (_opts$id = opts.id) !== null && _opts$id !== void 0 ? _opts$id : ++HANDLE_ID;
|
32
25
|
this.fn = opts.fn;
|
33
26
|
this.childId = opts.childId;
|
34
27
|
handleById.set(this.id, this);
|
35
28
|
}
|
36
|
-
|
37
29
|
dispose() {
|
38
30
|
handleById.delete(this.id);
|
39
31
|
}
|
40
|
-
|
41
32
|
serialize() {
|
42
33
|
return {
|
43
34
|
id: this.id,
|
44
35
|
childId: this.childId
|
45
36
|
};
|
46
37
|
}
|
47
|
-
|
48
38
|
static deserialize(opts) {
|
49
39
|
return new Handle(opts);
|
50
40
|
}
|
41
|
+
}
|
51
42
|
|
52
|
-
|
43
|
+
// Register the Handle as a serializable class so that it will properly be deserialized
|
53
44
|
// by anything that uses WorkerFarm.
|
54
|
-
|
55
|
-
|
56
45
|
exports.default = Handle;
|
57
46
|
(0, _core().registerSerializableClass)(`${_package.default.version}:Handle`, Handle);
|
package/lib/Worker.js
CHANGED
@@ -4,43 +4,30 @@ Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
5
5
|
});
|
6
6
|
exports.default = void 0;
|
7
|
-
|
8
7
|
function _nullthrows() {
|
9
8
|
const data = _interopRequireDefault(require("nullthrows"));
|
10
|
-
|
11
9
|
_nullthrows = function () {
|
12
10
|
return data;
|
13
11
|
};
|
14
|
-
|
15
12
|
return data;
|
16
13
|
}
|
17
|
-
|
18
14
|
function _events() {
|
19
15
|
const data = _interopRequireDefault(require("events"));
|
20
|
-
|
21
16
|
_events = function () {
|
22
17
|
return data;
|
23
18
|
};
|
24
|
-
|
25
19
|
return data;
|
26
20
|
}
|
27
|
-
|
28
21
|
function _diagnostic() {
|
29
22
|
const data = _interopRequireDefault(require("@parcel/diagnostic"));
|
30
|
-
|
31
23
|
_diagnostic = function () {
|
32
24
|
return data;
|
33
25
|
};
|
34
|
-
|
35
26
|
return data;
|
36
27
|
}
|
37
|
-
|
38
28
|
var _backend = require("./backend");
|
39
|
-
|
40
29
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
41
|
-
|
42
30
|
let WORKER_ID = 0;
|
43
|
-
|
44
31
|
class Worker extends _events().default {
|
45
32
|
id = WORKER_ID++;
|
46
33
|
sentSharedReferences = new Set();
|
@@ -50,31 +37,26 @@ class Worker extends _events().default {
|
|
50
37
|
ready = false;
|
51
38
|
stopped = false;
|
52
39
|
isStopping = false;
|
53
|
-
|
54
40
|
constructor(options) {
|
55
41
|
super();
|
56
42
|
this.options = options;
|
57
43
|
}
|
58
|
-
|
59
44
|
async fork(forkModule) {
|
60
45
|
let filteredArgs = process.execArgv.filter(v => !/^--(debug|inspect|max-old-space-size=)/.test(v));
|
61
|
-
|
62
46
|
for (let i = 0; i < filteredArgs.length; i++) {
|
63
47
|
let arg = filteredArgs[i];
|
64
48
|
let isArgWithParam = (arg === '-r' || arg === '--require') && filteredArgs[i + 1] === '@parcel/register' || arg === '--title';
|
65
|
-
|
66
49
|
if (isArgWithParam) {
|
67
50
|
filteredArgs.splice(i, 2);
|
68
51
|
i--;
|
69
52
|
}
|
70
|
-
}
|
71
|
-
|
53
|
+
}
|
72
54
|
|
55
|
+
// Workaround for https://github.com/nodejs/node/issues/29117
|
73
56
|
if (process.env.NODE_OPTIONS) {
|
74
57
|
// arg parsing logic adapted from https://stackoverflow.com/a/46946420/2352201
|
75
58
|
let opts = [''];
|
76
59
|
let quote = false;
|
77
|
-
|
78
60
|
for (let c of (0, _nullthrows().default)(process.env.NODE_OPTIONS.match(/.|^$/g))) {
|
79
61
|
if (c === '"') {
|
80
62
|
quote = !quote;
|
@@ -84,17 +66,14 @@ class Worker extends _events().default {
|
|
84
66
|
opts[opts.length - 1] += c.replace(/\\(.)/, '$1');
|
85
67
|
}
|
86
68
|
}
|
87
|
-
|
88
69
|
for (let i = 0; i < opts.length; i++) {
|
89
70
|
let opt = opts[i];
|
90
|
-
|
91
71
|
if (opt === '-r' || opt === '--require') {
|
92
72
|
filteredArgs.push(opt, opts[i + 1]);
|
93
73
|
i++;
|
94
74
|
}
|
95
75
|
}
|
96
76
|
}
|
97
|
-
|
98
77
|
let WorkerBackend = (0, _backend.getWorkerBackend)(this.options.backend);
|
99
78
|
this.worker = new WorkerBackend(filteredArgs, data => this.receive(data), err => {
|
100
79
|
this.emit('error', err);
|
@@ -107,7 +86,8 @@ class Worker extends _events().default {
|
|
107
86
|
this.call({
|
108
87
|
method: 'childInit',
|
109
88
|
args: [forkModule, {
|
110
|
-
shouldPatchConsole: !!this.options.shouldPatchConsole
|
89
|
+
shouldPatchConsole: !!this.options.shouldPatchConsole,
|
90
|
+
shouldTrace: !!this.options.shouldTrace
|
111
91
|
}],
|
112
92
|
retries: 0,
|
113
93
|
skipReadyCheck: true,
|
@@ -116,19 +96,17 @@ class Worker extends _events().default {
|
|
116
96
|
});
|
117
97
|
});
|
118
98
|
let sharedRefs = this.options.sharedReferences;
|
119
|
-
let refsShared = new Set();
|
120
|
-
|
99
|
+
let refsShared = new Set();
|
100
|
+
// in case more refs are created while initial refs are sending
|
121
101
|
while (refsShared.size < sharedRefs.size) {
|
122
102
|
await Promise.all([...sharedRefs].filter(([ref]) => !refsShared.has(ref)).map(async ([ref, value]) => {
|
123
103
|
await this.sendSharedReference(ref, value);
|
124
104
|
refsShared.add(ref);
|
125
105
|
}));
|
126
106
|
}
|
127
|
-
|
128
107
|
this.ready = true;
|
129
108
|
this.emit('ready');
|
130
109
|
}
|
131
|
-
|
132
110
|
sendSharedReference(ref, value) {
|
133
111
|
this.sentSharedReferences.add(ref);
|
134
112
|
return new Promise((resolve, reject) => {
|
@@ -142,16 +120,13 @@ class Worker extends _events().default {
|
|
142
120
|
});
|
143
121
|
});
|
144
122
|
}
|
145
|
-
|
146
123
|
send(data) {
|
147
124
|
this.worker.send(data);
|
148
125
|
}
|
149
|
-
|
150
126
|
call(call) {
|
151
127
|
if (this.stopped || this.isStopping) {
|
152
128
|
return;
|
153
129
|
}
|
154
|
-
|
155
130
|
let idx = this.callId++;
|
156
131
|
this.calls.set(idx, call);
|
157
132
|
let msg = {
|
@@ -162,35 +137,28 @@ class Worker extends _events().default {
|
|
162
137
|
method: call.method,
|
163
138
|
args: call.args
|
164
139
|
};
|
165
|
-
|
166
140
|
if (this.ready || call.skipReadyCheck === true) {
|
167
141
|
this.send(msg);
|
168
142
|
} else {
|
169
143
|
this.once('ready', () => this.send(msg));
|
170
144
|
}
|
171
145
|
}
|
172
|
-
|
173
146
|
receive(message) {
|
174
147
|
if (this.stopped || this.isStopping) {
|
175
148
|
return;
|
176
149
|
}
|
177
|
-
|
178
150
|
if (message.type === 'request') {
|
179
151
|
this.emit('request', message);
|
180
152
|
} else if (message.type === 'response') {
|
181
153
|
let idx = message.idx;
|
182
|
-
|
183
154
|
if (idx == null) {
|
184
155
|
return;
|
185
156
|
}
|
186
|
-
|
187
157
|
let call = this.calls.get(idx);
|
188
|
-
|
189
158
|
if (!call) {
|
190
159
|
// Return for unknown calls, these might accur if a third party process uses workers
|
191
160
|
return;
|
192
161
|
}
|
193
|
-
|
194
162
|
if (message.contentType === 'error') {
|
195
163
|
call.reject(new (_diagnostic().default)({
|
196
164
|
diagnostic: message.content
|
@@ -198,22 +166,17 @@ class Worker extends _events().default {
|
|
198
166
|
} else {
|
199
167
|
call.resolve(message.content);
|
200
168
|
}
|
201
|
-
|
202
169
|
this.calls.delete(idx);
|
203
170
|
this.emit('response', message);
|
204
171
|
}
|
205
172
|
}
|
206
|
-
|
207
173
|
async stop() {
|
208
174
|
if (!this.stopped) {
|
209
175
|
this.stopped = true;
|
210
|
-
|
211
176
|
if (this.worker) {
|
212
177
|
await this.worker.stop();
|
213
178
|
}
|
214
179
|
}
|
215
180
|
}
|
216
|
-
|
217
181
|
}
|
218
|
-
|
219
182
|
exports.default = Worker;
|