fix-eperm.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { chmodSync, promises } from './fs.js';
  2. const { chmod } = promises;
  3. export const fixEPERM = (fn) => async (path) => {
  4. try {
  5. return await fn(path);
  6. }
  7. catch (er) {
  8. const fer = er;
  9. if (fer?.code === 'ENOENT') {
  10. return;
  11. }
  12. if (fer?.code === 'EPERM') {
  13. try {
  14. await chmod(path, 0o666);
  15. }
  16. catch (er2) {
  17. const fer2 = er2;
  18. if (fer2?.code === 'ENOENT') {
  19. return;
  20. }
  21. throw er;
  22. }
  23. return await fn(path);
  24. }
  25. throw er;
  26. }
  27. };
  28. export const fixEPERMSync = (fn) => (path) => {
  29. try {
  30. return fn(path);
  31. }
  32. catch (er) {
  33. const fer = er;
  34. if (fer?.code === 'ENOENT') {
  35. return;
  36. }
  37. if (fer?.code === 'EPERM') {
  38. try {
  39. chmodSync(path, 0o666);
  40. }
  41. catch (er2) {
  42. const fer2 = er2;
  43. if (fer2?.code === 'ENOENT') {
  44. return;
  45. }
  46. throw er;
  47. }
  48. return fn(path);
  49. }
  50. throw er;
  51. }
  52. };
  53. //# sourceMappingURL=fix-eperm.js.map