@zendesk/retrace
Version:
define and capture Product Operation Traces along with computed metrics with an optional friendly React beacon API
59 lines • 2.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.applyDefaultTags = applyDefaultTags;
exports.ensureMatcherFn = ensureMatcherFn;
exports.convertMatchersToFns = convertMatchersToFns;
exports.convertLabelMatchersToFns = convertLabelMatchersToFns;
exports.ensureMatcherFnOrSpecialToken = ensureMatcherFnOrSpecialToken;
const matchSpan_1 = require("./matchSpan");
function applyDefaultTags(matcherFn, defaultTags) {
if (!defaultTags) {
return matcherFn;
}
for (const key of Object.keys(defaultTags)) {
const k = key;
// only add default tags to matcher if they are not already defined
if (!(k in matcherFn)) {
// @ts-expect-error hard to type
// eslint-disable-next-line no-param-reassign
matcherFn[k] = defaultTags[k];
}
}
return matcherFn;
}
function ensureMatcherFn(matcherFnOrDefinition, defaultTags) {
return applyDefaultTags(typeof matcherFnOrDefinition === 'function'
? matcherFnOrDefinition
: (0, matchSpan_1.fromDefinition)(matcherFnOrDefinition), defaultTags);
}
function arrayHasAtLeastOneElement(arr) {
return arr.length > 0;
}
function convertMatchersToFns(matchers) {
const mapped = matchers?.map((m) => ensureMatcherFn(m));
if (mapped && arrayHasAtLeastOneElement(mapped)) {
return mapped;
}
return undefined;
}
function convertLabelMatchersToFns(definitionLabelMatchers) {
const matchers = {};
for (const key in definitionLabelMatchers) {
// eslint-disable-next-line no-continue
if (!definitionLabelMatchers?.[key])
continue;
matchers[key] = ensureMatcherFn(definitionLabelMatchers[key]);
}
return matchers;
}
/**
* Helper function to ensure that the matcher is a function or a special token
*/
function ensureMatcherFnOrSpecialToken(spanMatcher) {
// Handle string types (special matchers)
if (typeof spanMatcher === 'string') {
return spanMatcher;
}
return ensureMatcherFn(spanMatcher);
}
//# sourceMappingURL=ensureMatcherFn.js.map