@parcel/workers 2.8.4-nightly.0 → 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/lib/Handle.js +4 -15
- package/lib/Worker.js +4 -42
- package/lib/WorkerFarm.js +22 -126
- package/lib/backend.js +0 -6
- package/lib/bus.js +0 -10
- package/lib/child.js +15 -68
- package/lib/childState.js +0 -1
- package/lib/cpuCount.js +2 -20
- package/lib/index.js +2 -29
- 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/WorkerFarm.js +11 -3
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);
|
@@ -117,19 +96,17 @@ class Worker extends _events().default {
|
|
117
96
|
});
|
118
97
|
});
|
119
98
|
let sharedRefs = this.options.sharedReferences;
|
120
|
-
let refsShared = new Set();
|
121
|
-
|
99
|
+
let refsShared = new Set();
|
100
|
+
// in case more refs are created while initial refs are sending
|
122
101
|
while (refsShared.size < sharedRefs.size) {
|
123
102
|
await Promise.all([...sharedRefs].filter(([ref]) => !refsShared.has(ref)).map(async ([ref, value]) => {
|
124
103
|
await this.sendSharedReference(ref, value);
|
125
104
|
refsShared.add(ref);
|
126
105
|
}));
|
127
106
|
}
|
128
|
-
|
129
107
|
this.ready = true;
|
130
108
|
this.emit('ready');
|
131
109
|
}
|
132
|
-
|
133
110
|
sendSharedReference(ref, value) {
|
134
111
|
this.sentSharedReferences.add(ref);
|
135
112
|
return new Promise((resolve, reject) => {
|
@@ -143,16 +120,13 @@ class Worker extends _events().default {
|
|
143
120
|
});
|
144
121
|
});
|
145
122
|
}
|
146
|
-
|
147
123
|
send(data) {
|
148
124
|
this.worker.send(data);
|
149
125
|
}
|
150
|
-
|
151
126
|
call(call) {
|
152
127
|
if (this.stopped || this.isStopping) {
|
153
128
|
return;
|
154
129
|
}
|
155
|
-
|
156
130
|
let idx = this.callId++;
|
157
131
|
this.calls.set(idx, call);
|
158
132
|
let msg = {
|
@@ -163,35 +137,28 @@ class Worker extends _events().default {
|
|
163
137
|
method: call.method,
|
164
138
|
args: call.args
|
165
139
|
};
|
166
|
-
|
167
140
|
if (this.ready || call.skipReadyCheck === true) {
|
168
141
|
this.send(msg);
|
169
142
|
} else {
|
170
143
|
this.once('ready', () => this.send(msg));
|
171
144
|
}
|
172
145
|
}
|
173
|
-
|
174
146
|
receive(message) {
|
175
147
|
if (this.stopped || this.isStopping) {
|
176
148
|
return;
|
177
149
|
}
|
178
|
-
|
179
150
|
if (message.type === 'request') {
|
180
151
|
this.emit('request', message);
|
181
152
|
} else if (message.type === 'response') {
|
182
153
|
let idx = message.idx;
|
183
|
-
|
184
154
|
if (idx == null) {
|
185
155
|
return;
|
186
156
|
}
|
187
|
-
|
188
157
|
let call = this.calls.get(idx);
|
189
|
-
|
190
158
|
if (!call) {
|
191
159
|
// Return for unknown calls, these might accur if a third party process uses workers
|
192
160
|
return;
|
193
161
|
}
|
194
|
-
|
195
162
|
if (message.contentType === 'error') {
|
196
163
|
call.reject(new (_diagnostic().default)({
|
197
164
|
diagnostic: message.content
|
@@ -199,22 +166,17 @@ class Worker extends _events().default {
|
|
199
166
|
} else {
|
200
167
|
call.resolve(message.content);
|
201
168
|
}
|
202
|
-
|
203
169
|
this.calls.delete(idx);
|
204
170
|
this.emit('response', message);
|
205
171
|
}
|
206
172
|
}
|
207
|
-
|
208
173
|
async stop() {
|
209
174
|
if (!this.stopped) {
|
210
175
|
this.stopped = true;
|
211
|
-
|
212
176
|
if (this.worker) {
|
213
177
|
await this.worker.stop();
|
214
178
|
}
|
215
179
|
}
|
216
180
|
}
|
217
|
-
|
218
181
|
}
|
219
|
-
|
220
182
|
exports.default = Worker;
|