NodeFileSystemHandle.js 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.NodeFileSystemHandle = void 0;
  4. const NodePermissionStatus_1 = require("./NodePermissionStatus");
  5. /**
  6. * Represents a File System Access API file handle `FileSystemHandle` object,
  7. * which was created from a Node.js `fs` module.
  8. *
  9. * @see [MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemHandle)
  10. */
  11. class NodeFileSystemHandle {
  12. constructor(kind, name) {
  13. this.kind = kind;
  14. this.name = name;
  15. }
  16. /**
  17. * Compares two handles to see if the associated entries (either a file or directory) match.
  18. *
  19. * @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemHandle/isSameEntry
  20. */
  21. isSameEntry(fileSystemHandle) {
  22. return (this.constructor === fileSystemHandle.constructor && this.__path === fileSystemHandle.__path);
  23. }
  24. /**
  25. * @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemHandle/queryPermission
  26. */
  27. async queryPermission(fileSystemHandlePermissionDescriptor) {
  28. const { mode } = fileSystemHandlePermissionDescriptor;
  29. // Check if the requested mode is compatible with the context mode
  30. const requestedMode = mode;
  31. const contextMode = this.ctx.mode;
  32. // If requesting readwrite but context only allows read, deny
  33. if (requestedMode === 'readwrite' && contextMode === 'read') {
  34. return new NodePermissionStatus_1.NodePermissionStatus(requestedMode, 'denied');
  35. }
  36. try {
  37. // Use Node.js fs.promises.access() to check permissions asynchronously
  38. let accessMode = 0 /* AMODE.F_OK */;
  39. if (mode === 'read') {
  40. accessMode = 4 /* AMODE.R_OK */;
  41. }
  42. else if (mode === 'readwrite') {
  43. accessMode = 4 /* AMODE.R_OK */ | 2 /* AMODE.W_OK */;
  44. }
  45. // Use asynchronous access check
  46. await this.fs.promises.access(this.__path, accessMode);
  47. return new NodePermissionStatus_1.NodePermissionStatus(mode, 'granted');
  48. }
  49. catch (error) {
  50. // If access check fails, permission is denied
  51. return new NodePermissionStatus_1.NodePermissionStatus(mode, 'denied');
  52. }
  53. }
  54. /**
  55. * @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemHandle/remove
  56. */
  57. async remove({ recursive } = { recursive: false }) {
  58. throw new Error('Not implemented');
  59. }
  60. /**
  61. * @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemHandle/requestPermission
  62. */
  63. requestPermission(fileSystemHandlePermissionDescriptor) {
  64. throw new Error('Not implemented');
  65. }
  66. }
  67. exports.NodeFileSystemHandle = NodeFileSystemHandle;
  68. //# sourceMappingURL=NodeFileSystemHandle.js.map