From 1f72747b9f7465a86ddce002a11fc796e5310eb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carbon=20=E7=A2=B3=E8=8B=AF?= Date: Thu, 19 Feb 2026 04:54:47 +0800 Subject: [PATCH 01/10] =?UTF-8?q?chore:=20=F0=9F=98=A1=20change=20project?= =?UTF-8?q?=20name=20to=20rush-fs,=20because=20someone=20steal=20the=20ori?= =?UTF-8?q?ginal=20good=20name?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 3106f5d..a835ecd 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "hyper-fs", + "name": "rush-fs", "version": "0.0.1", "description": "High-performance drop-in replacement for Node.js fs module, powered by Rust", "main": "index.js", @@ -113,5 +113,11 @@ "singleQuote": true, "arrowParens": "always" }, - "packageManager": "pnpm@9.15.4" + "packageManager": "pnpm@9.15.4", + "optionalDependencies": { + "hyper-fs-win32-x64-msvc": "0.0.1", + "hyper-fs-darwin-x64": "0.0.1", + "hyper-fs-linux-x64-gnu": "0.0.1", + "hyper-fs-darwin-arm64": "0.0.1" + } } From 5414dc502a7cf14bc5f60fe548e6231a4d50fe52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carbon=20=E7=A2=B3=E8=8B=AF?= Date: Thu, 19 Feb 2026 05:06:26 +0800 Subject: [PATCH 02/10] docs: replace `hyper-fs` with `rush-fs` --- .gitattributes | 4 +- .github/ISSUE_TEMPLATE.md | 2 +- .github/workflows/CI.yml | 2 +- CONTRIBUTING.md | 16 ++-- README.md | 59 ++++++------- README.zh-CN.md | 59 ++++++------- __test__/access.spec.ts | 2 +- __test__/chmod.spec.ts | 2 +- __test__/chown.spec.ts | 2 +- __test__/copy_file.spec.ts | 2 +- __test__/cp.spec.ts | 2 +- __test__/encoding.spec.ts | 2 +- __test__/link.spec.ts | 4 +- __test__/mkdir.spec.ts | 2 +- __test__/mkdtemp.spec.ts | 2 +- __test__/read_file.spec.ts | 4 +- __test__/readlink.spec.ts | 2 +- __test__/realpath.spec.ts | 2 +- __test__/rename.spec.ts | 2 +- __test__/rm.spec.ts | 2 +- __test__/rmdir.spec.ts | 4 +- __test__/stat.spec.ts | 2 +- __test__/symlink.spec.ts | 2 +- __test__/truncate.spec.ts | 2 +- __test__/unlink.spec.ts | 10 +-- __test__/utimes.spec.ts | 4 +- __test__/write_file.spec.ts | 2 +- benchmark/copy_file.ts | 8 +- benchmark/cp.ts | 10 +-- benchmark/exists.ts | 12 +-- benchmark/glob.ts | 8 +- benchmark/mkdir.ts | 8 +- benchmark/read_file.ts | 16 ++-- benchmark/readdir.ts | 10 +-- benchmark/rm.ts | 6 +- benchmark/stat.ts | 8 +- benchmark/write_file.ts | 12 +-- index.d.ts | 4 +- index.js | 160 ++++++++++++++++++------------------ package.json | 12 +-- src/cp.rs | 2 +- src/readdir.rs | 2 +- src/rm.rs | 2 +- 43 files changed, 243 insertions(+), 237 deletions(-) diff --git a/.gitattributes b/.gitattributes index 416dd68..8dde33b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -12,8 +12,8 @@ # Generated codes (excluded from GitHub language stats) index.js linguist-detectable=false index.d.ts linguist-detectable=false -hyper-fs.wasi-browser.js linguist-detectable=false -hyper-fs.wasi.cjs linguist-detectable=false +rush-fs.wasi-browser.js linguist-detectable=false +rush-fs.wasi.cjs linguist-detectable=false wasi-worker-browser.mjs linguist-detectable=false wasi-worker.mjs linguist-detectable=false diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 6460fdd..02b91e9 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -22,7 +22,7 @@ title: '[FEAT/BUG]' - **OS:** [e.g. macOS, Windows, Linux] - **Node.js Version:** [e.g. v18.16.0] -- **hyper-fs Version:** [e.g. 0.0.1] +- **rush-fs Version:** [e.g. 0.0.1] ## Related Issues: diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 02af3f6..aec0d18 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -1,7 +1,7 @@ name: CI env: DEBUG: napi:* - APP_NAME: hyper-fs + APP_NAME: rush-fs MACOSX_DEPLOYMENT_TARGET: '10.13' CARGO_INCREMENTAL: '1' NODE_VERSION: '20' diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b63072b..458f06f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,6 @@ # 贡献指南 -欢迎参与 hyper-fs 开发!本文档将引导你从零开始搭建环境、理解项目架构、实现新 API、编写测试,直到提交一个完整的 PR。 +欢迎参与 rush-fs 开发!本文档将引导你从零开始搭建环境、理解项目架构、实现新 API、编写测试,直到提交一个完整的 PR。 ## 目录 @@ -33,7 +33,7 @@ ```bash # 1. 克隆仓库 git clone -cd hyper-fs +cd rush-fs # 2. 确保 Rust 工具链就绪 rustup default stable @@ -67,7 +67,7 @@ pnpm format # 格式化所有代码(Prettier + cargo fmt + taplo) ## 项目架构 ``` -hyper-fs/ +rush-fs/ ├── src/ # Rust 源码(核心实现) │ ├── lib.rs # 模块注册入口 │ ├── types.rs # 共享类型(Dirent, Stats) @@ -225,7 +225,7 @@ pnpm build:debug ## 性能优化:并行化 -hyper-fs 的核心优势是利用 Rust 的并行能力。以下是常用的并行化手段: +rush-fs 的核心优势是利用 Rust 的并行能力。以下是常用的并行化手段: ### 1. jwalk — 并行目录遍历 @@ -294,7 +294,7 @@ import { tmpdir } from 'node:os' // 辅助函数:创建临时目录 function tmpDir(): string { - const dir = join(tmpdir(), `hyper-fs-test-symlink-${Date.now()}-${Math.random().toString(36).slice(2)}`) + const dir = join(tmpdir(), `rush-fs-test-symlink-${Date.now()}-${Math.random().toString(36).slice(2)}`) mkdirSync(dir, { recursive: true }) return dir } @@ -334,7 +334,7 @@ test('symlinkSync: should match node:fs behavior', (t) => { #### 2. 双跑对比测试 -同时调用 `node:fs` 和 `hyper-fs`,对比返回值。这是确保行为一致性的关键: +同时调用 `node:fs` 和 `rush-fs`,对比返回值。这是确保行为一致性的关键: ```typescript import * as nodeFs from 'node:fs' @@ -416,11 +416,11 @@ import { someSync } from '../index.js' // 对标 Node.js 原生实现 group('Some API', () => { bench('Node.js', () => fs.someSync(args)).baseline() - bench('Hyper-FS', () => someSync(args)) + bench('Rush-FS', () => someSync(args)) }) // 如果有并发选项,做并发对比 -group('Hyper-FS Concurrency', () => { +group('Rush-FS Concurrency', () => { bench('Default', () => someSync(args)).baseline() bench('4 Threads', () => someSync(args, { concurrency: 4 })) bench('8 Threads', () => someSync(args, { concurrency: 8 })) diff --git a/README.md b/README.md index eaf23bc..d902af7 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,24 @@ -# Hyper-FS +
+ +# Rush-FS

Written in Rust - NPM Version - License + NPM Version + License

A high-performance, drop-in replacement for Node.js fs module, powered by Rust.

+
## Installation ```bash -npm install hyper-fs +npm install rush-fs # or -pnpm add hyper-fs +pnpm add rush-fs ``` ## Status & Roadmap @@ -26,7 +29,7 @@ We are rewriting `fs` APIs one by one. > > - ✅: Fully Supported > - 🚧: Partially Supported / WIP -> - ✨:New feature from hyper-fs +> - ✨:New feature from rush-fs > - ❌: Not Supported Yet ### `readdir` @@ -312,7 +315,7 @@ We are rewriting `fs` APIs one by one. ## Usage ```ts -import { readdir, stat, readFile, writeFile, mkdir, rm } from 'hyper-fs' +import { readdir, stat, readFile, writeFile, mkdir, rm } from 'rush-fs' // Read directory const files = await readdir('./src') @@ -343,11 +346,11 @@ await rm('./temp', { recursive: true, force: true }) > Tested on Apple Silicon (arm64), Node.js 24.0.2, release build with LTO. > Run `pnpm build && pnpm bench` to reproduce. -### Where Hyper-FS Shines +### Where Rush-FS Shines These are the scenarios where Rust's parallelism and zero-copy I/O make a real difference: -| Scenario | Node.js | Hyper-FS | Speedup | +| Scenario | Node.js | Rush-FS | Speedup | | ------------------------------------------------ | --------- | -------- | --------- | | `readdir` recursive (node_modules, ~30k entries) | 281 ms | 23 ms | **12x** | | `glob` recursive (`**/*.rs`) | 25 ms | 1.46 ms | **17x** | @@ -364,27 +367,27 @@ These are the scenarios where Rust's parallelism and zero-copy I/O make a real d Single-file operations have a ~0.3 µs napi bridge overhead, making them roughly equivalent: -| Scenario | Node.js | Hyper-FS | Ratio | -| -------------------------- | ------- | -------- | ----- | -| `stat` (single file) | 1.45 µs | 1.77 µs | 1.2x | -| `readFile` small (Buffer) | 8.86 µs | 9.46 µs | 1.1x | -| `writeFile` small (string) | 74 µs | 66 µs | 0.9x | -| `writeFile` small (Buffer) | 115 µs | 103 µs | 0.9x | -| `appendFile` | 30 µs | 27 µs | 0.9x | +| Scenario | Node.js | Rush-FS | Ratio | +| -------------------------- | ------- | ------- | ----- | +| `stat` (single file) | 1.45 µs | 1.77 µs | 1.2x | +| `readFile` small (Buffer) | 8.86 µs | 9.46 µs | 1.1x | +| `writeFile` small (string) | 74 µs | 66 µs | 0.9x | +| `writeFile` small (Buffer) | 115 µs | 103 µs | 0.9x | +| `appendFile` | 30 µs | 27 µs | 0.9x | ### Where Node.js Wins Lightweight built-in calls where napi overhead is proportionally large: -| Scenario | Node.js | Hyper-FS | Note | -| ---------------------------- | ------- | -------- | --------------------------------- | -| `existsSync` (existing file) | 444 ns | 1.34 µs | Node.js internal fast path | -| `accessSync` F_OK | 456 ns | 1.46 µs | Same — napi overhead dominates | -| `writeFile` 4 MB string | 2.93 ms | 5.69 ms | Large string crossing napi bridge | +| Scenario | Node.js | Rush-FS | Note | +| ---------------------------- | ------- | ------- | --------------------------------- | +| `existsSync` (existing file) | 444 ns | 1.34 µs | Node.js internal fast path | +| `accessSync` F_OK | 456 ns | 1.46 µs | Same — napi overhead dominates | +| `writeFile` 4 MB string | 2.93 ms | 5.69 ms | Large string crossing napi bridge | ### Parallelism -Hyper-FS uses multi-threaded parallelism for operations that traverse the filesystem: +Rush-FS uses multi-threaded parallelism for operations that traverse the filesystem: | API | Library | `concurrency` option | Default | | --------------------- | ------------------------------------------------------------------------- | -------------------- | ------- | @@ -397,15 +400,15 @@ Single-file operations (`stat`, `readFile`, `writeFile`, `chmod`, etc.) are atom ### Key Takeaway -**Hyper-FS excels at recursive / batch filesystem operations** (readdir, glob, rm, cp) where Rust's parallel walkers deliver 2–70x speedups. For single-file operations it performs on par with Node.js. The napi bridge adds a fixed ~0.3 µs overhead per call, which only matters for sub-microsecond operations like `existsSync`. +**Rush-FS excels at recursive / batch filesystem operations** (readdir, glob, rm, cp) where Rust's parallel walkers deliver 2–70x speedups. For single-file operations it performs on par with Node.js. The napi bridge adds a fixed ~0.3 µs overhead per call, which only matters for sub-microsecond operations like `existsSync`. **`cp` benchmark detail** (Apple Silicon, release build): -| Scenario | Node.js | Hyper-FS 1T | Hyper-FS 4T | Hyper-FS 8T | -| ----------------------------------------- | --------- | ----------- | ----------- | ----------- | -| Flat dir (500 files) | 86.45 ms | 61.56 ms | 32.88 ms | 36.67 ms | -| Tree dir (breadth=4, depth=3, ~84 nodes) | 23.80 ms | 16.94 ms | 10.62 ms | 9.76 ms | -| Tree dir (breadth=3, depth=5, ~363 nodes) | 108.73 ms | 75.39 ms | 46.88 ms | 46.18 ms | +| Scenario | Node.js | Rush-FS 1T | Rush-FS 4T | Rush-FS 8T | +| ----------------------------------------- | --------- | ---------- | ---------- | ---------- | +| Flat dir (500 files) | 86.45 ms | 61.56 ms | 32.88 ms | 36.67 ms | +| Tree dir (breadth=4, depth=3, ~84 nodes) | 23.80 ms | 16.94 ms | 10.62 ms | 9.76 ms | +| Tree dir (breadth=3, depth=5, ~363 nodes) | 108.73 ms | 75.39 ms | 46.88 ms | 46.18 ms | Optimal concurrency for `cp` is **4 threads** on Apple Silicon — beyond that, I/O bandwidth becomes the bottleneck and diminishing returns set in. diff --git a/README.zh-CN.md b/README.zh-CN.md index 932d400..a7c6fe9 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -1,23 +1,26 @@ -# Hyper-FS +
+ +# Rush-FS [English](./README.md) | 中文

Written in Rust - NPM Version - License + NPM Version + License

由 Rust 驱动的高性能 Node.js fs 模块「即插即用」替代品。

