@imqueue/pg-pubsub
Version:
Reliable PostgreSQL LISTEN/NOTIFY with inter-process lock support
80 lines • 2.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.pack = pack;
exports.unpack = unpack;
exports.signature = signature;
const farmhash_1 = require("farmhash");
/**
* Performs JSON.stringify on a given input taking into account
* pretty flag.
*
* @access private
* @param {AnyJson} input - serializable value
* @param {boolean} [pretty] - serialized format output prettify flag
* @return {string}
*/
function stringify(input, pretty) {
return pretty
? JSON.stringify(input, null, 2)
: JSON.stringify(input);
}
/**
* Serializes given input object to JSON string. On error will return
* serialized null value
*
* @param {AnyJson} input - serializable value
* @param {AnyLogger} [logger] - logger to handle errors logging with
* @param {boolean} [pretty] - serialized format output prettify flag
* @return {string}
*/
function pack(input, logger, pretty = false) {
if (typeof input === 'undefined') {
return 'null';
}
try {
return stringify(input, pretty);
}
catch (err) {
if (logger && logger.warn) {
logger.warn('pack() error:', err);
}
return 'null';
}
}
/**
* Deserializes given input JSON string to corresponding JSON value object.
* On error will return empty object
*
* @param {string} input - string to deserialize
* @param {AnyLogger} [logger] - logger to handle errors logging with
* @return {AnyJson}
*/
function unpack(input, logger) {
if (typeof input !== 'string') {
return null;
}
try {
return JSON.parse(input);
}
catch (err) {
if (logger && logger.warn) {
logger.warn('unpack() error:', err);
}
return {};
}
}
/**
* Constructs and returns hash string for a given set of processId, channel
* and payload.
*
* @param {string} processId
* @param {string} channel
* @param {any} payload
* @returns {string}
*/
function signature(processId, channel, payload) {
const data = JSON.stringify([processId, channel, payload]);
const hashBigInt = (0, farmhash_1.fingerprint64)(data);
return hashBigInt.toString(16);
}
//# sourceMappingURL=helpers.js.map