lib/utils.mjs
/* eslint-disable import/prefer-default-export */
// Extracts buffer from given source and optionally clones it
export const extractBuffer = (source, clone = false) => {
// Source is a byte-aware object
if (source && typeof source.byteLength !== 'undefined') {
// Determine whether source is a view or a raw buffer
if (typeof source.buffer !== 'undefined') {
return clone ? source.buffer.slice(0) : source.buffer;
}
return clone ? source.slice(0) : source;
}
// Source is a sequence of bytes
if (source && typeof source.length !== 'undefined') {
// Although Uint8Array's constructor succeeds when given strings,
// it does not correctly instantiate the buffer
if (source.constructor === String) {
return null;
}
try {
return (new Uint8Array(source)).buffer;
} catch (error) {
return null;
}
}
// No buffer found
return null;
};