UNPKG

read-excel-file

Version:

Read `.xlsx` files in a web browser or in Node.js

41 lines (40 loc) 1.49 kB
import unzipFromArrayBuffer from '../zip/unzipFromArrayBuffer.js'; import UnzipError from '../zip/UnzipError.js'; import InvalidInputError from '../xlsx/file/InvalidInputError.js'; import filterZipArchiveEntry from './filterZipArchiveEntry.js'; import validateLeadingBytes from '../xlsx/file/validateLeadingBytes.js'; import checkpoint, { resetCheckpoint } from '../utility/checkpoint.js'; /** * Unpacks `*.xlsx` file contents. * An `.xlsx` file is really just a `.zip` archive with `.xml` files inside. * @param {(Blob|ArrayBuffer)} input * @return {Promise<Record<string,Uint8Array>} Resolves to an object holding `*.xlsx` file entries. */ export default function unpackXlsxFile(input) { resetCheckpoint(); checkpoint('unpack files'); return getArrayBuffer(input).then(function (arrayBuffer) { validateLeadingBytes(new Uint8Array(arrayBuffer)); return unzipFromArrayBuffer(arrayBuffer, { filter: filterZipArchiveEntry }).then(function (result) { return result; }, function (error) { if (error instanceof UnzipError) { throw new InvalidInputError('INVALID_ZIP', error.cause); } else { throw error; } }); }); } function getArrayBuffer(input) { if (input instanceof Blob) { return input.arrayBuffer(); } if (input instanceof ArrayBuffer) { return Promise.resolve(input); } throw new InvalidInputError('INPUT_TYPE_NOT_SUPPORTED'); } //# sourceMappingURL=unpackXlsxFileUniversal.js.map