diff options
Diffstat (limited to 'src/bun.js')
-rw-r--r-- | src/bun.js/fs.exports.js | 358 | ||||
-rw-r--r-- | src/bun.js/fs_promises.exports.js | 131 |
2 files changed, 209 insertions, 280 deletions
diff --git a/src/bun.js/fs.exports.js b/src/bun.js/fs.exports.js index 30a49c03b..a6b132392 100644 --- a/src/bun.js/fs.exports.js +++ b/src/bun.js/fs.exports.js @@ -1,112 +1,148 @@ var { direct, isPromise, isCallable } = import.meta.primordials; +var promises = import.meta.require("node:fs/promises"); var fs = Bun.fs(); var debug = process.env.DEBUG ? console.log : () => {}; - export var access = function access(...args) { - callbackify(fs.accessSync, args); -}; -export var appendFile = function appendFile(...args) { - callbackify(fs.appendFileSync, args); -}; -export var close = function close(...args) { - callbackify(fs.closeSync, args); -}; -export var rm = function rm(...args) { - callbackify(fs.rmSync, args); -}; -export var copyFile = function copyFile(...args) { - callbackify(fs.copyFileSync, args); -}; -export var exists = function exists(...args) { - callbackify(fs.existsSync, args); -}; -export var chown = function chown(...args) { - callbackify(fs.chownSync, args); -}; -export var chmod = function chmod(...args) { - callbackify(fs.chmodSync, args); -}; -export var fchmod = function fchmod(...args) { - callbackify(fs.fchmodSync, args); -}; -export var fchown = function fchown(...args) { - callbackify(fs.fchownSync, args); -}; -export var fstat = function fstat(...args) { - callbackify(fs.fstatSync, args); -}; -export var fsync = function fsync(...args) { - callbackify(fs.fsyncSync, args); -}; -export var ftruncate = function ftruncate(...args) { - callbackify(fs.ftruncateSync, args); -}; -export var futimes = function futimes(...args) { - callbackify(fs.futimesSync, args); -}; -export var lchmod = function lchmod(...args) { - callbackify(fs.lchmodSync, args); -}; -export var lchown = function lchown(...args) { - callbackify(fs.lchownSync, args); -}; -export var link = function link(...args) { - callbackify(fs.linkSync, args); -}; -export var lstat = function lstat(...args) { - callbackify(fs.lstatSync, args); -}; -export var mkdir = function mkdir(...args) { - callbackify(fs.mkdirSync, args); -}; -export var mkdtemp = function mkdtemp(...args) { - callbackify(fs.mkdtempSync, args); -}; -export var open = function open(...args) { - callbackify(fs.openSync, args); -}; -export var read = function read(...args) { - callbackify(fs.readSync, args); -}; -export var write = function write(...args) { - callbackify(fs.writeSync, args); -}; -export var readdir = function readdir(...args) { - callbackify(fs.readdirSync, args); -}; -export var readFile = function readFile(...args) { - callbackify(fs.readFileSync, args); -}; -export var writeFile = function writeFile(...args) { - callbackify(fs.writeFileSync, args); -}; -export var readlink = function readlink(...args) { - callbackify(fs.readlinkSync, args); -}; -export var realpath = function realpath(...args) { - callbackify(fs.realpathSync, args); -}; -export var rename = function rename(...args) { - callbackify(fs.renameSync, args); -}; -export var stat = function stat(...args) { - callbackify(fs.statSync, args); -}; -export var symlink = function symlink(...args) { - callbackify(fs.symlinkSync, args); -}; -export var truncate = function truncate(...args) { - callbackify(fs.truncateSync, args); -}; -export var unlink = function unlink(...args) { - callbackify(fs.unlinkSync, args); -}; -export var utimes = function utimes(...args) { - callbackify(fs.utimesSync, args); -}; -export var lutimes = function lutimes(...args) { - callbackify(fs.lutimesSync, args); -}; + callbackify(fs.accessSync, args); + }, + appendFile = function appendFile(...args) { + callbackify(fs.appendFileSync, args); + }, + close = function close(...args) { + callbackify(fs.closeSync, args); + }, + rm = function rm(...args) { + callbackify(fs.rmSync, args); + }, + copyFile = function copyFile(...args) { + callbackify(fs.copyFileSync, args); + }, + exists = function exists(...args) { + callbackify(fs.existsSync, args); + }, + chown = function chown(...args) { + callbackify(fs.chownSync, args); + }, + chmod = function chmod(...args) { + callbackify(fs.chmodSync, args); + }, + fchmod = function fchmod(...args) { + callbackify(fs.fchmodSync, args); + }, + fchown = function fchown(...args) { + callbackify(fs.fchownSync, args); + }, + fstat = function fstat(...args) { + callbackify(fs.fstatSync, args); + }, + fsync = function fsync(...args) { + callbackify(fs.fsyncSync, args); + }, + ftruncate = function ftruncate(...args) { + callbackify(fs.ftruncateSync, args); + }, + futimes = function futimes(...args) { + callbackify(fs.futimesSync, args); + }, + lchmod = function lchmod(...args) { + callbackify(fs.lchmodSync, args); + }, + lchown = function lchown(...args) { + callbackify(fs.lchownSync, 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); + }, + mkdtemp = function mkdtemp(...args) { + callbackify(fs.mkdtempSync, args); + }, + open = function open(...args) { + callbackify(fs.openSync, args); + }, + read = function read(...args) { + callbackify(fs.readSync, args); + }, + write = function write(...args) { + callbackify(fs.writeSync, args); + }, + readdir = function readdir(...args) { + callbackify(fs.readdirSync, args); + }, + readFile = function readFile(...args) { + callbackify(fs.readFileSync, args); + }, + writeFile = function writeFile(...args) { + callbackify(fs.writeFileSync, args); + }, + readlink = function readlink(...args) { + callbackify(fs.readlinkSync, args); + }, + realpath = function realpath(...args) { + callbackify(fs.realpathSync, args); + }, + rename = function rename(...args) { + callbackify(fs.renameSync, args); + }, + stat = function stat(...args) { + callbackify(fs.statSync, args); + }, + symlink = function symlink(...args) { + callbackify(fs.symlinkSync, args); + }, + truncate = function truncate(...args) { + callbackify(fs.truncateSync, args); + }, + unlink = function unlink(...args) { + callbackify(fs.unlinkSync, args); + }, + utimes = function utimes(...args) { + callbackify(fs.utimesSync, args); + }, + lutimes = function lutimes(...args) { + callbackify(fs.lutimesSync, args); + }, + accessSync = fs.accessSync.bind(fs), + appendFileSync = fs.appendFileSync.bind(fs), + closeSync = fs.closeSync.bind(fs), + copyFileSync = fs.copyFileSync.bind(fs), + existsSync = fs.existsSync.bind(fs), + chownSync = fs.chownSync.bind(fs), + chmodSync = fs.chmodSync.bind(fs), + fchmodSync = fs.fchmodSync.bind(fs), + fchownSync = fs.fchownSync.bind(fs), + fstatSync = fs.fstatSync.bind(fs), + fsyncSync = fs.fsyncSync.bind(fs), + ftruncateSync = fs.ftruncateSync.bind(fs), + futimesSync = fs.futimesSync.bind(fs), + lchmodSync = fs.lchmodSync.bind(fs), + lchownSync = fs.lchownSync.bind(fs), + linkSync = fs.linkSync.bind(fs), + lstatSync = fs.lstatSync.bind(fs), + mkdirSync = fs.mkdirSync.bind(fs), + mkdtempSync = fs.mkdtempSync.bind(fs), + openSync = fs.openSync.bind(fs), + readSync = fs.readSync.bind(fs), + writeSync = fs.writeSync.bind(fs), + readdirSync = fs.readdirSync.bind(fs), + readFileSync = fs.readFileSync.bind(fs), + writeFileSync = fs.writeFileSync.bind(fs), + readlinkSync = fs.readlinkSync.bind(fs), + realpathSync = fs.realpathSync.bind(fs), + renameSync = fs.renameSync.bind(fs), + statSync = fs.statSync.bind(fs), + symlinkSync = fs.symlinkSync.bind(fs), + truncateSync = fs.truncateSync.bind(fs), + unlinkSync = fs.unlinkSync.bind(fs), + utimesSync = fs.utimesSync.bind(fs), + lutimesSync = fs.lutimesSync.bind(fs), + rmSync = fs.rmSync.bind(fs), + promises = import.meta.require("node:fs/promises"); function callbackify(fsFunction, args) { try { @@ -117,76 +153,7 @@ 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); -export var copyFileSync = fs.copyFileSync.bind(fs); -export var existsSync = fs.existsSync.bind(fs); -export var chownSync = fs.chownSync.bind(fs); -export var chmodSync = fs.chmodSync.bind(fs); -export var fchmodSync = fs.fchmodSync.bind(fs); -export var fchownSync = fs.fchownSync.bind(fs); -export var fstatSync = fs.fstatSync.bind(fs); -export var fsyncSync = fs.fsyncSync.bind(fs); -export var ftruncateSync = fs.ftruncateSync.bind(fs); -export var futimesSync = fs.futimesSync.bind(fs); -export var lchmodSync = fs.lchmodSync.bind(fs); -export var lchownSync = fs.lchownSync.bind(fs); -export var linkSync = fs.linkSync.bind(fs); -export var lstatSync = fs.lstatSync.bind(fs); -export var mkdirSync = fs.mkdirSync.bind(fs); -export var mkdtempSync = fs.mkdtempSync.bind(fs); -export var openSync = fs.openSync.bind(fs); -export var readSync = fs.readSync.bind(fs); -export var writeSync = fs.writeSync.bind(fs); -export var readdirSync = fs.readdirSync.bind(fs); -export var readFileSync = fs.readFileSync.bind(fs); -export var writeFileSync = fs.writeFileSync.bind(fs); -export var readlinkSync = fs.readlinkSync.bind(fs); -export var realpathSync = fs.realpathSync.bind(fs); -export var renameSync = fs.renameSync.bind(fs); -export var statSync = fs.statSync.bind(fs); -export var symlinkSync = fs.symlinkSync.bind(fs); -export var truncateSync = fs.truncateSync.bind(fs); -export var unlinkSync = fs.unlinkSync.bind(fs); -export var utimesSync = fs.utimesSync.bind(fs); -export var lutimesSync = fs.lutimesSync.bind(fs); -export var rmSync = fs.rmSync.bind(fs); - -// Results from Object.keys() in Node 18 +// Results from Object.keys() in Node 1, // fd // path // flags @@ -575,9 +542,9 @@ var internalCreateReadStream = function createReadStream(path, options) { const ReadStream = getLazyReadStream(); return new ReadStream(path, options); }; -export var createReadStream = internalCreateReadStream; var _lazyWriteStream; +export var createReadStream = internalCreateReadStream; function getLazyWriteStream() { if (_lazyWriteStream) return _lazyWriteStream; @@ -912,45 +879,6 @@ Object.defineProperties(fs, { }, }); -export var promises = { - access: promisify(fs.accessSync), - appendFile: promisify(fs.appendFileSync), - chmod: promisify(fs.chmodSync), - chown: promisify(fs.chownSync), - close: promisify(fs.closeSync), - copyFile: promisify(fs.copyFileSync), - exists: promisify(fs.existsSync), - 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), - lutimes: promisify(fs.lutimesSync), - mkdir: promisify(fs.mkdirSync), - mkdtemp: promisify(fs.mkdtempSync), - open: promisify(fs.openSync), - read: promisify(fs.readSync), - readdir: promisify(fs.readdirSync), - readlink: promisify(fs.readlinkSync), - realpath: promisify(fs.realpathSync), - rename: promisify(fs.renameSync), - rm: promisify(fs.rmSync), - stat: promisify(fs.statSync), - symlink: promisify(fs.symlinkSync), - truncate: promisify(fs.truncateSync), - unlink: promisify(fs.unlinkSync), - utimes: promisify(fs.utimesSync), - write: promisify(fs.writeSync), - writeFile: promisify(fs.writeFileSync), -}; - -promises.readFile = promises.readfile = promisify(fs.readFileSync); - // lol realpath.native = realpath; realpathSync.native = realpathSync; diff --git a/src/bun.js/fs_promises.exports.js b/src/bun.js/fs_promises.exports.js index 2ba18f3c6..bcd67c6ac 100644 --- a/src/bun.js/fs_promises.exports.js +++ b/src/bun.js/fs_promises.exports.js @@ -3,73 +3,74 @@ var fs = Bun.fs(); // 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 = { - ["::bunternal::"]: function (resolve, reject, args) { - var result; - try { - result = fsFunction.apply(fs, args); - args = undefined; - } catch (err) { - args = undefined; - reject(err); - return; - } +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); - }, - }; + resolve(result); + }, + }[notrace]; - var func = obj[fsFunction.name]; + 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); + }); + }; + }, +}[notrace]; - // TODO: consider @createPromiseCapabiilty intrinsic - return (...args) => { - return new Promise((resolve, reject) => { - func(resolve, reject, args); - }); - }; -} - -export var access = promisify(fs.accessSync); -export var appendFile = promisify(fs.appendFileSync); -export var close = promisify(fs.closeSync); -export var copyFile = promisify(fs.copyFileSync); -export var exists = promisify(fs.existsSync); -export var chown = promisify(fs.chownSync); -export var chmod = promisify(fs.chmodSync); -export var fchmod = promisify(fs.fchmodSync); -export var fchown = promisify(fs.fchownSync); -export var fstat = promisify(fs.fstatSync); -export var fsync = promisify(fs.fsyncSync); -export var ftruncate = promisify(fs.ftruncateSync); -export var futimes = promisify(fs.futimesSync); -export var lchmod = promisify(fs.lchmodSync); -export var lchown = promisify(fs.lchownSync); -export var link = promisify(fs.linkSync); -export var lstat = promisify(fs.lstatSync); -export var mkdir = promisify(fs.mkdirSync); -export var mkdtemp = promisify(fs.mkdtempSync); -export var open = promisify(fs.openSync); -export var read = promisify(fs.readSync); -export var write = promisify(fs.writeSync); -export var readdir = promisify(fs.readdirSync); -export var readFile = promisify(fs.readFileSync); -export var readfile = readFile; -export var writeFile = promisify(fs.writeFileSync); -export var readlink = promisify(fs.readlinkSync); -export var realpath = promisify(fs.realpathSync); -export var rename = promisify(fs.renameSync); -export var stat = promisify(fs.statSync); -export var symlink = promisify(fs.symlinkSync); -export var truncate = promisify(fs.truncateSync); -export var unlink = promisify(fs.unlinkSync); -export var utimes = promisify(fs.utimesSync); -export var lutimes = promisify(fs.lutimesSync); -export var rm = promisify(fs.rmSync); -export var rmdir = promisify(fs.rmdirSync); +export var 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), + readFile = promisify(fs.readFileSync), + readfile = readFile, + 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), + rm = promisify(fs.rmSync), + rmdir = promisify(fs.rmdirSync); export default { access, @@ -82,7 +83,6 @@ export default { fchmod, fchown, fstat, - readfile, fsync, ftruncate, futimes, @@ -97,6 +97,7 @@ export default { write, readdir, readFile, + readfile, writeFile, readlink, realpath, |