aboutsummaryrefslogtreecommitdiff
path: root/src/js/node
diff options
context:
space:
mode:
Diffstat (limited to 'src/js/node')
-rw-r--r--src/js/node/fs.js28
-rw-r--r--src/js/node/fs.promises.ts31
2 files changed, 28 insertions, 31 deletions
diff --git a/src/js/node/fs.js b/src/js/node/fs.js
index 5e72d6e27..f847cf179 100644
--- a/src/js/node/fs.js
+++ b/src/js/node/fs.js
@@ -122,9 +122,6 @@ export var access = function access(...args) {
link = function link(...args) {
callbackify(fs.linkSync, args);
},
- lstat = function lstat(...args) {
- callbackify(fs.lstatSync, args);
- },
mkdir = function mkdir(...args) {
callbackify(fs.mkdirSync, args);
},
@@ -141,7 +138,13 @@ export var access = function access(...args) {
callbackify(fs.writeSync, args);
},
readdir = function readdir(...args) {
- callbackify(fs.readdirSync, args);
+ const callback = args[args.length - 1];
+ if (typeof callback !== "function") {
+ // TODO: set code
+ throw new TypeError("Callback must be a function");
+ }
+
+ fs.readdir(...args).then(result => callback(null, result), callback);
},
readFile = function readFile(...args) {
callbackify(fs.readFileSync, args);
@@ -158,8 +161,23 @@ export var access = function access(...args) {
rename = function rename(...args) {
callbackify(fs.renameSync, args);
},
+ lstat = function lstat(...args) {
+ const callback = args[args.length - 1];
+ if (typeof callback !== "function") {
+ // TODO: set code
+ throw new TypeError("Callback must be a function");
+ }
+
+ fs.lstat(...args).then(result => callback(null, result), callback);
+ },
stat = function stat(...args) {
- callbackify(fs.statSync, args);
+ const callback = args[args.length - 1];
+ if (typeof callback !== "function") {
+ // TODO: set code
+ throw new TypeError("Callback must be a function");
+ }
+
+ fs.stat(...args).then(result => callback(null, result), callback);
},
symlink = function symlink(...args) {
callbackify(fs.symlinkSync, args);
diff --git a/src/js/node/fs.promises.ts b/src/js/node/fs.promises.ts
index 12278ef53..1826586ae 100644
--- a/src/js/node/fs.promises.ts
+++ b/src/js/node/fs.promises.ts
@@ -11,30 +11,9 @@ var fs = Bun.fs();
const notrace = "::bunternal::";
var promisify = {
[notrace]: fsFunction => {
- // TODO: remove variadic arguments
- // we can use new Function() here instead
- // based on fsFucntion.length
- var func = {
- [notrace]: function (resolve, reject, args) {
- var result;
- try {
- result = fsFunction.apply(fs, args);
- args = undefined;
- } catch (err) {
- args = undefined;
- reject(err);
- return;
- }
-
- resolve(result);
- },
- }[notrace];
-
return async function (...args) {
- // we await it so that the stack is captured
- return await new Promise((resolve, reject) => {
- process.nextTick(func, resolve, reject, args);
- });
+ await 1;
+ return fsFunction.apply(fs, args);
};
},
}[notrace];
@@ -104,19 +83,19 @@ export var access = promisify(fs.accessSync),
lchmod = promisify(fs.lchmodSync),
lchown = promisify(fs.lchownSync),
link = promisify(fs.linkSync),
- lstat = promisify(fs.lstatSync),
+ lstat = fs.lstat.bind(fs),
mkdir = promisify(fs.mkdirSync),
mkdtemp = promisify(fs.mkdtempSync),
open = promisify(fs.openSync),
read = promisify(fs.readSync),
write = promisify(fs.writeSync),
- readdir = promisify(fs.readdirSync),
+ readdir = fs.readdir.bind(fs),
readFile = promisify(fs.readFileSync),
writeFile = promisify(fs.writeFileSync),
readlink = promisify(fs.readlinkSync),
realpath = promisify(fs.realpathSync),
rename = promisify(fs.renameSync),
- stat = promisify(fs.statSync),
+ stat = fs.stat.bind(fs),
symlink = promisify(fs.symlinkSync),
truncate = promisify(fs.truncateSync),
unlink = promisify(fs.unlinkSync),