childprocess-messageport
Version:
Turns ChildProcess IPC into MessagePort
57 lines (46 loc) • 1.51 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _websocketUtil = require('websocket-util');
class ChildProcessMessagePort extends _websocketUtil.HTMLEventEmitter {
constructor(childProcess) {
super();
this.childProcess = childProcess;
this.handleDisconnect = this.handleDisconnect.bind(this);
this.handleMessage = this.handleMessage.bind(this);
this.origin = `child-process://${this.childProcess.pid}/`;
['error', 'message', 'messageerror'].forEach(name => (0, _websocketUtil.hoistLegacyEventHandler)(this, name));
childProcess.once('disconnect', this.handleDisconnect);
childProcess.on('message', this.handleMessage);
}
handleDisconnect() {
this.childProcess.removeListener('disconnect', this.handleDisconnect);
this.childProcess.removeListener('message', this.handleMessage);
}
handleMessage(data) {
let deserialized;
try {
deserialized = (0, _websocketUtil.deserialize)(data);
} catch (err) {
return this.emit('messageerror', {
origin: this.origin,
source: this,
type: 'messageerror'
});
}
this.emit('message', {
data: deserialized,
origin: this.origin,
source: this,
type: 'message'
});
}
postMessage(data) {
this.childProcess.send((0, _websocketUtil.serialize)(data), error => {
error && this.emit('error', { error });
});
}
}
exports.default = ChildProcessMessagePort;
//# sourceMappingURL=index.js.map