onemon
Version:
Run a npm script as a deamon, once
57 lines • 1.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.attachDataListener = exports.createDecoder = exports.createEncoder = exports.socketEncoding = void 0;
const delimiter = "\0\0";
exports.socketEncoding = 'utf8';
/**
* @description
* Create a function that stringify JSON
*/
const createEncoder = () => {
return (data) => {
return JSON.stringify(data) + delimiter;
};
};
exports.createEncoder = createEncoder;
/**
* @description
* Create a function that parse JSON
*/
const createDecoder = () => {
let buffer = '';
return (chunk) => {
let data = buffer += chunk;
let raw = data.split(delimiter);
// Pop the last element off of the message array.
// It is either an incomplete message or an empty string.
buffer = raw.pop();
return raw.map((data) => JSON.parse(data));
};
};
exports.createDecoder = createDecoder;
/**
* @description
* Attach listener to emit event on message received
*/
const attachDataListener = (options) => {
const decoder = options.createDecoder();
const { socket, emitter, clientId } = options;
const emitError = (err) => {
socket.destroy(err);
emitter.emit('error', err, clientId);
};
const emitMessage = (data) => {
emitter.emit('message', data.message, data.topic, clientId);
emitter.emit(`message.${data.topic}`, data.message, clientId);
};
socket.on('data', chunk => {
try {
decoder(chunk).forEach((data) => emitMessage(data));
}
catch (error) {
emitError(error);
}
});
};
exports.attachDataListener = attachDataListener;
//# sourceMappingURL=ipc-transcoder.js.map