1 | import {Buffer} from 'node:buffer';
|
2 | import {ReadableWebToNodeStream} from 'readable-web-to-node-stream';
|
3 | import {fileTypeFromBuffer, fileTypeFromStream as coreFileTypeFromStream} from './core.js';
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 | function blobToArrayBuffer(blob) {
|
12 | if (blob.arrayBuffer) {
|
13 | return blob.arrayBuffer();
|
14 | }
|
15 |
|
16 |
|
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 |
|
35 | export 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 |
|
42 | export async function fileTypeFromBlob(blob) {
|
43 | const buffer = await blobToArrayBuffer(blob);
|
44 | return fileTypeFromBuffer(Buffer.from(buffer));
|
45 | }
|
46 |
|
47 | export {
|
48 | fileTypeFromTokenizer,
|
49 | fileTypeFromBuffer,
|
50 | fileTypeStream,
|
51 | } from './core.js';
|