aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-07-04 00:16:29 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-07-04 00:16:29 -0700
commit6f7af725ff224397a19048cca5839757335342b6 (patch)
treee397c1f404b09da94078908003f7b5c1f12a53b2
parente553e82acc71849f0ceb5d04b6340303d7d8f6f0 (diff)
downloadbun-6f7af725ff224397a19048cca5839757335342b6.tar.gz
bun-6f7af725ff224397a19048cca5839757335342b6.tar.zst
bun-6f7af725ff224397a19048cca5839757335342b6.zip
Export fs.promises
-rw-r--r--src/bun.js/fs.exports.js72
1 files changed, 72 insertions, 0 deletions
diff --git a/src/bun.js/fs.exports.js b/src/bun.js/fs.exports.js
index 0680b3568..8eb043f69 100644
--- a/src/bun.js/fs.exports.js
+++ b/src/bun.js/fs.exports.js
@@ -119,6 +119,39 @@ function callbackify(fsFunction, args) {
});
}
+// note: this is not quite the same as how node does it
+// in some cases, node swaps around arguments or makes small tweaks to the return type
+// this is just better than nothing.
+function promisify(fsFunction) {
+ // TODO: remove variadic arguments
+ // we can use new Function() here instead
+ // based on fsFucntion.length
+ var obj = {
+ [fsFunction.name]: function (resolve, reject, args) {
+ var result;
+ try {
+ result = fsFunction.apply(fs, args);
+ args = undefined;
+ } catch (err) {
+ args = undefined;
+ reject(err);
+ return;
+ }
+
+ resolve(result);
+ },
+ };
+
+ var func = obj[fsFunction.name];
+
+ // TODO: consider @createPromiseCapabiilty intrinsic
+ return (...args) => {
+ return new Promise((resolve, reject) => {
+ func(resolve, reject, args);
+ });
+ };
+}
+
export var accessSync = fs.accessSync.bind(fs);
export var appendFileSync = fs.appendFileSync.bind(fs);
export var closeSync = fs.closeSync.bind(fs);
@@ -157,6 +190,44 @@ export var lutimesSync = fs.lutimesSync.bind(fs);
export var createReadStream = fs.createReadStream.bind(fs);
export var createWriteStream = fs.createWriteStream.bind(fs);
+export var promises = {
+ access: promisify(fs.accessSync),
+ appendFile: promisify(fs.appendFileSync),
+ close: promisify(fs.closeSync),
+ copyFile: promisify(fs.copyFileSync),
+ exists: promisify(fs.existsSync),
+ chown: promisify(fs.chownSync),
+ chmod: promisify(fs.chmodSync),
+ fchmod: promisify(fs.fchmodSync),
+ fchown: promisify(fs.fchownSync),
+ fstat: promisify(fs.fstatSync),
+ fsync: promisify(fs.fsyncSync),
+ ftruncate: promisify(fs.ftruncateSync),
+ futimes: promisify(fs.futimesSync),
+ lchmod: promisify(fs.lchmodSync),
+ lchown: promisify(fs.lchownSync),
+ link: promisify(fs.linkSync),
+ lstat: promisify(fs.lstatSync),
+ mkdir: promisify(fs.mkdirSync),
+ mkdtemp: promisify(fs.mkdtempSync),
+ open: promisify(fs.openSync),
+ read: promisify(fs.readSync),
+ write: promisify(fs.writeSync),
+ readdir: promisify(fs.readdirSync),
+ writeFile: promisify(fs.writeFileSync),
+ readlink: promisify(fs.readlinkSync),
+ realpath: promisify(fs.realpathSync),
+ rename: promisify(fs.renameSync),
+ stat: promisify(fs.statSync),
+ symlink: promisify(fs.symlinkSync),
+ truncate: promisify(fs.truncateSync),
+ unlink: promisify(fs.unlinkSync),
+ utimes: promisify(fs.utimesSync),
+ lutimes: promisify(fs.lutimesSync),
+};
+
+promises.readFile = promises.readfile = promisify(fs.readFileSync);
+
// lol
realpath.native = realpath;
realpathSync.native = realpathSync;
@@ -233,4 +304,5 @@ export default {
createReadStream,
createWriteStream,
constants,
+ promises,
};