+
## 安装 ```bash -npm install hyper-fs +npm install rush-fs # or -pnpm add hyper-fs +pnpm add rush-fs ``` ## 状态与路线图 @@ -28,7 +31,7 @@ pnpm add hyper-fs > > - ✅:完全支持 > - 🚧:部分支持 / 开发中 -> - ✨:hyper-fs 的新增能力 +> - ✨:rush-fs 的新增能力 > - ❌:暂未支持 ### `readdir` @@ -314,7 +317,7 @@ pnpm add hyper-fs ## 用法 ```ts -import { readdir, stat, readFile, writeFile, mkdir, rm } from 'hyper-fs' +import { readdir, stat, readFile, writeFile, mkdir, rm } from 'rush-fs' // 读取目录 const files = await readdir('./src') @@ -345,11 +348,11 @@ await rm('./temp', { recursive: true, force: true }) > 测试环境:Apple Silicon (arm64),Node.js 24.0.2,release 构建(开启 LTO)。 > 运行 `pnpm build && pnpm bench` 可复现。 -### Hyper-FS 显著更快的场景 +### Rush-FS 显著更快的场景 这些场景中 Rust 的并行遍历和零拷贝 I/O 发挥了真正优势: -| 场景 | Node.js | Hyper-FS | 加速比 | +| 场景 | Node.js | Rush-FS | 加速比 | | ------------------------------------------- | --------- | -------- | --------- | | `readdir` 递归(node_modules,约 3 万条目) | 281 ms | 23 ms | **12x** | | `glob` 递归(`**/*.rs`) | 25 ms | 1.46 ms | **17x** | @@ -366,27 +369,27 @@ await rm('./temp', { recursive: true, force: true }) 单文件操作有约 0.3 µs 的 napi 桥接开销,整体表现基本一致: -| 场景 | Node.js | Hyper-FS | 比率 | -| ---------------------------- | ------- | -------- | ---- | -| `stat`(单文件) | 1.45 µs | 1.77 µs | 1.2x | -| `readFile` 小文件(Buffer) | 8.86 µs | 9.46 µs | 1.1x | -| `writeFile` 小文件(string) | 74 µs | 66 µs | 0.9x | -| `writeFile` 小文件(Buffer) | 115 µs | 103 µs | 0.9x | -| `appendFile` | 30 µs | 27 µs | 0.9x | +| 场景 | Node.js | Rush-FS | 比率 | +| ---------------------------- | ------- | ------- | ---- | +| `stat`(单文件) | 1.45 µs | 1.77 µs | 1.2x | +| `readFile` 小文件(Buffer) | 8.86 µs | 9.46 µs | 1.1x | +| `writeFile` 小文件(string) | 74 µs | 66 µs | 0.9x | +| `writeFile` 小文件(Buffer) | 115 µs | 103 µs | 0.9x | +| `appendFile` | 30 µs | 27 µs | 0.9x | ### Node.js 更快的场景 极轻量级的内置调用,napi 开销占比较大: -| 场景 | Node.js | Hyper-FS | 说明 | -| -------------------------- | ------- | -------- | ------------------------ | -| `existsSync`(已存在文件) | 444 ns | 1.34 µs | Node.js 内部有 fast path | -| `accessSync` F_OK | 456 ns | 1.46 µs | 同上——napi 开销占主导 | -| `writeFile` 4 MB string | 2.93 ms | 5.69 ms | 大字符串跨 napi 桥传输 | +| 场景 | Node.js | Rush-FS | 说明 | +| -------------------------- | ------- | ------- | ------------------------ | +| `existsSync`(已存在文件) | 444 ns | 1.34 µs | Node.js 内部有 fast path | +| `accessSync` F_OK | 456 ns | 1.46 µs | 同上——napi 开销占主导 | +| `writeFile` 4 MB string | 2.93 ms | 5.69 ms | 大字符串跨 napi 桥传输 | ### 并行支持 -Hyper-FS 在文件系统遍历类操作中使用多线程并行: +Rush-FS 在文件系统遍历类操作中使用多线程并行: | API | 并行库 | `concurrency` 选项 | 默认值 | | ----------------- | ------------------------------------------------------------------------- | ------------------ | ------ | @@ -399,15 +402,15 @@ Hyper-FS 在文件系统遍历类操作中使用多线程并行: ### 核心结论 -**Hyper-FS 在递归/批量文件系统操作上表现卓越**(readdir、glob、rm、cp),Rust 的并行遍历器带来 2–70 倍加速。单文件操作与 Node.js 基本持平。napi 桥接带来固定约 0.3 µs 的每次调用开销,仅在亚微秒级操作(如 `existsSync`)中有感知。 +**Rush-FS 在递归/批量文件系统操作上表现卓越**(readdir、glob、rm、cp),Rust 的并行遍历器带来 2–70 倍加速。单文件操作与 Node.js 基本持平。napi 桥接带来固定约 0.3 µs 的每次调用开销,仅在亚微秒级操作(如 `existsSync`)中有感知。 **`cp` 基准详情**(Apple Silicon,release 构建): -| 场景 | Node.js | Hyper-FS 1 线程 | Hyper-FS 4 线程 | Hyper-FS 8 线程 | -| ------------------------------------- | --------- | --------------- | --------------- | --------------- | -| 平铺目录(500 文件) | 86.45 ms | 61.56 ms | 32.88 ms | 36.67 ms | -| 树形目录(宽度=4,深度=3,~84 节点) | 23.80 ms | 16.94 ms | 10.62 ms | 9.76 ms | -| 树形目录(宽度=3,深度=5,~363 节点) | 108.73 ms | 75.39 ms | 46.88 ms | 46.18 ms | +| 场景 | Node.js | Rush-FS 1 线程 | Rush-FS 4 线程 | Rush-FS 8 线程 | +| ------------------------------------- | --------- | -------------- | -------------- | -------------- | +| 平铺目录(500 文件) | 86.45 ms | 61.56 ms | 32.88 ms | 36.67 ms | +| 树形目录(宽度=4,深度=3,~84 节点) | 23.80 ms | 16.94 ms | 10.62 ms | 9.76 ms | +| 树形目录(宽度=3,深度=5,~363 节点) | 108.73 ms | 75.39 ms | 46.88 ms | 46.18 ms | `cp` 的最优并发数在 Apple Silicon 上为 **4 线程**——超过后受 I/O 带宽限制,收益趋于平稳。 diff --git a/__test__/access.spec.ts b/__test__/access.spec.ts index 8543ca8..2b1ff33 100644 --- a/__test__/access.spec.ts +++ b/__test__/access.spec.ts @@ -10,7 +10,7 @@ const W_OK = 2 const X_OK = 1 function tmpFile(name: string): string { - const dir = join(tmpdir(), `hyper-fs-test-access-${Date.now()}-${Math.random().toString(36).slice(2)}`) + const dir = join(tmpdir(), `rush-fs-test-access-${Date.now()}-${Math.random().toString(36).slice(2)}`) nodeFs.mkdirSync(dir, { recursive: true }) const file = join(dir, name) nodeFs.writeFileSync(file, 'test') diff --git a/__test__/chmod.spec.ts b/__test__/chmod.spec.ts index 07a9e34..fd5e194 100644 --- a/__test__/chmod.spec.ts +++ b/__test__/chmod.spec.ts @@ -6,7 +6,7 @@ import { join } from 'node:path' import { tmpdir } from 'node:os' function tmpFile(name: string): string { - const dir = join(tmpdir(), `hyper-fs-test-chmod-${Date.now()}-${Math.random().toString(36).slice(2)}`) + const dir = join(tmpdir(), `rush-fs-test-chmod-${Date.now()}-${Math.random().toString(36).slice(2)}`) mkdirSync(dir, { recursive: true }) const file = join(dir, name) writeFileSync(file, 'test') diff --git a/__test__/chown.spec.ts b/__test__/chown.spec.ts index 0433ee7..0c37a92 100644 --- a/__test__/chown.spec.ts +++ b/__test__/chown.spec.ts @@ -5,7 +5,7 @@ import { join } from 'node:path' import { tmpdir } from 'node:os' function tmpFile(name: string): string { - const dir = join(tmpdir(), `hyper-fs-test-chown-${Date.now()}-${Math.random().toString(36).slice(2)}`) + const dir = join(tmpdir(), `rush-fs-test-chown-${Date.now()}-${Math.random().toString(36).slice(2)}`) mkdirSync(dir, { recursive: true }) const file = join(dir, name) writeFileSync(file, 'test') diff --git a/__test__/copy_file.spec.ts b/__test__/copy_file.spec.ts index 7a78043..049f1e6 100644 --- a/__test__/copy_file.spec.ts +++ b/__test__/copy_file.spec.ts @@ -6,7 +6,7 @@ import { join } from 'node:path' import { tmpdir } from 'node:os' function tmpDir(): string { - const dir = join(tmpdir(), `hyper-fs-test-copy-${Date.now()}-${Math.random().toString(36).slice(2)}`) + const dir = join(tmpdir(), `rush-fs-test-copy-${Date.now()}-${Math.random().toString(36).slice(2)}`) mkdirSync(dir, { recursive: true }) return dir } diff --git a/__test__/cp.spec.ts b/__test__/cp.spec.ts index 9245d88..337eca1 100644 --- a/__test__/cp.spec.ts +++ b/__test__/cp.spec.ts @@ -6,7 +6,7 @@ import { join } from 'node:path' import { tmpdir } from 'node:os' function tmpDir(name: string): string { - const dir = join(tmpdir(), `hyper-fs-test-cp-${Date.now()}-${Math.random().toString(36).slice(2)}-${name}`) + const dir = join(tmpdir(), `rush-fs-test-cp-${Date.now()}-${Math.random().toString(36).slice(2)}-${name}`) mkdirSync(dir, { recursive: true }) return dir } diff --git a/__test__/encoding.spec.ts b/__test__/encoding.spec.ts index dd9e117..9b8f462 100644 --- a/__test__/encoding.spec.ts +++ b/__test__/encoding.spec.ts @@ -6,7 +6,7 @@ import { join } from 'node:path' import { tmpdir } from 'node:os' function tmpFile(name: string, content?: string | Buffer): string { - const dir = join(tmpdir(), `hyper-fs-test-enc-${Date.now()}-${Math.random().toString(36).slice(2)}`) + const dir = join(tmpdir(), `rush-fs-test-enc-${Date.now()}-${Math.random().toString(36).slice(2)}`) mkdirSync(dir, { recursive: true }) const file = join(dir, name) if (content !== undefined) { diff --git a/__test__/link.spec.ts b/__test__/link.spec.ts index 42052f0..7059240 100644 --- a/__test__/link.spec.ts +++ b/__test__/link.spec.ts @@ -5,7 +5,7 @@ import { join } from 'node:path' import { tmpdir } from 'node:os' function tmpDir(): string { - const dir = join(tmpdir(), `hyper-fs-test-link-${Date.now()}-${Math.random().toString(36).slice(2)}`) + const dir = join(tmpdir(), `rush-fs-test-link-${Date.now()}-${Math.random().toString(36).slice(2)}`) mkdirSync(dir, { recursive: true }) return dir } @@ -64,7 +64,7 @@ test('linkSync: should match node:fs behavior (same inode)', (t) => { linkSync(src, dest) const nodeStat = nodeStatSync(dest) const hyperStat = statSync(dest) - // ino is 0 on Windows in hyper-fs; only compare on platforms where we report it + // ino is 0 on Windows in rush-fs; only compare on platforms where we report it if (process.platform !== 'win32') { t.is(hyperStat.ino, nodeStat.ino) } else { diff --git a/__test__/mkdir.spec.ts b/__test__/mkdir.spec.ts index 2229bd2..12f8ff9 100644 --- a/__test__/mkdir.spec.ts +++ b/__test__/mkdir.spec.ts @@ -6,7 +6,7 @@ import { join } from 'node:path' import { tmpdir } from 'node:os' function tmpPath(name: string): string { - return join(tmpdir(), `hyper-fs-test-mkdir-${Date.now()}-${name}`) + return join(tmpdir(), `rush-fs-test-mkdir-${Date.now()}-${name}`) } test('mkdirSync: should create a directory', (t) => { diff --git a/__test__/mkdtemp.spec.ts b/__test__/mkdtemp.spec.ts index 494e8ff..8ca652a 100644 --- a/__test__/mkdtemp.spec.ts +++ b/__test__/mkdtemp.spec.ts @@ -5,7 +5,7 @@ import { existsSync } from 'node:fs' import { join } from 'node:path' import { tmpdir } from 'node:os' -const prefix = join(tmpdir(), 'hyper-fs-test-mkdtemp-') +const prefix = join(tmpdir(), 'rush-fs-test-mkdtemp-') // ===== sync ===== diff --git a/__test__/read_file.spec.ts b/__test__/read_file.spec.ts index 5deeeba..3a1fc66 100644 --- a/__test__/read_file.spec.ts +++ b/__test__/read_file.spec.ts @@ -13,7 +13,7 @@ test('readFileSync: should read file as Buffer by default', (t) => { test('readFileSync: should read file as string with encoding=utf8', (t) => { const result = readFileSync('./package.json', { encoding: 'utf8' }) t.is(typeof result, 'string') - t.true((result as string).includes('hyper-fs')) + t.true((result as string).includes('rush-fs')) }) test('readFileSync: should match node:fs readFileSync', (t) => { @@ -29,7 +29,7 @@ test('readFileSync: should throw on non-existent file', (t) => { test('readFile: async should read file', async (t) => { const result = await readFile('./package.json', { encoding: 'utf8' }) t.is(typeof result, 'string') - t.true((result as string).includes('hyper-fs')) + t.true((result as string).includes('rush-fs')) }) test('readFile: async should throw on non-existent file', async (t) => { diff --git a/__test__/readlink.spec.ts b/__test__/readlink.spec.ts index 1e38863..8b92aed 100644 --- a/__test__/readlink.spec.ts +++ b/__test__/readlink.spec.ts @@ -5,7 +5,7 @@ import { join } from 'node:path' import { tmpdir } from 'node:os' function tmpDir(): string { - const dir = join(tmpdir(), `hyper-fs-test-readlink-${Date.now()}-${Math.random().toString(36).slice(2)}`) + const dir = join(tmpdir(), `rush-fs-test-readlink-${Date.now()}-${Math.random().toString(36).slice(2)}`) mkdirSync(dir, { recursive: true }) return dir } diff --git a/__test__/realpath.spec.ts b/__test__/realpath.spec.ts index 5ba8afa..686bc7d 100644 --- a/__test__/realpath.spec.ts +++ b/__test__/realpath.spec.ts @@ -6,7 +6,7 @@ import { join } from 'node:path' import { tmpdir } from 'node:os' function tmpDir(): string { - const dir = join(tmpdir(), `hyper-fs-test-realpath-${Date.now()}-${Math.random().toString(36).slice(2)}`) + const dir = join(tmpdir(), `rush-fs-test-realpath-${Date.now()}-${Math.random().toString(36).slice(2)}`) nodeFs.mkdirSync(dir, { recursive: true }) return dir } diff --git a/__test__/rename.spec.ts b/__test__/rename.spec.ts index 4167146..a5f4168 100644 --- a/__test__/rename.spec.ts +++ b/__test__/rename.spec.ts @@ -6,7 +6,7 @@ import { join } from 'node:path' import { tmpdir } from 'node:os' function tmpDir(): string { - const dir = join(tmpdir(), `hyper-fs-test-rename-${Date.now()}-${Math.random().toString(36).slice(2)}`) + const dir = join(tmpdir(), `rush-fs-test-rename-${Date.now()}-${Math.random().toString(36).slice(2)}`) mkdirSync(dir, { recursive: true }) return dir } diff --git a/__test__/rm.spec.ts b/__test__/rm.spec.ts index 9bbee49..ef66318 100644 --- a/__test__/rm.spec.ts +++ b/__test__/rm.spec.ts @@ -6,7 +6,7 @@ import { tmpdir } from 'node:os' // Helper function to create a temporary directory function createTempDir(): string { - const tempDir = join(tmpdir(), `hyper-fs-test-${Date.now()}-${Math.random().toString(36).substring(7)}`) + const tempDir = join(tmpdir(), `rush-fs-test-${Date.now()}-${Math.random().toString(36).substring(7)}`) mkdirSync(tempDir, { recursive: true }) return tempDir } diff --git a/__test__/rmdir.spec.ts b/__test__/rmdir.spec.ts index 0b3172c..e23180b 100644 --- a/__test__/rmdir.spec.ts +++ b/__test__/rmdir.spec.ts @@ -5,7 +5,7 @@ import { join } from 'node:path' import { tmpdir } from 'node:os' function tmpDir(name: string): string { - const dir = join(tmpdir(), `hyper-fs-test-rmdir-${Date.now()}-${name}`) + const dir = join(tmpdir(), `rush-fs-test-rmdir-${Date.now()}-${name}`) nodeMkdirSync(dir, { recursive: true }) return dir } @@ -28,7 +28,7 @@ test('rmdirSync: should throw on non-empty directory', (t) => { }) test('rmdirSync: should throw on non-existent path', (t) => { - t.throws(() => rmdirSync('/tmp/hyper-fs-no-such-dir-' + Date.now()), { message: /ENOENT/ }) + t.throws(() => rmdirSync('/tmp/rush-fs-no-such-dir-' + Date.now()), { message: /ENOENT/ }) }) test('rmdir: async should remove empty directory', async (t) => { diff --git a/__test__/stat.spec.ts b/__test__/stat.spec.ts index da87b95..5ff0c51 100644 --- a/__test__/stat.spec.ts +++ b/__test__/stat.spec.ts @@ -5,7 +5,7 @@ import { join } from 'node:path' import { tmpdir } from 'node:os' function tmpDir(): string { - const dir = join(tmpdir(), `hyper-fs-test-stat-${Date.now()}-${Math.random().toString(36).slice(2)}`) + const dir = join(tmpdir(), `rush-fs-test-stat-${Date.now()}-${Math.random().toString(36).slice(2)}`) nodeFs.mkdirSync(dir, { recursive: true }) return dir } diff --git a/__test__/symlink.spec.ts b/__test__/symlink.spec.ts index 42fb618..b7eb531 100644 --- a/__test__/symlink.spec.ts +++ b/__test__/symlink.spec.ts @@ -6,7 +6,7 @@ import { join } from 'node:path' import { tmpdir } from 'node:os' function tmpDir(): string { - const dir = join(tmpdir(), `hyper-fs-test-symlink-${Date.now()}-${Math.random().toString(36).slice(2)}`) + const dir = join(tmpdir(), `rush-fs-test-symlink-${Date.now()}-${Math.random().toString(36).slice(2)}`) mkdirSync(dir, { recursive: true }) return dir } diff --git a/__test__/truncate.spec.ts b/__test__/truncate.spec.ts index 1b41473..d303743 100644 --- a/__test__/truncate.spec.ts +++ b/__test__/truncate.spec.ts @@ -6,7 +6,7 @@ import { join } from 'node:path' import { tmpdir } from 'node:os' function tmpFile(name: string): string { - const dir = join(tmpdir(), `hyper-fs-test-truncate-${Date.now()}-${Math.random().toString(36).slice(2)}`) + const dir = join(tmpdir(), `rush-fs-test-truncate-${Date.now()}-${Math.random().toString(36).slice(2)}`) mkdirSync(dir, { recursive: true }) const file = join(dir, name) writeFileSync(file, 'hello world 12345') diff --git a/__test__/unlink.spec.ts b/__test__/unlink.spec.ts index 092dc23..94d6cea 100644 --- a/__test__/unlink.spec.ts +++ b/__test__/unlink.spec.ts @@ -6,7 +6,7 @@ import { join } from 'node:path' import { tmpdir } from 'node:os' function createTempFile(): string { - const dir = join(tmpdir(), `hyper-fs-test-unlink-${Date.now()}-${Math.random().toString(36).slice(2)}`) + const dir = join(tmpdir(), `rush-fs-test-unlink-${Date.now()}-${Math.random().toString(36).slice(2)}`) mkdirSync(dir, { recursive: true }) const file = join(dir, 'test.txt') writeFileSync(file, 'hello') @@ -21,11 +21,11 @@ test('unlinkSync: should remove a file', (t) => { }) test('unlinkSync: should throw on non-existent file', (t) => { - t.throws(() => unlinkSync('/tmp/hyper-fs-no-such-file-' + Date.now()), { message: /ENOENT/ }) + t.throws(() => unlinkSync('/tmp/rush-fs-no-such-file-' + Date.now()), { message: /ENOENT/ }) }) test('unlinkSync: should throw on directory', (t) => { - const dir = join(tmpdir(), `hyper-fs-test-unlink-dir-${Date.now()}`) + const dir = join(tmpdir(), `rush-fs-test-unlink-dir-${Date.now()}`) mkdirSync(dir) t.throws(() => unlinkSync(dir), { message: /EPERM/ }) nodeRmdirSync(dir) @@ -39,13 +39,13 @@ test('unlink: async should remove a file', async (t) => { }) test('unlink: async should throw on non-existent file', async (t) => { - await t.throwsAsync(async () => await unlink('/tmp/hyper-fs-no-such-' + Date.now()), { message: /ENOENT/ }) + await t.throwsAsync(async () => await unlink('/tmp/rush-fs-no-such-' + Date.now()), { message: /ENOENT/ }) }) // ===== dual-run comparison ===== test('dual-run: unlinkSync should produce same result as node:fs', (t) => { - const dir = join(tmpdir(), `hyper-fs-test-unlink-dual-${Date.now()}-${Math.random().toString(36).slice(2)}`) + const dir = join(tmpdir(), `rush-fs-test-unlink-dual-${Date.now()}-${Math.random().toString(36).slice(2)}`) mkdirSync(dir, { recursive: true }) const nodeFile = join(dir, 'node.txt') diff --git a/__test__/utimes.spec.ts b/__test__/utimes.spec.ts index b5358e0..0216dff 100644 --- a/__test__/utimes.spec.ts +++ b/__test__/utimes.spec.ts @@ -5,7 +5,7 @@ import { join } from 'node:path' import { tmpdir } from 'node:os' function tmpFile(name: string): string { - const dir = join(tmpdir(), `hyper-fs-test-utimes-${Date.now()}-${Math.random().toString(36).slice(2)}`) + const dir = join(tmpdir(), `rush-fs-test-utimes-${Date.now()}-${Math.random().toString(36).slice(2)}`) mkdirSync(dir, { recursive: true }) const file = join(dir, name) writeFileSync(file, 'test') @@ -13,7 +13,7 @@ function tmpFile(name: string): string { } function tmpDirPath(name: string): string { - const dir = join(tmpdir(), `hyper-fs-test-utimes-${Date.now()}-${Math.random().toString(36).slice(2)}`) + const dir = join(tmpdir(), `rush-fs-test-utimes-${Date.now()}-${Math.random().toString(36).slice(2)}`) const target = join(dir, name) mkdirSync(target, { recursive: true }) return target diff --git a/__test__/write_file.spec.ts b/__test__/write_file.spec.ts index 723f9b4..81b8e2e 100644 --- a/__test__/write_file.spec.ts +++ b/__test__/write_file.spec.ts @@ -6,7 +6,7 @@ import { join } from 'node:path' import { tmpdir } from 'node:os' function tmpFile(name: string): string { - const dir = join(tmpdir(), `hyper-fs-test-write-${Date.now()}-${Math.random().toString(36).slice(2)}`) + const dir = join(tmpdir(), `rush-fs-test-write-${Date.now()}-${Math.random().toString(36).slice(2)}`) mkdirSync(dir, { recursive: true }) return join(dir, name) } diff --git a/benchmark/copy_file.ts b/benchmark/copy_file.ts index 302c29f..2af7b0b 100644 --- a/benchmark/copy_file.ts +++ b/benchmark/copy_file.ts @@ -3,7 +3,7 @@ import * as path from 'node:path' import * as os from 'node:os' import { copyFileSync } from '../index.js' -const tmpDir = path.join(os.tmpdir(), `hyper-fs-bench-copyfile-${Date.now()}`) +const tmpDir = path.join(os.tmpdir(), `rush-fs-bench-copyfile-${Date.now()}`) fs.mkdirSync(tmpDir, { recursive: true }) // Prepare source files @@ -54,19 +54,19 @@ const getDest = () => path.join(tmpDir, `dest-${counter++}.txt`) // 1. Small file copy runGroup('copyFile (small 11B)', [ { name: 'Node.js', fn: () => fs.copyFileSync(smallSrc, getDest()) }, - { name: 'Hyper-FS', fn: () => copyFileSync(smallSrc, getDest()) }, + { name: 'Rush-FS', fn: () => copyFileSync(smallSrc, getDest()) }, ]) // 2. Medium file copy runGroup('copyFile (64KB)', [ { name: 'Node.js', fn: () => fs.copyFileSync(mediumSrc, getDest()) }, - { name: 'Hyper-FS', fn: () => copyFileSync(mediumSrc, getDest()) }, + { name: 'Rush-FS', fn: () => copyFileSync(mediumSrc, getDest()) }, ]) // 3. Large file copy runGroup('copyFile (4MB)', [ { name: 'Node.js', fn: () => fs.copyFileSync(largeSrc, getDest()) }, - { name: 'Hyper-FS', fn: () => copyFileSync(largeSrc, getDest()) }, + { name: 'Rush-FS', fn: () => copyFileSync(largeSrc, getDest()) }, ]) // Cleanup diff --git a/benchmark/cp.ts b/benchmark/cp.ts index 2d78564..2d1b555 100644 --- a/benchmark/cp.ts +++ b/benchmark/cp.ts @@ -4,8 +4,8 @@ import * as os from 'node:os' import { cpSync as hyperCpSync } from '../index.js' const tmpDir = os.tmpdir() -const baseDir = path.join(tmpDir, 'hyper-fs-bench-cp') -const srcBase = path.join(tmpDir, 'hyper-fs-bench-cp-src') +const baseDir = path.join(tmpDir, 'rush-fs-bench-cp') +const srcBase = path.join(tmpDir, 'rush-fs-bench-cp-src') if (fs.existsSync(baseDir)) fs.rmSync(baseDir, { recursive: true, force: true }) if (fs.existsSync(srcBase)) fs.rmSync(srcBase, { recursive: true, force: true }) @@ -56,15 +56,15 @@ const implementations = [ fn: (src: string, dest: string) => fs.cpSync(src, dest, { recursive: true }), }, { - name: 'Hyper-FS (1 thread)', + name: 'Rush-FS (1 thread)', fn: (src: string, dest: string) => hyperCpSync(src, dest, { recursive: true, concurrency: 1 }), }, { - name: 'Hyper-FS (4 threads)', + name: 'Rush-FS (4 threads)', fn: (src: string, dest: string) => hyperCpSync(src, dest, { recursive: true, concurrency: 4 }), }, { - name: 'Hyper-FS (8 threads)', + name: 'Rush-FS (8 threads)', fn: (src: string, dest: string) => hyperCpSync(src, dest, { recursive: true, concurrency: 8 }), }, ] diff --git a/benchmark/exists.ts b/benchmark/exists.ts index 42b20a3..2505668 100644 --- a/benchmark/exists.ts +++ b/benchmark/exists.ts @@ -4,32 +4,32 @@ import { existsSync, accessSync } from '../index.js' const existingFile = 'package.json' const existingDir = 'node_modules' -const nonExistent = '/tmp/hyper-fs-bench-nonexistent-path-12345' +const nonExistent = '/tmp/rush-fs-bench-nonexistent-path-12345' console.log('Benchmarking exists / access') // 1. existsSync — existing file group('exists (existing file)', () => { bench('Node.js', () => fs.existsSync(existingFile)).baseline() - bench('Hyper-FS', () => existsSync(existingFile)) + bench('Rush-FS', () => existsSync(existingFile)) }) // 2. existsSync — non-existent path group('exists (non-existent)', () => { bench('Node.js', () => fs.existsSync(nonExistent)).baseline() - bench('Hyper-FS', () => existsSync(nonExistent)) + bench('Rush-FS', () => existsSync(nonExistent)) }) // 3. accessSync — existing file (F_OK) group('access (existing file, F_OK)', () => { bench('Node.js', () => fs.accessSync(existingFile, fs.constants.F_OK)).baseline() - bench('Hyper-FS', () => accessSync(existingFile)) + bench('Rush-FS', () => accessSync(existingFile)) }) // 4. accessSync — existing dir (R_OK) group('access (existing dir, R_OK)', () => { bench('Node.js', () => fs.accessSync(existingDir, fs.constants.R_OK)).baseline() - bench('Hyper-FS', () => accessSync(existingDir, fs.constants.R_OK)) + bench('Rush-FS', () => accessSync(existingDir, fs.constants.R_OK)) }) // 5. Batch exists — check many files rapidly @@ -40,7 +40,7 @@ group(`exists batch (${files.length} files)`, () => { bench('Node.js', () => { for (const f of files) fs.existsSync(f) }).baseline() - bench('Hyper-FS', () => { + bench('Rush-FS', () => { for (const f of files) existsSync(f) }) }) diff --git a/benchmark/glob.ts b/benchmark/glob.ts index 9e3d55c..0d4e250 100644 --- a/benchmark/glob.ts +++ b/benchmark/glob.ts @@ -16,14 +16,14 @@ console.log(`Benchmarking glob in: ${cwd}`) group('Glob (Simple: src/*.rs)', () => { bench('node-glob', () => nodeGlobSync(patternSimple, { cwd })) bench('fast-glob', () => fastGlob.sync(patternSimple, { cwd })) - bench('hyper-fs', () => hyperGlobSync(patternSimple, { cwd })).baseline() + bench('rush-fs', () => hyperGlobSync(patternSimple, { cwd })).baseline() }) // 2. Recursive Glob group('Glob (Recursive: **/*.rs)', () => { bench('node-glob', () => nodeGlobSync(patternRecursive, { cwd })) bench('fast-glob', () => fastGlob.sync(patternRecursive, { cwd })) - bench('hyper-fs', () => hyperGlobSync(patternRecursive, { cwd })).baseline() + bench('rush-fs', () => hyperGlobSync(patternRecursive, { cwd })).baseline() }) // 3. Deep Recursive (if node_modules exists) @@ -34,8 +34,8 @@ group('Glob (Deep: node_modules/**/*.json)', () => { if (hasNodeModules) { bench('node-glob', () => nodeGlobSync(patternDeep, { cwd })) bench('fast-glob', () => fastGlob.sync(patternDeep, { cwd })) - bench('hyper-fs', () => hyperGlobSync(patternDeep, { cwd })).baseline() - bench('hyper-fs (8 threads)', () => hyperGlobSync(patternDeep, { cwd, concurrency: 8 })) + bench('rush-fs', () => hyperGlobSync(patternDeep, { cwd })).baseline() + bench('rush-fs (8 threads)', () => hyperGlobSync(patternDeep, { cwd, concurrency: 8 })) } }) diff --git a/benchmark/mkdir.ts b/benchmark/mkdir.ts index 8db23b5..30c165f 100644 --- a/benchmark/mkdir.ts +++ b/benchmark/mkdir.ts @@ -3,7 +3,7 @@ import * as path from 'node:path' import * as os from 'node:os' import { mkdirSync } from '../index.js' -const tmpDir = path.join(os.tmpdir(), `hyper-fs-bench-mkdir-${Date.now()}`) +const tmpDir = path.join(os.tmpdir(), `rush-fs-bench-mkdir-${Date.now()}`) fs.mkdirSync(tmpDir, { recursive: true }) const iterations = 100 @@ -51,7 +51,7 @@ runGroup('mkdir (single dir)', [ }, }, { - name: 'Hyper-FS', + name: 'Rush-FS', fn: () => { const dir = path.join(tmpDir, `hyper-single-${counter++}`) mkdirSync(dir) @@ -69,7 +69,7 @@ runGroup('mkdir (recursive, depth=5)', [ }, }, { - name: 'Hyper-FS', + name: 'Rush-FS', fn: () => { const dir = path.join(tmpDir, `hyper-deep-${counter++}`, 'a', 'b', 'c', 'd') mkdirSync(dir, { recursive: true }) @@ -87,7 +87,7 @@ runGroup('mkdir (recursive, already exists)', [ fn: () => fs.mkdirSync(existingDir, { recursive: true }), }, { - name: 'Hyper-FS', + name: 'Rush-FS', fn: () => mkdirSync(existingDir, { recursive: true }), }, ]) diff --git a/benchmark/read_file.ts b/benchmark/read_file.ts index ab1fc57..c78097d 100644 --- a/benchmark/read_file.ts +++ b/benchmark/read_file.ts @@ -4,7 +4,7 @@ import * as path from 'node:path' import * as os from 'node:os' import { readFileSync } from '../index.js' -const tmpDir = path.join(os.tmpdir(), `hyper-fs-bench-readfile-${Date.now()}`) +const tmpDir = path.join(os.tmpdir(), `rush-fs-bench-readfile-${Date.now()}`) fs.mkdirSync(tmpDir, { recursive: true }) // Prepare test files of various sizes @@ -24,43 +24,43 @@ console.log('Benchmarking readFile with various file sizes') // 1. Small file — Buffer group('readFile (small 11B, Buffer)', () => { bench('Node.js', () => fs.readFileSync(smallFile)).baseline() - bench('Hyper-FS', () => readFileSync(smallFile)) + bench('Rush-FS', () => readFileSync(smallFile)) }) // 2. Small file — UTF-8 string group('readFile (small 11B, utf8)', () => { bench('Node.js', () => fs.readFileSync(smallFile, 'utf8')).baseline() - bench('Hyper-FS', () => readFileSync(smallFile, { encoding: 'utf8' })) + bench('Rush-FS', () => readFileSync(smallFile, { encoding: 'utf8' })) }) // 3. Medium file — Buffer group('readFile (64KB, Buffer)', () => { bench('Node.js', () => fs.readFileSync(mediumFile)).baseline() - bench('Hyper-FS', () => readFileSync(mediumFile)) + bench('Rush-FS', () => readFileSync(mediumFile)) }) // 4. Medium file — UTF-8 string group('readFile (64KB, utf8)', () => { bench('Node.js', () => fs.readFileSync(mediumFile, 'utf8')).baseline() - bench('Hyper-FS', () => readFileSync(mediumFile, { encoding: 'utf8' })) + bench('Rush-FS', () => readFileSync(mediumFile, { encoding: 'utf8' })) }) // 5. Large file — Buffer group('readFile (4MB, Buffer)', () => { bench('Node.js', () => fs.readFileSync(largeFile)).baseline() - bench('Hyper-FS', () => readFileSync(largeFile)) + bench('Rush-FS', () => readFileSync(largeFile)) }) // 6. Large file — UTF-8 string group('readFile (4MB, utf8)', () => { bench('Node.js', () => fs.readFileSync(largeFile, 'utf8')).baseline() - bench('Hyper-FS', () => readFileSync(largeFile, { encoding: 'utf8' })) + bench('Rush-FS', () => readFileSync(largeFile, { encoding: 'utf8' })) }) // 7. Real file (package.json) — UTF-8 string group('readFile (package.json, utf8)', () => { bench('Node.js', () => fs.readFileSync(realFile, 'utf8')).baseline() - bench('Hyper-FS', () => readFileSync(realFile, { encoding: 'utf8' })) + bench('Rush-FS', () => readFileSync(realFile, { encoding: 'utf8' })) }) await run({ colors: true }) diff --git a/benchmark/readdir.ts b/benchmark/readdir.ts index da1797e..e7d2d49 100644 --- a/benchmark/readdir.ts +++ b/benchmark/readdir.ts @@ -16,23 +16,23 @@ try { // 1. Basic readdir group('Readdir (names only)', () => { bench('Node.js', () => fs.readdirSync(dir)).baseline() - bench('Hyper-FS', () => readdirSync(dir)) + bench('Rush-FS', () => readdirSync(dir)) }) // 2. With File Types group('Readdir (withFileTypes)', () => { bench('Node.js', () => fs.readdirSync(dir, { withFileTypes: true })).baseline() - bench('Hyper-FS', () => readdirSync(dir, { withFileTypes: true })) + bench('Rush-FS', () => readdirSync(dir, { withFileTypes: true })) }) // 3. Recursive + withFileTypes group('Readdir (recursive + withFileTypes)', () => { bench('Node.js', () => fs.readdirSync(dir, { recursive: true, withFileTypes: true })).baseline() - bench('Hyper-FS', () => readdirSync(dir, { recursive: true, withFileTypes: true })) + bench('Rush-FS', () => readdirSync(dir, { recursive: true, withFileTypes: true })) }) -// 4. Concurrency (Hyper-FS only comparison) -group('Hyper-FS Concurrency', () => { +// 4. Concurrency (Rush-FS only comparison) +group('Rush-FS Concurrency', () => { bench('Default (Auto)', () => readdirSync(dir, { recursive: true })).baseline() bench('4 Threads', () => readdirSync(dir, { recursive: true, concurrency: 4 })) }) diff --git a/benchmark/rm.ts b/benchmark/rm.ts index 05333a9..be7055b 100644 --- a/benchmark/rm.ts +++ b/benchmark/rm.ts @@ -4,7 +4,7 @@ import * as os from 'node:os' import { rmSync as hyperRmSync } from '../index.js' const tmpDir = os.tmpdir() -const baseDir = path.join(tmpDir, 'hyper-fs-bench-rm') +const baseDir = path.join(tmpDir, 'rush-fs-bench-rm') if (fs.existsSync(baseDir)) { fs.rmSync(baseDir, { recursive: true, force: true }) @@ -44,9 +44,9 @@ function createTreeStructure(dir: string, breadth: number, depth: number) { const implementations = [ { name: 'Node.js', fn: (p: string) => fs.rmSync(p, { recursive: true, force: true }) }, - { name: 'Hyper-FS', fn: (p: string) => hyperRmSync(p, { recursive: true, force: true }) }, + { name: 'Rush-FS', fn: (p: string) => hyperRmSync(p, { recursive: true, force: true }) }, { - name: 'Hyper-FS (4 threads)', + name: 'Rush-FS (4 threads)', fn: (p: string) => hyperRmSync(p, { recursive: true, force: true, concurrency: 4 }), }, ] diff --git a/benchmark/stat.ts b/benchmark/stat.ts index 56e77f2..9f8ecf7 100644 --- a/benchmark/stat.ts +++ b/benchmark/stat.ts @@ -10,19 +10,19 @@ console.log(`Benchmarking stat on: ${targetFile} and ${targetDir}`) // 1. stat on a file group('stat (file)', () => { bench('Node.js', () => fs.statSync(targetFile)).baseline() - bench('Hyper-FS', () => statSync(targetFile)) + bench('Rush-FS', () => statSync(targetFile)) }) // 2. stat on a directory group('stat (directory)', () => { bench('Node.js', () => fs.statSync(targetDir)).baseline() - bench('Hyper-FS', () => statSync(targetDir)) + bench('Rush-FS', () => statSync(targetDir)) }) // 3. lstat on a file group('lstat (file)', () => { bench('Node.js', () => fs.lstatSync(targetFile)).baseline() - bench('Hyper-FS', () => lstatSync(targetFile)) + bench('Rush-FS', () => lstatSync(targetFile)) }) // 4. Batch stat — stat multiple files in sequence @@ -33,7 +33,7 @@ group(`stat batch (${files.length} files)`, () => { bench('Node.js', () => { for (const f of files) fs.statSync(f) }).baseline() - bench('Hyper-FS', () => { + bench('Rush-FS', () => { for (const f of files) statSync(f) }) }) diff --git a/benchmark/write_file.ts b/benchmark/write_file.ts index f7e13a1..4fd24a1 100644 --- a/benchmark/write_file.ts +++ b/benchmark/write_file.ts @@ -3,7 +3,7 @@ import * as path from 'node:path' import * as os from 'node:os' import { writeFileSync, appendFileSync } from '../index.js' -const tmpDir = path.join(os.tmpdir(), `hyper-fs-bench-writefile-${Date.now()}`) +const tmpDir = path.join(os.tmpdir(), `rush-fs-bench-writefile-${Date.now()}`) fs.mkdirSync(tmpDir, { recursive: true }) const smallData = 'hello world' @@ -53,25 +53,25 @@ const getPath = () => path.join(tmpDir, `file-${counter++}.txt`) // 1. Small string write runGroup('writeFile (small 11B, string)', [ { name: 'Node.js', fn: () => fs.writeFileSync(getPath(), smallData) }, - { name: 'Hyper-FS', fn: () => writeFileSync(getPath(), smallData) }, + { name: 'Rush-FS', fn: () => writeFileSync(getPath(), smallData) }, ]) // 2. Medium string write runGroup('writeFile (64KB, string)', [ { name: 'Node.js', fn: () => fs.writeFileSync(getPath(), mediumData) }, - { name: 'Hyper-FS', fn: () => writeFileSync(getPath(), mediumData) }, + { name: 'Rush-FS', fn: () => writeFileSync(getPath(), mediumData) }, ]) // 3. Large string write runGroup('writeFile (4MB, string)', [ { name: 'Node.js', fn: () => fs.writeFileSync(getPath(), largeData) }, - { name: 'Hyper-FS', fn: () => writeFileSync(getPath(), largeData) }, + { name: 'Rush-FS', fn: () => writeFileSync(getPath(), largeData) }, ]) // 4. Buffer write runGroup('writeFile (64KB, Buffer)', [ { name: 'Node.js', fn: () => fs.writeFileSync(getPath(), bufferData) }, - { name: 'Hyper-FS', fn: () => writeFileSync(getPath(), bufferData) }, + { name: 'Rush-FS', fn: () => writeFileSync(getPath(), bufferData) }, ]) // 5. appendFile @@ -82,7 +82,7 @@ fs.writeFileSync(appendTarget2, '') runGroup('appendFile (small string)', [ { name: 'Node.js', fn: () => fs.appendFileSync(appendTarget1, 'line\n') }, - { name: 'Hyper-FS', fn: () => appendFileSync(appendTarget2, 'line\n') }, + { name: 'Rush-FS', fn: () => appendFileSync(appendTarget2, 'line\n') }, ]) // Cleanup diff --git a/index.d.ts b/index.d.ts index ed71e15..4fac916 100644 --- a/index.d.ts +++ b/index.d.ts @@ -83,7 +83,7 @@ export interface CpOptions { dereference?: boolean verbatimSymlinks?: boolean /** - * Hyper-FS extension: number of parallel threads for recursive copy. + * Rush-FS extension: number of parallel threads for recursive copy. * 0 or 1 means sequential; > 1 enables rayon parallel traversal. */ concurrency?: number @@ -200,7 +200,7 @@ export declare function rmdirSync(path: string): void * encountered, Node.js retries the operation with a linear backoff of `retryDelay` ms longer on * each try. This option represents the number of retries. * - `retryDelay`: The amount of time in milliseconds to wait between retries (default 100ms). - * - `concurrency` (hyper-fs extension): Number of parallel threads for recursive removal. + * - `concurrency` (rush-fs extension): Number of parallel threads for recursive removal. */ export interface RmOptions { force?: boolean diff --git a/index.js b/index.js index 111236f..7bd48a4 100644 --- a/index.js +++ b/index.js @@ -70,13 +70,13 @@ function requireNative() { } else if (process.platform === 'android') { if (process.arch === 'arm64') { try { - return require('./hyper-fs.android-arm64.node') + return require('./rush-fs.android-arm64.node') } catch (e) { loadErrors.push(e) } try { - const binding = require('hyper-fs-android-arm64') - const bindingPackageVersion = require('hyper-fs-android-arm64/package.json').version + const binding = require('rush-fs-android-arm64') + const bindingPackageVersion = require('rush-fs-android-arm64/package.json').version if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } @@ -86,13 +86,13 @@ function requireNative() { } } else if (process.arch === 'arm') { try { - return require('./hyper-fs.android-arm-eabi.node') + return require('./rush-fs.android-arm-eabi.node') } catch (e) { loadErrors.push(e) } try { - const binding = require('hyper-fs-android-arm-eabi') - const bindingPackageVersion = require('hyper-fs-android-arm-eabi/package.json').version + const binding = require('rush-fs-android-arm-eabi') + const bindingPackageVersion = require('rush-fs-android-arm-eabi/package.json').version if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } @@ -107,13 +107,13 @@ function requireNative() { if (process.arch === 'x64') { if (process.config?.variables?.shlib_suffix === 'dll.a' || process.config?.variables?.node_target_type === 'shared_library') { try { - return require('./hyper-fs.win32-x64-gnu.node') + return require('./rush-fs.win32-x64-gnu.node') } catch (e) { loadErrors.push(e) } try { - const binding = require('hyper-fs-win32-x64-gnu') - const bindingPackageVersion = require('hyper-fs-win32-x64-gnu/package.json').version + const binding = require('rush-fs-win32-x64-gnu') + const bindingPackageVersion = require('rush-fs-win32-x64-gnu/package.json').version if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } @@ -123,13 +123,13 @@ function requireNative() { } } else { try { - return require('./hyper-fs.win32-x64-msvc.node') + return require('./rush-fs.win32-x64-msvc.node') } catch (e) { loadErrors.push(e) } try { - const binding = require('hyper-fs-win32-x64-msvc') - const bindingPackageVersion = require('hyper-fs-win32-x64-msvc/package.json').version + const binding = require('rush-fs-win32-x64-msvc') + const bindingPackageVersion = require('rush-fs-win32-x64-msvc/package.json').version if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } @@ -140,13 +140,13 @@ function requireNative() { } } else if (process.arch === 'ia32') { try { - return require('./hyper-fs.win32-ia32-msvc.node') + return require('./rush-fs.win32-ia32-msvc.node') } catch (e) { loadErrors.push(e) } try { - const binding = require('hyper-fs-win32-ia32-msvc') - const bindingPackageVersion = require('hyper-fs-win32-ia32-msvc/package.json').version + const binding = require('rush-fs-win32-ia32-msvc') + const bindingPackageVersion = require('rush-fs-win32-ia32-msvc/package.json').version if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } @@ -156,13 +156,13 @@ function requireNative() { } } else if (process.arch === 'arm64') { try { - return require('./hyper-fs.win32-arm64-msvc.node') + return require('./rush-fs.win32-arm64-msvc.node') } catch (e) { loadErrors.push(e) } try { - const binding = require('hyper-fs-win32-arm64-msvc') - const bindingPackageVersion = require('hyper-fs-win32-arm64-msvc/package.json').version + const binding = require('rush-fs-win32-arm64-msvc') + const bindingPackageVersion = require('rush-fs-win32-arm64-msvc/package.json').version if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } @@ -175,13 +175,13 @@ function requireNative() { } } else if (process.platform === 'darwin') { try { - return require('./hyper-fs.darwin-universal.node') + return require('./rush-fs.darwin-universal.node') } catch (e) { loadErrors.push(e) } try { - const binding = require('hyper-fs-darwin-universal') - const bindingPackageVersion = require('hyper-fs-darwin-universal/package.json').version + const binding = require('rush-fs-darwin-universal') + const bindingPackageVersion = require('rush-fs-darwin-universal/package.json').version if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } @@ -191,13 +191,13 @@ function requireNative() { } if (process.arch === 'x64') { try { - return require('./hyper-fs.darwin-x64.node') + return require('./rush-fs.darwin-x64.node') } catch (e) { loadErrors.push(e) } try { - const binding = require('hyper-fs-darwin-x64') - const bindingPackageVersion = require('hyper-fs-darwin-x64/package.json').version + const binding = require('rush-fs-darwin-x64') + const bindingPackageVersion = require('rush-fs-darwin-x64/package.json').version if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } @@ -207,13 +207,13 @@ function requireNative() { } } else if (process.arch === 'arm64') { try { - return require('./hyper-fs.darwin-arm64.node') + return require('./rush-fs.darwin-arm64.node') } catch (e) { loadErrors.push(e) } try { - const binding = require('hyper-fs-darwin-arm64') - const bindingPackageVersion = require('hyper-fs-darwin-arm64/package.json').version + const binding = require('rush-fs-darwin-arm64') + const bindingPackageVersion = require('rush-fs-darwin-arm64/package.json').version if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } @@ -227,13 +227,13 @@ function requireNative() { } else if (process.platform === 'freebsd') { if (process.arch === 'x64') { try { - return require('./hyper-fs.freebsd-x64.node') + return require('./rush-fs.freebsd-x64.node') } catch (e) { loadErrors.push(e) } try { - const binding = require('hyper-fs-freebsd-x64') - const bindingPackageVersion = require('hyper-fs-freebsd-x64/package.json').version + const binding = require('rush-fs-freebsd-x64') + const bindingPackageVersion = require('rush-fs-freebsd-x64/package.json').version if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } @@ -243,13 +243,13 @@ function requireNative() { } } else if (process.arch === 'arm64') { try { - return require('./hyper-fs.freebsd-arm64.node') + return require('./rush-fs.freebsd-arm64.node') } catch (e) { loadErrors.push(e) } try { - const binding = require('hyper-fs-freebsd-arm64') - const bindingPackageVersion = require('hyper-fs-freebsd-arm64/package.json').version + const binding = require('rush-fs-freebsd-arm64') + const bindingPackageVersion = require('rush-fs-freebsd-arm64/package.json').version if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } @@ -264,13 +264,13 @@ function requireNative() { if (process.arch === 'x64') { if (isMusl()) { try { - return require('./hyper-fs.linux-x64-musl.node') + return require('./rush-fs.linux-x64-musl.node') } catch (e) { loadErrors.push(e) } try { - const binding = require('hyper-fs-linux-x64-musl') - const bindingPackageVersion = require('hyper-fs-linux-x64-musl/package.json').version + const binding = require('rush-fs-linux-x64-musl') + const bindingPackageVersion = require('rush-fs-linux-x64-musl/package.json').version if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } @@ -280,13 +280,13 @@ function requireNative() { } } else { try { - return require('./hyper-fs.linux-x64-gnu.node') + return require('./rush-fs.linux-x64-gnu.node') } catch (e) { loadErrors.push(e) } try { - const binding = require('hyper-fs-linux-x64-gnu') - const bindingPackageVersion = require('hyper-fs-linux-x64-gnu/package.json').version + const binding = require('rush-fs-linux-x64-gnu') + const bindingPackageVersion = require('rush-fs-linux-x64-gnu/package.json').version if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } @@ -298,13 +298,13 @@ function requireNative() { } else if (process.arch === 'arm64') { if (isMusl()) { try { - return require('./hyper-fs.linux-arm64-musl.node') + return require('./rush-fs.linux-arm64-musl.node') } catch (e) { loadErrors.push(e) } try { - const binding = require('hyper-fs-linux-arm64-musl') - const bindingPackageVersion = require('hyper-fs-linux-arm64-musl/package.json').version + const binding = require('rush-fs-linux-arm64-musl') + const bindingPackageVersion = require('rush-fs-linux-arm64-musl/package.json').version if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } @@ -314,13 +314,13 @@ function requireNative() { } } else { try { - return require('./hyper-fs.linux-arm64-gnu.node') + return require('./rush-fs.linux-arm64-gnu.node') } catch (e) { loadErrors.push(e) } try { - const binding = require('hyper-fs-linux-arm64-gnu') - const bindingPackageVersion = require('hyper-fs-linux-arm64-gnu/package.json').version + const binding = require('rush-fs-linux-arm64-gnu') + const bindingPackageVersion = require('rush-fs-linux-arm64-gnu/package.json').version if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } @@ -332,13 +332,13 @@ function requireNative() { } else if (process.arch === 'arm') { if (isMusl()) { try { - return require('./hyper-fs.linux-arm-musleabihf.node') + return require('./rush-fs.linux-arm-musleabihf.node') } catch (e) { loadErrors.push(e) } try { - const binding = require('hyper-fs-linux-arm-musleabihf') - const bindingPackageVersion = require('hyper-fs-linux-arm-musleabihf/package.json').version + const binding = require('rush-fs-linux-arm-musleabihf') + const bindingPackageVersion = require('rush-fs-linux-arm-musleabihf/package.json').version if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } @@ -348,13 +348,13 @@ function requireNative() { } } else { try { - return require('./hyper-fs.linux-arm-gnueabihf.node') + return require('./rush-fs.linux-arm-gnueabihf.node') } catch (e) { loadErrors.push(e) } try { - const binding = require('hyper-fs-linux-arm-gnueabihf') - const bindingPackageVersion = require('hyper-fs-linux-arm-gnueabihf/package.json').version + const binding = require('rush-fs-linux-arm-gnueabihf') + const bindingPackageVersion = require('rush-fs-linux-arm-gnueabihf/package.json').version if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } @@ -366,13 +366,13 @@ function requireNative() { } else if (process.arch === 'loong64') { if (isMusl()) { try { - return require('./hyper-fs.linux-loong64-musl.node') + return require('./rush-fs.linux-loong64-musl.node') } catch (e) { loadErrors.push(e) } try { - const binding = require('hyper-fs-linux-loong64-musl') - const bindingPackageVersion = require('hyper-fs-linux-loong64-musl/package.json').version + const binding = require('rush-fs-linux-loong64-musl') + const bindingPackageVersion = require('rush-fs-linux-loong64-musl/package.json').version if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } @@ -382,13 +382,13 @@ function requireNative() { } } else { try { - return require('./hyper-fs.linux-loong64-gnu.node') + return require('./rush-fs.linux-loong64-gnu.node') } catch (e) { loadErrors.push(e) } try { - const binding = require('hyper-fs-linux-loong64-gnu') - const bindingPackageVersion = require('hyper-fs-linux-loong64-gnu/package.json').version + const binding = require('rush-fs-linux-loong64-gnu') + const bindingPackageVersion = require('rush-fs-linux-loong64-gnu/package.json').version if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } @@ -400,13 +400,13 @@ function requireNative() { } else if (process.arch === 'riscv64') { if (isMusl()) { try { - return require('./hyper-fs.linux-riscv64-musl.node') + return require('./rush-fs.linux-riscv64-musl.node') } catch (e) { loadErrors.push(e) } try { - const binding = require('hyper-fs-linux-riscv64-musl') - const bindingPackageVersion = require('hyper-fs-linux-riscv64-musl/package.json').version + const binding = require('rush-fs-linux-riscv64-musl') + const bindingPackageVersion = require('rush-fs-linux-riscv64-musl/package.json').version if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } @@ -416,13 +416,13 @@ function requireNative() { } } else { try { - return require('./hyper-fs.linux-riscv64-gnu.node') + return require('./rush-fs.linux-riscv64-gnu.node') } catch (e) { loadErrors.push(e) } try { - const binding = require('hyper-fs-linux-riscv64-gnu') - const bindingPackageVersion = require('hyper-fs-linux-riscv64-gnu/package.json').version + const binding = require('rush-fs-linux-riscv64-gnu') + const bindingPackageVersion = require('rush-fs-linux-riscv64-gnu/package.json').version if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } @@ -433,13 +433,13 @@ function requireNative() { } } else if (process.arch === 'ppc64') { try { - return require('./hyper-fs.linux-ppc64-gnu.node') + return require('./rush-fs.linux-ppc64-gnu.node') } catch (e) { loadErrors.push(e) } try { - const binding = require('hyper-fs-linux-ppc64-gnu') - const bindingPackageVersion = require('hyper-fs-linux-ppc64-gnu/package.json').version + const binding = require('rush-fs-linux-ppc64-gnu') + const bindingPackageVersion = require('rush-fs-linux-ppc64-gnu/package.json').version if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } @@ -449,13 +449,13 @@ function requireNative() { } } else if (process.arch === 's390x') { try { - return require('./hyper-fs.linux-s390x-gnu.node') + return require('./rush-fs.linux-s390x-gnu.node') } catch (e) { loadErrors.push(e) } try { - const binding = require('hyper-fs-linux-s390x-gnu') - const bindingPackageVersion = require('hyper-fs-linux-s390x-gnu/package.json').version + const binding = require('rush-fs-linux-s390x-gnu') + const bindingPackageVersion = require('rush-fs-linux-s390x-gnu/package.json').version if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } @@ -469,13 +469,13 @@ function requireNative() { } else if (process.platform === 'openharmony') { if (process.arch === 'arm64') { try { - return require('./hyper-fs.openharmony-arm64.node') + return require('./rush-fs.openharmony-arm64.node') } catch (e) { loadErrors.push(e) } try { - const binding = require('hyper-fs-openharmony-arm64') - const bindingPackageVersion = require('hyper-fs-openharmony-arm64/package.json').version + const binding = require('rush-fs-openharmony-arm64') + const bindingPackageVersion = require('rush-fs-openharmony-arm64/package.json').version if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } @@ -485,13 +485,13 @@ function requireNative() { } } else if (process.arch === 'x64') { try { - return require('./hyper-fs.openharmony-x64.node') + return require('./rush-fs.openharmony-x64.node') } catch (e) { loadErrors.push(e) } try { - const binding = require('hyper-fs-openharmony-x64') - const bindingPackageVersion = require('hyper-fs-openharmony-x64/package.json').version + const binding = require('rush-fs-openharmony-x64') + const bindingPackageVersion = require('rush-fs-openharmony-x64/package.json').version if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } @@ -501,13 +501,13 @@ function requireNative() { } } else if (process.arch === 'arm') { try { - return require('./hyper-fs.openharmony-arm.node') + return require('./rush-fs.openharmony-arm.node') } catch (e) { loadErrors.push(e) } try { - const binding = require('hyper-fs-openharmony-arm') - const bindingPackageVersion = require('hyper-fs-openharmony-arm/package.json').version + const binding = require('rush-fs-openharmony-arm') + const bindingPackageVersion = require('rush-fs-openharmony-arm/package.json').version if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } @@ -529,7 +529,7 @@ if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) { let wasiBinding = null let wasiBindingError = null try { - wasiBinding = require('./hyper-fs.wasi.cjs') + wasiBinding = require('./rush-fs.wasi.cjs') nativeBinding = wasiBinding } catch (err) { if (process.env.NAPI_RS_FORCE_WASI) { @@ -538,7 +538,7 @@ if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) { } if (!nativeBinding) { try { - wasiBinding = require('hyper-fs-wasm32-wasi') + wasiBinding = require('rush-fs-wasm32-wasi') nativeBinding = wasiBinding } catch (err) { if (process.env.NAPI_RS_FORCE_WASI) { diff --git a/package.json b/package.json index a835ecd..4150356 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "index.js", "repository": { "type": "git", - "url": "git+https://github.com/hyper-fs/hyper-fs.git" + "url": "git+https://github.com/rush-fs/rush-fs.git" }, "license": "MIT", "browser": "browser.js", @@ -29,7 +29,7 @@ "browser.js" ], "napi": { - "binaryName": "hyper-fs", + "binaryName": "rush-fs", "targets": [ "x86_64-pc-windows-msvc", "x86_64-apple-darwin", @@ -115,9 +115,9 @@ }, "packageManager": "pnpm@9.15.4", "optionalDependencies": { - "hyper-fs-win32-x64-msvc": "0.0.1", - "hyper-fs-darwin-x64": "0.0.1", - "hyper-fs-linux-x64-gnu": "0.0.1", - "hyper-fs-darwin-arm64": "0.0.1" + "rush-fs-win32-x64-msvc": "0.0.1", + "rush-fs-darwin-x64": "0.0.1", + "rush-fs-linux-x64-gnu": "0.0.1", + "rush-fs-darwin-arm64": "0.0.1" } } diff --git a/src/cp.rs b/src/cp.rs index 6b34a48..9add99f 100644 --- a/src/cp.rs +++ b/src/cp.rs @@ -14,7 +14,7 @@ pub struct CpOptions { pub preserve_timestamps: Option, pub dereference: Option, pub verbatim_symlinks: Option, - /// Hyper-FS extension: number of parallel threads for recursive copy. + /// Rush-FS extension: number of parallel threads for recursive copy. /// 0 or 1 means sequential; > 1 enables rayon parallel traversal. pub concurrency: Option, } diff --git a/src/readdir.rs b/src/readdir.rs index 08cd61b..880dbda 100644 --- a/src/readdir.rs +++ b/src/readdir.rs @@ -60,7 +60,7 @@ fn ls( let skip_hidden = opts.skip_hidden.unwrap_or(false); let recursive = opts.recursive.unwrap_or(false); let with_file_types = opts.with_file_types.unwrap_or(false); - // 'buffer' encoding is not supported in hyper-fs (we always return String). + // 'buffer' encoding is not supported in rush-fs (we always return String). // All other encoding values are treated as 'utf8'. let _encoding = opts.encoding.as_deref().unwrap_or("utf8"); diff --git a/src/rm.rs b/src/rm.rs index de324df..23421d2 100644 --- a/src/rm.rs +++ b/src/rm.rs @@ -13,7 +13,7 @@ use std::path::Path; /// encountered, Node.js retries the operation with a linear backoff of `retryDelay` ms longer on /// each try. This option represents the number of retries. /// - `retryDelay`: The amount of time in milliseconds to wait between retries (default 100ms). -/// - `concurrency` (hyper-fs extension): Number of parallel threads for recursive removal. +/// - `concurrency` (rush-fs extension): Number of parallel threads for recursive removal. #[napi(object)] #[derive(Clone)] From 9b027f54ddade1611d61e943066a63ae4d289a1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A2=B3=E8=8B=AF=20Carbon?= Date: Mon, 8 Dec 2025 22:31:58 +0800 Subject: [PATCH 03/10] docs: expand README with 'How does it work' section Added a section explaining how Hyper-FS works with Rust and included diagrams for comparison with Node.js. --- README.md | 76 ++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 64 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index d902af7..34bf36b 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,16 @@
- -# Rush-FS - -

