File size: 928 Bytes
9ae1216 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | /**
* @import {AsyncBuffer} from '../src/types.js'
*/
import { createReadStream, promises as fs } from 'fs'
export * from './index.js'
/**
* Construct an AsyncBuffer for a local file using node fs package.
*
* @param {string} filename
* @returns {Promise<AsyncBuffer>}
*/
export async function asyncBufferFromFile(filename) {
const { size } = await fs.stat(filename)
return {
byteLength: size,
slice(start, end) {
// read file slice
const reader = createReadStream(filename, { start, end })
return new Promise((resolve, reject) => {
/** @type {any[]} */
const chunks = []
reader.on('data', chunk => chunks.push(chunk))
reader.on('error', reject)
reader.on('end', () => {
const buffer = Buffer.concat(chunks)
resolve(buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength))
})
})
},
}
}
|