You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
1.8 KiB

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeFileSource = void 0;
const fs_1 = __importDefault(require("fs"));
const basesource_js_1 = require("./basesource.js");
function closeAsync(fd) {
return new Promise((resolve, reject) => {
fs_1.default.close(fd, (err) => {
if (err) {
reject(err);
}
else {
resolve();
}
});
});
}
function openAsync(path, flags, mode = undefined) {
return new Promise((resolve, reject) => {
fs_1.default.open(path, flags, mode, (err, fd) => {
if (err) {
reject(err);
}
else {
resolve(fd);
}
});
});
}
function readAsync(...args) {
return new Promise((resolve, reject) => {
fs_1.default.read(...args, (err, bytesRead, buffer) => {
if (err) {
reject(err);
}
else {
resolve({ bytesRead, buffer });
}
});
});
}
class FileSource extends basesource_js_1.BaseSource {
constructor(path) {
super();
this.path = path;
this.openRequest = openAsync(path, 'r');
}
async fetchSlice(slice) {
// TODO: use `signal`
const fd = await this.openRequest;
const { buffer } = await readAsync(fd, Buffer.alloc(slice.length), 0, slice.length, slice.offset);
return buffer.buffer;
}
async close() {
const fd = await this.openRequest;
await closeAsync(fd);
}
}
function makeFileSource(path) {
return new FileSource(path);
}
exports.makeFileSource = makeFileSource;
//# sourceMappingURL=file.js.map