Source: utils/files/readFromFile.js

/**
 * @module
 */

/**
 * Reads various types of content from a given File object.
 *
 * @async
 * @function
 * @see https://developer.mozilla.org/en-US/docs/Web/API/File
 * @param file
 * @param as {string?} defines the expected type of the content
 * @return {Promise<unknown>}
 */
export const readFromFile = (file, as) =>
  new Promise((resolve, reject) => {
    if (!(file instanceof File))
      return reject(new Error('A File is required to read text'));
    const reader = new FileReader();
    reader.addEventListener('error', reject);
    reader.addEventListener('load', () => resolve(reader.result), false);

    switch (as) {
      case 'binaryString':
        return reader.readAsBinaryString(file);
      case 'dataUrl':
        return reader.readAsDataURL(file);
      case 'arrayBuffer':
        return reader.readAsArrayBuffer(file);
      case 'text':
      default:
        return reader.readAsText(file);
    }
  });