@scrypted/server 0.115.39 → 0.115.41
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/dist/plugin/runtime/node-fork-worker.d.ts +7 -0
- package/dist/plugin/runtime/node-fork-worker.js +23 -3
- package/dist/plugin/runtime/node-fork-worker.js.map +1 -1
- package/dist/plugin/runtime/node-thread-worker.js +2 -1
- package/dist/plugin/runtime/node-thread-worker.js.map +1 -1
- package/dist/scrypted-main-exports.d.ts +0 -1
- package/dist/scrypted-main-exports.js +2 -5
- package/dist/scrypted-main-exports.js.map +1 -1
- package/dist/scrypted-plugin-main.js +2 -1
- package/dist/scrypted-plugin-main.js.map +1 -1
- package/package.json +1 -1
- package/src/plugin/runtime/node-fork-worker.ts +23 -2
- package/src/plugin/runtime/node-thread-worker.ts +2 -1
- package/src/scrypted-main-exports.ts +2 -4
- package/src/scrypted-plugin-main.ts +2 -1
@@ -1,6 +1,13 @@
|
|
1
1
|
import { RpcMessage, RpcPeer } from "../../rpc";
|
2
2
|
import { ChildProcessWorker } from "./child-process-worker";
|
3
3
|
import { RuntimeWorkerOptions } from "./runtime-worker";
|
4
|
+
export declare const NODE_PLUGIN_CHILD_PROCESS = "child";
|
5
|
+
export declare const NODE_PLUGIN_FORK_PROCESS = "fork";
|
6
|
+
export declare const NODE_PLUGIN_THREAD_PROCESS = "child-thread";
|
7
|
+
export declare function isNodePluginWorkerProcess(): boolean;
|
8
|
+
export declare function isNodePluginForkProcess(): boolean;
|
9
|
+
export declare function isNodePluginThreadProcess(): boolean;
|
10
|
+
export declare function isNodePluginChildProcess(): boolean;
|
4
11
|
export declare class NodeForkWorker extends ChildProcessWorker {
|
5
12
|
constructor(mainFilename: string, pluginId: string, options: RuntimeWorkerOptions);
|
6
13
|
setupRpcPeer(peer: RpcPeer): void;
|
@@ -3,12 +3,30 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.NodeForkWorker = void 0;
|
6
|
+
exports.NodeForkWorker = exports.NODE_PLUGIN_THREAD_PROCESS = exports.NODE_PLUGIN_FORK_PROCESS = exports.NODE_PLUGIN_CHILD_PROCESS = void 0;
|
7
|
+
exports.isNodePluginWorkerProcess = isNodePluginWorkerProcess;
|
8
|
+
exports.isNodePluginForkProcess = isNodePluginForkProcess;
|
9
|
+
exports.isNodePluginThreadProcess = isNodePluginThreadProcess;
|
10
|
+
exports.isNodePluginChildProcess = isNodePluginChildProcess;
|
7
11
|
const child_process_1 = __importDefault(require("child_process"));
|
8
12
|
const net_1 = __importDefault(require("net"));
|
9
13
|
const socket_serializer_1 = require("../socket-serializer");
|
10
14
|
const child_process_worker_1 = require("./child-process-worker");
|
11
|
-
|
15
|
+
exports.NODE_PLUGIN_CHILD_PROCESS = 'child';
|
16
|
+
exports.NODE_PLUGIN_FORK_PROCESS = 'fork';
|
17
|
+
exports.NODE_PLUGIN_THREAD_PROCESS = 'child-thread';
|
18
|
+
function isNodePluginWorkerProcess() {
|
19
|
+
return isNodePluginChildProcess() || isNodePluginForkProcess() || isNodePluginThreadProcess();
|
20
|
+
}
|
21
|
+
function isNodePluginForkProcess() {
|
22
|
+
return process.argv[2] === exports.NODE_PLUGIN_FORK_PROCESS;
|
23
|
+
}
|
24
|
+
function isNodePluginThreadProcess() {
|
25
|
+
return process.argv[2] === exports.NODE_PLUGIN_THREAD_PROCESS;
|
26
|
+
}
|
27
|
+
function isNodePluginChildProcess() {
|
28
|
+
return process.argv[2] === exports.NODE_PLUGIN_CHILD_PROCESS;
|
29
|
+
}
|
12
30
|
class NodeForkWorker extends child_process_worker_1.ChildProcessWorker {
|
13
31
|
constructor(mainFilename, pluginId, options) {
|
14
32
|
super(pluginId, options);
|
@@ -18,7 +36,9 @@ class NodeForkWorker extends child_process_worker_1.ChildProcessWorker {
|
|
18
36
|
execArgv.push(`--inspect=0.0.0.0:${pluginDebug.inspectPort}`);
|
19
37
|
}
|
20
38
|
this.worker = child_process_1.default.fork(mainFilename, [
|
21
|
-
|
39
|
+
// change the argument marker depending on whether this is the main scrypted server process
|
40
|
+
// starting a plugin vs the plugin forking for multiprocessing.
|
41
|
+
isNodePluginWorkerProcess() ? exports.NODE_PLUGIN_FORK_PROCESS : exports.NODE_PLUGIN_CHILD_PROCESS,
|
22
42
|
this.pluginId
|
23
43
|
], {
|
24
44
|
stdio: ['pipe', 'pipe', 'pipe', 'ipc'],
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"node-fork-worker.js","sourceRoot":"","sources":["../../../src/plugin/runtime/node-fork-worker.ts"],"names":[],"mappings":";;;;;;
|
1
|
+
{"version":3,"file":"node-fork-worker.js","sourceRoot":"","sources":["../../../src/plugin/runtime/node-fork-worker.ts"],"names":[],"mappings":"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"}
|
@@ -8,6 +8,7 @@ const worker_threads_1 = __importDefault(require("worker_threads"));
|
|
8
8
|
const events_1 = require("events");
|
9
9
|
const rpc_1 = require("../../rpc");
|
10
10
|
const rpc_buffer_serializer_1 = require("../../rpc-buffer-serializer");
|
11
|
+
const node_fork_worker_1 = require("./node-fork-worker");
|
11
12
|
class BufferTransfer {
|
12
13
|
bufferSerializer = new rpc_buffer_serializer_1.BufferSerializer();
|
13
14
|
serialize(value, serializationContext) {
|
@@ -46,7 +47,7 @@ class NodeThreadWorker extends events_1.EventEmitter {
|
|
46
47
|
const message = new worker_threads_1.default.MessageChannel();
|
47
48
|
const { port1, port2 } = message;
|
48
49
|
this.worker = new worker_threads_1.default.Worker(mainFilename, {
|
49
|
-
argv: [
|
50
|
+
argv: [node_fork_worker_1.NODE_PLUGIN_THREAD_PROCESS, this.pluginId],
|
50
51
|
env: Object.assign({}, process.env, env),
|
51
52
|
workerData: {
|
52
53
|
port: port1,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"node-thread-worker.js","sourceRoot":"","sources":["../../../src/plugin/runtime/node-thread-worker.ts"],"names":[],"mappings":";;;;;;AAAA,oEAA4C;AAC5C,mCAAsC;AACtC,mCAA+D;AAE/D,uEAA+D;
|
1
|
+
{"version":3,"file":"node-thread-worker.js","sourceRoot":"","sources":["../../../src/plugin/runtime/node-thread-worker.ts"],"names":[],"mappings":"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"}
|
@@ -3,7 +3,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.isChildProcess = isChildProcess;
|
7
6
|
const dns_1 = __importDefault(require("dns"));
|
8
7
|
const dotenv_1 = __importDefault(require("dotenv"));
|
9
8
|
const fs_1 = __importDefault(require("fs"));
|
@@ -15,9 +14,7 @@ const vm_1 = __importDefault(require("vm"));
|
|
15
14
|
const plugin_error_1 = require("./plugin/plugin-error");
|
16
15
|
const plugin_volume_1 = require("./plugin/plugin-volume");
|
17
16
|
const rpc_1 = require("./rpc");
|
18
|
-
|
19
|
-
return process_1.default.argv[2] === 'child' || process_1.default.argv[2] === 'fork' || process_1.default.argv[2] === 'child-thread';
|
20
|
-
}
|
17
|
+
const node_fork_worker_1 = require("./plugin/runtime/node-fork-worker");
|
21
18
|
function start(mainFilename, options) {
|
22
19
|
// Allow including a custom file path for platforms that require
|
23
20
|
// compatibility hacks. For example, Android may need to patch
|
@@ -38,7 +35,7 @@ function start(mainFilename, options) {
|
|
38
35
|
// The workaround is to favor IPv4.
|
39
36
|
dns_1.default.setDefaultResultOrder('ipv4first');
|
40
37
|
(0, rpc_1.startPeriodicGarbageCollection)();
|
41
|
-
if (
|
38
|
+
if ((0, node_fork_worker_1.isNodePluginWorkerProcess)()) {
|
42
39
|
// plugins should never crash. this handler will be removed, and then readded
|
43
40
|
// after the plugin source map is retrieved.
|
44
41
|
process_1.default.on('uncaughtException', e => {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"scrypted-main-exports.js","sourceRoot":"","sources":["../src/scrypted-main-exports.ts"],"names":[],"mappings":";;;;;
|
1
|
+
{"version":3,"file":"scrypted-main-exports.js","sourceRoot":"","sources":["../src/scrypted-main-exports.ts"],"names":[],"mappings":";;;;;AAAA,8CAAsB;AACtB,oDAA4B;AAC5B,4CAAoB;AACpB,gDAAwB;AACxB,sDAA8B;AAC9B,oDAA4B;AAC5B,4CAAoB;AACpB,4CAAoB;AACpB,wDAAoD;AACpD,0DAA2D;AAC3D,+BAAuE;AAEvE,wEAA8E;AAG9E,SAAS,KAAK,CAAC,YAAoB,EAAE,OAEpC;IACG,gEAAgE;IAChE,8DAA8D;IAC9D,gBAAgB;IAChB,IAAI,iBAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,YAAE,CAAC,UAAU,CAAC,iBAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,EAAE,CAAC;QACpG,OAAO,CAAC,iBAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;QACjB,YAAE,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAA;QACpC,UAAU,CAAC,EAAE,GAAG,YAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,CAAC,gBAAM,CAAC,GAAG,CAAC,iBAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAA;IACvF,CAAC;IAED,uEAAuE;IACvE,uEAAuE;IACvE,6DAA6D;IAC7D,mCAAmC;IACnC,aAAG,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;IAEvC,IAAA,oCAA8B,GAAE,CAAC;IAEjC,IAAI,IAAA,4CAAyB,GAAE,EAAE,CAAC;QAC9B,6EAA6E;QAC7E,4CAA4C;QAC5C,iBAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE;YAChC,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QACH,iBAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE;YACjC,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC,OAAO,CAAC;QACxD,OAAO,KAAK,CAAC,YAAY,CAAC,CAAC;IAC/B,CAAC;SACI,CAAC;QACF,uEAAuE;QACvE,iBAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,KAAK,CAAC,EAAE;YACrC,IAAI,KAAK,EAAE,WAAW,KAAK,oBAAc,IAAI,KAAK,EAAE,WAAW,KAAK,0BAAW,EAAE,CAAC;gBAC9E,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;gBACpC,MAAM,KAAK,CAAC;YAChB,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,gBAAM,CAAC,MAAM,CAAC;YACV,IAAI,EAAE,cAAI,CAAC,IAAI,CAAC,IAAA,iCAAiB,GAAE,EAAE,MAAM,CAAC;SAC/C,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC,OAAO,CAAC;QACxD,OAAO,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;AACL,CAAC;AAED,kBAAe,KAAK,CAAC"}
|
@@ -9,10 +9,11 @@ const plugin_npm_dependencies_1 = require("./plugin/plugin-npm-dependencies");
|
|
9
9
|
const plugin_remote_worker_1 = require("./plugin/plugin-remote-worker");
|
10
10
|
const socket_serializer_1 = require("./plugin/socket-serializer");
|
11
11
|
const node_thread_worker_1 = require("./plugin/runtime/node-thread-worker");
|
12
|
+
const node_fork_worker_1 = require("./plugin/runtime/node-fork-worker");
|
12
13
|
function start(mainFilename) {
|
13
14
|
const pluginId = process.argv[3];
|
14
15
|
module.paths.push((0, plugin_npm_dependencies_1.getPluginNodePath)(pluginId));
|
15
|
-
if (
|
16
|
+
if ((0, node_fork_worker_1.isNodePluginThreadProcess)()) {
|
16
17
|
console.log('starting thread', pluginId);
|
17
18
|
const { port } = worker_threads_1.default.workerData;
|
18
19
|
const peer = (0, plugin_remote_worker_1.startPluginRemote)(mainFilename, pluginId, (message, reject, serializationContext) => node_thread_worker_1.NodeThreadWorker.send(message, port, reject, serializationContext));
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"scrypted-plugin-main.js","sourceRoot":"","sources":["../src/scrypted-plugin-main.ts"],"names":[],"mappings":";;;;;AAAA,8CAAsB;AACtB,oEAA4C;AAC5C,8EAAqE;AACrE,wEAAkE;AAClE,kEAAsE;AAEtE,4EAAuE;
|
1
|
+
{"version":3,"file":"scrypted-plugin-main.js","sourceRoot":"","sources":["../src/scrypted-plugin-main.ts"],"names":[],"mappings":";;;;;AAAA,8CAAsB;AACtB,oEAA4C;AAC5C,8EAAqE;AACrE,wEAAkE;AAClE,kEAAsE;AAEtE,4EAAuE;AACvE,wEAA8E;AAE9E,SAAS,KAAK,CAAC,YAAoB;IAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAA,2CAAiB,EAAC,QAAQ,CAAC,CAAC,CAAC;IAE/C,IAAI,IAAA,4CAAyB,GAAE,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QACzC,MAAM,EAAE,IAAI,EAAE,GAAG,wBAAc,CAAC,UAAkD,CAAC;QACnF,MAAM,IAAI,GAAG,IAAA,wCAAiB,EAAC,YAAY,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,EAAE,CAAC,qCAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC;QACtK,qCAAgB,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE;YACxB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAClB,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACP,CAAC;SACI,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAA,wCAAiB,EAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE;QAC7J,kCAAkC;QAClC,0BAA0B;SAC7B,EAAE,CAAC,CAAC,EAAE;YACH,IAAI,CAAC;gBACD,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,aAAa,CAAC,aAAG,CAAC,MAAM,EAAE,aAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,4CAAwB,EAAE,CAAC,CAAC;QAChF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,OAAqB,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;YAC1B,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED,kBAAe,KAAK,CAAC"}
|
package/package.json
CHANGED
@@ -4,7 +4,26 @@ import { RpcMessage, RpcPeer } from "../../rpc";
|
|
4
4
|
import { SidebandSocketSerializer } from "../socket-serializer";
|
5
5
|
import { ChildProcessWorker } from "./child-process-worker";
|
6
6
|
import { RuntimeWorkerOptions } from "./runtime-worker";
|
7
|
-
|
7
|
+
|
8
|
+
export const NODE_PLUGIN_CHILD_PROCESS = 'child';
|
9
|
+
export const NODE_PLUGIN_FORK_PROCESS = 'fork';
|
10
|
+
export const NODE_PLUGIN_THREAD_PROCESS = 'child-thread';
|
11
|
+
|
12
|
+
export function isNodePluginWorkerProcess() {
|
13
|
+
return isNodePluginChildProcess() || isNodePluginForkProcess() || isNodePluginThreadProcess();
|
14
|
+
}
|
15
|
+
|
16
|
+
export function isNodePluginForkProcess() {
|
17
|
+
return process.argv[2] === NODE_PLUGIN_FORK_PROCESS;
|
18
|
+
}
|
19
|
+
|
20
|
+
export function isNodePluginThreadProcess() {
|
21
|
+
return process.argv[2] === NODE_PLUGIN_THREAD_PROCESS;
|
22
|
+
}
|
23
|
+
|
24
|
+
export function isNodePluginChildProcess() {
|
25
|
+
return process.argv[2] === NODE_PLUGIN_CHILD_PROCESS;
|
26
|
+
}
|
8
27
|
|
9
28
|
export class NodeForkWorker extends ChildProcessWorker {
|
10
29
|
|
@@ -19,7 +38,9 @@ export class NodeForkWorker extends ChildProcessWorker {
|
|
19
38
|
}
|
20
39
|
|
21
40
|
this.worker = child_process.fork(mainFilename, [
|
22
|
-
|
41
|
+
// change the argument marker depending on whether this is the main scrypted server process
|
42
|
+
// starting a plugin vs the plugin forking for multiprocessing.
|
43
|
+
isNodePluginWorkerProcess() ? NODE_PLUGIN_FORK_PROCESS : NODE_PLUGIN_CHILD_PROCESS,
|
23
44
|
this.pluginId
|
24
45
|
], {
|
25
46
|
stdio: ['pipe', 'pipe', 'pipe', 'ipc'],
|
@@ -3,6 +3,7 @@ import { EventEmitter } from "events";
|
|
3
3
|
import { RpcMessage, RpcPeer, RpcSerializer } from "../../rpc";
|
4
4
|
import { RuntimeWorker, RuntimeWorkerOptions } from "./runtime-worker";
|
5
5
|
import { BufferSerializer } from '../../rpc-buffer-serializer';
|
6
|
+
import { NODE_PLUGIN_THREAD_PROCESS } from "./node-fork-worker";
|
6
7
|
|
7
8
|
|
8
9
|
class BufferTransfer implements RpcSerializer {
|
@@ -53,7 +54,7 @@ export class NodeThreadWorker extends EventEmitter implements RuntimeWorker {
|
|
53
54
|
const message = new worker_threads.MessageChannel();
|
54
55
|
const { port1, port2 } = message;
|
55
56
|
this.worker = new worker_threads.Worker(mainFilename, {
|
56
|
-
argv: [
|
57
|
+
argv: [NODE_PLUGIN_THREAD_PROCESS, this.pluginId],
|
57
58
|
env: Object.assign({}, process.env, env),
|
58
59
|
workerData: {
|
59
60
|
port: port1,
|
@@ -10,10 +10,8 @@ import { PluginError } from './plugin/plugin-error';
|
|
10
10
|
import { getScryptedVolume } from './plugin/plugin-volume';
|
11
11
|
import { RPCResultError, startPeriodicGarbageCollection } from './rpc';
|
12
12
|
import type { Runtime } from './scrypted-server-main';
|
13
|
+
import { isNodePluginWorkerProcess } from './plugin/runtime/node-fork-worker';
|
13
14
|
|
14
|
-
export function isChildProcess() {
|
15
|
-
return process.argv[2] === 'child' || process.argv[2] === 'fork' || process.argv[2] === 'child-thread';
|
16
|
-
}
|
17
15
|
|
18
16
|
function start(mainFilename: string, options?: {
|
19
17
|
onRuntimeCreated?: (runtime: Runtime) => Promise<void>,
|
@@ -42,7 +40,7 @@ function start(mainFilename: string, options?: {
|
|
42
40
|
|
43
41
|
startPeriodicGarbageCollection();
|
44
42
|
|
45
|
-
if (
|
43
|
+
if (isNodePluginWorkerProcess()) {
|
46
44
|
// plugins should never crash. this handler will be removed, and then readded
|
47
45
|
// after the plugin source map is retrieved.
|
48
46
|
process.on('uncaughtException', e => {
|
@@ -5,12 +5,13 @@ import { startPluginRemote } from "./plugin/plugin-remote-worker";
|
|
5
5
|
import { SidebandSocketSerializer } from "./plugin/socket-serializer";
|
6
6
|
import { RpcMessage } from "./rpc";
|
7
7
|
import { NodeThreadWorker } from './plugin/runtime/node-thread-worker';
|
8
|
+
import { isNodePluginThreadProcess } from './plugin/runtime/node-fork-worker';
|
8
9
|
|
9
10
|
function start(mainFilename: string) {
|
10
11
|
const pluginId = process.argv[3];
|
11
12
|
module.paths.push(getPluginNodePath(pluginId));
|
12
13
|
|
13
|
-
if (
|
14
|
+
if (isNodePluginThreadProcess()) {
|
14
15
|
console.log('starting thread', pluginId);
|
15
16
|
const { port } = worker_threads.workerData as { port: worker_threads.MessagePort };
|
16
17
|
const peer = startPluginRemote(mainFilename, pluginId, (message, reject, serializationContext) => NodeThreadWorker.send(message, port, reject, serializationContext));
|