mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2024-12-20 19:06:06 +01:00
42 lines
836 B
JavaScript
42 lines
836 B
JavaScript
|
'use strict'
|
||
|
|
||
|
const fs = require('fs')
|
||
|
const pify = require('./pify')
|
||
|
const pTry = (fn, ...arguments_) => new Promise(resolve => {
|
||
|
resolve(fn(...arguments_));
|
||
|
})
|
||
|
const pFinally = (promise, onFinally) => {
|
||
|
onFinally = onFinally || (() => { });
|
||
|
|
||
|
return promise.then(
|
||
|
val => new Promise(resolve => {
|
||
|
resolve(onFinally());
|
||
|
}).then(() => val),
|
||
|
err => new Promise(resolve => {
|
||
|
resolve(onFinally());
|
||
|
}).then(() => {
|
||
|
throw err;
|
||
|
})
|
||
|
);
|
||
|
};
|
||
|
|
||
|
|
||
|
const fsP = pify(fs)
|
||
|
|
||
|
module.exports = (...args) => {
|
||
|
const callback = args.pop()
|
||
|
return fsP
|
||
|
.open(...args)
|
||
|
.then(fd => pFinally(pTry(callback, fd), _ => fsP.close(fd)))
|
||
|
}
|
||
|
|
||
|
module.exports.sync = (...args) => {
|
||
|
const callback = args.pop()
|
||
|
const fd = fs.openSync(...args)
|
||
|
try {
|
||
|
return callback(fd)
|
||
|
} finally {
|
||
|
fs.closeSync(fd)
|
||
|
}
|
||
|
}
|