UNPKG

@uphold/opentelemetry-mutable-baggage

Version:

Package that allows an OpenTelemetry baggage to be mutable.

62 lines 2.53 kB
"use strict"; /** * This file was copied from '@opentelemetry/api' since it does export these utility functions since v2. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.serializeKeyPairs = serializeKeyPairs; exports.getKeyPairs = getKeyPairs; exports.parsePairKeyValue = parsePairKeyValue; exports.parseKeyPairsIntoRecord = parseKeyPairsIntoRecord; const constants_1 = require("./constants"); const api_1 = require("@opentelemetry/api"); function serializeKeyPairs(keyPairs) { return keyPairs.reduce((hValue, current) => { const value = `${hValue}${hValue !== '' ? constants_1.BAGGAGE_ITEMS_SEPARATOR : ''}${current}`; return value.length > constants_1.BAGGAGE_MAX_TOTAL_LENGTH ? hValue : value; }, ''); } function getKeyPairs(baggage) { return baggage.getAllEntries().map(([key, value]) => { let entry = `${encodeURIComponent(key)}=${encodeURIComponent(value.value)}`; // include opaque metadata if provided // NOTE: we intentionally don't URI-encode the metadata - that responsibility falls on the metadata implementation if (value.metadata !== undefined) { entry += constants_1.BAGGAGE_PROPERTIES_SEPARATOR + value.metadata.toString(); } return entry; }); } function parsePairKeyValue(entry) { const valueProps = entry.split(constants_1.BAGGAGE_PROPERTIES_SEPARATOR); if (valueProps.length <= 0) { return; } const keyPairPart = valueProps.shift(); if (!keyPairPart) { return; } const separatorIndex = keyPairPart.indexOf(constants_1.BAGGAGE_KEY_PAIR_SEPARATOR); if (separatorIndex <= 0) { return; } const key = decodeURIComponent(keyPairPart.substring(0, separatorIndex).trim()); const value = decodeURIComponent(keyPairPart.substring(separatorIndex + 1).trim()); let metadata; if (valueProps.length > 0) { metadata = (0, api_1.baggageEntryMetadataFromString)(valueProps.join(constants_1.BAGGAGE_PROPERTIES_SEPARATOR)); } return { key, metadata, value }; } function parseKeyPairsIntoRecord(value) { const result = {}; if (typeof value === 'string' && value.length > 0) { value.split(constants_1.BAGGAGE_ITEMS_SEPARATOR).forEach(entry => { const keyPair = parsePairKeyValue(entry); if (keyPair !== undefined && keyPair.value.length > 0) { result[keyPair.key] = keyPair.value; } }); } return result; } //# sourceMappingURL=utils.js.map