AgentSkillsCN

bun-file-io

当您从事文件读取、写入、扫描或删除等文件操作时,请使用此功能。它总结了本仓库中常用的文件 API 及其最佳实践模式,并特别说明了何时应使用文件系统辅助工具来处理目录。

SKILL.md
--- frontmatter
name: bun-file-io
description: Use this when you are working on file operations like reading, writing, scanning, or deleting files. It summarizes the preferred file APIs and patterns used in this repo. It also notes when to use filesystem helpers for directories.

Use this when

  • Editing file I/O or scans in packages/opencode
  • Handling directory operations or external tools

Bun file APIs (from Bun docs)

  • Bun.file(path) is lazy; call text, json, stream, arrayBuffer, bytes, exists to read.
  • Metadata: file.size, file.type, file.name.
  • Bun.write(dest, input) writes strings, buffers, Blobs, Responses, or files.
  • Bun.file(...).delete() deletes a file.
  • file.writer() returns a FileSink for incremental writes.
  • Bun.Glob + Array.fromAsync(glob.scan({ cwd, absolute, onlyFiles, dot })) for scans.
  • Use Bun.which to find a binary, then Bun.spawn to run it.
  • Bun.readableStreamToText/Bytes/JSON for stream output.

When to use node:fs

  • Use node:fs/promises for directories (mkdir, readdir, recursive operations).

Repo patterns

  • Prefer Bun APIs over Node fs for file access.
  • Check Bun.file(...).exists() before reading.
  • For binary/large files use arrayBuffer() and MIME checks via file.type.
  • Use Bun.Glob + Array.fromAsync for scans.
  • Decode tool stderr with Bun.readableStreamToText.
  • For large writes, use Bun.write(Bun.file(path), text).

NOTE: Bun.file(...).exists() will return false if the value is a directory. Use Filesystem.exists(...) instead if path can be file or directory

Quick checklist

  • Use Bun APIs first.
  • Use path.join/path.resolve for paths.
  • Prefer promise .catch(...) over try/catch when possible.