Node

The Node filter provides a number of convenience methods and variables which make writing Node scripts feel more like traditional Ruby.

List of Transformations

  • `command` child_process.execSync("command", {encoding: "utf8"})
  • ARGV process.argv.slice(2)
  • Dir.chdir process.chdir
  • Dir.entries fs.readdirSync
  • Dir.exist? fs.existsSync
  • Dir.glob fs.globSync (Node 22+)
  • Dir.home os.homedir()
  • Dir.mkdir fs.mkdirSync
  • Dir.mktmpdir fs.mkdtempSync
  • Dir.pwd process.cwd
  • Dir.rmdir fs.rmdirSync
  • Dir.tmpdir os.tmpdir()
  • ENV process.env
  • File.absolute_path path.resolve
  • File.absolute_path? path.isAbsolute
  • File.basename path.basename
  • File.chmod fs.chmodSync
  • File.chown fs.chownSync
  • File.directory? fs.existsSync(p) && fs.statSync(p).isDirectory()
  • File.dirname path.dirname
  • File.exist? fs.existsSync
  • File.expand_path path.resolve
  • File.extname path.extname
  • File.file? fs.existsSync(p) && fs.statSync(p).isFile()
  • File.join path.join
  • File.lchmod fs.lchmodSync
  • File.link fs.linkSync
  • File.lstat fs.lstatSync
  • File::PATH_SEPARATOR path.delimiter
  • File.read fs.readFileSync
  • File.readlink fs.readlinkSync
  • File.realpath fs.realpathSync
  • File.rename fs.renameSync
  • File::SEPARATOR path.sep
  • File.stat fs.statSync
  • File.symlink fs.symlinkSync
  • File.truncate fs.truncateSync
  • File.unlink fs.unlinkSync
  • FileUtils.cd process.chdir
  • FileUtils.cp fs.copyFileSync
  • FileUtils.ln fs.linkSync
  • FileUtils.ln_s fs.symlinkSync
  • FileUtils.mkdir fs.mkdirSync
  • FileUtils.mkdir_p fs.mkdirSync(path, {recursive: true})
  • FileUtils.mv fs.renameSync
  • FileUtils.pwd process.cwd
  • FileUtils.rm fs.unlinkSync
  • FileUtils.rm_rf fs.rmSync(path, {recursive: true, force: true})
  • FileUtils.rmdir fs.rmdirSync
  • IO.read fs.readFileSync
  • IO.write fs.writeFileSync
  • Pathname#relative_path_from path.relative(from, to)
  • system child_process.execSync(..., {stdio: "inherit"})

Async Mode

By default, the Node filter generates synchronous file operations (e.g., fs.readFileSync). For async/await-based code, pass the async: true option:

Ruby2JS.convert(source, filters: [Ruby2JS::Filter::Node], async: true)

In async mode:

  • File operations use fs/promises and are wrapped with await
  • File.read("foo") await fs.readFile("foo", "utf8")
  • IO.write("foo", "bar") await fs.writeFile("foo", "bar")
  • FileUtils.mkdir_p("foo") await fs.mkdir("foo", {recursive: true})
  • FileUtils.rm_rf("foo") await fs.rm("foo", {recursive: true, force: true})
  • FileUtils.cp("src", "dest") await fs.copyFile("src", "dest")
  • Dir.entries("foo") await fs.readdir("foo")
  • Dir.glob("**/*.rb") await Array.fromAsync(fs.glob("**/*.rb")) (Node 22+)

Note: File.exist? and Dir.exist? always use fs.existsSync (imported as fsSync in async mode) because fs/promises has no equivalent.

Next: Nokogiri