UNPKG

onemon

Version:

Run a npm script as a deamon, once

57 lines 1.73 kB
"use strict"; 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