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
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
|