- Written in Rust - NPM Version - License -

- -

- A high-performance, drop-in replacement for Node.js fs module, powered by Rust. -

+ +# Hyper-FS + +

+ Written in Rust + NPM Version + License +

+ +

+ A high-performance, drop-in replacement for Node.js fs module, powered by Rust. +

## Installation @@ -21,6 +21,58 @@ npm install rush-fs pnpm add rush-fs ``` +## How does it works + +For the original Node.js, it works serially and cost lots of memory to parse os object and string into JS style: + +```mermaid +graph TD + A["JS: readdir"] -->|Call| B("Node.js C++ Binding") + B -->|Submit Task| C{"Libuv Thread Pool"} + + subgraph "Native Layer (Serial)" + C -->|"Syscall: getdents"| D[OS Kernel] + D -->|"Return File List"| C + C -->|"Process Paths"| C + end + + C -->|"Results Ready"| E("V8 Main Thread") + + subgraph "V8 Interaction (Heavy)" + E -->|"Create JS String 1"| F[V8 Heap] + E -->|"String 2"| F + E -->|"String N..."| F + F -->|"GC Pressure Rising"| F + end + + E -->|"Return Array"| G["JS Callback/Promise"] +``` + +But, it's saved with Rust now: + +```mermaid +graph TD + A["JS: readdir"] -->|"N-API Call"| B("Rust Wrapper") + B -->|"Spawn Thread/Task"| C{"Rust Thread Pool"} + + subgraph "Rust 'Black Box'" + C -->|"Rayon: Parallel work"| D[OS Kernel] + D -->|"Syscall: getdents"| C + C -->|"Store as Rust Vec"| H[Rust Heap] + H -->|"No V8 Interaction yet"| H + end + + C -->|"All Done"| I("Convert to JS") + + subgraph "N-API Bridge" + I -->|"Batch Create JS Array"| J[V8 Heap] + end + + J -->|Return| K["JS Result"] +``` + + + ## Status & Roadmap We are rewriting `fs` APIs one by one. From 992aea8fe22425e981dd1bd6b77c5b7c91accf96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carbon=20=E7=A2=B3=E8=8B=AF?= Date: Thu, 19 Feb 2026 05:06:26 +0800 Subject: [PATCH 04/10] docs: replace `hyper-fs` with `rush-fs` --- README.md | 45 ++++++++++++++++++++++----------------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 34bf36b..348783e 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,17 @@
- -# Hyper-FS - -

