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..2599d3c 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -1,23 +1,30 @@ name: CI env: DEBUG: napi:* - APP_NAME: hyper-fs + APP_NAME: rush-fs 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,52 +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: Publish - run: | - npm config set provenance true - if git log -1 --pretty=%B | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+$"; - then - echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc - npm publish --access public - elif git log -1 --pretty=%B | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+"; - then - echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc - npm publish --tag next --access public - else - echo "Not a release, 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/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/Cargo.toml b/Cargo.toml index ff81a12..7fcb08d 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.3" [lib] crate-type = ["cdylib"] diff --git a/README.md b/README.md index 9722f75..91728e6 100644 --- a/README.md +++ b/README.md @@ -1,50 +1,51 @@
- -# 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 ```bash -npm install hyper-fs +npm install rush-fs # or -pnpm add hyper-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: +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. @@ -81,7 +80,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` @@ -367,7 +366,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') @@ -398,11 +397,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** | @@ -419,27 +418,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 | | --------------------- | ------------------------------------------------------------------------- | -------------------- | ------- | @@ -452,15 +451,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. @@ -468,6 +467,46 @@ 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. 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 **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` 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/README.zh-CN.md b/README.zh-CN.md index 932d400..69f01c4 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 带宽限制,收益趋于平稳。 @@ -415,6 +418,37 @@ Hyper-FS 在文件系统遍历类操作中使用多线程并行: 参阅 [CONTRIBUTING.md](./CONTRIBUTING.md) — 完整的开发指南,涵盖环境搭建、参考 Node.js 源码、编写 Rust 实现、测试与性能基准。 +## 发布(维护者专用) + +`rush-fs` 会为每个平台发布一个预编译二进制(参见 `package.json` 中的 `optionalDependencies`)。**若只有 Mac,无法本地构建 Windows/Linux 的 .node,请用下面的「通过 CI 发布」。** + +### 通过 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`。 + +示例: + +```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` 发布主包。 + ## 许可证 MIT 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..0684543 100644 --- a/index.js +++ b/index.js @@ -70,15 +70,15 @@ 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 - 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.`) + const binding = require('rush-fs-android-arm64') + const bindingPackageVersion = require('rush-fs-android-arm64/package.json').version + 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) { @@ -86,15 +86,15 @@ 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 - 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.`) + const binding = require('rush-fs-android-arm-eabi') + const bindingPackageVersion = require('rush-fs-android-arm-eabi/package.json').version + 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) { @@ -107,15 +107,15 @@ 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 - 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.`) + const binding = require('rush-fs-win32-x64-gnu') + const bindingPackageVersion = require('rush-fs-win32-x64-gnu/package.json').version + 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) { @@ -123,15 +123,15 @@ 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 - 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.`) + const binding = require('rush-fs-win32-x64-msvc') + const bindingPackageVersion = require('rush-fs-win32-x64-msvc/package.json').version + 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) { @@ -140,15 +140,15 @@ 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 - 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.`) + const binding = require('rush-fs-win32-ia32-msvc') + const bindingPackageVersion = require('rush-fs-win32-ia32-msvc/package.json').version + 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) { @@ -156,15 +156,15 @@ 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 - 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.`) + const binding = require('rush-fs-win32-arm64-msvc') + const bindingPackageVersion = require('rush-fs-win32-arm64-msvc/package.json').version + 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) { @@ -175,15 +175,15 @@ 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 - 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.`) + const binding = require('rush-fs-darwin-universal') + const bindingPackageVersion = require('rush-fs-darwin-universal/package.json').version + 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) { @@ -191,15 +191,15 @@ 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 - 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.`) + const binding = require('rush-fs-darwin-x64') + const bindingPackageVersion = require('rush-fs-darwin-x64/package.json').version + 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) { @@ -207,15 +207,15 @@ 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 - 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.`) + const binding = require('rush-fs-darwin-arm64') + const bindingPackageVersion = require('rush-fs-darwin-arm64/package.json').version + 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) { @@ -227,15 +227,15 @@ 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 - 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.`) + const binding = require('rush-fs-freebsd-x64') + const bindingPackageVersion = require('rush-fs-freebsd-x64/package.json').version + 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) { @@ -243,15 +243,15 @@ 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 - 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.`) + const binding = require('rush-fs-freebsd-arm64') + const bindingPackageVersion = require('rush-fs-freebsd-arm64/package.json').version + 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) { @@ -264,15 +264,15 @@ 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 - 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.`) + const binding = require('rush-fs-linux-x64-musl') + const bindingPackageVersion = require('rush-fs-linux-x64-musl/package.json').version + 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) { @@ -280,15 +280,15 @@ 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 - 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.`) + const binding = require('rush-fs-linux-x64-gnu') + const bindingPackageVersion = require('rush-fs-linux-x64-gnu/package.json').version + 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) { @@ -298,15 +298,15 @@ 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 - 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.`) + const binding = require('rush-fs-linux-arm64-musl') + const bindingPackageVersion = require('rush-fs-linux-arm64-musl/package.json').version + 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) { @@ -314,15 +314,15 @@ 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 - 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.`) + const binding = require('rush-fs-linux-arm64-gnu') + const bindingPackageVersion = require('rush-fs-linux-arm64-gnu/package.json').version + 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) { @@ -332,15 +332,15 @@ 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 - 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.`) + const binding = require('rush-fs-linux-arm-musleabihf') + const bindingPackageVersion = require('rush-fs-linux-arm-musleabihf/package.json').version + 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) { @@ -348,15 +348,15 @@ 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 - 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.`) + const binding = require('rush-fs-linux-arm-gnueabihf') + const bindingPackageVersion = require('rush-fs-linux-arm-gnueabihf/package.json').version + 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) { @@ -366,15 +366,15 @@ 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 - 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.`) + const binding = require('rush-fs-linux-loong64-musl') + const bindingPackageVersion = require('rush-fs-linux-loong64-musl/package.json').version + 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) { @@ -382,15 +382,15 @@ 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 - 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.`) + const binding = require('rush-fs-linux-loong64-gnu') + const bindingPackageVersion = require('rush-fs-linux-loong64-gnu/package.json').version + 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) { @@ -400,15 +400,15 @@ 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 - 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.`) + const binding = require('rush-fs-linux-riscv64-musl') + const bindingPackageVersion = require('rush-fs-linux-riscv64-musl/package.json').version + 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) { @@ -416,15 +416,15 @@ 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 - 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.`) + const binding = require('rush-fs-linux-riscv64-gnu') + const bindingPackageVersion = require('rush-fs-linux-riscv64-gnu/package.json').version + 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) { @@ -433,15 +433,15 @@ 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 - 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.`) + const binding = require('rush-fs-linux-ppc64-gnu') + const bindingPackageVersion = require('rush-fs-linux-ppc64-gnu/package.json').version + 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) { @@ -449,15 +449,15 @@ 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 - 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.`) + const binding = require('rush-fs-linux-s390x-gnu') + const bindingPackageVersion = require('rush-fs-linux-s390x-gnu/package.json').version + 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) { @@ -469,15 +469,15 @@ 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 - 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.`) + const binding = require('rush-fs-openharmony-arm64') + const bindingPackageVersion = require('rush-fs-openharmony-arm64/package.json').version + 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) { @@ -485,15 +485,15 @@ 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 - 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.`) + const binding = require('rush-fs-openharmony-x64') + const bindingPackageVersion = require('rush-fs-openharmony-x64/package.json').version + 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) { @@ -501,15 +501,15 @@ 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 - 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.`) + const binding = require('rush-fs-openharmony-arm') + const bindingPackageVersion = require('rush-fs-openharmony-arm/package.json').version + 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) { @@ -529,20 +529,24 @@ 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) { wasiBindingError = err } } - if (!nativeBinding) { + if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) { try { - wasiBinding = require('hyper-fs-wasm32-wasi') + 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 3106f5d..10086d9 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,11 @@ { - "name": "hyper-fs", - "version": "0.0.1", + "name": "rush-fs", + "version": "0.0.3", "description": "High-performance drop-in replacement for Node.js fs module, powered by Rust", "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", 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: 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)]