Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 3 additions & 6 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,7 @@ All notable Vooya FS changes are documented here. The format follows

## [Unreleased]

## [@vooya/fs 0.1.1] - Release candidate

Prepared for publication; npm 0.1.0 remains the latest published release until the
Release workflow succeeds. The changes below are included in this candidate.
## [@vooya/fs 0.1.1] - 2026-10-02

### Added

Expand Down Expand Up @@ -147,8 +144,8 @@ Release workflow succeeds. The changes below are included in this candidate.

---

[Unreleased]: https://github.com/vooyajs/fs/compare/fs-v0.1.0...HEAD
[@vooya/fs 0.1.1]: https://github.com/vooyajs/fs/compare/fs-v0.1.0...release/fs-0-1-1
[Unreleased]: https://github.com/vooyajs/fs/compare/fs-v0.1.1...HEAD
[@vooya/fs 0.1.1]: https://github.com/vooyajs/fs/releases/tag/fs-v0.1.1
[@vooya/fs 0.1.0]: https://github.com/vooyajs/fs/releases/tag/fs-v0.1.0
[@rush-fs/core 0.1.0]: https://github.com/vooyajs/fs/compare/v0.0.5...v0.1.0
[0.0.5]: https://github.com/vooyajs/fs/compare/v0.0.4...v0.0.5
Expand Down
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,17 @@ It is not intended to make every `node:fs` call faster. Tiny operations such as
walks, globbing, recursive copy/removal, and combined traversal + metadata work.

