/** * Compatibility functions for working with File API objects * * https://developer.mozilla.org/en-US/docs/Web/API/File */ var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; export function isFile(file) { // browser if (typeof File === 'function') { return file instanceof File; } // node.js const f = file; return typeof f === 'object' && typeof f.name === 'string' && (typeof f.stream === 'function' || typeof f.arrayBuffer === 'function'); } /** * Compatibility helper for browsers where the `arrayBuffer function is * missing from `File` objects. * * @param file A File object */ export function fileArrayBuffer(file) { return __awaiter(this, void 0, void 0, function* () { if (file.arrayBuffer) { return file.arrayBuffer(); } // workaround for Safari where arrayBuffer is not supported on Files return new Promise(resolve => { const fr = new FileReader(); fr.onload = () => resolve(fr.result); fr.readAsArrayBuffer(file); }); }); }