read-excel-file
Version:
Read `.xlsx` files in a web browser or in Node.js
41 lines (40 loc) • 1.49 kB
JavaScript
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