UNPKG

1.35 kBJavaScriptView Raw
1import {Buffer} from 'node:buffer';
2import {ReadableWebToNodeStream} from 'readable-web-to-node-stream';
3import {fileTypeFromBuffer, fileTypeFromStream as coreFileTypeFromStream} from './core.js';
4
5/**
6Convert Blobs to ArrayBuffer.
7
8@param {Blob} blob - Web API Blob.
9@returns {Promise<ArrayBuffer>}
10*/
11function blobToArrayBuffer(blob) {
12 if (blob.arrayBuffer) {
13 return blob.arrayBuffer();
14 }
15
16 // TODO: Remove when stop supporting older environments
17 return new Promise((resolve, reject) => {
18 const fileReader = new FileReader();
19 fileReader.addEventListener('loadend', event => {
20 resolve(event.target.result);
21 });
22
23 fileReader.addEventListener('error', event => {
24 reject(new Error(event.message));
25 });
26
27 fileReader.addEventListener('abort', event => {
28 reject(new Error(event.type));
29 });
30
31 fileReader.readAsArrayBuffer(blob);
32 });
33}
34
35export async function fileTypeFromStream(stream) {
36 const readableWebToNodeStream = new ReadableWebToNodeStream(stream);
37 const fileType = await coreFileTypeFromStream(readableWebToNodeStream);
38 await readableWebToNodeStream.close();
39 return fileType;
40}
41
42export async function fileTypeFromBlob(blob) {
43 const buffer = await blobToArrayBuffer(blob);
44 return fileTypeFromBuffer(Buffer.from(buffer));
45}
46
47export {
48 fileTypeFromTokenizer,
49 fileTypeFromBuffer,
50 fileTypeStream,
51} from './core.js';