diff options
Diffstat (limited to 'src/js/node')
| -rw-r--r-- | src/js/node/fs.js | 28 | ||||
| -rw-r--r-- | src/js/node/fs.promises.ts | 31 |
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), |
