UNPKG

nats-micro

Version:

NATS micro compatible extra-lightweight microservice library

71 lines 2.95 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.objectToContextHeaders = exports.contextHeadersToObject = exports.errorFromHeaders = exports.subjectToString = exports.errorToString = exports.kebabCase = exports.randomId = void 0; const nanoid_1 = require("nanoid"); const debug_js_1 = require("../debug.js"); const statusError_js_1 = require("../statusError.js"); const index_js_1 = require("../types/index.js"); function randomId() { return (0, nanoid_1.nanoid)(16); } exports.randomId = randomId; function kebabCase(s) { return s.replace(/(?<=.)([A-Z])/g, '-$1').toLowerCase(); } exports.kebabCase = kebabCase; function errorToString(error) { if (typeof error === 'object' && error) { return 'message' in error ? String(error.message) : JSON.stringify(error); } return String(error); } exports.errorToString = errorToString; function subjectToString(subject) { if (typeof (subject) === 'string') return subject; if (typeof (subject) === 'object' && ('method' in subject)) { if ('instance' in subject) return `${subject.microservice}.${subject.instance}.${subject.method}`; return `${subject.microservice}.${subject.method}`; } throw new Error('Unknown subject format'); } exports.subjectToString = subjectToString; function errorFromHeaders(headers) { if (!headers) return undefined; const headersArray = Array.from(headers); const errorMessageHeader = headersArray.find((h) => h[0] === 'X-Error-Message'); const errorStatusHeader = headersArray.find((h) => h[0] === 'X-Error-Status'); if (errorMessageHeader) { if (errorStatusHeader) return new statusError_js_1.StatusError(errorStatusHeader[1], errorMessageHeader[1]); return new Error(errorMessageHeader[1]); } return undefined; } exports.errorFromHeaders = errorFromHeaders; const addPrefix = (str, prefix) => `${prefix}${str}`; const removePrefix = (str, prefix) => str.replace(prefix, ''); const isContextHeaderKey = (key) => key.startsWith(index_js_1.headersPrefixContext); const contextHeadersToObject = (headers) => { const obj = {}; for (const [key, value] of headers) if (isContextHeaderKey(key)) try { obj[removePrefix(key, index_js_1.headersPrefixContext)] = JSON.parse(value); } catch (error) { debug_js_1.debug.ms.thread.warn(`Failed to parse context header '${key}' with value '${value}'`); } return obj; }; exports.contextHeadersToObject = contextHeadersToObject; const objectToContextHeaders = (object) => { const headers = []; for (const [key, value] of Object.entries(object)) headers.push([addPrefix(key, index_js_1.headersPrefixContext), JSON.stringify(value)]); return headers; }; exports.objectToContextHeaders = objectToContextHeaders; //# sourceMappingURL=misc.js.map