CoolFace
Apppublic

strong-tie/inbound-calls

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
index.ts69 linesDownload Raw Back to src
1export interface MimeBuffer extends Buffer {2	type: string;3	typeFull: string;4	charset: string;5}6 7/**8 * Returns a `Buffer` instance from the given data URI `uri`.9 *10 * @param {String} uri Data URI to turn into a Buffer instance11 * @returns {Buffer} Buffer instance from Data URI12 * @api public13 */14export function dataUriToBuffer(uri: string): MimeBuffer {15	if (!/^data:/i.test(uri)) {16		throw new TypeError(17			'`uri` does not appear to be a Data URI (must begin with "data:")'18		);19	}20 21	// strip newlines22	uri = uri.replace(/\r?\n/g, '');23 24	// split the URI up into the "metadata" and the "data" portions25	const firstComma = uri.indexOf(',');26	if (firstComma === -1 || firstComma <= 4) {27		throw new TypeError('malformed data: URI');28	}29 30	// remove the "data:" scheme and parse the metadata31	const meta = uri.substring(5, firstComma).split(';');32 33	let charset = '';34	let base64 = false;35	const type = meta[0] || 'text/plain';36	let typeFull = type;37	for (let i = 1; i < meta.length; i++) {38		if (meta[i] === 'base64') {39			base64 = true;40		} else if(meta[i]) {41			typeFull += `;${  meta[i]}`;42			if (meta[i].indexOf('charset=') === 0) {43				charset = meta[i].substring(8);44			}45		}46	}47	// defaults to US-ASCII only if type is not provided48	if (!meta[0] && !charset.length) {49		typeFull += ';charset=US-ASCII';50		charset = 'US-ASCII';51	}52 53	// get the encoded data portion and decode URI-encoded chars54	const encoding = base64 ? 'base64' : 'ascii';55	const data = unescape(uri.substring(firstComma + 1));56	const buffer = Buffer.from(data, encoding) as MimeBuffer;57 58	// set `.type` and `.typeFull` properties to MIME type59	buffer.type = type;60	buffer.typeFull = typeFull;61 62	// set the `.charset` property63	buffer.charset = charset;64 65	return buffer;66}67 68export default dataUriToBuffer;69