// Hardcoded module "node:fs/promises" // Note: `constants` is injected into the top of this file declare var constants: typeof import("node:fs/promises").constants; var fs = Bun.fs(); // note: this is not quite the same as how node does it // in some cases, node swaps around arguments or makes small tweaks to the return type // this is just better than nothing. const notrace = "::bunternal::"; var promisify = { [notrace]: fsFunction => { // TODO: remove variadic arguments // we can use new Function() here instead // based on fsFucntion.length var func = { [notrace]: function (resolve, reject, args) { var result; try { result = fsFunction.apply(fs, args); args = undefined; } catch (err) { args = undefined; reject(err); return; } resolve(result); }, }[notrace]; return async function (...args) { // we await it so that the stack is captured return await new Promise((resolve, reject) => { process.nextTick(func, resolve, reject, args); }); }; }, }[notrace]; export function watch( filename: string | Buffer | URL, options: { encoding?: BufferEncoding; persistent?: boolean; recursive?: boolean; signal?: AbortSignal } = {}, ) { type Event = { eventType: string; filename: string | Buffer | undefined; }; const events: Array = []; if (filename instanceof URL) { throw new TypeError("Watch URLs are not supported yet"); } else if (Buffer.isBuffer(filename)) { filename = filename.toString(); } else if (typeof filename !== "string") { throw new TypeError("Expected path to be a string or Buffer"); } let nextEventResolve: Function | null = null; if (typeof options === "string") { options = { encoding: options }; } fs.watch(filename, options || {}, (eventType: string, filename: string | Buffer | undefined) => { events.push({ eventType, filename }); if (nextEventResolve) { const resolve = nextEventResolve; nextEventResolve = null; resolve(); } }); return { async *[Symbol.asyncIterator]() { let closed = false; while (!closed) { while (events.length) { let event = events.shift() as Event; if (event.eventType === "close") { closed = true; break; } if (event.eventType === "error") { closed = true; throw event.filename; } yield event; } await new Promise((resolve: Function) => (nextEventResolve = resolve)); } }, }; } export var access = promisify(fs.accessSync), appendFile = promisify(fs.appendFileSync), close = promisify(fs.closeSync), copyFile = promisify(fs.copyFileSync), exists = promisify(fs.existsSync), chown = promisify(fs.chownSync), chmod = promisify(fs.chmodSync), fchmod = promisify(fs.fchmodSync), fchown = promisify(fs.fchownSync), fstat = promisify(fs.fstatSync), fsync = promisify(fs.fsyncSync), ftruncate = promisify(fs.ftruncateSync), futimes = promisify(fs.futimesSync), lchmod = promisify(fs.lchmodSync), lchown = promisify(fs.lchownSync), link = promisify(fs.linkSync), lstat = promisify(fs.lstatSync), mkdir = promisify(fs.mkdirSync), mkdtemp = promisify(fs.mkdtempSync), open = promisify(fs.openSync), read = promisify(fs.readSync), write = promisify(fs.writeSync), readdir = promisify(fs.readdirSync), readFile = promisify(fs.readFileSync), writeFile = promisify(fs.writeFileSync), readlink = promisify(fs.readlinkSync), realpath = promisify(fs.realpathSync), rename = promisify(fs.renameSync), stat = promisify(fs.statSync), symlink = promisify(fs.symlinkSync), truncate = promisify(fs.truncateSync), unlink = promisify(fs.unlinkSync), utimes = promisify(fs.utimesSync), lutimes = promisify(fs.lutimesSync), rm = promisify(fs.rmSync), rmdir = promisify(fs.rmdirSync), 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, }); }); }; export default { access, appendFile, close, copyFile, exists, chown, chmod, fchmod, fchown, fstat, fsync, ftruncate, futimes, lchmod, lchown, link, lstat, mkdir, mkdtemp, open, read, write, readdir, readFile, writeFile, readlink, realpath, rename, stat, symlink, truncate, unlink, utimes, lutimes, rm, rmdir, watch, writev, readv, constants, [Symbol.for("CommonJS")]: 0, }; option> Unnamed repository; edit this file 'description' to name the repository.
aboutsummaryrefslogtreecommitdiff
path: root/integration/bunjs-only-snippets/process-nexttick.test.js (unfollow)
AgeCommit message (Expand)AuthorFilesLines
2022-03-24clang-formatGravatar Jarred Sumner 7-278/+363
2022-03-24Update response.zigGravatar Jarred Sumner 1-6/+6
2022-03-24[bun.js] Enable SharedArrayBuffer and expose internal LoaderGravatar Jarred Sumner 1-7/+16
2022-03-23handle bodies of 0 length betterGravatar Jarred Sumner 6-42/+86
2022-03-23Update server.zigGravatar Jarred Sumner 1-1/+2
2022-03-23Implement Request body support!Gravatar Jarred Sumner 3-30/+132
2022-03-23Support `Request.headers` and `Request.url` in http serverGravatar Jarred Sumner 5-30/+134
2022-03-23Update MakefileGravatar Jarred Sumner 1-1/+1
2022-03-23:scissors: testGravatar Jarred Sumner 1-14/+2
2022-03-23[bun.js] Bun.write for macOSGravatar Jarred Sumner 14-76/+232
2022-03-23[bun.js] Implement Bun.write()Gravatar Jarred SUmner 11-63/+959
2022-03-22Handle integer sizes greater than i32Gravatar Jarred SUmner 14-74/+142
2022-03-22Linux-specific tweaksGravatar Jarred SUmner 6-43/+52
2022-03-22`Response.file` -> `Bun.file`Gravatar Jarred Sumner 3-72/+65
2022-03-21sendfile worksGravatar Jarred Sumner 7-62/+174
2022-03-21[bun.js] 2/? Implement `Response.file`, sendfile editionGravatar Jarred Sumner 8-161/+506
2022-03-21[bun.js] 1/? Implement `Response.file`Gravatar Jarred Sumner 13-103/+1103