> [!IMPORTANT]
> npm already contains `@vooya/fs@0.1.0`. The 0.1.1 release candidate in this
> checkout is unreleased; build from source to test the new behaviors described here.
> Install `@vooya/fs@0.1.1` for the compatibility fixes described here.
> See the [0.1.0 → 0.1.1 comparison](https://rush-fs-docs.vercel.app/guide/quick-start#published-release-and-source-differences) when upgrading.

## Install and run

Use Node.js 22 or newer. Prebuilt 0.1.0 binaries support macOS arm64/x64,
Use Node.js 22 or newer. Prebuilt 0.1.1 binaries support macOS arm64/x64,
Linux x64 with glibc, and Windows x64. Supported prebuilt installs do not need Rust.
Keep optional dependencies enabled so npm can install the matching binary.

```sh
npm install @vooya/fs@0.1.0
npm install @vooya/fs@0.1.1
```

Save this as `scan.mjs` in your project, then run `node scan.mjs`:
Expand All @@ -54,13 +54,13 @@ try {
}
```

This example works with npm 0.1.0 and the source checkout. Results contain paths
This example works with npm 0.1.1. Results contain paths
relative to the scanned directory; an empty array is valid when no files match.
For CommonJS, import with `const { scan } = require('@vooya/fs')` and call it from
an async function.

[Quick Start](https://rush-fs-docs.vercel.app/guide/quick-start) covers both install
paths. Check the [release/source differences](https://rush-fs-docs.vercel.app/guide/quick-start#published-release-and-source-differences)
paths. Check the [0.1.0 → 0.1.1 differences](https://rush-fs-docs.vercel.app/guide/quick-start#published-release-and-source-differences)
before using newer options, or follow [native binding troubleshooting](https://rush-fs-docs.vercel.app/guide/troubleshooting#cannot-find-the-native-binding)
if the import fails.

Expand Down Expand Up @@ -154,7 +154,7 @@ The package also exposes promise and sync variants for `access`, `appendFile`,
`readFile`, `readlink`, `realpath`, `rename`, `rmdir`, `stat`, `symlink`,
`truncate`, `unlink`, `utimes`, and `writeFile`.

Compatibility is deliberately scoped. The unreleased batch entry accepts string,
Compatibility is deliberately scoped. The 0.1.1 batch entry accepts string,
Buffer and file URL paths, and routes advanced Node options to Node when needed.
Callback-style APIs are not provided. See the
[compatibility policy](./docs/content/api/compatibility.mdx) and conformance SDDs under
Expand Down
10 changes: 5 additions & 5 deletions README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,16 @@ JavaScript → Rust 调用,替代成千上万次 JS 与文件系统之间的
“遍历 + 过滤 + metadata”这类可以在原生侧合并完成的工作。

> [!IMPORTANT]
> npm 已发布 `@vooya/fs@0.1.0`。本工作区为 0.1.1 候选版本,尚未发布;验证这些新行为请从源码构建。
> 安装 `@vooya/fs@0.1.1` 即可使用这里说明的兼容性修复;从旧版升级时请查看 [0.1.0 → 0.1.1 差异](https://rush-fs-docs.vercel.app/guide/quick-start#published-release-and-source-differences)。

## 安装并运行

使用 Node.js 22 或更新版本。0.1.0 提供 macOS arm64/x64、Linux x64 glibc
使用 Node.js 22 或更新版本。0.1.1 提供 macOS arm64/x64、Linux x64 glibc
和 Windows x64 预编译包;这些平台直接安装使用不需要 Rust。
请启用 optional dependencies,以便 npm 安装对应平台的原生包。

```sh
npm install @vooya/fs@0.1.0
npm install @vooya/fs@0.1.1
```

在项目中将以下内容保存为 `scan.mjs`,然后运行 `node scan.mjs`:
Expand All @@ -52,12 +52,12 @@ try {
}
```

该示例适用于 npm 0.1.0 和源码工作区。返回的路径相对于扫描目录;没有匹配文件时,
该示例适用于 npm 0.1.1。返回的路径相对于扫描目录;没有匹配文件时,
空数组是正常结果。CommonJS 可以用 `const { scan } = require('@vooya/fs')`
导入,并在 async 函数中调用。

[快速上手(英文)](https://rush-fs-docs.vercel.app/guide/quick-start) 说明两种安装方式。
使用新选项前请查看[发布版与源码差异](https://rush-fs-docs.vercel.app/guide/quick-start#published-release-and-source-differences);
使用新选项前请查看[0.1.0 → 0.1.1 差异](https://rush-fs-docs.vercel.app/guide/quick-start#published-release-and-source-differences);
导入失败时请按[原生绑定排错步骤](https://rush-fs-docs.vercel.app/guide/troubleshooting#cannot-find-the-native-binding)检查。

## 产品方向与开发约束
Expand Down
6 changes: 3 additions & 3 deletions docs/content/api/compatibility.mdx
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# Node compatibility and execution policy

This unreleased iteration targets common filesystem batches on Node 22 and 24.
Version 0.1.1 targets common filesystem batches on Node 22 and 24.
The public entry point is `@vooya/fs`. `index.js` remains the generated native
binding and is not a supported alternate package entry point.

Installed npm 0.1.0? Check the [release/source comparison](/guide/quick-start#published-release-and-source-differences)
before applying this unreleased API policy.
Installed npm 0.1.0? Check the [0.1.0 → 0.1.1 comparison](/guide/quick-start#published-release-and-source-differences)
before applying this 0.1.1 API policy.

The baseline is the [Node filesystem API](https://nodejs.org/docs/latest-v22.x/api/fs.html).
Compatibility tests call Node on independent fixtures and compare results, side
Expand Down
2 changes: 1 addition & 1 deletion docs/content/api/cp.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# cp

> This page describes unreleased checkout changes. See [Node compatibility and execution policy](/api/compatibility) for native fast paths, Node routes and verified limits.
> This page describes `@vooya/fs@0.1.1`. See [Node compatibility and execution policy](/api/compatibility) for native fast paths, Node routes and verified limits.

Copy files and directories recursively. Supports **concurrency** (Vooya FS extension) for faster tree copy.

Expand Down
2 changes: 1 addition & 1 deletion docs/content/api/glob.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# glob

> This page describes unreleased checkout changes. See [Node compatibility and execution policy](/api/compatibility) for native fast paths, Node routes and verified limits.
> This page describes `@vooya/fs@0.1.1`. See [Node compatibility and execution policy](/api/compatibility) for native fast paths, Node routes and verified limits.

Match files and directories by glob pattern (e.g. `**/*.js`). Supports **concurrency** and **gitIgnore** (Vooya FS extensions). Vooya FS uses [ignore](https://github.com/BurntSushi/ripgrep/tree/master/crates/ignore) for matching, while compatibility tests use Node's built-in `fs.promises.glob` / `fs.globSync` as the oracle.

Expand Down
2 changes: 1 addition & 1 deletion docs/content/api/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ marketing. Core batch APIs accept string, Buffer and file URL paths. A public
compatibility layer uses Node for options outside the measured native path. Other
exports retain their documented subsets; callback API forms remain absent.

This page describes main, including unreleased changes. See [Quick Start](/guide/quick-start)
This page describes the published 0.1.1 API. See [Quick Start](/guide/quick-start)
for the release boundary and installation instructions.

See the [Node compatibility policy](/api/compatibility) for remaining API and behavioral gaps.
Expand Down
6 changes: 3 additions & 3 deletions docs/content/api/read-file.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# readFile

> This page describes unreleased checkout changes. See [Node compatibility and execution policy](/api/compatibility) for native fast paths, Node routes and verified limits.
> This page describes `@vooya/fs@0.1.1`. See [Node compatibility and execution policy](/api/compatibility) for native fast paths, Node routes and verified limits.

Read the entire contents of a file. Returns a `Buffer` or a decoded string depending on `encoding`.

Expand Down Expand Up @@ -40,9 +40,9 @@ line. Selected lines are joined with `\n`, without a final line terminator.
Omitting the encoding (or using `encoding: null`) returns the **whole file as a
Buffer**, so it does not limit how much content your caller receives.

Main preserves blank lines in the selected range. The published 0.1.0 release
Version 0.1.1 preserves blank lines in the selected range. The published 0.1.0 release
can drop leading blank lines from the excerpt; its missing-file errors also lack
main's structured fields. See [version-specific troubleshooting](/guide/troubleshooting#why-does-a-line-range-return-the-whole-file).
0.1.1's structured fields. See [version-specific troubleshooting](/guide/troubleshooting#why-does-a-line-range-return-the-whole-file).

## Methods

Expand Down
2 changes: 1 addition & 1 deletion docs/content/api/readdir.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# readdir

> This page describes unreleased checkout changes. See [Node compatibility and execution policy](/api/compatibility) for native fast paths, Node routes and verified limits.
> This page describes `@vooya/fs@0.1.1`. See [Node compatibility and execution policy](/api/compatibility) for native fast paths, Node routes and verified limits.

Read the contents of a directory. Supports non-recursive and recursive modes; recursive mode uses parallel traversal and benefits most from Vooya FS.

Expand Down
2 changes: 1 addition & 1 deletion docs/content/api/rm.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# rm

> This page describes unreleased checkout changes. See [Node compatibility and execution policy](/api/compatibility) for native fast paths, Node routes and verified limits.
> This page describes `@vooya/fs@0.1.1`. See [Node compatibility and execution policy](/api/compatibility) for native fast paths, Node routes and verified limits.

Remove files and directories. Supports recursive removal with optional **concurrency** (Vooya FS extension) for tuning recursive deletion.

Expand Down
2 changes: 1 addition & 1 deletion docs/content/api/scan.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# scan

> This page describes unreleased checkout changes. See [Node compatibility and execution policy](/api/compatibility) for native fast paths, Node routes and verified limits.
> This page describes `@vooya/fs@0.1.1`. See [Node compatibility and execution policy](/api/compatibility) for native fast paths, Node routes and verified limits.

Walk a directory tree, apply rooted include/exclude patterns, and return metadata in
one native operation. `scan` is a Vooya FS extension, not a Node `fs` compatibility
Expand Down
5 changes: 3 additions & 2 deletions docs/content/guide/batch-evidence.mdx
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# Batch API evidence

This report covers the unreleased Node 22/24 compatibility iteration. The npm
release remains `@vooya/fs@0.1.0`; build this checkout to use the changes.
This historical report measures the source-build Node 22/24 compatibility
iteration included in 0.1.1. It is not a fresh benchmark of the npm artifact;
retain the measured revisions and environment below when comparing results.

## Scope and execution policy

Expand Down
2 changes: 1 addition & 1 deletion docs/content/guide/competitor-evidence.mdx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Competitor benchmark evidence

This compares overlapping workloads adapted from fdir and tinyglobby's own
benchmarks against the current unreleased Vooya public entry. It is a baseline
benchmarks against the measured pre-release Vooya public entry. It is a baseline
for choosing optimizations. These reports measure the reviewed release build,
including the documented glob compatibility corrections.

Expand Down
7 changes: 4 additions & 3 deletions docs/content/guide/migration.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,10 @@ The Rust crate is `vooya_fs`, and the native binary basename is

## Release boundary

`@vooya/fs@0.1.0` is published. This site follows main and also documents newer,
unreleased compatibility fixes. Do not assume those fixes are present in 0.1.0;
check the [release source](https://github.com/vooyajs/fs/tree/fs-v0.1.0).
`@vooya/fs@0.1.1` includes the compatibility fixes described in the API guide.
They are not all present in 0.1.0; check the
[version comparison](/guide/quick-start#published-release-and-source-differences)
and the [0.1.1 release source](https://github.com/vooyajs/fs/tree/fs-v0.1.1).

Legacy versions remain separate packages. npm deprecation, if applied, displays a
warning; it does not redirect imports or install a replacement. The old packages
Expand Down
2 changes: 1 addition & 1 deletion docs/content/guide/native-overheads.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Native overhead evidence

This unreleased iteration builds on `db835af` (the Node compatibility PR). It
This historical source-build measurement builds on `db835af` (the Node compatibility PR). It
changes three existing native paths: compatible glob patterns share a walk,
workers collect glob results locally, and Buffer writes avoid redundant copies.
Public signatures and native/Node routing are unchanged.
Expand Down
45 changes: 21 additions & 24 deletions docs/content/guide/quick-start.mdx
Original file line number Diff line number Diff line change
@@ -1,24 +1,22 @@
# Quick Start

This site documents **the 0.1.1 release candidate, not yet released to npm**. The
published package is [`@vooya/fs@0.1.0`](https://www.npmjs.com/package/@vooya/fs).
Its [release source](https://github.com/vooyajs/fs/tree/fs-v0.1.0) is the reference
for that version. The current compatibility policy and benchmark tables describe
the newer checkout; installing 0.1.0 does not install those changes. See the
[release/source comparison](#published-release-and-source-differences) for common tasks.
Install [`@vooya/fs@0.1.1`](https://www.npmjs.com/package/@vooya/fs), the published
release covered by this guide. Its [release source](https://github.com/vooyajs/fs/tree/fs-v0.1.1)
identifies the implementation. Upgrading from 0.1.0? Check the
[version comparison](#published-release-and-source-differences) for common tasks.

## Requirements

Use Node.js **22 or newer**; the current conformance matrix checks Node 22 and 24.
Prebuilt 0.1.0 packages cover macOS arm64/x64, Linux x64 with glibc, and Windows
Prebuilt 0.1.1 packages cover macOS arm64/x64, Linux x64 with glibc, and Windows
x64. Rust is needed to build a checkout, not to use a supported prebuilt package.
Linux arm64 and Alpine/musl do not have published binaries in this release.

## Install the published release

```sh
npm install @vooya/fs@0.1.0
# Or: pnpm add @vooya/fs@0.1.0
npm install @vooya/fs@0.1.1
# Or: pnpm add @vooya/fs@0.1.1
```

Keep optional dependencies enabled: the package manager selects the native binary
Expand All @@ -28,7 +26,7 @@ the module cannot load.
## Run your first scan

Save this as `scan.mjs` in the project where you installed the package. This
string-path example works with 0.1.0 and the current checkout:
string-path example works with 0.1.1:

```js
import { scan } from '@vooya/fs'
Expand Down Expand Up @@ -63,29 +61,28 @@ async function or with `.then()`. Promise methods are exported directly from
`@vooya/fs`; there is no `@vooya/fs/promises` entry. Synchronous variants such as
`scanSync` block the JavaScript thread.

## Published release and source differences
<a id="published-release-and-source-differences" />

Use this small comparison when choosing between npm 0.1.0 and the 0.1.1 release candidate
source. It covers the operations below, not every API/option combination.
## Upgrading from 0.1.0 to 0.1.1

| Task | npm `@vooya/fs@0.1.0` | 0.1.1 candidate source |
Use this small comparison when upgrading from npm 0.1.0 to 0.1.1. It covers the operations below, not every API/option combination.

| Task | npm `@vooya/fs@0.1.0` | npm `@vooya/fs@0.1.1` |
| -------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | --------------------------------------------- |
| Run the [string-path scan example](#run-your-first-scan) | Supported | Supported |
| Read lines with `encoding: 'utf8'` | Supported, but can drop leading blank lines in the selected range | Preserves selected blank lines |
| Pass `lines` without an encoding | Returns the whole file as a Buffer | Returns the whole file as a Buffer |
| Handle a missing file from `readFile` / `readFileSync` | `code: 'GenericFailure'`; ENOENT appears in the message, without structured `path`, `syscall` or `errno` | `code: 'ENOENT'` with those structured fields |

The read behavior above was checked in both sync and Promise forms against the
installed npm 0.1.0 package and the source entry on Node 22, macOS arm64. It is not
cross-platform runtime verification. See the [line-range example](/api/read-file#read-a-line-range)
The read behavior above was checked in both sync and Promise forms against
separate registry installations of 0.1.0 and 0.1.1 on Node 22, macOS arm64.
The 0.1.1 acceptance also ran on Node 24. This is local runtime verification,
not a new cross-platform performance result. See the [line-range example](/api/read-file#read-a-line-range)
and [error guidance](/guide/troubleshooting#why-does-a-missing-file-have-code-genericfailure).
The [release source](https://github.com/vooyajs/fs/tree/fs-v0.1.0) identifies the
published implementation; use the [source instructions](#try-the-current-source)
for the newer behavior. The version string alone cannot distinguish these builds.

## Try the current source

To use the compatibility fixes and reproduce the published benchmark evidence,
To develop changes or reproduce the source-build benchmark evidence,
install Git, Rust stable and pnpm 9, then build a release binding:

```sh
Expand All @@ -97,9 +94,9 @@ node --input-type=module -e "import { scan } from '@vooya/fs'; console.log((awai
```

Run that command from the repository root: the package's self-reference resolves
the local public entry. Record `git rev-parse HEAD` when comparing results. The
checkout carries candidate version 0.1.1. That version string does not confirm
npm publication; use the published-release instructions above for registry installs.
the local public entry. Record `git rev-parse HEAD` when comparing results. A
checkout can contain changes beyond the published version; record the commit as
well as the package version when reporting its behavior.

## Adopt one operation at a time

Expand Down
Loading
Loading