NodeFileSystemSyncAccessHandle.js 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.NodeFileSystemSyncAccessHandle = void 0;
  4. const util_1 = require("./util");
  5. const buffer_1 = require("../internal/buffer");
  6. /**
  7. * @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemSyncAccessHandle
  8. */
  9. class NodeFileSystemSyncAccessHandle {
  10. constructor(fs, path, ctx) {
  11. this.fs = fs;
  12. this.path = path;
  13. this.ctx = ctx;
  14. this.fd = fs.openSync(path, 'r+');
  15. }
  16. /**
  17. * @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemSyncAccessHandle/close
  18. */
  19. async close() {
  20. (0, util_1.assertCanWrite)(this.ctx.mode);
  21. this.fs.closeSync(this.fd);
  22. }
  23. /**
  24. * @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemSyncAccessHandle/flush
  25. */
  26. async flush() {
  27. (0, util_1.assertCanWrite)(this.ctx.mode);
  28. this.fs.fsyncSync(this.fd);
  29. }
  30. /**
  31. * @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemSyncAccessHandle/getSize
  32. */
  33. async getSize() {
  34. return this.fs.statSync(this.path).size;
  35. }
  36. /**
  37. * @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemSyncAccessHandle/read
  38. */
  39. async read(buffer, options = {}) {
  40. const buf = buffer instanceof ArrayBuffer ? buffer_1.Buffer.from(buffer) : buffer;
  41. try {
  42. const size = this.fs.readSync(this.fd, buf, 0, buffer.byteLength, options.at ?? 0);
  43. return size;
  44. }
  45. catch (error) {
  46. if (error instanceof DOMException)
  47. throw error;
  48. if (error && typeof error === 'object') {
  49. switch (error.code) {
  50. case 'EBADF': {
  51. throw new DOMException('File handle already closed.', 'InvalidStateError');
  52. }
  53. }
  54. }
  55. throw error;
  56. }
  57. }
  58. /**
  59. * @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemSyncAccessHandle/truncate
  60. * @param newSize The number of bytes to resize the file to.
  61. */
  62. async truncate(newSize) {
  63. (0, util_1.assertCanWrite)(this.ctx.mode);
  64. this.fs.truncateSync(this.fd, newSize);
  65. }
  66. /**
  67. * Writes the content of a specified buffer to the file associated with the
  68. * handle, optionally at a given offset.
  69. *
  70. * @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemSyncAccessHandle/write
  71. * @param buffer
  72. * @param options
  73. */
  74. async write(buffer, options = {}) {
  75. (0, util_1.assertCanWrite)(this.ctx.mode);
  76. const buf = buffer instanceof ArrayBuffer ? buffer_1.Buffer.from(buffer) : buffer;
  77. try {
  78. return this.fs.writeSync(this.fd, buf, 0, buffer.byteLength, options.at ?? 0);
  79. }
  80. catch (error) {
  81. if (error instanceof DOMException)
  82. throw error;
  83. if (error && typeof error === 'object') {
  84. switch (error.code) {
  85. case 'EBADF': {
  86. throw new DOMException('File handle already closed.', 'InvalidStateError');
  87. }
  88. }
  89. }
  90. throw error;
  91. }
  92. }
  93. }
  94. exports.NodeFileSystemSyncAccessHandle = NodeFileSystemSyncAccessHandle;
  95. //# sourceMappingURL=NodeFileSystemSyncAccessHandle.js.map