nats-micro
Version:
NATS micro compatible extra-lightweight microservice library
71 lines • 2.95 kB
JavaScript
;
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