diff options
-rw-r--r-- | src/bun.js/node/node_fs.zig | 182 | ||||
-rw-r--r-- | src/bun.js/node/node_fs_binding.zig | 6 | ||||
-rw-r--r-- | src/js/node/fs.js | 8 | ||||
-rw-r--r-- | src/js/node/fs.promises.ts | 2 | ||||
-rw-r--r-- | src/js/out/InternalModuleRegistryConstants.h | 12 | ||||
-rw-r--r-- | test/js/node/fs/fs.test.ts | 32 |
6 files changed, 184 insertions, 58 deletions
diff --git a/src/bun.js/node/node_fs.zig b/src/bun.js/node/node_fs.zig index 826fde635..fbd58b3a1 100644 --- a/src/bun.js/node/node_fs.zig +++ b/src/bun.js/node/node_fs.zig @@ -123,10 +123,10 @@ pub const AsyncReaddirTask = struct { } pub fn deinit(this: *AsyncReaddirTask) void { - this.arena.deinit(); this.ref.unref(this.globalObject.bunVM()); this.args.deinitAndUnprotect(); this.promise.strong.deinit(); + this.arena.deinit(); bun.default_allocator.destroy(this); } }; @@ -210,10 +210,99 @@ pub const AsyncStatTask = struct { } pub fn deinit(this: *AsyncStatTask) void { + this.ref.unref(this.globalObject.bunVM()); + this.args.deinitAndUnprotect(); + this.promise.strong.deinit(); this.arena.deinit(); + bun.default_allocator.destroy(this); + } +}; + +pub const AsyncRealpathTask = struct { + promise: JSC.JSPromise.Strong, + args: Arguments.Realpath, + globalObject: *JSC.JSGlobalObject, + task: JSC.WorkPoolTask = .{ .callback = &workPoolCallback }, + result: JSC.Maybe(Return.Realpath), + ref: JSC.PollRef = .{}, + arena: bun.ArenaAllocator, + + pub fn create( + globalObject: *JSC.JSGlobalObject, + args: Arguments.Realpath, + vm: *JSC.VirtualMachine, + arena: bun.ArenaAllocator, + ) JSC.JSValue { + var task = bun.default_allocator.create(AsyncRealpathTask) catch @panic("out of memory"); + task.* = AsyncRealpathTask{ + .promise = JSC.JSPromise.Strong.init(globalObject), + .args = args, + .result = undefined, + .globalObject = globalObject, + .arena = arena, + }; + task.ref.ref(vm); + task.args.path.toThreadSafe(); + + JSC.WorkPool.schedule(&task.task); + + return task.promise.value(); + } + + fn workPoolCallback(task: *JSC.WorkPoolTask) void { + var this: *AsyncRealpathTask = @fieldParentPtr(AsyncRealpathTask, "task", task); + + var node_fs = NodeFS{}; + this.result = node_fs.realpath(this.args, .promise); + + if (this.result == .err) { + this.result.err.path = bun.default_allocator.dupe(u8, this.result.err.path) catch ""; + } + + this.globalObject.bunVMConcurrently().eventLoop().enqueueTaskConcurrent(JSC.ConcurrentTask.fromCallback(this, runFromJSThread)); + } + + fn runFromJSThread(this: *AsyncRealpathTask) void { + var globalObject = this.globalObject; + var success = @as(JSC.Maybe(Return.Realpath).Tag, this.result) == .result; + const result = switch (this.result) { + .err => |err| err.toJSC(globalObject), + .result => |res| brk: { + var exceptionref: JSC.C.JSValueRef = null; + const out = JSC.JSValue.c(JSC.To.JS.withType(Return.Realpath, res, globalObject, &exceptionref)); + const exception = JSC.JSValue.c(exceptionref); + if (exception != .zero) { + success = false; + break :brk exception; + } + + break :brk out; + }, + }; + var promise_value = this.promise.value(); + var promise = this.promise.get(); + promise_value.ensureStillAlive(); + + this.deinit(); + switch (success) { + false => { + promise.reject(globalObject, result); + }, + true => { + promise.resolve(globalObject, result); + }, + } + } + + pub fn deinit(this: *AsyncRealpathTask) void { + if (this.result == .err) { + bun.default_allocator.free(this.result.err.path); + } + this.ref.unref(this.globalObject.bunVM()); this.args.deinitAndUnprotect(); this.promise.strong.deinit(); + this.arena.deinit(); bun.default_allocator.destroy(this); } }; @@ -1157,6 +1246,10 @@ pub const Arguments = struct { this.path.deinit(); } + pub fn deinitAndUnprotect(this: *Realpath) void { + this.path.deinitAndUnprotect(); + } + pub fn fromJS(ctx: JSC.C.JSContextRef, arguments: *ArgumentsSlice, exception: JSC.C.ExceptionRef) ?Realpath { const path = PathLike.fromJS(ctx, arguments, exception) orelse { if (exception.* == null) { @@ -4269,65 +4362,58 @@ pub const NodeFS = struct { return Maybe(Return.Readlink).todo; } - pub fn realpath(this: *NodeFS, args: Arguments.Realpath, comptime flavor: Flavor) Maybe(Return.Realpath) { + pub fn realpath(this: *NodeFS, args: Arguments.Realpath, comptime _: Flavor) Maybe(Return.Realpath) { var outbuf: [bun.MAX_PATH_BYTES]u8 = undefined; var inbuf = &this.sync_error_buf; if (comptime Environment.allow_assert) std.debug.assert(FileSystem.instance_loaded); - switch (comptime flavor) { - .sync => { - var path_slice = args.path.slice(); + var path_slice = args.path.slice(); - var parts = [_]string{ FileSystem.instance.top_level_dir, path_slice }; - var path_ = FileSystem.instance.absBuf(&parts, inbuf); - inbuf[path_.len] = 0; - var path: [:0]u8 = inbuf[0..path_.len :0]; + var parts = [_]string{ FileSystem.instance.top_level_dir, path_slice }; + var path_ = FileSystem.instance.absBuf(&parts, inbuf); + inbuf[path_.len] = 0; + var path: [:0]u8 = inbuf[0..path_.len :0]; - const flags = if (comptime Environment.isLinux) - // O_PATH is faster - std.os.O.PATH - else - std.os.O.RDONLY; + const flags = if (comptime Environment.isLinux) + // O_PATH is faster + std.os.O.PATH + else + std.os.O.RDONLY; - const fd = switch (Syscall.open(path, flags, 0)) { - .err => |err| return .{ - .err = err.withPath(path), - }, - .result => |fd_| fd_, - }; + const fd = switch (Syscall.open(path, flags, 0)) { + .err => |err| return .{ + .err = err.withPath(path), + }, + .result => |fd_| fd_, + }; - defer { - _ = Syscall.close(fd); - } + defer { + _ = Syscall.close(fd); + } - const buf = switch (Syscall.getFdPath(fd, &outbuf)) { - .err => |err| return .{ - .err = err.withPath(path), - }, - .result => |buf_| buf_, - }; + const buf = switch (Syscall.getFdPath(fd, &outbuf)) { + .err => |err| return .{ + .err = err.withPath(path), + }, + .result => |buf_| buf_, + }; - return .{ - .result = switch (args.encoding) { - .buffer => .{ - .buffer = Buffer.fromString(buf, bun.default_allocator) catch unreachable, - }, - else => if (args.path == .slice_with_underlying_string and - strings.eqlLong(args.path.slice_with_underlying_string.slice(), buf, true)) - .{ - .BunString = args.path.slice_with_underlying_string.underlying.dupeRef(), - } - else - .{ - .BunString = bun.String.create(buf), - }, + return .{ + .result = switch (args.encoding) { + .buffer => .{ + .buffer = Buffer.fromString(buf, bun.default_allocator) catch unreachable, + }, + else => if (args.path == .slice_with_underlying_string and + strings.eqlLong(args.path.slice_with_underlying_string.slice(), buf, true)) + .{ + .BunString = args.path.slice_with_underlying_string.underlying.dupeRef(), + } + else + .{ + .BunString = bun.String.create(buf), }, - }; }, - else => {}, - } - - return Maybe(Return.Realpath).todo; + }; } pub const realpathNative = realpath; // pub fn realpathNative(this: *NodeFS, args: Arguments.Realpath, comptime flavor: Flavor) Maybe(Return.Realpath) { diff --git a/src/bun.js/node/node_fs_binding.zig b/src/bun.js/node/node_fs_binding.zig index b7ce9996c..845f6936e 100644 --- a/src/bun.js/node/node_fs_binding.zig +++ b/src/bun.js/node/node_fs_binding.zig @@ -108,7 +108,7 @@ fn call(comptime FunctionEnum: NodeFSFunctionEnum) NodeFSFunction { globalObject: *JSC.JSGlobalObject, callframe: *JSC.CallFrame, ) callconv(.C) JSC.JSValue { - if (comptime FunctionEnum != .readdir and FunctionEnum != .lstat and FunctionEnum != .stat and FunctionEnum != .readFile) { + if (comptime FunctionEnum != .readdir and FunctionEnum != .lstat and FunctionEnum != .stat and FunctionEnum != .readFile and FunctionEnum != .realpath) { globalObject.throw("Not implemented yet", .{}); return .zero; } @@ -147,6 +147,10 @@ fn call(comptime FunctionEnum: NodeFSFunctionEnum) NodeFSFunction { return JSC.Node.AsyncReadFileTask.create(globalObject, args, slice.vm, slice.arena); } + if (comptime FunctionEnum == .realpath) { + return JSC.Node.AsyncRealpathTask.create(globalObject, args, slice.vm, slice.arena); + } + if (comptime FunctionEnum == .stat or FunctionEnum == .lstat) { return JSC.Node.AsyncStatTask.create(globalObject, args, slice.vm, FunctionEnum == .lstat, slice.arena); } diff --git a/src/js/node/fs.js b/src/js/node/fs.js index 27f1a7b4c..e837816e9 100644 --- a/src/js/node/fs.js +++ b/src/js/node/fs.js @@ -157,7 +157,13 @@ var access = function access(...args) { callbackify(fs.readlinkSync, args); }, realpath = function realpath(...args) { - callbackify(fs.realpathSync, args); + const callback = args[args.length - 1]; + if (typeof callback !== "function") { + // TODO: set code + throw new TypeError("Callback must be a function"); + } + + fs.realpath(...args).then(result => callback(null, result), callback); }, rename = function rename(...args) { callbackify(fs.renameSync, args); diff --git a/src/js/node/fs.promises.ts b/src/js/node/fs.promises.ts index 6a1c42ecd..406858f7f 100644 --- a/src/js/node/fs.promises.ts +++ b/src/js/node/fs.promises.ts @@ -116,7 +116,7 @@ export default { readFile: fs.readFile.bind(fs), writeFile: promisify(fs.writeFileSync), readlink: promisify(fs.readlinkSync), - realpath: promisify(fs.realpathSync), + realpath: fs.realpath.bind(fs), rename: promisify(fs.renameSync), stat: fs.stat.bind(fs), symlink: promisify(fs.symlinkSync), diff --git a/src/js/out/InternalModuleRegistryConstants.h b/src/js/out/InternalModuleRegistryConstants.h index 1486d7276..f0029f6ed 100644 --- a/src/js/out/InternalModuleRegistryConstants.h +++ b/src/js/out/InternalModuleRegistryConstants.h @@ -69,11 +69,11 @@ static constexpr ASCIILiteral NodeEventsCode = "(function (){\"use strict\";cons // // -static constexpr ASCIILiteral NodeFSCode = "(function (){\"use strict\";var $,ReadStream,WriteStream;const EventEmitter=@getInternalField(@internalModuleRegistry,15)||@createInternalModuleById(15),promises=@getInternalField(@internalModuleRegistry,17)||@createInternalModuleById(17),Stream=@getInternalField(@internalModuleRegistry,34)||@createInternalModuleById(34);var fs=Bun.fs();class FSWatcher extends EventEmitter{#watcher;#listener;constructor(path,options,listener){super();if(typeof options===\"function\")listener=options,options={};else if(typeof options===\"string\")options={encoding:options};if(typeof listener!==\"function\")listener=()=>{};this.#listener=listener;try{this.#watcher=fs.watch(path,options||{},this.#onEvent.bind(this))}catch(e){if(!e.message\?.startsWith(\"FileNotFound\"))throw e;const notFound=new Error(`ENOENT: no such file or directory, watch '${path}'`);throw notFound.code=\"ENOENT\",notFound.errno=-2,notFound.path=path,notFound.syscall=\"watch\",notFound.filename=path,notFound}}#onEvent(eventType,filenameOrError){if(eventType===\"error\"||eventType===\"close\")this.emit(eventType,filenameOrError);else this.emit(\"change\",eventType,filenameOrError),this.#listener(eventType,filenameOrError)}close(){this.#watcher\?.close(),this.#watcher=null}ref(){this.#watcher\?.ref()}unref(){this.#watcher\?.unref()}}var access=function access(...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)},rmdir=function rmdir(...args){callbackify(fs.rmdirSync,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)},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){const callback=args[args.length-1];if(typeof callback!==\"function\")@throwTypeError(\"Callback must be a function\");fs.readdir(...args).then((result)=>callback(null,result),callback)},readFile=function readFile(...args){const callback=args[args.length-1];if(typeof callback!==\"function\")@throwTypeError(\"Callback must be a function\");fs.readFile(...args).then((result)=>callback(null,result),callback)},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)},lstat=function lstat(...args){const callback=args[args.length-1];if(typeof callback!==\"function\")@throwTypeError(\"Callback must be a function\");fs.lstat(...args).then((result)=>callback(null,result),callback)},stat=function stat(...args){const callback=args[args.length-1];if(typeof callback!==\"function\")@throwTypeError(\"Callback must be a function\");fs.stat(...args).then((result)=>callback(null,result),callback)},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),rmdirSync=fs.rmdirSync.bind(fs),writev=(fd,buffers,position,callback)=>{if(typeof position===\"function\")callback=position,position=null;queueMicrotask(()=>{try{var written=fs.writevSync(fd,buffers,position)}catch(e){callback(e)}callback(null,written,buffers)})},writevSync=fs.writevSync.bind(fs),readv=(fd,buffers,position,callback)=>{if(typeof position===\"function\")callback=position,position=null;queueMicrotask(()=>{try{var written=fs.readvSync(fd,buffers,position)}catch(e){callback(e)}callback(null,written,buffers)})},readvSync=fs.readvSync.bind(fs),Dirent=fs.Dirent,Stats=fs.Stats,watch=function watch(path,options,listener){return new FSWatcher(path,options,listener)};function callbackify(fsFunction,args){try{const result=fsFunction.apply(fs,args.slice(0,args.length-1)),callback=args[args.length-1];if(typeof callback===\"function\")queueMicrotask(()=>callback(null,result))}catch(e){const callback=args[args.length-1];if(typeof callback===\"function\")queueMicrotask(()=>callback(e))}}var readStreamPathFastPathSymbol=Symbol.for(\"Bun.Node.readStreamPathFastPath\");const readStreamSymbol=Symbol.for(\"Bun.NodeReadStream\"),readStreamPathOrFdSymbol=Symbol.for(\"Bun.NodeReadStreamPathOrFd\"),writeStreamSymbol=Symbol.for(\"Bun.NodeWriteStream\");var writeStreamPathFastPathSymbol=Symbol.for(\"Bun.NodeWriteStreamFastPath\"),writeStreamPathFastPathCallSymbol=Symbol.for(\"Bun.NodeWriteStreamFastPathCall\"),kIoDone=Symbol.for(\"kIoDone\"),defaultReadStreamOptions={file:void 0,fd:void 0,flags:\"r\",encoding:void 0,mode:438,autoClose:!0,emitClose:!0,start:0,end:Infinity,highWaterMark:65536,fs:{read,open:(path,flags,mode,cb)=>{var fd;try{fd=openSync(path,flags,mode)}catch(e){cb(e);return}cb(null,fd)},openSync,close},autoDestroy:!0},ReadStreamClass;ReadStream=function(InternalReadStream){ReadStreamClass=InternalReadStream,Object.defineProperty(ReadStreamClass.prototype,Symbol.toStringTag,{value:\"ReadStream\",enumerable:!1});function ReadStream2(path,options){return new InternalReadStream(path,options)}return ReadStream2.prototype=InternalReadStream.prototype,Object.defineProperty(ReadStream2,Symbol.hasInstance,{value(instance){return instance instanceof InternalReadStream}})}(class ReadStream2 extends Stream._getNativeReadableStreamPrototype(2,Stream.Readable){constructor(pathOrFd,options=defaultReadStreamOptions){if(typeof options!==\"object\"||!options)@throwTypeError(\"Expected options to be an object\");var{flags=defaultReadStreamOptions.flags,encoding=defaultReadStreamOptions.encoding,mode=defaultReadStreamOptions.mode,autoClose=defaultReadStreamOptions.autoClose,emitClose=defaultReadStreamOptions.emitClose,start=defaultReadStreamOptions.start,end=defaultReadStreamOptions.end,autoDestroy=defaultReadStreamOptions.autoClose,fs:fs2=defaultReadStreamOptions.fs,highWaterMark=defaultReadStreamOptions.highWaterMark}=options;if(pathOrFd\?.constructor\?.name===\"URL\")pathOrFd=Bun.fileURLToPath(pathOrFd);var tempThis={};if(typeof pathOrFd===\"string\"){if(pathOrFd.startsWith(\"file://\"))pathOrFd=Bun.fileURLToPath(pathOrFd);if(pathOrFd.length===0)@throwTypeError(\"Expected path to be a non-empty string\");tempThis.path=tempThis.file=tempThis[readStreamPathOrFdSymbol]=pathOrFd}else if(typeof pathOrFd===\"number\"){if(pathOrFd|=0,pathOrFd<0)@throwTypeError(\"Expected fd to be a positive integer\");tempThis.fd=tempThis[readStreamPathOrFdSymbol]=pathOrFd,tempThis.autoClose=!1}else @throwTypeError(\"Expected a path or file descriptor\");if(!tempThis.fd)tempThis.fd=fs2.openSync(pathOrFd,flags,mode);var fileRef=Bun.file(tempThis.fd),stream=fileRef.stream(),native=@direct(stream);if(!native)throw new Error(\"no native readable stream\");var{stream:ptr}=native;super(ptr,{...options,encoding,autoDestroy,autoClose,emitClose,highWaterMark});if(Object.assign(this,tempThis),this.#fileRef=fileRef,this.end=end,this._read=this.#internalRead,this.start=start,this.flags=flags,this.mode=mode,this.emitClose=emitClose,this[readStreamPathFastPathSymbol]=start===0&&end===Infinity&&autoClose&&fs2===defaultReadStreamOptions.fs&&(encoding===\"buffer\"||encoding===\"binary\"||encoding==null||encoding===\"utf-8\"||encoding===\"utf8\"),this._readableState.autoClose=autoDestroy=autoClose,this._readableState.highWaterMark=highWaterMark,start!==void 0)this.pos=start}#fileRef;#fs;file;path;fd=null;flags;mode;start;end;pos;bytesRead=0;#fileSize=-1;_read;[readStreamSymbol]=!0;[readStreamPathOrFdSymbol];[readStreamPathFastPathSymbol];_construct(callback){if(super._construct)super._construct(callback);else callback();this.emit(\"open\",this.fd),this.emit(\"ready\")}_destroy(err,cb){super._destroy(err,cb);try{var fd=this.fd;if(this[readStreamPathFastPathSymbol]=!1,!fd)cb(err);else this.#fs.close(fd,(er)=>{cb(er||err)}),this.fd=null}catch(e){throw e}}close(cb){if(typeof cb===\"function\")eos_()(this,cb);this.destroy()}push(chunk){var bytesRead=chunk\?.length\?\?0;if(bytesRead>0){this.bytesRead+=bytesRead;var currPos=this.pos;if(currPos!==void 0){if(this.bytesRead<currPos)return!0;if(currPos===this.start){var n=this.bytesRead-currPos;chunk=chunk.slice(-n);var[_,...rest]=arguments;if(this.pos=this.bytesRead,this.end!==void 0&&this.bytesRead>this.end)chunk=chunk.slice(0,this.end-this.start+1);return super.push(chunk,...rest)}var end=this.end;if(end!==void 0&&this.bytesRead>end){chunk=chunk.slice(0,end-currPos+1);var[_,...rest]=arguments;return this.pos=this.bytesRead,super.push(chunk,...rest)}this.pos=this.bytesRead}}return super.push(...arguments)}#internalRead(n){var{pos,end,bytesRead,fd,encoding}=this;if(n=pos!==void 0\?Math.min(end-pos+1,n):Math.min(end-bytesRead+1,n),n<=0){this.push(null);return}if(this.#fileSize===-1&&bytesRead===0&&pos===void 0){var stat2=fstatSync(fd);if(this.#fileSize=stat2.size,this.#fileSize>0&&n>this.#fileSize)n=this.#fileSize+1}this[kIoDone]=!1;var res=super._read(n);if(@isPromise(res)){var then=res\?.then;if(then&&@isCallable(then))then(()=>{if(this[kIoDone]=!0,this.destroyed)this.emit(kIoDone)},(er)=>{this[kIoDone]=!0,this.#errorOrDestroy(er)})}else if(this[kIoDone]=!0,this.destroyed)this.emit(kIoDone),this.#errorOrDestroy(new Error(\"ERR_STREAM_PREMATURE_CLOSE\"))}#errorOrDestroy(err,sync=null){var{_readableState:r={destroyed:!1,autoDestroy:!1},_writableState:w={destroyed:!1,autoDestroy:!1}}=this;if(w\?.destroyed||r\?.destroyed)return this;if(r\?.autoDestroy||w\?.autoDestroy)this.destroy(err);else if(err)this.emit(\"error\",err)}pause(){return this[readStreamPathFastPathSymbol]=!1,super.pause()}resume(){return this[readStreamPathFastPathSymbol]=!1,super.resume()}unshift(...args){return this[readStreamPathFastPathSymbol]=!1,super.unshift(...args)}pipe(dest,pipeOpts){if(this[readStreamPathFastPathSymbol]&&(pipeOpts\?.end\?\?!0)&&this._readableState\?.pipes\?.length===0){if((writeStreamPathFastPathSymbol in dest)&&dest[writeStreamPathFastPathSymbol]){if(dest[writeStreamPathFastPathCallSymbol](this,pipeOpts))return this}}return this[readStreamPathFastPathSymbol]=!1,super.pipe(dest,pipeOpts)}});function createReadStream(path,options){return new ReadStream(path,options)}var defaultWriteStreamOptions={fd:null,start:void 0,pos:void 0,encoding:void 0,flags:\"w\",mode:438,fs:{write,close,open,openSync}},WriteStreamClass;WriteStream=function(InternalWriteStream){WriteStreamClass=InternalWriteStream,Object.defineProperty(WriteStreamClass.prototype,Symbol.toStringTag,{value:\"WritesStream\",enumerable:!1});function WriteStream2(path,options){return new InternalWriteStream(path,options)}return WriteStream2.prototype=InternalWriteStream.prototype,Object.defineProperty(WriteStream2,Symbol.hasInstance,{value(instance){return instance instanceof InternalWriteStream}})}(class WriteStream2 extends Stream.NativeWritable{constructor(path,options=defaultWriteStreamOptions){if(!options)@throwTypeError(\"Expected options to be an object\");var{fs:fs2=defaultWriteStreamOptions.fs,start=defaultWriteStreamOptions.start,flags=defaultWriteStreamOptions.flags,mode=defaultWriteStreamOptions.mode,autoClose=!0,emitClose=!1,autoDestroy=autoClose,encoding=defaultWriteStreamOptions.encoding,fd=defaultWriteStreamOptions.fd,pos=defaultWriteStreamOptions.pos}=options,tempThis={};if(typeof path===\"string\"){if(path.length===0)@throwTypeError(\"Expected a non-empty path\");if(path.startsWith(\"file:\"))path=Bun.fileURLToPath(path);tempThis.path=path,tempThis.fd=null,tempThis[writeStreamPathFastPathSymbol]=autoClose&&(start===void 0||start===0)&&fs2.write===defaultWriteStreamOptions.fs.write&&fs2.close===defaultWriteStreamOptions.fs.close}else tempThis.fd=fd,tempThis[writeStreamPathFastPathSymbol]=!1;if(!tempThis.fd)tempThis.fd=fs2.openSync(path,flags,mode);super(tempThis.fd,{...options,decodeStrings:!1,autoDestroy,emitClose,fd:tempThis});if(Object.assign(this,tempThis),typeof fs2\?.write!==\"function\")@throwTypeError(\"Expected fs.write to be a function\");if(typeof fs2\?.close!==\"function\")@throwTypeError(\"Expected fs.close to be a function\");if(typeof fs2\?.open!==\"function\")@throwTypeError(\"Expected fs.open to be a function\");if(typeof path===\"object\"&&path){if(path instanceof URL)path=Bun.fileURLToPath(path)}if(typeof path!==\"string\"&&typeof fd!==\"number\")@throwTypeError(\"Expected a path or file descriptor\");if(this.start=start,this.#fs=fs2,this.flags=flags,this.mode=mode,this.start!==void 0)this.pos=this.start;if(encoding!==defaultWriteStreamOptions.encoding){if(this.setDefaultEncoding(encoding),encoding!==\"buffer\"&&encoding!==\"utf8\"&&encoding!==\"utf-8\"&&encoding!==\"binary\")this[writeStreamPathFastPathSymbol]=!1}}get autoClose(){return this._writableState.autoDestroy}set autoClose(val){this._writableState.autoDestroy=val}destroySoon=this.end;open(){}path;fd;flags;mode;#fs;bytesWritten=0;pos;[writeStreamPathFastPathSymbol];[writeStreamSymbol]=!0;start;[writeStreamPathFastPathCallSymbol](readStream,pipeOpts){if(!this[writeStreamPathFastPathSymbol])return!1;if(this.fd!==null)return this[writeStreamPathFastPathSymbol]=!1,!1;return this[kIoDone]=!1,readStream[kIoDone]=!1,Bun.write(this[writeStreamPathFastPathSymbol],readStream[readStreamPathOrFdSymbol]).then((bytesWritten)=>{readStream[kIoDone]=this[kIoDone]=!0,this.bytesWritten+=bytesWritten,readStream.bytesRead+=bytesWritten,this.end(),readStream.close()},(err)=>{readStream[kIoDone]=this[kIoDone]=!0,this.#errorOrDestroy(err),readStream.emit(\"error\",err)})}isBunFastPathEnabled(){return this[writeStreamPathFastPathSymbol]}disableBunFastPath(){this[writeStreamPathFastPathSymbol]=!1}#handleWrite(er,bytes){if(er)return this.#errorOrDestroy(er);this.bytesWritten+=bytes}#internalClose(err,cb){this[writeStreamPathFastPathSymbol]=!1;var fd=this.fd;this.#fs.close(fd,(er)=>{this.fd=null,cb(err||er)})}_construct(callback){if(typeof this.fd===\"number\"){callback();return}callback(),this.emit(\"open\",this.fd),this.emit(\"ready\")}_destroy(err,cb){if(this.fd===null)return cb(err);if(this[kIoDone]){this.once(kIoDone,()=>this.#internalClose(err,cb));return}this.#internalClose(err,cb)}[kIoDone]=!1;close(cb){if(cb){if(this.closed){process.nextTick(cb);return}this.on(\"close\",cb)}if(!this.autoClose)this.on(\"finish\",this.destroy);this.end()}write(chunk,encoding=this._writableState.defaultEncoding,cb){if(this[writeStreamPathFastPathSymbol]=!1,typeof chunk===\"string\")chunk=Buffer.from(chunk,encoding);var native=this.pos===void 0;return this[kIoDone]=!0,super.write(chunk,encoding,native\?(err,bytes)=>{if(this[kIoDone]=!1,this.#handleWrite(err,bytes),this.emit(kIoDone),cb)!err\?cb():cb(err)}:()=>{},native)}#internalWriteSlow(chunk,encoding,cb){this.#fs.write(this.fd,chunk,0,chunk.length,this.pos,(err,bytes)=>{this[kIoDone]=!1,this.#handleWrite(err,bytes),this.emit(kIoDone),!err\?cb():cb(err)})}end(chunk,encoding,cb){var native=this.pos===void 0;return super.end(chunk,encoding,cb,native)}_write=this.#internalWriteSlow;_writev=void 0;get pending(){return this.fd===null}_destroy(err,cb){this.close(err,cb)}#errorOrDestroy(err){var{_readableState:r={destroyed:!1,autoDestroy:!1},_writableState:w={destroyed:!1,autoDestroy:!1}}=this;if(w\?.destroyed||r\?.destroyed)return this;if(r\?.autoDestroy||w\?.autoDestroy)this.destroy(err);else if(err)this.emit(\"error\",err)}});function createWriteStream(path,options){return new WriteStream(path,options)}return Object.defineProperties(fs,{createReadStream:{value:createReadStream},createWriteStream:{value:createWriteStream},ReadStream:{value:ReadStream},WriteStream:{value:WriteStream}}),realpath.native=realpath,realpathSync.native=realpathSync,$={access,accessSync,appendFile,appendFileSync,chmod,chmodSync,chown,chownSync,close,closeSync,constants:promises.constants,copyFile,copyFileSync,createReadStream,createWriteStream,Dirent,exists,existsSync,fchmod,fchmodSync,fchown,fchownSync,fstat,fstatSync,fsync,fsyncSync,ftruncate,ftruncateSync,futimes,futimesSync,lchmod,lchmodSync,lchown,lchownSync,link,linkSync,lstat,lstatSync,lutimes,lutimesSync,mkdir,mkdirSync,mkdtemp,mkdtempSync,open,openSync,promises,read,readFile,readFileSync,readSync,readdir,readdirSync,readlink,readlinkSync,realpath,realpathSync,rename,renameSync,rm,rmSync,rmdir,rmdirSync,stat,statSync,Stats,symlink,symlinkSync,truncate,truncateSync,unlink,unlinkSync,utimes,utimesSync,write,writeFile,writeFileSync,writeSync,WriteStream,ReadStream,watch,FSWatcher,writev,writevSync,readv,readvSync,[Symbol.for(\"::bunternal::\")]:{ReadStreamClass,WriteStreamClass}},$})\n"_s; +static constexpr ASCIILiteral NodeFSCode = "(function (){\"use strict\";var $,ReadStream,WriteStream;const EventEmitter=@getInternalField(@internalModuleRegistry,15)||@createInternalModuleById(15),promises=@getInternalField(@internalModuleRegistry,17)||@createInternalModuleById(17),Stream=@getInternalField(@internalModuleRegistry,34)||@createInternalModuleById(34);var fs=Bun.fs();class FSWatcher extends EventEmitter{#watcher;#listener;constructor(path,options,listener){super();if(typeof options===\"function\")listener=options,options={};else if(typeof options===\"string\")options={encoding:options};if(typeof listener!==\"function\")listener=()=>{};this.#listener=listener;try{this.#watcher=fs.watch(path,options||{},this.#onEvent.bind(this))}catch(e){if(!e.message\?.startsWith(\"FileNotFound\"))throw e;const notFound=new Error(`ENOENT: no such file or directory, watch '${path}'`);throw notFound.code=\"ENOENT\",notFound.errno=-2,notFound.path=path,notFound.syscall=\"watch\",notFound.filename=path,notFound}}#onEvent(eventType,filenameOrError){if(eventType===\"error\"||eventType===\"close\")this.emit(eventType,filenameOrError);else this.emit(\"change\",eventType,filenameOrError),this.#listener(eventType,filenameOrError)}close(){this.#watcher\?.close(),this.#watcher=null}ref(){this.#watcher\?.ref()}unref(){this.#watcher\?.unref()}}var access=function access(...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)},rmdir=function rmdir(...args){callbackify(fs.rmdirSync,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)},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){const callback=args[args.length-1];if(typeof callback!==\"function\")@throwTypeError(\"Callback must be a function\");fs.readdir(...args).then((result)=>callback(null,result),callback)},readFile=function readFile(...args){const callback=args[args.length-1];if(typeof callback!==\"function\")@throwTypeError(\"Callback must be a function\");fs.readFile(...args).then((result)=>callback(null,result),callback)},writeFile=function writeFile(...args){callbackify(fs.writeFileSync,args)},readlink=function readlink(...args){callbackify(fs.readlinkSync,args)},realpath=function realpath(...args){const callback=args[args.length-1];if(typeof callback!==\"function\")@throwTypeError(\"Callback must be a function\");fs.realpath(...args).then((result)=>callback(null,result),callback)},rename=function rename(...args){callbackify(fs.renameSync,args)},lstat=function lstat(...args){const callback=args[args.length-1];if(typeof callback!==\"function\")@throwTypeError(\"Callback must be a function\");fs.lstat(...args).then((result)=>callback(null,result),callback)},stat=function stat(...args){const callback=args[args.length-1];if(typeof callback!==\"function\")@throwTypeError(\"Callback must be a function\");fs.stat(...args).then((result)=>callback(null,result),callback)},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),rmdirSync=fs.rmdirSync.bind(fs),writev=(fd,buffers,position,callback)=>{if(typeof position===\"function\")callback=position,position=null;queueMicrotask(()=>{try{var written=fs.writevSync(fd,buffers,position)}catch(e){callback(e)}callback(null,written,buffers)})},writevSync=fs.writevSync.bind(fs),readv=(fd,buffers,position,callback)=>{if(typeof position===\"function\")callback=position,position=null;queueMicrotask(()=>{try{var written=fs.readvSync(fd,buffers,position)}catch(e){callback(e)}callback(null,written,buffers)})},readvSync=fs.readvSync.bind(fs),Dirent=fs.Dirent,Stats=fs.Stats,watch=function watch(path,options,listener){return new FSWatcher(path,options,listener)};function callbackify(fsFunction,args){try{const result=fsFunction.apply(fs,args.slice(0,args.length-1)),callback=args[args.length-1];if(typeof callback===\"function\")queueMicrotask(()=>callback(null,result))}catch(e){const callback=args[args.length-1];if(typeof callback===\"function\")queueMicrotask(()=>callback(e))}}var readStreamPathFastPathSymbol=Symbol.for(\"Bun.Node.readStreamPathFastPath\");const readStreamSymbol=Symbol.for(\"Bun.NodeReadStream\"),readStreamPathOrFdSymbol=Symbol.for(\"Bun.NodeReadStreamPathOrFd\"),writeStreamSymbol=Symbol.for(\"Bun.NodeWriteStream\");var writeStreamPathFastPathSymbol=Symbol.for(\"Bun.NodeWriteStreamFastPath\"),writeStreamPathFastPathCallSymbol=Symbol.for(\"Bun.NodeWriteStreamFastPathCall\"),kIoDone=Symbol.for(\"kIoDone\"),defaultReadStreamOptions={file:void 0,fd:void 0,flags:\"r\",encoding:void 0,mode:438,autoClose:!0,emitClose:!0,start:0,end:Infinity,highWaterMark:65536,fs:{read,open:(path,flags,mode,cb)=>{var fd;try{fd=openSync(path,flags,mode)}catch(e){cb(e);return}cb(null,fd)},openSync,close},autoDestroy:!0},ReadStreamClass;ReadStream=function(InternalReadStream){ReadStreamClass=InternalReadStream,Object.defineProperty(ReadStreamClass.prototype,Symbol.toStringTag,{value:\"ReadStream\",enumerable:!1});function ReadStream2(path,options){return new InternalReadStream(path,options)}return ReadStream2.prototype=InternalReadStream.prototype,Object.defineProperty(ReadStream2,Symbol.hasInstance,{value(instance){return instance instanceof InternalReadStream}})}(class ReadStream2 extends Stream._getNativeReadableStreamPrototype(2,Stream.Readable){constructor(pathOrFd,options=defaultReadStreamOptions){if(typeof options!==\"object\"||!options)@throwTypeError(\"Expected options to be an object\");var{flags=defaultReadStreamOptions.flags,encoding=defaultReadStreamOptions.encoding,mode=defaultReadStreamOptions.mode,autoClose=defaultReadStreamOptions.autoClose,emitClose=defaultReadStreamOptions.emitClose,start=defaultReadStreamOptions.start,end=defaultReadStreamOptions.end,autoDestroy=defaultReadStreamOptions.autoClose,fs:fs2=defaultReadStreamOptions.fs,highWaterMark=defaultReadStreamOptions.highWaterMark}=options;if(pathOrFd\?.constructor\?.name===\"URL\")pathOrFd=Bun.fileURLToPath(pathOrFd);var tempThis={};if(typeof pathOrFd===\"string\"){if(pathOrFd.startsWith(\"file://\"))pathOrFd=Bun.fileURLToPath(pathOrFd);if(pathOrFd.length===0)@throwTypeError(\"Expected path to be a non-empty string\");tempThis.path=tempThis.file=tempThis[readStreamPathOrFdSymbol]=pathOrFd}else if(typeof pathOrFd===\"number\"){if(pathOrFd|=0,pathOrFd<0)@throwTypeError(\"Expected fd to be a positive integer\");tempThis.fd=tempThis[readStreamPathOrFdSymbol]=pathOrFd,tempThis.autoClose=!1}else @throwTypeError(\"Expected a path or file descriptor\");if(!tempThis.fd)tempThis.fd=fs2.openSync(pathOrFd,flags,mode);var fileRef=Bun.file(tempThis.fd),stream=fileRef.stream(),native=@direct(stream);if(!native)throw new Error(\"no native readable stream\");var{stream:ptr}=native;super(ptr,{...options,encoding,autoDestroy,autoClose,emitClose,highWaterMark});if(Object.assign(this,tempThis),this.#fileRef=fileRef,this.end=end,this._read=this.#internalRead,this.start=start,this.flags=flags,this.mode=mode,this.emitClose=emitClose,this[readStreamPathFastPathSymbol]=start===0&&end===Infinity&&autoClose&&fs2===defaultReadStreamOptions.fs&&(encoding===\"buffer\"||encoding===\"binary\"||encoding==null||encoding===\"utf-8\"||encoding===\"utf8\"),this._readableState.autoClose=autoDestroy=autoClose,this._readableState.highWaterMark=highWaterMark,start!==void 0)this.pos=start}#fileRef;#fs;file;path;fd=null;flags;mode;start;end;pos;bytesRead=0;#fileSize=-1;_read;[readStreamSymbol]=!0;[readStreamPathOrFdSymbol];[readStreamPathFastPathSymbol];_construct(callback){if(super._construct)super._construct(callback);else callback();this.emit(\"open\",this.fd),this.emit(\"ready\")}_destroy(err,cb){super._destroy(err,cb);try{var fd=this.fd;if(this[readStreamPathFastPathSymbol]=!1,!fd)cb(err);else this.#fs.close(fd,(er)=>{cb(er||err)}),this.fd=null}catch(e){throw e}}close(cb){if(typeof cb===\"function\")eos_()(this,cb);this.destroy()}push(chunk){var bytesRead=chunk\?.length\?\?0;if(bytesRead>0){this.bytesRead+=bytesRead;var currPos=this.pos;if(currPos!==void 0){if(this.bytesRead<currPos)return!0;if(currPos===this.start){var n=this.bytesRead-currPos;chunk=chunk.slice(-n);var[_,...rest]=arguments;if(this.pos=this.bytesRead,this.end!==void 0&&this.bytesRead>this.end)chunk=chunk.slice(0,this.end-this.start+1);return super.push(chunk,...rest)}var end=this.end;if(end!==void 0&&this.bytesRead>end){chunk=chunk.slice(0,end-currPos+1);var[_,...rest]=arguments;return this.pos=this.bytesRead,super.push(chunk,...rest)}this.pos=this.bytesRead}}return super.push(...arguments)}#internalRead(n){var{pos,end,bytesRead,fd,encoding}=this;if(n=pos!==void 0\?Math.min(end-pos+1,n):Math.min(end-bytesRead+1,n),n<=0){this.push(null);return}if(this.#fileSize===-1&&bytesRead===0&&pos===void 0){var stat2=fstatSync(fd);if(this.#fileSize=stat2.size,this.#fileSize>0&&n>this.#fileSize)n=this.#fileSize+1}this[kIoDone]=!1;var res=super._read(n);if(@isPromise(res)){var then=res\?.then;if(then&&@isCallable(then))then(()=>{if(this[kIoDone]=!0,this.destroyed)this.emit(kIoDone)},(er)=>{this[kIoDone]=!0,this.#errorOrDestroy(er)})}else if(this[kIoDone]=!0,this.destroyed)this.emit(kIoDone),this.#errorOrDestroy(new Error(\"ERR_STREAM_PREMATURE_CLOSE\"))}#errorOrDestroy(err,sync=null){var{_readableState:r={destroyed:!1,autoDestroy:!1},_writableState:w={destroyed:!1,autoDestroy:!1}}=this;if(w\?.destroyed||r\?.destroyed)return this;if(r\?.autoDestroy||w\?.autoDestroy)this.destroy(err);else if(err)this.emit(\"error\",err)}pause(){return this[readStreamPathFastPathSymbol]=!1,super.pause()}resume(){return this[readStreamPathFastPathSymbol]=!1,super.resume()}unshift(...args){return this[readStreamPathFastPathSymbol]=!1,super.unshift(...args)}pipe(dest,pipeOpts){if(this[readStreamPathFastPathSymbol]&&(pipeOpts\?.end\?\?!0)&&this._readableState\?.pipes\?.length===0){if((writeStreamPathFastPathSymbol in dest)&&dest[writeStreamPathFastPathSymbol]){if(dest[writeStreamPathFastPathCallSymbol](this,pipeOpts))return this}}return this[readStreamPathFastPathSymbol]=!1,super.pipe(dest,pipeOpts)}});function createReadStream(path,options){return new ReadStream(path,options)}var defaultWriteStreamOptions={fd:null,start:void 0,pos:void 0,encoding:void 0,flags:\"w\",mode:438,fs:{write,close,open,openSync}},WriteStreamClass;WriteStream=function(InternalWriteStream){WriteStreamClass=InternalWriteStream,Object.defineProperty(WriteStreamClass.prototype,Symbol.toStringTag,{value:\"WritesStream\",enumerable:!1});function WriteStream2(path,options){return new InternalWriteStream(path,options)}return WriteStream2.prototype=InternalWriteStream.prototype,Object.defineProperty(WriteStream2,Symbol.hasInstance,{value(instance){return instance instanceof InternalWriteStream}})}(class WriteStream2 extends Stream.NativeWritable{constructor(path,options=defaultWriteStreamOptions){if(!options)@throwTypeError(\"Expected options to be an object\");var{fs:fs2=defaultWriteStreamOptions.fs,start=defaultWriteStreamOptions.start,flags=defaultWriteStreamOptions.flags,mode=defaultWriteStreamOptions.mode,autoClose=!0,emitClose=!1,autoDestroy=autoClose,encoding=defaultWriteStreamOptions.encoding,fd=defaultWriteStreamOptions.fd,pos=defaultWriteStreamOptions.pos}=options,tempThis={};if(typeof path===\"string\"){if(path.length===0)@throwTypeError(\"Expected a non-empty path\");if(path.startsWith(\"file:\"))path=Bun.fileURLToPath(path);tempThis.path=path,tempThis.fd=null,tempThis[writeStreamPathFastPathSymbol]=autoClose&&(start===void 0||start===0)&&fs2.write===defaultWriteStreamOptions.fs.write&&fs2.close===defaultWriteStreamOptions.fs.close}else tempThis.fd=fd,tempThis[writeStreamPathFastPathSymbol]=!1;if(!tempThis.fd)tempThis.fd=fs2.openSync(path,flags,mode);super(tempThis.fd,{...options,decodeStrings:!1,autoDestroy,emitClose,fd:tempThis});if(Object.assign(this,tempThis),typeof fs2\?.write!==\"function\")@throwTypeError(\"Expected fs.write to be a function\");if(typeof fs2\?.close!==\"function\")@throwTypeError(\"Expected fs.close to be a function\");if(typeof fs2\?.open!==\"function\")@throwTypeError(\"Expected fs.open to be a function\");if(typeof path===\"object\"&&path){if(path instanceof URL)path=Bun.fileURLToPath(path)}if(typeof path!==\"string\"&&typeof fd!==\"number\")@throwTypeError(\"Expected a path or file descriptor\");if(this.start=start,this.#fs=fs2,this.flags=flags,this.mode=mode,this.start!==void 0)this.pos=this.start;if(encoding!==defaultWriteStreamOptions.encoding){if(this.setDefaultEncoding(encoding),encoding!==\"buffer\"&&encoding!==\"utf8\"&&encoding!==\"utf-8\"&&encoding!==\"binary\")this[writeStreamPathFastPathSymbol]=!1}}get autoClose(){return this._writableState.autoDestroy}set autoClose(val){this._writableState.autoDestroy=val}destroySoon=this.end;open(){}path;fd;flags;mode;#fs;bytesWritten=0;pos;[writeStreamPathFastPathSymbol];[writeStreamSymbol]=!0;start;[writeStreamPathFastPathCallSymbol](readStream,pipeOpts){if(!this[writeStreamPathFastPathSymbol])return!1;if(this.fd!==null)return this[writeStreamPathFastPathSymbol]=!1,!1;return this[kIoDone]=!1,readStream[kIoDone]=!1,Bun.write(this[writeStreamPathFastPathSymbol],readStream[readStreamPathOrFdSymbol]).then((bytesWritten)=>{readStream[kIoDone]=this[kIoDone]=!0,this.bytesWritten+=bytesWritten,readStream.bytesRead+=bytesWritten,this.end(),readStream.close()},(err)=>{readStream[kIoDone]=this[kIoDone]=!0,this.#errorOrDestroy(err),readStream.emit(\"error\",err)})}isBunFastPathEnabled(){return this[writeStreamPathFastPathSymbol]}disableBunFastPath(){this[writeStreamPathFastPathSymbol]=!1}#handleWrite(er,bytes){if(er)return this.#errorOrDestroy(er);this.bytesWritten+=bytes}#internalClose(err,cb){this[writeStreamPathFastPathSymbol]=!1;var fd=this.fd;this.#fs.close(fd,(er)=>{this.fd=null,cb(err||er)})}_construct(callback){if(typeof this.fd===\"number\"){callback();return}callback(),this.emit(\"open\",this.fd),this.emit(\"ready\")}_destroy(err,cb){if(this.fd===null)return cb(err);if(this[kIoDone]){this.once(kIoDone,()=>this.#internalClose(err,cb));return}this.#internalClose(err,cb)}[kIoDone]=!1;close(cb){if(cb){if(this.closed){process.nextTick(cb);return}this.on(\"close\",cb)}if(!this.autoClose)this.on(\"finish\",this.destroy);this.end()}write(chunk,encoding=this._writableState.defaultEncoding,cb){if(this[writeStreamPathFastPathSymbol]=!1,typeof chunk===\"string\")chunk=Buffer.from(chunk,encoding);var native=this.pos===void 0;return this[kIoDone]=!0,super.write(chunk,encoding,native\?(err,bytes)=>{if(this[kIoDone]=!1,this.#handleWrite(err,bytes),this.emit(kIoDone),cb)!err\?cb():cb(err)}:()=>{},native)}#internalWriteSlow(chunk,encoding,cb){this.#fs.write(this.fd,chunk,0,chunk.length,this.pos,(err,bytes)=>{this[kIoDone]=!1,this.#handleWrite(err,bytes),this.emit(kIoDone),!err\?cb():cb(err)})}end(chunk,encoding,cb){var native=this.pos===void 0;return super.end(chunk,encoding,cb,native)}_write=this.#internalWriteSlow;_writev=void 0;get pending(){return this.fd===null}_destroy(err,cb){this.close(err,cb)}#errorOrDestroy(err){var{_readableState:r={destroyed:!1,autoDestroy:!1},_writableState:w={destroyed:!1,autoDestroy:!1}}=this;if(w\?.destroyed||r\?.destroyed)return this;if(r\?.autoDestroy||w\?.autoDestroy)this.destroy(err);else if(err)this.emit(\"error\",err)}});function createWriteStream(path,options){return new WriteStream(path,options)}return Object.defineProperties(fs,{createReadStream:{value:createReadStream},createWriteStream:{value:createWriteStream},ReadStream:{value:ReadStream},WriteStream:{value:WriteStream}}),realpath.native=realpath,realpathSync.native=realpathSync,$={access,accessSync,appendFile,appendFileSync,chmod,chmodSync,chown,chownSync,close,closeSync,constants:promises.constants,copyFile,copyFileSync,createReadStream,createWriteStream,Dirent,exists,existsSync,fchmod,fchmodSync,fchown,fchownSync,fstat,fstatSync,fsync,fsyncSync,ftruncate,ftruncateSync,futimes,futimesSync,lchmod,lchmodSync,lchown,lchownSync,link,linkSync,lstat,lstatSync,lutimes,lutimesSync,mkdir,mkdirSync,mkdtemp,mkdtempSync,open,openSync,promises,read,readFile,readFileSync,readSync,readdir,readdirSync,readlink,readlinkSync,realpath,realpathSync,rename,renameSync,rm,rmSync,rmdir,rmdirSync,stat,statSync,Stats,symlink,symlinkSync,truncate,truncateSync,unlink,unlinkSync,utimes,utimesSync,write,writeFile,writeFileSync,writeSync,WriteStream,ReadStream,watch,FSWatcher,writev,writevSync,readv,readvSync,[Symbol.for(\"::bunternal::\")]:{ReadStreamClass,WriteStreamClass}},$})\n"_s; // // -static constexpr ASCIILiteral NodeFSPromisesCode = "(function (){\"use strict\";var $;const constants=@processBindingConstants.fs;var fs=Bun.fs();const notrace=\"::bunternal::\";var promisify={[notrace]:(fsFunction)=>{return async function(...args){return await 1,fsFunction.apply(fs,args)}}}[notrace];function watch(filename,options={}){if(filename instanceof URL)@throwTypeError(\"Watch URLs are not supported yet\");else if(Buffer.isBuffer(filename))filename=filename.toString();else if(typeof filename!==\"string\")@throwTypeError(\"Expected path to be a string or Buffer\");let nextEventResolve=null;if(typeof options===\"string\")options={encoding:options};const queue=@createFIFO(),watcher=fs.watch(filename,options||{},(eventType,filename2)=>{if(queue.push({eventType,filename:filename2}),nextEventResolve){const resolve=nextEventResolve;nextEventResolve=null,resolve()}});return{[Symbol.asyncIterator](){let closed=!1;return{async next(){while(!closed){let event;while(event=queue.shift()){if(event.eventType===\"close\")return closed=!0,{value:void 0,done:!0};if(event.eventType===\"error\")throw closed=!0,event.filename;return{value:event,done:!1}}const{promise,resolve}=Promise.withResolvers();nextEventResolve=resolve,await promise}return{value:void 0,done:!0}},return(){if(!closed){if(watcher.close(),closed=!0,nextEventResolve){const resolve=nextEventResolve;nextEventResolve=null,resolve()}}return{value:void 0,done:!0}}}}}}return $={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: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:fs.readdir.bind(fs),readFile:fs.readFile.bind(fs),writeFile:promisify(fs.writeFileSync),readlink:promisify(fs.readlinkSync),realpath:promisify(fs.realpathSync),rename:promisify(fs.renameSync),stat:fs.stat.bind(fs),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),writev:(fd,buffers,position)=>{return new Promise((resolve,reject)=>{try{var bytesWritten=fs.writevSync(fd,buffers,position)}catch(err){reject(err);return}resolve({bytesWritten,buffers})})},readv:(fd,buffers,position)=>{return new Promise((resolve,reject)=>{try{var bytesRead=fs.readvSync(fd,buffers,position)}catch(err){reject(err);return}resolve({bytesRead,buffers})})},constants,watch},$})\n"_s; +static constexpr ASCIILiteral NodeFSPromisesCode = "(function (){\"use strict\";var $;const constants=@processBindingConstants.fs;var fs=Bun.fs();const notrace=\"::bunternal::\";var promisify={[notrace]:(fsFunction)=>{return async function(...args){return await 1,fsFunction.apply(fs,args)}}}[notrace];function watch(filename,options={}){if(filename instanceof URL)@throwTypeError(\"Watch URLs are not supported yet\");else if(Buffer.isBuffer(filename))filename=filename.toString();else if(typeof filename!==\"string\")@throwTypeError(\"Expected path to be a string or Buffer\");let nextEventResolve=null;if(typeof options===\"string\")options={encoding:options};const queue=@createFIFO(),watcher=fs.watch(filename,options||{},(eventType,filename2)=>{if(queue.push({eventType,filename:filename2}),nextEventResolve){const resolve=nextEventResolve;nextEventResolve=null,resolve()}});return{[Symbol.asyncIterator](){let closed=!1;return{async next(){while(!closed){let event;while(event=queue.shift()){if(event.eventType===\"close\")return closed=!0,{value:void 0,done:!0};if(event.eventType===\"error\")throw closed=!0,event.filename;return{value:event,done:!1}}const{promise,resolve}=Promise.withResolvers();nextEventResolve=resolve,await promise}return{value:void 0,done:!0}},return(){if(!closed){if(watcher.close(),closed=!0,nextEventResolve){const resolve=nextEventResolve;nextEventResolve=null,resolve()}}return{value:void 0,done:!0}}}}}}return $={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: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:fs.readdir.bind(fs),readFile:fs.readFile.bind(fs),writeFile:promisify(fs.writeFileSync),readlink:promisify(fs.readlinkSync),realpath:fs.realpath.bind(fs),rename:promisify(fs.renameSync),stat:fs.stat.bind(fs),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),writev:(fd,buffers,position)=>{return new Promise((resolve,reject)=>{try{var bytesWritten=fs.writevSync(fd,buffers,position)}catch(err){reject(err);return}resolve({bytesWritten,buffers})})},readv:(fd,buffers,position)=>{return new Promise((resolve,reject)=>{try{var bytesRead=fs.readvSync(fd,buffers,position)}catch(err){reject(err);return}resolve({bytesRead,buffers})})},constants,watch},$})\n"_s; // // @@ -294,11 +294,11 @@ static constexpr ASCIILiteral NodeEventsCode = "(function (){\"use strict\";cons // // -static constexpr ASCIILiteral NodeFSCode = "(function (){\"use strict\";var $,ReadStream,WriteStream;const EventEmitter=@getInternalField(@internalModuleRegistry,15)||@createInternalModuleById(15),promises=@getInternalField(@internalModuleRegistry,17)||@createInternalModuleById(17),Stream=@getInternalField(@internalModuleRegistry,34)||@createInternalModuleById(34);var fs=Bun.fs();class FSWatcher extends EventEmitter{#watcher;#listener;constructor(path,options,listener){super();if(typeof options===\"function\")listener=options,options={};else if(typeof options===\"string\")options={encoding:options};if(typeof listener!==\"function\")listener=()=>{};this.#listener=listener;try{this.#watcher=fs.watch(path,options||{},this.#onEvent.bind(this))}catch(e){if(!e.message\?.startsWith(\"FileNotFound\"))throw e;const notFound=new Error(`ENOENT: no such file or directory, watch '${path}'`);throw notFound.code=\"ENOENT\",notFound.errno=-2,notFound.path=path,notFound.syscall=\"watch\",notFound.filename=path,notFound}}#onEvent(eventType,filenameOrError){if(eventType===\"error\"||eventType===\"close\")this.emit(eventType,filenameOrError);else this.emit(\"change\",eventType,filenameOrError),this.#listener(eventType,filenameOrError)}close(){this.#watcher\?.close(),this.#watcher=null}ref(){this.#watcher\?.ref()}unref(){this.#watcher\?.unref()}}var access=function access(...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)},rmdir=function rmdir(...args){callbackify(fs.rmdirSync,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)},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){const callback=args[args.length-1];if(typeof callback!==\"function\")@throwTypeError(\"Callback must be a function\");fs.readdir(...args).then((result)=>callback(null,result),callback)},readFile=function readFile(...args){const callback=args[args.length-1];if(typeof callback!==\"function\")@throwTypeError(\"Callback must be a function\");fs.readFile(...args).then((result)=>callback(null,result),callback)},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)},lstat=function lstat(...args){const callback=args[args.length-1];if(typeof callback!==\"function\")@throwTypeError(\"Callback must be a function\");fs.lstat(...args).then((result)=>callback(null,result),callback)},stat=function stat(...args){const callback=args[args.length-1];if(typeof callback!==\"function\")@throwTypeError(\"Callback must be a function\");fs.stat(...args).then((result)=>callback(null,result),callback)},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),rmdirSync=fs.rmdirSync.bind(fs),writev=(fd,buffers,position,callback)=>{if(typeof position===\"function\")callback=position,position=null;queueMicrotask(()=>{try{var written=fs.writevSync(fd,buffers,position)}catch(e){callback(e)}callback(null,written,buffers)})},writevSync=fs.writevSync.bind(fs),readv=(fd,buffers,position,callback)=>{if(typeof position===\"function\")callback=position,position=null;queueMicrotask(()=>{try{var written=fs.readvSync(fd,buffers,position)}catch(e){callback(e)}callback(null,written,buffers)})},readvSync=fs.readvSync.bind(fs),Dirent=fs.Dirent,Stats=fs.Stats,watch=function watch(path,options,listener){return new FSWatcher(path,options,listener)};function callbackify(fsFunction,args){try{const result=fsFunction.apply(fs,args.slice(0,args.length-1)),callback=args[args.length-1];if(typeof callback===\"function\")queueMicrotask(()=>callback(null,result))}catch(e){const callback=args[args.length-1];if(typeof callback===\"function\")queueMicrotask(()=>callback(e))}}var readStreamPathFastPathSymbol=Symbol.for(\"Bun.Node.readStreamPathFastPath\");const readStreamSymbol=Symbol.for(\"Bun.NodeReadStream\"),readStreamPathOrFdSymbol=Symbol.for(\"Bun.NodeReadStreamPathOrFd\"),writeStreamSymbol=Symbol.for(\"Bun.NodeWriteStream\");var writeStreamPathFastPathSymbol=Symbol.for(\"Bun.NodeWriteStreamFastPath\"),writeStreamPathFastPathCallSymbol=Symbol.for(\"Bun.NodeWriteStreamFastPathCall\"),kIoDone=Symbol.for(\"kIoDone\"),defaultReadStreamOptions={file:void 0,fd:void 0,flags:\"r\",encoding:void 0,mode:438,autoClose:!0,emitClose:!0,start:0,end:Infinity,highWaterMark:65536,fs:{read,open:(path,flags,mode,cb)=>{var fd;try{fd=openSync(path,flags,mode)}catch(e){cb(e);return}cb(null,fd)},openSync,close},autoDestroy:!0},ReadStreamClass;ReadStream=function(InternalReadStream){ReadStreamClass=InternalReadStream,Object.defineProperty(ReadStreamClass.prototype,Symbol.toStringTag,{value:\"ReadStream\",enumerable:!1});function ReadStream2(path,options){return new InternalReadStream(path,options)}return ReadStream2.prototype=InternalReadStream.prototype,Object.defineProperty(ReadStream2,Symbol.hasInstance,{value(instance){return instance instanceof InternalReadStream}})}(class ReadStream2 extends Stream._getNativeReadableStreamPrototype(2,Stream.Readable){constructor(pathOrFd,options=defaultReadStreamOptions){if(typeof options!==\"object\"||!options)@throwTypeError(\"Expected options to be an object\");var{flags=defaultReadStreamOptions.flags,encoding=defaultReadStreamOptions.encoding,mode=defaultReadStreamOptions.mode,autoClose=defaultReadStreamOptions.autoClose,emitClose=defaultReadStreamOptions.emitClose,start=defaultReadStreamOptions.start,end=defaultReadStreamOptions.end,autoDestroy=defaultReadStreamOptions.autoClose,fs:fs2=defaultReadStreamOptions.fs,highWaterMark=defaultReadStreamOptions.highWaterMark}=options;if(pathOrFd\?.constructor\?.name===\"URL\")pathOrFd=Bun.fileURLToPath(pathOrFd);var tempThis={};if(typeof pathOrFd===\"string\"){if(pathOrFd.startsWith(\"file://\"))pathOrFd=Bun.fileURLToPath(pathOrFd);if(pathOrFd.length===0)@throwTypeError(\"Expected path to be a non-empty string\");tempThis.path=tempThis.file=tempThis[readStreamPathOrFdSymbol]=pathOrFd}else if(typeof pathOrFd===\"number\"){if(pathOrFd|=0,pathOrFd<0)@throwTypeError(\"Expected fd to be a positive integer\");tempThis.fd=tempThis[readStreamPathOrFdSymbol]=pathOrFd,tempThis.autoClose=!1}else @throwTypeError(\"Expected a path or file descriptor\");if(!tempThis.fd)tempThis.fd=fs2.openSync(pathOrFd,flags,mode);var fileRef=Bun.file(tempThis.fd),stream=fileRef.stream(),native=@direct(stream);if(!native)throw new Error(\"no native readable stream\");var{stream:ptr}=native;super(ptr,{...options,encoding,autoDestroy,autoClose,emitClose,highWaterMark});if(Object.assign(this,tempThis),this.#fileRef=fileRef,this.end=end,this._read=this.#internalRead,this.start=start,this.flags=flags,this.mode=mode,this.emitClose=emitClose,this[readStreamPathFastPathSymbol]=start===0&&end===Infinity&&autoClose&&fs2===defaultReadStreamOptions.fs&&(encoding===\"buffer\"||encoding===\"binary\"||encoding==null||encoding===\"utf-8\"||encoding===\"utf8\"),this._readableState.autoClose=autoDestroy=autoClose,this._readableState.highWaterMark=highWaterMark,start!==void 0)this.pos=start}#fileRef;#fs;file;path;fd=null;flags;mode;start;end;pos;bytesRead=0;#fileSize=-1;_read;[readStreamSymbol]=!0;[readStreamPathOrFdSymbol];[readStreamPathFastPathSymbol];_construct(callback){if(super._construct)super._construct(callback);else callback();this.emit(\"open\",this.fd),this.emit(\"ready\")}_destroy(err,cb){super._destroy(err,cb);try{var fd=this.fd;if(this[readStreamPathFastPathSymbol]=!1,!fd)cb(err);else this.#fs.close(fd,(er)=>{cb(er||err)}),this.fd=null}catch(e){throw e}}close(cb){if(typeof cb===\"function\")eos_()(this,cb);this.destroy()}push(chunk){var bytesRead=chunk\?.length\?\?0;if(bytesRead>0){this.bytesRead+=bytesRead;var currPos=this.pos;if(currPos!==void 0){if(this.bytesRead<currPos)return!0;if(currPos===this.start){var n=this.bytesRead-currPos;chunk=chunk.slice(-n);var[_,...rest]=arguments;if(this.pos=this.bytesRead,this.end!==void 0&&this.bytesRead>this.end)chunk=chunk.slice(0,this.end-this.start+1);return super.push(chunk,...rest)}var end=this.end;if(end!==void 0&&this.bytesRead>end){chunk=chunk.slice(0,end-currPos+1);var[_,...rest]=arguments;return this.pos=this.bytesRead,super.push(chunk,...rest)}this.pos=this.bytesRead}}return super.push(...arguments)}#internalRead(n){var{pos,end,bytesRead,fd,encoding}=this;if(n=pos!==void 0\?Math.min(end-pos+1,n):Math.min(end-bytesRead+1,n),n<=0){this.push(null);return}if(this.#fileSize===-1&&bytesRead===0&&pos===void 0){var stat2=fstatSync(fd);if(this.#fileSize=stat2.size,this.#fileSize>0&&n>this.#fileSize)n=this.#fileSize+1}this[kIoDone]=!1;var res=super._read(n);if(@isPromise(res)){var then=res\?.then;if(then&&@isCallable(then))then(()=>{if(this[kIoDone]=!0,this.destroyed)this.emit(kIoDone)},(er)=>{this[kIoDone]=!0,this.#errorOrDestroy(er)})}else if(this[kIoDone]=!0,this.destroyed)this.emit(kIoDone),this.#errorOrDestroy(new Error(\"ERR_STREAM_PREMATURE_CLOSE\"))}#errorOrDestroy(err,sync=null){var{_readableState:r={destroyed:!1,autoDestroy:!1},_writableState:w={destroyed:!1,autoDestroy:!1}}=this;if(w\?.destroyed||r\?.destroyed)return this;if(r\?.autoDestroy||w\?.autoDestroy)this.destroy(err);else if(err)this.emit(\"error\",err)}pause(){return this[readStreamPathFastPathSymbol]=!1,super.pause()}resume(){return this[readStreamPathFastPathSymbol]=!1,super.resume()}unshift(...args){return this[readStreamPathFastPathSymbol]=!1,super.unshift(...args)}pipe(dest,pipeOpts){if(this[readStreamPathFastPathSymbol]&&(pipeOpts\?.end\?\?!0)&&this._readableState\?.pipes\?.length===0){if((writeStreamPathFastPathSymbol in dest)&&dest[writeStreamPathFastPathSymbol]){if(dest[writeStreamPathFastPathCallSymbol](this,pipeOpts))return this}}return this[readStreamPathFastPathSymbol]=!1,super.pipe(dest,pipeOpts)}});function createReadStream(path,options){return new ReadStream(path,options)}var defaultWriteStreamOptions={fd:null,start:void 0,pos:void 0,encoding:void 0,flags:\"w\",mode:438,fs:{write,close,open,openSync}},WriteStreamClass;WriteStream=function(InternalWriteStream){WriteStreamClass=InternalWriteStream,Object.defineProperty(WriteStreamClass.prototype,Symbol.toStringTag,{value:\"WritesStream\",enumerable:!1});function WriteStream2(path,options){return new InternalWriteStream(path,options)}return WriteStream2.prototype=InternalWriteStream.prototype,Object.defineProperty(WriteStream2,Symbol.hasInstance,{value(instance){return instance instanceof InternalWriteStream}})}(class WriteStream2 extends Stream.NativeWritable{constructor(path,options=defaultWriteStreamOptions){if(!options)@throwTypeError(\"Expected options to be an object\");var{fs:fs2=defaultWriteStreamOptions.fs,start=defaultWriteStreamOptions.start,flags=defaultWriteStreamOptions.flags,mode=defaultWriteStreamOptions.mode,autoClose=!0,emitClose=!1,autoDestroy=autoClose,encoding=defaultWriteStreamOptions.encoding,fd=defaultWriteStreamOptions.fd,pos=defaultWriteStreamOptions.pos}=options,tempThis={};if(typeof path===\"string\"){if(path.length===0)@throwTypeError(\"Expected a non-empty path\");if(path.startsWith(\"file:\"))path=Bun.fileURLToPath(path);tempThis.path=path,tempThis.fd=null,tempThis[writeStreamPathFastPathSymbol]=autoClose&&(start===void 0||start===0)&&fs2.write===defaultWriteStreamOptions.fs.write&&fs2.close===defaultWriteStreamOptions.fs.close}else tempThis.fd=fd,tempThis[writeStreamPathFastPathSymbol]=!1;if(!tempThis.fd)tempThis.fd=fs2.openSync(path,flags,mode);super(tempThis.fd,{...options,decodeStrings:!1,autoDestroy,emitClose,fd:tempThis});if(Object.assign(this,tempThis),typeof fs2\?.write!==\"function\")@throwTypeError(\"Expected fs.write to be a function\");if(typeof fs2\?.close!==\"function\")@throwTypeError(\"Expected fs.close to be a function\");if(typeof fs2\?.open!==\"function\")@throwTypeError(\"Expected fs.open to be a function\");if(typeof path===\"object\"&&path){if(path instanceof URL)path=Bun.fileURLToPath(path)}if(typeof path!==\"string\"&&typeof fd!==\"number\")@throwTypeError(\"Expected a path or file descriptor\");if(this.start=start,this.#fs=fs2,this.flags=flags,this.mode=mode,this.start!==void 0)this.pos=this.start;if(encoding!==defaultWriteStreamOptions.encoding){if(this.setDefaultEncoding(encoding),encoding!==\"buffer\"&&encoding!==\"utf8\"&&encoding!==\"utf-8\"&&encoding!==\"binary\")this[writeStreamPathFastPathSymbol]=!1}}get autoClose(){return this._writableState.autoDestroy}set autoClose(val){this._writableState.autoDestroy=val}destroySoon=this.end;open(){}path;fd;flags;mode;#fs;bytesWritten=0;pos;[writeStreamPathFastPathSymbol];[writeStreamSymbol]=!0;start;[writeStreamPathFastPathCallSymbol](readStream,pipeOpts){if(!this[writeStreamPathFastPathSymbol])return!1;if(this.fd!==null)return this[writeStreamPathFastPathSymbol]=!1,!1;return this[kIoDone]=!1,readStream[kIoDone]=!1,Bun.write(this[writeStreamPathFastPathSymbol],readStream[readStreamPathOrFdSymbol]).then((bytesWritten)=>{readStream[kIoDone]=this[kIoDone]=!0,this.bytesWritten+=bytesWritten,readStream.bytesRead+=bytesWritten,this.end(),readStream.close()},(err)=>{readStream[kIoDone]=this[kIoDone]=!0,this.#errorOrDestroy(err),readStream.emit(\"error\",err)})}isBunFastPathEnabled(){return this[writeStreamPathFastPathSymbol]}disableBunFastPath(){this[writeStreamPathFastPathSymbol]=!1}#handleWrite(er,bytes){if(er)return this.#errorOrDestroy(er);this.bytesWritten+=bytes}#internalClose(err,cb){this[writeStreamPathFastPathSymbol]=!1;var fd=this.fd;this.#fs.close(fd,(er)=>{this.fd=null,cb(err||er)})}_construct(callback){if(typeof this.fd===\"number\"){callback();return}callback(),this.emit(\"open\",this.fd),this.emit(\"ready\")}_destroy(err,cb){if(this.fd===null)return cb(err);if(this[kIoDone]){this.once(kIoDone,()=>this.#internalClose(err,cb));return}this.#internalClose(err,cb)}[kIoDone]=!1;close(cb){if(cb){if(this.closed){process.nextTick(cb);return}this.on(\"close\",cb)}if(!this.autoClose)this.on(\"finish\",this.destroy);this.end()}write(chunk,encoding=this._writableState.defaultEncoding,cb){if(this[writeStreamPathFastPathSymbol]=!1,typeof chunk===\"string\")chunk=Buffer.from(chunk,encoding);var native=this.pos===void 0;return this[kIoDone]=!0,super.write(chunk,encoding,native\?(err,bytes)=>{if(this[kIoDone]=!1,this.#handleWrite(err,bytes),this.emit(kIoDone),cb)!err\?cb():cb(err)}:()=>{},native)}#internalWriteSlow(chunk,encoding,cb){this.#fs.write(this.fd,chunk,0,chunk.length,this.pos,(err,bytes)=>{this[kIoDone]=!1,this.#handleWrite(err,bytes),this.emit(kIoDone),!err\?cb():cb(err)})}end(chunk,encoding,cb){var native=this.pos===void 0;return super.end(chunk,encoding,cb,native)}_write=this.#internalWriteSlow;_writev=void 0;get pending(){return this.fd===null}_destroy(err,cb){this.close(err,cb)}#errorOrDestroy(err){var{_readableState:r={destroyed:!1,autoDestroy:!1},_writableState:w={destroyed:!1,autoDestroy:!1}}=this;if(w\?.destroyed||r\?.destroyed)return this;if(r\?.autoDestroy||w\?.autoDestroy)this.destroy(err);else if(err)this.emit(\"error\",err)}});function createWriteStream(path,options){return new WriteStream(path,options)}return Object.defineProperties(fs,{createReadStream:{value:createReadStream},createWriteStream:{value:createWriteStream},ReadStream:{value:ReadStream},WriteStream:{value:WriteStream}}),realpath.native=realpath,realpathSync.native=realpathSync,$={access,accessSync,appendFile,appendFileSync,chmod,chmodSync,chown,chownSync,close,closeSync,constants:promises.constants,copyFile,copyFileSync,createReadStream,createWriteStream,Dirent,exists,existsSync,fchmod,fchmodSync,fchown,fchownSync,fstat,fstatSync,fsync,fsyncSync,ftruncate,ftruncateSync,futimes,futimesSync,lchmod,lchmodSync,lchown,lchownSync,link,linkSync,lstat,lstatSync,lutimes,lutimesSync,mkdir,mkdirSync,mkdtemp,mkdtempSync,open,openSync,promises,read,readFile,readFileSync,readSync,readdir,readdirSync,readlink,readlinkSync,realpath,realpathSync,rename,renameSync,rm,rmSync,rmdir,rmdirSync,stat,statSync,Stats,symlink,symlinkSync,truncate,truncateSync,unlink,unlinkSync,utimes,utimesSync,write,writeFile,writeFileSync,writeSync,WriteStream,ReadStream,watch,FSWatcher,writev,writevSync,readv,readvSync,[Symbol.for(\"::bunternal::\")]:{ReadStreamClass,WriteStreamClass}},$})\n"_s; +static constexpr ASCIILiteral NodeFSCode = "(function (){\"use strict\";var $,ReadStream,WriteStream;const EventEmitter=@getInternalField(@internalModuleRegistry,15)||@createInternalModuleById(15),promises=@getInternalField(@internalModuleRegistry,17)||@createInternalModuleById(17),Stream=@getInternalField(@internalModuleRegistry,34)||@createInternalModuleById(34);var fs=Bun.fs();class FSWatcher extends EventEmitter{#watcher;#listener;constructor(path,options,listener){super();if(typeof options===\"function\")listener=options,options={};else if(typeof options===\"string\")options={encoding:options};if(typeof listener!==\"function\")listener=()=>{};this.#listener=listener;try{this.#watcher=fs.watch(path,options||{},this.#onEvent.bind(this))}catch(e){if(!e.message\?.startsWith(\"FileNotFound\"))throw e;const notFound=new Error(`ENOENT: no such file or directory, watch '${path}'`);throw notFound.code=\"ENOENT\",notFound.errno=-2,notFound.path=path,notFound.syscall=\"watch\",notFound.filename=path,notFound}}#onEvent(eventType,filenameOrError){if(eventType===\"error\"||eventType===\"close\")this.emit(eventType,filenameOrError);else this.emit(\"change\",eventType,filenameOrError),this.#listener(eventType,filenameOrError)}close(){this.#watcher\?.close(),this.#watcher=null}ref(){this.#watcher\?.ref()}unref(){this.#watcher\?.unref()}}var access=function access(...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)},rmdir=function rmdir(...args){callbackify(fs.rmdirSync,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)},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){const callback=args[args.length-1];if(typeof callback!==\"function\")@throwTypeError(\"Callback must be a function\");fs.readdir(...args).then((result)=>callback(null,result),callback)},readFile=function readFile(...args){const callback=args[args.length-1];if(typeof callback!==\"function\")@throwTypeError(\"Callback must be a function\");fs.readFile(...args).then((result)=>callback(null,result),callback)},writeFile=function writeFile(...args){callbackify(fs.writeFileSync,args)},readlink=function readlink(...args){callbackify(fs.readlinkSync,args)},realpath=function realpath(...args){const callback=args[args.length-1];if(typeof callback!==\"function\")@throwTypeError(\"Callback must be a function\");fs.realpath(...args).then((result)=>callback(null,result),callback)},rename=function rename(...args){callbackify(fs.renameSync,args)},lstat=function lstat(...args){const callback=args[args.length-1];if(typeof callback!==\"function\")@throwTypeError(\"Callback must be a function\");fs.lstat(...args).then((result)=>callback(null,result),callback)},stat=function stat(...args){const callback=args[args.length-1];if(typeof callback!==\"function\")@throwTypeError(\"Callback must be a function\");fs.stat(...args).then((result)=>callback(null,result),callback)},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),rmdirSync=fs.rmdirSync.bind(fs),writev=(fd,buffers,position,callback)=>{if(typeof position===\"function\")callback=position,position=null;queueMicrotask(()=>{try{var written=fs.writevSync(fd,buffers,position)}catch(e){callback(e)}callback(null,written,buffers)})},writevSync=fs.writevSync.bind(fs),readv=(fd,buffers,position,callback)=>{if(typeof position===\"function\")callback=position,position=null;queueMicrotask(()=>{try{var written=fs.readvSync(fd,buffers,position)}catch(e){callback(e)}callback(null,written,buffers)})},readvSync=fs.readvSync.bind(fs),Dirent=fs.Dirent,Stats=fs.Stats,watch=function watch(path,options,listener){return new FSWatcher(path,options,listener)};function callbackify(fsFunction,args){try{const result=fsFunction.apply(fs,args.slice(0,args.length-1)),callback=args[args.length-1];if(typeof callback===\"function\")queueMicrotask(()=>callback(null,result))}catch(e){const callback=args[args.length-1];if(typeof callback===\"function\")queueMicrotask(()=>callback(e))}}var readStreamPathFastPathSymbol=Symbol.for(\"Bun.Node.readStreamPathFastPath\");const readStreamSymbol=Symbol.for(\"Bun.NodeReadStream\"),readStreamPathOrFdSymbol=Symbol.for(\"Bun.NodeReadStreamPathOrFd\"),writeStreamSymbol=Symbol.for(\"Bun.NodeWriteStream\");var writeStreamPathFastPathSymbol=Symbol.for(\"Bun.NodeWriteStreamFastPath\"),writeStreamPathFastPathCallSymbol=Symbol.for(\"Bun.NodeWriteStreamFastPathCall\"),kIoDone=Symbol.for(\"kIoDone\"),defaultReadStreamOptions={file:void 0,fd:void 0,flags:\"r\",encoding:void 0,mode:438,autoClose:!0,emitClose:!0,start:0,end:Infinity,highWaterMark:65536,fs:{read,open:(path,flags,mode,cb)=>{var fd;try{fd=openSync(path,flags,mode)}catch(e){cb(e);return}cb(null,fd)},openSync,close},autoDestroy:!0},ReadStreamClass;ReadStream=function(InternalReadStream){ReadStreamClass=InternalReadStream,Object.defineProperty(ReadStreamClass.prototype,Symbol.toStringTag,{value:\"ReadStream\",enumerable:!1});function ReadStream2(path,options){return new InternalReadStream(path,options)}return ReadStream2.prototype=InternalReadStream.prototype,Object.defineProperty(ReadStream2,Symbol.hasInstance,{value(instance){return instance instanceof InternalReadStream}})}(class ReadStream2 extends Stream._getNativeReadableStreamPrototype(2,Stream.Readable){constructor(pathOrFd,options=defaultReadStreamOptions){if(typeof options!==\"object\"||!options)@throwTypeError(\"Expected options to be an object\");var{flags=defaultReadStreamOptions.flags,encoding=defaultReadStreamOptions.encoding,mode=defaultReadStreamOptions.mode,autoClose=defaultReadStreamOptions.autoClose,emitClose=defaultReadStreamOptions.emitClose,start=defaultReadStreamOptions.start,end=defaultReadStreamOptions.end,autoDestroy=defaultReadStreamOptions.autoClose,fs:fs2=defaultReadStreamOptions.fs,highWaterMark=defaultReadStreamOptions.highWaterMark}=options;if(pathOrFd\?.constructor\?.name===\"URL\")pathOrFd=Bun.fileURLToPath(pathOrFd);var tempThis={};if(typeof pathOrFd===\"string\"){if(pathOrFd.startsWith(\"file://\"))pathOrFd=Bun.fileURLToPath(pathOrFd);if(pathOrFd.length===0)@throwTypeError(\"Expected path to be a non-empty string\");tempThis.path=tempThis.file=tempThis[readStreamPathOrFdSymbol]=pathOrFd}else if(typeof pathOrFd===\"number\"){if(pathOrFd|=0,pathOrFd<0)@throwTypeError(\"Expected fd to be a positive integer\");tempThis.fd=tempThis[readStreamPathOrFdSymbol]=pathOrFd,tempThis.autoClose=!1}else @throwTypeError(\"Expected a path or file descriptor\");if(!tempThis.fd)tempThis.fd=fs2.openSync(pathOrFd,flags,mode);var fileRef=Bun.file(tempThis.fd),stream=fileRef.stream(),native=@direct(stream);if(!native)throw new Error(\"no native readable stream\");var{stream:ptr}=native;super(ptr,{...options,encoding,autoDestroy,autoClose,emitClose,highWaterMark});if(Object.assign(this,tempThis),this.#fileRef=fileRef,this.end=end,this._read=this.#internalRead,this.start=start,this.flags=flags,this.mode=mode,this.emitClose=emitClose,this[readStreamPathFastPathSymbol]=start===0&&end===Infinity&&autoClose&&fs2===defaultReadStreamOptions.fs&&(encoding===\"buffer\"||encoding===\"binary\"||encoding==null||encoding===\"utf-8\"||encoding===\"utf8\"),this._readableState.autoClose=autoDestroy=autoClose,this._readableState.highWaterMark=highWaterMark,start!==void 0)this.pos=start}#fileRef;#fs;file;path;fd=null;flags;mode;start;end;pos;bytesRead=0;#fileSize=-1;_read;[readStreamSymbol]=!0;[readStreamPathOrFdSymbol];[readStreamPathFastPathSymbol];_construct(callback){if(super._construct)super._construct(callback);else callback();this.emit(\"open\",this.fd),this.emit(\"ready\")}_destroy(err,cb){super._destroy(err,cb);try{var fd=this.fd;if(this[readStreamPathFastPathSymbol]=!1,!fd)cb(err);else this.#fs.close(fd,(er)=>{cb(er||err)}),this.fd=null}catch(e){throw e}}close(cb){if(typeof cb===\"function\")eos_()(this,cb);this.destroy()}push(chunk){var bytesRead=chunk\?.length\?\?0;if(bytesRead>0){this.bytesRead+=bytesRead;var currPos=this.pos;if(currPos!==void 0){if(this.bytesRead<currPos)return!0;if(currPos===this.start){var n=this.bytesRead-currPos;chunk=chunk.slice(-n);var[_,...rest]=arguments;if(this.pos=this.bytesRead,this.end!==void 0&&this.bytesRead>this.end)chunk=chunk.slice(0,this.end-this.start+1);return super.push(chunk,...rest)}var end=this.end;if(end!==void 0&&this.bytesRead>end){chunk=chunk.slice(0,end-currPos+1);var[_,...rest]=arguments;return this.pos=this.bytesRead,super.push(chunk,...rest)}this.pos=this.bytesRead}}return super.push(...arguments)}#internalRead(n){var{pos,end,bytesRead,fd,encoding}=this;if(n=pos!==void 0\?Math.min(end-pos+1,n):Math.min(end-bytesRead+1,n),n<=0){this.push(null);return}if(this.#fileSize===-1&&bytesRead===0&&pos===void 0){var stat2=fstatSync(fd);if(this.#fileSize=stat2.size,this.#fileSize>0&&n>this.#fileSize)n=this.#fileSize+1}this[kIoDone]=!1;var res=super._read(n);if(@isPromise(res)){var then=res\?.then;if(then&&@isCallable(then))then(()=>{if(this[kIoDone]=!0,this.destroyed)this.emit(kIoDone)},(er)=>{this[kIoDone]=!0,this.#errorOrDestroy(er)})}else if(this[kIoDone]=!0,this.destroyed)this.emit(kIoDone),this.#errorOrDestroy(new Error(\"ERR_STREAM_PREMATURE_CLOSE\"))}#errorOrDestroy(err,sync=null){var{_readableState:r={destroyed:!1,autoDestroy:!1},_writableState:w={destroyed:!1,autoDestroy:!1}}=this;if(w\?.destroyed||r\?.destroyed)return this;if(r\?.autoDestroy||w\?.autoDestroy)this.destroy(err);else if(err)this.emit(\"error\",err)}pause(){return this[readStreamPathFastPathSymbol]=!1,super.pause()}resume(){return this[readStreamPathFastPathSymbol]=!1,super.resume()}unshift(...args){return this[readStreamPathFastPathSymbol]=!1,super.unshift(...args)}pipe(dest,pipeOpts){if(this[readStreamPathFastPathSymbol]&&(pipeOpts\?.end\?\?!0)&&this._readableState\?.pipes\?.length===0){if((writeStreamPathFastPathSymbol in dest)&&dest[writeStreamPathFastPathSymbol]){if(dest[writeStreamPathFastPathCallSymbol](this,pipeOpts))return this}}return this[readStreamPathFastPathSymbol]=!1,super.pipe(dest,pipeOpts)}});function createReadStream(path,options){return new ReadStream(path,options)}var defaultWriteStreamOptions={fd:null,start:void 0,pos:void 0,encoding:void 0,flags:\"w\",mode:438,fs:{write,close,open,openSync}},WriteStreamClass;WriteStream=function(InternalWriteStream){WriteStreamClass=InternalWriteStream,Object.defineProperty(WriteStreamClass.prototype,Symbol.toStringTag,{value:\"WritesStream\",enumerable:!1});function WriteStream2(path,options){return new InternalWriteStream(path,options)}return WriteStream2.prototype=InternalWriteStream.prototype,Object.defineProperty(WriteStream2,Symbol.hasInstance,{value(instance){return instance instanceof InternalWriteStream}})}(class WriteStream2 extends Stream.NativeWritable{constructor(path,options=defaultWriteStreamOptions){if(!options)@throwTypeError(\"Expected options to be an object\");var{fs:fs2=defaultWriteStreamOptions.fs,start=defaultWriteStreamOptions.start,flags=defaultWriteStreamOptions.flags,mode=defaultWriteStreamOptions.mode,autoClose=!0,emitClose=!1,autoDestroy=autoClose,encoding=defaultWriteStreamOptions.encoding,fd=defaultWriteStreamOptions.fd,pos=defaultWriteStreamOptions.pos}=options,tempThis={};if(typeof path===\"string\"){if(path.length===0)@throwTypeError(\"Expected a non-empty path\");if(path.startsWith(\"file:\"))path=Bun.fileURLToPath(path);tempThis.path=path,tempThis.fd=null,tempThis[writeStreamPathFastPathSymbol]=autoClose&&(start===void 0||start===0)&&fs2.write===defaultWriteStreamOptions.fs.write&&fs2.close===defaultWriteStreamOptions.fs.close}else tempThis.fd=fd,tempThis[writeStreamPathFastPathSymbol]=!1;if(!tempThis.fd)tempThis.fd=fs2.openSync(path,flags,mode);super(tempThis.fd,{...options,decodeStrings:!1,autoDestroy,emitClose,fd:tempThis});if(Object.assign(this,tempThis),typeof fs2\?.write!==\"function\")@throwTypeError(\"Expected fs.write to be a function\");if(typeof fs2\?.close!==\"function\")@throwTypeError(\"Expected fs.close to be a function\");if(typeof fs2\?.open!==\"function\")@throwTypeError(\"Expected fs.open to be a function\");if(typeof path===\"object\"&&path){if(path instanceof URL)path=Bun.fileURLToPath(path)}if(typeof path!==\"string\"&&typeof fd!==\"number\")@throwTypeError(\"Expected a path or file descriptor\");if(this.start=start,this.#fs=fs2,this.flags=flags,this.mode=mode,this.start!==void 0)this.pos=this.start;if(encoding!==defaultWriteStreamOptions.encoding){if(this.setDefaultEncoding(encoding),encoding!==\"buffer\"&&encoding!==\"utf8\"&&encoding!==\"utf-8\"&&encoding!==\"binary\")this[writeStreamPathFastPathSymbol]=!1}}get autoClose(){return this._writableState.autoDestroy}set autoClose(val){this._writableState.autoDestroy=val}destroySoon=this.end;open(){}path;fd;flags;mode;#fs;bytesWritten=0;pos;[writeStreamPathFastPathSymbol];[writeStreamSymbol]=!0;start;[writeStreamPathFastPathCallSymbol](readStream,pipeOpts){if(!this[writeStreamPathFastPathSymbol])return!1;if(this.fd!==null)return this[writeStreamPathFastPathSymbol]=!1,!1;return this[kIoDone]=!1,readStream[kIoDone]=!1,Bun.write(this[writeStreamPathFastPathSymbol],readStream[readStreamPathOrFdSymbol]).then((bytesWritten)=>{readStream[kIoDone]=this[kIoDone]=!0,this.bytesWritten+=bytesWritten,readStream.bytesRead+=bytesWritten,this.end(),readStream.close()},(err)=>{readStream[kIoDone]=this[kIoDone]=!0,this.#errorOrDestroy(err),readStream.emit(\"error\",err)})}isBunFastPathEnabled(){return this[writeStreamPathFastPathSymbol]}disableBunFastPath(){this[writeStreamPathFastPathSymbol]=!1}#handleWrite(er,bytes){if(er)return this.#errorOrDestroy(er);this.bytesWritten+=bytes}#internalClose(err,cb){this[writeStreamPathFastPathSymbol]=!1;var fd=this.fd;this.#fs.close(fd,(er)=>{this.fd=null,cb(err||er)})}_construct(callback){if(typeof this.fd===\"number\"){callback();return}callback(),this.emit(\"open\",this.fd),this.emit(\"ready\")}_destroy(err,cb){if(this.fd===null)return cb(err);if(this[kIoDone]){this.once(kIoDone,()=>this.#internalClose(err,cb));return}this.#internalClose(err,cb)}[kIoDone]=!1;close(cb){if(cb){if(this.closed){process.nextTick(cb);return}this.on(\"close\",cb)}if(!this.autoClose)this.on(\"finish\",this.destroy);this.end()}write(chunk,encoding=this._writableState.defaultEncoding,cb){if(this[writeStreamPathFastPathSymbol]=!1,typeof chunk===\"string\")chunk=Buffer.from(chunk,encoding);var native=this.pos===void 0;return this[kIoDone]=!0,super.write(chunk,encoding,native\?(err,bytes)=>{if(this[kIoDone]=!1,this.#handleWrite(err,bytes),this.emit(kIoDone),cb)!err\?cb():cb(err)}:()=>{},native)}#internalWriteSlow(chunk,encoding,cb){this.#fs.write(this.fd,chunk,0,chunk.length,this.pos,(err,bytes)=>{this[kIoDone]=!1,this.#handleWrite(err,bytes),this.emit(kIoDone),!err\?cb():cb(err)})}end(chunk,encoding,cb){var native=this.pos===void 0;return super.end(chunk,encoding,cb,native)}_write=this.#internalWriteSlow;_writev=void 0;get pending(){return this.fd===null}_destroy(err,cb){this.close(err,cb)}#errorOrDestroy(err){var{_readableState:r={destroyed:!1,autoDestroy:!1},_writableState:w={destroyed:!1,autoDestroy:!1}}=this;if(w\?.destroyed||r\?.destroyed)return this;if(r\?.autoDestroy||w\?.autoDestroy)this.destroy(err);else if(err)this.emit(\"error\",err)}});function createWriteStream(path,options){return new WriteStream(path,options)}return Object.defineProperties(fs,{createReadStream:{value:createReadStream},createWriteStream:{value:createWriteStream},ReadStream:{value:ReadStream},WriteStream:{value:WriteStream}}),realpath.native=realpath,realpathSync.native=realpathSync,$={access,accessSync,appendFile,appendFileSync,chmod,chmodSync,chown,chownSync,close,closeSync,constants:promises.constants,copyFile,copyFileSync,createReadStream,createWriteStream,Dirent,exists,existsSync,fchmod,fchmodSync,fchown,fchownSync,fstat,fstatSync,fsync,fsyncSync,ftruncate,ftruncateSync,futimes,futimesSync,lchmod,lchmodSync,lchown,lchownSync,link,linkSync,lstat,lstatSync,lutimes,lutimesSync,mkdir,mkdirSync,mkdtemp,mkdtempSync,open,openSync,promises,read,readFile,readFileSync,readSync,readdir,readdirSync,readlink,readlinkSync,realpath,realpathSync,rename,renameSync,rm,rmSync,rmdir,rmdirSync,stat,statSync,Stats,symlink,symlinkSync,truncate,truncateSync,unlink,unlinkSync,utimes,utimesSync,write,writeFile,writeFileSync,writeSync,WriteStream,ReadStream,watch,FSWatcher,writev,writevSync,readv,readvSync,[Symbol.for(\"::bunternal::\")]:{ReadStreamClass,WriteStreamClass}},$})\n"_s; // // -static constexpr ASCIILiteral NodeFSPromisesCode = "(function (){\"use strict\";var $;const constants=@processBindingConstants.fs;var fs=Bun.fs();const notrace=\"::bunternal::\";var promisify={[notrace]:(fsFunction)=>{return async function(...args){return await 1,fsFunction.apply(fs,args)}}}[notrace];function watch(filename,options={}){if(filename instanceof URL)@throwTypeError(\"Watch URLs are not supported yet\");else if(Buffer.isBuffer(filename))filename=filename.toString();else if(typeof filename!==\"string\")@throwTypeError(\"Expected path to be a string or Buffer\");let nextEventResolve=null;if(typeof options===\"string\")options={encoding:options};const queue=@createFIFO(),watcher=fs.watch(filename,options||{},(eventType,filename2)=>{if(queue.push({eventType,filename:filename2}),nextEventResolve){const resolve=nextEventResolve;nextEventResolve=null,resolve()}});return{[Symbol.asyncIterator](){let closed=!1;return{async next(){while(!closed){let event;while(event=queue.shift()){if(event.eventType===\"close\")return closed=!0,{value:void 0,done:!0};if(event.eventType===\"error\")throw closed=!0,event.filename;return{value:event,done:!1}}const{promise,resolve}=Promise.withResolvers();nextEventResolve=resolve,await promise}return{value:void 0,done:!0}},return(){if(!closed){if(watcher.close(),closed=!0,nextEventResolve){const resolve=nextEventResolve;nextEventResolve=null,resolve()}}return{value:void 0,done:!0}}}}}}return $={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: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:fs.readdir.bind(fs),readFile:fs.readFile.bind(fs),writeFile:promisify(fs.writeFileSync),readlink:promisify(fs.readlinkSync),realpath:promisify(fs.realpathSync),rename:promisify(fs.renameSync),stat:fs.stat.bind(fs),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),writev:(fd,buffers,position)=>{return new Promise((resolve,reject)=>{try{var bytesWritten=fs.writevSync(fd,buffers,position)}catch(err){reject(err);return}resolve({bytesWritten,buffers})})},readv:(fd,buffers,position)=>{return new Promise((resolve,reject)=>{try{var bytesRead=fs.readvSync(fd,buffers,position)}catch(err){reject(err);return}resolve({bytesRead,buffers})})},constants,watch},$})\n"_s; +static constexpr ASCIILiteral NodeFSPromisesCode = "(function (){\"use strict\";var $;const constants=@processBindingConstants.fs;var fs=Bun.fs();const notrace=\"::bunternal::\";var promisify={[notrace]:(fsFunction)=>{return async function(...args){return await 1,fsFunction.apply(fs,args)}}}[notrace];function watch(filename,options={}){if(filename instanceof URL)@throwTypeError(\"Watch URLs are not supported yet\");else if(Buffer.isBuffer(filename))filename=filename.toString();else if(typeof filename!==\"string\")@throwTypeError(\"Expected path to be a string or Buffer\");let nextEventResolve=null;if(typeof options===\"string\")options={encoding:options};const queue=@createFIFO(),watcher=fs.watch(filename,options||{},(eventType,filename2)=>{if(queue.push({eventType,filename:filename2}),nextEventResolve){const resolve=nextEventResolve;nextEventResolve=null,resolve()}});return{[Symbol.asyncIterator](){let closed=!1;return{async next(){while(!closed){let event;while(event=queue.shift()){if(event.eventType===\"close\")return closed=!0,{value:void 0,done:!0};if(event.eventType===\"error\")throw closed=!0,event.filename;return{value:event,done:!1}}const{promise,resolve}=Promise.withResolvers();nextEventResolve=resolve,await promise}return{value:void 0,done:!0}},return(){if(!closed){if(watcher.close(),closed=!0,nextEventResolve){const resolve=nextEventResolve;nextEventResolve=null,resolve()}}return{value:void 0,done:!0}}}}}}return $={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: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:fs.readdir.bind(fs),readFile:fs.readFile.bind(fs),writeFile:promisify(fs.writeFileSync),readlink:promisify(fs.readlinkSync),realpath:fs.realpath.bind(fs),rename:promisify(fs.renameSync),stat:fs.stat.bind(fs),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),writev:(fd,buffers,position)=>{return new Promise((resolve,reject)=>{try{var bytesWritten=fs.writevSync(fd,buffers,position)}catch(err){reject(err);return}resolve({bytesWritten,buffers})})},readv:(fd,buffers,position)=>{return new Promise((resolve,reject)=>{try{var bytesRead=fs.readvSync(fd,buffers,position)}catch(err){reject(err);return}resolve({bytesRead,buffers})})},constants,watch},$})\n"_s; // // @@ -520,11 +520,11 @@ static constexpr ASCIILiteral NodeEventsCode = "(function (){\"use strict\";cons // // -static constexpr ASCIILiteral NodeFSCode = "(function (){\"use strict\";var $,ReadStream,WriteStream;const EventEmitter=@getInternalField(@internalModuleRegistry,15)||@createInternalModuleById(15),promises=@getInternalField(@internalModuleRegistry,17)||@createInternalModuleById(17),Stream=@getInternalField(@internalModuleRegistry,34)||@createInternalModuleById(34);var fs=Bun.fs();class FSWatcher extends EventEmitter{#watcher;#listener;constructor(path,options,listener){super();if(typeof options===\"function\")listener=options,options={};else if(typeof options===\"string\")options={encoding:options};if(typeof listener!==\"function\")listener=()=>{};this.#listener=listener;try{this.#watcher=fs.watch(path,options||{},this.#onEvent.bind(this))}catch(e){if(!e.message\?.startsWith(\"FileNotFound\"))throw e;const notFound=new Error(`ENOENT: no such file or directory, watch '${path}'`);throw notFound.code=\"ENOENT\",notFound.errno=-2,notFound.path=path,notFound.syscall=\"watch\",notFound.filename=path,notFound}}#onEvent(eventType,filenameOrError){if(eventType===\"error\"||eventType===\"close\")this.emit(eventType,filenameOrError);else this.emit(\"change\",eventType,filenameOrError),this.#listener(eventType,filenameOrError)}close(){this.#watcher\?.close(),this.#watcher=null}ref(){this.#watcher\?.ref()}unref(){this.#watcher\?.unref()}}var access=function access(...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)},rmdir=function rmdir(...args){callbackify(fs.rmdirSync,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)},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){const callback=args[args.length-1];if(typeof callback!==\"function\")@throwTypeError(\"Callback must be a function\");fs.readdir(...args).then((result)=>callback(null,result),callback)},readFile=function readFile(...args){const callback=args[args.length-1];if(typeof callback!==\"function\")@throwTypeError(\"Callback must be a function\");fs.readFile(...args).then((result)=>callback(null,result),callback)},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)},lstat=function lstat(...args){const callback=args[args.length-1];if(typeof callback!==\"function\")@throwTypeError(\"Callback must be a function\");fs.lstat(...args).then((result)=>callback(null,result),callback)},stat=function stat(...args){const callback=args[args.length-1];if(typeof callback!==\"function\")@throwTypeError(\"Callback must be a function\");fs.stat(...args).then((result)=>callback(null,result),callback)},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),rmdirSync=fs.rmdirSync.bind(fs),writev=(fd,buffers,position,callback)=>{if(typeof position===\"function\")callback=position,position=null;queueMicrotask(()=>{try{var written=fs.writevSync(fd,buffers,position)}catch(e){callback(e)}callback(null,written,buffers)})},writevSync=fs.writevSync.bind(fs),readv=(fd,buffers,position,callback)=>{if(typeof position===\"function\")callback=position,position=null;queueMicrotask(()=>{try{var written=fs.readvSync(fd,buffers,position)}catch(e){callback(e)}callback(null,written,buffers)})},readvSync=fs.readvSync.bind(fs),Dirent=fs.Dirent,Stats=fs.Stats,watch=function watch(path,options,listener){return new FSWatcher(path,options,listener)};function callbackify(fsFunction,args){try{const result=fsFunction.apply(fs,args.slice(0,args.length-1)),callback=args[args.length-1];if(typeof callback===\"function\")queueMicrotask(()=>callback(null,result))}catch(e){const callback=args[args.length-1];if(typeof callback===\"function\")queueMicrotask(()=>callback(e))}}var readStreamPathFastPathSymbol=Symbol.for(\"Bun.Node.readStreamPathFastPath\");const readStreamSymbol=Symbol.for(\"Bun.NodeReadStream\"),readStreamPathOrFdSymbol=Symbol.for(\"Bun.NodeReadStreamPathOrFd\"),writeStreamSymbol=Symbol.for(\"Bun.NodeWriteStream\");var writeStreamPathFastPathSymbol=Symbol.for(\"Bun.NodeWriteStreamFastPath\"),writeStreamPathFastPathCallSymbol=Symbol.for(\"Bun.NodeWriteStreamFastPathCall\"),kIoDone=Symbol.for(\"kIoDone\"),defaultReadStreamOptions={file:void 0,fd:void 0,flags:\"r\",encoding:void 0,mode:438,autoClose:!0,emitClose:!0,start:0,end:Infinity,highWaterMark:65536,fs:{read,open:(path,flags,mode,cb)=>{var fd;try{fd=openSync(path,flags,mode)}catch(e){cb(e);return}cb(null,fd)},openSync,close},autoDestroy:!0},ReadStreamClass;ReadStream=function(InternalReadStream){ReadStreamClass=InternalReadStream,Object.defineProperty(ReadStreamClass.prototype,Symbol.toStringTag,{value:\"ReadStream\",enumerable:!1});function ReadStream2(path,options){return new InternalReadStream(path,options)}return ReadStream2.prototype=InternalReadStream.prototype,Object.defineProperty(ReadStream2,Symbol.hasInstance,{value(instance){return instance instanceof InternalReadStream}})}(class ReadStream2 extends Stream._getNativeReadableStreamPrototype(2,Stream.Readable){constructor(pathOrFd,options=defaultReadStreamOptions){if(typeof options!==\"object\"||!options)@throwTypeError(\"Expected options to be an object\");var{flags=defaultReadStreamOptions.flags,encoding=defaultReadStreamOptions.encoding,mode=defaultReadStreamOptions.mode,autoClose=defaultReadStreamOptions.autoClose,emitClose=defaultReadStreamOptions.emitClose,start=defaultReadStreamOptions.start,end=defaultReadStreamOptions.end,autoDestroy=defaultReadStreamOptions.autoClose,fs:fs2=defaultReadStreamOptions.fs,highWaterMark=defaultReadStreamOptions.highWaterMark}=options;if(pathOrFd\?.constructor\?.name===\"URL\")pathOrFd=Bun.fileURLToPath(pathOrFd);var tempThis={};if(typeof pathOrFd===\"string\"){if(pathOrFd.startsWith(\"file://\"))pathOrFd=Bun.fileURLToPath(pathOrFd);if(pathOrFd.length===0)@throwTypeError(\"Expected path to be a non-empty string\");tempThis.path=tempThis.file=tempThis[readStreamPathOrFdSymbol]=pathOrFd}else if(typeof pathOrFd===\"number\"){if(pathOrFd|=0,pathOrFd<0)@throwTypeError(\"Expected fd to be a positive integer\");tempThis.fd=tempThis[readStreamPathOrFdSymbol]=pathOrFd,tempThis.autoClose=!1}else @throwTypeError(\"Expected a path or file descriptor\");if(!tempThis.fd)tempThis.fd=fs2.openSync(pathOrFd,flags,mode);var fileRef=Bun.file(tempThis.fd),stream=fileRef.stream(),native=@direct(stream);if(!native)throw new Error(\"no native readable stream\");var{stream:ptr}=native;super(ptr,{...options,encoding,autoDestroy,autoClose,emitClose,highWaterMark});if(Object.assign(this,tempThis),this.#fileRef=fileRef,this.end=end,this._read=this.#internalRead,this.start=start,this.flags=flags,this.mode=mode,this.emitClose=emitClose,this[readStreamPathFastPathSymbol]=start===0&&end===Infinity&&autoClose&&fs2===defaultReadStreamOptions.fs&&(encoding===\"buffer\"||encoding===\"binary\"||encoding==null||encoding===\"utf-8\"||encoding===\"utf8\"),this._readableState.autoClose=autoDestroy=autoClose,this._readableState.highWaterMark=highWaterMark,start!==void 0)this.pos=start}#fileRef;#fs;file;path;fd=null;flags;mode;start;end;pos;bytesRead=0;#fileSize=-1;_read;[readStreamSymbol]=!0;[readStreamPathOrFdSymbol];[readStreamPathFastPathSymbol];_construct(callback){if(super._construct)super._construct(callback);else callback();this.emit(\"open\",this.fd),this.emit(\"ready\")}_destroy(err,cb){super._destroy(err,cb);try{var fd=this.fd;if(this[readStreamPathFastPathSymbol]=!1,!fd)cb(err);else this.#fs.close(fd,(er)=>{cb(er||err)}),this.fd=null}catch(e){throw e}}close(cb){if(typeof cb===\"function\")eos_()(this,cb);this.destroy()}push(chunk){var bytesRead=chunk\?.length\?\?0;if(bytesRead>0){this.bytesRead+=bytesRead;var currPos=this.pos;if(currPos!==void 0){if(this.bytesRead<currPos)return!0;if(currPos===this.start){var n=this.bytesRead-currPos;chunk=chunk.slice(-n);var[_,...rest]=arguments;if(this.pos=this.bytesRead,this.end!==void 0&&this.bytesRead>this.end)chunk=chunk.slice(0,this.end-this.start+1);return super.push(chunk,...rest)}var end=this.end;if(end!==void 0&&this.bytesRead>end){chunk=chunk.slice(0,end-currPos+1);var[_,...rest]=arguments;return this.pos=this.bytesRead,super.push(chunk,...rest)}this.pos=this.bytesRead}}return super.push(...arguments)}#internalRead(n){var{pos,end,bytesRead,fd,encoding}=this;if(n=pos!==void 0\?Math.min(end-pos+1,n):Math.min(end-bytesRead+1,n),n<=0){this.push(null);return}if(this.#fileSize===-1&&bytesRead===0&&pos===void 0){var stat2=fstatSync(fd);if(this.#fileSize=stat2.size,this.#fileSize>0&&n>this.#fileSize)n=this.#fileSize+1}this[kIoDone]=!1;var res=super._read(n);if(@isPromise(res)){var then=res\?.then;if(then&&@isCallable(then))then(()=>{if(this[kIoDone]=!0,this.destroyed)this.emit(kIoDone)},(er)=>{this[kIoDone]=!0,this.#errorOrDestroy(er)})}else if(this[kIoDone]=!0,this.destroyed)this.emit(kIoDone),this.#errorOrDestroy(new Error(\"ERR_STREAM_PREMATURE_CLOSE\"))}#errorOrDestroy(err,sync=null){var{_readableState:r={destroyed:!1,autoDestroy:!1},_writableState:w={destroyed:!1,autoDestroy:!1}}=this;if(w\?.destroyed||r\?.destroyed)return this;if(r\?.autoDestroy||w\?.autoDestroy)this.destroy(err);else if(err)this.emit(\"error\",err)}pause(){return this[readStreamPathFastPathSymbol]=!1,super.pause()}resume(){return this[readStreamPathFastPathSymbol]=!1,super.resume()}unshift(...args){return this[readStreamPathFastPathSymbol]=!1,super.unshift(...args)}pipe(dest,pipeOpts){if(this[readStreamPathFastPathSymbol]&&(pipeOpts\?.end\?\?!0)&&this._readableState\?.pipes\?.length===0){if((writeStreamPathFastPathSymbol in dest)&&dest[writeStreamPathFastPathSymbol]){if(dest[writeStreamPathFastPathCallSymbol](this,pipeOpts))return this}}return this[readStreamPathFastPathSymbol]=!1,super.pipe(dest,pipeOpts)}});function createReadStream(path,options){return new ReadStream(path,options)}var defaultWriteStreamOptions={fd:null,start:void 0,pos:void 0,encoding:void 0,flags:\"w\",mode:438,fs:{write,close,open,openSync}},WriteStreamClass;WriteStream=function(InternalWriteStream){WriteStreamClass=InternalWriteStream,Object.defineProperty(WriteStreamClass.prototype,Symbol.toStringTag,{value:\"WritesStream\",enumerable:!1});function WriteStream2(path,options){return new InternalWriteStream(path,options)}return WriteStream2.prototype=InternalWriteStream.prototype,Object.defineProperty(WriteStream2,Symbol.hasInstance,{value(instance){return instance instanceof InternalWriteStream}})}(class WriteStream2 extends Stream.NativeWritable{constructor(path,options=defaultWriteStreamOptions){if(!options)@throwTypeError(\"Expected options to be an object\");var{fs:fs2=defaultWriteStreamOptions.fs,start=defaultWriteStreamOptions.start,flags=defaultWriteStreamOptions.flags,mode=defaultWriteStreamOptions.mode,autoClose=!0,emitClose=!1,autoDestroy=autoClose,encoding=defaultWriteStreamOptions.encoding,fd=defaultWriteStreamOptions.fd,pos=defaultWriteStreamOptions.pos}=options,tempThis={};if(typeof path===\"string\"){if(path.length===0)@throwTypeError(\"Expected a non-empty path\");if(path.startsWith(\"file:\"))path=Bun.fileURLToPath(path);tempThis.path=path,tempThis.fd=null,tempThis[writeStreamPathFastPathSymbol]=autoClose&&(start===void 0||start===0)&&fs2.write===defaultWriteStreamOptions.fs.write&&fs2.close===defaultWriteStreamOptions.fs.close}else tempThis.fd=fd,tempThis[writeStreamPathFastPathSymbol]=!1;if(!tempThis.fd)tempThis.fd=fs2.openSync(path,flags,mode);super(tempThis.fd,{...options,decodeStrings:!1,autoDestroy,emitClose,fd:tempThis});if(Object.assign(this,tempThis),typeof fs2\?.write!==\"function\")@throwTypeError(\"Expected fs.write to be a function\");if(typeof fs2\?.close!==\"function\")@throwTypeError(\"Expected fs.close to be a function\");if(typeof fs2\?.open!==\"function\")@throwTypeError(\"Expected fs.open to be a function\");if(typeof path===\"object\"&&path){if(path instanceof URL)path=Bun.fileURLToPath(path)}if(typeof path!==\"string\"&&typeof fd!==\"number\")@throwTypeError(\"Expected a path or file descriptor\");if(this.start=start,this.#fs=fs2,this.flags=flags,this.mode=mode,this.start!==void 0)this.pos=this.start;if(encoding!==defaultWriteStreamOptions.encoding){if(this.setDefaultEncoding(encoding),encoding!==\"buffer\"&&encoding!==\"utf8\"&&encoding!==\"utf-8\"&&encoding!==\"binary\")this[writeStreamPathFastPathSymbol]=!1}}get autoClose(){return this._writableState.autoDestroy}set autoClose(val){this._writableState.autoDestroy=val}destroySoon=this.end;open(){}path;fd;flags;mode;#fs;bytesWritten=0;pos;[writeStreamPathFastPathSymbol];[writeStreamSymbol]=!0;start;[writeStreamPathFastPathCallSymbol](readStream,pipeOpts){if(!this[writeStreamPathFastPathSymbol])return!1;if(this.fd!==null)return this[writeStreamPathFastPathSymbol]=!1,!1;return this[kIoDone]=!1,readStream[kIoDone]=!1,Bun.write(this[writeStreamPathFastPathSymbol],readStream[readStreamPathOrFdSymbol]).then((bytesWritten)=>{readStream[kIoDone]=this[kIoDone]=!0,this.bytesWritten+=bytesWritten,readStream.bytesRead+=bytesWritten,this.end(),readStream.close()},(err)=>{readStream[kIoDone]=this[kIoDone]=!0,this.#errorOrDestroy(err),readStream.emit(\"error\",err)})}isBunFastPathEnabled(){return this[writeStreamPathFastPathSymbol]}disableBunFastPath(){this[writeStreamPathFastPathSymbol]=!1}#handleWrite(er,bytes){if(er)return this.#errorOrDestroy(er);this.bytesWritten+=bytes}#internalClose(err,cb){this[writeStreamPathFastPathSymbol]=!1;var fd=this.fd;this.#fs.close(fd,(er)=>{this.fd=null,cb(err||er)})}_construct(callback){if(typeof this.fd===\"number\"){callback();return}callback(),this.emit(\"open\",this.fd),this.emit(\"ready\")}_destroy(err,cb){if(this.fd===null)return cb(err);if(this[kIoDone]){this.once(kIoDone,()=>this.#internalClose(err,cb));return}this.#internalClose(err,cb)}[kIoDone]=!1;close(cb){if(cb){if(this.closed){process.nextTick(cb);return}this.on(\"close\",cb)}if(!this.autoClose)this.on(\"finish\",this.destroy);this.end()}write(chunk,encoding=this._writableState.defaultEncoding,cb){if(this[writeStreamPathFastPathSymbol]=!1,typeof chunk===\"string\")chunk=Buffer.from(chunk,encoding);var native=this.pos===void 0;return this[kIoDone]=!0,super.write(chunk,encoding,native\?(err,bytes)=>{if(this[kIoDone]=!1,this.#handleWrite(err,bytes),this.emit(kIoDone),cb)!err\?cb():cb(err)}:()=>{},native)}#internalWriteSlow(chunk,encoding,cb){this.#fs.write(this.fd,chunk,0,chunk.length,this.pos,(err,bytes)=>{this[kIoDone]=!1,this.#handleWrite(err,bytes),this.emit(kIoDone),!err\?cb():cb(err)})}end(chunk,encoding,cb){var native=this.pos===void 0;return super.end(chunk,encoding,cb,native)}_write=this.#internalWriteSlow;_writev=void 0;get pending(){return this.fd===null}_destroy(err,cb){this.close(err,cb)}#errorOrDestroy(err){var{_readableState:r={destroyed:!1,autoDestroy:!1},_writableState:w={destroyed:!1,autoDestroy:!1}}=this;if(w\?.destroyed||r\?.destroyed)return this;if(r\?.autoDestroy||w\?.autoDestroy)this.destroy(err);else if(err)this.emit(\"error\",err)}});function createWriteStream(path,options){return new WriteStream(path,options)}return Object.defineProperties(fs,{createReadStream:{value:createReadStream},createWriteStream:{value:createWriteStream},ReadStream:{value:ReadStream},WriteStream:{value:WriteStream}}),realpath.native=realpath,realpathSync.native=realpathSync,$={access,accessSync,appendFile,appendFileSync,chmod,chmodSync,chown,chownSync,close,closeSync,constants:promises.constants,copyFile,copyFileSync,createReadStream,createWriteStream,Dirent,exists,existsSync,fchmod,fchmodSync,fchown,fchownSync,fstat,fstatSync,fsync,fsyncSync,ftruncate,ftruncateSync,futimes,futimesSync,lchmod,lchmodSync,lchown,lchownSync,link,linkSync,lstat,lstatSync,lutimes,lutimesSync,mkdir,mkdirSync,mkdtemp,mkdtempSync,open,openSync,promises,read,readFile,readFileSync,readSync,readdir,readdirSync,readlink,readlinkSync,realpath,realpathSync,rename,renameSync,rm,rmSync,rmdir,rmdirSync,stat,statSync,Stats,symlink,symlinkSync,truncate,truncateSync,unlink,unlinkSync,utimes,utimesSync,write,writeFile,writeFileSync,writeSync,WriteStream,ReadStream,watch,FSWatcher,writev,writevSync,readv,readvSync,[Symbol.for(\"::bunternal::\")]:{ReadStreamClass,WriteStreamClass}},$})\n"_s; +static constexpr ASCIILiteral NodeFSCode = "(function (){\"use strict\";var $,ReadStream,WriteStream;const EventEmitter=@getInternalField(@internalModuleRegistry,15)||@createInternalModuleById(15),promises=@getInternalField(@internalModuleRegistry,17)||@createInternalModuleById(17),Stream=@getInternalField(@internalModuleRegistry,34)||@createInternalModuleById(34);var fs=Bun.fs();class FSWatcher extends EventEmitter{#watcher;#listener;constructor(path,options,listener){super();if(typeof options===\"function\")listener=options,options={};else if(typeof options===\"string\")options={encoding:options};if(typeof listener!==\"function\")listener=()=>{};this.#listener=listener;try{this.#watcher=fs.watch(path,options||{},this.#onEvent.bind(this))}catch(e){if(!e.message\?.startsWith(\"FileNotFound\"))throw e;const notFound=new Error(`ENOENT: no such file or directory, watch '${path}'`);throw notFound.code=\"ENOENT\",notFound.errno=-2,notFound.path=path,notFound.syscall=\"watch\",notFound.filename=path,notFound}}#onEvent(eventType,filenameOrError){if(eventType===\"error\"||eventType===\"close\")this.emit(eventType,filenameOrError);else this.emit(\"change\",eventType,filenameOrError),this.#listener(eventType,filenameOrError)}close(){this.#watcher\?.close(),this.#watcher=null}ref(){this.#watcher\?.ref()}unref(){this.#watcher\?.unref()}}var access=function access(...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)},rmdir=function rmdir(...args){callbackify(fs.rmdirSync,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)},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){const callback=args[args.length-1];if(typeof callback!==\"function\")@throwTypeError(\"Callback must be a function\");fs.readdir(...args).then((result)=>callback(null,result),callback)},readFile=function readFile(...args){const callback=args[args.length-1];if(typeof callback!==\"function\")@throwTypeError(\"Callback must be a function\");fs.readFile(...args).then((result)=>callback(null,result),callback)},writeFile=function writeFile(...args){callbackify(fs.writeFileSync,args)},readlink=function readlink(...args){callbackify(fs.readlinkSync,args)},realpath=function realpath(...args){const callback=args[args.length-1];if(typeof callback!==\"function\")@throwTypeError(\"Callback must be a function\");fs.realpath(...args).then((result)=>callback(null,result),callback)},rename=function rename(...args){callbackify(fs.renameSync,args)},lstat=function lstat(...args){const callback=args[args.length-1];if(typeof callback!==\"function\")@throwTypeError(\"Callback must be a function\");fs.lstat(...args).then((result)=>callback(null,result),callback)},stat=function stat(...args){const callback=args[args.length-1];if(typeof callback!==\"function\")@throwTypeError(\"Callback must be a function\");fs.stat(...args).then((result)=>callback(null,result),callback)},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),rmdirSync=fs.rmdirSync.bind(fs),writev=(fd,buffers,position,callback)=>{if(typeof position===\"function\")callback=position,position=null;queueMicrotask(()=>{try{var written=fs.writevSync(fd,buffers,position)}catch(e){callback(e)}callback(null,written,buffers)})},writevSync=fs.writevSync.bind(fs),readv=(fd,buffers,position,callback)=>{if(typeof position===\"function\")callback=position,position=null;queueMicrotask(()=>{try{var written=fs.readvSync(fd,buffers,position)}catch(e){callback(e)}callback(null,written,buffers)})},readvSync=fs.readvSync.bind(fs),Dirent=fs.Dirent,Stats=fs.Stats,watch=function watch(path,options,listener){return new FSWatcher(path,options,listener)};function callbackify(fsFunction,args){try{const result=fsFunction.apply(fs,args.slice(0,args.length-1)),callback=args[args.length-1];if(typeof callback===\"function\")queueMicrotask(()=>callback(null,result))}catch(e){const callback=args[args.length-1];if(typeof callback===\"function\")queueMicrotask(()=>callback(e))}}var readStreamPathFastPathSymbol=Symbol.for(\"Bun.Node.readStreamPathFastPath\");const readStreamSymbol=Symbol.for(\"Bun.NodeReadStream\"),readStreamPathOrFdSymbol=Symbol.for(\"Bun.NodeReadStreamPathOrFd\"),writeStreamSymbol=Symbol.for(\"Bun.NodeWriteStream\");var writeStreamPathFastPathSymbol=Symbol.for(\"Bun.NodeWriteStreamFastPath\"),writeStreamPathFastPathCallSymbol=Symbol.for(\"Bun.NodeWriteStreamFastPathCall\"),kIoDone=Symbol.for(\"kIoDone\"),defaultReadStreamOptions={file:void 0,fd:void 0,flags:\"r\",encoding:void 0,mode:438,autoClose:!0,emitClose:!0,start:0,end:Infinity,highWaterMark:65536,fs:{read,open:(path,flags,mode,cb)=>{var fd;try{fd=openSync(path,flags,mode)}catch(e){cb(e);return}cb(null,fd)},openSync,close},autoDestroy:!0},ReadStreamClass;ReadStream=function(InternalReadStream){ReadStreamClass=InternalReadStream,Object.defineProperty(ReadStreamClass.prototype,Symbol.toStringTag,{value:\"ReadStream\",enumerable:!1});function ReadStream2(path,options){return new InternalReadStream(path,options)}return ReadStream2.prototype=InternalReadStream.prototype,Object.defineProperty(ReadStream2,Symbol.hasInstance,{value(instance){return instance instanceof InternalReadStream}})}(class ReadStream2 extends Stream._getNativeReadableStreamPrototype(2,Stream.Readable){constructor(pathOrFd,options=defaultReadStreamOptions){if(typeof options!==\"object\"||!options)@throwTypeError(\"Expected options to be an object\");var{flags=defaultReadStreamOptions.flags,encoding=defaultReadStreamOptions.encoding,mode=defaultReadStreamOptions.mode,autoClose=defaultReadStreamOptions.autoClose,emitClose=defaultReadStreamOptions.emitClose,start=defaultReadStreamOptions.start,end=defaultReadStreamOptions.end,autoDestroy=defaultReadStreamOptions.autoClose,fs:fs2=defaultReadStreamOptions.fs,highWaterMark=defaultReadStreamOptions.highWaterMark}=options;if(pathOrFd\?.constructor\?.name===\"URL\")pathOrFd=Bun.fileURLToPath(pathOrFd);var tempThis={};if(typeof pathOrFd===\"string\"){if(pathOrFd.startsWith(\"file://\"))pathOrFd=Bun.fileURLToPath(pathOrFd);if(pathOrFd.length===0)@throwTypeError(\"Expected path to be a non-empty string\");tempThis.path=tempThis.file=tempThis[readStreamPathOrFdSymbol]=pathOrFd}else if(typeof pathOrFd===\"number\"){if(pathOrFd|=0,pathOrFd<0)@throwTypeError(\"Expected fd to be a positive integer\");tempThis.fd=tempThis[readStreamPathOrFdSymbol]=pathOrFd,tempThis.autoClose=!1}else @throwTypeError(\"Expected a path or file descriptor\");if(!tempThis.fd)tempThis.fd=fs2.openSync(pathOrFd,flags,mode);var fileRef=Bun.file(tempThis.fd),stream=fileRef.stream(),native=@direct(stream);if(!native)throw new Error(\"no native readable stream\");var{stream:ptr}=native;super(ptr,{...options,encoding,autoDestroy,autoClose,emitClose,highWaterMark});if(Object.assign(this,tempThis),this.#fileRef=fileRef,this.end=end,this._read=this.#internalRead,this.start=start,this.flags=flags,this.mode=mode,this.emitClose=emitClose,this[readStreamPathFastPathSymbol]=start===0&&end===Infinity&&autoClose&&fs2===defaultReadStreamOptions.fs&&(encoding===\"buffer\"||encoding===\"binary\"||encoding==null||encoding===\"utf-8\"||encoding===\"utf8\"),this._readableState.autoClose=autoDestroy=autoClose,this._readableState.highWaterMark=highWaterMark,start!==void 0)this.pos=start}#fileRef;#fs;file;path;fd=null;flags;mode;start;end;pos;bytesRead=0;#fileSize=-1;_read;[readStreamSymbol]=!0;[readStreamPathOrFdSymbol];[readStreamPathFastPathSymbol];_construct(callback){if(super._construct)super._construct(callback);else callback();this.emit(\"open\",this.fd),this.emit(\"ready\")}_destroy(err,cb){super._destroy(err,cb);try{var fd=this.fd;if(this[readStreamPathFastPathSymbol]=!1,!fd)cb(err);else this.#fs.close(fd,(er)=>{cb(er||err)}),this.fd=null}catch(e){throw e}}close(cb){if(typeof cb===\"function\")eos_()(this,cb);this.destroy()}push(chunk){var bytesRead=chunk\?.length\?\?0;if(bytesRead>0){this.bytesRead+=bytesRead;var currPos=this.pos;if(currPos!==void 0){if(this.bytesRead<currPos)return!0;if(currPos===this.start){var n=this.bytesRead-currPos;chunk=chunk.slice(-n);var[_,...rest]=arguments;if(this.pos=this.bytesRead,this.end!==void 0&&this.bytesRead>this.end)chunk=chunk.slice(0,this.end-this.start+1);return super.push(chunk,...rest)}var end=this.end;if(end!==void 0&&this.bytesRead>end){chunk=chunk.slice(0,end-currPos+1);var[_,...rest]=arguments;return this.pos=this.bytesRead,super.push(chunk,...rest)}this.pos=this.bytesRead}}return super.push(...arguments)}#internalRead(n){var{pos,end,bytesRead,fd,encoding}=this;if(n=pos!==void 0\?Math.min(end-pos+1,n):Math.min(end-bytesRead+1,n),n<=0){this.push(null);return}if(this.#fileSize===-1&&bytesRead===0&&pos===void 0){var stat2=fstatSync(fd);if(this.#fileSize=stat2.size,this.#fileSize>0&&n>this.#fileSize)n=this.#fileSize+1}this[kIoDone]=!1;var res=super._read(n);if(@isPromise(res)){var then=res\?.then;if(then&&@isCallable(then))then(()=>{if(this[kIoDone]=!0,this.destroyed)this.emit(kIoDone)},(er)=>{this[kIoDone]=!0,this.#errorOrDestroy(er)})}else if(this[kIoDone]=!0,this.destroyed)this.emit(kIoDone),this.#errorOrDestroy(new Error(\"ERR_STREAM_PREMATURE_CLOSE\"))}#errorOrDestroy(err,sync=null){var{_readableState:r={destroyed:!1,autoDestroy:!1},_writableState:w={destroyed:!1,autoDestroy:!1}}=this;if(w\?.destroyed||r\?.destroyed)return this;if(r\?.autoDestroy||w\?.autoDestroy)this.destroy(err);else if(err)this.emit(\"error\",err)}pause(){return this[readStreamPathFastPathSymbol]=!1,super.pause()}resume(){return this[readStreamPathFastPathSymbol]=!1,super.resume()}unshift(...args){return this[readStreamPathFastPathSymbol]=!1,super.unshift(...args)}pipe(dest,pipeOpts){if(this[readStreamPathFastPathSymbol]&&(pipeOpts\?.end\?\?!0)&&this._readableState\?.pipes\?.length===0){if((writeStreamPathFastPathSymbol in dest)&&dest[writeStreamPathFastPathSymbol]){if(dest[writeStreamPathFastPathCallSymbol](this,pipeOpts))return this}}return this[readStreamPathFastPathSymbol]=!1,super.pipe(dest,pipeOpts)}});function createReadStream(path,options){return new ReadStream(path,options)}var defaultWriteStreamOptions={fd:null,start:void 0,pos:void 0,encoding:void 0,flags:\"w\",mode:438,fs:{write,close,open,openSync}},WriteStreamClass;WriteStream=function(InternalWriteStream){WriteStreamClass=InternalWriteStream,Object.defineProperty(WriteStreamClass.prototype,Symbol.toStringTag,{value:\"WritesStream\",enumerable:!1});function WriteStream2(path,options){return new InternalWriteStream(path,options)}return WriteStream2.prototype=InternalWriteStream.prototype,Object.defineProperty(WriteStream2,Symbol.hasInstance,{value(instance){return instance instanceof InternalWriteStream}})}(class WriteStream2 extends Stream.NativeWritable{constructor(path,options=defaultWriteStreamOptions){if(!options)@throwTypeError(\"Expected options to be an object\");var{fs:fs2=defaultWriteStreamOptions.fs,start=defaultWriteStreamOptions.start,flags=defaultWriteStreamOptions.flags,mode=defaultWriteStreamOptions.mode,autoClose=!0,emitClose=!1,autoDestroy=autoClose,encoding=defaultWriteStreamOptions.encoding,fd=defaultWriteStreamOptions.fd,pos=defaultWriteStreamOptions.pos}=options,tempThis={};if(typeof path===\"string\"){if(path.length===0)@throwTypeError(\"Expected a non-empty path\");if(path.startsWith(\"file:\"))path=Bun.fileURLToPath(path);tempThis.path=path,tempThis.fd=null,tempThis[writeStreamPathFastPathSymbol]=autoClose&&(start===void 0||start===0)&&fs2.write===defaultWriteStreamOptions.fs.write&&fs2.close===defaultWriteStreamOptions.fs.close}else tempThis.fd=fd,tempThis[writeStreamPathFastPathSymbol]=!1;if(!tempThis.fd)tempThis.fd=fs2.openSync(path,flags,mode);super(tempThis.fd,{...options,decodeStrings:!1,autoDestroy,emitClose,fd:tempThis});if(Object.assign(this,tempThis),typeof fs2\?.write!==\"function\")@throwTypeError(\"Expected fs.write to be a function\");if(typeof fs2\?.close!==\"function\")@throwTypeError(\"Expected fs.close to be a function\");if(typeof fs2\?.open!==\"function\")@throwTypeError(\"Expected fs.open to be a function\");if(typeof path===\"object\"&&path){if(path instanceof URL)path=Bun.fileURLToPath(path)}if(typeof path!==\"string\"&&typeof fd!==\"number\")@throwTypeError(\"Expected a path or file descriptor\");if(this.start=start,this.#fs=fs2,this.flags=flags,this.mode=mode,this.start!==void 0)this.pos=this.start;if(encoding!==defaultWriteStreamOptions.encoding){if(this.setDefaultEncoding(encoding),encoding!==\"buffer\"&&encoding!==\"utf8\"&&encoding!==\"utf-8\"&&encoding!==\"binary\")this[writeStreamPathFastPathSymbol]=!1}}get autoClose(){return this._writableState.autoDestroy}set autoClose(val){this._writableState.autoDestroy=val}destroySoon=this.end;open(){}path;fd;flags;mode;#fs;bytesWritten=0;pos;[writeStreamPathFastPathSymbol];[writeStreamSymbol]=!0;start;[writeStreamPathFastPathCallSymbol](readStream,pipeOpts){if(!this[writeStreamPathFastPathSymbol])return!1;if(this.fd!==null)return this[writeStreamPathFastPathSymbol]=!1,!1;return this[kIoDone]=!1,readStream[kIoDone]=!1,Bun.write(this[writeStreamPathFastPathSymbol],readStream[readStreamPathOrFdSymbol]).then((bytesWritten)=>{readStream[kIoDone]=this[kIoDone]=!0,this.bytesWritten+=bytesWritten,readStream.bytesRead+=bytesWritten,this.end(),readStream.close()},(err)=>{readStream[kIoDone]=this[kIoDone]=!0,this.#errorOrDestroy(err),readStream.emit(\"error\",err)})}isBunFastPathEnabled(){return this[writeStreamPathFastPathSymbol]}disableBunFastPath(){this[writeStreamPathFastPathSymbol]=!1}#handleWrite(er,bytes){if(er)return this.#errorOrDestroy(er);this.bytesWritten+=bytes}#internalClose(err,cb){this[writeStreamPathFastPathSymbol]=!1;var fd=this.fd;this.#fs.close(fd,(er)=>{this.fd=null,cb(err||er)})}_construct(callback){if(typeof this.fd===\"number\"){callback();return}callback(),this.emit(\"open\",this.fd),this.emit(\"ready\")}_destroy(err,cb){if(this.fd===null)return cb(err);if(this[kIoDone]){this.once(kIoDone,()=>this.#internalClose(err,cb));return}this.#internalClose(err,cb)}[kIoDone]=!1;close(cb){if(cb){if(this.closed){process.nextTick(cb);return}this.on(\"close\",cb)}if(!this.autoClose)this.on(\"finish\",this.destroy);this.end()}write(chunk,encoding=this._writableState.defaultEncoding,cb){if(this[writeStreamPathFastPathSymbol]=!1,typeof chunk===\"string\")chunk=Buffer.from(chunk,encoding);var native=this.pos===void 0;return this[kIoDone]=!0,super.write(chunk,encoding,native\?(err,bytes)=>{if(this[kIoDone]=!1,this.#handleWrite(err,bytes),this.emit(kIoDone),cb)!err\?cb():cb(err)}:()=>{},native)}#internalWriteSlow(chunk,encoding,cb){this.#fs.write(this.fd,chunk,0,chunk.length,this.pos,(err,bytes)=>{this[kIoDone]=!1,this.#handleWrite(err,bytes),this.emit(kIoDone),!err\?cb():cb(err)})}end(chunk,encoding,cb){var native=this.pos===void 0;return super.end(chunk,encoding,cb,native)}_write=this.#internalWriteSlow;_writev=void 0;get pending(){return this.fd===null}_destroy(err,cb){this.close(err,cb)}#errorOrDestroy(err){var{_readableState:r={destroyed:!1,autoDestroy:!1},_writableState:w={destroyed:!1,autoDestroy:!1}}=this;if(w\?.destroyed||r\?.destroyed)return this;if(r\?.autoDestroy||w\?.autoDestroy)this.destroy(err);else if(err)this.emit(\"error\",err)}});function createWriteStream(path,options){return new WriteStream(path,options)}return Object.defineProperties(fs,{createReadStream:{value:createReadStream},createWriteStream:{value:createWriteStream},ReadStream:{value:ReadStream},WriteStream:{value:WriteStream}}),realpath.native=realpath,realpathSync.native=realpathSync,$={access,accessSync,appendFile,appendFileSync,chmod,chmodSync,chown,chownSync,close,closeSync,constants:promises.constants,copyFile,copyFileSync,createReadStream,createWriteStream,Dirent,exists,existsSync,fchmod,fchmodSync,fchown,fchownSync,fstat,fstatSync,fsync,fsyncSync,ftruncate,ftruncateSync,futimes,futimesSync,lchmod,lchmodSync,lchown,lchownSync,link,linkSync,lstat,lstatSync,lutimes,lutimesSync,mkdir,mkdirSync,mkdtemp,mkdtempSync,open,openSync,promises,read,readFile,readFileSync,readSync,readdir,readdirSync,readlink,readlinkSync,realpath,realpathSync,rename,renameSync,rm,rmSync,rmdir,rmdirSync,stat,statSync,Stats,symlink,symlinkSync,truncate,truncateSync,unlink,unlinkSync,utimes,utimesSync,write,writeFile,writeFileSync,writeSync,WriteStream,ReadStream,watch,FSWatcher,writev,writevSync,readv,readvSync,[Symbol.for(\"::bunternal::\")]:{ReadStreamClass,WriteStreamClass}},$})\n"_s; // // -static constexpr ASCIILiteral NodeFSPromisesCode = "(function (){\"use strict\";var $;const constants=@processBindingConstants.fs;var fs=Bun.fs();const notrace=\"::bunternal::\";var promisify={[notrace]:(fsFunction)=>{return async function(...args){return await 1,fsFunction.apply(fs,args)}}}[notrace];function watch(filename,options={}){if(filename instanceof URL)@throwTypeError(\"Watch URLs are not supported yet\");else if(Buffer.isBuffer(filename))filename=filename.toString();else if(typeof filename!==\"string\")@throwTypeError(\"Expected path to be a string or Buffer\");let nextEventResolve=null;if(typeof options===\"string\")options={encoding:options};const queue=@createFIFO(),watcher=fs.watch(filename,options||{},(eventType,filename2)=>{if(queue.push({eventType,filename:filename2}),nextEventResolve){const resolve=nextEventResolve;nextEventResolve=null,resolve()}});return{[Symbol.asyncIterator](){let closed=!1;return{async next(){while(!closed){let event;while(event=queue.shift()){if(event.eventType===\"close\")return closed=!0,{value:void 0,done:!0};if(event.eventType===\"error\")throw closed=!0,event.filename;return{value:event,done:!1}}const{promise,resolve}=Promise.withResolvers();nextEventResolve=resolve,await promise}return{value:void 0,done:!0}},return(){if(!closed){if(watcher.close(),closed=!0,nextEventResolve){const resolve=nextEventResolve;nextEventResolve=null,resolve()}}return{value:void 0,done:!0}}}}}}return $={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: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:fs.readdir.bind(fs),readFile:fs.readFile.bind(fs),writeFile:promisify(fs.writeFileSync),readlink:promisify(fs.readlinkSync),realpath:promisify(fs.realpathSync),rename:promisify(fs.renameSync),stat:fs.stat.bind(fs),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),writev:(fd,buffers,position)=>{return new Promise((resolve,reject)=>{try{var bytesWritten=fs.writevSync(fd,buffers,position)}catch(err){reject(err);return}resolve({bytesWritten,buffers})})},readv:(fd,buffers,position)=>{return new Promise((resolve,reject)=>{try{var bytesRead=fs.readvSync(fd,buffers,position)}catch(err){reject(err);return}resolve({bytesRead,buffers})})},constants,watch},$})\n"_s; +static constexpr ASCIILiteral NodeFSPromisesCode = "(function (){\"use strict\";var $;const constants=@processBindingConstants.fs;var fs=Bun.fs();const notrace=\"::bunternal::\";var promisify={[notrace]:(fsFunction)=>{return async function(...args){return await 1,fsFunction.apply(fs,args)}}}[notrace];function watch(filename,options={}){if(filename instanceof URL)@throwTypeError(\"Watch URLs are not supported yet\");else if(Buffer.isBuffer(filename))filename=filename.toString();else if(typeof filename!==\"string\")@throwTypeError(\"Expected path to be a string or Buffer\");let nextEventResolve=null;if(typeof options===\"string\")options={encoding:options};const queue=@createFIFO(),watcher=fs.watch(filename,options||{},(eventType,filename2)=>{if(queue.push({eventType,filename:filename2}),nextEventResolve){const resolve=nextEventResolve;nextEventResolve=null,resolve()}});return{[Symbol.asyncIterator](){let closed=!1;return{async next(){while(!closed){let event;while(event=queue.shift()){if(event.eventType===\"close\")return closed=!0,{value:void 0,done:!0};if(event.eventType===\"error\")throw closed=!0,event.filename;return{value:event,done:!1}}const{promise,resolve}=Promise.withResolvers();nextEventResolve=resolve,await promise}return{value:void 0,done:!0}},return(){if(!closed){if(watcher.close(),closed=!0,nextEventResolve){const resolve=nextEventResolve;nextEventResolve=null,resolve()}}return{value:void 0,done:!0}}}}}}return $={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: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:fs.readdir.bind(fs),readFile:fs.readFile.bind(fs),writeFile:promisify(fs.writeFileSync),readlink:promisify(fs.readlinkSync),realpath:fs.realpath.bind(fs),rename:promisify(fs.renameSync),stat:fs.stat.bind(fs),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),writev:(fd,buffers,position)=>{return new Promise((resolve,reject)=>{try{var bytesWritten=fs.writevSync(fd,buffers,position)}catch(err){reject(err);return}resolve({bytesWritten,buffers})})},readv:(fd,buffers,position)=>{return new Promise((resolve,reject)=>{try{var bytesRead=fs.readvSync(fd,buffers,position)}catch(err){reject(err);return}resolve({bytesRead,buffers})})},constants,watch},$})\n"_s; // // diff --git a/test/js/node/fs/fs.test.ts b/test/js/node/fs/fs.test.ts index 86e64b713..5b25beded 100644 --- a/test/js/node/fs/fs.test.ts +++ b/test/js/node/fs/fs.test.ts @@ -42,7 +42,7 @@ import { join } from "node:path"; import { ReadStream as ReadStream_, WriteStream as WriteStream_ } from "./export-from.js"; import { ReadStream as ReadStreamStar_, WriteStream as WriteStreamStar_ } from "./export-star-from.js"; -import { spawnSync } from "bun"; +import { SystemError, spawnSync } from "bun"; const Buffer = globalThis.Buffer || Uint8Array; @@ -801,6 +801,36 @@ it("readlink", () => { expect(readlinkSync(actual)).toBe(realpathSync(import.meta.path)); }); +it("realpath async", async () => { + const actual = join(tmpdir(), Math.random().toString(32) + "-fs-realpath.txt"); + try { + unlinkSync(actual); + } catch (e) {} + + symlinkSync(import.meta.path, actual); + + expect(await promises.realpath(actual)).toBe(realpathSync(import.meta.path)); + const tasks = new Array(500); + for (let i = 0; i < 500; i++) { + const current = actual + i; + tasks[i] = promises.realpath(current).then( + () => { + throw new Error("should not get here"); + }, + e => { + expect(e?.path).toBe(current); + }, + ); + } + await Promise.all(tasks); + + const { promise, resolve, reject } = Promise.withResolvers(); + fs.realpath(actual, (err, path) => { + err ? reject(err) : resolve(path); + }); + expect(await promise).toBe(realpathSync(import.meta.path)); +}); + describe("stat", () => { it("file metadata is correct", () => { const fileStats = statSync(new URL("./fs-stream.js", import.meta.url).toString().slice("file://".length - 1)); |