@sentry/utils
Version:
Utilities for all Sentry JavaScript SDKs
128 lines (109 loc) • 3.55 kB
JavaScript
Object.defineProperty(exports, '__esModule', { value: true });
var object = require('./object.js');
/**
* Creates an envelope.
* Make sure to always explicitly provide the generic to this function
* so that the envelope types resolve correctly.
*/
function createEnvelope(headers, items = []) {
return [headers, items] ;
}
/**
* Add an item to an envelope.
* Make sure to always explicitly provide the generic to this function
* so that the envelope types resolve correctly.
*/
function addItemToEnvelope(envelope, newItem) {
const [headers, items] = envelope;
return [headers, [...items, newItem]] ;
}
/**
* Convenience function to loop through the items and item types of an envelope.
* (This function was mostly created because working with envelope types is painful at the moment)
*/
function forEachEnvelopeItem(
envelope,
callback,
) {
var envelopeItems = envelope[1];
envelopeItems.forEach((envelopeItem) => {
var envelopeItemType = envelopeItem[0].type;
callback(envelopeItem, envelopeItemType);
});
}
function encodeUTF8(input, textEncoder) {
var utf8 = textEncoder || new TextEncoder();
return utf8.encode(input);
}
/**
* Serializes an envelope.
*/
function serializeEnvelope(envelope, textEncoder) {
const [envHeaders, items] = envelope;
// Initially we construct our envelope as a string and only convert to binary chunks if we encounter binary data
let parts = JSON.stringify(envHeaders);
function append(next) {
if (typeof parts === 'string') {
parts = typeof next === 'string' ? parts + next : [encodeUTF8(parts, textEncoder), next];
} else {
parts.push(typeof next === 'string' ? encodeUTF8(next, textEncoder) : next);
}
}
for (var item of items) {
const [itemHeaders, payload] = item ;
append(`\n${JSON.stringify(itemHeaders)}\n`);
append(typeof payload === 'string' || payload instanceof Uint8Array ? payload : JSON.stringify(payload));
}
return typeof parts === 'string' ? parts : concatBuffers(parts);
}
function concatBuffers(buffers) {
var totalLength = buffers.reduce((acc, buf) => acc + buf.length, 0);
var merged = new Uint8Array(totalLength);
let offset = 0;
for (var buffer of buffers) {
merged.set(buffer, offset);
offset += buffer.length;
}
return merged;
}
/**
* Creates attachment envelope items
*/
function createAttachmentEnvelopeItem(
attachment,
textEncoder,
) {
var buffer = typeof attachment.data === 'string' ? encodeUTF8(attachment.data, textEncoder) : attachment.data;
return [
object.dropUndefinedKeys({
type: 'attachment',
length: buffer.length,
filename: attachment.filename,
content_type: attachment.contentType,
attachment_type: attachment.attachmentType,
}),
buffer,
];
}
var ITEM_TYPE_TO_DATA_CATEGORY_MAP = {
session: 'session',
sessions: 'session',
attachment: 'attachment',
transaction: 'transaction',
event: 'error',
client_report: 'internal',
user_report: 'default',
};
/**
* Maps the type of an envelope item to a data category.
*/
function envelopeItemTypeToDataCategory(type) {
return ITEM_TYPE_TO_DATA_CATEGORY_MAP[type];
}
exports.addItemToEnvelope = addItemToEnvelope;
exports.createAttachmentEnvelopeItem = createAttachmentEnvelopeItem;
exports.createEnvelope = createEnvelope;
exports.envelopeItemTypeToDataCategory = envelopeItemTypeToDataCategory;
exports.forEachEnvelopeItem = forEachEnvelopeItem;
exports.serializeEnvelope = serializeEnvelope;
//# sourceMappingURL=envelope.js.map