diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2848cb8..bedae26 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,13 +3,12 @@ name: CI Native CLI on: schedule: - cron: '0 12 * * 3' # This runs the workflow every wednesday day at 12:00 UTC -env: - NATIVE_VERSION: 100.100.100 # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: CI: strategy: + fail-fast: false matrix: os: [ mulesoft-ubuntu, mulesoft-windows ] include: @@ -70,70 +69,3 @@ jobs: - name: Run Node.js Tests run: ./gradlew --stacktrace --no-problems-report native-lib:nodeTest shell: bash - - # Derive lowercase OS + runtime arch tokens for artifact names. - # OS comes from matrix.script_name (linux/windows); arch from uname -m - # (x86_64 today; stays correct if an arm64 runner is ever added). - - name: Derive platform tokens - run: echo "ARCH=$(uname -m)" >> "$GITHUB_ENV" - shell: bash - - # archive:false makes the artifact name equal the uploaded file name. - # Copy the Gradle-named distro zip to the convention name so the CLI - # artifact reads dw-cli---.zip. - - name: Stage renamed CLI distro - run: cp "native-cli/build/distributions/native-cli-${{env.NATIVE_VERSION}}-native-distro-${{ matrix.script_name }}.zip" "native-cli/build/distributions/dw-cli-${{env.NATIVE_VERSION}}-${{ matrix.script_name }}-${{ env.ARCH }}.zip" - shell: bash - - # Upload the artifact file - - name: Upload generated script - uses: actions/upload-artifact@v7.0.1 - with: - # archive:false skips the redundant outer zip (the distro is already a - # .zip) and names the artifact after the file — which already carries - # ${matrix.script_name}, so the matrix legs don't collide. No `name:`: - # it would be ignored under archive:false. - path: native-cli/build/distributions/dw-cli-${{env.NATIVE_VERSION}}-${{ matrix.script_name }}-${{ env.ARCH }}.zip - archive: false - - # Upload the Python wheel - - name: Upload Python wheel - uses: actions/upload-artifact@v7.0.1 - with: - # archive:false skips the redundant outer zip and names the artifact - # after the wheel — whose platform tag (manylinux/win_amd64/…) is - # already OS-unique, so the matrix legs don't collide. No `name:`: it - # would be ignored under archive:false. - path: native-lib/python/dist/dataweave_native-0.0.1-py3-*.whl - archive: false - - # npm pack emits the same filename (dataweave-native-0.0.1.tgz) on every - # OS. With archive:false the file NAME becomes the artifact name (the - # `name:` input is ignored), so copy to an OS-qualified name first to keep - # the matrix legs from colliding. - - name: Stage OS-qualified Node package - run: cp native-lib/node/dataweave-native-0.0.1.tgz "native-lib/node/dataweave-node-0.0.1-${{ matrix.script_name }}-${{ env.ARCH }}.tgz" - shell: bash - - # Upload the Node.js package - - name: Upload Node package - uses: actions/upload-artifact@v7.0.1 - with: - path: native-lib/node/dataweave-node-0.0.1-${{ matrix.script_name }}-${{ env.ARCH }}.tgz - # Single .tgz (already gzip-compressed); skip the redundant outer zip - # (v7+ feature). archive:false ignores `name:` and uses the file name, - # which the copy above made OS-unique. - archive: false - - # Upload the native shared library + header together per OS. Multiple - # files, so this stays archived (archive:false allows only one file); the - # zip is wanted here and `name:` still applies. - - name: Upload native shared library - uses: actions/upload-artifact@v7.0.1 - with: - name: dwlib-${{env.NATIVE_VERSION}}-${{ matrix.script_name }}-${{ env.ARCH }} - path: | - native-lib/python/src/dataweave/native/dwlib.dylib - native-lib/python/src/dataweave/native/dwlib.so - native-lib/python/src/dataweave/native/dwlib.dll - native-lib/python/src/dataweave/native/dwlib.h diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 37ee664..1a1a255 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -16,13 +16,23 @@ jobs: # This workflow contains a single job called "build" BUILD: strategy: + fail-fast: false matrix: - os: [ mulesoft-ubuntu, mulesoft-windows ] + os: [ ubuntu-latest, windows-2022, macos-latest ] include: - - os: mulesoft-ubuntu + # script_name → artifact-name OS token (our naming convention). + # distro_os → Gradle distro classifier (native-cli getOsName(): + # macOS is "osx", not "macos"), used for the source + # filename produced by native-cli:distro. + - os: ubuntu-latest script_name: linux - - os: mulesoft-windows + distro_os: linux + - os: windows-2022 script_name: windows + distro_os: windows + - os: macos-latest + script_name: macos + distro_os: osx runs-on: ${{ matrix.os }} # Steps represent a sequence of tasks that will be executed as part of the job steps: @@ -65,7 +75,7 @@ jobs: # Install Python build dependencies (setuptools/wheel may be missing on Windows runners) - name: Install Python build dependencies - run: python3 -m pip install --upgrade setuptools wheel + run: python3 -m pip install --break-system-packages --upgrade setuptools wheel shell: bash # Generate native-lib python wheel @@ -110,7 +120,7 @@ jobs: # Derive lowercase OS + runtime arch tokens for artifact names. # OS comes from matrix.script_name (linux/windows); arch from uname -m - # (x86_64 today; stays correct if an arm64 runner is ever added). + # (x86_64 on linux/windows, arm64 on macos). - name: Derive platform tokens run: echo "ARCH=$(uname -m)" >> "$GITHUB_ENV" shell: bash @@ -119,7 +129,7 @@ jobs: # Copy the Gradle-named distro zip to the convention name so the CLI # artifact reads dw-cli---.zip. - name: Stage renamed CLI distro - run: cp "native-cli/build/distributions/native-cli-${{env.NATIVE_VERSION}}-native-distro-${{ matrix.script_name }}.zip" "native-cli/build/distributions/dw-cli-${{env.NATIVE_VERSION}}-${{ matrix.script_name }}-${{ env.ARCH }}.zip" + run: cp "native-cli/build/distributions/native-cli-${{env.NATIVE_VERSION}}-native-distro-${{ matrix.distro_os }}.zip" "native-cli/build/distributions/dw-cli-${{env.NATIVE_VERSION}}-${{ matrix.script_name }}-${{ env.ARCH }}.zip" shell: bash # Upload the artifact file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f0f8c35..01e7cf7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,13 +10,23 @@ jobs: # This workflow contains a single job called "build" RELEASE_EXTENSION: strategy: + fail-fast: false matrix: - os: [ mulesoft-ubuntu, mulesoft-windows ] + os: [ ubuntu-latest, windows-2022, macos-latest ] include: - - os: mulesoft-ubuntu + # script_name → artifact-name OS token (our naming convention). + # distro_os → Gradle distro classifier (native-cli getOsName(): + # macOS is "osx", not "macos"), used for the source + # filename produced by native-cli:distro. + - os: ubuntu-latest script_name: linux - - os: mulesoft-windows + distro_os: linux + - os: windows-2022 script_name: windows + distro_os: windows + - os: macos-latest + script_name: macos + distro_os: osx runs-on: ${{ matrix.os }} # Steps represent a sequence of tasks that will be executed as part of the job @@ -54,7 +64,7 @@ jobs: # Install Python build dependencies (setuptools/wheel may be missing on Windows runners) - name: Install Python build dependencies - run: python3 -m pip install --upgrade setuptools wheel + run: python3 -m pip install --break-system-packages --upgrade setuptools wheel shell: bash # Generate native-lib python wheel @@ -83,7 +93,7 @@ jobs: uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} - file: native-cli/build/distributions/native-cli-${{env.NATIVE_VERSION}}-native-distro-${{ matrix.script_name }}.zip + file: native-cli/build/distributions/native-cli-${{env.NATIVE_VERSION}}-native-distro-${{ matrix.distro_os }}.zip asset_name: dw-cli-${{env.NATIVE_VERSION}}-${{ matrix.script_name }}-${{ env.ARCH }}.zip tag: ${{ github.ref }} overwrite: true @@ -129,6 +139,16 @@ jobs: tag: ${{ github.ref }} overwrite: true + - name: Upload native shared library to release (macOS) + if: runner.os == 'macOS' + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: native-lib/python/src/dataweave/native/dwlib.dylib + asset_name: dwlib-${{env.NATIVE_VERSION}}-${{ matrix.script_name }}-${{ env.ARCH }}.dylib + tag: ${{ github.ref }} + overwrite: true + # Upload the native library header - name: Upload native library header to release uses: svenstaro/upload-release-action@v2 diff --git a/build.gradle b/build.gradle index 3bf824b..ff1883c 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath "org.graalvm.buildtools.native:org.graalvm.buildtools.native.gradle.plugin:0.11.2" + classpath "org.graalvm.buildtools.native:org.graalvm.buildtools.native.gradle.plugin:0.11.5" } } diff --git a/docs/superpowers/specs/2026-07-29-github-runners-migration-design.md b/docs/superpowers/specs/2026-07-29-github-runners-migration-design.md new file mode 100644 index 0000000..53974f5 --- /dev/null +++ b/docs/superpowers/specs/2026-07-29-github-runners-migration-design.md @@ -0,0 +1,182 @@ +# GitHub Actions Runner Migration + macOS Artifacts + +**Date:** 2026-07-29 + +## Goal + +Update the runners used across the three GitHub Actions workflows, and add +macOS artifact production: + +- **A) `ci.yml`** — keep the `mulesoft` runners, but make it a pure build+test + workflow: remove all artifact output. +- **B) `main.yml` + `release.yml`** — replace the `mulesoft` runners with + standard GitHub-hosted runners. +- **C) `main.yml` + `release.yml`** — add a macOS runner leg so a + macOS-compatible artifact is produced. + +## Current state + +All three workflows use the same matrix: + +```yaml +matrix: + os: [ mulesoft-ubuntu, mulesoft-windows ] + include: + - os: mulesoft-ubuntu + script_name: linux + - os: mulesoft-windows + script_name: windows +runs-on: ${{ matrix.os }} +``` + +- `ci.yml` — scheduled (Wednesdays 12:00 UTC). Builds, creates distro, builds + Python wheel + Node package, runs Node tests. Then 3 upload-prep steps + (*Derive platform tokens*, *Stage renamed CLI distro*, *Stage OS-qualified + Node package*) and 4 `upload-artifact` steps (CLI distro, Python wheel, Node + package, native shared library). +- `main.yml` — push/PR to master. Same build steps plus master-only regression + + Node TCK conformance lanes, plus the same 3 prep + 4 upload-artifact steps. +- `release.yml` — on `v*` tags. Builds, then uploads assets to the GitHub + Release via `svenstaro/upload-release-action`. The native shared library + upload is split into **per-OS conditional** steps: Linux (`.so`), Windows + (`.dll`), plus a shared header upload. + +Artifact naming already derives arch from `uname -m` (`ARCH`), so adding a new +OS leg produces correctly-named artifacts automatically. + +## Changes + +### A) `ci.yml` — build + run only + +- Matrix and `runs-on` **unchanged** (keep `mulesoft-ubuntu` + `mulesoft-windows`). +- **Remove** these steps (they exist only to produce/stage uploads): + - *Derive platform tokens* + - *Stage renamed CLI distro* + - *Upload generated script* + - *Upload Python wheel* + - *Stage OS-qualified Node package* + - *Upload Node package* + - *Upload native shared library* +- **Keep** everything up to and including *Run Node.js Tests*. +- Result: `ci.yml` builds and runs tests, produces no artifacts. + +### B) `main.yml` + `release.yml` — GitHub-hosted runners + +Replace the matrix runner labels in both files: + +- `mulesoft-ubuntu` → `ubuntu-latest` +- `mulesoft-windows` → `windows-2022` + +`script_name` mappings (`linux`, `windows`) and all other steps stay the same. + +> **Windows label: `windows-2022`, not `windows-latest`.** The migration +> originally targeted `windows-latest`, but that image rolled forward to +> Visual Studio 18 (VS 2026, install path `…\Microsoft Visual Studio\18\…`), +> which the pinned `node-gyp` 11.5.0 cannot detect (`find VS unknown version +> "undefined"`) — the Node addon build fails. `windows-2022` ships the VS 2022 +> / v17 toolchain that node-gyp 11 supports (the same toolchain class the +> self-hosted `mulesoft-windows` runner uses) and is still a standard +> GitHub-hosted runner, satisfying goal B. +> +> **Follow-up:** when `windows-2022` is eventually retired, the durable fix is +> bumping `node-gyp` to `^12.1.0` (which added VS 18/2026 support) and +> returning to `windows-latest`. + +### C) macOS leg on `main.yml` + `release.yml` + +Add a third matrix entry to both files: + +```yaml +matrix: + os: [ ubuntu-latest, windows-2022, macos-latest ] + include: + # script_name → artifact-name OS token (our naming convention). + # distro_os → Gradle distro classifier (native-cli getOsName(): + # macOS is "osx", not "macos"), used for the source + # filename produced by native-cli:distro. + - os: ubuntu-latest + script_name: linux + distro_os: linux + - os: windows-2022 + script_name: windows + distro_os: windows + - os: macos-latest + script_name: macos + distro_os: osx +``` + +- Chosen runner: **`macos-latest` (Apple Silicon, arm64)**. `uname -m` returns + `arm64`, so all artifacts read `...-macos-arm64...` with no other change. +- **`distro_os` field.** `native-cli:distro` names its zip with the Gradle + `getOsName()` classifier, which is **`osx`** on macOS (not `macos`). The + staging step that renames the distro to the `dw-cli---.zip` + convention (and `release.yml`'s upload `file:`) must reference the *source* + file by its `distro_os` classifier, while the *convention* artifact name + keeps `script_name` (`macos`). For linux/windows the two tokens coincide, so + only macOS needs the distinction. +- **`main.yml`** — macOS is just another matrix leg; every existing step runs + for it. The *Upload native shared library* step already lists `dwlib.dylib` + in its `path`, so macOS is covered with no edit to that step. +- **`release.yml`** — add a new conditional step mirroring the existing + Linux/Windows branches: + + ```yaml + - name: Upload native shared library to release (macOS) + if: runner.os == 'macOS' + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: native-lib/python/src/dataweave/native/dwlib.dylib + asset_name: dwlib-${{env.NATIVE_VERSION}}-${{ matrix.script_name }}-${{ env.ARCH }}.dylib + tag: ${{ github.ref }} + overwrite: true + ``` + + The shared *header* upload step is not OS-conditional and needs no change. + +## Orchestration + +A coordinator (main session) dispatches parallel subagents — one per workflow +file (`ci.yml`, `main.yml`, `release.yml`) since the edits are independent. All +work happens on a single new branch; a single PR is opened at the end. + +## Risks / notes + +- macOS `native-lib` native build uses `-J-Xmx6G`; `macos-latest` (arm64) has + ~7GB RAM. Should fit but is the tightest leg — monitor the first run. +- The master-only regression + Node TCK steps in `main.yml` will also execute + on the macOS leg for master pushes (expected, more coverage). +- macOS GitHub-hosted minutes bill at a higher multiplier than Linux/Windows. +- `windows-2022` is pinned (see section B); it is not deprecated today but will + eventually be retired — track the node-gyp `^12` follow-up before then. + +## Deviations discovered during CI + +These fixes were required to get all three legs green and are outside the +original A/B/C scope; recorded here so the as-shipped state is complete. + +- **GraalVM buildtools `0.11.2 → 0.11.5`** (`build.gradle`). On `windows-latest` + the toolcache (C:) and workspace (D:) live on different drives; buildtools + 0.11.2 called `Path.relativize` across drive roots and crashed + `nativeCompile` (`'other' has different root`). 0.11.5 guards relativize to + same-root paths. +- **`node-gyp` bumped to `^11`** (`native-lib/node/package.json` + + regenerated lockfile). Intended to fix VS detection on `windows-latest`; it + did **not** (11.5.0 still can't see VS 18), which is why the Windows leg was + pinned to `windows-2022` instead. The bump is harmless and left in place. +- **`--break-system-packages`** added to the Python build-deps step in + `main.yml` + `release.yml`. macOS system Python enforces PEP 668 and refuses + the plain `pip install --upgrade setuptools wheel`. + +## Testing + +No unit tests apply. Validation is: +- YAML lint / parse sanity for all three files. +- Confirm no `mulesoft-*` labels remain in `main.yml` / `release.yml`, and that + `ci.yml` still uses them. +- Confirm the Windows leg uses `windows-2022` (not `windows-latest`). +- Confirm `ci.yml` has zero `upload-artifact` steps. +- Confirm the three-way matrix + macOS release branch exist, and that the + distro staging/upload references `matrix.distro_os` for the source filename. +- End-to-end: all three legs (`ubuntu-latest`, `windows-2022`, `macos-latest`) + of the `Build Native CLI` workflow pass — confirmed green on commit `4bb7e46`. diff --git a/native-lib/node/package-lock.json b/native-lib/node/package-lock.json index 5e35059..a25496b 100644 --- a/native-lib/node/package-lock.json +++ b/native-lib/node/package-lock.json @@ -16,7 +16,7 @@ "@types/node": "^20", "@vitest/coverage-v8": "^3.0", "fast-xml-parser": "^5.10.1", - "node-gyp": "^10", + "node-gyp": "^11", "typescript": "^5.5", "vitest": "^3.0" }, @@ -558,6 +558,19 @@ "node": ">=12" } }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@istanbuljs/schema": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", @@ -621,9 +634,9 @@ "license": "MIT" }, "node_modules/@npmcli/agent": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", - "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", + "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==", "dev": true, "license": "ISC", "dependencies": { @@ -634,20 +647,20 @@ "socks-proxy-agent": "^8.0.3" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@npmcli/fs": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", - "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", + "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", "dev": true, "license": "ISC", "dependencies": { "semver": "^7.3.5" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@pkgjs/parseargs": { @@ -1196,13 +1209,13 @@ } }, "node_modules/abbrev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", "dev": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/agent-base": { @@ -1215,20 +1228,6 @@ "node": ">= 14" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ansi-regex": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", @@ -1318,13 +1317,13 @@ } }, "node_modules/cacache": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", - "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", + "integrity": "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/fs": "^3.1.0", + "@npmcli/fs": "^4.0.0", "fs-minipass": "^3.0.0", "glob": "^10.2.2", "lru-cache": "^10.0.1", @@ -1332,13 +1331,13 @@ "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/chai": { @@ -1369,23 +1368,13 @@ } }, "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=6" + "node": ">=18" } }, "node_modules/color-convert": { @@ -1801,20 +1790,10 @@ "node": ">=0.8.19" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/ip-address": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz", - "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==", + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.3.1.tgz", + "integrity": "sha512-1e9d3kb97NHJTIJDZW9rKqW2h6+dFa50Dy0fpPSMQp2ADje5gvKsXmdiK6dwY5t76TaTt5+P5N1Y/LoToIxP6g==", "dev": true, "license": "MIT", "engines": { @@ -1831,13 +1810,6 @@ "node": ">=8" } }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true, - "license": "MIT" - }, "node_modules/is-unsafe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-unsafe/-/is-unsafe-2.0.0.tgz", @@ -1991,27 +1963,26 @@ } }, "node_modules/make-fetch-happen": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", - "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz", + "integrity": "sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", + "@npmcli/agent": "^3.0.0", + "cacache": "^19.0.1", "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", + "minipass-fetch": "^4.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "proc-log": "^4.2.0", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", "promise-retry": "^2.0.1", - "ssri": "^10.0.0" + "ssri": "^12.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/minimatch": { @@ -2054,18 +2025,18 @@ } }, "node_modules/minipass-fetch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", - "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.1.tgz", + "integrity": "sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==", "dev": true, "license": "MIT", "dependencies": { "minipass": "^7.0.3", "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "minizlib": "^3.0.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" }, "optionalDependencies": { "encoding": "^0.1.13" @@ -2097,6 +2068,13 @@ "node": ">=8" } }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, "node_modules/minipass-pipeline": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", @@ -2123,6 +2101,13 @@ "node": ">=8" } }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, "node_modules/minipass-sized": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", @@ -2149,44 +2134,24 @@ "node": ">=8" } }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "ISC" }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "dev": true, "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" + "dependencies": { + "minipass": "^7.1.2" }, "engines": { - "node": ">=10" + "node": ">= 18" } }, "node_modules/ms": { @@ -2216,9 +2181,9 @@ } }, "node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "dev": true, "license": "MIT", "engines": { @@ -2226,57 +2191,54 @@ } }, "node_modules/node-gyp": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.3.1.tgz", - "integrity": "sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ==", + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.5.0.tgz", + "integrity": "sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ==", "dev": true, "license": "MIT", "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^13.0.0", - "nopt": "^7.0.0", - "proc-log": "^4.1.0", + "make-fetch-happen": "^14.0.3", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", "semver": "^7.3.5", - "tar": "^6.2.1", - "which": "^4.0.0" + "tar": "^7.4.3", + "tinyglobby": "^0.2.12", + "which": "^5.0.0" }, "bin": { "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/nopt": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", - "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", "dev": true, "license": "ISC", "dependencies": { - "abbrev": "^2.0.0" + "abbrev": "^3.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.6.tgz", + "integrity": "sha512-I4Prw6ivkd6p8PiYR1tXASOAOBzIJwu0TB7fqaX0c/8c3QAehNYmX57EijyGGGBt3c/BIowGwV03RVBtXvHEVg==", "dev": true, "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -2399,13 +2361,13 @@ } }, "node_modules/proc-log": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", + "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", "dev": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/promise-retry": { @@ -2560,9 +2522,9 @@ } }, "node_modules/socks": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.8.tgz", - "integrity": "sha512-NlGELfPrgX2f1TAAcz0WawlLn+0r3FyhhCRpFFK2CemXenPYvzMWWZINv3eDNo9ucdwme7oCHRY0Jnbs4aIkog==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.9.tgz", + "integrity": "sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==", "dev": true, "license": "MIT", "dependencies": { @@ -2600,16 +2562,16 @@ } }, "node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz", + "integrity": "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==", "dev": true, "license": "ISC", "dependencies": { "minipass": "^7.0.3" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/stackback": { @@ -2780,58 +2742,20 @@ } }, "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "deprecated": "Old versions of tar 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", + "version": "7.5.22", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.22.tgz", + "integrity": "sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==", "dev": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "yallist": "^4.0.0" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" + "node": ">=18" } }, "node_modules/test-exclude": { @@ -2971,29 +2895,29 @@ "license": "MIT" }, "node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz", + "integrity": "sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==", "dev": true, "license": "ISC", "dependencies": { - "unique-slug": "^4.0.0" + "unique-slug": "^5.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-5.0.0.tgz", + "integrity": "sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==", "dev": true, "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/vite": { @@ -3168,9 +3092,9 @@ } }, "node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", "dev": true, "license": "ISC", "dependencies": { @@ -3180,7 +3104,7 @@ "node-which": "bin/which.js" }, "engines": { - "node": "^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/why-is-node-running": { @@ -3315,11 +3239,14 @@ } }, "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "dev": true, - "license": "ISC" + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } } } } diff --git a/native-lib/node/package.json b/native-lib/node/package.json index 05c2b88..b1a3e86 100644 --- a/native-lib/node/package.json +++ b/native-lib/node/package.json @@ -37,7 +37,7 @@ "@types/node": "^20", "@vitest/coverage-v8": "^3.0", "fast-xml-parser": "^5.10.1", - "node-gyp": "^10", + "node-gyp": "^11", "typescript": "^5.5", "vitest": "^3.0" }