@catamphetamine/id3js
Version:
A modern ID3 parser written completely in JavaScript, making use of typed arrays and the HTML5 File API
35 lines (34 loc) • 1.46 kB
JavaScript
/**
* @param {Blob} blob Blob to read
* @param {string} [options.contentType] Content Type
* @return {Promise<string>}
*/
export default function getBlobDataUrl(blob, { contentType } = {}) {
return new Promise((resolve, reject) => {
const fileReader = new FileReader();
fileReader.addEventListener('error', reject);
fileReader.addEventListener('abort', reject);
fileReader.addEventListener('load', () => {
// Works around TypeScript error: "Object is possibly 'null'".
// if (event.target === null) {
// return reject(new Error('No data'));
// }
// Works around TypeScript error: "Property 'result' does not exist
// on type 'EventTarget'".
// https://stackoverflow.com/questions/35789498/new-typescript-1-8-4-build-error-build-property-result-does-not-exist-on-t.
// let dataUrl = event.target.result;
if (fileReader.result === null) {
// Shouldn't be possible.
return reject(new Error('No data'));
}
let dataUrl = fileReader.result;
if (dataUrl !== null) {
if (contentType) {
dataUrl = dataUrl.replace('application/octet-stream', contentType);
}
}
resolve(dataUrl);
});
fileReader.readAsDataURL(blob);
});
}