From b47602840a259946039db8526ddd182d1430f634 Mon Sep 17 00:00:00 2001 From: Ranieri Althoff Date: Wed, 20 Dec 2023 01:34:09 +0100 Subject: [PATCH] Convert to ESM and package prebuilt binaries - Use buildjet runners for arm64 - Replace node-pre-gyp with node-gyp-build+prebuildify - Update workflows to node 16/18/20 --- .github/workflows/ci.yml | 69 ++-- .github/workflows/release.yml | 286 ++++++++------- README.md | 10 +- argon2.js => argon2.mjs | 75 ++-- argon2_node.cpp | 10 +- binding.gyp | 40 +-- package.json | 32 +- test.js | 260 -------------- test.mjs | 307 ++++++++++++++++ tsconfig.json | 2 +- yarn.lock | 641 ++++++++-------------------------- 11 files changed, 720 insertions(+), 1012 deletions(-) rename argon2.js => argon2.mjs (71%) delete mode 100644 test.js create mode 100644 test.mjs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f2f8b82..2fc09ae 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,11 +2,6 @@ name: CI on: [push, pull_request] -env: - YARN_GPG: no - npm_config_debug: yes - npm_config_build_from_source: true - jobs: test: strategy: @@ -16,50 +11,35 @@ jobs: name: Test for node-${{ matrix.node-version }} on ${{ matrix.os }} runs-on: ${{ matrix.os }} + steps: - - name: Checkout - uses: actions/checkout@v4 - with: - submodules: true - - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 - with: - cache: yarn - node-version: ${{ matrix.node-version }} - - - name: Install dependencies - run: yarn install --frozen-lockfile - - - name: Run tests - run: yarn test - - - name: "[Linux] Install lcov" - if: matrix.os == 'ubuntu-20.04' - run: sudo apt install lcov - - - name: "[Linux] Generate coverage" - if: matrix.os == 'ubuntu-20.04' - run: | - cp -rl build/* build-tmp-napi-v3 - rm -r build - yarn c8 report --reporter=text-lcov > lcov-js.info - lcov -c -d . --no-external -o lcov-cpp.info - lcov -r lcov-cpp.info "*/node_modules/*" -o lcov-cpp.info - lcov -a lcov-js.info -a lcov-cpp.info -o lcov.info - - - name: "[Linux] Send to Codacy" - if: matrix.os == 'ubuntu-20.04' - uses: codacy/codacy-coverage-reporter-action@v1 - with: - coverage-reports: lcov.info - project-token: ${{ secrets.CODACY_PROJECT_TOKEN }} + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: true + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + cache: yarn + node-version: ${{ matrix.node-version }} + + - name: Install dependencies + run: yarn install --frozen-lockfile + + - name: Run tests + run: yarn test test-alpine: - name: Test on Alpine Linux + strategy: + matrix: + node-version: [18, 20] + + name: Test for node-${{ matrix.node-version }} on Alpine Linux runs-on: ubuntu-latest + container: - image: node:18-alpine + image: node:${{ matrix.node-version }}-alpine3.18 steps: - name: Install build deps @@ -92,7 +72,6 @@ jobs: - uses: vmactions/freebsd-vm@v1 with: - envs: 'YARN_GPG npm_config_debug npm_config_build_from_source' prepare: | pkg install -y gmake python3 yarn-node${{ matrix.node-version }} run: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5234f0a..612eddc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,77 +4,101 @@ on: release: types: [published] -env: - npm_config_build_from_source: true + workflow_dispatch: + inputs: + new-version: + description: New version to be published, overrides tag + required: true + type: string + + npm-tag: + description: NPM tag + required: true + default: latest + type: choice + options: + - latest + - next jobs: - publish: - name: Publish package - runs-on: ubuntu-20.04 - - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - submodules: true - - - name: Use Node.js 18 - uses: actions/setup-node@v4 - with: - cache: yarn - node-version: 18 - registry-url: https://registry.npmjs.org/ - - - name: Install dependencies - run: yarn install --frozen-lockfile - - - name: Publish to NPM - run: yarn publish - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - build: strategy: matrix: - os: [ubuntu-20.04, macos-11, macos-m1, windows-2019] - - name: Build on ${{ matrix.os }} + include: + - os: ubuntu-20.04 + arch: linux-x64-glibc + - os: macos-11 + arch: darwin-x64 + - os: macos-m1 + arch: darwin-arm64 + - os: windows-2019 + arch: win32-x64 + + name: Build for ${{ matrix.arch }} runs-on: ${{ matrix.os }} steps: - - name: Checkout - uses: actions/checkout@v4 - with: - submodules: true - - - name: Use Node.js 18 - uses: actions/setup-node@v4 - with: - cache: yarn - node-version: 18 - - - name: Install dependencies - run: yarn install --frozen-lockfile - - - name: Package artifacts - run: yarn node-pre-gyp package - - - name: Upload to Release - uses: csexton/release-asset-action@v2 - with: - pattern: build/stage/**/argon2*.tar.gz - github-token: ${{ secrets.GITHUB_TOKEN }} - release-url: ${{ github.event.release.upload_url }} - - build-alpine: - name: Build on Alpine Linux + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: true + + - name: Use Node.js 20 + uses: actions/setup-node@v4 + with: + cache: yarn + node-version: 20 + + - name: Install dependencies + run: yarn install --frozen-lockfile --ignore-scripts + + - name: Prebuild + run: yarn build + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: prebuild-${{ matrix.arch }} + path: prebuilds/**/*.node + + build-linux-arm64-glibc: + name: Build for linux-arm64-glibc + runs-on: buildjet-2vcpu-ubuntu-2204-arm + + container: + image: node:20 + + steps: + - name: Install build deps + run: apt update -yq && apt install -yq g++ git make python3 + + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: true + + - name: Install dependencies + run: yarn install --frozen-lockfile --ignore-scripts + + - name: Prebuild + run: yarn build + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: prebuild-linux-arm64-glibc + path: prebuilds/**/*.node + + build-linux-x64-musl: + name: Build for linux-x64-musl runs-on: ubuntu-latest + container: - image: node:18-alpine + image: node:20-alpine steps: - name: Install build deps - run: apk add make g++ python3 git + run: apk add --no-cache g++ git make python3 - name: Checkout uses: actions/checkout@v4 @@ -82,74 +106,49 @@ jobs: submodules: true - name: Install dependencies - run: yarn install --frozen-lockfile + run: yarn install --frozen-lockfile --ignore-scripts - - name: Package artifacts - run: yarn node-pre-gyp package + - name: Prebuild + run: yarn build - - name: Upload to Release - uses: csexton/release-asset-action@v2 + - name: Upload artifacts + uses: actions/upload-artifact@v4 with: - pattern: build/stage/**/argon2*.tar.gz - github-token: ${{ secrets.GITHUB_TOKEN }} - release-url: ${{ github.event.release.upload_url }} + name: prebuild-linux-x64-musl + path: prebuilds/**/*.node - build-arm: - name: Build on arm64 + build-linux-arm64-musl: + name: Build for linux-arm64-musl runs-on: ubuntu-latest - strategy: - matrix: - include: - - arch: aarch64 - distro: ubuntu20.04 - - arch: aarch64 - distro: alpine_latest steps: - - name: Checkout - uses: actions/checkout@v4 - with: - submodules: true - - - uses: uraimo/run-on-arch-action@v2 - name: Package artifacts - id: build - with: - arch: ${{ matrix.arch }} - distro: ${{ matrix.distro }} - setup: mkdir -p "${PWD}/artifacts" - dockerRunArgs: --volume "${PWD}:/repo" - env: | - npm_config_build_from_source: true - install: | - case "${{ matrix.distro }}" in - ubuntu*|jessie|stretch|buster) - apt-get update -y - apt-get install -y curl - curl -fsSL https://deb.nodesource.com/setup_18.x | bash - - apt-get install -y make g++ python nodejs - npm install --global yarn - ;; - alpine*) - apk add --update make g++ python3 - apk add --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/v3.17/main/ nodejs~=18 npm - npm install --global yarn - ;; - esac - run: | - cd /repo - yarn install --frozen-lockfile - yarn node-pre-gyp package - - - name: Upload to Release - uses: csexton/release-asset-action@v2 - with: - pattern: build/stage/**/argon2*.tar.gz - github-token: ${{ secrets.GITHUB_TOKEN }} - release-url: ${{ github.event.release.upload_url }} - - build-freebsd: - name: Build on FreeBSD + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: true + + - name: Prebuild + uses: uraimo/run-on-arch-action@v2 + with: + arch: aarch64 + distro: alpine_latest + setup: mkdir -p "${PWD}/artifacts" + dockerRunArgs: --volume "${PWD}:/repo" --workdir /repo + install: | + apk add --update make g++ python3 + apk add --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/v3.19/main/ nodejs~=20 yarn + run: | + yarn install --frozen-lockfile --ignore-scripts + yarn build + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: prebuild-linux-arm64-musl + path: prebuilds/**/*.node + + build-freebsd-x64: + name: Build for freebsd-x64 runs-on: ubuntu-latest steps: @@ -158,20 +157,47 @@ jobs: with: submodules: true - - uses: vmactions/freebsd-vm@v1 - name: Package artifacts + - name: Prebuild + uses: vmactions/freebsd-vm@v1 with: - envs: 'npm_config_build_from_source' prepare: | - pkg install -y gmake python3 yarn-node18 + pkg install -y gmake python3 yarn-node20 run: | - yarn install --frozen-lockfile - yarn node-pre-gyp package + yarn install --frozen-lockfile --ignore-scripts + yarn build sync: sshfs - - name: Upload to Release - uses: csexton/release-asset-action@v2 + - name: Upload artifacts + uses: actions/upload-artifact@v4 with: - pattern: build/stage/**/argon2*.tar.gz - github-token: ${{ secrets.GITHUB_TOKEN }} - release-url: ${{ github.event.release.upload_url }} + name: prebuild-freebsd-x64 + path: prebuilds/**/*.node + + publish: + name: Publish package + runs-on: ubuntu-latest + needs: + - build + - build-freebsd-x64 + - build-linux-arm64-glibc + - build-linux-arm64-musl + - build-linux-x64-musl + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: true + + - name: Download artifacts + id: download-artifact + uses: actions/download-artifact@v4 + + - name: Move prebuild artifacts + run: mkdir prebuilds && cp --recursive prebuild-*/* prebuilds/ + + - name: Publish to NPM + run: yarn publish --tag ${{ inputs.npm-tag }} --new-version ${{ inputs.new-version || github.ref_name }} + if: ${{ !env.ACT }} + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/README.md b/README.md index 795523b..7be387c 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,6 @@ [![Financial contributors on Open Collective][opencollective-image]][opencollective-url] [![Build status][actions-image]][actions-url] [![NPM package][npm-image]][npm-url] -[![Coverage status][coverage-image]][coverage-url] -[![Code Quality][codequality-image]][codequality-url] Bindings to the reference [Argon2](https://github.com/P-H-C/phc-winner-argon2) implementation. @@ -68,8 +66,8 @@ The current prebuilt binaries are built and tested with the following systems: - MacOS 11 (x86-64) - MacOS 12 (ARM64 from v0.29.0) - Windows Server 2019 (x86-64) -- Alpine Linux 3.17+ (x86-64 from v0.28.1; ARM64 from v0.28.2) -- FreeBSD 13.1 (x86-64 from v0.29.1) +- Alpine Linux 3.18 (x86-64 from v0.28.1; ARM64 from v0.28.2) +- FreeBSD 14 (x86-64 from v0.29.1) Binaries should also work for any version more recent than the ones listed above. For example, the binary for Ubuntu 20.04 also works on Ubuntu 22.04, or @@ -212,7 +210,3 @@ license over Argon2 and the reference implementation. [npm-url]: https://www.npmjs.com/package/argon2 [actions-image]: https://img.shields.io/github/actions/workflow/status/ranisalt/node-argon2/ci.yml?branch=master&style=flat-square [actions-url]: https://github.com/ranisalt/node-argon2/actions -[coverage-image]: https://img.shields.io/codacy/coverage/3aa6daee00154e1492660ecb2f788f73/master.svg?style=flat-square -[coverage-url]: https://app.codacy.com/gh/ranisalt/node-argon2 -[codequality-image]: https://img.shields.io/codacy/grade/3aa6daee00154e1492660ecb2f788f73/master.svg?style=flat-square -[codequality-url]: https://app.codacy.com/gh/ranisalt/node-argon2 diff --git a/argon2.js b/argon2.mjs similarity index 71% rename from argon2.js rename to argon2.mjs index 0adabc4..75585f9 100644 --- a/argon2.js +++ b/argon2.mjs @@ -1,21 +1,23 @@ -"use strict"; -const assert = require("node:assert"); -const { randomBytes, timingSafeEqual } = require("node:crypto"); -const path = require("node:path"); -const { promisify } = require("node:util"); -const binary = require("@mapbox/node-pre-gyp"); -const { deserialize, serialize } = require("@phc/format"); +import assert from "node:assert"; +import { randomBytes, timingSafeEqual } from "node:crypto"; +import { fileURLToPath } from "node:url"; +import { promisify } from "node:util"; +import { deserialize, serialize } from "@phc/format"; +import gypBuild from "node-gyp-build"; -const bindingPath = binary.find(path.resolve(__dirname, "./package.json")); -const { hash: _hash } = require(bindingPath); +const { hash: _hash } = gypBuild(fileURLToPath(new URL(".", import.meta.url))); const bindingsHash = promisify(_hash); /** @type {(size: number) => Promise} */ const generateSalt = promisify(randomBytes); -/** @enum {0 | 1 | 2} */ -const types = Object.freeze({ argon2d: 0, argon2i: 1, argon2id: 2 }); +export const argon2d = 0; +export const argon2i = 1; +export const argon2id = 2; + +/** @enum {argon2i | argon2d | argon2id} */ +const types = Object.freeze({ argon2d, argon2i, argon2id }); /** @enum {'argon2d' | 'argon2i' | 'argon2id'} */ const names = Object.freeze({ @@ -30,11 +32,11 @@ const defaults = Object.freeze({ timeCost: 3, memoryCost: 1 << 16, parallelism: 4, - type: types.argon2id, + type: argon2id, version: 0x13, }); -const limits = Object.freeze({ +export const limits = Object.freeze({ hashLength: { min: 4, max: 2 ** 32 - 1 }, memoryCost: { min: 1 << 10, max: 2 ** 32 - 1 }, timeCost: { min: 2, max: 2 ** 32 - 1 }, @@ -55,7 +57,7 @@ const limits = Object.freeze({ * @property {Buffer} [secret] */ -/** +/**> * Hashes a password with Argon2, producing a raw hash * * @overload @@ -76,7 +78,7 @@ const limits = Object.freeze({ * @param {Options & { raw?: boolean }} options * @returns {Promise} */ -async function hash(plain, options) { +export async function hash(plain, options) { const { raw, salt, saltLength, ...rest } = { ...defaults, ...options }; for (const [key, { min, max }] of Object.entries(limits)) { @@ -117,7 +119,7 @@ async function hash(plain, options) { * @param {Options} [options] The current parameters for Argon2 * @return {boolean} `true` if the digest parameters do not match the parameters in `options`, otherwise `false` */ -function needsRehash(digest, options) { +export function needsRehash(digest, options) { const { memoryCost, timeCost, version } = { ...defaults, ...options }; const { @@ -134,33 +136,30 @@ function needsRehash(digest, options) { * @param {Options} [options] The current parameters for Argon2 * @return {Promise} `true` if the digest parameters matches the hash generated from `plain`, otherwise `false` */ -async function verify(digest, plain, options) { +export async function verify(digest, plain, options) { + const { id, ...rest } = deserialize(digest); + if (!(id in types)) { + return false; + } + const { - id, version = 0x10, params: { m, t, p, data }, salt, hash, - } = deserialize(digest); + } = rest; - // Only "types" have the "params" key, so if the password was encoded - // using any other method, the destructuring throws an error - return ( - id in types && - timingSafeEqual( - await bindingsHash(Buffer.from(plain), salt, { - ...options, - type: types[id], - version: +version, - hashLength: hash.length, - memoryCost: +m, - timeCost: +t, - parallelism: +p, - ...(data ? { associatedData: Buffer.from(data, "base64") } : {}), - }), - hash, - ) + return timingSafeEqual( + await bindingsHash(Buffer.from(plain), salt, { + ...options, + type: types[id], + version: +version, + hashLength: hash.length, + memoryCost: +m, + timeCost: +t, + parallelism: +p, + ...(data ? { associatedData: Buffer.from(data, "base64") } : {}), + }), + hash, ); } - -module.exports = { defaults, hash, needsRehash, verify, ...types }; diff --git a/argon2_node.cpp b/argon2_node.cpp index 8b43233..b25a157 100644 --- a/argon2_node.cpp +++ b/argon2_node.cpp @@ -38,13 +38,13 @@ static argon2_context make_context(uint8_t *buf, ustring &plain, ustring &salt, ctx.out = buf; ctx.outlen = opts.hash_length; ctx.pwd = plain.data(); - ctx.pwdlen = plain.size(); + ctx.pwdlen = static_cast(plain.size()); ctx.salt = salt.data(); - ctx.saltlen = salt.size(); + ctx.saltlen = static_cast(salt.size()); ctx.secret = opts.secret.empty() ? nullptr : opts.secret.data(); - ctx.secretlen = opts.secret.size(); + ctx.secretlen = static_cast(opts.secret.size()); ctx.ad = opts.ad.empty() ? nullptr : opts.ad.data(); - ctx.adlen = opts.ad.size(); + ctx.adlen = static_cast(opts.ad.size()); ctx.t_cost = opts.time_cost; ctx.m_cost = opts.memory_cost; ctx.lanes = opts.parallelism; @@ -124,4 +124,4 @@ static Object init(Env env, Object exports) { return exports; } -NODE_API_MODULE(argon2_lib, init); +NODE_API_MODULE(argon2_lib, init) diff --git a/binding.gyp b/binding.gyp index 2f8f2a5..52ce6b8 100644 --- a/binding.gyp +++ b/binding.gyp @@ -5,15 +5,22 @@ ["OS == 'mac'", { "xcode_settings": { "CLANG_CXX_LIBRARY": "libc++", - "MACOSX_DEPLOYMENT_TARGET": "10.7", + "GCC_ENABLE_CPP_EXCEPTIONS": "YES", + "MACOSX_DEPLOYMENT_TARGET": "10.7" } }], + ["OS == 'win'", { + "defines+": ["_HAS_EXCEPTIONS=1"], + "msvs_settings": { + "VCCLCompilerTool": { "ExceptionHandling": 1 } + } + }] ], "configurations": { "Release": { "target_conditions": [ ["OS != 'win'", { - "cflags+": ["-fdata-sections", "-ffunction-sections", "-fvisibility=hidden"], + "cflags+": ["-fdata-sections", "-ffunction-sections", "-flto", "-fvisibility=hidden"], "ldflags+": ["-Wl,--gc-sections"] }] ], @@ -26,10 +33,10 @@ "target_name": "libargon2", "sources": [ "argon2/src/argon2.c", - "argon2/src/core.c", "argon2/src/blake2/blake2b.c", - "argon2/src/thread.c", + "argon2/src/core.c", "argon2/src/encoding.c", + "argon2/src/thread.c" ], "cflags+": ["-Wno-type-limits"], "conditions": [ @@ -42,40 +49,29 @@ ], "type": "static_library" }, { - "target_name": "<(module_name)", - "xcode_settings": { - "GCC_ENABLE_CPP_EXCEPTIONS": "YES", - }, - "msvs_settings": { - "VCCLCompilerTool": { "ExceptionHandling": 1 }, - }, - "defines": [ + "target_name": "argon2", + "defines+": [ "NAPI_VERSION=<(napi_build_version)", + "NODE_ADDON_API_DISABLE_DEPRECATED", + "NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED" ], "sources": [ "argon2_node.cpp" ], + "cflags_cc+": ["-Wall", "-Wextra", "-Wconversion", "-Wformat", "-Wnon-virtual-dtor", "-pedantic", "-Werror"], "cflags_cc!": ["-fno-exceptions"], - "include_dirs": ["", - "main": "argon2.js", + "type": "module", + "main": "argon2.mjs", "types": "argon2.d.ts", "files": [ "argon2_node.cpp", @@ -38,36 +39,33 @@ "argon2/src/opt.c", "argon2/src/ref.c", "argon2/src/thread.c", - "argon2/src/thread.h" + "argon2/src/thread.h", + "prebuilds/**/*.node" ], "binary": { - "module_name": "argon2", - "module_path": "./lib/binding/napi-v{napi_build_version}", - "remote_path": "v{version}", - "package_name": "{module_name}-v{version}-napi-v{napi_build_version}-{platform}-{arch}-{libc}.tar.gz", - "host": "https://github.com/ranisalt/node-argon2/releases/download/", "napi_versions": [ - 3 + 8 ] }, "scripts": { - "format": "prettier --write \"*.{js,json}\"", - "install": "node-pre-gyp install --fallback-to-build", + "build": "prebuildify --napi --strip --tag-armv --tag-libc", + "format": "prettier --write \"*.{json,mjs}\"", + "install": "node-gyp-build", "prepack": "yarn prepare", "prepare": "tsc", - "test": "c8 node --test test.js" + "test": "node --test test.mjs" }, "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.11", "@phc/format": "^1.0.0", - "node-addon-api": "^7.0.0" + "node-addon-api": "^7.0.0", + "node-gyp-build": "^4.7.1" }, "devDependencies": { - "@types/node": "^20.8.10", - "c8": "^8.0.1", + "@types/node": "^20.10.5", "node-gyp": "^10.0.1", - "prettier": "^3.0.0", - "typescript": "^5.2.2" + "prebuildify": "^5.0.1", + "prettier": "^3.1.1", + "typescript": "^5.3.3" }, "engines": { "node": ">=16.17.0" diff --git a/test.js b/test.js deleted file mode 100644 index dc89cbe..0000000 --- a/test.js +++ /dev/null @@ -1,260 +0,0 @@ -// @ts-check -const assert = require("node:assert/strict"); -const { describe, it } = require("node:test"); -const argon2 = require("./argon2.js"); - -const { argon2i, argon2d, argon2id } = argon2; -const password = "password"; -const salt = Buffer.alloc(16, "salt"); -const associatedData = Buffer.alloc(16, "ad"); -const secret = Buffer.alloc(16, "secret"); - -// hashes for argon2i and argon2d with default options -const hashes = Object.freeze({ - argon2id: - "$argon2id$v=19$m=65536,t=3,p=4$c2FsdHNhbHRzYWx0c2FsdA$rBWULD5jOGpQy32rLvGcmvQMVqIVNAmrCtekWvUA8bw", - withNull: - "$argon2id$v=19$m=65536,t=3,p=4$c2FsdHNhbHRzYWx0c2FsdA$NqchDOxwWbcBzA+0gtsCtyspEQxqKFf4/PO/AoIvo+Q", - withAd: - "$argon2id$v=19$m=65536,t=3,p=4,data=YWRhZGFkYWRhZGFkYWRhZA$c2FsdHNhbHRzYWx0c2FsdA$TEIIM4GBSUxvMLolL9ePXYP5G/qcr0vywQqqm/ILvsM", - withSecret: - "$argon2id$v=19$m=65536,t=3,p=4$c2FsdHNhbHRzYWx0c2FsdA$8dZyo1MdHgdzBm+VU7+tyW06dUO7B9FyaPImH5ejVOU", - argon2i: - "$argon2i$v=19$m=65536,t=3,p=4$c2FsdHNhbHRzYWx0c2FsdA$1Ccmp7ECb+Rb5XPjqRwEuAjCufY1xQDOJwnHrB+orZ4", - argon2d: - "$argon2d$v=19$m=65536,t=3,p=4$c2FsdHNhbHRzYWx0c2FsdA$VtxJNl5Jr/yZ2UIhvfvL4sGPdDQyGCcy45Cs7rIdFq8", - rawArgon2id: Buffer.from( - "ac15942c3e63386a50cb7dab2ef19c9af40c56a2153409ab0ad7a45af500f1bc", - "hex", - ), - rawWithNull: Buffer.from( - "36a7210cec7059b701cc0fb482db02b72b29110c6a2857f8fcf3bf02822fa3e4", - "hex", - ), - rawArgon2i: Buffer.from( - "d42726a7b1026fe45be573e3a91c04b808c2b9f635c500ce2709c7ac1fa8ad9e", - "hex", - ), - rawArgon2d: Buffer.from( - "56dc49365e49affc99d94221bdfbcbe2c18f743432182732e390aceeb21d16af", - "hex", - ), - oldFormat: - "$argon2i$m=4096,t=3,p=1$tbagT6b1YH33niCo9lVzuA$htv/k+OqWk1V9zD9k5DOBi2kcfcZ6Xu3tWmwEPV3/nc", -}); - -describe("hash", () => { - it("hash with argon2i", async () => { - const hash = await argon2.hash(password, { type: argon2i, salt }); - assert.equal(hashes.argon2i, hash); - }); - - it("argon2i with raw hash", async () => { - const hash = await argon2.hash(password, { - type: argon2i, - raw: true, - salt, - }); - assert(hashes.rawArgon2i.equals(hash)); - }); - - it("hash with argon2d", async () => { - const hash = await argon2.hash(password, { type: argon2d, salt }); - assert.equal(hashes.argon2d, hash); - }); - - it("argon2d with raw hash", async () => { - const hash = await argon2.hash(password, { - type: argon2d, - raw: true, - salt, - }); - assert(hashes.rawArgon2d.equals(hash)); - }); - - it("hash with argon2id", async () => { - const hash = await argon2.hash(password, { type: argon2id, salt }); - assert.equal(hashes.argon2id, hash); - }); - - it("argon2id with raw hash", async () => { - const hash = await argon2.hash(password, { - type: argon2id, - raw: true, - salt, - }); - assert(hashes.rawArgon2id.equals(hash)); - }); - - it("with null in password", async () => { - const hash = await argon2.hash("pass\0word", { salt }); - assert.equal(hashes.withNull, hash); - }); - - it("with raw hash, null in password", async () => { - const hash = await argon2.hash("pass\0word", { raw: true, salt }); - assert(hashes.rawWithNull.equals(hash)); - }); - - it("with associated data", async () => { - const hash = await argon2.hash(password, { associatedData, salt }); - assert.equal(hashes.withAd, hash); - }); - - it("with secret", async () => { - const hash = await argon2.hash(password, { secret, salt }); - assert.equal(hashes.withSecret, hash); - }); -}); - -describe("set options", () => { - it("hash with time cost", async () => { - const hash = await argon2.hash(password, { timeCost: 4 }); - assert.match(hash, /t=4/); - }); - - it("hash with low time cost", async () => { - await assert.rejects(argon2.hash(password, { timeCost: 1 }), { - message: /invalid timeCost.+between \d+ and \d+/i, - }); - }); - - it("hash with high time cost", async () => { - await assert.rejects(argon2.hash(password, { timeCost: 2 ** 32 }), { - message: /invalid timeCost.+between \d+ and \d+/i, - }); - }); - - it("hash with hash length", async () => { - // 4 bytes ascii == 6 bytes base64 - const hash = await argon2.hash(password, { hashLength: 4 }); - assert.match(hash, /\$[^$]{6}$/); - }); - - it("hash with low hash length", async () => { - await assert.rejects(argon2.hash(password, { hashLength: 3 }), { - message: /invalid hashLength.+between \d+ and \d+/i, - }); - }); - - it("hash with high hash length", async () => { - await assert.rejects(argon2.hash(password, { hashLength: 2 ** 32 }), { - message: /invalid hashLength.+between \d+ and \d+/i, - }); - }); - - it("hash with memory cost", async () => { - const hash = await argon2.hash(password, { memoryCost: 8192 }); - assert.match(hash, /m=8192/); - }); - - it("hash with low memory cost", async () => { - await assert.rejects(argon2.hash(password, { memoryCost: 2 ** 9 }), { - message: /invalid memoryCost.+between \d+ and \d+/i, - }); - }); - - it("hash with high memory cost", async () => { - await assert.rejects(argon2.hash(password, { memoryCost: 2 ** 9 }), { - message: /invalid memoryCost.+between \d+ and \d+/i, - }); - }); - - it("hash with parallelism", async () => { - const hash = await argon2.hash(password, { parallelism: 2 }); - assert.match(hash, /p=2/); - }); - - it("hash with low parallelism", async () => { - await assert.rejects(argon2.hash(password, { parallelism: 0 }), { - message: /invalid parallelism.+between \d+ and \d+/i, - }); - }); - - it("hash with high parallelism", async () => { - await assert.rejects(argon2.hash(password, { parallelism: 2 ** 24 }), { - message: /invalid parallelism.+between \d+ and \d+/i, - }); - }); - - it("hash with all options", async () => { - const hash = await argon2.hash(password, { - timeCost: 4, - memoryCost: 8192, - parallelism: 2, - }); - assert.match(hash, /m=8192,t=4,p=2/); - }); -}); - -describe("needsRehash", () => { - it("needs rehash old version", async () => { - const hash = await argon2.hash(password, { version: 0x10 }); - assert(argon2.needsRehash(hash)); - assert(!argon2.needsRehash(hash, { version: 0x10 })); - }); - - it("needs rehash low memory cost", async () => { - const hash = await argon2.hash(password, { memoryCost: 2 ** 15 }); - assert(argon2.needsRehash(hash)); - assert(!argon2.needsRehash(hash, { memoryCost: 2 ** 15 })); - }); - - it("needs rehash low time cost", async () => { - const hash = await argon2.hash(password, { timeCost: 2 }); - assert(argon2.needsRehash(hash)); - assert(!argon2.needsRehash(hash, { timeCost: 2 })); - }); -}); - -describe("verify", () => { - it("verify correct password", async () => { - const hash = await argon2.hash(password); - assert(await argon2.verify(hash, password)); - }); - - it("verify wrong password", async () => { - const hash = await argon2.hash(password); - assert(!(await argon2.verify(hash, "passworld"))); - }); - - it("verify with null in password", async () => { - const hash = await argon2.hash("pass\0word"); - assert(await argon2.verify(hash, "pass\0word")); - }); - - it("verify with associated data", async () => { - const hash = await argon2.hash(password, { associatedData }); - assert(await argon2.verify(hash, "password")); - }); - - it("verify with secret", async () => { - const hash = await argon2.hash(password, { secret }); - assert(await argon2.verify(hash, "password", { secret })); - }); - - it("verify argon2d correct password", async () => { - const hash = await argon2.hash(password, { type: argon2d }); - assert(await argon2.verify(hash, password)); - }); - - it("verify argon2d wrong password", async () => { - const hash = await argon2.hash(password, { type: argon2d }); - assert(!(await argon2.verify(hash, "passworld"))); - }); - - it("verify argon2id correct password", async () => { - const hash = await argon2.hash(password, { type: argon2id }); - assert(await argon2.verify(hash, password)); - }); - - it("verify argon2id wrong password", async () => { - const hash = await argon2.hash(password, { type: argon2id }); - assert(!(await argon2.verify(hash, "passworld"))); - }); - - it("verify old hash format", async () => { - // older hashes did not contain the v (version) parameter - assert(await argon2.verify(hashes.oldFormat, "password")); - }); -}); diff --git a/test.mjs b/test.mjs new file mode 100644 index 0000000..f499670 --- /dev/null +++ b/test.mjs @@ -0,0 +1,307 @@ +import assert from "node:assert/strict"; +import { describe, it } from "node:test"; +import * as argon2 from "./argon2.mjs"; + +const { argon2i, argon2d, argon2id, limits } = argon2; + +const password = "password"; +const salt = Buffer.alloc(16, "salt"); +const associatedData = Buffer.alloc(16, "ad"); +const secret = Buffer.alloc(16, "secret"); + +// hashes for argon2i and argon2d with default options +const hashes = { + argon2id: + "$argon2id$v=19$m=65536,t=3,p=4$c2FsdHNhbHRzYWx0c2FsdA$rBWULD5jOGpQy32rLvGcmvQMVqIVNAmrCtekWvUA8bw", + withNull: + "$argon2id$v=19$m=65536,t=3,p=4$c2FsdHNhbHRzYWx0c2FsdA$NqchDOxwWbcBzA+0gtsCtyspEQxqKFf4/PO/AoIvo+Q", + withAd: + "$argon2id$v=19$m=65536,t=3,p=4,data=YWRhZGFkYWRhZGFkYWRhZA$c2FsdHNhbHRzYWx0c2FsdA$TEIIM4GBSUxvMLolL9ePXYP5G/qcr0vywQqqm/ILvsM", + withSecret: + "$argon2id$v=19$m=65536,t=3,p=4$c2FsdHNhbHRzYWx0c2FsdA$8dZyo1MdHgdzBm+VU7+tyW06dUO7B9FyaPImH5ejVOU", + argon2i: + "$argon2i$v=19$m=65536,t=3,p=4$c2FsdHNhbHRzYWx0c2FsdA$1Ccmp7ECb+Rb5XPjqRwEuAjCufY1xQDOJwnHrB+orZ4", + argon2d: + "$argon2d$v=19$m=65536,t=3,p=4$c2FsdHNhbHRzYWx0c2FsdA$VtxJNl5Jr/yZ2UIhvfvL4sGPdDQyGCcy45Cs7rIdFq8", + rawArgon2id: Buffer.from( + "ac15942c3e63386a50cb7dab2ef19c9af40c56a2153409ab0ad7a45af500f1bc", + "hex", + ), + rawWithNull: Buffer.from( + "36a7210cec7059b701cc0fb482db02b72b29110c6a2857f8fcf3bf02822fa3e4", + "hex", + ), + rawArgon2i: Buffer.from( + "d42726a7b1026fe45be573e3a91c04b808c2b9f635c500ce2709c7ac1fa8ad9e", + "hex", + ), + rawArgon2d: Buffer.from( + "56dc49365e49affc99d94221bdfbcbe2c18f743432182732e390aceeb21d16af", + "hex", + ), + oldFormat: + "$argon2i$m=4096,t=3,p=1$tbagT6b1YH33niCo9lVzuA$htv/k+OqWk1V9zD9k5DOBi2kcfcZ6Xu3tWmwEPV3/nc", +}; + +describe("hash", () => { + it("hash with argon2i", async () => { + assert.equal( + hashes.argon2i, + await argon2.hash(password, { type: argon2i, salt }), + ); + }); + + it("argon2i with raw hash", async () => { + assert( + hashes.rawArgon2i.equals( + await argon2.hash(password, { type: argon2i, raw: true, salt }), + ), + ); + }); + + it("hash with argon2d", async () => { + assert.equal( + hashes.argon2d, + await argon2.hash(password, { type: argon2d, salt }), + ); + }); + + it("argon2d with raw hash", async () => { + assert( + hashes.rawArgon2d.equals( + await argon2.hash(password, { type: argon2d, raw: true, salt }), + ), + ); + }); + + it("hash with argon2id", async () => { + assert.equal( + hashes.argon2id, + await argon2.hash(password, { type: argon2id, salt }), + ); + }); + + it("argon2id with raw hash", async () => { + assert( + hashes.rawArgon2id.equals( + await argon2.hash(password, { type: argon2id, raw: true, salt }), + ), + ); + }); + + it("with null in password", async () => { + assert.equal(hashes.withNull, await argon2.hash("pass\0word", { salt })); + }); + + it("with raw hash, null in password", async () => { + assert( + hashes.rawWithNull.equals( + await argon2.hash("pass\0word", { raw: true, salt }), + ), + ); + }); + + it("with associated data", async () => { + assert.equal( + hashes.withAd, + await argon2.hash(password, { associatedData, salt }), + ); + }); + + it("with secret", async () => { + assert.equal( + hashes.withSecret, + await argon2.hash(password, { secret, salt }), + ); + }); +}); + +describe("set options", () => { + it("hash with time cost", async () => { + assert.match(await argon2.hash(password, { timeCost: 4 }), /t=4/); + }); + + it("hash with low time cost", async () => { + assert.rejects( + argon2.hash(password, { timeCost: limits.timeCost.min - 1 }), + /invalid timeCost.+between \d+ and \d+/i, + ); + }); + + it("hash with high time cost", async () => { + assert.rejects( + argon2.hash(password, { timeCost: limits.timeCost.max + 1 }), + /invalid timeCost.+between \d+ and \d+/i, + ); + }); + + it("hash with hash length", async () => { + // 4 bytes ascii == 6 bytes base64 + assert.match(await argon2.hash(password, { hashLength: 4 }), /\$[^$]{6}$/); + }); + + it("hash with low hash length", async () => { + assert.rejects( + argon2.hash(password, { hashLength: limits.hashLength.min - 1 }), + /invalid hashLength.+between \d+ and \d+/i, + ); + }); + + it("hash with high hash length", async () => { + assert.rejects( + argon2.hash(password, { hashLength: limits.hashLength.max + 1 }), + /invalid hashLength.+between \d+ and \d+/i, + ); + }); + + it("hash with memory cost", async () => { + assert.match( + await argon2.hash(password, { memoryCost: 1 << 13 }), + /m=8192/, + ); + }); + + it("hash with low memory cost", async () => { + assert.rejects( + argon2.hash(password, { memoryCost: limits.memoryCost.min / 2 }), + /invalid memoryCost.+between \d+ and \d+/i, + ); + }); + + it("hash with high memory cost", async () => { + assert.rejects( + argon2.hash(password, { memoryCost: limits.memoryCost.max * 2 }), + /invalid memoryCost.+between \d+ and \d+/i, + ); + }); + + it("hash with parallelism", async () => { + assert.match(await argon2.hash(password, { parallelism: 2 }), /p=2/); + }); + + it("hash with low parallelism", async () => { + assert.rejects( + argon2.hash(password, { parallelism: limits.parallelism.min - 1 }), + /invalid parallelism.+between \d+ and \d+/i, + ); + }); + + it("hash with high parallelism", async () => { + assert.rejects( + argon2.hash(password, { parallelism: limits.parallelism.max + 1 }), + /invalid parallelism.+between \d+ and \d+/i, + ); + }); + + it("hash with all options", async () => { + assert.match( + await argon2.hash(password, { + timeCost: 4, + memoryCost: 1 << 13, + parallelism: 2, + }), + /m=8192,t=4,p=2/, + ); + }); +}); + +describe("needsRehash", () => { + it("needs rehash old version", async () => { + const hash = await argon2.hash(password, { version: 0x10 }); + assert(argon2.needsRehash(hash)); + assert(!argon2.needsRehash(hash, { version: 0x10 })); + }); + + it("needs rehash low memory cost", async () => { + const hash = await argon2.hash(password, { memoryCost: 1 << 15 }); + assert(argon2.needsRehash(hash)); + assert(!argon2.needsRehash(hash, { memoryCost: 1 << 15 })); + }); + + it("needs rehash low time cost", async () => { + const hash = await argon2.hash(password, { timeCost: 2 }); + assert(argon2.needsRehash(hash)); + assert(!argon2.needsRehash(hash, { timeCost: 2 })); + }); +}); + +describe("verify", () => { + it("verify correct password", async () => { + assert(await argon2.verify(await argon2.hash(password), password)); + }); + + it("verify wrong password", async () => { + assert(!(await argon2.verify(await argon2.hash(password), "passworld"))); + }); + + it("verify with null in password", async () => { + assert(await argon2.verify(await argon2.hash("pass\0word"), "pass\0word")); + }); + + it("verify with associated data", async () => { + assert( + await argon2.verify( + await argon2.hash(password, { associatedData }), + "password", + ), + ); + }); + + it("verify with secret", async () => { + assert( + await argon2.verify(await argon2.hash(password, { secret }), "password", { + secret, + }), + ); + }); + + it("verify argon2d correct password", async () => { + assert( + await argon2.verify( + await argon2.hash(password, { type: argon2d }), + password, + ), + ); + }); + + it("verify argon2d wrong password", async () => { + assert( + !(await argon2.verify( + await argon2.hash(password, { type: argon2d }), + "passworld", + )), + ); + }); + + it("verify argon2id correct password", async () => { + assert( + await argon2.verify( + await argon2.hash(password, { type: argon2id }), + password, + ), + ); + }); + + it("verify argon2id wrong password", async () => { + assert( + !(await argon2.verify( + await argon2.hash(password, { type: argon2id }), + "passworld", + )), + ); + }); + + it("verify old hash format", async () => { + // older hashes did not contain the v (version) parameter + assert(await argon2.verify(hashes.oldFormat, "password")); + }); + + it("verify invalid hash function", async () => { + assert( + !(await argon2.verify( + "$2a$12$R9h/cIPz0gi.URNNX3kh2OPST9/PgBkqquzi.Ss7KIUgO2t0jWMUW", + "abc123xyz", + )), + ); + }); +}); diff --git a/tsconfig.json b/tsconfig.json index 3a5ab2d..b1ce46d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,5 +9,5 @@ "emitDeclarationOnly": true, "strict": true }, - "files": ["argon2.js"] + "files": ["argon2.mjs"] } diff --git a/yarn.lock b/yarn.lock index 6e63876..64afcc3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,11 +2,6 @@ # yarn lockfile v1 -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - "@isaacs/cliui@^8.0.2": version "8.0.2" resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" @@ -19,44 +14,6 @@ wrap-ansi "^8.1.0" wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" -"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@^0.3.12": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@mapbox/node-pre-gyp@^1.0.11": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz#417db42b7f5323d79e93b34a6d7a2a12c0df43fa" - integrity sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ== - dependencies: - detect-libc "^2.0.0" - https-proxy-agent "^5.0.0" - make-dir "^3.1.0" - node-fetch "^2.6.7" - nopt "^5.0.0" - npmlog "^5.0.1" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.11" - "@npmcli/agent@^2.0.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-2.2.0.tgz#e81f00fdb2a670750ff7731bbefb47ecbf0ccf44" @@ -85,35 +42,18 @@ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== - -"@types/node@^20.8.10": - version "20.8.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.10.tgz#a5448b895c753ae929c26ce85cab557c6d4a365e" - integrity sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w== +"@types/node@^20.10.5": + version "20.10.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.5.tgz#47ad460b514096b7ed63a1dae26fad0914ed3ab2" + integrity sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw== dependencies: undici-types "~5.26.4" -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - abbrev@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - agent-base@^7.0.2, agent-base@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" @@ -151,31 +91,24 @@ ansi-styles@^6.1.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== -"aproba@^1.0.3 || ^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -are-we-there-yet@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" - integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" brace-expansion@^2.0.1: version "2.0.1" @@ -184,35 +117,25 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -c8@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/c8/-/c8-8.0.1.tgz#bafd60be680e66c5530ee69f621e45b1364af9fd" - integrity sha512-EINpopxZNH1mETuI0DzRA4MZpAUH+IFiRhnmFD3vFr3vdrgxqi3VfE3KL0AIL+zDq8rC9bZqwM/VDmmoe04y7w== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@istanbuljs/schema" "^0.1.3" - find-up "^5.0.0" - foreground-child "^2.0.0" - istanbul-lib-coverage "^3.2.0" - istanbul-lib-report "^3.0.1" - istanbul-reports "^3.1.6" - rimraf "^3.0.2" - test-exclude "^6.0.0" - v8-to-istanbul "^9.0.0" - yargs "^17.7.2" - yargs-parser "^21.1.1" +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" cacache@^18.0.0: - version "18.0.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.0.tgz#17a9ecd6e1be2564ebe6cdca5f7cfed2bfeb6ddc" - integrity sha512-I7mVOPl3PUCeRub1U8YoGz2Lqv9WOBpobZ8RyWFXmReuILz+3OAyTa5oH3QPdtKZD7N0Yk00aLfzn0qvp8dZ1w== + version "18.0.1" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.1.tgz#b026d56ad569e4f73cc07c813b3c66707d0fb142" + integrity sha512-g4Uf2CFZPaxtJKre6qr4zqLDOOPU7bNVhWjlNhvzc51xaTOx2noMOLhfFkTAqwtrAZAKQUuDfyjitzilpA8WsQ== dependencies: "@npmcli/fs" "^3.1.0" fs-minipass "^3.0.0" glob "^10.2.2" lru-cache "^10.0.1" minipass "^7.0.3" - minipass-collect "^1.0.2" + minipass-collect "^2.0.1" minipass-flush "^1.0.5" minipass-pipeline "^1.2.4" p-map "^4.0.0" @@ -220,6 +143,11 @@ cacache@^18.0.0: tar "^6.1.11" unique-filename "^3.0.0" +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + chownr@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" @@ -230,15 +158,6 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -251,26 +170,6 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-support@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -console-control-strings@^1.0.0, console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - -convert-source-map@^1.6.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - cross-spawn@^7.0.0: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -287,16 +186,6 @@ debug@4, debug@^4.3.4: dependencies: ms "2.1.2" -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - -detect-libc@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" - integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== - eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" @@ -319,6 +208,13 @@ encoding@^0.1.13: dependencies: iconv-lite "^0.6.2" +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + env-paths@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" @@ -329,32 +225,18 @@ err-code@^2.0.2: resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +execspawn@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/execspawn/-/execspawn-1.0.1.tgz#8286f9dde7cecde7905fbdc04e24f368f23f8da6" + integrity sha512-s2k06Jy9i8CUkYe0+DxRlvtkZoOkwwfhB+Xxo5HGUtrISVW2m98jO2tr67DGRFxZwkjQqloA3v/tNtjhBRBieg== + dependencies: + util-extend "^1.0.1" exponential-backoff@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -foreground-child@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" - integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^3.0.2" - foreground-child@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" @@ -363,6 +245,11 @@ foreground-child@^3.1.0: cross-spawn "^7.0.0" signal-exit "^4.0.1" +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + fs-minipass@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" @@ -377,43 +264,7 @@ fs-minipass@^3.0.0: dependencies: minipass "^7.0.3" -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -gauge@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" - integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.2" - console-control-strings "^1.0.0" - has-unicode "^2.0.1" - object-assign "^4.1.1" - signal-exit "^3.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.2" - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -glob@^10.2.2: - version "10.3.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.4.tgz#c85c9c7ab98669102b6defda76d35c5b1ef9766f" - integrity sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.0.3" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" - -glob@^10.3.10: +glob@^10.2.2, glob@^10.3.10: version "10.3.10" resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== @@ -424,38 +275,11 @@ glob@^10.3.10: minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-scurry "^1.10.1" -glob@^7.1.3, glob@^7.1.4: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - graceful-fs@^4.2.6: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - http-cache-semantics@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" @@ -469,14 +293,6 @@ http-proxy-agent@^7.0.0: agent-base "^7.1.0" debug "^4.3.4" -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - https-proxy-agent@^7.0.1: version "7.0.2" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz#e2645b846b90e96c6e6f347fb5b2e41f1590b09b" @@ -492,6 +308,11 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -502,15 +323,7 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.3: +inherits@^2.0.3, inherits@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -540,37 +353,6 @@ isexe@^3.1.1: resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== - -istanbul-lib-report@^3.0.0, istanbul-lib-report@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" - integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^4.0.0" - supports-color "^7.1.0" - -istanbul-reports@^3.1.6: - version "3.1.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jackspeak@^2.0.3: - version "2.3.1" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.1.tgz#ce2effa4c458e053640e61938865a5b5fae98456" - integrity sha512-4iSY3Bh1Htv+kLhiiZunUhQ+OYXIn0ze3ulq8JeWrFKmhPAJSySV2+kdtRh2pGcCeF0s6oR8Oc+pYZynJj4t8A== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - jackspeak@^2.3.5: version "2.3.6" resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" @@ -580,17 +362,10 @@ jackspeak@^2.3.5: optionalDependencies: "@pkgjs/parseargs" "^0.11.0" -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0": - version "10.0.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a" - integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g== + version "10.1.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484" + integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== lru-cache@^6.0.0: version "6.0.0" @@ -599,20 +374,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" - integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== - dependencies: - semver "^7.5.3" - make-fetch-happen@^13.0.0: version "13.0.0" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz#705d6f6cbd7faecb8eac2432f551e49475bfedf0" @@ -630,13 +391,6 @@ make-fetch-happen@^13.0.0: promise-retry "^2.0.1" ssri "^10.0.0" -minimatch@^3.0.4, minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - minimatch@^9.0.1: version "9.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" @@ -644,12 +398,17 @@ minimatch@^9.0.1: dependencies: brace-expansion "^2.0.1" -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== +minimist@^1.2.5: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass-collect@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863" + integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== dependencies: - minipass "^3.0.0" + minipass "^7.0.3" minipass-fetch@^3.0.0: version "3.0.4" @@ -695,12 +454,7 @@ minipass@^5.0.0: resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.3.tgz#05ea638da44e475037ed94d1c7efcc76a25e1974" - integrity sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg== - -minipass@^7.0.2: +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3: version "7.0.4" resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== @@ -713,6 +467,11 @@ minizlib@^2.1.1, minizlib@^2.1.2: minipass "^3.0.0" yallist "^4.0.0" +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + mkdirp@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" @@ -728,17 +487,22 @@ negotiator@^0.6.3: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== +node-abi@^3.3.0: + version "3.52.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.52.0.tgz#ffba0a85f54e552547e5849015f40f9514d5ba7c" + integrity sha512-JJ98b02z16ILv7859irtXn4oUaFWADtvkzy2c0IAatNVX2Mc9Yoh8z6hZInn3QwvMEYhHuQloYi+TTQy67SIdQ== + dependencies: + semver "^7.3.5" + node-addon-api@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.0.0.tgz#8136add2f510997b3b94814f4af1cce0b0e3962e" integrity sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA== -node-fetch@^2.6.7: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" +node-gyp-build@^4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.7.1.tgz#cd7d2eb48e594874053150a9418ac85af83ca8f7" + integrity sha512-wTSrZ+8lsRRa3I3H8Xr65dLWSgCvY2l4AOnaeKdPA9TB/WYMPaTcrzf3rXvFoVvjKNVnu0CcWSx54qq9GKRUYg== node-gyp@^10.0.1: version "10.0.1" @@ -756,13 +520,6 @@ node-gyp@^10.0.1: tar "^6.1.2" which "^4.0.0" -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - nopt@^7.0.0: version "7.2.0" resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.0.tgz#067378c68116f602f552876194fd11f1292503d7" @@ -770,42 +527,20 @@ nopt@^7.0.0: dependencies: abbrev "^2.0.0" -npmlog@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" - integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== +npm-run-path@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-3.1.0.tgz#7f91be317f6a466efed3c9f2980ad8a4ee8b0fa5" + integrity sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg== dependencies: - are-we-there-yet "^2.0.0" - console-control-strings "^1.1.0" - gauge "^3.0.0" - set-blocking "^2.0.0" - -object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + path-key "^3.0.0" -once@^1.3.0: +once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - p-map@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" @@ -813,17 +548,7 @@ p-map@^4.0.0: dependencies: aggregate-error "^3.0.0" -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.1.0: +path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== @@ -836,10 +561,23 @@ path-scurry@^1.10.1: lru-cache "^9.1.1 || ^10.0.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" -prettier@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.3.tgz#432a51f7ba422d1469096c0fdc28e235db8f9643" - integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg== +prebuildify@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/prebuildify/-/prebuildify-5.0.1.tgz#e10bb6e4986c18909185704c806cc06976c30478" + integrity sha512-vXpKLfIEsDCqMJWVIoSrUUBJQIuAk9uHAkLiGJuTdXdqKSJ10sHmWeuNCDkIoRFTV1BDGYMghHVmDFP8NfkA2Q== + dependencies: + execspawn "^1.0.1" + minimist "^1.2.5" + mkdirp-classic "^0.5.3" + node-abi "^3.3.0" + npm-run-path "^3.1.0" + pump "^3.0.0" + tar-fs "^2.1.0" + +prettier@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.1.1.tgz#6ba9f23165d690b6cbdaa88cb0807278f7019848" + integrity sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw== proc-log@^3.0.0: version "3.0.0" @@ -854,7 +592,15 @@ promise-retry@^2.0.1: err-code "^2.0.2" retry "^0.12.0" -readable-stream@^3.6.0: +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +readable-stream@^3.1.1, readable-stream@^3.4.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -863,23 +609,11 @@ readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -890,23 +624,13 @@ safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -semver@^6.0.0: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.3.5, semver@^7.5.3: +semver@^7.3.5: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -919,11 +643,6 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - signal-exit@^4.0.1: version "4.1.0" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" @@ -958,7 +677,8 @@ ssri@^10.0.0: dependencies: minipass "^7.0.3" -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0: + name string-width-cjs version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -984,6 +704,7 @@ string_decoder@^1.1.1: safe-buffer "~5.2.0" "strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + name strip-ansi-cjs version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -997,17 +718,31 @@ strip-ansi@^7.0.1: dependencies: ansi-regex "^6.0.1" -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== +tar-fs@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== dependencies: - has-flag "^4.0.0" + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" tar@^6.1.11, tar@^6.1.2: - version "6.1.15" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69" - integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A== + version "6.2.0" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" + integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" @@ -1016,24 +751,10 @@ tar@^6.1.11, tar@^6.1.2: mkdirp "^1.0.3" yallist "^4.0.0" -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -typescript@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" - integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== +typescript@^5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" + integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== undici-types@~5.26.4: version "5.26.5" @@ -1059,27 +780,10 @@ util-deprecate@^1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -v8-to-istanbul@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265" - integrity sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.12" - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" +util-extend@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" + integrity sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA== which@^2.0.1: version "2.0.2" @@ -1095,14 +799,7 @@ which@^4.0.0: dependencies: isexe "^3.1.1" -wide-align@^1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -1125,35 +822,7 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^17.7.2: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==