file.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. "use strict";
  2. var __importDefault = (this && this.__importDefault) || function (mod) {
  3. return (mod && mod.__esModule) ? mod : { "default": mod };
  4. };
  5. Object.defineProperty(exports, "__esModule", { value: true });
  6. exports.makeFileSource = void 0;
  7. const fs_1 = __importDefault(require("fs"));
  8. const basesource_js_1 = require("./basesource.js");
  9. function closeAsync(fd) {
  10. return new Promise((resolve, reject) => {
  11. fs_1.default.close(fd, (err) => {
  12. if (err) {
  13. reject(err);
  14. }
  15. else {
  16. resolve();
  17. }
  18. });
  19. });
  20. }
  21. function openAsync(path, flags, mode = undefined) {
  22. return new Promise((resolve, reject) => {
  23. fs_1.default.open(path, flags, mode, (err, fd) => {
  24. if (err) {
  25. reject(err);
  26. }
  27. else {
  28. resolve(fd);
  29. }
  30. });
  31. });
  32. }
  33. function readAsync(...args) {
  34. return new Promise((resolve, reject) => {
  35. fs_1.default.read(...args, (err, bytesRead, buffer) => {
  36. if (err) {
  37. reject(err);
  38. }
  39. else {
  40. resolve({ bytesRead, buffer });
  41. }
  42. });
  43. });
  44. }
  45. class FileSource extends basesource_js_1.BaseSource {
  46. constructor(path) {
  47. super();
  48. this.path = path;
  49. this.openRequest = openAsync(path, 'r');
  50. }
  51. async fetchSlice(slice) {
  52. // TODO: use `signal`
  53. const fd = await this.openRequest;
  54. const { buffer } = await readAsync(fd, Buffer.alloc(slice.length), 0, slice.length, slice.offset);
  55. return buffer.buffer;
  56. }
  57. async close() {
  58. const fd = await this.openRequest;
  59. await closeAsync(fd);
  60. }
  61. }
  62. function makeFileSource(path) {
  63. return new FileSource(path);
  64. }
  65. exports.makeFileSource = makeFileSource;
  66. //# sourceMappingURL=file.js.map