- Written in Rust - NPM Version - License -

- -

- A high-performance, drop-in replacement for Node.js fs module, powered by Rust. -

+ +# Rush-FS + +

+ Written in Rust + NPM Version + License +

+ +

+ A high-performance, drop-in replacement for Node.js fs module, powered by Rust. +

+
## Installation @@ -23,28 +24,28 @@ pnpm add rush-fs ## How does it works -For the original Node.js, it works serially and cost lots of memory to parse os object and string into JS style: +For the original Node.js, it works serially and cost lots of memory to parse os object and string into JS style: ```mermaid graph TD A["JS: readdir"] -->|Call| B("Node.js C++ Binding") B -->|Submit Task| C{"Libuv Thread Pool"} - + subgraph "Native Layer (Serial)" C -->|"Syscall: getdents"| D[OS Kernel] D -->|"Return File List"| C C -->|"Process Paths"| C end - + C -->|"Results Ready"| E("V8 Main Thread") - + subgraph "V8 Interaction (Heavy)" E -->|"Create JS String 1"| F[V8 Heap] E -->|"String 2"| F E -->|"String N..."| F F -->|"GC Pressure Rising"| F end - + E -->|"Return Array"| G["JS Callback/Promise"] ``` @@ -54,25 +55,23 @@ But, it's saved with Rust now: graph TD A["JS: readdir"] -->|"N-API Call"| B("Rust Wrapper") B -->|"Spawn Thread/Task"| C{"Rust Thread Pool"} - + subgraph "Rust 'Black Box'" C -->|"Rayon: Parallel work"| D[OS Kernel] D -->|"Syscall: getdents"| C C -->|"Store as Rust Vec"| H[Rust Heap] H -->|"No V8 Interaction yet"| H end - + C -->|"All Done"| I("Convert to JS") - + subgraph "N-API Bridge" I -->|"Batch Create JS Array"| J[V8 Heap] end - + J -->|Return| K["JS Result"] ``` - - ## Status & Roadmap We are rewriting `fs` APIs one by one. From 2a389ba914c50412fd4c82c9e7eb4c5556854c5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carbon=20=E7=A2=B3=E8=8B=AF?= Date: Thu, 19 Feb 2026 05:29:36 +0800 Subject: [PATCH 05/10] docs: add publishing instructions for maintainers in README files --- README.md | 31 ++- README.zh-CN.md | 11 + pnpm-lock.yaml | 686 +++++++++++++++++++++++++++++------------------- 3 files changed, 450 insertions(+), 278 deletions(-) diff --git a/README.md b/README.md index fbdbf71..55e4c0f 100644 --- a/README.md +++ b/README.md @@ -74,28 +74,28 @@ graph TD ## How does it works -For the original Node.js, it works serially and cost lots of memory to parse os object and string into JS style: +For the original Node.js, it works serially and cost lots of memory to parse os object and string into JS style: ```mermaid graph TD A["JS: readdir"] -->|Call| B("Node.js C++ Binding") B -->|Submit Task| C{"Libuv Thread Pool"} - + subgraph "Native Layer (Serial)" C -->|"Syscall: getdents"| D[OS Kernel] D -->|"Return File List"| C C -->|"Process Paths"| C end - + C -->|"Results Ready"| E("V8 Main Thread") - + subgraph "V8 Interaction (Heavy)" E -->|"Create JS String 1"| F[V8 Heap] E -->|"String 2"| F E -->|"String N..."| F F -->|"GC Pressure Rising"| F end - + E -->|"Return Array"| G["JS Callback/Promise"] ``` @@ -105,25 +105,23 @@ But, it's saved with Rust now: graph TD A["JS: readdir"] -->|"N-API Call"| B("Rust Wrapper") B -->|"Spawn Thread/Task"| C{"Rust Thread Pool"} - + subgraph "Rust 'Black Box'" C -->|"Rayon: Parallel work"| D[OS Kernel] D -->|"Syscall: getdents"| C C -->|"Store as Rust Vec"| H[Rust Heap] H -->|"No V8 Interaction yet"| H end - + C -->|"All Done"| I("Convert to JS") - + subgraph "N-API Bridge" I -->|"Batch Create JS Array"| J[V8 Heap] end - + J -->|Return| K["JS Result"] ``` - - ## Status & Roadmap We are rewriting `fs` APIs one by one. @@ -519,6 +517,17 @@ Optimal concurrency for `cp` is **4 threads** on Apple Silicon — beyond that, See [CONTRIBUTING.md](./CONTRIBUTING.md) for the complete development guide — from environment setup, referencing Node.js source, writing Rust implementations, to testing and benchmarking. +## Publishing (Maintainers Only) + +`rush-fs` ships prebuilt native binaries per platform (see `optionalDependencies` in `package.json`). When cutting a release you must publish both the platform-specific packages and the main package: + +1. Ensure you are logged in to npm (`npm login`). +2. Bump the version via `pnpm version ` (this runs `pnpm preversion` to build the release binaries). +3. Publish every optional dependency in `package.json` by running `pnpm prepublishOnly` (which executes `napi prepublish -t npm` and pushes `rush-fs-` packages such as `rush-fs-darwin-arm64`). +4. Publish the main package with `pnpm publish --access public`. The `prepublishOnly` hook runs automatically, but running step 3 manually lets you verify each platform succeeded before tagging the main release. + +If any platform publish fails, fix it and re-run `pnpm prepublishOnly` before retrying `pnpm publish` so consumers never receive a release referring to missing optional dependencies. + ## License MIT diff --git a/README.zh-CN.md b/README.zh-CN.md index a7c6fe9..df9566b 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -418,6 +418,17 @@ Rush-FS 在文件系统遍历类操作中使用多线程并行: 参阅 [CONTRIBUTING.md](./CONTRIBUTING.md) — 完整的开发指南,涵盖环境搭建、参考 Node.js 源码、编写 Rust 实现、测试与性能基准。 +## 发布(维护者专用) + +`rush-fs` 会为每个平台发布一个预编译二进制(参见 `package.json` 中的 `optionalDependencies`)。要发布新版本,请依次执行: + +1. 确保已执行 `npm login`。 +2. 使用 `pnpm version ` 提升版本号(内部会运行 `pnpm preversion`,构建 release 产物)。 +3. 运行 `pnpm prepublishOnly`(即 `napi prepublish -t npm`)逐个发布 `rush-fs-` 可选依赖,例如 `rush-fs-darwin-arm64`、`rush-fs-win32-x64-msvc` 等。 +4. 最后执行 `pnpm publish --access public` 发布主包。`prepublishOnly` 会自动触发,但提前单独跑第 3 步可以先确认各平台包已成功发布。 + +一旦某个平台包发布失败,修复问题后需重新执行 `pnpm prepublishOnly`,确保主包不会依赖缺失的可选依赖。 + ## 许可证 MIT diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9ec0075..5c16db2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,13 +9,13 @@ importers: devDependencies: '@emnapi/core': specifier: ^1.5.0 - version: 1.7.1 + version: 1.8.1 '@emnapi/runtime': specifier: ^1.5.0 - version: 1.7.1 + version: 1.8.1 '@napi-rs/cli': specifier: ^3.2.0 - version: 3.5.0(@emnapi/runtime@1.7.1)(@types/node@20.19.25) + version: 3.5.1(@emnapi/runtime@1.8.1)(@types/node@20.19.33) '@oxc-node/core': specifier: ^0.0.34 version: 0.0.34 @@ -27,7 +27,7 @@ importers: version: 0.10.1 '@types/node': specifier: ^20.0.0 - version: 20.19.25 + version: 20.19.33 ava: specifier: ^6.4.1 version: 6.4.1 @@ -39,7 +39,7 @@ importers: version: 3.3.3 glob: specifier: ^13.0.0 - version: 13.0.0 + version: 13.0.5 husky: specifier: ^9.1.7 version: 9.1.7 @@ -54,35 +54,35 @@ importers: version: 8.0.4 oxlint: specifier: ^1.14.0 - version: 1.31.0 + version: 1.48.0 prettier: specifier: ^3.6.2 - version: 3.7.4 + version: 3.8.1 typescript: specifier: ^5.9.2 version: 5.9.3 packages: - '@emnapi/core@1.7.1': + '@emnapi/core@1.8.1': resolution: - { integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg== } + { integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg== } - '@emnapi/runtime@1.7.1': + '@emnapi/runtime@1.8.1': resolution: - { integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA== } + { integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg== } '@emnapi/wasi-threads@1.1.0': resolution: { integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ== } - '@inquirer/ansi@2.0.2': + '@inquirer/ansi@2.0.3': resolution: - { integrity: sha512-SYLX05PwJVnW+WVegZt1T4Ip1qba1ik+pNJPDiqvk6zS5Y/i8PhRzLpGEtVd7sW0G8cMtkD8t4AZYhQwm8vnww== } + { integrity: sha512-g44zhR3NIKVs0zUesa4iMzExmZpLUdTLRMCStqX3GE5NT6VkPcxQGJ+uC8tDgBUC/vB1rUhUd55cOf++4NZcmw== } engines: { node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0' } - '@inquirer/checkbox@5.0.2': + '@inquirer/checkbox@5.0.7': resolution: - { integrity: sha512-iTPV4tMMct7iOpwer5qmTP7gjnk1VQJjsNfAaC2b8Q3qiuHM3K2yjjDr5u1MKfkrvp2JD4Flf8sIPpF21pmZmw== } + { integrity: sha512-OGJykc3mpe4kiNXwXlDlP4MFqZso5QOoXJaJrmTJI+Y+gq68wxTyCUIFv34qgwZTHnGGeqwUKGOi4oxptTe+ZQ== } engines: { node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0' } peerDependencies: '@types/node': '>=18' @@ -90,9 +90,9 @@ packages: '@types/node': optional: true - '@inquirer/confirm@6.0.2': + '@inquirer/confirm@6.0.7': resolution: - { integrity: sha512-A0/13Wyi+8iFeNDX6D4zZYKPoBLIEbE4K/219qHcnpXMer2weWvaTo63+2c7mQPPA206DEMSYVOPnEw3meOlCw== } + { integrity: sha512-lKdNloHLnGoBUUwprxKFd+SpkAnyQTBrZACFPtxDq9GiLICD2t+CaeJ1Ku4goZsGPyBIFc2YYpmDSJLEXoc16g== } engines: { node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0' } peerDependencies: '@types/node': '>=18' @@ -100,9 +100,9 @@ packages: '@types/node': optional: true - '@inquirer/core@11.0.2': + '@inquirer/core@11.1.4': resolution: - { integrity: sha512-lgMRx/n02ciiNELBvFLHtmcjbV5tf5D/I0UYfCg2YbTZWmBZ10/niLd3IjWBxz8LtM27xP+4oLEa06Slmb7p7A== } + { integrity: sha512-1HvwyASF0tE/7W8geTTn0ydiWb463pq4SBIpaWcVabTrw55+CiRmytV9eZoqt3ohchsPw4Vv60jfNiI6YljVUg== } engines: { node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0' } peerDependencies: '@types/node': '>=18' @@ -110,9 +110,9 @@ packages: '@types/node': optional: true - '@inquirer/editor@5.0.2': + '@inquirer/editor@5.0.7': resolution: - { integrity: sha512-pXQ4Nf0qmFcJuYB6NlcIIxH6l6zKOwNg1Jh/ZRdKd2dTqBB4OXKUFbFwR2K4LVXVtq15ZFFatBVT+rerYR8hWQ== } + { integrity: sha512-d36tisyvmxH7H+LICTeTofrKmJ+R1jAYV8q0VTYh96cm8mP2BdGh9TAIqbCGcciX8/dr0fJW+VJq3jAnco5xfg== } engines: { node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0' } peerDependencies: '@types/node': '>=18' @@ -120,9 +120,9 @@ packages: '@types/node': optional: true - '@inquirer/expand@5.0.2': + '@inquirer/expand@5.0.7': resolution: - { integrity: sha512-siFG1swxfjFIOxIcehtZkh+KUNB/YCpyfHNEGu+nC/SBXIbgUWibvThLn/WesSxLRGOeSKdNKoTm+GQCKFm6Ww== } + { integrity: sha512-h2RRFzDdeXOXLrJOUAaHzyR1HbiZlrl/NxorOAgNrzhiSThbwEFVOf88lJzbF5WXGrQ2RwqK2h0xAE7eo8QP5w== } engines: { node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0' } peerDependencies: '@types/node': '>=18' @@ -130,9 +130,9 @@ packages: '@types/node': optional: true - '@inquirer/external-editor@2.0.2': + '@inquirer/external-editor@2.0.3': resolution: - { integrity: sha512-X/fMXK7vXomRWEex1j8mnj7s1mpnTeP4CO/h2gysJhHLT2WjBnLv4ZQEGpm/kcYI8QfLZ2fgW+9kTKD+jeopLg== } + { integrity: sha512-LgyI7Agbda74/cL5MvA88iDpvdXI2KuMBCGRkbCl2Dg1vzHeOgs+s0SDcXV7b+WZJrv2+ERpWSM65Fpi9VfY3w== } engines: { node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0' } peerDependencies: '@types/node': '>=18' @@ -140,14 +140,14 @@ packages: '@types/node': optional: true - '@inquirer/figures@2.0.2': + '@inquirer/figures@2.0.3': resolution: - { integrity: sha512-qXm6EVvQx/FmnSrCWCIGtMHwqeLgxABP8XgcaAoywsL0NFga9gD5kfG0gXiv80GjK9Hsoz4pgGwF/+CjygyV9A== } + { integrity: sha512-y09iGt3JKoOCBQ3w4YrSJdokcD8ciSlMIWsD+auPu+OZpfxLuyz+gICAQ6GCBOmJJt4KEQGHuZSVff2jiNOy7g== } engines: { node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0' } - '@inquirer/input@5.0.2': + '@inquirer/input@5.0.7': resolution: - { integrity: sha512-hN2YRo1QiEc9lD3mK+CPnTS4TK2RhCMmMmP4nCWwTkmQL2vx9jPJWYk+rbUZpwR1D583ZJk1FI3i9JZXIpi/qg== } + { integrity: sha512-b+eKk/eUvKLQ6c+rDu9u4I1+twdjOfrEaw9NURDpCrWYJTWL1/JQEudZi0AeqXDGcn0tMdhlfpEfjcqr33B/qw== } engines: { node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0' } peerDependencies: '@types/node': '>=18' @@ -155,9 +155,9 @@ packages: '@types/node': optional: true - '@inquirer/number@4.0.2': + '@inquirer/number@4.0.7': resolution: - { integrity: sha512-4McnjTSYrlthNW1ojkkmP75WLRYhQs7GXm6pDDoIrHqJuV5uUYwfdbB0geHdaKMarAqJQgoOVjzIT0jdWCsKew== } + { integrity: sha512-/l5KxcLFFexzOwh8DcVOI7zgVQCwcBt/9yHWtvMdYvaYLMK5J31BSR/fO3Z9WauA21qwAkDGRvYNHIG4vR6JwA== } engines: { node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0' } peerDependencies: '@types/node': '>=18' @@ -165,9 +165,9 @@ packages: '@types/node': optional: true - '@inquirer/password@5.0.2': + '@inquirer/password@5.0.7': resolution: - { integrity: sha512-oSDziMKiw4G2e4zS+0JRfxuPFFGh6N/9yUaluMgEHp2/Yyj2JGwfDO7XbwtOrxVrz+XsP/iaGyWXdQb9d8A0+g== } + { integrity: sha512-h3Rgzb8nFMxgK6X5246MtwTX/rXs5Z58DbeuUKI6W5dQ+CZusEunNeT7rosdB+Upn79BkfZJO0AaiH8MIi9v1A== } engines: { node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0' } peerDependencies: '@types/node': '>=18' @@ -175,9 +175,9 @@ packages: '@types/node': optional: true - '@inquirer/prompts@8.0.2': + '@inquirer/prompts@8.2.1': resolution: - { integrity: sha512-2zK5zY48fZcl6+gG4eqOC/UzZsJckHCRvjXoLuW4D8LKOCVGdcJiSKkLnumSZjR/6PXPINDGOrGHqNxb+sxJDg== } + { integrity: sha512-76knJFW2oXdI6If5YRmEoT5u7l+QroXYrMiINFcb97LsyECgsbO9m6iWlPuhBtaFgNITPHQCk3wbex38q8gsjg== } engines: { node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0' } peerDependencies: '@types/node': '>=18' @@ -185,9 +185,9 @@ packages: '@types/node': optional: true - '@inquirer/rawlist@5.0.2': + '@inquirer/rawlist@5.2.3': resolution: - { integrity: sha512-AcNALEdQKUQDeJcpC1a3YC53m1MLv+sMUS+vRZ8Qigs1Yg3Dcdtmi82rscJplogKOY8CXkKW4wvVwHS2ZjCIBQ== } + { integrity: sha512-EuvV6N/T3xDmRVihAOqfnbmtHGdu26TocRKANvcX/7nLLD8QO0c22Dtlc5C15+V433d9v0E0SSyqywdNCIXfLg== } engines: { node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0' } peerDependencies: '@types/node': '>=18' @@ -195,9 +195,9 @@ packages: '@types/node': optional: true - '@inquirer/search@4.0.2': + '@inquirer/search@4.1.3': resolution: - { integrity: sha512-hg63w5toohdzE65S3LiGhdfIL0kT+yisbZARf7zw65PvyMUTutTN3eMAvD/B6y/25z88vTrB7kSB45Vz5CbrXg== } + { integrity: sha512-6BE8MqVMakEiLDRtrwj9fbx6AYhuj7McW3GOkOoEiQ5Qkh6v6f5HCoYNqSRE4j6nT+u+73518iUQPE+mZYlAjA== } engines: { node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0' } peerDependencies: '@types/node': '>=18' @@ -205,9 +205,9 @@ packages: '@types/node': optional: true - '@inquirer/select@5.0.2': + '@inquirer/select@5.0.7': resolution: - { integrity: sha512-JygTohvQxSNnvt7IKANVlg/eds+yN5sLRilYeGc4ri/9Aqi/2QPoXBMV5Cz/L1VtQv63SnTbPXJZeCK2pSwsOA== } + { integrity: sha512-1JUJIR+Z2PsvwP6VWty7aE0aCPaT2cy2c4Vp3LPhL2Pi3+aXewAld/AyJ/CW9XWx1JbKxmdElfvls/G/7jG7ZQ== } engines: { node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0' } peerDependencies: '@types/node': '>=18' @@ -215,9 +215,9 @@ packages: '@types/node': optional: true - '@inquirer/type@4.0.2': + '@inquirer/type@4.0.3': resolution: - { integrity: sha512-cae7mzluplsjSdgFA6ACLygb5jC8alO0UUnFPyu0E7tNRPrL+q/f8VcSXp+cjZQ7l5CMpDpi2G1+IQvkOiL1Lw== } + { integrity: sha512-cKZN7qcXOpj1h+1eTTcGDVLaBIHNMT1Rz9JqJP5MnEJ0JhgVWllx7H/tahUp5YEK1qaByH2Itb8wLG/iScD5kw== } engines: { node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0' } peerDependencies: '@types/node': '>=18' @@ -225,16 +225,6 @@ packages: '@types/node': optional: true - '@isaacs/balanced-match@4.0.1': - resolution: - { integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ== } - engines: { node: 20 || >=22 } - - '@isaacs/brace-expansion@5.0.0': - resolution: - { integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA== } - engines: { node: 20 || >=22 } - '@isaacs/cliui@8.0.2': resolution: { integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== } @@ -251,9 +241,9 @@ packages: engines: { node: '>=18' } hasBin: true - '@napi-rs/cli@3.5.0': + '@napi-rs/cli@3.5.1': resolution: - { integrity: sha512-bJsDvAa9qK9VMkFhr780XWfQlK+GDlAX8qpK20buSmA0ld6nxCtiZ5a0J45zbd0FWT+VTZE1/u8VPH2vLfnVvw== } + { integrity: sha512-XBfLQRDcB3qhu6bazdMJsecWW55kR85l5/k0af9BIBELXQSsCFU0fzug7PX8eQp6vVdm7W/U3z6uP5WmITB2Gw== } engines: { node: '>= 16' } hasBin: true peerDependencies: @@ -537,9 +527,9 @@ packages: { integrity: sha512-7cmzIu+Vbupriudo7UudoMRH2OA3cTw67vva8MxeoAe5S7vPFI7z0vp0pMXiA25S8IUJefImQ90FeJjl8fjEaQ== } engines: { node: '>= 10' } - '@napi-rs/wasm-runtime@1.1.0': + '@napi-rs/wasm-runtime@1.1.1': resolution: - { integrity: sha512-Fq6DJW+Bb5jaWE69/qOE0D1TUN9+6uWhCeZpdnSBk14pjLcCWR7Q8n49PTSPHazM37JqrsdpEthXy2xn6jWWiA== } + { integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A== } '@napi-rs/wasm-tools-android-arm-eabi@1.0.1': resolution: @@ -661,9 +651,9 @@ packages: { integrity: sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q== } engines: { node: '>= 20' } - '@octokit/endpoint@11.0.2': + '@octokit/endpoint@11.0.3': resolution: - { integrity: sha512-4zCpzP1fWc7QlqunZ5bSEjxc6yLAlRTnDwKtgXfcI/FxxGoqedDG8V2+xJ60bV2kODqcGB+nATdtap/XYq2NZQ== } + { integrity: sha512-FWFlNxghg4HrXkD3ifYbS/IdL/mDHjh9QcsNyhQjN8dplUoZbejsdpmuqdA76nxj2xoWPs7p8uX2SNr9rYu0Ag== } engines: { node: '>= 20' } '@octokit/graphql@9.0.3': @@ -821,51 +811,136 @@ packages: resolution: { integrity: sha512-hdpQO2PhRjhbCuf0fszzTZqIf4gH3d058of+Go0xivhPINkh8rP/chiH0RrCSri68V8uhVqz/Im+mr7vw/AGsQ== } - '@oxlint/darwin-arm64@1.31.0': + '@oxlint/binding-android-arm-eabi@1.48.0': resolution: - { integrity: sha512-HqoYNH5WFZRdqGUROTFGOdBcA9y/YdHNoR/ujlyVO53it+q96dujbgKEvlff/WEuo4LbDKBrKLWKTKvOd/VYdg== } + { integrity: sha512-1Pz/stJvveO9ZO7ll4ZoEY3f6j2FiUgBLBcCRCiW6ylId9L9UKs+gn3X28m3eTnoiFCkhKwmJJ+VO6vwsu7Qtg== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm] + os: [android] + + '@oxlint/binding-android-arm64@1.48.0': + resolution: + { integrity: sha512-Zc42RWGE8huo6Ht0lXKjd0NH2lWNmimQHUmD0JFcvShLOuwN+RSEE/kRakc2/0LIgOUuU/R7PaDMCOdQlPgNUQ== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [android] + + '@oxlint/binding-darwin-arm64@1.48.0': + resolution: + { integrity: sha512-jgZs563/4vaG5jH2RSt2TSh8A2jwsFdmhLXrElMdm3Mmto0HPf85FgInLSNi9HcwzQFvkYV8JofcoUg2GH1HTA== } + engines: { node: ^20.19.0 || >=22.12.0 } cpu: [arm64] os: [darwin] - '@oxlint/darwin-x64@1.31.0': + '@oxlint/binding-darwin-x64@1.48.0': resolution: - { integrity: sha512-gNq+JQXBCkYKQhmJEgSNjuPqmdL8yBEX3v0sueLH3g5ym4OIrNO7ml1M7xzCs0zhINQCR9MsjMJMyBNaF1ed+g== } + { integrity: sha512-kvo87BujEUjCJREuWDC4aPh1WoXCRFFWE4C7uF6wuoMw2f6N2hypA/cHHcYn9DdL8R2RrgUZPefC8JExyeIMKA== } + engines: { node: ^20.19.0 || >=22.12.0 } cpu: [x64] os: [darwin] - '@oxlint/linux-arm64-gnu@1.31.0': + '@oxlint/binding-freebsd-x64@1.48.0': + resolution: + { integrity: sha512-eyzzPaHQKn0RIM+ueDfgfJF2RU//Wp4oaKs2JVoVYcM5HjbCL36+O0S3wO5Xe1NWpcZIG3cEHc/SuOCDRqZDSg== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [x64] + os: [freebsd] + + '@oxlint/binding-linux-arm-gnueabihf@1.48.0': + resolution: + { integrity: sha512-p3kSloztK7GRO7FyO3u38UCjZxQTl92VaLDsMQAq0eGoiNmeeEF1KPeE4+Fr+LSkQhF8WvJKSuls6TwOlurdPA== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm-musleabihf@1.48.0': + resolution: + { integrity: sha512-uWM+wiTqLW/V0ZmY/eyTWs8ykhIkzU+K2tz/8m35YepYEzohiUGRbnkpAFXj2ioXpQL+GUe5vmM3SLH6ozlfFw== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm64-gnu@1.48.0': resolution: - { integrity: sha512-cRmttpr3yHPwbrvtPNlv+0Zw2Oeh0cU902iMI4fFW9ylbW/vUAcz6DvzGMCYZbII8VDiwQ453SV5AA8xBgMbmw== } + { integrity: sha512-OhQNPjs/OICaYqxYJjKKMaIY7p3nJ9IirXcFoHKD+CQE1BZFCeUUAknMzUeLclDCfudH9Vb/UgjFm8+ZM5puAg== } + engines: { node: ^20.19.0 || >=22.12.0 } cpu: [arm64] os: [linux] - '@oxlint/linux-arm64-musl@1.31.0': + '@oxlint/binding-linux-arm64-musl@1.48.0': resolution: - { integrity: sha512-0p7vn0hdMdNPIUzemw8f1zZ2rRZ/963EkK3o4P0KUXOPgleo+J9ZIPH7gcHSHtyrNaBifN03wET1rH4SuWQYnA== } + { integrity: sha512-adu5txuwGvQ4C4fjYHJD+vnY+OCwCixBzn7J3KF3iWlVHBBImcosSv+Ye+fbMMJui4HGjifNXzonjKm9pXmOiw== } + engines: { node: ^20.19.0 || >=22.12.0 } cpu: [arm64] os: [linux] - '@oxlint/linux-x64-gnu@1.31.0': + '@oxlint/binding-linux-ppc64-gnu@1.48.0': resolution: - { integrity: sha512-vNIbpSwQ4dwN0CUmojG7Y91O3CXOf0Kno7DSTshk/JJR4+u8HNVuYVjX2qBRk0OMc4wscJbEd7wJCl0VJOoCOw== } + { integrity: sha512-inlQQRUnHCny/7b7wA6NjEoJSSZPNea4qnDhWyeqBYWx8ukf2kzNDSiamfhOw6bfAYPm/PVlkVRYaNXQbkLeTQ== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [ppc64] + os: [linux] + + '@oxlint/binding-linux-riscv64-gnu@1.48.0': + resolution: + { integrity: sha512-YiJx6sW6bYebQDZRVWLKm/Drswx/hcjIgbLIhULSn0rRcBKc7d9V6mkqPjKDbhcxJgQD5Zi0yVccJiOdF40AWA== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [riscv64] + os: [linux] + + '@oxlint/binding-linux-riscv64-musl@1.48.0': + resolution: + { integrity: sha512-zwSqxMgmb2ITamNfDv9Q9EKBc/4ZhCBP9gkg2hhcgR6sEVGPUDl1AKPC89CBKMxkmPUi3685C38EvqtZn5OtHw== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [riscv64] + os: [linux] + + '@oxlint/binding-linux-s390x-gnu@1.48.0': + resolution: + { integrity: sha512-c/+2oUWAOsQB5JTem0rW8ODlZllF6pAtGSGXoLSvPTonKI1vAwaKhD9Qw1X36jRbcI3Etkpu/9z/RRjMba8vFQ== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [s390x] + os: [linux] + + '@oxlint/binding-linux-x64-gnu@1.48.0': + resolution: + { integrity: sha512-PhauDqeFW5DGed6QxCY5lXZYKSlcBdCXJnH03ZNU6QmDZ0BFM/zSy1oPT2MNb1Afx1G6yOOVk8ErjWsQ7c59ng== } + engines: { node: ^20.19.0 || >=22.12.0 } cpu: [x64] os: [linux] - '@oxlint/linux-x64-musl@1.31.0': + '@oxlint/binding-linux-x64-musl@1.48.0': resolution: - { integrity: sha512-4avnH09FJRTOT2cULdDPG0s14C+Ku4cnbNye6XO7rsiX6Bprz+aQblLA+1WLOr7UfC/0zF+jnZ9K5VyBBJy9Kw== } + { integrity: sha512-6d7LIFFZGiavbHndhf1cK9kG9qmy2Dmr37sV9Ep7j3H+ciFdKSuOzdLh85mEUYMih+b+esMDlF5DU0WQRZPQjw== } + engines: { node: ^20.19.0 || >=22.12.0 } cpu: [x64] os: [linux] - '@oxlint/win32-arm64@1.31.0': + '@oxlint/binding-openharmony-arm64@1.48.0': + resolution: + { integrity: sha512-r+0KK9lK6vFp3tXAgDMOW32o12dxvKS3B9La1uYMGdWAMoSeu2RzG34KmzSpXu6MyLDl4aSVyZLFM8KGdEjwaw== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [openharmony] + + '@oxlint/binding-win32-arm64-msvc@1.48.0': resolution: - { integrity: sha512-mQaD5H93OUpxiGjC518t5wLQikf0Ur5mQEKO2VoTlkp01gqmrQ+hyCLOzABlsAIAeDJD58S9JwNOw4KFFnrqdw== } + { integrity: sha512-Nkw/MocyT3HSp0OJsKPXrcbxZqSPMTYnLLfsqsoiFKoL1ppVNL65MFa7vuTxJehPlBkjy+95gUgacZtuNMECrg== } + engines: { node: ^20.19.0 || >=22.12.0 } cpu: [arm64] os: [win32] - '@oxlint/win32-x64@1.31.0': + '@oxlint/binding-win32-ia32-msvc@1.48.0': resolution: - { integrity: sha512-AS/h58HfloccRlVs7P3zbyZfxNS62JuE8/3fYGjkiRlR1ZoDxdqmz5QgLEn+YxxFUTMmclGAPMFHg9z2Pk315A== } + { integrity: sha512-reO1SpefvRmeZSP+WeyWkQd1ArxxDD1MyKgMUKuB8lNuUoxk9QEohYtKnsfsxJuFwMT0JTr7p9wZjouA85GzGQ== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [ia32] + os: [win32] + + '@oxlint/binding-win32-x64-msvc@1.48.0': + resolution: + { integrity: sha512-T6zwhfcsrorqAybkOglZdPkTLlEwipbtdO1qjE+flbawvwOMsISoyiuaa7vM7zEyfq1hmDvMq1ndvkYFioranA== } + engines: { node: ^20.19.0 || >=22.12.0 } cpu: [x64] os: [win32] @@ -902,9 +977,9 @@ packages: resolution: { integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== } - '@types/node@20.19.25': + '@types/node@20.19.33': resolution: - { integrity: sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ== } + { integrity: sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw== } '@vercel/nft@0.29.4': resolution: @@ -939,9 +1014,9 @@ packages: { integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== } engines: { node: '>= 14' } - ansi-escapes@7.2.0: + ansi-escapes@7.3.0: resolution: - { integrity: sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw== } + { integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg== } engines: { node: '>=18' } ansi-regex@5.0.1: @@ -1006,6 +1081,11 @@ packages: resolution: { integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== } + balanced-match@4.0.3: + resolution: + { integrity: sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g== } + engines: { node: 20 || >=22 } + before-after-hook@4.0.0: resolution: { integrity: sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ== } @@ -1022,6 +1102,11 @@ packages: resolution: { integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== } + brace-expansion@5.0.2: + resolution: + { integrity: sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw== } + engines: { node: 20 || >=22 } + braces@3.0.3: resolution: { integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== } @@ -1055,9 +1140,9 @@ packages: resolution: { integrity: sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ== } - ci-info@4.3.1: + ci-info@4.4.0: resolution: - { integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA== } + { integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg== } engines: { node: '>=8' } ci-parallel-vars@1.0.1: @@ -1113,9 +1198,9 @@ packages: resolution: { integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== } - commander@14.0.2: + commander@14.0.3: resolution: - { integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ== } + { integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw== } engines: { node: '>=20' } common-path-prefix@3.0.0: @@ -1176,9 +1261,9 @@ packages: { integrity: sha512-KxdRyyFcS85pH3dnU8Y5yFUm2YJdaHwcBZWrfG8o89ZY9a13/f9itbN+YG3ELbBo9Pg5zvIozstmuV8bX13q6g== } engines: { node: '>=14.16' } - emnapi@1.7.1: + emnapi@1.8.1: resolution: - { integrity: sha512-wlLK2xFq+T+rCBlY6+lPlFVDEyE93b7hSn9dMrfWBIcPf4ArwUvymvvMnN9M5WWuiryYQe9M+UJrkqw4trdyRA== } + { integrity: sha512-34i2BbgHx1LnEO4JCGQYo6h6s4e4KrdWtdTHfllBNLbXSHPmdIHplxKejfabsRK+ukNciqVdalB+fxMibqHdaQ== } peerDependencies: node-addon-api: '>= 6.1.0' peerDependenciesMeta: @@ -1202,9 +1287,9 @@ packages: { integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q== } engines: { node: '>=18' } - es-toolkit@1.42.0: + es-toolkit@1.44.0: resolution: - { integrity: sha512-SLHIyY7VfDJBM8clz4+T2oquwTQxEzu263AyhVK4jREOAwJ+8eebaa4wM3nlvnAqhDrMm2EsA6hWHaQsMPQ1nA== } + { integrity: sha512-6penXeZalaV88MM3cGkFZZfOoLGWshWWfdy0tWw/RlVVyhvMaWSBTOvXNeiW3e5FwdS5ePW0LGEu17zT139ktg== } escalade@3.2.0: resolution: @@ -1236,9 +1321,9 @@ packages: { integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== } engines: { node: '>=0.10.0' } - eventemitter3@5.0.1: + eventemitter3@5.0.4: resolution: - { integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== } + { integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw== } fast-content-type-parse@3.0.0: resolution: @@ -1253,9 +1338,21 @@ packages: { integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== } engines: { node: '>=8.6.0' } - fastq@1.19.1: + fast-string-truncated-width@3.0.3: + resolution: + { integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g== } + + fast-string-width@3.0.2: + resolution: + { integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg== } + + fast-wrap-ansi@0.2.0: + resolution: + { integrity: sha512-rLV8JHxTyhVmFYhBJuMujcrHqOT2cnO5Zxj37qROj23CP39GXubJRBUFF0z8KFK77Uc0SukZUf7JZhsVEQ6n8w== } + + fastq@1.20.1: resolution: - { integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== } + { integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw== } figures@6.1.0: resolution: @@ -1286,9 +1383,9 @@ packages: { integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== } engines: { node: 6.* || 8.* || >= 10.* } - get-east-asian-width@1.4.0: + get-east-asian-width@1.5.0: resolution: - { integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q== } + { integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA== } engines: { node: '>=18' } glob-parent@5.1.2: @@ -1299,11 +1396,12 @@ packages: glob@10.5.0: resolution: { integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg== } + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true - glob@13.0.0: + glob@13.0.5: resolution: - { integrity: sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA== } + { integrity: sha512-BzXxZg24Ibra1pbQ/zE7Kys4Ua1ks7Bn6pKLkVPZ9FZe4JQS6/Q7ef3LG1H+k7lUf5l4T3PLSyYyYJVYUvfgTw== } engines: { node: 20 || >=22 } globby@14.1.0: @@ -1326,9 +1424,9 @@ packages: engines: { node: '>=18' } hasBin: true - iconv-lite@0.7.0: + iconv-lite@0.7.2: resolution: - { integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ== } + { integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw== } engines: { node: '>=0.10.0' } ignore-by-default@2.1.0: @@ -1404,10 +1502,10 @@ packages: resolution: { integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== } - isexe@3.1.1: + isexe@3.1.5: resolution: - { integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== } - engines: { node: '>=16' } + { integrity: sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w== } + engines: { node: '>=18' } jackspeak@3.4.3: resolution: @@ -1449,9 +1547,9 @@ packages: { integrity: sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ== } engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } - lodash@4.17.21: + lodash@4.17.23: resolution: - { integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== } + { integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w== } log-update@6.1.0: resolution: @@ -1462,9 +1560,9 @@ packages: resolution: { integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== } - lru-cache@11.2.4: + lru-cache@11.2.6: resolution: - { integrity: sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg== } + { integrity: sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ== } engines: { node: 20 || >=22 } matcher@5.0.0: @@ -1502,9 +1600,9 @@ packages: { integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA== } engines: { node: '>=18' } - minimatch@10.1.1: + minimatch@10.2.1: resolution: - { integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ== } + { integrity: sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A== } engines: { node: 20 || >=22 } minimatch@9.0.5: @@ -1586,13 +1684,13 @@ packages: { integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ== } engines: { node: '>=18' } - oxlint@1.31.0: + oxlint@1.48.0: resolution: - { integrity: sha512-U+Z3VShi1zuLF2Hz/pm4vWJUBm5sDHjwSzj340tz4tS2yXg9H5PTipsZv+Yu/alg6Z7EM2cZPKGNBZAvmdfkQg== } + { integrity: sha512-m5vyVBgPtPhVCJc3xI//8je9lRc8bYuYB4R/1PH3VPGOjA4vjVhkHtyJukdEjYEjwrw4Qf1eIf+pP9xvfhfMow== } engines: { node: ^20.19.0 || >=22.12.0 } hasBin: true peerDependencies: - oxlint-tsgolint: '>=0.8.1' + oxlint-tsgolint: '>=0.12.2' peerDependenciesMeta: oxlint-tsgolint: optional: true @@ -1662,9 +1760,9 @@ packages: { integrity: sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg== } engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } - prettier@3.7.4: + prettier@3.8.1: resolution: - { integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA== } + { integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg== } engines: { node: '>=14' } hasBin: true @@ -1719,9 +1817,9 @@ packages: resolution: { integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== } - semver@7.7.3: + semver@7.7.4: resolution: - { integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== } + { integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA== } engines: { node: '>=10' } hasBin: true @@ -1794,9 +1892,9 @@ packages: { integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ== } engines: { node: '>=18' } - string-width@8.1.0: + string-width@8.2.0: resolution: - { integrity: sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg== } + { integrity: sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw== } engines: { node: '>=20' } strip-ansi@6.0.1: @@ -1814,9 +1912,9 @@ packages: { integrity: sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw== } engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } - tar@7.5.2: + tar@7.5.9: resolution: - { integrity: sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg== } + { integrity: sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg== } engines: { node: '>=18' } temp-dir@3.0.0: @@ -1942,12 +2040,12 @@ packages: engines: { node: '>=12' } snapshots: - '@emnapi/core@1.7.1': + '@emnapi/core@1.8.1': dependencies: '@emnapi/wasi-threads': 1.1.0 tslib: 2.8.1 - '@emnapi/runtime@1.7.1': + '@emnapi/runtime@1.8.1': dependencies: tslib: 2.8.1 @@ -1955,130 +2053,124 @@ snapshots: dependencies: tslib: 2.8.1 - '@inquirer/ansi@2.0.2': {} + '@inquirer/ansi@2.0.3': {} - '@inquirer/checkbox@5.0.2(@types/node@20.19.25)': + '@inquirer/checkbox@5.0.7(@types/node@20.19.33)': dependencies: - '@inquirer/ansi': 2.0.2 - '@inquirer/core': 11.0.2(@types/node@20.19.25) - '@inquirer/figures': 2.0.2 - '@inquirer/type': 4.0.2(@types/node@20.19.25) + '@inquirer/ansi': 2.0.3 + '@inquirer/core': 11.1.4(@types/node@20.19.33) + '@inquirer/figures': 2.0.3 + '@inquirer/type': 4.0.3(@types/node@20.19.33) optionalDependencies: - '@types/node': 20.19.25 + '@types/node': 20.19.33 - '@inquirer/confirm@6.0.2(@types/node@20.19.25)': + '@inquirer/confirm@6.0.7(@types/node@20.19.33)': dependencies: - '@inquirer/core': 11.0.2(@types/node@20.19.25) - '@inquirer/type': 4.0.2(@types/node@20.19.25) + '@inquirer/core': 11.1.4(@types/node@20.19.33) + '@inquirer/type': 4.0.3(@types/node@20.19.33) optionalDependencies: - '@types/node': 20.19.25 + '@types/node': 20.19.33 - '@inquirer/core@11.0.2(@types/node@20.19.25)': + '@inquirer/core@11.1.4(@types/node@20.19.33)': dependencies: - '@inquirer/ansi': 2.0.2 - '@inquirer/figures': 2.0.2 - '@inquirer/type': 4.0.2(@types/node@20.19.25) + '@inquirer/ansi': 2.0.3 + '@inquirer/figures': 2.0.3 + '@inquirer/type': 4.0.3(@types/node@20.19.33) cli-width: 4.1.0 + fast-wrap-ansi: 0.2.0 mute-stream: 3.0.0 signal-exit: 4.1.0 - wrap-ansi: 9.0.2 optionalDependencies: - '@types/node': 20.19.25 + '@types/node': 20.19.33 - '@inquirer/editor@5.0.2(@types/node@20.19.25)': + '@inquirer/editor@5.0.7(@types/node@20.19.33)': dependencies: - '@inquirer/core': 11.0.2(@types/node@20.19.25) - '@inquirer/external-editor': 2.0.2(@types/node@20.19.25) - '@inquirer/type': 4.0.2(@types/node@20.19.25) + '@inquirer/core': 11.1.4(@types/node@20.19.33) + '@inquirer/external-editor': 2.0.3(@types/node@20.19.33) + '@inquirer/type': 4.0.3(@types/node@20.19.33) optionalDependencies: - '@types/node': 20.19.25 + '@types/node': 20.19.33 - '@inquirer/expand@5.0.2(@types/node@20.19.25)': + '@inquirer/expand@5.0.7(@types/node@20.19.33)': dependencies: - '@inquirer/core': 11.0.2(@types/node@20.19.25) - '@inquirer/type': 4.0.2(@types/node@20.19.25) + '@inquirer/core': 11.1.4(@types/node@20.19.33) + '@inquirer/type': 4.0.3(@types/node@20.19.33) optionalDependencies: - '@types/node': 20.19.25 + '@types/node': 20.19.33 - '@inquirer/external-editor@2.0.2(@types/node@20.19.25)': + '@inquirer/external-editor@2.0.3(@types/node@20.19.33)': dependencies: chardet: 2.1.1 - iconv-lite: 0.7.0 + iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 20.19.25 + '@types/node': 20.19.33 - '@inquirer/figures@2.0.2': {} + '@inquirer/figures@2.0.3': {} - '@inquirer/input@5.0.2(@types/node@20.19.25)': + '@inquirer/input@5.0.7(@types/node@20.19.33)': dependencies: - '@inquirer/core': 11.0.2(@types/node@20.19.25) - '@inquirer/type': 4.0.2(@types/node@20.19.25) + '@inquirer/core': 11.1.4(@types/node@20.19.33) + '@inquirer/type': 4.0.3(@types/node@20.19.33) optionalDependencies: - '@types/node': 20.19.25 + '@types/node': 20.19.33 - '@inquirer/number@4.0.2(@types/node@20.19.25)': + '@inquirer/number@4.0.7(@types/node@20.19.33)': dependencies: - '@inquirer/core': 11.0.2(@types/node@20.19.25) - '@inquirer/type': 4.0.2(@types/node@20.19.25) + '@inquirer/core': 11.1.4(@types/node@20.19.33) + '@inquirer/type': 4.0.3(@types/node@20.19.33) optionalDependencies: - '@types/node': 20.19.25 + '@types/node': 20.19.33 - '@inquirer/password@5.0.2(@types/node@20.19.25)': + '@inquirer/password@5.0.7(@types/node@20.19.33)': dependencies: - '@inquirer/ansi': 2.0.2 - '@inquirer/core': 11.0.2(@types/node@20.19.25) - '@inquirer/type': 4.0.2(@types/node@20.19.25) + '@inquirer/ansi': 2.0.3 + '@inquirer/core': 11.1.4(@types/node@20.19.33) + '@inquirer/type': 4.0.3(@types/node@20.19.33) optionalDependencies: - '@types/node': 20.19.25 - - '@inquirer/prompts@8.0.2(@types/node@20.19.25)': - dependencies: - '@inquirer/checkbox': 5.0.2(@types/node@20.19.25) - '@inquirer/confirm': 6.0.2(@types/node@20.19.25) - '@inquirer/editor': 5.0.2(@types/node@20.19.25) - '@inquirer/expand': 5.0.2(@types/node@20.19.25) - '@inquirer/input': 5.0.2(@types/node@20.19.25) - '@inquirer/number': 4.0.2(@types/node@20.19.25) - '@inquirer/password': 5.0.2(@types/node@20.19.25) - '@inquirer/rawlist': 5.0.2(@types/node@20.19.25) - '@inquirer/search': 4.0.2(@types/node@20.19.25) - '@inquirer/select': 5.0.2(@types/node@20.19.25) + '@types/node': 20.19.33 + + '@inquirer/prompts@8.2.1(@types/node@20.19.33)': + dependencies: + '@inquirer/checkbox': 5.0.7(@types/node@20.19.33) + '@inquirer/confirm': 6.0.7(@types/node@20.19.33) + '@inquirer/editor': 5.0.7(@types/node@20.19.33) + '@inquirer/expand': 5.0.7(@types/node@20.19.33) + '@inquirer/input': 5.0.7(@types/node@20.19.33) + '@inquirer/number': 4.0.7(@types/node@20.19.33) + '@inquirer/password': 5.0.7(@types/node@20.19.33) + '@inquirer/rawlist': 5.2.3(@types/node@20.19.33) + '@inquirer/search': 4.1.3(@types/node@20.19.33) + '@inquirer/select': 5.0.7(@types/node@20.19.33) optionalDependencies: - '@types/node': 20.19.25 + '@types/node': 20.19.33 - '@inquirer/rawlist@5.0.2(@types/node@20.19.25)': + '@inquirer/rawlist@5.2.3(@types/node@20.19.33)': dependencies: - '@inquirer/core': 11.0.2(@types/node@20.19.25) - '@inquirer/type': 4.0.2(@types/node@20.19.25) + '@inquirer/core': 11.1.4(@types/node@20.19.33) + '@inquirer/type': 4.0.3(@types/node@20.19.33) optionalDependencies: - '@types/node': 20.19.25 + '@types/node': 20.19.33 - '@inquirer/search@4.0.2(@types/node@20.19.25)': + '@inquirer/search@4.1.3(@types/node@20.19.33)': dependencies: - '@inquirer/core': 11.0.2(@types/node@20.19.25) - '@inquirer/figures': 2.0.2 - '@inquirer/type': 4.0.2(@types/node@20.19.25) + '@inquirer/core': 11.1.4(@types/node@20.19.33) + '@inquirer/figures': 2.0.3 + '@inquirer/type': 4.0.3(@types/node@20.19.33) optionalDependencies: - '@types/node': 20.19.25 + '@types/node': 20.19.33 - '@inquirer/select@5.0.2(@types/node@20.19.25)': + '@inquirer/select@5.0.7(@types/node@20.19.33)': dependencies: - '@inquirer/ansi': 2.0.2 - '@inquirer/core': 11.0.2(@types/node@20.19.25) - '@inquirer/figures': 2.0.2 - '@inquirer/type': 4.0.2(@types/node@20.19.25) + '@inquirer/ansi': 2.0.3 + '@inquirer/core': 11.1.4(@types/node@20.19.33) + '@inquirer/figures': 2.0.3 + '@inquirer/type': 4.0.3(@types/node@20.19.33) optionalDependencies: - '@types/node': 20.19.25 + '@types/node': 20.19.33 - '@inquirer/type@4.0.2(@types/node@20.19.25)': + '@inquirer/type@4.0.3(@types/node@20.19.33)': optionalDependencies: - '@types/node': 20.19.25 - - '@isaacs/balanced-match@4.0.1': {} - - '@isaacs/brace-expansion@5.0.0': - dependencies: - '@isaacs/balanced-match': 4.0.1 + '@types/node': 20.19.33 '@isaacs/cliui@8.0.2': dependencies: @@ -2100,28 +2192,28 @@ snapshots: https-proxy-agent: 7.0.6 node-fetch: 2.7.0 nopt: 8.1.0 - semver: 7.7.3 - tar: 7.5.2 + semver: 7.7.4 + tar: 7.5.9 transitivePeerDependencies: - encoding - supports-color - '@napi-rs/cli@3.5.0(@emnapi/runtime@1.7.1)(@types/node@20.19.25)': + '@napi-rs/cli@3.5.1(@emnapi/runtime@1.8.1)(@types/node@20.19.33)': dependencies: - '@inquirer/prompts': 8.0.2(@types/node@20.19.25) + '@inquirer/prompts': 8.2.1(@types/node@20.19.33) '@napi-rs/cross-toolchain': 1.0.3 '@napi-rs/wasm-tools': 1.0.1 '@octokit/rest': 22.0.1 clipanion: 4.0.0-rc.4(typanion@3.14.0) colorette: 2.0.20 - emnapi: 1.7.1 - es-toolkit: 1.42.0 + emnapi: 1.8.1 + es-toolkit: 1.44.0 js-yaml: 4.1.1 obug: 2.1.1 - semver: 7.7.3 + semver: 7.7.4 typanion: 3.14.0 optionalDependencies: - '@emnapi/runtime': 1.7.1 + '@emnapi/runtime': 1.8.1 transitivePeerDependencies: - '@napi-rs/cross-toolchain-arm64-target-aarch64' - '@napi-rs/cross-toolchain-arm64-target-armv7' @@ -2186,7 +2278,7 @@ snapshots: '@napi-rs/lzma-wasm32-wasi@1.4.5': dependencies: - '@napi-rs/wasm-runtime': 1.1.0 + '@napi-rs/wasm-runtime': 1.1.1 optional: true '@napi-rs/lzma-win32-arm64-msvc@1.4.5': @@ -2256,7 +2348,7 @@ snapshots: '@napi-rs/tar-wasm32-wasi@1.1.0': dependencies: - '@napi-rs/wasm-runtime': 1.1.0 + '@napi-rs/wasm-runtime': 1.1.1 optional: true '@napi-rs/tar-win32-arm64-msvc@1.1.0': @@ -2287,10 +2379,10 @@ snapshots: '@napi-rs/tar-win32-ia32-msvc': 1.1.0 '@napi-rs/tar-win32-x64-msvc': 1.1.0 - '@napi-rs/wasm-runtime@1.1.0': + '@napi-rs/wasm-runtime@1.1.1': dependencies: - '@emnapi/core': 1.7.1 - '@emnapi/runtime': 1.7.1 + '@emnapi/core': 1.8.1 + '@emnapi/runtime': 1.8.1 '@tybys/wasm-util': 0.10.1 optional: true @@ -2323,7 +2415,7 @@ snapshots: '@napi-rs/wasm-tools-wasm32-wasi@1.0.1': dependencies: - '@napi-rs/wasm-runtime': 1.1.0 + '@napi-rs/wasm-runtime': 1.1.1 optional: true '@napi-rs/wasm-tools-win32-arm64-msvc@1.0.1': @@ -2361,7 +2453,7 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.1 + fastq: 1.20.1 '@octokit/auth-token@6.0.0': {} @@ -2375,7 +2467,7 @@ snapshots: before-after-hook: 4.0.0 universal-user-agent: 7.0.3 - '@octokit/endpoint@11.0.2': + '@octokit/endpoint@11.0.3': dependencies: '@octokit/types': 16.0.0 universal-user-agent: 7.0.3 @@ -2408,7 +2500,7 @@ snapshots: '@octokit/request@10.0.7': dependencies: - '@octokit/endpoint': 11.0.2 + '@octokit/endpoint': 11.0.3 '@octokit/request-error': 7.1.0 '@octokit/types': 16.0.0 fast-content-type-parse: 3.0.0 @@ -2466,7 +2558,7 @@ snapshots: '@oxc-node/core-wasm32-wasi@0.0.34': dependencies: - '@napi-rs/wasm-runtime': 1.1.0 + '@napi-rs/wasm-runtime': 1.1.1 optional: true '@oxc-node/core-win32-arm64-msvc@0.0.34': @@ -2500,28 +2592,61 @@ snapshots: '@oxc-node/core-win32-ia32-msvc': 0.0.34 '@oxc-node/core-win32-x64-msvc': 0.0.34 - '@oxlint/darwin-arm64@1.31.0': + '@oxlint/binding-android-arm-eabi@1.48.0': + optional: true + + '@oxlint/binding-android-arm64@1.48.0': + optional: true + + '@oxlint/binding-darwin-arm64@1.48.0': + optional: true + + '@oxlint/binding-darwin-x64@1.48.0': + optional: true + + '@oxlint/binding-freebsd-x64@1.48.0': + optional: true + + '@oxlint/binding-linux-arm-gnueabihf@1.48.0': + optional: true + + '@oxlint/binding-linux-arm-musleabihf@1.48.0': + optional: true + + '@oxlint/binding-linux-arm64-gnu@1.48.0': + optional: true + + '@oxlint/binding-linux-arm64-musl@1.48.0': optional: true - '@oxlint/darwin-x64@1.31.0': + '@oxlint/binding-linux-ppc64-gnu@1.48.0': optional: true - '@oxlint/linux-arm64-gnu@1.31.0': + '@oxlint/binding-linux-riscv64-gnu@1.48.0': optional: true - '@oxlint/linux-arm64-musl@1.31.0': + '@oxlint/binding-linux-riscv64-musl@1.48.0': optional: true - '@oxlint/linux-x64-gnu@1.31.0': + '@oxlint/binding-linux-s390x-gnu@1.48.0': optional: true - '@oxlint/linux-x64-musl@1.31.0': + '@oxlint/binding-linux-x64-gnu@1.48.0': optional: true - '@oxlint/win32-arm64@1.31.0': + '@oxlint/binding-linux-x64-musl@1.48.0': optional: true - '@oxlint/win32-x64@1.31.0': + '@oxlint/binding-openharmony-arm64@1.48.0': + optional: true + + '@oxlint/binding-win32-arm64-msvc@1.48.0': + optional: true + + '@oxlint/binding-win32-ia32-msvc@1.48.0': + optional: true + + '@oxlint/binding-win32-x64-msvc@1.48.0': optional: true '@pkgjs/parseargs@0.11.0': @@ -2543,7 +2668,7 @@ snapshots: '@types/estree@1.0.8': {} - '@types/node@20.19.25': + '@types/node@20.19.33': dependencies: undici-types: 6.21.0 @@ -2580,7 +2705,7 @@ snapshots: agent-base@7.1.4: {} - ansi-escapes@7.2.0: + ansi-escapes@7.3.0: dependencies: environment: 1.1.0 @@ -2620,7 +2745,7 @@ snapshots: cbor: 10.0.11 chalk: 5.6.2 chunkd: 2.0.1 - ci-info: 4.3.1 + ci-info: 4.4.0 ci-parallel-vars: 1.0.1 cli-truncate: 4.0.0 code-excerpt: 4.0.0 @@ -2657,6 +2782,8 @@ snapshots: balanced-match@1.0.2: {} + balanced-match@4.0.3: {} + before-after-hook@4.0.0: {} bindings@1.5.0: @@ -2669,6 +2796,10 @@ snapshots: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.2: + dependencies: + balanced-match: 4.0.3 + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -2687,7 +2818,7 @@ snapshots: chunkd@2.0.1: {} - ci-info@4.3.1: {} + ci-info@4.4.0: {} ci-parallel-vars@1.0.1: {} @@ -2703,7 +2834,7 @@ snapshots: cli-truncate@5.1.1: dependencies: slice-ansi: 7.1.2 - string-width: 8.1.0 + string-width: 8.2.0 cli-width@4.1.0: {} @@ -2729,7 +2860,7 @@ snapshots: colorette@2.0.20: {} - commander@14.0.2: {} + commander@14.0.3: {} common-path-prefix@3.0.0: {} @@ -2739,9 +2870,9 @@ snapshots: esutils: 2.0.3 fast-diff: 1.3.0 js-string-escape: 1.0.1 - lodash: 4.17.21 + lodash: 4.17.23 md5-hex: 3.0.1 - semver: 7.7.3 + semver: 7.7.4 well-known-symbols: 2.0.0 consola@3.4.2: {} @@ -2772,7 +2903,7 @@ snapshots: emittery@1.2.0: {} - emnapi@1.7.1: {} + emnapi@1.8.1: {} emoji-regex@10.6.0: {} @@ -2782,7 +2913,7 @@ snapshots: environment@1.1.0: {} - es-toolkit@1.42.0: {} + es-toolkit@1.44.0: {} escalade@3.2.0: {} @@ -2796,7 +2927,7 @@ snapshots: esutils@2.0.3: {} - eventemitter3@5.0.1: {} + eventemitter3@5.0.4: {} fast-content-type-parse@3.0.0: {} @@ -2810,7 +2941,17 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.8 - fastq@1.19.1: + fast-string-truncated-width@3.0.3: {} + + fast-string-width@3.0.2: + dependencies: + fast-string-truncated-width: 3.0.3 + + fast-wrap-ansi@0.2.0: + dependencies: + fast-string-width: 3.0.2 + + fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -2833,7 +2974,7 @@ snapshots: get-caller-file@2.0.5: {} - get-east-asian-width@1.4.0: {} + get-east-asian-width@1.5.0: {} glob-parent@5.1.2: dependencies: @@ -2848,9 +2989,9 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 - glob@13.0.0: + glob@13.0.5: dependencies: - minimatch: 10.1.1 + minimatch: 10.2.1 minipass: 7.1.2 path-scurry: 2.0.1 @@ -2874,7 +3015,7 @@ snapshots: husky@9.1.7: {} - iconv-lite@0.7.0: + iconv-lite@0.7.2: dependencies: safer-buffer: 2.1.2 @@ -2896,7 +3037,7 @@ snapshots: is-fullwidth-code-point@5.1.0: dependencies: - get-east-asian-width: 1.4.0 + get-east-asian-width: 1.5.0 is-glob@4.0.3: dependencies: @@ -2912,7 +3053,7 @@ snapshots: isexe@2.0.0: {} - isexe@3.1.1: {} + isexe@3.1.5: {} jackspeak@3.4.3: dependencies: @@ -2935,7 +3076,7 @@ snapshots: lint-staged@16.2.7: dependencies: - commander: 14.0.2 + commander: 14.0.3 listr2: 9.0.5 micromatch: 4.0.8 nano-spawn: 2.0.0 @@ -2947,18 +3088,18 @@ snapshots: dependencies: cli-truncate: 5.1.1 colorette: 2.0.20 - eventemitter3: 5.0.1 + eventemitter3: 5.0.4 log-update: 6.1.0 rfdc: 1.4.1 wrap-ansi: 9.0.2 load-json-file@7.0.1: {} - lodash@4.17.21: {} + lodash@4.17.23: {} log-update@6.1.0: dependencies: - ansi-escapes: 7.2.0 + ansi-escapes: 7.3.0 cli-cursor: 5.0.0 slice-ansi: 7.1.2 strip-ansi: 7.1.2 @@ -2966,7 +3107,7 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.2.4: {} + lru-cache@11.2.6: {} matcher@5.0.0: dependencies: @@ -2991,9 +3132,9 @@ snapshots: mimic-function@5.0.1: {} - minimatch@10.1.1: + minimatch@10.2.1: dependencies: - '@isaacs/brace-expansion': 5.0.0 + brace-expansion: 5.0.2 minimatch@9.0.5: dependencies: @@ -3044,16 +3185,27 @@ snapshots: dependencies: mimic-function: 5.0.1 - oxlint@1.31.0: + oxlint@1.48.0: optionalDependencies: - '@oxlint/darwin-arm64': 1.31.0 - '@oxlint/darwin-x64': 1.31.0 - '@oxlint/linux-arm64-gnu': 1.31.0 - '@oxlint/linux-arm64-musl': 1.31.0 - '@oxlint/linux-x64-gnu': 1.31.0 - '@oxlint/linux-x64-musl': 1.31.0 - '@oxlint/win32-arm64': 1.31.0 - '@oxlint/win32-x64': 1.31.0 + '@oxlint/binding-android-arm-eabi': 1.48.0 + '@oxlint/binding-android-arm64': 1.48.0 + '@oxlint/binding-darwin-arm64': 1.48.0 + '@oxlint/binding-darwin-x64': 1.48.0 + '@oxlint/binding-freebsd-x64': 1.48.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.48.0 + '@oxlint/binding-linux-arm-musleabihf': 1.48.0 + '@oxlint/binding-linux-arm64-gnu': 1.48.0 + '@oxlint/binding-linux-arm64-musl': 1.48.0 + '@oxlint/binding-linux-ppc64-gnu': 1.48.0 + '@oxlint/binding-linux-riscv64-gnu': 1.48.0 + '@oxlint/binding-linux-riscv64-musl': 1.48.0 + '@oxlint/binding-linux-s390x-gnu': 1.48.0 + '@oxlint/binding-linux-x64-gnu': 1.48.0 + '@oxlint/binding-linux-x64-musl': 1.48.0 + '@oxlint/binding-openharmony-arm64': 1.48.0 + '@oxlint/binding-win32-arm64-msvc': 1.48.0 + '@oxlint/binding-win32-ia32-msvc': 1.48.0 + '@oxlint/binding-win32-x64-msvc': 1.48.0 p-map@7.0.4: {} @@ -3075,7 +3227,7 @@ snapshots: path-scurry@2.0.1: dependencies: - lru-cache: 11.2.4 + lru-cache: 11.2.6 minipass: 7.1.2 path-type@6.0.0: {} @@ -3092,7 +3244,7 @@ snapshots: dependencies: irregular-plurals: 3.5.0 - prettier@3.7.4: {} + prettier@3.8.1: {} pretty-ms@9.3.0: dependencies: @@ -3128,7 +3280,7 @@ snapshots: safer-buffer@2.1.2: {} - semver@7.7.3: {} + semver@7.7.4: {} serialize-error@7.0.1: dependencies: @@ -3179,12 +3331,12 @@ snapshots: string-width@7.2.0: dependencies: emoji-regex: 10.6.0 - get-east-asian-width: 1.4.0 + get-east-asian-width: 1.5.0 strip-ansi: 7.1.2 - string-width@8.1.0: + string-width@8.2.0: dependencies: - get-east-asian-width: 1.4.0 + get-east-asian-width: 1.5.0 strip-ansi: 7.1.2 strip-ansi@6.0.1: @@ -3202,7 +3354,7 @@ snapshots: serialize-error: 7.0.1 strip-ansi: 7.1.2 - tar@7.5.2: + tar@7.5.9: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 @@ -3249,7 +3401,7 @@ snapshots: which@5.0.0: dependencies: - isexe: 3.1.1 + isexe: 3.1.5 wrap-ansi@7.0.0: dependencies: From c7100f9dd4de91b4a56ac7c30e415bc3adaabc6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carbon=20=E7=A2=B3=E8=8B=AF?= Date: Thu, 19 Feb 2026 05:43:38 +0800 Subject: [PATCH 06/10] chore: update lockfile --- pnpm-lock.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5c16db2..bf58d29 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -61,6 +61,19 @@ importers: typescript: specifier: ^5.9.2 version: 5.9.3 + optionalDependencies: + rush-fs-win32-x64-msvc: + specifier: 0.0.1 + version: 0.0.1 + rush-fs-darwin-x64: + specifier: 0.0.1 + version: 0.0.1 + rush-fs-linux-x64-gnu: + specifier: 0.0.1 + version: 0.0.1 + rush-fs-darwin-arm64: + specifier: 0.0.1 + version: 0.0.1 packages: '@emnapi/core@1.8.1': From 173655794da8e9fe94955d909e34b2217b48113a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carbon=20=E7=A2=B3=E8=8B=AF?= Date: Thu, 19 Feb 2026 05:50:52 +0800 Subject: [PATCH 07/10] 0.0.2 --- Cargo.toml | 4 +- index.js | 112 +++++++++++++++++++++++++------------------------ package.json | 10 ++--- pnpm-lock.yaml | 20 ++++----- 4 files changed, 75 insertions(+), 71 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index ff81a12..9d0f79e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,8 +2,8 @@ [package] authors = [] edition = "2021" -name = "hyper_fs" -version = "0.1.0" +name = "rush_fs" +version = "0.0.2" [lib] crate-type = ["cdylib"] diff --git a/index.js b/index.js index 7bd48a4..baa8752 100644 --- a/index.js +++ b/index.js @@ -77,8 +77,8 @@ function requireNative() { try { const binding = require('rush-fs-android-arm64') const bindingPackageVersion = require('rush-fs-android-arm64/package.json').version - if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -93,8 +93,8 @@ function requireNative() { try { const binding = require('rush-fs-android-arm-eabi') const bindingPackageVersion = require('rush-fs-android-arm-eabi/package.json').version - if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -114,8 +114,8 @@ function requireNative() { try { const binding = require('rush-fs-win32-x64-gnu') const bindingPackageVersion = require('rush-fs-win32-x64-gnu/package.json').version - if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -130,8 +130,8 @@ function requireNative() { try { const binding = require('rush-fs-win32-x64-msvc') const bindingPackageVersion = require('rush-fs-win32-x64-msvc/package.json').version - if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -147,8 +147,8 @@ function requireNative() { try { const binding = require('rush-fs-win32-ia32-msvc') const bindingPackageVersion = require('rush-fs-win32-ia32-msvc/package.json').version - if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -163,8 +163,8 @@ function requireNative() { try { const binding = require('rush-fs-win32-arm64-msvc') const bindingPackageVersion = require('rush-fs-win32-arm64-msvc/package.json').version - if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -182,8 +182,8 @@ function requireNative() { try { const binding = require('rush-fs-darwin-universal') const bindingPackageVersion = require('rush-fs-darwin-universal/package.json').version - if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -198,8 +198,8 @@ function requireNative() { try { const binding = require('rush-fs-darwin-x64') const bindingPackageVersion = require('rush-fs-darwin-x64/package.json').version - if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -214,8 +214,8 @@ function requireNative() { try { const binding = require('rush-fs-darwin-arm64') const bindingPackageVersion = require('rush-fs-darwin-arm64/package.json').version - if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -234,8 +234,8 @@ function requireNative() { try { const binding = require('rush-fs-freebsd-x64') const bindingPackageVersion = require('rush-fs-freebsd-x64/package.json').version - if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -250,8 +250,8 @@ function requireNative() { try { const binding = require('rush-fs-freebsd-arm64') const bindingPackageVersion = require('rush-fs-freebsd-arm64/package.json').version - if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -271,8 +271,8 @@ function requireNative() { try { const binding = require('rush-fs-linux-x64-musl') const bindingPackageVersion = require('rush-fs-linux-x64-musl/package.json').version - if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -287,8 +287,8 @@ function requireNative() { try { const binding = require('rush-fs-linux-x64-gnu') const bindingPackageVersion = require('rush-fs-linux-x64-gnu/package.json').version - if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -305,8 +305,8 @@ function requireNative() { try { const binding = require('rush-fs-linux-arm64-musl') const bindingPackageVersion = require('rush-fs-linux-arm64-musl/package.json').version - if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -321,8 +321,8 @@ function requireNative() { try { const binding = require('rush-fs-linux-arm64-gnu') const bindingPackageVersion = require('rush-fs-linux-arm64-gnu/package.json').version - if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -339,8 +339,8 @@ function requireNative() { try { const binding = require('rush-fs-linux-arm-musleabihf') const bindingPackageVersion = require('rush-fs-linux-arm-musleabihf/package.json').version - if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -355,8 +355,8 @@ function requireNative() { try { const binding = require('rush-fs-linux-arm-gnueabihf') const bindingPackageVersion = require('rush-fs-linux-arm-gnueabihf/package.json').version - if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -373,8 +373,8 @@ function requireNative() { try { const binding = require('rush-fs-linux-loong64-musl') const bindingPackageVersion = require('rush-fs-linux-loong64-musl/package.json').version - if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -389,8 +389,8 @@ function requireNative() { try { const binding = require('rush-fs-linux-loong64-gnu') const bindingPackageVersion = require('rush-fs-linux-loong64-gnu/package.json').version - if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -407,8 +407,8 @@ function requireNative() { try { const binding = require('rush-fs-linux-riscv64-musl') const bindingPackageVersion = require('rush-fs-linux-riscv64-musl/package.json').version - if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -423,8 +423,8 @@ function requireNative() { try { const binding = require('rush-fs-linux-riscv64-gnu') const bindingPackageVersion = require('rush-fs-linux-riscv64-gnu/package.json').version - if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -440,8 +440,8 @@ function requireNative() { try { const binding = require('rush-fs-linux-ppc64-gnu') const bindingPackageVersion = require('rush-fs-linux-ppc64-gnu/package.json').version - if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -456,8 +456,8 @@ function requireNative() { try { const binding = require('rush-fs-linux-s390x-gnu') const bindingPackageVersion = require('rush-fs-linux-s390x-gnu/package.json').version - if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -476,8 +476,8 @@ function requireNative() { try { const binding = require('rush-fs-openharmony-arm64') const bindingPackageVersion = require('rush-fs-openharmony-arm64/package.json').version - if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -492,8 +492,8 @@ function requireNative() { try { const binding = require('rush-fs-openharmony-x64') const bindingPackageVersion = require('rush-fs-openharmony-x64/package.json').version - if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -508,8 +508,8 @@ function requireNative() { try { const binding = require('rush-fs-openharmony-arm') const bindingPackageVersion = require('rush-fs-openharmony-arm/package.json').version - if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -536,13 +536,17 @@ if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) { wasiBindingError = err } } - if (!nativeBinding) { + if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) { try { wasiBinding = require('rush-fs-wasm32-wasi') nativeBinding = wasiBinding } catch (err) { if (process.env.NAPI_RS_FORCE_WASI) { - wasiBindingError.cause = err + if (!wasiBindingError) { + wasiBindingError = err + } else { + wasiBindingError.cause = err + } loadErrors.push(err) } } diff --git a/package.json b/package.json index 4150356..b3f6a25 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rush-fs", - "version": "0.0.1", + "version": "0.0.2", "description": "High-performance drop-in replacement for Node.js fs module, powered by Rust", "main": "index.js", "repository": { @@ -115,9 +115,9 @@ }, "packageManager": "pnpm@9.15.4", "optionalDependencies": { - "rush-fs-win32-x64-msvc": "0.0.1", - "rush-fs-darwin-x64": "0.0.1", - "rush-fs-linux-x64-gnu": "0.0.1", - "rush-fs-darwin-arm64": "0.0.1" + "rush-fs-win32-x64-msvc": "0.0.2", + "rush-fs-darwin-x64": "0.0.2", + "rush-fs-linux-x64-gnu": "0.0.2", + "rush-fs-darwin-arm64": "0.0.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bf58d29..336b1e2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -62,18 +62,18 @@ importers: specifier: ^5.9.2 version: 5.9.3 optionalDependencies: - rush-fs-win32-x64-msvc: - specifier: 0.0.1 - version: 0.0.1 + rush-fs-darwin-arm64: + specifier: 0.0.2 + version: 0.0.2 rush-fs-darwin-x64: - specifier: 0.0.1 - version: 0.0.1 + specifier: 0.0.2 + version: 0.0.2 rush-fs-linux-x64-gnu: - specifier: 0.0.1 - version: 0.0.1 - rush-fs-darwin-arm64: - specifier: 0.0.1 - version: 0.0.1 + specifier: 0.0.2 + version: 0.0.2 + rush-fs-win32-x64-msvc: + specifier: 0.0.2 + version: 0.0.2 packages: '@emnapi/core@1.8.1': From f498914ac95b3905a73f9b0b9c2575949af568b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carbon=20=E7=A2=B3=E8=8B=AF?= Date: Thu, 19 Feb 2026 05:50:52 +0800 Subject: [PATCH 08/10] 0.0.2 --- README.md | 13 ++++++++++++- package.json | 8 +------- pnpm-lock.yaml | 13 ------------- 3 files changed, 13 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 55e4c0f..41947b3 100644 --- a/README.md +++ b/README.md @@ -519,7 +519,18 @@ See [CONTRIBUTING.md](./CONTRIBUTING.md) for the complete development guide — ## Publishing (Maintainers Only) -`rush-fs` ships prebuilt native binaries per platform (see `optionalDependencies` in `package.json`). When cutting a release you must publish both the platform-specific packages and the main package: +`rush-fs` ships prebuilt native binaries per platform. In this repo, `optionalDependencies` are omitted so CI can use `pnpm install --frozen-lockfile` (the platform packages are not published until release). **Before publishing**, add them back to `package.json` with the same version as the main package, for example: + +```json +"optionalDependencies": { + "rush-fs-win32-x64-msvc": "", + "rush-fs-darwin-x64": "", + "rush-fs-linux-x64-gnu": "", + "rush-fs-darwin-arm64": "" +} +``` + +Then publish both the platform-specific packages and the main package: 1. Ensure you are logged in to npm (`npm login`). 2. Bump the version via `pnpm version ` (this runs `pnpm preversion` to build the release binaries). diff --git a/package.json b/package.json index b3f6a25..b382cdd 100644 --- a/package.json +++ b/package.json @@ -113,11 +113,5 @@ "singleQuote": true, "arrowParens": "always" }, - "packageManager": "pnpm@9.15.4", - "optionalDependencies": { - "rush-fs-win32-x64-msvc": "0.0.2", - "rush-fs-darwin-x64": "0.0.2", - "rush-fs-linux-x64-gnu": "0.0.2", - "rush-fs-darwin-arm64": "0.0.2" - } + "packageManager": "pnpm@9.15.4" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 336b1e2..5c16db2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -61,19 +61,6 @@ importers: typescript: specifier: ^5.9.2 version: 5.9.3 - optionalDependencies: - rush-fs-darwin-arm64: - specifier: 0.0.2 - version: 0.0.2 - rush-fs-darwin-x64: - specifier: 0.0.2 - version: 0.0.2 - rush-fs-linux-x64-gnu: - specifier: 0.0.2 - version: 0.0.2 - rush-fs-win32-x64-msvc: - specifier: 0.0.2 - version: 0.0.2 packages: '@emnapi/core@1.8.1': From 05a6a2f58cfdcf9c3f955c80b64cd6c0700491aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carbon=20=E7=A2=B3=E8=8B=AF?= Date: Thu, 19 Feb 2026 06:19:40 +0800 Subject: [PATCH 09/10] chore: bump version to 0.0.3 and update publishing instructions in README files --- .github/workflows/CI.yml | 30 +++++++++++++++++++++++------- Cargo.toml | 2 +- README.md | 6 +++--- README.zh-CN.md | 32 ++++++++++++++++++++++++++------ package.json | 2 +- 5 files changed, 54 insertions(+), 18 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index aec0d18..1af48b1 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -264,19 +264,35 @@ jobs: - name: List packages run: ls -R ./npm shell: bash - - name: Publish + - name: Add optionalDependencies for publish run: | - npm config set provenance true - if git log -1 --pretty=%B | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+$"; - then + node -e " + const fs = require('fs'); + const p = JSON.parse(fs.readFileSync('package.json', 'utf8')); + const v = p.version; + p.optionalDependencies = { + 'rush-fs-win32-x64-msvc': v, + 'rush-fs-darwin-x64': v, + 'rush-fs-linux-x64-gnu': v, + 'rush-fs-darwin-arm64': v + }; + fs.writeFileSync('package.json', JSON.stringify(p, null, 2)); + " + - name: Publish platform packages and main package + run: | + COMMIT_MSG=$(git log -1 --pretty=%B) + if echo "$COMMIT_MSG" | grep -qE "^[0-9]+\.[0-9]+\.[0-9]+$"; then + npm config set provenance true echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc + pnpm prepublishOnly npm publish --access public - elif git log -1 --pretty=%B | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+"; - then + elif echo "$COMMIT_MSG" | grep -qE "[0-9]+\.[0-9]+\.[0-9]+"; then + npm config set provenance true echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc + pnpm prepublishOnly npm publish --tag next --access public else - echo "Not a release, skipping publish" + echo "Not a release (commit message is not a version), skipping publish" fi env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/Cargo.toml b/Cargo.toml index 9d0f79e..7fcb08d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ authors = [] edition = "2021" name = "rush_fs" -version = "0.0.2" +version = "0.0.3" [lib] crate-type = ["cdylib"] diff --git a/README.md b/README.md index 41947b3..a7326be 100644 --- a/README.md +++ b/README.md @@ -530,11 +530,11 @@ See [CONTRIBUTING.md](./CONTRIBUTING.md) for the complete development guide — } ``` -Then publish both the platform-specific packages and the main package: +Then publish both the platform-specific packages and the main package **in order**: 1. Ensure you are logged in to npm (`npm login`). -2. Bump the version via `pnpm version ` (this runs `pnpm preversion` to build the release binaries). -3. Publish every optional dependency in `package.json` by running `pnpm prepublishOnly` (which executes `napi prepublish -t npm` and pushes `rush-fs-` packages such as `rush-fs-darwin-arm64`). +2. Bump the version via `pnpm version `. This runs `pnpm preversion`, which builds the `.node` artifacts under `npm/` for each platform. **These files must exist before the next step can publish them.** +3. Run `pnpm prepublishOnly` (which runs `napi prepublish -t npm`) to publish each built package from `npm/` (e.g. `rush-fs-darwin-arm64`, `rush-fs-win32-x64-msvc`). **If you see "doesn't exist" here, you skipped the build—run `pnpm build` or complete step 2 first.** 4. Publish the main package with `pnpm publish --access public`. The `prepublishOnly` hook runs automatically, but running step 3 manually lets you verify each platform succeeded before tagging the main release. If any platform publish fails, fix it and re-run `pnpm prepublishOnly` before retrying `pnpm publish` so consumers never receive a release referring to missing optional dependencies. diff --git a/README.zh-CN.md b/README.zh-CN.md index df9566b..69f01c4 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -420,14 +420,34 @@ Rush-FS 在文件系统遍历类操作中使用多线程并行: ## 发布(维护者专用) -`rush-fs` 会为每个平台发布一个预编译二进制(参见 `package.json` 中的 `optionalDependencies`)。要发布新版本,请依次执行: +`rush-fs` 会为每个平台发布一个预编译二进制(参见 `package.json` 中的 `optionalDependencies`)。**若只有 Mac,无法本地构建 Windows/Linux 的 .node,请用下面的「通过 CI 发布」。** -1. 确保已执行 `npm login`。 -2. 使用 `pnpm version ` 提升版本号(内部会运行 `pnpm preversion`,构建 release 产物)。 -3. 运行 `pnpm prepublishOnly`(即 `napi prepublish -t npm`)逐个发布 `rush-fs-` 可选依赖,例如 `rush-fs-darwin-arm64`、`rush-fs-win32-x64-msvc` 等。 -4. 最后执行 `pnpm publish --access public` 发布主包。`prepublishOnly` 会自动触发,但提前单独跑第 3 步可以先确认各平台包已成功发布。 +### 通过 GitHub Actions 发布(推荐) + +CI 已在多平台(macOS x64/arm64、Windows、Linux)构建并测试,通过后可由同一 workflow 发布到 npm。 + +1. 在仓库 **Settings → Secrets and variables → Actions** 里添加 **NPM_TOKEN**(npm 账号生成的 Classic Token,需允许发布)。 +2. 确保 `package.json` 和 `Cargo.toml` 中版本号一致(如 `0.0.3`),且 `package.json` 里已包含四个 `optionalDependencies`(版本与主包一致)。 +3. 提交并推送到 `main`,**且该次提交的 commit message 仅为版本号**(如 `0.0.3`)。CI 跑通后会自动:先发布四个平台包,再发布主包 `rush-fs`。 -一旦某个平台包发布失败,修复问题后需重新执行 `pnpm prepublishOnly`,确保主包不会依赖缺失的可选依赖。 +示例: + +```bash +# 版本和 optionalDependencies 已改好后 +git add package.json Cargo.toml +git commit -m "0.0.3" +git push origin main +``` + +4. 发版完成后,若希望 CI 继续用 `pnpm install --frozen-lockfile`,可在仓库里删掉 `optionalDependencies` 再提交,下次发版前再加回。 + +### 本地发布(需能构建各平台) + +若本机可构建所有平台(或只发当前平台),可按顺序执行: + +1. 确保已执行 `npm login`。 +2. 使用 `pnpm version ` 提升版本号(会执行 `pnpm preversion` 在 `npm/` 下构建)。 +3. 运行 `pnpm prepublishOnly` 发布各平台包,再执行 `pnpm publish --access public` 发布主包。 ## 许可证 diff --git a/package.json b/package.json index b382cdd..10086d9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rush-fs", - "version": "0.0.2", + "version": "0.0.3", "description": "High-performance drop-in replacement for Node.js fs module, powered by Rust", "main": "index.js", "repository": { From 429faeaf9bb758be352ca50fe6231e7afa0dc965 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carbon=20=E7=A2=B3=E8=8B=AF?= Date: Fri, 20 Feb 2026 15:31:40 +0800 Subject: [PATCH 10/10] chore: add independent workflow to release --- .github/workflows/CI.yml | 83 ++++--------------- .github/workflows/Release.yml | 151 ++++++++++++++++++++++++++++++++++ README.md | 72 +++++----------- index.js | 104 +++++++++++------------ 4 files changed, 238 insertions(+), 172 deletions(-) create mode 100644 .github/workflows/Release.yml diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 1af48b1..2599d3c 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -5,19 +5,26 @@ env: MACOSX_DEPLOYMENT_TARGET: '10.13' CARGO_INCREMENTAL: '1' NODE_VERSION: '20' +# CI:PR 与 main 的检查(lint / build / test),不包含发布 'on': push: branches: - main - tags-ignore: - - '**' paths-ignore: - '**/*.md' - LICENSE - '**/*.gitignore' - .editorconfig - docs/** - pull_request: null + pull_request: + branches: + - main + paths-ignore: + - '**/*.md' + - LICENSE + - '**/*.gitignore' + - .editorconfig + - docs/** concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true @@ -67,6 +74,11 @@ jobs: runs-on: ${{ matrix.settings.host }} steps: - uses: actions/checkout@v4 + - name: Cache Rust toolchain + uses: actions/cache@v4 + with: + path: ~/.rustup + key: rustup-${{ matrix.settings.host }}-${{ matrix.settings.target }}-stable - name: Install pnpm uses: pnpm/action-setup@v4 - name: Setup node @@ -232,68 +244,3 @@ jobs: --platform "${{ steps.docker.outputs.PLATFORM }}" \ "${{ steps.docker.outputs.IMAGE }}" \ sh -lc "corepack enable && pnpm test" - publish: - name: Publish - runs-on: ubuntu-latest - permissions: - contents: write - id-token: write - needs: - - lint - - test-macOS-windows-binding - - test-linux-binding - steps: - - uses: actions/checkout@v4 - - name: Install pnpm - uses: pnpm/action-setup@v4 - - name: Setup node - uses: actions/setup-node@v4 - with: - node-version: ${{ env.NODE_VERSION }} - cache: pnpm - - name: Install dependencies - run: pnpm install - - name: create npm dirs - run: pnpm napi create-npm-dirs - - name: Download all artifacts - uses: actions/download-artifact@v4 - with: - path: artifacts - - name: Move artifacts - run: pnpm artifacts - - name: List packages - run: ls -R ./npm - shell: bash - - name: Add optionalDependencies for publish - run: | - node -e " - const fs = require('fs'); - const p = JSON.parse(fs.readFileSync('package.json', 'utf8')); - const v = p.version; - p.optionalDependencies = { - 'rush-fs-win32-x64-msvc': v, - 'rush-fs-darwin-x64': v, - 'rush-fs-linux-x64-gnu': v, - 'rush-fs-darwin-arm64': v - }; - fs.writeFileSync('package.json', JSON.stringify(p, null, 2)); - " - - name: Publish platform packages and main package - run: | - COMMIT_MSG=$(git log -1 --pretty=%B) - if echo "$COMMIT_MSG" | grep -qE "^[0-9]+\.[0-9]+\.[0-9]+$"; then - npm config set provenance true - echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc - pnpm prepublishOnly - npm publish --access public - elif echo "$COMMIT_MSG" | grep -qE "[0-9]+\.[0-9]+\.[0-9]+"; then - npm config set provenance true - echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc - pnpm prepublishOnly - npm publish --tag next --access public - else - echo "Not a release (commit message is not a version), skipping publish" - fi - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/Release.yml b/.github/workflows/Release.yml new file mode 100644 index 0000000..05b4196 --- /dev/null +++ b/.github/workflows/Release.yml @@ -0,0 +1,151 @@ +# Release:仅维护者触发,构建四平台并发布到 npm +# 触发方式: +# 1. 手动:Actions → Release → Run workflow(使用当前 main 的 package.json version) +# 2. 打 tag:git tag v0.0.3 && git push origin v0.0.3(需先已把 package.json 改为 0.0.3 并 push) +# 仓库需配置 Secrets → NPM_TOKEN(npm 的 Automation token,Publish 权限) +name: Release +env: + DEBUG: napi:* + APP_NAME: rush-fs + MACOSX_DEPLOYMENT_TARGET: '10.13' + CARGO_INCREMENTAL: '1' + NODE_VERSION: '20' +on: + workflow_dispatch: {} + push: + tags: + - 'v*' +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true +jobs: + build: + strategy: + fail-fast: false + matrix: + settings: + - host: macos-latest + target: x86_64-apple-darwin + build: pnpm build --target x86_64-apple-darwin + - host: windows-latest + build: pnpm build --target x86_64-pc-windows-msvc + target: x86_64-pc-windows-msvc + - host: ubuntu-latest + target: x86_64-unknown-linux-gnu + build: pnpm build --target x86_64-unknown-linux-gnu --use-napi-cross + - host: macos-latest + target: aarch64-apple-darwin + build: pnpm build --target aarch64-apple-darwin + name: build - ${{ matrix.settings.target }} + runs-on: ${{ matrix.settings.host }} + steps: + - uses: actions/checkout@v4 + - name: Cache Rust toolchain + uses: actions/cache@v4 + with: + path: ~/.rustup + key: rustup-${{ matrix.settings.host }}-${{ matrix.settings.target }}-stable + - name: Install pnpm + uses: pnpm/action-setup@v4 + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + cache: pnpm + - name: Install + uses: dtolnay/rust-toolchain@stable + with: + toolchain: stable + targets: ${{ matrix.settings.target }} + - name: Cache cargo + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + ~/.napi-rs + .cargo-cache + target/ + key: ${{ matrix.settings.target }}-cargo-${{ matrix.settings.host }} + - uses: mlugg/setup-zig@v2 + if: ${{ contains(matrix.settings.target, 'musl') }} + with: + version: 0.14.1 + - name: Install cargo-zigbuild + uses: taiki-e/install-action@v2 + if: ${{ contains(matrix.settings.target, 'musl') }} + env: + GITHUB_TOKEN: ${{ github.token }} + with: + tool: cargo-zigbuild + - name: Setup toolchain + run: ${{ matrix.settings.setup }} + if: ${{ matrix.settings.setup }} + shell: bash + - name: Install dependencies + run: pnpm install + - name: Build + run: ${{ matrix.settings.build }} + shell: bash + - name: Upload artifact + uses: actions/upload-artifact@v5 + with: + name: bindings-${{ matrix.settings.target }} + path: | + ${{ env.APP_NAME }}.*.node + ${{ env.APP_NAME }}.*.wasm + if-no-files-found: error + publish: + name: Publish to npm + runs-on: ubuntu-latest + permissions: + contents: write + id-token: write + needs: + - build + steps: + - uses: actions/checkout@v4 + - name: Install pnpm + uses: pnpm/action-setup@v4 + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + cache: pnpm + - name: Install dependencies + run: pnpm install + - name: Create npm dirs + run: pnpm napi create-npm-dirs + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + path: artifacts + - name: Move artifacts + run: pnpm artifacts + - name: List packages + run: ls -R ./npm + shell: bash + - name: Add optionalDependencies for publish + run: | + node -e " + const fs = require('fs'); + const p = JSON.parse(fs.readFileSync('package.json', 'utf8')); + const v = p.version; + p.optionalDependencies = { + 'rush-fs-win32-x64-msvc': v, + 'rush-fs-darwin-x64': v, + 'rush-fs-linux-x64-gnu': v, + 'rush-fs-darwin-arm64': v + }; + fs.writeFileSync('package.json', JSON.stringify(p, null, 2)); + " + - name: Publish to npm + run: | + npm config set provenance true + echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc + pnpm prepublishOnly + npm publish --access public + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/README.md b/README.md index a7326be..91728e6 100644 --- a/README.md +++ b/README.md @@ -72,56 +72,6 @@ graph TD J -->|Return| K["JS Result"] ``` -## How does it works - -For the original Node.js, it works serially and cost lots of memory to parse os object and string into JS style: - -```mermaid -graph TD - A["JS: readdir"] -->|Call| B("Node.js C++ Binding") - B -->|Submit Task| C{"Libuv Thread Pool"} - - subgraph "Native Layer (Serial)" - C -->|"Syscall: getdents"| D[OS Kernel] - D -->|"Return File List"| C - C -->|"Process Paths"| C - end - - C -->|"Results Ready"| E("V8 Main Thread") - - subgraph "V8 Interaction (Heavy)" - E -->|"Create JS String 1"| F[V8 Heap] - E -->|"String 2"| F - E -->|"String N..."| F - F -->|"GC Pressure Rising"| F - end - - E -->|"Return Array"| G["JS Callback/Promise"] -``` - -But, it's saved with Rust now: - -```mermaid -graph TD - A["JS: readdir"] -->|"N-API Call"| B("Rust Wrapper") - B -->|"Spawn Thread/Task"| C{"Rust Thread Pool"} - - subgraph "Rust 'Black Box'" - C -->|"Rayon: Parallel work"| D[OS Kernel] - D -->|"Syscall: getdents"| C - C -->|"Store as Rust Vec"| H[Rust Heap] - H -->|"No V8 Interaction yet"| H - end - - C -->|"All Done"| I("Convert to JS") - - subgraph "N-API Bridge" - I -->|"Batch Create JS Array"| J[V8 Heap] - end - - J -->|Return| K["JS Result"] -``` - ## Status & Roadmap We are rewriting `fs` APIs one by one. @@ -533,12 +483,30 @@ See [CONTRIBUTING.md](./CONTRIBUTING.md) for the complete development guide — Then publish both the platform-specific packages and the main package **in order**: 1. Ensure you are logged in to npm (`npm login`). -2. Bump the version via `pnpm version `. This runs `pnpm preversion`, which builds the `.node` artifacts under `npm/` for each platform. **These files must exist before the next step can publish them.** -3. Run `pnpm prepublishOnly` (which runs `napi prepublish -t npm`) to publish each built package from `npm/` (e.g. `rush-fs-darwin-arm64`, `rush-fs-win32-x64-msvc`). **If you see "doesn't exist" here, you skipped the build—run `pnpm build` or complete step 2 first.** +2. Bump the version via `pnpm version `. This runs `pnpm preversion`, which builds the `.node` for the **current platform only** (output is in the crate root, not under `npm/`). **To verify the Mac build:** after `pnpm build` or `preversion`, check that the crate root contains `rush-fs.darwin-arm64.node` (Apple Silicon) or `rush-fs.darwin-x64.node` (Intel Mac). For `prepublishOnly` to see it, you must have the file under `npm//` (see "Local single-platform publish" below). +3. Run `pnpm prepublishOnly` (which runs `napi prepublish -t npm`) to publish each built package from `npm/` (e.g. `rush-fs-darwin-arm64`, `rush-fs-win32-x64-msvc`). **If you see "doesn't exist" here,** the `.node` is not in `npm/` yet—either use CI to build all platforms, or for local Mac-only: run `napi create-npm-dirs`, then copy `rush-fs.darwin-arm64.node` (or `darwin-x64`) into `npm/darwin-arm64/` (or `npm/darwin-x64/`), then run `pnpm prepublishOnly` again. 4. Publish the main package with `pnpm publish --access public`. The `prepublishOnly` hook runs automatically, but running step 3 manually lets you verify each platform succeeded before tagging the main release. If any platform publish fails, fix it and re-run `pnpm prepublishOnly` before retrying `pnpm publish` so consumers never receive a release referring to missing optional dependencies. +### How to verify the Mac build (方式 B 第 2 步后) + +- **Apple Silicon (M1/M2/M3):** in the repo root, a file named `rush-fs.darwin-arm64.node` must exist. +- **Intel Mac:** in the repo root, a file named `rush-fs.darwin-x64.node` must exist. + +Command to check: `ls -la rush-fs.darwin-*.node` in the package directory. If you see the file, the Mac native build succeeded. + +### Local single-platform publish (Mac only) + +If you are not using CI and only have a Mac build: + +1. `pnpm build` (or `pnpm version patch` to also bump version). +2. `napi create-npm-dirs` to create `npm/darwin-arm64/` (and other platform dirs). +3. Copy the built `.node` into the matching npm dir, e.g. + `cp rush-fs.darwin-arm64.node npm/darwin-arm64/` +4. `pnpm prepublishOnly` — only the Mac platform package will be published; others will show "doesn't exist" (expected). +5. `pnpm publish --access public`. Users on other platforms will need to build from source or you publish those platform packages later via CI. + ## License MIT diff --git a/index.js b/index.js index baa8752..0684543 100644 --- a/index.js +++ b/index.js @@ -77,8 +77,8 @@ function requireNative() { try { const binding = require('rush-fs-android-arm64') const bindingPackageVersion = require('rush-fs-android-arm64/package.json').version - if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -93,8 +93,8 @@ function requireNative() { try { const binding = require('rush-fs-android-arm-eabi') const bindingPackageVersion = require('rush-fs-android-arm-eabi/package.json').version - if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -114,8 +114,8 @@ function requireNative() { try { const binding = require('rush-fs-win32-x64-gnu') const bindingPackageVersion = require('rush-fs-win32-x64-gnu/package.json').version - if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -130,8 +130,8 @@ function requireNative() { try { const binding = require('rush-fs-win32-x64-msvc') const bindingPackageVersion = require('rush-fs-win32-x64-msvc/package.json').version - if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -147,8 +147,8 @@ function requireNative() { try { const binding = require('rush-fs-win32-ia32-msvc') const bindingPackageVersion = require('rush-fs-win32-ia32-msvc/package.json').version - if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -163,8 +163,8 @@ function requireNative() { try { const binding = require('rush-fs-win32-arm64-msvc') const bindingPackageVersion = require('rush-fs-win32-arm64-msvc/package.json').version - if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -182,8 +182,8 @@ function requireNative() { try { const binding = require('rush-fs-darwin-universal') const bindingPackageVersion = require('rush-fs-darwin-universal/package.json').version - if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -198,8 +198,8 @@ function requireNative() { try { const binding = require('rush-fs-darwin-x64') const bindingPackageVersion = require('rush-fs-darwin-x64/package.json').version - if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -214,8 +214,8 @@ function requireNative() { try { const binding = require('rush-fs-darwin-arm64') const bindingPackageVersion = require('rush-fs-darwin-arm64/package.json').version - if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -234,8 +234,8 @@ function requireNative() { try { const binding = require('rush-fs-freebsd-x64') const bindingPackageVersion = require('rush-fs-freebsd-x64/package.json').version - if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -250,8 +250,8 @@ function requireNative() { try { const binding = require('rush-fs-freebsd-arm64') const bindingPackageVersion = require('rush-fs-freebsd-arm64/package.json').version - if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -271,8 +271,8 @@ function requireNative() { try { const binding = require('rush-fs-linux-x64-musl') const bindingPackageVersion = require('rush-fs-linux-x64-musl/package.json').version - if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -287,8 +287,8 @@ function requireNative() { try { const binding = require('rush-fs-linux-x64-gnu') const bindingPackageVersion = require('rush-fs-linux-x64-gnu/package.json').version - if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -305,8 +305,8 @@ function requireNative() { try { const binding = require('rush-fs-linux-arm64-musl') const bindingPackageVersion = require('rush-fs-linux-arm64-musl/package.json').version - if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -321,8 +321,8 @@ function requireNative() { try { const binding = require('rush-fs-linux-arm64-gnu') const bindingPackageVersion = require('rush-fs-linux-arm64-gnu/package.json').version - if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -339,8 +339,8 @@ function requireNative() { try { const binding = require('rush-fs-linux-arm-musleabihf') const bindingPackageVersion = require('rush-fs-linux-arm-musleabihf/package.json').version - if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -355,8 +355,8 @@ function requireNative() { try { const binding = require('rush-fs-linux-arm-gnueabihf') const bindingPackageVersion = require('rush-fs-linux-arm-gnueabihf/package.json').version - if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -373,8 +373,8 @@ function requireNative() { try { const binding = require('rush-fs-linux-loong64-musl') const bindingPackageVersion = require('rush-fs-linux-loong64-musl/package.json').version - if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -389,8 +389,8 @@ function requireNative() { try { const binding = require('rush-fs-linux-loong64-gnu') const bindingPackageVersion = require('rush-fs-linux-loong64-gnu/package.json').version - if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -407,8 +407,8 @@ function requireNative() { try { const binding = require('rush-fs-linux-riscv64-musl') const bindingPackageVersion = require('rush-fs-linux-riscv64-musl/package.json').version - if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -423,8 +423,8 @@ function requireNative() { try { const binding = require('rush-fs-linux-riscv64-gnu') const bindingPackageVersion = require('rush-fs-linux-riscv64-gnu/package.json').version - if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -440,8 +440,8 @@ function requireNative() { try { const binding = require('rush-fs-linux-ppc64-gnu') const bindingPackageVersion = require('rush-fs-linux-ppc64-gnu/package.json').version - if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -456,8 +456,8 @@ function requireNative() { try { const binding = require('rush-fs-linux-s390x-gnu') const bindingPackageVersion = require('rush-fs-linux-s390x-gnu/package.json').version - if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -476,8 +476,8 @@ function requireNative() { try { const binding = require('rush-fs-openharmony-arm64') const bindingPackageVersion = require('rush-fs-openharmony-arm64/package.json').version - if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -492,8 +492,8 @@ function requireNative() { try { const binding = require('rush-fs-openharmony-x64') const bindingPackageVersion = require('rush-fs-openharmony-x64/package.json').version - if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) { @@ -508,8 +508,8 @@ function requireNative() { try { const binding = require('rush-fs-openharmony-arm') const bindingPackageVersion = require('rush-fs-openharmony-arm/package.json').version - if (bindingPackageVersion !== '0.0.2' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { - throw new Error(`Native binding package version mismatch, expected 0.0.2 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) + if (bindingPackageVersion !== '0.0.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { + throw new Error(`Native binding package version mismatch, expected 0.0.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) } return binding } catch (e) {