diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 723af3e..37de96c 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -3,14 +3,16 @@ run-name: Node.js โฌข CI on: push: - branches: [develop] + branches: [master] + pull_request: + branches: [master] jobs: build: runs-on: ubuntu-latest strategy: matrix: - node-version: [22.x] + node-version: [24.x] name: Node.js ${{ matrix.node-version }} ๐Ÿš€ steps: @@ -45,6 +47,10 @@ jobs: run: | pnpm install --frozen-lockfile + - name: Typecheck ๐Ÿ”Ž + run: | + pnpm run typecheck + - name: Run tests ๐Ÿงช run: | make test diff --git a/.gitignore b/.gitignore index 371168f..17c7e58 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ .vscode bin node_modules +*.tsbuildinfo diff --git a/.npmrc b/.npmrc index 8e14603..1b78f1c 100644 --- a/.npmrc +++ b/.npmrc @@ -1,3 +1,2 @@ save-exact=true legacy-peer-deps=true -ignore-scripts=true #giflossy, zopflipng diff --git a/.nvmrc b/.nvmrc index 3d3475a..dbf2bf2 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v22.5.1 +v26.8.1 diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 3b3cbb5..0000000 --- a/.prettierignore +++ /dev/null @@ -1,12 +0,0 @@ -!**/.eslintrc* -.gitignore -.hooks/* -.husky/* -*.ico -*.js -*.lock -*.log -*.md -*.svg -dist -node_modules* diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 41d3eeb..0000000 --- a/.prettierrc +++ /dev/null @@ -1,15 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/prettierrc", - "arrowParens": "always", - "bracketSpacing": true, - "bracketSameLine": false, - "printWidth": 100, - "proseWrap": "preserve", - "quoteProps": "as-needed", - "semi": false, - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "all", - "useTabs": false, - "endOfLine": "lf" -} diff --git a/.swcrc b/.swcrc index 3e07533..b7ff707 100644 --- a/.swcrc +++ b/.swcrc @@ -1,5 +1,5 @@ { - "$schema": "https://json.schemastore.org/swcrc", + "$schema": "https://swc.rs/schema.json", "jsc": { "target": "esnext", "parser": { diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..fba8e8b --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,130 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +DVX CLI is a TypeScript-based command-line tool for image processing and asset optimization in frontend development. It provides utilities for image minification, format conversion, resizing, HTML validation, and CSS source map cleaning. + +## Build & Development Commands + +### Building the project + +```bash +pnpm run build +``` + +This compiles TypeScript to JavaScript using SWC, outputs to `bin/` directory, and replaces import paths. + +### Clean build artifacts + +```bash +pnpm run build:clean +``` + +### Typechecking + +```bash +pnpm run typecheck +``` + +SWC does not typecheck during build โ€” run this before committing. CI runs it too. + +### Running tests + +```bash +pnpm run test # Run all tests (unit + features) +pnpm run test:unit # Run only unit tests +make test # Alternative using Makefile +``` + +### Running a single test file + +```bash +node --import @swc-node/register/esm-register --test tests/lib/file.test.ts +``` + +### Code formatting + +```bash +# Project uses Biome for formatting and linting +# Configuration in biome.json +``` + +### Rebuilding native dependencies + +```bash +pnpm run rebuild # Rebuild native image processing binaries +``` + +### Dependency management + +```bash +pnpm run package:update # Update dependencies +make deps/update # Comprehensive dependency update with deduplication +``` + +## Code Architecture + +### Entry Point + +- `src/index.ts` - CLI entry: configures yargs and auto-registers commands via `.commandDir()` +- `bin/index.js` - Built entry point for the CLI binary + +### Command Structure + +Commands are auto-discovered from `src/commands/` (recursively) using the pattern `*.command.ts`. Each command is a module-style yargs command exporting `command`, `description`, `builder`, and `handler`. Handlers must return/await their promise so yargs waits for completion. + +Available command categories: + +- **Images**: `img:minify`, `img:towebp`, `img:resize`, `img:optimize` (all support `--quality high|medium|low`) +- **HTML**: `html:validate` (using HTMLHint) +- **Files**: `files:clean-sourcemaps` + +### Key Directories + +- `src/commands/` - Command implementations organized by category +- `src/shared/domain/` - Pure utilities (file ops, worker runner, quality presets, formatting) +- `src/shared/infrastructure/` - Side-effectful services (logger, notifications, config) +- `tests/` - Test files using Node.js native test runner +- `bin/` - Compiled output directory + +### Architecture Patterns + +- Module-style yargs commands loaded with `.commandDir()` +- Worker-based processing for image operations: helper (`image-minifier.ts`) chunks files per CPU and spawns a `*.job.ts` worker per chunk via `runWorker`; workers post `WorkerResult` (`processed`, `endTime`, optional `bytesIn`/`bytesOut`) +- Quality presets shared across jobs in `src/shared/domain/quality-presets.ts` + +### Testing Structure + +- Uses Node.js native test runner (`node:test`) +- Test files follow `*.test.ts` pattern +- Tests use `node:assert/strict` for assertions +- Test stubs in `tests/stubs/` directory + +## Key Dependencies + +### Runtime + +- `yargs` - CLI argument parsing +- `imagemin` ecosystem - Image optimization +- `sharp` - Image processing fallback +- `htmlhint` - HTML validation + +### Build + +- `@swc/core` - TypeScript compilation +- `@swc/cli` - SWC command-line interface +- `@swc-node/register` - SWC Node.js loader for tests +- `replace-in-file` - Post-build path replacement + +## Development Notes + +- Uses ES modules (`"type": "module"` in package.json) +- Import paths use `#/` prefix that gets replaced during build +- Node.js >=24 required (`engineStrict: true`) +- Package manager: pnpm >=11 +- Build target: ESNext with SWC compiler +- Code formatting with Biome (configuration in biome.json) +- Native dependencies require periodic rebuilding (`pnpm run rebuild`) +- Make targets available for common tasks (test, dependency updates) diff --git a/Makefile b/Makefile index 4390627..5d7eee8 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,4 @@ +SHELL:=$(shell which bash) MAKEFLAGS += -s current_work_directory := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) @@ -23,11 +24,31 @@ help: ## ๐Ÿ“‹ Display help message with descriptions of all available commands. .PHONY: deps/update .SILENT: deps/update deps/update: ## โฌ†๏ธ Update all project dependencies to their latest versions. - $(print_message) "updating dependencies" - ncu -u && ncu --target minor -u && ncu --target patch -u - corepack up - NODE_ENV= pnpm install - NODE_ENV= pnpm audit --fix + set -eo pipefail + $(print_message) "bump dependencies" + PNPM_QUIET_FLAGS="--config.loglevel=error" + NODE_ENV= pnpm audit || true + find . -type d -name node_modules -not -path '*/.git/*' -prune -exec rm -rf '{}' + + rm -f pnpm-lock.yaml + CI=true corepack use pnpm@latest-11 + if command -v ncu &>/dev/null; then + NCU_CMD=ncu + elif [ -f ./node_modules/.bin/ncu ]; then + NCU_CMD=./node_modules/.bin/ncu + else + echo "ncu (npm-check-updates) not found. Install with one of:" + echo " npm i -g npm-check-updates" + echo " pnpm add -g npm-check-updates" + echo " pnpm add -O npm-check-updates # optional/local" + exit 1 + fi + $$NCU_CMD --target patch -u && $$NCU_CMD --target minor -u && $$NCU_CMD -u + NODE_ENV= pnpm install --no-frozen-lockfile $$PNPM_QUIET_FLAGS + NODE_ENV= pnpm up --recursive $$PNPM_QUIET_FLAGS + NODE_ENV= pnpm audit --fix=update $$PNPM_QUIET_FLAGS + NODE_ENV= pnpm dedupe $$PNPM_QUIET_FLAGS + NODE_ENV= pnpm rebuild @swc-node/register @swc/cli @swc/core sharp + NODE_ENV= pnpm audit --ignore-unfixable .PHONY: test .SILENT: test diff --git a/NOTES.md b/NOTES.md index ee626f0..4cdddda 100644 --- a/NOTES.md +++ b/NOTES.md @@ -270,3 +270,15 @@ https://nodejs.org/api/process.html#processargv0 node ~/src/github.com/devlegacy/dvx-cli html:validate @squoosh/lib imagemin-svgo + +bun pm untrusted +bun pm trust + +pnpm approve-builds + +img:minify open TODOs: + +- Skip unchanged files โ€” no mtime/hash check; reruns on already-optimized images +- Progress indicator โ€” large batches (24+ files) have no ETA or count +- Results table โ€” before/after per-file KB would help identify worst offenders +- exclude only filters the resizer โ€” minifier still processes excluded patterns (inconsistent with docs) diff --git a/README.md b/README.md index 23fff4d..718f5d5 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,15 @@

๐Ÿ“ฆ Install

+### macOS prerequisites + +Some optimizers build native binaries from source and need these libraries: + +```sh +brew install libpng libimagequant +brew link libpng +``` + ### Global installation To install the CLI tool globally, run the following command: diff --git a/biome.json b/biome.json new file mode 100644 index 0000000..0dbd51a --- /dev/null +++ b/biome.json @@ -0,0 +1,40 @@ +{ + "$schema": "https://biomejs.dev/schemas/latest/schema.json", + "formatter": { + "enabled": true, + "indentStyle": "space", + "lineEnding": "lf", + "indentWidth": 2, + "lineWidth": 120 + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true + } + }, + "assist": { + "enabled": true, + "actions": { + "source": { + "organizeImports": "on" + } + } + }, + "files": { + "ignoreUnknown": false + }, + "vcs": { + "enabled": true, + "clientKind": "git", + "useIgnoreFile": true + }, + "javascript": { + "formatter": { + "quoteStyle": "single", + "semicolons": "asNeeded", + "trailingCommas": "all", + "expand": "always" + } + } +} diff --git a/package.json b/package.json index f7a66fc..4627fdb 100644 --- a/package.json +++ b/package.json @@ -8,16 +8,18 @@ "dvx": "bin/index.js" }, "imports": { - "#@/*": "./*" + "#/*": "./*" }, "type": "module", + "packageManager": "pnpm@12.2.1", "scripts": { "prebuild": "node --run build:clean", - "build": "swc ./src/ --out-dir ./bin/ --strip-leading-paths && replace-in-file \"/#@/src//g\" \"#@/bin/\" \"./bin/**/*.js\" --isRegex", + "build": "swc ./src/ --out-dir ./bin/ --strip-leading-paths && replace-in-file \"/#/src//g\" \"#/bin/\" \"./bin/**/*.js\" --isRegex && chmod +x ./bin/*", "build:clean": "rm -Rf ./bin", "test": "pnpm run test:unit && pnpm run test:features", "test:features": "true", "test:unit": "node --import @swc-node/register/esm-register --test ./tests/**/*.test.ts", + "typecheck": "tsc --noEmit", "package:update": "ncu -u && pnpm i && pnpm audit --fix" }, "keywords": [ @@ -32,50 +34,46 @@ "assets/icons", "README.md" ], - "author": "Samuel R. ", + "author": "Samuel R. ", "private": false, "devDependencies": { - "@swc-node/register": "1.10.9", - "@swc/cli": "0.4.0", - "@swc/core": "1.7.5", + "@swc-node/register": "1.12.1", + "@swc/cli": "0.8.1", + "@swc/core": "1.16.1", "@types/htmlhint": "1.1.5", - "@types/imagemin": "9.0.0", + "@types/imagemin": "9.0.1", + "@types/imagemin-gifsicle": "7.0.4", "@types/imagemin-jpegtran": "5.0.4", "@types/imagemin-mozjpeg": "8.0.4", - "@types/imagemin-svgo": "10.0.5", + "@types/imagemin-svgo": "11.0.0", "@types/imagemin-zopfli": "7.0.4", - "@types/node": "22.1.0", - "@types/node-notifier": "8.0.5", - "@types/shelljs": "0.8.15", - "@types/yargs": "17.0.32", - "replace-in-file": "8.1.0", - "ts-node": "10.9.2", - "type-fest": "4.23.0", - "typescript": "5.5.4" + "@types/node": "26.4.0", + "@types/yargs": "17.0.35", + "replace-in-file": "9.0.0", + "type-fest": "5.9.0", + "@typescript/native": "npm:typescript@7.0.2", + "typescript": "npm:@typescript/typescript6@6.0.2" }, "dependencies": { - "htmlhint": "1.1.4", + "htmlhint": "1.9.2", "htmlhint-stylish": "1.0.3", - "imagemin": "9.0.0", - "imagemin-giflossy": "5.1.10", - "imagemin-jpegtran": "7.0.0", + "imagemin": "9.0.1", + "imagemin-gifsicle": "7.0.0", + "imagemin-jpegtran": "8.0.0", "imagemin-mozjpeg": "10.0.0", "imagemin-pngquant": "10.0.0", - "imagemin-webp": "8.0.0", + "imagemin-svgo": "12.0.0", "imagemin-zopfli": "7.0.0", - "is-svg": "5.0.1", - "node-notifier": "10.0.1", - "sharp": "0.33.4", - "shelljs": "0.8.5", - "svgo": "3.3.2", - "yargs": "17.7.2" + "pino": "10.3.1", + "pino-pretty": "13.1.3", + "sharp": "0.35.4", + "yargs": "18.1.0" }, "engines": { - "node": ">=22.5.1", - "npm": ">=10.8.2", - "pnpm": ">=9.6.0" + "node": ">=v24", + "npm": ">=11", + "pnpm": ">=11" }, - "engineStrict": true, "repository": { "type": "git", "url": "git+https://github.com/devlegacy/dvx-cli.git" @@ -83,20 +81,5 @@ "bugs": { "url": "https://github.com/devlegacy/dvx-cli/issues" }, - "homepage": "https://github.com/devlegacy/dvx-cli#readme", - "packageManager": "pnpm@9.6.0+sha512.38dc6fba8dba35b39340b9700112c2fe1e12f10b17134715a4aa98ccf7bb035e76fd981cf0bb384dfa98f8d6af5481c2bef2f4266a24bfa20c34eb7147ce0b5e", - "pnpm": { - "overrides": { - "braces@<2.3.1": ">=2.3.1", - "tunnel-agent@<0.6.0": ">=0.6.0", - "got@<11.8.5": ">=11.8.5", - "decompress@<4.2.1": ">=4.2.1", - "http-cache-semantics@<4.1.1": ">=4.1.1", - "semver-regex@<3.1.3": ">=3.1.3", - "semver-regex@<3.1.4": ">=3.1.4", - "trim-newlines@<3.0.1": ">=3.0.1", - "semver@<5.7.2": ">=5.7.2", - "braces@<3.0.3": ">=3.0.3" - } - } + "homepage": "https://github.com/devlegacy/dvx-cli#readme" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 79149c5..25af380 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,3 +1,104 @@ +--- +lockfileVersion: '9.0' + +importers: + + .: + configDependencies: {} + packageManagerDependencies: + pnpm: + specifier: 12.2.1 + version: 12.2.1 + +packages: + + '@pnpm/exe.darwin-arm64@12.2.1': + resolution: {integrity: sha512-efC1yfz2xbyHiMLrQAYtnoo5XP20LeAiYYcyL1962qQagZrMXIB0BoQYeZoPTLggLh0Q4MD7jpZUInU5fWxCgQ==} + cpu: [arm64] + os: [darwin] + + '@pnpm/exe.darwin-x64@12.2.1': + resolution: {integrity: sha512-0bloFmxrvYY5LYex5V6SZySwg+egBk0pOW+YUeOm9fiG2U1wv+qRVLBOUvIzLAeJE7vBlAzxUwXkQAYtr12n+Q==} + cpu: [x64] + os: [darwin] + + '@pnpm/exe.linux-arm64-musl@12.2.1': + resolution: {integrity: sha512-AZl7apVZC4TV1/vTp/bS16XUsHeqx9AHsU4V55joiGR+iR6vl+WF0WlGvGCTjqjICS4q/kThpgNrtG8aqQ9seQ==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@pnpm/exe.linux-arm64@12.2.1': + resolution: {integrity: sha512-S36+tMEGrPz3nwtfFU9kYxbHoi8sV7WJfMO9njEL4jRaShTNaLRERMAqyI2DUCiA5QCr6/a50lt4+pKCV2mCvw==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@pnpm/exe.linux-x64-musl@12.2.1': + resolution: {integrity: sha512-4MQClkAk1em55LFZJpeIqb7j+gEqCgX8yC42j9DFWL42q1uMX1e1tvTy2Dtd4NoWQqgdkLxOStZ+D9CYC+28ow==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@pnpm/exe.linux-x64@12.2.1': + resolution: {integrity: sha512-A/AlR71Leph7qgB3ThSU9yU/vLfre4HmP6nbt3/qt51fzAjQ0xuq7j+cw0f1yDskzOsGzmo5uD6ruefCwLK5uQ==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@pnpm/exe.win32-arm64@12.2.1': + resolution: {integrity: sha512-TEGUmroT6NGfo2O2+tHK9Zr1lhP1zLzpwx+QAQV19l8V4ljUoMfz8Os5V9zzNCtIpzyKcK7SuG7fkVbxFgRMzg==} + cpu: [arm64] + os: [win32] + + '@pnpm/exe.win32-x64@12.2.1': + resolution: {integrity: sha512-V2Q+AF8fCsw8/CC3bWF8kopOmH0aAjgk9m7H7uAQNulOYIJs9YJBiAlgByswmt+igV9axc4dBI//ZlK2NKpDcw==} + cpu: [x64] + os: [win32] + + pnpm@12.2.1: + resolution: {integrity: sha512-9Vymiqy561q2nGb4KKmK+JoyKGcDrvH42hMcp+q01nfzS/qF4YZGepGcB5nfi29KokD33CkZszsycxkBBBYmFg==} + engines: {node: '>=18.*'} + hasBin: true + +snapshots: + + '@pnpm/exe.darwin-arm64@12.2.1': + optional: true + + '@pnpm/exe.darwin-x64@12.2.1': + optional: true + + '@pnpm/exe.linux-arm64-musl@12.2.1': + optional: true + + '@pnpm/exe.linux-arm64@12.2.1': + optional: true + + '@pnpm/exe.linux-x64-musl@12.2.1': + optional: true + + '@pnpm/exe.linux-x64@12.2.1': + optional: true + + '@pnpm/exe.win32-arm64@12.2.1': + optional: true + + '@pnpm/exe.win32-x64@12.2.1': + optional: true + + pnpm@12.2.1: + optionalDependencies: + '@pnpm/exe.darwin-arm64': 12.2.1 + '@pnpm/exe.darwin-x64': 12.2.1 + '@pnpm/exe.linux-arm64': 12.2.1 + '@pnpm/exe.linux-arm64-musl': 12.2.1 + '@pnpm/exe.linux-x64': 12.2.1 + '@pnpm/exe.linux-x64-musl': 12.2.1 + '@pnpm/exe.win32-arm64': 12.2.1 + '@pnpm/exe.win32-x64': 12.2.1 + +--- lockfileVersion: '9.0' settings: @@ -6,81 +107,84 @@ settings: overrides: braces@<2.3.1: '>=2.3.1' - tunnel-agent@<0.6.0: '>=0.6.0' - got@<11.8.5: '>=11.8.5' + braces@<3.0.3: '>=3.0.3' + cross-spawn@<6.0.6: '>=6.0.6' decompress@<4.2.1: '>=4.2.1' + file-type@>=13.0.0 <21.3.1: '>=21.3.1' + got@<11.8.5: '>=11.8.5' + download>got: 7.1.0 http-cache-semantics@<4.1.1: '>=4.1.1' + micromatch@<4.0.8: '>=4.0.8' semver-regex@<3.1.3: '>=3.1.3' semver-regex@<3.1.4: '>=3.1.4' + semver@>=2.0.0-alpha <5.7.2: '>=5.7.2' trim-newlines@<3.0.1: '>=3.0.1' - semver@<5.7.2: '>=5.7.2' - braces@<3.0.3: '>=3.0.3' + tunnel-agent@<0.6.0: '>=0.6.0' + uuid@<14.0.0: '>=14.0.0' + web-worker: '>=1.5.0' importers: .: dependencies: htmlhint: - specifier: 1.1.4 - version: 1.1.4 + specifier: 1.9.2 + version: 1.9.2 htmlhint-stylish: specifier: 1.0.3 version: 1.0.3 imagemin: - specifier: 9.0.0 - version: 9.0.0 - imagemin-giflossy: - specifier: 5.1.10 - version: 5.1.10 - imagemin-jpegtran: + specifier: 9.0.1 + version: 9.0.1(supports-color@7.2.0) + imagemin-gifsicle: specifier: 7.0.0 version: 7.0.0 + imagemin-jpegtran: + specifier: 8.0.0 + version: 8.0.0(supports-color@7.2.0) imagemin-mozjpeg: specifier: 10.0.0 version: 10.0.0 imagemin-pngquant: specifier: 10.0.0 version: 10.0.0 - imagemin-webp: - specifier: 8.0.0 - version: 8.0.0 + imagemin-svgo: + specifier: 12.0.0 + version: 12.0.0 imagemin-zopfli: specifier: 7.0.0 version: 7.0.0 - is-svg: - specifier: 5.0.1 - version: 5.0.1 - node-notifier: - specifier: 10.0.1 - version: 10.0.1 + pino: + specifier: 10.3.1 + version: 10.3.1 + pino-pretty: + specifier: 13.1.3 + version: 13.1.3 sharp: - specifier: 0.33.4 - version: 0.33.4 - shelljs: - specifier: 0.8.5 - version: 0.8.5 - svgo: - specifier: 3.3.2 - version: 3.3.2 + specifier: 0.35.4 + version: 0.35.4(@types/node@26.4.0) yargs: - specifier: 17.7.2 - version: 17.7.2 + specifier: 18.1.0 + version: 18.1.0 devDependencies: '@swc-node/register': - specifier: 1.10.9 - version: 1.10.9(@swc/core@1.7.5)(@swc/types@0.1.12)(typescript@5.5.4) + specifier: 1.12.1 + version: 1.12.1(@swc/core@1.16.1)(@swc/types@0.1.28)(@typescript/typescript6@6.0.2)(supports-color@7.2.0) '@swc/cli': - specifier: 0.4.0 - version: 0.4.0(@swc/core@1.7.5) + specifier: 0.8.1 + version: 0.8.1(@swc/core@1.16.1)(supports-color@7.2.0) '@swc/core': - specifier: 1.7.5 - version: 1.7.5 + specifier: 1.16.1 + version: 1.16.1 '@types/htmlhint': specifier: 1.1.5 version: 1.1.5 '@types/imagemin': - specifier: 9.0.0 - version: 9.0.0 + specifier: 9.0.1 + version: 9.0.1 + '@types/imagemin-gifsicle': + specifier: 7.0.4 + version: 7.0.4 '@types/imagemin-jpegtran': specifier: 5.0.4 version: 5.0.4 @@ -88,184 +192,420 @@ importers: specifier: 8.0.4 version: 8.0.4 '@types/imagemin-svgo': - specifier: 10.0.5 - version: 10.0.5 + specifier: 11.0.0 + version: 11.0.0 '@types/imagemin-zopfli': specifier: 7.0.4 version: 7.0.4 '@types/node': - specifier: 22.1.0 - version: 22.1.0 - '@types/node-notifier': - specifier: 8.0.5 - version: 8.0.5 - '@types/shelljs': - specifier: 0.8.15 - version: 0.8.15 + specifier: 26.4.0 + version: 26.4.0 '@types/yargs': - specifier: 17.0.32 - version: 17.0.32 + specifier: 17.0.35 + version: 17.0.35 + '@typescript/native': + specifier: npm:typescript@7.0.2 + version: typescript@7.0.2 replace-in-file: - specifier: 8.1.0 - version: 8.1.0 - ts-node: - specifier: 10.9.2 - version: 10.9.2(@swc/core@1.7.5)(@types/node@22.1.0)(typescript@5.5.4) + specifier: 9.0.0 + version: 9.0.0 type-fest: - specifier: 4.23.0 - version: 4.23.0 + specifier: 5.9.0 + version: 5.9.0 typescript: - specifier: 5.5.4 - version: 5.5.4 + specifier: npm:@typescript/typescript6@6.0.2 + version: '@typescript/typescript6@6.0.2' packages: - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} + '@borewit/text-codec@0.2.2': + resolution: {integrity: sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==} + + '@emnapi/core@1.11.2': + resolution: {integrity: sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA==} + + '@emnapi/runtime@1.11.2': + resolution: {integrity: sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==} + + '@emnapi/runtime@1.11.3': + resolution: {integrity: sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==} - '@emnapi/core@1.2.0': - resolution: {integrity: sha512-E7Vgw78I93we4ZWdYCb4DGAwRROGkMIXk7/y87UmANR+J6qsWusmC3gLt0H+O0KOt5e6O38U8oJamgbudrES/w==} + '@emnapi/wasi-threads@1.2.2': + resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} - '@emnapi/runtime@1.2.0': - resolution: {integrity: sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==} + '@file-type/xml@0.4.4': + resolution: {integrity: sha512-NhCyXoHlVZ8TqM476hyzwGJ24+D5IPSaZhmrPj7qXnEVb3q6jrFzA3mM9TBpknKSI9EuQeGTKRg2DXGUwvBBoQ==} - '@emnapi/wasi-threads@1.0.1': - resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + engines: {node: '>=18'} - '@img/sharp-darwin-arm64@0.33.4': - resolution: {integrity: sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==} - engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-darwin-arm64@0.35.4': + resolution: {integrity: sha512-Uhfl4V4lhP2nbUVF9+hyH1+luj86f1gUFeo8ALYxFoULoU+G87D43BfeMP8XHsk9boxAnCY/bf2EHwhA7MuGsA==} + engines: {node: '>=20.9.0'} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.33.4': - resolution: {integrity: sha512-0l7yRObwtTi82Z6ebVI2PnHT8EB2NxBgpK2MiKJZJ7cz32R4lxd001ecMhzzsZig3Yv9oclvqqdV93jo9hy+Dw==} - engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-darwin-x64@0.35.4': + resolution: {integrity: sha512-hWniXY3bG5qKpkKrAwPe4y+VTPmf086YQAnkxWh7uA1YrlRouWGa0M0Mxj3ZjnXFkv7/TD1bTy9lGUK26vRvWw==} + engines: {node: '>=20.9.0'} cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.0.2': - resolution: {integrity: sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==} - engines: {macos: '>=11', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-freebsd-wasm32@0.35.4': + resolution: {integrity: sha512-lIsKw/BU+kjB4eZjxrYrZmwOJYi3Ajrv66iAlBmUPyKc3HpnloevB1g3wxGD9P/5BbQ1brBGl65VRRrCvQDEqA==} + engines: {node: '>=20.9.0'} + os: [freebsd] + + '@img/sharp-libvips-darwin-arm64@1.3.3': + resolution: {integrity: sha512-suTBPTDGrI9WodccaDdwZItTSaBYASlBk1NSfElSHrUfzu3szG6lvIF58+WiFvnfzuK8ZBFS5zE00PxqxnRiPg==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.0.2': - resolution: {integrity: sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==} - engines: {macos: '>=10.13', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-darwin-x64@1.3.3': + resolution: {integrity: sha512-FVJZ5mITMobmXIz/hPDTw0EintTW5H3WfrxwLqEqjiIihlu+hVRyGrFQ60xl0Lxn7Bt3zdpevPaQi0HEzqz9fw==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.0.2': - resolution: {integrity: sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==} - engines: {glibc: '>=2.26', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-linux-arm64@1.3.3': + resolution: {integrity: sha512-0DaL0A6Xu6sQSQFwe4iVCrKWU2cCTItnRsYsCdxAMm9NF6twAA9BKnoqy4hqz4+azQ0JHuA26qiUKsf1XJ/v5A==} cpu: [arm64] os: [linux] + libc: [glibc] - '@img/sharp-libvips-linux-arm@1.0.2': - resolution: {integrity: sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==} - engines: {glibc: '>=2.28', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-linux-arm@1.3.3': + resolution: {integrity: sha512-3rbU4vqXXc3hY/OiXdl52xZvT0F1yEngWfvqudtPJg/KkyiaQw2DRsFrNzpmLvfavbwOq3qXn36GP8obHRULQA==} cpu: [arm] os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-ppc64@1.3.3': + resolution: {integrity: sha512-cdn1OvUBwsXhbC0zSzJnNzf5MZ/mTrobawDvNXBTxe8VtqKAm0sRuEY2Evzovb/w9JMk4TvRxqt1mekSuJz64w==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-riscv64@1.3.3': + resolution: {integrity: sha512-HjPVx7yKz+0lqdhDlTw1tt90wamBoxhiXpvl1XZpJLiHH4RCJ5yDTqH+VlYPv2fwFs89JFw4c1IexYOcQUi4IQ==} + cpu: [riscv64] + os: [linux] + libc: [glibc] - '@img/sharp-libvips-linux-s390x@1.0.2': - resolution: {integrity: sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==} - engines: {glibc: '>=2.28', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-linux-s390x@1.3.3': + resolution: {integrity: sha512-neWLh+3yCNThxnfy3c4BbVBeGgt9aftno+XbT56iK28RgeDs3UOFWviLWlUu0bArYVYJaFDK+RRohbicUNCm8Q==} cpu: [s390x] os: [linux] + libc: [glibc] - '@img/sharp-libvips-linux-x64@1.0.2': - resolution: {integrity: sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==} - engines: {glibc: '>=2.26', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-linux-x64@1.3.3': + resolution: {integrity: sha512-4vKmvAst9nrowcqquKFAyZJUDolUaIp8uRiN0mWFguJ1IplC9/pitXtlnnlU4aa/eJw3J7i67V+pwUL+wZGdsA==} cpu: [x64] os: [linux] + libc: [glibc] - '@img/sharp-libvips-linuxmusl-arm64@1.0.2': - resolution: {integrity: sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==} - engines: {musl: '>=1.2.2', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-linuxmusl-arm64@1.3.3': + resolution: {integrity: sha512-Y9kQaLMuNoB0bPYOOdcZMaseNrFpPodIWWMrx+CZyydf2xn68j9WYc6sWWRrDwNkzCQjKYfc68L7jKjGlHMibw==} cpu: [arm64] os: [linux] + libc: [musl] - '@img/sharp-libvips-linuxmusl-x64@1.0.2': - resolution: {integrity: sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==} - engines: {musl: '>=1.2.2', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-libvips-linuxmusl-x64@1.3.3': + resolution: {integrity: sha512-fj8Mv0HHfD1Rr+4I68+3agJynxDWtBFgicTbSOb9Bke6pIwzGcJ+RX/yHjmiEGFMCavY/dxvem7MyNaJF+wDiw==} cpu: [x64] os: [linux] + libc: [musl] - '@img/sharp-linux-arm64@0.33.4': - resolution: {integrity: sha512-2800clwVg1ZQtxwSoTlHvtm9ObgAax7V6MTAB/hDT945Tfyy3hVkmiHpeLPCKYqYR1Gcmv1uDZ3a4OFwkdBL7Q==} - engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-linux-arm64@0.35.4': + resolution: {integrity: sha512-De4jpEnAU8Hd5oT0j1G3uL4ZvTuipVMn7YC6vPaJhy6/7EwEae0SVAoBrUMYQbkLGDm85taVWwuPc1a44LTzCQ==} + engines: {node: '>=20.9.0'} cpu: [arm64] os: [linux] + libc: [glibc] - '@img/sharp-linux-arm@0.33.4': - resolution: {integrity: sha512-RUgBD1c0+gCYZGCCe6mMdTiOFS0Zc/XrN0fYd6hISIKcDUbAW5NtSQW9g/powkrXYm6Vzwd6y+fqmExDuCdHNQ==} - engines: {glibc: '>=2.28', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-linux-arm@0.35.4': + resolution: {integrity: sha512-7OAS8gI0EReKGVN2HssHlM6umJgxF5VI3xN0p9FA91p/YO+ou5hiNghLdZ5BEHztwaaK5+bLKRf8x/o2L2nk9A==} + engines: {node: '>=20.9.0'} cpu: [arm] os: [linux] + libc: [glibc] - '@img/sharp-linux-s390x@0.33.4': - resolution: {integrity: sha512-h3RAL3siQoyzSoH36tUeS0PDmb5wINKGYzcLB5C6DIiAn2F3udeFAum+gj8IbA/82+8RGCTn7XW8WTFnqag4tQ==} - engines: {glibc: '>=2.31', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-linux-ppc64@0.35.4': + resolution: {integrity: sha512-2oYZJeIl4kCcMGk4ouZVjnkCtFrpQFlNEtJ6GbxzhHQchwH0NH/qEb9ykmOl29dqwMq+JhFdZn+1ak2FKhI9fQ==} + engines: {node: '>=20.9.0'} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-riscv64@0.35.4': + resolution: {integrity: sha512-cPbNChoRURAWdebDIHSenxRpgEdy7JkPydSnUxRm9VvKD7m0/xVaR/8Fzlu81pk5nHEvHH87UZUA7cTtwnbJSA==} + engines: {node: '>=20.9.0'} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-s390x@0.35.4': + resolution: {integrity: sha512-RY0JFY8Fd6RonCBtHz+DvadaPkXDSI1AUn6yWL9TipqkZ1vY8w8evqdgyDFnkm4/K1ve1TvZiaePP5oSd4+WVQ==} + engines: {node: '>=20.9.0'} cpu: [s390x] os: [linux] + libc: [glibc] - '@img/sharp-linux-x64@0.33.4': - resolution: {integrity: sha512-GoR++s0XW9DGVi8SUGQ/U4AeIzLdNjHka6jidVwapQ/JebGVQIpi52OdyxCNVRE++n1FCLzjDovJNozif7w/Aw==} - engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-linux-x64@0.35.4': + resolution: {integrity: sha512-9qvvEAuk8k89TfWUoX2htWjbAMX8p+NxCppjpcg5k6xMsjhBQPTsoIh36h9Qde4WRuGpJeYnOjdosDn/cnv+OA==} + engines: {node: '>=20.9.0'} cpu: [x64] os: [linux] + libc: [glibc] - '@img/sharp-linuxmusl-arm64@0.33.4': - resolution: {integrity: sha512-nhr1yC3BlVrKDTl6cO12gTpXMl4ITBUZieehFvMntlCXFzH2bvKG76tBL2Y/OqhupZt81pR7R+Q5YhJxW0rGgQ==} - engines: {musl: '>=1.2.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-linuxmusl-arm64@0.35.4': + resolution: {integrity: sha512-KB5jxpfWQTr0nc3xdHtWChdbifHrBGsd2SM62Eyxrl8afikm+f5qGBU75SJIZBT/S1MC8XyacdlXBMSWq6OURA==} + engines: {node: '>=20.9.0'} cpu: [arm64] os: [linux] + libc: [musl] - '@img/sharp-linuxmusl-x64@0.33.4': - resolution: {integrity: sha512-uCPTku0zwqDmZEOi4ILyGdmW76tH7dm8kKlOIV1XC5cLyJ71ENAAqarOHQh0RLfpIpbV5KOpXzdU6XkJtS0daw==} - engines: {musl: '>=1.2.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-linuxmusl-x64@0.35.4': + resolution: {integrity: sha512-f+eZJZIQNEEd26RPSW+76chwOf1XtA2Y/O+5ocVyLliHkeih3e+jhLVBdNTd2rS3IbNXK8+ug93Vf5ZXtF5Lxg==} + engines: {node: '>=20.9.0'} cpu: [x64] os: [linux] + libc: [musl] + + '@img/sharp-wasm32@0.35.4': + resolution: {integrity: sha512-zQnl4Kwp7Q6NHsENtU2T/00Zi+w3AQNwz3+UaTyVBy2FpXrzXzGjndpK61onhZjRtRpQXxCTeqw19bVyXOh7jA==} + engines: {node: '>=20.9.0'} - '@img/sharp-wasm32@0.33.4': - resolution: {integrity: sha512-Bmmauh4sXUsUqkleQahpdNXKvo+wa1V9KhT2pDA4VJGKwnKMJXiSTGphn0gnJrlooda0QxCtXc6RX1XAU6hMnQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-webcontainers-wasm32@0.35.4': + resolution: {integrity: sha512-ESfNkywmCfPNyaZjxooddJQiQ+l/nTpGEOGthxiLnIHXC/CmcBixnfwUleX9mCz9ovrUUvKMap/pm8RYbzfwaA==} + engines: {node: '>=20.9.0'} cpu: [wasm32] - '@img/sharp-win32-ia32@0.33.4': - resolution: {integrity: sha512-99SJ91XzUhYHbx7uhK3+9Lf7+LjwMGQZMDlO/E/YVJ7Nc3lyDFZPGhjwiYdctoH2BOzW9+TnfqcaMKt0jHLdqw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-win32-arm64@0.35.4': + resolution: {integrity: sha512-iNdlBX9gLVvqe2I3uIJSIKTq6wckP/DYxZtcqxm09x5Gi24DnFBmPAWZmr60ZyYMG0xlzo6goG3670ar+RXvRw==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.35.4': + resolution: {integrity: sha512-kqRsbaa5CS6KHlpxnN7WhE6vAAugXyZButpRdvDWetlv6Qv4N9WTcrWzF7tXfB9T7MsoadqdI8hmwLq6UlLvtw==} + engines: {node: ^20.9.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.33.4': - resolution: {integrity: sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} + '@img/sharp-win32-x64@0.35.4': + resolution: {integrity: sha512-XtmnYhBcrORsJ4XJngyzr/EWP0hRZLAZRFaApdKuviyqF78+ylxh2y06ZmtULAMOnObJ3ucpN0AcwSWnMowTRg==} + engines: {node: '>=20.9.0'} cpu: [x64] os: [win32] - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} + '@keyv/serialize@1.1.1': + resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} + '@napi-rs/nice-android-arm-eabi@1.1.1': + resolution: {integrity: sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@napi-rs/nice-android-arm64@1.1.1': + resolution: {integrity: sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] - '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@napi-rs/nice-darwin-arm64@1.1.1': + resolution: {integrity: sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] - '@mole-inc/bin-wrapper@8.0.1': - resolution: {integrity: sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + '@napi-rs/nice-darwin-x64@1.1.1': + resolution: {integrity: sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@napi-rs/nice-freebsd-x64@1.1.1': + resolution: {integrity: sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] - '@napi-rs/wasm-runtime@0.2.4': - resolution: {integrity: sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==} + '@napi-rs/nice-linux-arm-gnueabihf@1.1.1': + resolution: {integrity: sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@napi-rs/nice-linux-arm64-gnu@1.1.1': + resolution: {integrity: sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@napi-rs/nice-linux-arm64-musl@1.1.1': + resolution: {integrity: sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@napi-rs/nice-linux-ppc64-gnu@1.1.1': + resolution: {integrity: sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==} + engines: {node: '>= 10'} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@napi-rs/nice-linux-riscv64-gnu@1.1.1': + resolution: {integrity: sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==} + engines: {node: '>= 10'} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@napi-rs/nice-linux-s390x-gnu@1.1.1': + resolution: {integrity: sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==} + engines: {node: '>= 10'} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@napi-rs/nice-linux-x64-gnu@1.1.1': + resolution: {integrity: sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@napi-rs/nice-linux-x64-musl@1.1.1': + resolution: {integrity: sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@napi-rs/nice-openharmony-arm64@1.1.1': + resolution: {integrity: sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [openharmony] + + '@napi-rs/nice-win32-arm64-msvc@1.1.1': + resolution: {integrity: sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@napi-rs/nice-win32-ia32-msvc@1.1.1': + resolution: {integrity: sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@napi-rs/nice-win32-x64-msvc@1.1.1': + resolution: {integrity: sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@napi-rs/nice@1.1.1': + resolution: {integrity: sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==} + engines: {node: '>= 10'} + + '@napi-rs/wasm-runtime@1.2.3': + resolution: {integrity: sha512-UMduMbqO5s5zF2NkNacMT/yK5Y5QiKvWr2+50bzIIxFDwVJ2h49b+oyjaCGPhJxd2/gC2x39EHv/gHVuu36x2Q==} + engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0} + peerDependencies: + '@emnapi/core': ^1.7.1 || ^2.0.0-alpha.4 + '@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.4 + + '@node-rs/xxhash-android-arm-eabi@1.7.7': + resolution: {integrity: sha512-9uOAXzMmayilkSmoSgrtZDKG2a4E8I0f58Ydm0/us2ubfUGqBr6AjaxzRjipuDBGeNZYYQP1wmoUzLAmuUajIQ==} + engines: {node: '>= 12'} + cpu: [arm] + os: [android] + + '@node-rs/xxhash-android-arm64@1.7.7': + resolution: {integrity: sha512-NDqhut7aniQegfLEYBDxmhI5gFHcDur3D9G7E724SzF3aPw0lTAN9cLixd/Cs+BJRwq3oziOdGtYW9j0xM/B0Q==} + engines: {node: '>= 12'} + cpu: [arm64] + os: [android] + + '@node-rs/xxhash-darwin-arm64@1.7.7': + resolution: {integrity: sha512-uwrEQELN50J2leUNBTir50nRxJJT3Dts3WDnvEij+MMJco++uI2dXoHbwP/UoavGuyoPtngrWxKP8XS9/mLvOA==} + engines: {node: '>= 12'} + cpu: [arm64] + os: [darwin] + + '@node-rs/xxhash-darwin-x64@1.7.7': + resolution: {integrity: sha512-y7AUeH573Ks5BDaJtmyvPxHhPDGedwZnU/hqFbS/DLUqpYGxXLwYkV5iSBtEfFnYyyae1MVjUBqSaCXB6wuLDg==} + engines: {node: '>= 12'} + cpu: [x64] + os: [darwin] + + '@node-rs/xxhash-freebsd-x64@1.7.7': + resolution: {integrity: sha512-4kOYAbnPcFgcpOVQvthha09hjlmswIsfcZWm8uTZC1sau3tdynyyQy1/OcOG03EdP1W0qHOC3ORfUTS9oxbI9A==} + engines: {node: '>= 12'} + cpu: [x64] + os: [freebsd] + + '@node-rs/xxhash-linux-arm-gnueabihf@1.7.7': + resolution: {integrity: sha512-zO9DsqETMS+8/UarCugj1NW+PcD4haFfYQuVXFaPTskgtocvFY8nYY0N59YZukBWlSGh3xBtXPMVd39zeRiNKg==} + engines: {node: '>= 12'} + cpu: [arm] + os: [linux] + + '@node-rs/xxhash-linux-arm64-gnu@1.7.7': + resolution: {integrity: sha512-48kFnEIy8w1R8pGKblG+em6Q7YuDRWcLsSRpFCIrbpsA6aAQdvZnMXiyx+HSq5gEWwM35Hrb30L1sStUSetFmw==} + engines: {node: '>= 12'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@node-rs/xxhash-linux-arm64-musl@1.7.7': + resolution: {integrity: sha512-m1Wz3ySODY7XZixTgLn9n59tUVSTmhO4iwcTLX5lRNnJaCOiWywsySPPbo3++oebSGTwAdJEmPJq5BLPSEZGGQ==} + engines: {node: '>= 12'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@node-rs/xxhash-linux-x64-gnu@1.7.7': + resolution: {integrity: sha512-rdLsrNjOUbOCdsdZZqfqeE24y/yeSR8c11w5Xkwj/Qkrcpaq3qB5f3aIW+6WuQJjdBsJwOxHCspSuUiaY6Xx4g==} + engines: {node: '>= 12'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@node-rs/xxhash-linux-x64-musl@1.7.7': + resolution: {integrity: sha512-1LmaKDAIoqZcSQJG22cZMH9aL4B6jg5kQygg6pY7NyICzw+taLPLHhaMMEE+E0n2BodRXzVjZvF15pxi4qXtug==} + engines: {node: '>= 12'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@node-rs/xxhash-win32-arm64-msvc@1.7.7': + resolution: {integrity: sha512-F2QaHmplRZbg1T/AlQuW11MmRsxLvNVEsofeQd92/u704L5+BBEVc13MutJwioXNIAW1GmgOpfwVG6ZGeLAoyA==} + engines: {node: '>= 12'} + cpu: [arm64] + os: [win32] + + '@node-rs/xxhash-win32-ia32-msvc@1.7.7': + resolution: {integrity: sha512-YnHHBQVHju1Sx8vc2s2RauAGXAwWeqFMC4CvaJJ8j5WPnW2x8p9hTQRURMl/ATPLp/t8j4C9AEmLNtrNdE6JXQ==} + engines: {node: '>= 12'} + cpu: [ia32] + os: [win32] + + '@node-rs/xxhash-win32-x64-msvc@1.7.7': + resolution: {integrity: sha512-0uVSktuJUetF467YZwHoGuBGcY8RF30DixboXTgMYG5amWze2j+OvaSpQKLsHhf0fs2UZH9W4KQG3SfUizlmGA==} + engines: {node: '>= 12'} + cpu: [x64] + os: [win32] + + '@node-rs/xxhash@1.7.7': + resolution: {integrity: sha512-lQflJcUTqTvIbFNvq+6DnXQr2MCAqEBsXt9IgTiuhQeaFPejoUJBRF2WlfU5hfUzsCjU+DrzZlxzob0Q4zdHLw==} + engines: {node: '>= 12'} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -279,176 +619,241 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@oxc-resolver/binding-darwin-arm64@1.10.2': - resolution: {integrity: sha512-aOCZYXqmFL+2sXlaVkYbAOtICGGeTFtmdul8OimQfOXHJods6YHJ2nR6+rEeBcJzaXyXPP18ne1IsEc4AYL1IA==} + '@oxc-resolver/binding-android-arm-eabi@11.24.2': + resolution: {integrity: sha512-y09e0L0SRI2OA2tUIrjBgoV3eH5hvUKXNkJqXmNo5V2WxIjyC7I7aJfRLMEVpA8yi95f90gFDvO0VMgrDw+vwA==} + cpu: [arm] + os: [android] + + '@oxc-resolver/binding-android-arm64@11.24.2': + resolution: {integrity: sha512-cl4icWaZFnLdg8m6qtnh5rBMuGbxc/ptStFHLeCNwr+2cZjkjNwQu/jYRS0CHlnPecOJMpuS5M6/BH+0J/YkEg==} + cpu: [arm64] + os: [android] + + '@oxc-resolver/binding-darwin-arm64@11.24.2': + resolution: {integrity: sha512-At29QEMF6HajbQvgY8K6OXnHD1x9rad74xBEfmCB6ZqCGsdq75aK7tOYcTbOanMy8qdIBrfL3SMr3p/lfSlb9w==} cpu: [arm64] os: [darwin] - '@oxc-resolver/binding-darwin-x64@1.10.2': - resolution: {integrity: sha512-6WD7lHGkoduFZfUgnC2suKOlqttQRKxWsiVXiiGPu3mfXvQAhMd/gekuH1t8vOhFlPJduaww15n5UB0bSjCK+w==} + '@oxc-resolver/binding-darwin-x64@11.24.2': + resolution: {integrity: sha512-A5Kqr1EUj4oIL5CF4WRssq/o5P0Y11cwoFouMRmQ7YnC/A8V93nv1nb7aSU8HwcgmXropjLNkVTl4MN87cu28Q==} cpu: [x64] os: [darwin] - '@oxc-resolver/binding-freebsd-x64@1.10.2': - resolution: {integrity: sha512-nEqHWx/Ot5p7Mafj8qH6vFlLSvHjECxAcZwhnAMqRuQu1NgXC/QM3emkdhVGy7QJgsxZbHpPaF6TERNf5/NL9Q==} + '@oxc-resolver/binding-freebsd-x64@11.24.2': + resolution: {integrity: sha512-R5xkRBRRz7ceH/P5Jrc6G7FmdUdgpLYyESFAUDVTNQ9K0sGPxcp4ljiwEwEqsvNcQ4sYbMRrWcHHBCu7ksAJVw==} cpu: [x64] os: [freebsd] - '@oxc-resolver/binding-linux-arm-gnueabihf@1.10.2': - resolution: {integrity: sha512-+AlZI0fPnpfArh8aC5k2295lmQrxa2p8gBLxC3buvCkz0ZpbVLxyyAXz3J2jGwJnmc5MUPLEqPYw6ZlAGH4XHA==} + '@oxc-resolver/binding-linux-arm-gnueabihf@11.24.2': + resolution: {integrity: sha512-k/RuYL4L/R58IBn3wT5ma3Wh4k62bp1eYCFRWCmMsasUOqL+H6sW0VGFadEzKWXFFlz+2uIMoeMk9ySSZJHgbg==} + cpu: [arm] + os: [linux] + + '@oxc-resolver/binding-linux-arm-musleabihf@11.24.2': + resolution: {integrity: sha512-bnHAak3ujYfH5pKk4NieFNbvYvernfoQDgwLddbZ3OtMYrem87/qjlA+u+aKG0oZcqSLGCful/6/CEA+aeAgaA==} cpu: [arm] os: [linux] - '@oxc-resolver/binding-linux-arm64-gnu@1.10.2': - resolution: {integrity: sha512-8fZ8NszFaUZaoA8eUwkF2lHjgUs76aFiewWgG/cjcZmwKp+ErZQLW8eOvIWZ4SohHQ+ScvhVsSaU2PU38c88gw==} + '@oxc-resolver/binding-linux-arm64-gnu@11.24.2': + resolution: {integrity: sha512-vDT3KHgzYp47gmtNOqL2VNhCyl5Zv643eyxm//A68J8DeUGXrvD1pZFiaT4jSfe+RInfnn1R2yVHye4enx6RnA==} cpu: [arm64] os: [linux] + libc: [glibc] - '@oxc-resolver/binding-linux-arm64-musl@1.10.2': - resolution: {integrity: sha512-oPrLICrw96Ym9n04FWXWGkbkpF6qJtZ57JSnqI3oQ24xHTt4iWyjHKHQO46NbJAK9sFb3Qce4BzV8faDI5Rifg==} + '@oxc-resolver/binding-linux-arm64-musl@11.24.2': + resolution: {integrity: sha512-+kMlQvbzfyEYtu5FcjE4p+ttBLpKW4d/AsAsuE69BxV6V4twZJeIQZFfD8gh/wqglY0MkPSezWXQH0jBV13MUw==} cpu: [arm64] os: [linux] + libc: [musl] + + '@oxc-resolver/binding-linux-ppc64-gnu@11.24.2': + resolution: {integrity: sha512-shjfMhmZ3gq9fv/w7bi3PnZlgOPG+2QAOFf0BJF0EgBSIGZ6PMLN2zbGEblTUYB/NKVDRyYhE2ff3dJ1QqNPkA==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-riscv64-gnu@11.24.2': + resolution: {integrity: sha512-zGelwFR5oRo+b69k8Lrzun86DyUHzfKN6cnjbR9l7Z7NIRznOE/2ZvPa1IUKqAL2PzAXOdwkfVqNvO1H2RlpAw==} + cpu: [riscv64] + os: [linux] + libc: [glibc] - '@oxc-resolver/binding-linux-x64-gnu@1.10.2': - resolution: {integrity: sha512-eli74jTAUiIfqi8IPFqiPxQS69Alcr6w/IFRyf3XxrkxeFGgcgxJkRIxWNTKJ6T3EXxjuma+49LdZn6l9rEj7A==} + '@oxc-resolver/binding-linux-riscv64-musl@11.24.2': + resolution: {integrity: sha512-qxZ1SWCXJY0eyhAlP6Lmo9F2Nrtx7EkYj9oCgL8apDPCwXwCEDA2U697bbT81JIc2IrVjxO4KX6WU2N+oN9Z4w==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxc-resolver/binding-linux-s390x-gnu@11.24.2': + resolution: {integrity: sha512-sGCecF3cx2DFlH4t/z7ApnOnXqN48p5p5mlHDEnHTAukQa2P+qMVE4CwyWE9W+q/m3QJ7kKfGrIjax31f44oFQ==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-x64-gnu@11.24.2': + resolution: {integrity: sha512-k/VlMMcSzMlahb3/fENM4rTlsJ0s3fFROA0KXPBmKggqmTSaE383sl8F3KCOXPLmVsYfW6hCitMhXCEtNeZxxg==} cpu: [x64] os: [linux] + libc: [glibc] - '@oxc-resolver/binding-linux-x64-musl@1.10.2': - resolution: {integrity: sha512-HH9zmjNSQo3rkbqJH5nIjGrtjC+QPrUy0KGGMR/oRCSLuD0cNFJ/Uly1XAugwSm4oEw0+rv6PmeclXmVTKsxhw==} + '@oxc-resolver/binding-linux-x64-musl@11.24.2': + resolution: {integrity: sha512-8hbnZyNi97b/8wapYaIF9+t9GmZKBW2vunaOc3h9HGJptH7b7XpvZqOTBSm/MpTjr7H497BlgOaSfLUdhmy2bw==} cpu: [x64] os: [linux] + libc: [musl] + + '@oxc-resolver/binding-openharmony-arm64@11.24.2': + resolution: {integrity: sha512-MvyGik3a6pVgZ0t/kWlbmFxFLmXQJwgLsY2eYFHLpy0wGwRbfzeIGgDwQ3kXqE30z+kSXennRkCrT7TUvkptNg==} + cpu: [arm64] + os: [openharmony] - '@oxc-resolver/binding-wasm32-wasi@1.10.2': - resolution: {integrity: sha512-3ItX23q33sfVBtMMdMhVDSe0NX5zBHxHfmFiXhSJuwNaVIwGpLFU7WU2nmq9oNdnmTOvjL8vlhOqiGvumBLlRA==} + '@oxc-resolver/binding-wasm32-wasi@11.24.2': + resolution: {integrity: sha512-vHcssMPwO08RTvj/c0iOBz90attxyG3wQJ0dTcyEQK43LRpcdLWZlV5feBhv6Isn6ahbQIzHbCgfa81+RiML0Q==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@oxc-resolver/binding-win32-arm64-msvc@1.10.2': - resolution: {integrity: sha512-aVoj2V+jmQ1N+lVy9AhaLmzssJM0lcKt8D0UL83aNLZJ5lSN7hgBuUXTVmL+VF268f167khjo38z+fbELDVm8Q==} + '@oxc-resolver/binding-win32-arm64-msvc@11.24.2': + resolution: {integrity: sha512-uokJqro2iBqkFvJdKQLP7d8/BUmFwESQFVmIJUQKj1Xn1a/LysJoe1vmeECLF5b3jsV8CAL5sEMJXX6SdK9Nhg==} cpu: [arm64] os: [win32] - '@oxc-resolver/binding-win32-x64-msvc@1.10.2': - resolution: {integrity: sha512-l8BDQWyP0Piw8hlmYPUqTRKLsq+ceG9h+9p6ZrjNzwW9AmJX7T7T2hgoVVHqS6f4WNA/CFkb3RyZP9QTzNkyyA==} + '@oxc-resolver/binding-win32-x64-msvc@11.24.2': + resolution: {integrity: sha512-UqGPmo56KDfLlfXFAFIrNflHT8tFxWGEivWg3Zeyp4Uy2NlKN1FGPr6/BxcLGG3+kZ6Wp14g5Uj+n71boqZfiw==} cpu: [x64] os: [win32] - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} + '@pinojs/redact@0.4.0': + resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} - '@sindresorhus/is@4.6.0': - resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} - engines: {node: '>=10'} - '@sindresorhus/is@6.3.1': resolution: {integrity: sha512-FX4MfcifwJyFOI2lPoX7PQxCqx8BG1HCho7WdiXwpEQx1Ycij0JxkfYtGK7yqNScrZGSlt6RE6sw8QYoH7eKnQ==} engines: {node: '>=16'} - '@sindresorhus/is@7.0.0': - resolution: {integrity: sha512-WDTlVTyvFivSOuyvMeedzg2hdoBLZ3f1uNVuEida2Rl9BrfjrIRjWA/VZIrMRLvSwJYCAlCRA3usDt1THytxWQ==} + '@sindresorhus/is@7.2.0': + resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==} engines: {node: '>=18'} '@sindresorhus/merge-streams@2.3.0': resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} - '@swc-node/core@1.13.3': - resolution: {integrity: sha512-OGsvXIid2Go21kiNqeTIn79jcaX4l0G93X2rAnas4LFoDyA9wAwVK7xZdm+QsKoMn5Mus2yFLCc4OtX2dD/PWA==} + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + + '@swc-node/core@1.15.0': + resolution: {integrity: sha512-WAerrrl087WgenB92XG4Th2t0NQFfMNLYSe0sW2cEMMqM/LQmP4rozsDJl0vuzTrbewjpKQryxFXI+aYig/dBg==} engines: {node: '>= 10'} peerDependencies: - '@swc/core': '>= 1.4.13' + '@swc/core': '>= 1.13.3' '@swc/types': '>= 0.1' - '@swc-node/register@1.10.9': - resolution: {integrity: sha512-iXy2sjP0phPEpK2yivjRC3PAgoLaT4sjSk0LDWCTdcTBJmR4waEog0E6eJbvoOkLkOtWw37SB8vCkl/bbh4+8A==} + '@swc-node/register@1.12.1': + resolution: {integrity: sha512-t6t+0bDos+bj0+jcSqKl7+ys/i1an5cEViC0LuIskJFSHONX871nXN8j+gxdKVOgCCpjs0buXUPNnp/0DaV4EQ==} peerDependencies: '@swc/core': '>= 1.4.13' - typescript: '>= 4.3' + typescript: '>= 4.3 < 7' - '@swc-node/sourcemap-support@0.5.1': - resolution: {integrity: sha512-JxIvIo/Hrpv0JCHSyRpetAdQ6lB27oFYhv0PKCNf1g2gUXOjpeR1exrXccRxLMuAV5WAmGFBwRnNOJqN38+qtg==} + '@swc-node/sourcemap-support@0.6.1': + resolution: {integrity: sha512-ovltDVH5QpdHXZkW138vG4+dgcNsxfwxHVoV6BtmTbz2KKl1A8ZSlbdtxzzfNjCjbpayda8Us9eMtcHobm38dA==} - '@swc/cli@0.4.0': - resolution: {integrity: sha512-4JdVrPtF/4rCMXp6Q1h5I6YkYZrCCcqod7Wk97ZQq7K8vNGzJUryBv4eHCvqx5sJOJBrbYm9fcswe1B0TygNoA==} - engines: {node: '>= 16.14.0'} + '@swc/cli@0.8.1': + resolution: {integrity: sha512-L+ACCGHCiS0VqHVep/INLVnvRvJ2XooQFLZq4L8snhxw1jsqz+XRcY313UsyPVturPPE1shW3jic7rt3qEQTSQ==} + engines: {node: '>= 20.19.0'} hasBin: true peerDependencies: '@swc/core': ^1.2.66 - chokidar: ^3.5.1 + chokidar: ^5.0.0 peerDependenciesMeta: chokidar: optional: true - '@swc/core-darwin-arm64@1.7.5': - resolution: {integrity: sha512-Y+bvW9C4/u26DskMbtQKT4FU6QQenaDYkKDi028vDIKAa7v1NZqYG9wmhD/Ih7n5EUy2uJ5I5EWD7WaoLzT6PA==} + '@swc/core-darwin-arm64@1.16.1': + resolution: {integrity: sha512-zlJblJ8ncErD43lKdxjbUaUskJQf+LxiPXYcWXD8/8ZMV+7uuAT+CwjciLXpyZBd5Pq/S726bMpeeAwSeL1hhg==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.7.5': - resolution: {integrity: sha512-AuIbDlcaAhYS6mtF4UqvXgrLeAfXZbVf4pgtgShPbutF80VbCQiIB55zOFz5aZdCpsBVuCWcBq0zLneK+VQKkQ==} + '@swc/core-darwin-x64@1.16.1': + resolution: {integrity: sha512-IN0BmPWb0YAh/17mmlWB/HDBtTw2MfuW4hulf/tQAgTQBRH17l+z499bNJLK6LizSjqs0P7V+jU38Zj+vJC1DA==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.7.5': - resolution: {integrity: sha512-99uBPHITRqgGwCXAjHY94VaV3Z40+D2NQNgR1t6xQpO8ZnevI6YSzX6GVZfBnV7+7oisiGkrVEwfIRRa+1s8FA==} + '@swc/core-linux-arm-gnueabihf@1.16.1': + resolution: {integrity: sha512-EYgrx2YOCQ2Twz2S793kqNjPkpvYVUPzzR95bIb7by+VQcyaai4lZZ2iz/tZvcFVKSNcN3/JTKwx+aBn2ZL52A==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.7.5': - resolution: {integrity: sha512-xHL3Erlz+OGGCG4h6K2HWiR56H5UYMuBWWPbbUufi2bJpfhuKQy/X3vWffwL8ZVfJmCUwr4/G91GHcm32uYzRg==} + '@swc/core-linux-arm64-gnu@1.16.1': + resolution: {integrity: sha512-moyKm0YZlHdHohzm1YwgAyesqnE853rO0REMfJLFAova51wF9BNi+3ZW2PeS7Vqvn6HeJuepLpAHbBdZctxpHA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [glibc] - '@swc/core-linux-arm64-musl@1.7.5': - resolution: {integrity: sha512-5ArGdqvFMszNHdi4a67vopeYq8d1K+FuTWDrblHrAvZFhAyv+GQz2PnKqYOgl0sWmQxsNPfNwBFtxACpUO3Jzg==} + '@swc/core-linux-arm64-musl@1.16.1': + resolution: {integrity: sha512-kKGBO9wdapiSzuf5ZzZ2fYtlu1BNSYtIIUxvH1ir/gcelTOREEHGDCLTDFx/2Knf878nU11A40z7LxwasEFxqA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [musl] + + '@swc/core-linux-ppc64-gnu@1.16.1': + resolution: {integrity: sha512-nZ6qahtLxC3PM54cWOQZHxt4lTCF/3J4LIoWWzz6v7A+rLs8Dx54anYQf7mH3eIi8KlNpgKci/ie8ZSqFN8O7A==} + engines: {node: '>=10'} + cpu: [ppc64] + os: [linux] + libc: [glibc] - '@swc/core-linux-x64-gnu@1.7.5': - resolution: {integrity: sha512-mSVVV/PFzCGtI1nVQQyx34NwCMgSurF6ZX/me8pUAX054vsE/pSFL66xN+kQOe/1Z/LOd4UmXFkZ/EzOSnYcSg==} + '@swc/core-linux-s390x-gnu@1.16.1': + resolution: {integrity: sha512-4ji5PNzhYq193Z4/4xUaSoNJza6iCkDJSzhetrbB6KOYxsr+kxtQr8ePWhMJUiMt6JUWtXaZ1PYT8FhtED+nGA==} + engines: {node: '>=10'} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@swc/core-linux-x64-gnu@1.16.1': + resolution: {integrity: sha512-VJQxqrisHV+B394IgrOu8YsIIXZgffnf5tO+yc9Z/hoUpuZEvuQTjWwlnpZdpyD+0nx6LTD1/3k646JYm43yJA==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [glibc] - '@swc/core-linux-x64-musl@1.7.5': - resolution: {integrity: sha512-09hY3ZKMUORXVunESKS9yuP78+gQbr759GKHo8wyCdtAx8lCZdEjfI5NtC7/1VqwfeE32/U6u+5MBTVhZTt0AA==} + '@swc/core-linux-x64-musl@1.16.1': + resolution: {integrity: sha512-r9oV1mwxxsIGcLV1IQ/tw76MW3doatKze1QFWuC+a7QqJUkhY/bKTSVk6NpKKUGm2LDsE33Va8VqSClfA7vSiQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [musl] - '@swc/core-win32-arm64-msvc@1.7.5': - resolution: {integrity: sha512-B/UDtPI3RlYRFW42xQxOpl6kI/9LtkD7No+XeRIKQTPe15EP2o+rUlv7CmKljVBXgJ8KmaQbZlaEh1YP+QZEEQ==} + '@swc/core-win32-arm64-msvc@1.16.1': + resolution: {integrity: sha512-6huNRessoBLxWEqBm5zJXyCQ27TO7anvkdiuQ5MDO4CJni0nOXEqKtV9RllQ2TdyENKKsUMXVnIfW2hIXx/R5Q==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.7.5': - resolution: {integrity: sha512-BgLesVGmIY6Nub/sURqtSRvWYcbCE/ACfuZB3bZHVKD6nsZJJuOpdB8oC41fZPyc8yZUzL3XTBIifkT2RP+w9w==} + '@swc/core-win32-ia32-msvc@1.16.1': + resolution: {integrity: sha512-OVKJFUzphrGmsh+BGtcZDesx0YryV7/Yvy5XGgTqnrZfjnyfcr5uaqYQugCckdIlupc5Vs3XtDjRAj12z4ZPlw==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.7.5': - resolution: {integrity: sha512-CnF557tidLfQRPczcqDJ8x+LBQYsFa0Ra6w2+YU1iFUboaI2jJVuqt3vEChu80y6JiRIBAaaV2L/GawDJh1dIQ==} + '@swc/core-win32-x64-msvc@1.16.1': + resolution: {integrity: sha512-Bt+VIhWYCGk4urklnkkteLUOeLv1VxigwTCeB/xC6rBZxY6IIKdDwCJf6on3E3SUGsIqmQS6QqtuJQc1VxF4Aw==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.7.5': - resolution: {integrity: sha512-qKK0/Ta4qvxs/ok3XyYVPT7OBenwRn1sSINf1cKQTBHPqr7U/uB4k2GTl6JgEs8H4PiJrMTNWfMLTucIoVSfAg==} + '@swc/core@1.16.1': + resolution: {integrity: sha512-nUaeu91O5QZKrQdaDCHd402ogUIoNOOjpkZNq0UomWK0G6gDaGmLhvddF1/3BXf5O8aLyo6ZPY/aMDWvaJQ/hg==} engines: {node: '>=10'} peerDependencies: - '@swc/helpers': '*' + '@swc/helpers': '>=0.5.17' peerDependenciesMeta: '@swc/helpers': optional: true @@ -456,50 +861,27 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/types@0.1.12': - resolution: {integrity: sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==} + '@swc/types@0.1.28': + resolution: {integrity: sha512-V6Mnml8v09QALx6K0elJ7o9K/MkVDtW3t6L+7Ou/JcWtb3xwId2AH4FeOceySd2JaO87IMw4+6vSZxLm34LPbw==} - '@szmarczak/http-timer@4.0.6': - resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} - engines: {node: '>=10'} - - '@szmarczak/http-timer@5.0.1': - resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} - engines: {node: '>=14.16'} + '@tokenizer/inflate@0.4.1': + resolution: {integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==} + engines: {node: '>=18'} '@tokenizer/token@0.3.0': resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} - '@trysound/sax@0.2.0': - resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} - engines: {node: '>=10.13.0'} - - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - - '@tsconfig/node12@1.0.11': - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - - '@tsconfig/node14@1.0.3': - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - - '@tsconfig/node16@1.0.4': - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - - '@tybys/wasm-util@0.9.0': - resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} - - '@types/cacheable-request@6.0.3': - resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} - - '@types/glob@7.2.0': - resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + '@tybys/wasm-util@0.10.3': + resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} '@types/htmlhint@1.1.5': resolution: {integrity: sha512-BnMb05tZKcK0M/GK28H1jmCYRDqhmMUbxakbmmrBJ2vNpKPHLmAEWkq4UXdPN3cq3MDySZizhcbmYEg9i9G/QA==} - '@types/http-cache-semantics@4.0.4': - resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + '@types/http-cache-semantics@4.2.0': + resolution: {integrity: sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==} + + '@types/imagemin-gifsicle@7.0.4': + resolution: {integrity: sha512-ZghMBd/Jgqg5utTJNPmvf6DkuHzMhscJ8vgf/7MUGCpO+G+cLrhYltL+5d+h3A1B4W73S2SrmJZ1jS5LACpX+A==} '@types/imagemin-jpegtran@5.0.4': resolution: {integrity: sha512-PSMxOeJa8q94Y+qx8Yriw+qj1+vH5xWpvar63o6SGO0Xi5RlKuwHHfJmN2GRUngPrlhe394jOUmpVq8jQlVmFA==} @@ -507,65 +889,203 @@ packages: '@types/imagemin-mozjpeg@8.0.4': resolution: {integrity: sha512-ZCAxV8SYJB8ehwHpnbRpHjg5Wc4HcyuAMiDhXbkgC7gujDoOTyHO3dhDkUtZ1oK1DLBRZapqG9etdLVhUml7yQ==} - '@types/imagemin-svgo@10.0.5': - resolution: {integrity: sha512-9U2Rf7vWBHeqJvzmWNP3vYAKqR0208QqQ9Mkrq9OLIL5AeoF/dRVRou6iUYCufBSim57BpBpCJhZLrTgfS3k1g==} + '@types/imagemin-svgo@11.0.0': + resolution: {integrity: sha512-NNwCDWaiD8u9zMgRZBwClgnhovpZJeckfAHEBRgBvRmUZQoja6+XzGKZHJra32+8dp6e1yL4fc2S9rM8d94acQ==} '@types/imagemin-zopfli@7.0.4': resolution: {integrity: sha512-rBPcaLKAbUEP96ak6Bylm8nNHzgCdP+bkMr8bgzmGC3rF4ijDWySv9jFPysaMp4fQepCtptUSJ+/c7dYotQ8Zw==} - '@types/imagemin@9.0.0': - resolution: {integrity: sha512-4IaT+BdPUAFf/AAy3XlFAbqGk4RawhdidxWO5XTe+PJAYAr4d7m2FHiqyEPXbDpwS+IaLIJq5AIjLE9HcwMGBg==} + '@types/imagemin@9.0.1': + resolution: {integrity: sha512-xMWpvrUhtYxl6EeW+UhVH3rwUKhCRx21XddcoWByjDAasXZT5pQaCn0YVnXoTijX5hlTrGqV4TGQL/Htpp00+w==} '@types/keyv@3.1.4': resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - '@types/minimatch@5.1.2': - resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - - '@types/node-notifier@8.0.5': - resolution: {integrity: sha512-LX7+8MtTsv6szumAp6WOy87nqMEdGhhry/Qfprjm1Ma6REjVzeF7SCyvPtp5RaF6IkXCS9V4ra8g5fwvf2ZAYg==} - - '@types/node@22.1.0': - resolution: {integrity: sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==} + '@types/node@26.4.0': + resolution: {integrity: sha512-faiGnoIrLH/V8cibOMEAZ8pMw6oXqSukl29ra4mN8GdaB2ZewzeaLj+INpV5N+Z1eKWzY+IzaIZH2EIR6YZRNQ==} '@types/responselike@1.0.3': resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} - '@types/shelljs@0.8.15': - resolution: {integrity: sha512-vzmnCHl6hViPu9GNLQJ+DZFd6BQI2DBTUeOvYHqkWQLMfKAAQYMb/xAmZkTogZI/vqXHCWkqDRymDI5p0QTi5Q==} - - '@types/svgo@2.6.4': - resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==} + '@types/sarif@2.1.7': + resolution: {integrity: sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==} '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - '@types/yargs@17.0.32': - resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} + '@types/yargs@17.0.35': + resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} + + '@typescript/typescript-aix-ppc64@7.0.2': + resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==} + engines: {node: '>=16.20.0'} + cpu: [ppc64] + os: [aix] + + '@typescript/typescript-darwin-arm64@7.0.2': + resolution: {integrity: sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [darwin] + + '@typescript/typescript-darwin-x64@7.0.2': + resolution: {integrity: sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [darwin] + + '@typescript/typescript-freebsd-arm64@7.0.2': + resolution: {integrity: sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [freebsd] + + '@typescript/typescript-freebsd-x64@7.0.2': + resolution: {integrity: sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [freebsd] + + '@typescript/typescript-linux-arm64@7.0.2': + resolution: {integrity: sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [linux] + + '@typescript/typescript-linux-arm@7.0.2': + resolution: {integrity: sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==} + engines: {node: '>=16.20.0'} + cpu: [arm] + os: [linux] + + '@typescript/typescript-linux-loong64@7.0.2': + resolution: {integrity: sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==} + engines: {node: '>=16.20.0'} + cpu: [loong64] + os: [linux] + + '@typescript/typescript-linux-mips64el@7.0.2': + resolution: {integrity: sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==} + engines: {node: '>=16.20.0'} + cpu: [mips64el] + os: [linux] + + '@typescript/typescript-linux-ppc64@7.0.2': + resolution: {integrity: sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==} + engines: {node: '>=16.20.0'} + cpu: [ppc64] + os: [linux] + + '@typescript/typescript-linux-riscv64@7.0.2': + resolution: {integrity: sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==} + engines: {node: '>=16.20.0'} + cpu: [riscv64] + os: [linux] + + '@typescript/typescript-linux-s390x@7.0.2': + resolution: {integrity: sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==} + engines: {node: '>=16.20.0'} + cpu: [s390x] + os: [linux] + + '@typescript/typescript-linux-x64@7.0.2': + resolution: {integrity: sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [linux] + + '@typescript/typescript-netbsd-arm64@7.0.2': + resolution: {integrity: sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [netbsd] - acorn-walk@8.3.3: - resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} - engines: {node: '>=0.4.0'} + '@typescript/typescript-netbsd-x64@7.0.2': + resolution: {integrity: sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [netbsd] + + '@typescript/typescript-openbsd-arm64@7.0.2': + resolution: {integrity: sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [openbsd] - acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} - engines: {node: '>=0.4.0'} + '@typescript/typescript-openbsd-x64@7.0.2': + resolution: {integrity: sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [openbsd] + + '@typescript/typescript-sunos-x64@7.0.2': + resolution: {integrity: sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [sunos] + + '@typescript/typescript-win32-arm64@7.0.2': + resolution: {integrity: sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [win32] + + '@typescript/typescript-win32-x64@7.0.2': + resolution: {integrity: sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [win32] + + '@typescript/typescript6@6.0.2': + resolution: {integrity: sha512-mbCddXd+jm7hfx7w2YU64/Av4/NqqeG3GoRZgxPcgoTxYjhrcfJRw9ULch71SS4G+Q3bOXFhRvPqjguN0Hyp5w==} hasBin: true - ansi-gray@0.1.1: - resolution: {integrity: sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==} - engines: {node: '>=0.10.0'} + '@xhmikosr/archive-type@8.1.0': + resolution: {integrity: sha512-EXOjEbnZFE5c/nFMf4FOrEURVanzHpnkPYmnmr78u02/8hAhE0FMq8p9TK1IM0/bFr5VcyBUY0gfLm8f7dKy+Q==} + engines: {node: '>=20'} + + '@xhmikosr/bin-check@8.2.2': + resolution: {integrity: sha512-Y/b0YJoCDda6DCFj8ikks06GrEWDsz/3vdgGLeectV9p+YJc76YugRjtqFdd2KTf2rnEPjalL2hcXP+x2KcSLQ==} + engines: {node: '>=20'} + + '@xhmikosr/bin-wrapper@14.5.1': + resolution: {integrity: sha512-UZUuTYWxeAbTIiRKKEAmV3csoE36B3CGFZrYYn87+bSEBTyJ32p5gx5Gmj5HOgyOtioFUypbOZ1V5M/l/VoePw==} + engines: {node: '>=20'} + + '@xhmikosr/decompress-tar@9.0.2': + resolution: {integrity: sha512-8nPZ6lZ3ExhsSxi/X/PMB3K+Vtsuxk43HowxYpxw4AsCHTYqFBXwC8B3Y+M/meaUOGOVm+2tFNUAfWGRjBt+Ww==} + engines: {node: '>=20'} + + '@xhmikosr/decompress-tarbz2@9.0.2': + resolution: {integrity: sha512-m0DvZhE7remCxtS8xY2iHSjivT4v+iyYDdfNoeuu8Nm+7g8xEXdLKSyDEicu4u1ImJLLGEfjMuTLera/F6UGWw==} + engines: {node: '>=20'} + + '@xhmikosr/decompress-targz@9.0.1': + resolution: {integrity: sha512-1JXu2b6yrpm5EuBoOzMU57B4qrHXJKWQQ7LlMynNEiz85mEjDciO3ayf//GXaTLLCEKiHjWlU3q3THjgf7uODA==} + engines: {node: '>=20'} + + '@xhmikosr/decompress-unzip@8.2.1': + resolution: {integrity: sha512-2MS94QnmXQwjkKN8WyFiu1sU7J3rcWJcMze4kRYsX7tN+CXpUGECgkh4YSOhujpkWPuVlFudIziJHO/TxOqkQQ==} + engines: {node: '>=20'} + + '@xhmikosr/decompress@11.1.4': + resolution: {integrity: sha512-ZbYL7SAfY37/TMpopqBR3mQiuQ76kI/RNpN4q82YHSw/UxktZNy8P4wgiKPSrTImMAWRaUG8UK1pgEa56YdLaw==} + engines: {node: '>=20'} + + '@xhmikosr/downloader@16.3.1': + resolution: {integrity: sha512-M67dvznaFbsvoqhGT4FsHWysaXXQ8386OViGZm0WOyQS3apW9p16WgvHp9nWj2vfKQAR2ZdqIBPNCHSM5rKSCg==} + engines: {node: '>=20'} + + '@xhmikosr/os-filter-obj@4.1.0': + resolution: {integrity: sha512-y5ArHvQ7BVule/+L9yE2nYMhceiJhgsqo58lOfnisQ7bg+Kjfmkgr7JBuVFiTkl+ErdShpp829QstZQyLugl8g==} + engines: {node: '>=20'} ansi-regex@2.1.1: resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} engines: {node: '>=0.10.0'} - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + ansi-regex@6.3.0: + resolution: {integrity: sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==} engines: {node: '>=12'} ansi-styles@2.2.1: @@ -576,62 +1096,55 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} - ansi-wrap@0.1.0: - resolution: {integrity: sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==} - engines: {node: '>=0.10.0'} - arch@2.2.0: resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} - archive-type@3.2.0: - resolution: {integrity: sha512-6cAWDM0lUYTbb7F436FAjbBYnsn5E3L2AgTOLzrFfLt7FVM6uJwKUvllE8VjLKTmKCU8PqtWlUAezEYjg5iGqA==} - engines: {node: '>=0.10.0'} - archive-type@4.0.0: resolution: {integrity: sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==} engines: {node: '>=4'} - arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - - arr-diff@2.0.0: - resolution: {integrity: sha512-dtXTVMkh6VkEEA7OhXnN1Ecb8aAGFdZ1LFxtOCoqj4qkyOJMt7+qs6Ahdy6p/NQCPYsRSXXivhSB/J5E9jmYKA==} - engines: {node: '>=0.10.0'} - - arr-flatten@1.1.0: - resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} - engines: {node: '>=0.10.0'} - - array-differ@1.0.0: - resolution: {integrity: sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==} - engines: {node: '>=0.10.0'} - array-find-index@1.0.2: resolution: {integrity: sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==} engines: {node: '>=0.10.0'} - array-uniq@1.0.3: - resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} - engines: {node: '>=0.10.0'} + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - array-unique@0.2.1: - resolution: {integrity: sha512-G2n5bG5fSUCpnsXz4+8FUkYsGPkNfLn9YvS66U5qbTIXI2Ynnlo4Bi42bWv+omKUCqz+ejzfClwne0alJWJPhg==} - engines: {node: '>=0.10.0'} + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} - async-each-series@1.1.0: - resolution: {integrity: sha512-/VIpPVIJJlJObJiXkHBJ1RhjDtydBRG/3/dWpsXoVGOShNw5tameXnC7Yys+wpb0p/myItxGmSGgNi/dNlsIiA==} - engines: {node: '>=0.8.0'} + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} - async@3.2.3: - resolution: {integrity: sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==} + b4a@1.8.1: + resolution: {integrity: sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==} + peerDependencies: + react-native-b4a: '*' + peerDependenciesMeta: + react-native-b4a: + optional: true balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + + bare-events@2.9.2: + resolution: {integrity: sha512-AIPKioV7/Y/8KfZ3AAhjPJxLLbY49S64Ym5DakZlUg75qQiTgUq9hEJoEwa4eUezPUlXRy/i5NpsKvo9jgKmoA==} + peerDependencies: + bare-abort-controller: '*' + peerDependenciesMeta: + bare-abort-controller: + optional: true + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -639,66 +1152,49 @@ packages: resolution: {integrity: sha512-3vqtKL1N45I5dV0RdssXZG7X6pCqQrWPNOlBPZPrd+QkE2HEhR57Z04m0KtpbsZH73j+a3F8UD1TQnn+ExTvIA==} engines: {node: '>=0.10.0'} - bin-build@2.2.0: - resolution: {integrity: sha512-m8gaq/BdoePIT5RlHW3KNJZwNkg9YtPn2C89x85/0KYIExoHMm3D/RL/Wxrvum9CI6pbF2KUQa8a/WWFudVmng==} - engines: {node: '>=0.10.0'} - bin-build@3.0.0: resolution: {integrity: sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==} engines: {node: '>=4'} - bin-check@2.0.0: - resolution: {integrity: sha512-jf6fesAGnXBynRU3JLpo0qe8vw8JBPBJCKK0v8NV3iH1P2UkQ6UEcIy7uPw1OdWkPUtpmX1uqeyTGrpeKd2CwQ==} - engines: {node: '>=0.10.0'} - bin-check@4.1.0: resolution: {integrity: sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==} engines: {node: '>=4'} - bin-version-check@2.1.0: - resolution: {integrity: sha512-3lUeqGAbnWQG7OCfIiHXw1EmzzvAGlMYqqgRahkr7oDeY1Qra8r2DZH2bbfXZI4NA3aaD1Ap+xt8CeVO/fftrw==} - engines: {node: '>=0.10.0'} - hasBin: true - bin-version-check@4.0.0: resolution: {integrity: sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==} engines: {node: '>=6'} - bin-version-check@5.1.0: - resolution: {integrity: sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g==} - engines: {node: '>=12'} - - bin-version@1.0.4: - resolution: {integrity: sha512-o9u3aS7w6RqoH9BErxuilhQG2fn3srr3ZekEEGailMnj5F+0p+R3TXENvO+vGaLnKlmq8xhhh/Fvl1RRxx/FdQ==} - engines: {node: '>=0.10.0'} - bin-version@3.1.0: resolution: {integrity: sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==} engines: {node: '>=6'} - bin-version@6.0.0: - resolution: {integrity: sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw==} - engines: {node: '>=12'} - - bin-wrapper@3.0.2: - resolution: {integrity: sha512-5QEiUnaE7hgRlQxaV2jpeTg0+IA3o4zZ2sduuSqyJCdOuJ1wDuEmM1ntGelDf4ueCOaOam4bOMtOU4W6lG+hUg==} - engines: {node: '>=0.10.0'} - bin-wrapper@4.1.0: resolution: {integrity: sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==} engines: {node: '>=6'} + binary-version-check@6.1.0: + resolution: {integrity: sha512-REKdLKmuViV2WrtWXvNSiPX04KbIjfUV3Cy8batUeOg+FtmowavzJorfFhWq95cVJzINnL/44ixP26TrdJZACA==} + engines: {node: '>=18'} + + binary-version@7.1.0: + resolution: {integrity: sha512-Iy//vPc3ANPNlIWd242Npqc8MK0a/i4kVcHDlDA6HNMv5zMxz4ulIFhOSYJVKw/8AbHdHy0CnGYEt1QqSXxPsw==} + engines: {node: '>=18'} + bl@1.2.3: resolution: {integrity: sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==} boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.18: + resolution: {integrity: sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==} + + brace-expansion@2.1.4: + resolution: {integrity: sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==} - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@5.0.9: + resolution: {integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==} + engines: {node: 20 || >=22} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -722,21 +1218,29 @@ packages: buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - cacheable-lookup@5.0.4: - resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} - engines: {node: '>=10.6.0'} + byte-counter@0.1.0: + resolution: {integrity: sha512-jheRLVMeUKrDBjVw2O5+k4EvR4t9wtxHL+bo/LxfkxsVeuGMy3a5SEGgXdAFA4FSzTrU8rQXQIrsZ3oBq5a0pQ==} + engines: {node: '>=20'} cacheable-lookup@7.0.0: resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} engines: {node: '>=14.16'} - cacheable-request@12.0.1: - resolution: {integrity: sha512-Yo9wGIQUaAfIbk+qY0X4cDQgCosecfBe3V9NSyeY4qPC2SAkbCS4Xj79VP8WOzitpJUZKc/wsRCYF5ariDIwkg==} + cacheable-request@13.0.19: + resolution: {integrity: sha512-SVXGH037+Mo1aIMO5B2UcleR43FGjFdN+M8JObSyEoQ2Mn4CODRWx28gN5jiTF0n5ItsgtIZfyargMNs8GX4kg==} engines: {node: '>=18'} - cacheable-request@7.0.4: - resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} - engines: {node: '>=8'} + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.9: + resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} callsites@4.2.0: resolution: {integrity: sha512-kfzR4zzQtAE9PC7CzZsjl3aBNbXWuXiSeOCdLcPpBfGW8YuCqQHcRPFDbr/BPVmd3EEPVpuFzLyuT/cUhPr4OQ==} @@ -750,10 +1254,6 @@ packages: resolution: {integrity: sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==} engines: {node: '>=0.10.0'} - caw@1.2.0: - resolution: {integrity: sha512-GIAlMoessjWW8p0mkStU4kMvV35toVCAyOWhUajk7O0d7wJI8F9TDjfrkSoO26b0d1QsnDLmw5I3X+yd6OKorQ==} - engines: {node: '>=0.10.0'} - caw@2.0.1: resolution: {integrity: sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==} engines: {node: '>=4'} @@ -766,30 +1266,17 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + chalk@6.0.0: + resolution: {integrity: sha512-2uNTXIuTTxk7ciZgAU1BQcgnchcG0xXnrs6jzkQfj9SsRa9M2s5zE8WT96hS6KmG4MzWHSrvH43DF1m4XRkrFg==} + engines: {node: '>=22'} change-file-extension@0.1.1: resolution: {integrity: sha512-lB0j9teu8JtDPDHRfU8pNH33w4wMu5bOaKoT4PxH+AKugBrIfpiJMTTKIm0TErNeJPkeQEgvH31YpccTwOKPRg==} engines: {node: '>=18'} - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - clone-response@1.0.3: - resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} - - clone-stats@0.0.1: - resolution: {integrity: sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==} - - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - - co@3.1.0: - resolution: {integrity: sha512-CQsjCRiNObI8AtTsNIBDRMQ4oMR83CzEswHYahClvul7gKk+lDQiOKv+5qh7LQWf5sh6jkZNispz/QlsZxyNgA==} + cliui@9.0.1: + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} @@ -798,23 +1285,20 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - - color-support@1.1.3: - resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} - hasBin: true - - color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} - colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commander@6.2.1: + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} + commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} @@ -823,17 +1307,9 @@ packages: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} - commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} - concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - concat-stream@1.6.2: - resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} - engines: {'0': node >= 0.8} - config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} @@ -844,32 +1320,26 @@ packages: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} + content-disposition@2.0.1: + resolution: {integrity: sha512-e+H0ZXHSWYrENhQzw1LPuP4oF5MzVKmDU6d3hxlvaPEYLLg62MxtQNPRx4SYSuYJSBUgnQIG4HIN2tEtNv7Dog==} + engines: {node: '>=18'} + convert-hrtime@5.0.0: resolution: {integrity: sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==} engines: {node: '>=12'} - convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - - cross-spawn@5.1.0: - resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} - - cross-spawn@6.0.5: - resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} - engines: {node: '>=4.8'} - - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - css-select@5.1.0: - resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + css-select@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} + + css-select@6.0.0: + resolution: {integrity: sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==} css-tree@2.2.1: resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} @@ -879,8 +1349,16 @@ packages: resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + css-tree@3.2.1: + resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} + engines: {node: '>= 6'} + + css-what@7.0.0: + resolution: {integrity: sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==} engines: {node: '>= 6'} csso@5.0.5: @@ -891,16 +1369,11 @@ packages: resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==} engines: {node: '>=0.10.0'} - cwebp-bin@8.0.0: - resolution: {integrity: sha512-j2s6jA84aG20lB0i/FBwqZGc8nHx4VASUK8OTDxy3xoUHoX/+pP6T15/TnWwhMcD0pZ05y5GgRPkurufOC8tnQ==} - engines: {node: ^14.13.1 || >=16.0.0} - hasBin: true - - dateformat@2.2.0: - resolution: {integrity: sha512-GODcnWq3YGoTnygPfi02ygEiRxqUxpJwuRHjdhJYuxpcZmDq4rjBiXYmbCCzStxo176ixfLT6i4NPwQooRySnw==} + dateformat@4.6.3: + resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} - debug@4.3.6: - resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -912,9 +1385,13 @@ packages: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} - decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} + decompress-response@10.0.0: + resolution: {integrity: sha512-oj7KWToJuuxlPr7VV0vabvxEIiqNMo+q0NueIiL3XhtwC6FVOX7Hr1c0C4eD0bmf7Zr+S/dSf2xvkH3Ad6sU3Q==} + engines: {node: '>=20'} + + decompress-response@3.3.0: + resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==} + engines: {node: '>=4'} decompress-tar@4.1.1: resolution: {integrity: sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==} @@ -936,22 +1413,14 @@ packages: resolution: {integrity: sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==} engines: {node: '>=4'} - deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - - defer-to-connect@2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} - detect-libc@2.0.3: - resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} - diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} @@ -962,17 +1431,13 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} - domutils@3.1.0: - resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} dot-prop@8.0.2: resolution: {integrity: sha512-xaBe6ZT4DHPkg0k4Ytbvn5xoxgpG0jOS1dYxSOwAHPuNLjP3/OzN0gH55SrLqpx8cBfSaVt91lXYkApjb+nYdQ==} engines: {node: '>=16'} - download@4.4.3: - resolution: {integrity: sha512-yOTsksXxUQ9b/p/HA3g9L97JZThcAKq8v3+Afwhf/kIoV0spu6pOvj+OKQbyGKYAwBGqSPbO+x1pCFSg5ce9OA==} - engines: {node: '>=0.10.0'} - download@6.2.5: resolution: {integrity: sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==} engines: {node: '>=4'} @@ -981,30 +1446,18 @@ packages: resolution: {integrity: sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==} engines: {node: '>=6'} - duplexer2@0.0.2: - resolution: {integrity: sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==} - - duplexer2@0.1.4: - resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} - - duplexify@3.7.1: - resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} - - each-async@1.1.1: - resolution: {integrity: sha512-0hJGub96skwr+sUojv7zQ0kc9i4jn3SwLiLk8Jr7KDz7aaaMzkN5UX3a/9ZhzC0OfZVyXHhlHcjC0KVOiKZ+HQ==} - engines: {node: '>=0.10.0'} - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + duplexer3@0.1.5: + resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} - end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} @@ -1014,28 +1467,36 @@ packages: resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} engines: {node: '>=18'} - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + es-object-atoms@1.1.2: + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} + engines: {node: '>= 0.4'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - escape-string-regexp@5.0.0: - resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} - engines: {node: '>=12'} + events-universal@1.0.1: + resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} exec-buffer@3.2.0: resolution: {integrity: sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==} engines: {node: '>=4'} - exec-series@1.0.3: - resolution: {integrity: sha512-VkmGmKa4oWkVBcPPfSzOEmry9ELWKk4oodvXpmtYmvGD82k/TnT0CGNw9VoxQLYGwNJR6fIaXpHUhBm4tNTSMQ==} - execa@0.7.0: resolution: {integrity: sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==} engines: {node: '>=4'} @@ -1056,19 +1517,14 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} - executable@1.1.0: - resolution: {integrity: sha512-qZLuUgqTqYRLdF8Gl56y/JhT+X15uPX6y0Vpmj0cF4SCwbswBPc6yxzr1nClQa+SwRQ5Sk9+Mxa3ZBX9t6aWzg==} - engines: {node: '>=0.10.0'} - hasBin: true + execa@9.6.1: + resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==} + engines: {node: ^18.19.0 || >=20.5.0} executable@4.1.1: resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} engines: {node: '>=4'} - expand-brackets@0.1.5: - resolution: {integrity: sha512-hxx03P2dJxss6ceIeri9cmYOT4SRs3Zk3afZwWpOsRqLqprhTR8u++SlC+sFGsQr7WGFPdMF7Gjc1njDLDK6UA==} - engines: {node: '>=0.10.0'} - ext-list@2.2.2: resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==} engines: {node: '>=0.10.0'} @@ -1077,54 +1533,60 @@ packages: resolution: {integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==} engines: {node: '>=4'} - extend-shallow@2.0.1: - resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} - engines: {node: '>=0.10.0'} - - extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - - extglob@0.3.2: - resolution: {integrity: sha512-1FOj1LOwn42TMrruOHGt18HemVnbwAmAak7krWk+wa93KXxGbK+2jpezm+ytJYDaBX0/SPLZFHKM7m+tKobWGg==} - engines: {node: '>=0.10.0'} + fast-copy@4.1.0: + resolution: {integrity: sha512-f5oNUvGAmBPLP85im9czQ7fVWh3RfcIIIzyXrcXKmCiWoDn+CRmfsoQN3jmE5J+UEquj4Ugc1woTaxD0oa37Gg==} - fancy-log@1.3.3: - resolution: {integrity: sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==} - engines: {node: '>= 0.10'} - - fast-equals@5.0.1: - resolution: {integrity: sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==} + fast-equals@5.4.1: + resolution: {integrity: sha512-DjlFSM5Pk9cGcL0q5QXl66eGzx0N6szNgaswwc5ZphlBohjTVJSnGgI+rJVOgOi65qUoQnDZN4nDqi33udtydQ==} engines: {node: '>=6.0.0'} - fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} - fast-xml-parser@4.4.1: - resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} - hasBin: true + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fastq@1.20.3: + resolution: {integrity: sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==} fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + figures@1.7.0: resolution: {integrity: sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==} engines: {node: '>=0.10.0'} + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + file-type@10.11.0: resolution: {integrity: sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==} engines: {node: '>=6'} - file-type@17.1.6: - resolution: {integrity: sha512-hlDw5Ev+9e883s0pwUsuuYNu4tD7GgpUnOvykjv1Gya0ZIjuKumthDRua90VUn6/nlRKAjcxLUnHNTIUWwWIiw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + file-type@21.3.4: + resolution: {integrity: sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==} + engines: {node: '>=20'} - file-type@19.3.0: - resolution: {integrity: sha512-mROwiKLZf/Kwa/2Rol+OOZQn1eyTkPB3ZTwC0ExY6OLFCbgxHYZvBm7xI77NvfZFMKBsmuXfmLJnD4eEftEhrA==} - engines: {node: '>=18'} + file-type@22.0.2: + resolution: {integrity: sha512-0H8TsCUGBLx+V5adH3EY52hTAcyLKbV1D4gq5cIOJ6DnQAHeV9Z2Hhuc5CoBX4YmvB2oL+JIC84z0qO7JsCoNw==} + engines: {node: '>=22'} file-type@3.9.0: resolution: {integrity: sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==} @@ -1146,33 +1608,21 @@ packages: resolution: {integrity: sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==} engines: {node: '>=6'} - filename-regex@2.0.1: - resolution: {integrity: sha512-BTCqyBaWBTsauvnHiE8i562+EdJj+oUpkqWp2R1iCoR8f6oo8STRu3of7WJJ0TqWtxN50a5YFpzYK4Jj9esYfQ==} - engines: {node: '>=0.10.0'} - - filename-reserved-regex@1.0.0: - resolution: {integrity: sha512-UZArj7+U+2reBBVCvVmRlyq9D7EYQdUtuNN+1iz7pF1jGcJ2L0TjiRCxsTZfj2xFbM4c25uGCUDpKTHA7L2TKg==} - engines: {node: '>=0.10.0'} - filename-reserved-regex@2.0.0: resolution: {integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==} engines: {node: '>=4'} - filename-reserved-regex@3.0.0: - resolution: {integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - filenamify@1.2.1: - resolution: {integrity: sha512-DKVP0WQcB7WaIMSwDETqImRej2fepPqvXQjaVib7LRZn9Rxn5UbvK2tYTqGf1A1DkIprQQkG4XSQXSOZp7Q3GQ==} - engines: {node: '>=0.10.0'} + filename-reserved-regex@4.0.1: + resolution: {integrity: sha512-qUet2faQFKvtvVUsEf7wCrTURwxBOIZpspsLHGifw9QCWk55ITE2FrG8XhfQqG/uxMA1xEGFVQbL+Yfm0O94+Q==} + engines: {node: '>=20'} filenamify@2.1.0: resolution: {integrity: sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==} engines: {node: '>=4'} - filenamify@5.1.1: - resolution: {integrity: sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA==} - engines: {node: '>=12.20'} + filenamify@7.0.3: + resolution: {integrity: sha512-Pf0dwHrWs1GcIK15ps304fmxp2AOcfNR6vOIMvCPEy6ZztKYxzRQHlOuPVWo2HRjbCLHaRTY+kD8n3RbQ0A/fw==} + engines: {node: '>=20'} fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} @@ -1182,42 +1632,29 @@ packages: resolution: {integrity: sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==} engines: {node: '>=0.10.0'} - find-versions@1.2.1: - resolution: {integrity: sha512-t0ciYD8XnoFVirFJN2niUJAQ/kyZU5UDSJobyekmiMPCBsYsWd4nd75e7HU2Xf4m+1Y7iLEo3fovNRNIV5MaDQ==} - engines: {node: '>=0.10.0'} - hasBin: true - find-versions@3.2.0: resolution: {integrity: sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==} engines: {node: '>=6'} - find-versions@5.1.0: - resolution: {integrity: sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==} - engines: {node: '>=12'} - - first-chunk-stream@1.0.0: - resolution: {integrity: sha512-ArRi5axuv66gEsyl3UuK80CzW7t56hem73YGNYxNWTGNKFJUadSb9Gu9SHijYEUi8ulQMf1bJomYNwSCPHhtTQ==} - engines: {node: '>=0.10.0'} - - for-in@1.0.2: - resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} - engines: {node: '>=0.10.0'} - - for-own@0.1.5: - resolution: {integrity: sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==} - engines: {node: '>=0.10.0'} + find-versions@6.0.0: + resolution: {integrity: sha512-2kCCtc+JvcZ86IGAz3Z2Y0A1baIz9fL31pH/0S1IqZr9Iwnjq8izfPtrCyQKO6TLMPELLsQMre7VDqeIKCsHkA==} + engines: {node: '>=18'} - foreground-child@3.2.1: - resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==} - engines: {node: '>=14'} + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} - form-data-encoder@4.0.2: - resolution: {integrity: sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==} + form-data-encoder@4.1.0: + resolution: {integrity: sha512-G6NsmEW15s0Uw9XnCg+33H3ViYRyiM0hMrMhhqQOR8NFc5GhYrI+6I3u7OTw7b91J2g8rtvMBZJDbcGb2YUniw==} engines: {node: '>= 18'} fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + fs-extra@11.4.0: + resolution: {integrity: sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==} + engines: {node: '>=14.14'} + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -1232,9 +1669,17 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-proxy@1.1.0: - resolution: {integrity: sha512-3cJ+77wC52qD2PqWNXtB2HkU6tQXc/X3hSMtSN0Y8c8nbYMMxF7vpsjH4H0iSt+28l/NK13DKl8iKAVGkqDFnA==} - engines: {node: '>=0.10.0'} + get-east-asian-width@1.6.0: + resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} + engines: {node: '>=18'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} get-proxy@2.1.0: resolution: {integrity: sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==} @@ -1256,10 +1701,6 @@ packages: resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} engines: {node: '>=6'} - get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -1272,82 +1713,41 @@ packages: resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} engines: {node: '>=18'} - giflossy@3.0.41: - resolution: {integrity: sha512-MwUixKaFP/+3ytW+2Ct0jHSEoBew/UW029yzpsMAWnhUd20KeXtLvH3HfSEkD11wrYpWwDdznqWsFJfX5D422g==} - engines: {node: '>=0.10.0'} + gifsicle@5.3.0: + resolution: {integrity: sha512-FJTpgdj1Ow/FITB7SVza5HlzXa+/lqEY0tHQazAJbuAdvyJtkH4wIdsR2K414oaTwRXHFLLF+tYbipj+OpYg+Q==} + engines: {node: '>=10'} hasBin: true - glob-base@0.3.0: - resolution: {integrity: sha512-ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA==} - engines: {node: '>=0.10.0'} - - glob-parent@2.0.0: - resolution: {integrity: sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==} - - glob-parent@3.1.0: - resolution: {integrity: sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==} - glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} - glob-stream@5.3.5: - resolution: {integrity: sha512-piN8XVAO2sNxwVLokL4PswgJvK/uQ6+awwXUVRTGF+rRfgCZpn4hOqxiRuTEbU/k3qgKl0DACYQ/0Sge54UMQg==} - engines: {node: '>= 0.10'} - - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - hasBin: true - - glob@5.0.15: - resolution: {integrity: sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==} - deprecated: Glob versions prior to v9 are no longer supported + glob@13.0.6: + resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} + engines: {node: 18 || 20 || >=22} glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - globby@14.0.2: - resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==} + globby@14.1.0: + resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} engines: {node: '>=18'} - glogg@1.0.2: - resolution: {integrity: sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==} - engines: {node: '>= 0.10'} - - got@11.8.6: - resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} - engines: {node: '>=10.19.0'} + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} - got@14.4.2: - resolution: {integrity: sha512-+Te/qEZ6hr7i+f0FNgXx/6WQteSM/QqueGvxeYQQFm0GDfoxLVJ/oiwUKYMTeioColWUTdewZ06hmrBjw6F7tw==} + got@14.6.6: + resolution: {integrity: sha512-QLV1qeYSo5l13mQzWgP/y0LbMr5Plr5fJilgAIwgnwseproEbtNym8xpLsDzeZ6MWXgNE6kdWGBjdh3zT/Qerg==} engines: {node: '>=20'} - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - growly@1.3.0: - resolution: {integrity: sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==} - - gulp-decompress@1.2.0: - resolution: {integrity: sha512-ChTv+4/4BwAdQLUgQoAvLFjYFvxYF6p9Mmf/b19/Lp7yNCvb8+KRkdXV8Gd7XErxtrEh8XDCCVon3DgqW4TgfA==} - engines: {node: '>=0.10.0'} - - gulp-rename@1.4.0: - resolution: {integrity: sha512-swzbIGb/arEoFK89tPY58vg3Ok1bw+d35PfUNwWqdo7KM4jkmuGA78JiDNqR+JeZFaeeHnRg9N7aihX3YPmsyg==} + got@7.1.0: + resolution: {integrity: sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==} engines: {node: '>=4'} - gulp-sourcemaps@1.6.0: - resolution: {integrity: sha512-NjRy6+Qb5K1xbwOvPviD3uA4KSq2zsalPL+4vxPQPuL+kKzHjXJL10/kLaESic3LmBto8VIBHr3gIN3F9AjnhA==} - - gulp-util@3.0.8: - resolution: {integrity: sha512-q5oWPc12lwSFS9h/4VIjG+1NuNDlJ48ywV2JKItY4Ycc/n1fXJeYPVQsfu5ZrhQi7FGSDBalwUCLar/GyHXKGw==} - engines: {node: '>=0.10'} - deprecated: gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5 - - gulplog@1.0.0: - resolution: {integrity: sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==} - engines: {node: '>= 0.10'} + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} has-ansi@2.0.0: resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} @@ -1357,20 +1757,30 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - has-gulplog@0.1.0: - resolution: {integrity: sha512-+F4GzLjwHNNDEAJW2DC1xXfEoPkRDmUdJ7CBYw4MpqtDwOnqdImJl7GWlpqx+Wko6//J8uKTnIe4wZSv7yCqmw==} - engines: {node: '>= 0.10'} + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} has-symbol-support-x@1.4.2: resolution: {integrity: sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==} + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + has-to-string-tag-x@1.4.1: resolution: {integrity: sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==} - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} engines: {node: '>= 0.4'} + help-me@5.0.0: + resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} + hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -1378,16 +1788,13 @@ packages: resolution: {integrity: sha512-fwOzPwhRlfQ7nAAOFwLoN43BVqGeWs66DtSL7oeMAgz3EirXShH3g/tBwNTmpT9zEmIWO/OMHfuC+JqDdlgloQ==} engines: {node: '>=0.10.0'} - htmlhint@1.1.4: - resolution: {integrity: sha512-tSKPefhIaaWDk/vKxAOQbN+QwZmDeJCq3bZZGbJMoMQAfTjepudC+MkuT9MOBbuQI3dLLzDWbmU7fLV3JASC7Q==} + htmlhint@1.9.2: + resolution: {integrity: sha512-PweWSPA1Pb+AVFIOSpIGu5KhLdmtk/uf/0CpjvrDf6XUWmdTyqUljlylwSxQ0AWLvPGcBxK2n8uISsI4lCOkBQ==} + engines: {node: '>=18'} hasBin: true - http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - - http2-wrapper@1.0.3: - resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} - engines: {node: '>=10.19.0'} + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} http2-wrapper@2.2.1: resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} @@ -1405,25 +1812,34 @@ packages: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} - identifier-regex@1.0.0: - resolution: {integrity: sha512-Rcy5cjBOM9iTR+Vwy0Llyip9u0cA99T1yiWOhDW/+PDaTQhyski0tMovsipQ/FRNDkudjLWusJ/IMVIlG5WZnQ==} + human-signals@8.0.1: + resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} + engines: {node: '>=18.18.0'} + + identifier-regex@1.1.0: + resolution: {integrity: sha512-SLX4H/vtcYlYnL7XqnuJKHU7Z8517TgsW9nmQiGOgMCjQ8V/deLYu6bEmbGoXe7WMMhc9+EUGyFFneHja8KabA==} engines: {node: '>=18'} ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + ignore@7.0.8: + resolution: {integrity: sha512-YYNsSlXBjMk92SKnkwvB5LOVSa6OznlFUGcsvrFgNJbJCd0M1XKeFVRc8ZByeCqz32FivYNHJVooLmdqrmvp/Q==} engines: {node: '>= 4'} - imagemin-giflossy@5.1.10: - resolution: {integrity: sha512-oinoVmEHClkGEzDGPhNLPMgBCocd54JSbK8n2C/sj9GZCYuNMD0AT94tVGc3fwP1pSbVGcII/CdHas0XeagRuw==} - engines: {node: '>=4'} + image-dimensions@2.5.1: + resolution: {integrity: sha512-It7CkTNp7IYA8jhvGgz8K18OAbHF3/Juk8RNEyTyMFfolJOIU1Y2wGDnzDQPbGCjyxVF/++pwIZE0BKJUEOb1g==} + engines: {node: '>=18'} + hasBin: true - imagemin-jpegtran@7.0.0: - resolution: {integrity: sha512-MJoyTCW8YjMJf56NorFE41SR/WkaGA3IYk4JgvMlRwguJEEd3PnP9UxA8Y2UWjquz8d+On3Ds/03ZfiiLS8xTQ==} + imagemin-gifsicle@7.0.0: + resolution: {integrity: sha512-LaP38xhxAwS3W8PFh4y5iQ6feoTSF+dTAXFRUEYQWYst6Xd+9L/iPk34QGgK/VO/objmIlmq9TStGfVY2IcHIA==} engines: {node: '>=10'} + imagemin-jpegtran@8.0.0: + resolution: {integrity: sha512-iGaaImltX4oJ1lmS9jb7Qw3NRusQnVBr7hYJuhyL0CHRV42pDMkIGBVCHKA9j9mcWHnO5Ryu3LV7t4fU4sC4xg==} + engines: {node: '>=18'} + imagemin-mozjpeg@10.0.0: resolution: {integrity: sha512-DK85QNOjS3/GzWYfNB3CACMZD10sIQgFDv1+WTOnZljgltQTEyATjdyUVyjKu5q4sCESQdwvwq7WEZzJ5fFjlg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -1432,16 +1848,16 @@ packages: resolution: {integrity: sha512-kt0LFxyv7sBxUbZyvt+JXoU0HvSnmTJkEW32rZPQ9d7AQJPVh0vkz9mGkvbX0yntY2zW/3N20Yw69PBSt1UQzw==} engines: {node: '>=18'} - imagemin-webp@8.0.0: - resolution: {integrity: sha512-yN6kNKir6T/U3AtP3uLHrLn9XYafk2m49EbUqLCQ3GPRRLRs+4pUQxxaHz+lnTDM+LQpkSjGQaFVcSgYqvW3dQ==} - engines: {node: '>=14.16'} + imagemin-svgo@12.0.0: + resolution: {integrity: sha512-6f2bS/QTBsGafHCvG3FPxe3efHWq7EryznpDPg1PnfhnD4JO90sKrzW4W4AcN2HoWBsZl4yqiBWw/qxIWiPHJA==} + engines: {node: '>=20'} imagemin-zopfli@7.0.0: resolution: {integrity: sha512-nmffj58rVb0O3AlCZLBBVKGyZ5MYPZZfKxUhvA7bwPGougHl/F7EUKSse9jkgXjdvtJYG2ojJeh5N67mYgBM9g==} engines: {node: '>=10'} - imagemin@9.0.0: - resolution: {integrity: sha512-oFlmioXTIrDCNYiKUVPjzUzm8M/7X74WEO6v8NFjn3ZtxjArdVJiRRdbPpq/OG4BdwaHMUz8ej9Fp4AcaDzMnA==} + imagemin@9.0.1: + resolution: {integrity: sha512-UoHOfynN8QeqRoUGunn6ilMnLpJ+utbmleP2ufcFqaGal8mY/PeOpV43N31uqtb+CBMFqQ7hxgKzIaAAnmcrdA==} engines: {node: '>=18'} import-lazy@3.1.0: @@ -1462,13 +1878,8 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - interpret@1.4.0: - resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} - engines: {node: '>= 0.10'} - - ip-regex@1.0.3: - resolution: {integrity: sha512-HjpCHTuxbR/6jWJroc/VN+npo5j0T4Vv2TAI5qdEHQx7hsL767MeccGFSsLtF694EiZKTSEqgoeU6DtGFCcuqQ==} - engines: {node: '>=0.10.0'} + inspect-with-kind@1.0.5: + resolution: {integrity: sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g==} irregular-plurals@1.4.0: resolution: {integrity: sha512-kniTIJmaZYiwa17eTtWIfm0K342seyugl6vuC8DiiyiRAJWAVlLkqGCI0Im0neo0TkXw+pRcKaBPRdcKHnQJ6Q==} @@ -1477,39 +1888,13 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - - is-buffer@1.1.6: - resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} - - is-core-module@2.15.0: - resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-cwebp-readable@3.0.0: - resolution: {integrity: sha512-bpELc7/Q1/U5MWHn4NdHI44R3jxk0h9ew9ljzabiRl70/UIjL/ZAqRMb52F5+eke/VC8yTiv4Ewryo1fPWidvA==} - - is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - - is-dotfile@1.0.3: - resolution: {integrity: sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg==} - engines: {node: '>=0.10.0'} - - is-equal-shallow@0.1.3: - resolution: {integrity: sha512-0EygVC5qPvIyb+gSz7zdD5/AAoS6Qrx1e//6N4yv4oNm30kqvdmG66oZFWVlQHUWe5OjP08FuTw2IdT0EOTcYA==} - engines: {node: '>=0.10.0'} - - is-extendable@0.1.1: - resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} - engines: {node: '>=0.10.0'} - - is-extglob@1.0.0: - resolution: {integrity: sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==} - engines: {node: '>=0.10.0'} + is-core-module@2.16.2: + resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} + engines: {node: '>= 0.4'} is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} @@ -1519,34 +1904,18 @@ packages: resolution: {integrity: sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==} engines: {node: '>=0.10.0'} - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-gif@1.0.0: - resolution: {integrity: sha512-WDzHvXD3xfQ5einLRHRH7iReMuPwuXImHikxQeTWP09kGIv2mf2ZM63e9YHVSq9kEgjJuxRSp5AzH8Hga0+lNw==} - engines: {node: '>=0.10.0'} - - is-glob@2.0.1: - resolution: {integrity: sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==} - engines: {node: '>=0.10.0'} - - is-glob@3.1.0: - resolution: {integrity: sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==} - engines: {node: '>=0.10.0'} + is-gif@3.0.0: + resolution: {integrity: sha512-IqJ/jlbw5WJSNfwQ/lHEDXF8rxhRgF6ythk2oiEvhpG29F704eX9NO6TvPfMiq9DrbwgcEDnETYNcZDPewQoVw==} + engines: {node: '>=6'} is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - is-identifier@1.0.1: - resolution: {integrity: sha512-HQ5v4rEJ7REUV54bCd2l5FaD299SGDEn2UPoVXaTHAyGviLq2menVUD2udi3trQ32uvB6LdAh/0ck2EuizrtpA==} + is-identifier@1.1.0: + resolution: {integrity: sha512-NhOds0mDx9lJu+1lBRO0xbwFo5nobA7GCk/0e5xjr6+6XugX985+0OyGX35BNrTkPAsdLcIKg02HUQJOK8D8kw==} engines: {node: '>=18'} - is-jpg@2.0.0: - resolution: {integrity: sha512-ODlO0ruzhkzD3sdynIainVP5eoOFNN85rxA1+cwwnPe4dKyX0r5+hxNO5XpCrxlHcmb9vkOit9mhRD2JVuimHg==} - engines: {node: '>=6'} - is-jpg@3.0.0: resolution: {integrity: sha512-Vcd67KWHZblEKEBrtP25qLZ8wN9ICoAhl1pKUqD7SM7hf2qtuRl7loDgP5Zigh2oN/+7uj+KVyC0eRJvgOEFeQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -1558,10 +1927,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-obj@1.0.1: - resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} - engines: {node: '>=0.10.0'} - is-object@1.0.2: resolution: {integrity: sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==} @@ -1569,6 +1934,10 @@ packages: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + is-png@2.0.0: resolution: {integrity: sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g==} engines: {node: '>=8'} @@ -1577,12 +1946,8 @@ packages: resolution: {integrity: sha512-8TqC8+bdsm3YkpI2aECCDycFDl1hTB0HMVRnP3xRRa3Tqx2oVE7sBi1G6CuO9IqEyWSzbBZr1mGqdb3it9h/pg==} engines: {node: '>=12'} - is-posix-bracket@0.1.1: - resolution: {integrity: sha512-Yu68oeXJ7LeWNmZ3Zov/xg/oDBnBK2RNxwYY1ilNJX+tKKZqgPK+qOn/Gs9jEu66KDY9Netf5XLKNGzas/vPfQ==} - engines: {node: '>=0.10.0'} - - is-primitive@2.0.0: - resolution: {integrity: sha512-N3w1tFaRfk3UrPfqeRyD+GYDASU3W5VinKhlORy8EWVf/sIdDL9GAcew85XmktCfH+ngG7SRXEVDoO18WMdB/Q==} + is-retry-allowed@1.2.0: + resolution: {integrity: sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==} engines: {node: '>=0.10.0'} is-stream@1.1.0: @@ -1601,129 +1966,69 @@ packages: resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} engines: {node: '>=18'} - is-svg@5.0.1: - resolution: {integrity: sha512-mLYxDsfisQWdS4+gSblAwhATDoNMS/tx8G7BKA+aBIf7F0m1iUwMvuKAo6mW4WMleQAEE50I1Zqef9yMMfHk3w==} - engines: {node: '>=14.16'} + is-svg@6.1.0: + resolution: {integrity: sha512-i7YPdvYuSCYcaLQrKwt8cvKTlwHcdA6Hp8N9SO3Q5jIzo8x6kH3N47W0BvPP7NdxVBmIHx7X9DK36czYYW7lHg==} + engines: {node: '>=20'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} - is-url@1.2.4: - resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} is-utf8@0.2.1: resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} - is-valid-glob@0.3.0: - resolution: {integrity: sha512-CvG8EtJZ8FyzVOGPzrDorzyN65W1Ld8BVnqshRCah6pFIsprGx3dKgFtjLn/Vw9kGqR4OlR84U7yhT9ZVTyWIQ==} - engines: {node: '>=0.10.0'} - - is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - - isarray@0.0.1: - resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} - isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + isexe@4.0.0: + resolution: {integrity: sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==} + engines: {node: '>=20'} + isurl@1.0.0: resolution: {integrity: sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==} engines: {node: '>= 4'} - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - - jpegtran-bin@5.0.2: - resolution: {integrity: sha512-4FSmgIcr8d5+V6T1+dHbPZjaFH0ogVyP4UVsE+zri7S9YLO4qAT2our4IN3sW3STVgNTbqPermdIgt2XuAJ4EA==} + joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} + + jpegtran-bin@7.0.0: + resolution: {integrity: sha512-8ecI4vXIV7eI2+nzRQsHAVaQVBGDotUY76CJZhlYaBAljBnK/509+sGGCs8eJyiS5N4tOcYZS+8Q4KgzorqlBA==} + engines: {node: ^14.13.1 || >=16.0.0} hasBin: true jshint-stylish@2.2.1: resolution: {integrity: sha512-7ySPIM1/gONcJ1isbd1IPKuBzQ/iDTvofILFSsIaMrWZUO7OJkV9kdU0O6O1pxM+bNj/9mbJ31LyXgQgOhIa0A==} engines: {node: '>=0.10.0'} - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + jsonfile@6.2.1: + resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} junk@4.0.1: resolution: {integrity: sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==} engines: {node: '>=12.20'} - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + keyv@5.6.0: + resolution: {integrity: sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==} - kind-of@3.2.2: - resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - lazy-req@1.1.0: - resolution: {integrity: sha512-Vn/JuGaYykbelAVNAhfVJxuwHQCOSNE6mqMtD+gnd+QORlAHwWVmVFqQga3yWt84G5vAwEwpT6sAsZ+tgJ88/Q==} - engines: {node: '>=0.10.0'} - - lazystream@1.0.1: - resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} - engines: {node: '>= 0.6.3'} - load-json-file@1.1.0: resolution: {integrity: sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==} engines: {node: '>=0.10.0'} - lodash._basecopy@3.0.1: - resolution: {integrity: sha512-rFR6Vpm4HeCK1WPGvjZSJ+7yik8d8PVUdCJx5rT2pogG4Ve/2ZS7kfmO5l5T2o5V2mqlNIfSF5MZlr1+xOoYQQ==} - - lodash._basetostring@3.0.1: - resolution: {integrity: sha512-mTzAr1aNAv/i7W43vOR/uD/aJ4ngbtsRaCubp2BfZhlGU/eORUjg/7F6X0orNMdv33JOrdgGybtvMN/po3EWrA==} - - lodash._basevalues@3.0.0: - resolution: {integrity: sha512-H94wl5P13uEqlCg7OcNNhMQ8KvWSIyqXzOPusRgHC9DK3o54P6P3xtbXlVbRABG4q5gSmp7EDdJ0MSuW9HX6Mg==} - - lodash._getnative@3.9.1: - resolution: {integrity: sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==} - - lodash._isiterateecall@3.0.9: - resolution: {integrity: sha512-De+ZbrMu6eThFti/CSzhRvTKMgQToLxbij58LMfM8JnYDNSOjkjTCIaa8ixglOeGh2nyPlakbt5bJWJ7gvpYlQ==} - - lodash._reescape@3.0.0: - resolution: {integrity: sha512-Sjlavm5y+FUVIF3vF3B75GyXrzsfYV8Dlv3L4mEpuB9leg8N6yf/7rU06iLPx9fY0Mv3khVp9p7Dx0mGV6V5OQ==} - - lodash._reevaluate@3.0.0: - resolution: {integrity: sha512-OrPwdDc65iJiBeUe5n/LIjd7Viy99bKwDdk7Z5ljfZg0uFRFlfQaCy9tZ4YMAag9WAZmlVpe1iZrkIMMSMHD3w==} - - lodash._reinterpolate@3.0.0: - resolution: {integrity: sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==} - - lodash._root@3.0.1: - resolution: {integrity: sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==} - - lodash.escape@3.2.0: - resolution: {integrity: sha512-n1PZMXgaaDWZDSvuNZ/8XOcYO2hOKDqZel5adtR30VKQAtoWs/5AOeFA0vPV8moiPzlqe7F4cP2tzpFewQyelQ==} - - lodash.isarguments@3.1.0: - resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} - - lodash.isarray@3.0.4: - resolution: {integrity: sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==} - - lodash.isequal@4.5.0: - resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} - - lodash.keys@3.1.2: - resolution: {integrity: sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==} - - lodash.restparam@3.6.1: - resolution: {integrity: sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw==} - - lodash.template@3.6.2: - resolution: {integrity: sha512-0B4Y53I0OgHUJkt+7RmlDFWKjVAI/YUpWNiL9GQz5ORDr4ttgfQGo+phBWKFLJbBdtOwgMuUkdOHOnPg45jKmQ==} - - lodash.templatesettings@3.1.1: - resolution: {integrity: sha512-TcrlEr31tDYnWkHFWDCV3dHYroKEXpJZ2YJYvJdhN+y4AkWMDZ5I4I8XDtUKqSAyG81N7w+I1mFEJtcED+tGqQ==} - log-symbols@1.0.2: resolution: {integrity: sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ==} engines: {node: '>=0.10.0'} @@ -1740,9 +2045,9 @@ packages: resolution: {integrity: sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==} engines: {node: '>=0.10.0'} - lowercase-keys@2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} - engines: {node: '>=8'} + lowercase-keys@1.0.1: + resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} + engines: {node: '>=0.10.0'} lowercase-keys@3.0.0: resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} @@ -1753,36 +2058,39 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@11.5.2: + resolution: {integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==} + engines: {node: 20 || >=22} - lru-cache@4.1.5: - resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + make-asynchronous@1.1.0: + resolution: {integrity: sha512-ayF7iT+44LXdxJLTrTd3TLQpFDDvPCBxXxbv+pMUSuHA5Q8zyAfwkRP6aHHwNVFBUFWtxAHqwNJxF8vMZLAbVg==} + engines: {node: '>=18'} make-dir@1.3.0: resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==} engines: {node: '>=4'} - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - map-obj@1.0.1: resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} engines: {node: '>=0.10.0'} + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + mdn-data@2.0.28: resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + mdn-data@2.27.1: + resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} + meow@3.7.0: resolution: {integrity: sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==} engines: {node: '>=0.10.0'} - merge-stream@1.0.1: - resolution: {integrity: sha512-e6RM36aegd4f+r8BZCcYXlO2P3H6xbUM6ktL2Xmf45GAOit9bI4z6/3VU7JwllVO1L7u0UDSg/EhzQ5lmMLolA==} - merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -1790,16 +2098,12 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - micromatch@2.3.11: - resolution: {integrity: sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA==} - engines: {node: '>=0.10.0'} - - micromatch@4.0.7: - resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} - mime-db@1.53.0: - resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} engines: {node: '>= 0.6'} mimic-fn@2.1.0: @@ -1814,82 +2118,45 @@ packages: resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} engines: {node: '>=4'} - mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} - mimic-response@4.0.0: resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@10.2.6: + resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==} + engines: {node: 18 || 20 || >=22} - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} engines: {node: '>=16 || 14 >=14.17'} minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} - mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true - mozjpeg@8.0.0: resolution: {integrity: sha512-Ca2Yhah9hG0Iutgsn8MOrAl37P9ThnKsJatjXoWdUO+8X8GeG/6ahvHZrTyqvbs6leMww1SauWUCao/L9qBuFQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - multipipe@0.1.2: - resolution: {integrity: sha512-7ZxrUybYv9NonoXgwoOqtStIu18D1c3eFZj27hqgf5kBrBF8Q+tE8V0MW8dKM5QLkQPh1JhhbKgHLY9kifov4Q==} + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - nice-napi@1.0.2: - resolution: {integrity: sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==} - os: ['!win32'] - - nice-try@1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - - node-addon-api@3.2.1: - resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} - - node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - - node-gyp-build@4.8.1: - resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} - hasBin: true - - node-notifier@10.0.1: - resolution: {integrity: sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==} + node-sarif-builder@3.2.0: + resolution: {integrity: sha512-kVIOdynrF2CRodHZeP/97Rh1syTUHBNiw17hUCIVhlhEsWlfJm19MuO56s4MdKbr22xWx6mzMnNAgXzVlIYM9Q==} + engines: {node: '>=18'} normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - normalize-path@2.1.1: - resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} - engines: {node: '>=0.10.0'} - - normalize-url@6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} - - normalize-url@8.0.1: - resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==} + normalize-url@8.1.1: + resolution: {integrity: sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==} engines: {node: '>=14.16'} npm-conf@1.1.3: @@ -1908,28 +2175,24 @@ packages: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} + nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - object-assign@3.0.0: - resolution: {integrity: sha512-jHP15vXVGeVh1HuaA2wY6lxk+whK/x4KBG88VXeRma7CCun7iGD5qPc4eYykQ9sdQvg8jkwFKsSxHln2ybW3xQ==} - engines: {node: '>=0.10.0'} - object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - object.omit@2.0.1: - resolution: {integrity: sha512-UiAM5mhmIuKLsOvrL+B0U2d1hXHF3bFYWIuH1LMpuV2EJEHG1Ntz06PgLEHjm6VFd87NpH8rastvPoyv6UW2fA==} - engines: {node: '>=0.10.0'} + on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - onetime@1.1.0: - resolution: {integrity: sha512-GZ+g4jayMqzCRMgB2sol7GiCLjKfS1PINkjmx8spcKce1LiVqcbQreXwqs2YAFXC6R03VIG28ZS31t8M866v6A==} - engines: {node: '>=0.10.0'} - onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -1938,31 +2201,20 @@ packages: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} - ordered-read-streams@0.3.0: - resolution: {integrity: sha512-xQvd8qvx9U1iYY9aVqPpoF5V9uaWJKV6ZGljkh/jkiNX0DiQsjbWvRumbh10QTMDE8DheaOEU8xi0szbrgjzcw==} - - os-filter-obj@1.0.3: - resolution: {integrity: sha512-rohpWX8f46ASEOR77j8ZlJ2j5Rzg0j7gxC73ceZaDeMyE6H3nXnwgEjgg5ySlcT0bDuPUw7qcdWtd8Pzp/FJxg==} - engines: {node: '>=0.10.0'} - os-filter-obj@2.0.0: resolution: {integrity: sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==} engines: {node: '>=4'} - os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - ow@2.0.0: resolution: {integrity: sha512-ESUigmGrdhUZ2nQSFNkeKSl6ZRPupXzprMs3yF9DYlNVpJ8XAjM/fI9RUZxA7PI1K9HQDCCvBo1jr/GEIo9joQ==} engines: {node: '>=18'} - oxc-resolver@1.10.2: - resolution: {integrity: sha512-NIbwVqoU8Bhl7PVtItHCg+VFFokIDwBgIgFUwFG2Y8ePhxftFh5xG+KLar5PLWXlCP4WunPIuXD3jr3v6/MfRw==} + oxc-resolver@11.24.2: + resolution: {integrity: sha512-FY91FiDBj7ls5MsFS9jN3tjz2o0/zsdSsymlakySaBwVJZorHhkWyICLZMKxlu1R9vYo+sd3z1jwb4J8x7bNDw==} - p-cancelable@2.1.1: - resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} - engines: {node: '>=8'} + p-cancelable@0.3.0: + resolution: {integrity: sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==} + engines: {node: '>=4'} p-cancelable@4.0.1: resolution: {integrity: sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==} @@ -1976,6 +2228,10 @@ packages: resolution: {integrity: sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==} engines: {node: '>=6'} + p-event@6.0.1: + resolution: {integrity: sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==} + engines: {node: '>=16.17'} + p-finally@1.0.0: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} @@ -2000,23 +2256,17 @@ packages: resolution: {integrity: sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==} engines: {node: '>=4'} - package-json-from-dist@1.0.0: - resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} - - parse-glob@3.0.4: - resolution: {integrity: sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==} - engines: {node: '>=0.10.0'} + p-timeout@6.1.4: + resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} + engines: {node: '>=14.16'} parse-json@2.2.0: resolution: {integrity: sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==} engines: {node: '>=0.10.0'} - parse-node-version@1.0.1: - resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} - engines: {node: '>= 0.10'} - - path-dirname@1.0.2: - resolution: {integrity: sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==} + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} path-exists@2.1.0: resolution: {integrity: sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==} @@ -2041,32 +2291,32 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} + path-scurry@2.0.2: + resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} + engines: {node: 18 || 20 || >=22} path-type@1.1.0: resolution: {integrity: sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==} engines: {node: '>=0.10.0'} - path-type@5.0.0: - resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} - engines: {node: '>=12'} - - peek-readable@5.1.3: - resolution: {integrity: sha512-kCsc9HwH5RgVA3H3VqkWFyGQwsxUxLdiSX1d5nqAm7hnMFjNFX1VhBLmJoUY0hZNc8gmDNgBkLjfhiWPsziXWA==} - engines: {node: '>=14.16'} + path-type@6.0.0: + resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} + engines: {node: '>=18'} pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} engines: {node: '>=8.6'} + picomatch@4.0.7: + resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} + engines: {node: '>=12'} + pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} @@ -2087,12 +2337,26 @@ packages: resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} engines: {node: '>=0.10.0'} - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + pino-abstract-transport@3.0.0: + resolution: {integrity: sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==} + + pino-pretty@13.1.3: + resolution: {integrity: sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg==} + hasBin: true + + pino-std-serializers@7.1.0: + resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==} + + pino@10.3.1: + resolution: {integrity: sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==} + hasBin: true + + pirates@4.0.7: + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} - piscina@4.6.1: - resolution: {integrity: sha512-z30AwWGtQE+Apr+2WBZensP2lIvwoaMcOPkQlIEmSGMJNUvaYACylPYrQM6wSdUNJlnDVMSpLv7xTMJqlVshOA==} + piscina@4.9.4: + resolution: {integrity: sha512-RyBDr2VheQ8ZfH3N8SzQZHztqVyOtadTwLnUYof6gdj5161/eu2wNhCbGl5GHnNKDpnkicJYpKtL2J+y/gk6XA==} plur@2.1.2: resolution: {integrity: sha512-WhcHk576xg9y/iv6RWOuroZgsqvCbJN+XGvAypCJwLAYs2iWDp5LUmvaCdV6JR2O0SMBf8l6p7A94AyLCFVMlQ==} @@ -2103,33 +2367,40 @@ packages: engines: {node: '>=18'} hasBin: true + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + prepend-http@1.0.4: + resolution: {integrity: sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==} + engines: {node: '>=0.10.0'} + + pretty-ms@9.3.1: + resolution: {integrity: sha512-HzMy3Geq23nVALD/M2LliU+F+M+gVNsvkQWWqeBZ8HDiCgzo6YPJ/Omrmtq24EFrIsk0a3EkQGEd7bDOo+IhGA==} + engines: {node: '>=18'} + process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + process-warning@5.1.0: + resolution: {integrity: sha512-jQSaVHsPgtyw60e1rQ/A+/ArPEj/S8pS/vFnyGa/gYFXrKk/6RuDkoqVDQ5NI5MmS01698ltlAk0NoDBNLujRw==} + proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} - pseudomap@1.0.2: - resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} - - pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + pump@3.0.4: + resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + quick-lru@5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} - rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - - read-all-stream@3.1.0: - resolution: {integrity: sha512-DI1drPHbmBcUDWrJ7ull/F2Qb8HkwBncVx8/RpKYFSIACYaVRQReISYPdZz/mt1y1+qMCOrfReTopERmaxtP6w==} - engines: {node: '>=0.10.0'} - read-pkg-up@1.0.1: resolution: {integrity: sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==} engines: {node: '>=0.10.0'} @@ -2138,75 +2409,47 @@ packages: resolution: {integrity: sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==} engines: {node: '>=0.10.0'} - readable-stream@1.0.34: - resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} - - readable-stream@1.1.14: - resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} - readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - - readable-web-to-node-stream@3.0.2: - resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==} - engines: {node: '>=8'} + real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} - rechoir@0.6.2: - resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} - engines: {node: '>= 0.10'} + real-require@1.0.0: + resolution: {integrity: sha512-P4nbQYQfePJxRSmY+v/KINxVucm4NF3p3s7pJveMTtom52FR4YGltUQLB8idDXwDDWW+eYrWDFbuzUnjoWHF7g==} redent@1.0.0: resolution: {integrity: sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==} engines: {node: '>=0.10.0'} - regex-cache@0.4.4: - resolution: {integrity: sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==} - engines: {node: '>=0.10.0'} - - remove-trailing-separator@1.1.0: - resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} - repeating@2.0.1: resolution: {integrity: sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==} engines: {node: '>=0.10.0'} - replace-ext@0.0.1: - resolution: {integrity: sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ==} - engines: {node: '>= 0.4'} - - replace-in-file@8.1.0: - resolution: {integrity: sha512-ySYfKDH6uFVC4Wt6DcZ2UX0UMCqE7xhWGVqje/15WFVwHxnel1gdZjV8nOW9Nms6h/yQE2MWyeIToeqFLZkp4w==} - engines: {node: '>=18'} + replace-in-file@9.0.0: + resolution: {integrity: sha512-ACFXyc5ninRlHSVw8ZRht0Fd/BKoje8mpbIDZjbOU/LCaaoZzD9uo3zDQNkULDhcrvhXyL38FCcF1D2SiHM6Vg==} + engines: {node: '>=22.12.0'} hasBin: true - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - reserved-identifiers@1.0.0: - resolution: {integrity: sha512-h0bP2Katmvf3hv4Z3WtDl4+6xt/OglQ2Xa6TnhZ/Rm9/7IH1crXQqMwD4J2ngKBonVv+fB55zfGgNDAmsevLVQ==} + reserved-identifiers@1.2.0: + resolution: {integrity: sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==} engines: {node: '>=18'} resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + resolve@1.22.12: + resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} + engines: {node: '>= 0.4'} hasBin: true - responselike@2.0.1: - resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} - - responselike@3.0.0: - resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} - engines: {node: '>=14.16'} + responselike@4.0.2: + resolution: {integrity: sha512-cGk8IbWEAnaCpdAt1BHzJ3Ahz5ewDJa0KseTsE3qIRMJ3C698W8psM7byCeWVpd/Ha7FUYzuRVzXoKoM6nRUbA==} + engines: {node: '>=20'} - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} rimraf@2.7.1: @@ -2223,10 +2466,25 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + + sax@1.6.1: + resolution: {integrity: sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==} + engines: {node: '>=11.0.0'} + + secure-json-parse@4.1.0: + resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==} + seek-bzip@1.0.6: resolution: {integrity: sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==} hasBin: true + seek-bzip@2.0.0: + resolution: {integrity: sha512-SMguiTnYrhpLdk3PwfzHeotrcwi8bNV4iemL9tx9poR/yeaMYwB9VzR1w7b57DuWpuqR8n6oZboi0hj3AxZxQg==} + hasBin: true + semver-regex@4.0.5: resolution: {integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==} engines: {node: '>=12'} @@ -2239,43 +2497,32 @@ packages: resolution: {integrity: sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg==} engines: {node: '>=12'} - semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} engines: {node: '>=10'} hasBin: true - set-immediate-shim@1.0.1: - resolution: {integrity: sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ==} - engines: {node: '>=0.10.0'} - - sharp@0.33.4: - resolution: {integrity: sha512-7i/dt5kGl7qR4gwPRD2biwD2/SvBn3O04J77XKFgL2OnZtQw+AG9wnuS/csmu80nPRHLYE9E41fyEiG8nhH6/Q==} - engines: {libvips: '>=8.15.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0} + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} - shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} + sharp@0.35.4: + resolution: {integrity: sha512-n++8XWcj+jCOr2IOl7h8LbKnGBDY4aPbmprMONBNFdn0ImXqpGVv5zliDs0V9HbmbCQLpbuo2ej9rAoOQTvMDA==} + engines: {node: '>=20.9.0'} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} - shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} - shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shelljs@0.8.5: - resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} - engines: {node: '>=4'} - hasBin: true - - shellwords@0.1.1: - resolution: {integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==} - signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -2283,9 +2530,6 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} - slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -2294,6 +2538,9 @@ packages: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} engines: {node: '>=14.16'} + sonic-boom@4.2.1: + resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==} + sort-keys-length@1.0.1: resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==} engines: {node: '>=0.10.0'} @@ -2302,8 +2549,8 @@ packages: resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==} engines: {node: '>=0.10.0'} - source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} source-map-support@0.5.21: @@ -2313,13 +2560,9 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - - sparkles@1.0.1: - resolution: {integrity: sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==} - engines: {node: '>= 0.10'} + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -2330,56 +2573,43 @@ packages: spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - spdx-license-ids@3.0.18: - resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==} + spdx-license-ids@3.0.23: + resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} squeak@1.3.0: resolution: {integrity: sha512-YQL1ulInM+ev8nXX7vfXsCsDh6IqXlrremc1hzi77776BtpWgYJUMto3UM05GSAaGzJgWekszjoKDrVNB5XG+A==} engines: {node: '>=0.10.0'} - stream-combiner2@1.1.1: - resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} - - stream-shift@1.0.3: - resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + streamx@2.28.1: + resolution: {integrity: sha512-zEzXb0s5Cds7tqMH6rhZ05lcJydCWiQPEwiNngVqzsxCc962vLY4Uw+mW7od8kDH258k2Uz/JrOkdIAAhSh9VA==} string-length@1.0.1: resolution: {integrity: sha512-MNCACnufWUf3pQ57O5WTBMkKhzYIaKEcUioO0XHrTMafrbBaNk4IyDOLHBv5xbXO0jLLdsYWeFjpjG2hVHRDtw==} engines: {node: '>=0.10.0'} - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} - string_decoder@0.10.31: - resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + string-width@8.2.2: + resolution: {integrity: sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==} + engines: {node: '>=20'} string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - strip-ansi@3.0.1: resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} engines: {node: '>=0.10.0'} - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} - strip-bom-stream@1.0.0: - resolution: {integrity: sha512-7jfJB9YpI2Z0aH3wu10ZqitvYJaE0s5IzFuWE+0pbb4Q/armTloEUShymkDO47YSLnjAW52mlXT//hs9wXNNJQ==} - engines: {node: '>=0.10.0'} - strip-bom@2.0.0: resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==} engines: {node: '>=0.10.0'} @@ -2387,6 +2617,9 @@ packages: strip-dirs@2.1.0: resolution: {integrity: sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==} + strip-dirs@3.0.0: + resolution: {integrity: sha512-I0sdgcFTfKQlUPZyAqPJmSG3HLO9rWDFnxonnIbskYNM3DwFOeTNB5KzVq3dA1GdRAc/25b5Y7UO2TQfKWw4aQ==} + strip-eof@1.0.0: resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} engines: {node: '>=0.10.0'} @@ -2399,40 +2632,33 @@ packages: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + strip-indent@1.0.1: resolution: {integrity: sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==} engines: {node: '>=0.10.0'} hasBin: true - strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - - strip-json-comments@3.1.0: - resolution: {integrity: sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==} + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strip-outer@1.0.1: - resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} - engines: {node: '>=0.10.0'} - - strip-outer@2.0.0: - resolution: {integrity: sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - strnum@1.0.5: - resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + strip-json-comments@5.0.3: + resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} + engines: {node: '>=14.16'} - strtok3@7.1.1: - resolution: {integrity: sha512-mKX8HA/cdBqMKUr0MMZAFssCkIGoZeSCMXgnt79yKxNFguMLVFgRe6wB+fsL0NmoHDbeyZXczy7vEPSoo3rkzg==} - engines: {node: '>=16'} + strip-outer@1.0.1: + resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} + engines: {node: '>=0.10.0'} - strtok3@8.0.1: - resolution: {integrity: sha512-HNkTAnNWQj2YBzfTtoC5OQyu1QwPsMwiB7VyQmNvQKCrmEDSvFB857Vh97UY9InGLNRAB91sdS1ztifRo/3hdA==} - engines: {node: '>=16'} + strtok3@10.3.5: + resolution: {integrity: sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==} + engines: {node: '>=18'} - super-regex@1.0.0: - resolution: {integrity: sha512-CY8u7DtbvucKuquCmOFEKhr9Besln7n9uN8eFbwcoGYWXOMW07u2o8njWaiXt11ylS3qoGF55pILjRmPlbodyg==} + super-regex@1.1.0: + resolution: {integrity: sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ==} engines: {node: '>=18'} supports-color@2.0.0: @@ -2447,41 +2673,48 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - svgo@3.3.2: - resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==} + svgo@3.3.5: + resolution: {integrity: sha512-8SQMzdrvWaD8deUmrnYB+ASyxBVgWUOilg+A75nE/76WdLpj6LopCwiAVvkzkcqy/9b7t2Mg7faFLjg0ZRcZ3w==} engines: {node: '>=14.0.0'} hasBin: true + svgo@4.1.0: + resolution: {integrity: sha512-bkxnTg1kSU0guhIBmibA6UUhrQmPVA1XsQLN+ylCd+UWzbnLkySOcXpyk1mrl05f+pcaCx2eHb+sp6BgMZWX+Q==} + engines: {node: '>=16'} + hasBin: true + + system-architecture@1.0.0: + resolution: {integrity: sha512-0OJWD12D7XX3KUg1DYkMaTTjSTo2k/mhIYI3HlBlceXSMcJhW/1qO735fPKS5prcyjvn57Ub151vvASYXpQrEw==} + engines: {node: '>=18'} + + tagged-tag@1.0.0: + resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} + engines: {node: '>=20'} + tar-stream@1.6.2: resolution: {integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==} engines: {node: '>= 0.8.0'} + tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + temp-dir@1.0.0: resolution: {integrity: sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==} engines: {node: '>=4'} - tempfile@1.1.1: - resolution: {integrity: sha512-NjT12fW6pSEKz1eVcADgaKfeM+XZ4+zSaqVz46XH7+CiEwcelnwtGWRRjF1p+xyW2PVgKKKS2UUw1LzRelntxg==} - engines: {node: '>=0.10.0'} - tempfile@2.0.0: resolution: {integrity: sha512-ZOn6nJUgvgC09+doCEF3oB+r3ag7kUvlsXEGX069QRD60p+P3uP7XG9N2/at+EyIRGSN//ZY3LyEotA1YpmjuA==} engines: {node: '>=4'} + text-decoder@1.2.7: + resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} + text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - through2-filter@2.0.0: - resolution: {integrity: sha512-miwWajb1B80NvIVKXFPN/o7+vJc4jYUvnZCwvhicRAoTxdD9wbcjri70j+BenCrN/JXEPKDjhpw4iY7yiNsCGg==} - - through2-filter@3.0.0: - resolution: {integrity: sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==} - - through2@0.6.5: - resolution: {integrity: sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==} - - through2@2.0.5: - resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + thread-stream@4.2.0: + resolution: {integrity: sha512-e2zZ96wSChazBsbENf/Pcm/4swHt2cEKQ92rhUjkL9GCKiTDJIaTBenjE/m9DXi0QBmTMDkFDdOomUy20A1tDQ==} + engines: {node: '>=20'} through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} @@ -2490,32 +2723,26 @@ packages: resolution: {integrity: sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==} engines: {node: '>=12'} - time-stamp@1.1.0: - resolution: {integrity: sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==} + timed-out@4.0.1: + resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==} engines: {node: '>=0.10.0'} - to-absolute-glob@0.1.1: - resolution: {integrity: sha512-Vvl5x6zNf9iVG1QTWeknmWrKzZxaeKfIDRibrZCR3b2V/2NlFJuD2HV7P7AVjaKLZNqLPHqyr0jGrW0fTcxCPQ==} - engines: {node: '>=0.10.0'} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} - to-buffer@1.1.1: - resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==} + to-buffer@1.2.2: + resolution: {integrity: sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==} + engines: {node: '>= 0.4'} to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - token-types@5.0.1: - resolution: {integrity: sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==} - engines: {node: '>=14.16'} - - token-types@6.0.0: - resolution: {integrity: sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==} + token-types@6.1.2: + resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==} engines: {node: '>=14.16'} - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - trim-newlines@5.0.0: resolution: {integrity: sha512-kstfs+hgwmdsOadN3KgA+C68wPJwnZq4DN6WMDCvZapDWEF34W2TyPKN2v2+BJnZgIz5QOfxFeldLyYvdgRAwg==} engines: {node: '>=14.16'} @@ -2524,26 +2751,8 @@ packages: resolution: {integrity: sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==} engines: {node: '>=0.10.0'} - trim-repeated@2.0.0: - resolution: {integrity: sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==} - engines: {node: '>=12'} - - ts-node@10.9.2: - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - - tslib@2.6.3: - resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} @@ -2552,37 +2761,48 @@ packages: resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} engines: {node: '>=14.16'} - type-fest@4.23.0: - resolution: {integrity: sha512-ZiBujro2ohr5+Z/hZWHESLz3g08BBdrdLMieYFULJO+tWc437sn8kQsWLJoZErY8alNhxre9K4p3GURAG11n+w==} + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - typedarray@0.0.6: - resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + type-fest@5.9.0: + resolution: {integrity: sha512-yANm3Jr3GiJ1qgJlxGAVxTOIcEOk1rhQHamlXtnrCK7EHP4HeM9OGxtMg/W7HFdrVzw/ZWJKGVIJusVH85sLtw==} + engines: {node: '>=20'} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} - typescript@5.5.4: - resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} hasBin: true - uint8array-extras@1.4.0: - resolution: {integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==} + typescript@7.0.2: + resolution: {integrity: sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==} + engines: {node: '>=16.20.0'} + hasBin: true + + uint8array-extras@1.5.0: + resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} engines: {node: '>=18'} unbzip2-stream@1.4.3: resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} - undici-types@6.13.0: - resolution: {integrity: sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==} + undici-types@8.3.0: + resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==} - unicorn-magic@0.1.0: - resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} - unique-stream@2.3.1: - resolution: {integrity: sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==} + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} - url-regex@3.2.0: - resolution: {integrity: sha512-dQ9cJzMou5OKr6ZzfvwJkCq3rC72PNXhqz0v3EIhF4a3Np+ujr100AhUx2cKx5ei3iymoJpJrPB3sVSEMdqAeg==} + url-parse-lax@1.0.0: + resolution: {integrity: sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==} engines: {node: '>=0.10.0'} url-to-options@1.0.1: @@ -2592,69 +2812,28 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - uuid@2.0.3: - resolution: {integrity: sha512-FULf7fayPdpASncVy4DLh3xydlXEJJpvIELjYjNeQWYUZ9pclcpvCZSr2gkmN2FrrGcI7G/cJsIEwk5/8vfXpg==} - deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. - - uuid@3.4.0: - resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} - deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. - hasBin: true - - uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + uuid@14.0.2: + resolution: {integrity: sha512-xZe/16rV4aa+HGSOCiY2YeLT1OybRLrrkL/Rqaq7p7GMVXjFh+6wN4oMYgjFmnSnhY8t6Xpdl2l9qmnHYuMHwQ==} hasBin: true - v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - - vali-date@1.0.0: - resolution: {integrity: sha512-sgECfZthyaCKW10N0fm27cg8HYTFK5qMWgypqkXMQ4Wbl/zZKx7xZICgcoxIIE+WFAP/MBL2EFwC/YvLxw3Zeg==} - engines: {node: '>=0.10.0'} - validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - vinyl-fs@2.4.4: - resolution: {integrity: sha512-lxMlQW/Wxk/pwhooY3Ut0Q11OH5ZvZfV0Gg1c306fBNWznQ6ZeQaCdE7XX0O/PpGSqgAsHMBxwFgcGxiYW3hZg==} - engines: {node: '>=0.10'} - - vinyl@0.5.3: - resolution: {integrity: sha512-P5zdf3WB9uzr7IFoVQ2wZTmUwHL8cMZWJGzLBNCHNZ3NB6HTMsYABtt7z8tAGIINLXyAob9B9a1yzVGMFOYKEA==} - engines: {node: '>= 0.9'} + web-worker@1.5.0: + resolution: {integrity: sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==} - vinyl@1.2.0: - resolution: {integrity: sha512-Ci3wnR2uuSAWFMSglZuB8Z2apBdtOyz8CV7dC6/U1XbltXBC+IuutUkXQISz01P+US2ouBuesSbV6zILZ6BuzQ==} - engines: {node: '>= 0.9'} - - ware@1.3.0: - resolution: {integrity: sha512-Y2HUDMktriUm+SR2gZWxlrszcgtXExlhQYZ8QJNYbl22jum00KIUcHJ/h/sdAXhWTJcbSkiMYN9Z2tWbWYSrrw==} - - webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - - which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true + which-typed-array@1.1.22: + resolution: {integrity: sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==} + engines: {node: '>= 0.4'} which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - - wrap-fn@0.1.5: - resolution: {integrity: sha512-xDLdGx0M8JQw9QDAC9s5NUxtg9MI09F6Vbxa2LYoSoCvzJnx2n81YMIfykmXEGsUvuLaxnblJTzhSOjUOX37ag==} + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -2670,23 +2849,24 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yallist@2.1.2: - resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} + yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + yargs@18.1.0: + resolution: {integrity: sha512-2rAgRKu54VsHkqI0/tYkmluGXHD4KW7yZoycuqDQ15QOTnc2VVfy0nN/1eMhnQLO00A+dwtK20xuCnc1YGeUyg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} yauzl@2.10.0: resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} + yauzl@3.4.0: + resolution: {integrity: sha512-jIH9yLR9wqr0wOS0TpBvo/g/2UgZH5qePVbjgRliiF0BYvOZyaBknKsF+x9Iht0O6sqgnB93rCICdOZFecJuDw==} + engines: {node: '>=12'} + + yoctocolors@2.2.0: + resolution: {integrity: sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==} + engines: {node: '>=18'} zopflipng-bin@6.0.1: resolution: {integrity: sha512-+aybvXv/xafL6I67uSH5yLHrSy4/OaSOV9tniw4yZFIHpINXUcctVHE/WzHxOONrL2GHzJ8Fd4iDrNyaS6TVbg==} @@ -2695,137 +2875,276 @@ packages: snapshots: - '@cspotcode/source-map-support@0.8.1': + '@borewit/text-codec@0.2.2': {} + + '@emnapi/core@1.11.2': dependencies: - '@jridgewell/trace-mapping': 0.3.9 + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 + optional: true - '@emnapi/core@1.2.0': + '@emnapi/runtime@1.11.2': dependencies: - '@emnapi/wasi-threads': 1.0.1 - tslib: 2.6.3 + tslib: 2.8.1 optional: true - '@emnapi/runtime@1.2.0': + '@emnapi/runtime@1.11.3': dependencies: - tslib: 2.6.3 + tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.0.1': + '@emnapi/wasi-threads@1.2.2': dependencies: - tslib: 2.6.3 + tslib: 2.8.1 optional: true - '@img/sharp-darwin-arm64@0.33.4': + '@file-type/xml@0.4.4': + dependencies: + sax: 1.6.1 + strtok3: 10.3.5 + + '@img/colour@1.1.0': {} + + '@img/sharp-darwin-arm64@0.35.4': optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.0.2 + '@img/sharp-libvips-darwin-arm64': 1.3.3 optional: true - '@img/sharp-darwin-x64@0.33.4': + '@img/sharp-darwin-x64@0.35.4': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.0.2 + '@img/sharp-libvips-darwin-x64': 1.3.3 + optional: true + + '@img/sharp-freebsd-wasm32@0.35.4': + dependencies: + '@img/sharp-wasm32': 0.35.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.3.3': optional: true - '@img/sharp-libvips-darwin-arm64@1.0.2': + '@img/sharp-libvips-darwin-x64@1.3.3': optional: true - '@img/sharp-libvips-darwin-x64@1.0.2': + '@img/sharp-libvips-linux-arm64@1.3.3': optional: true - '@img/sharp-libvips-linux-arm64@1.0.2': + '@img/sharp-libvips-linux-arm@1.3.3': optional: true - '@img/sharp-libvips-linux-arm@1.0.2': + '@img/sharp-libvips-linux-ppc64@1.3.3': optional: true - '@img/sharp-libvips-linux-s390x@1.0.2': + '@img/sharp-libvips-linux-riscv64@1.3.3': optional: true - '@img/sharp-libvips-linux-x64@1.0.2': + '@img/sharp-libvips-linux-s390x@1.3.3': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.0.2': + '@img/sharp-libvips-linux-x64@1.3.3': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.0.2': + '@img/sharp-libvips-linuxmusl-arm64@1.3.3': optional: true - '@img/sharp-linux-arm64@0.33.4': + '@img/sharp-libvips-linuxmusl-x64@1.3.3': + optional: true + + '@img/sharp-linux-arm64@0.35.4': optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.0.2 + '@img/sharp-libvips-linux-arm64': 1.3.3 optional: true - '@img/sharp-linux-arm@0.33.4': + '@img/sharp-linux-arm@0.35.4': optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.0.2 + '@img/sharp-libvips-linux-arm': 1.3.3 optional: true - '@img/sharp-linux-s390x@0.33.4': + '@img/sharp-linux-ppc64@0.35.4': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.0.2 + '@img/sharp-libvips-linux-ppc64': 1.3.3 optional: true - '@img/sharp-linux-x64@0.33.4': + '@img/sharp-linux-riscv64@0.35.4': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.0.2 + '@img/sharp-libvips-linux-riscv64': 1.3.3 optional: true - '@img/sharp-linuxmusl-arm64@0.33.4': + '@img/sharp-linux-s390x@0.35.4': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.0.2 + '@img/sharp-libvips-linux-s390x': 1.3.3 optional: true - '@img/sharp-linuxmusl-x64@0.33.4': + '@img/sharp-linux-x64@0.35.4': optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.0.2 + '@img/sharp-libvips-linux-x64': 1.3.3 optional: true - '@img/sharp-wasm32@0.33.4': - dependencies: - '@emnapi/runtime': 1.2.0 + '@img/sharp-linuxmusl-arm64@0.35.4': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.3.3 optional: true - '@img/sharp-win32-ia32@0.33.4': + '@img/sharp-linuxmusl-x64@0.35.4': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.3.3 optional: true - '@img/sharp-win32-x64@0.33.4': + '@img/sharp-wasm32@0.35.4': + dependencies: + '@emnapi/runtime': 1.11.3 optional: true - '@isaacs/cliui@8.0.2': + '@img/sharp-webcontainers-wasm32@0.35.4': dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 + '@img/sharp-wasm32': 0.35.4 + optional: true - '@jridgewell/resolve-uri@3.1.2': {} + '@img/sharp-win32-arm64@0.35.4': + optional: true - '@jridgewell/sourcemap-codec@1.5.0': {} + '@img/sharp-win32-ia32@0.35.4': + optional: true - '@jridgewell/trace-mapping@0.3.9': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + '@img/sharp-win32-x64@0.35.4': + optional: true - '@mole-inc/bin-wrapper@8.0.1': - dependencies: - bin-check: 4.1.0 - bin-version-check: 5.1.0 - content-disposition: 0.5.4 - ext-name: 5.0.0 - file-type: 17.1.6 - filenamify: 5.1.1 - got: 11.8.6 - os-filter-obj: 2.0.0 + '@keyv/serialize@1.1.1': {} + + '@napi-rs/nice-android-arm-eabi@1.1.1': + optional: true + + '@napi-rs/nice-android-arm64@1.1.1': + optional: true + + '@napi-rs/nice-darwin-arm64@1.1.1': + optional: true + + '@napi-rs/nice-darwin-x64@1.1.1': + optional: true + + '@napi-rs/nice-freebsd-x64@1.1.1': + optional: true + + '@napi-rs/nice-linux-arm-gnueabihf@1.1.1': + optional: true + + '@napi-rs/nice-linux-arm64-gnu@1.1.1': + optional: true + + '@napi-rs/nice-linux-arm64-musl@1.1.1': + optional: true + + '@napi-rs/nice-linux-ppc64-gnu@1.1.1': + optional: true + + '@napi-rs/nice-linux-riscv64-gnu@1.1.1': + optional: true + + '@napi-rs/nice-linux-s390x-gnu@1.1.1': + optional: true + + '@napi-rs/nice-linux-x64-gnu@1.1.1': + optional: true + + '@napi-rs/nice-linux-x64-musl@1.1.1': + optional: true + + '@napi-rs/nice-openharmony-arm64@1.1.1': + optional: true + + '@napi-rs/nice-win32-arm64-msvc@1.1.1': + optional: true + + '@napi-rs/nice-win32-ia32-msvc@1.1.1': + optional: true + + '@napi-rs/nice-win32-x64-msvc@1.1.1': + optional: true + + '@napi-rs/nice@1.1.1': + optionalDependencies: + '@napi-rs/nice-android-arm-eabi': 1.1.1 + '@napi-rs/nice-android-arm64': 1.1.1 + '@napi-rs/nice-darwin-arm64': 1.1.1 + '@napi-rs/nice-darwin-x64': 1.1.1 + '@napi-rs/nice-freebsd-x64': 1.1.1 + '@napi-rs/nice-linux-arm-gnueabihf': 1.1.1 + '@napi-rs/nice-linux-arm64-gnu': 1.1.1 + '@napi-rs/nice-linux-arm64-musl': 1.1.1 + '@napi-rs/nice-linux-ppc64-gnu': 1.1.1 + '@napi-rs/nice-linux-riscv64-gnu': 1.1.1 + '@napi-rs/nice-linux-s390x-gnu': 1.1.1 + '@napi-rs/nice-linux-x64-gnu': 1.1.1 + '@napi-rs/nice-linux-x64-musl': 1.1.1 + '@napi-rs/nice-openharmony-arm64': 1.1.1 + '@napi-rs/nice-win32-arm64-msvc': 1.1.1 + '@napi-rs/nice-win32-ia32-msvc': 1.1.1 + '@napi-rs/nice-win32-x64-msvc': 1.1.1 + optional: true - '@napi-rs/wasm-runtime@0.2.4': + '@napi-rs/wasm-runtime@1.2.3(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)': dependencies: - '@emnapi/core': 1.2.0 - '@emnapi/runtime': 1.2.0 - '@tybys/wasm-util': 0.9.0 + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.2 + '@tybys/wasm-util': 0.10.3 + optional: true + + '@node-rs/xxhash-android-arm-eabi@1.7.7': + optional: true + + '@node-rs/xxhash-android-arm64@1.7.7': + optional: true + + '@node-rs/xxhash-darwin-arm64@1.7.7': + optional: true + + '@node-rs/xxhash-darwin-x64@1.7.7': + optional: true + + '@node-rs/xxhash-freebsd-x64@1.7.7': + optional: true + + '@node-rs/xxhash-linux-arm-gnueabihf@1.7.7': + optional: true + + '@node-rs/xxhash-linux-arm64-gnu@1.7.7': + optional: true + + '@node-rs/xxhash-linux-arm64-musl@1.7.7': + optional: true + + '@node-rs/xxhash-linux-x64-gnu@1.7.7': + optional: true + + '@node-rs/xxhash-linux-x64-musl@1.7.7': + optional: true + + '@node-rs/xxhash-win32-arm64-msvc@1.7.7': + optional: true + + '@node-rs/xxhash-win32-ia32-msvc@1.7.7': + optional: true + + '@node-rs/xxhash-win32-x64-msvc@1.7.7': optional: true + '@node-rs/xxhash@1.7.7': + optionalDependencies: + '@node-rs/xxhash-android-arm-eabi': 1.7.7 + '@node-rs/xxhash-android-arm64': 1.7.7 + '@node-rs/xxhash-darwin-arm64': 1.7.7 + '@node-rs/xxhash-darwin-x64': 1.7.7 + '@node-rs/xxhash-freebsd-x64': 1.7.7 + '@node-rs/xxhash-linux-arm-gnueabihf': 1.7.7 + '@node-rs/xxhash-linux-arm64-gnu': 1.7.7 + '@node-rs/xxhash-linux-arm64-musl': 1.7.7 + '@node-rs/xxhash-linux-x64-gnu': 1.7.7 + '@node-rs/xxhash-linux-x64-musl': 1.7.7 + '@node-rs/xxhash-win32-arm64-msvc': 1.7.7 + '@node-rs/xxhash-win32-ia32-msvc': 1.7.7 + '@node-rs/xxhash-win32-x64-msvc': 1.7.7 + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -2836,256 +3155,408 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 + fastq: 1.20.3 - '@oxc-resolver/binding-darwin-arm64@1.10.2': + '@oxc-resolver/binding-android-arm-eabi@11.24.2': optional: true - '@oxc-resolver/binding-darwin-x64@1.10.2': + '@oxc-resolver/binding-android-arm64@11.24.2': optional: true - '@oxc-resolver/binding-freebsd-x64@1.10.2': + '@oxc-resolver/binding-darwin-arm64@11.24.2': optional: true - '@oxc-resolver/binding-linux-arm-gnueabihf@1.10.2': + '@oxc-resolver/binding-darwin-x64@11.24.2': optional: true - '@oxc-resolver/binding-linux-arm64-gnu@1.10.2': + '@oxc-resolver/binding-freebsd-x64@11.24.2': optional: true - '@oxc-resolver/binding-linux-arm64-musl@1.10.2': + '@oxc-resolver/binding-linux-arm-gnueabihf@11.24.2': optional: true - '@oxc-resolver/binding-linux-x64-gnu@1.10.2': + '@oxc-resolver/binding-linux-arm-musleabihf@11.24.2': optional: true - '@oxc-resolver/binding-linux-x64-musl@1.10.2': + '@oxc-resolver/binding-linux-arm64-gnu@11.24.2': optional: true - '@oxc-resolver/binding-wasm32-wasi@1.10.2': - dependencies: - '@napi-rs/wasm-runtime': 0.2.4 + '@oxc-resolver/binding-linux-arm64-musl@11.24.2': optional: true - '@oxc-resolver/binding-win32-arm64-msvc@1.10.2': + '@oxc-resolver/binding-linux-ppc64-gnu@11.24.2': optional: true - '@oxc-resolver/binding-win32-x64-msvc@1.10.2': + '@oxc-resolver/binding-linux-riscv64-gnu@11.24.2': optional: true - '@pkgjs/parseargs@0.11.0': + '@oxc-resolver/binding-linux-riscv64-musl@11.24.2': optional: true - '@sec-ant/readable-stream@0.4.1': {} + '@oxc-resolver/binding-linux-s390x-gnu@11.24.2': + optional: true - '@sindresorhus/is@4.6.0': {} + '@oxc-resolver/binding-linux-x64-gnu@11.24.2': + optional: true + + '@oxc-resolver/binding-linux-x64-musl@11.24.2': + optional: true + + '@oxc-resolver/binding-openharmony-arm64@11.24.2': + optional: true + + '@oxc-resolver/binding-wasm32-wasi@11.24.2': + dependencies: + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.2 + '@napi-rs/wasm-runtime': 1.2.3(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) + optional: true + + '@oxc-resolver/binding-win32-arm64-msvc@11.24.2': + optional: true + + '@oxc-resolver/binding-win32-x64-msvc@11.24.2': + optional: true + + '@pinojs/redact@0.4.0': {} + + '@sec-ant/readable-stream@0.4.1': {} '@sindresorhus/is@6.3.1': {} - '@sindresorhus/is@7.0.0': {} + '@sindresorhus/is@7.2.0': {} '@sindresorhus/merge-streams@2.3.0': {} - '@swc-node/core@1.13.3(@swc/core@1.7.5)(@swc/types@0.1.12)': + '@sindresorhus/merge-streams@4.0.0': {} + + '@swc-node/core@1.15.0(@swc/core@1.16.1)(@swc/types@0.1.28)': dependencies: - '@swc/core': 1.7.5 - '@swc/types': 0.1.12 + '@swc/core': 1.16.1 + '@swc/types': 0.1.28 - '@swc-node/register@1.10.9(@swc/core@1.7.5)(@swc/types@0.1.12)(typescript@5.5.4)': + '@swc-node/register@1.12.1(@swc/core@1.16.1)(@swc/types@0.1.28)(@typescript/typescript6@6.0.2)(supports-color@7.2.0)': dependencies: - '@swc-node/core': 1.13.3(@swc/core@1.7.5)(@swc/types@0.1.12) - '@swc-node/sourcemap-support': 0.5.1 - '@swc/core': 1.7.5 + '@node-rs/xxhash': 1.7.7 + '@swc-node/core': 1.15.0(@swc/core@1.16.1)(@swc/types@0.1.28) + '@swc-node/sourcemap-support': 0.6.1 + '@swc/core': 1.16.1 colorette: 2.0.20 - debug: 4.3.6 - oxc-resolver: 1.10.2 - pirates: 4.0.6 - tslib: 2.6.3 - typescript: 5.5.4 + debug: 4.4.3(supports-color@7.2.0) + fast-json-stable-stringify: 2.1.0 + oxc-resolver: 11.24.2 + pirates: 4.0.7 + tslib: 2.8.1 + typescript: '@typescript/typescript6@6.0.2' transitivePeerDependencies: - '@swc/types' - supports-color - '@swc-node/sourcemap-support@0.5.1': + '@swc-node/sourcemap-support@0.6.1': dependencies: source-map-support: 0.5.21 - tslib: 2.6.3 + tslib: 2.8.1 - '@swc/cli@0.4.0(@swc/core@1.7.5)': + '@swc/cli@0.8.1(@swc/core@1.16.1)(supports-color@7.2.0)': dependencies: - '@mole-inc/bin-wrapper': 8.0.1 - '@swc/core': 1.7.5 + '@swc/core': 1.16.1 '@swc/counter': 0.1.3 + '@xhmikosr/bin-wrapper': 14.5.1(supports-color@7.2.0) commander: 8.3.0 - fast-glob: 3.3.2 - minimatch: 9.0.5 - piscina: 4.6.1 - semver: 7.6.3 + minimatch: 9.0.9 + piscina: 4.9.4 + semver: 7.8.5 slash: 3.0.0 - source-map: 0.7.4 + source-map: 0.7.6 + tinyglobby: 0.2.17 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + - supports-color + + '@swc/core-darwin-arm64@1.16.1': + optional: true - '@swc/core-darwin-arm64@1.7.5': + '@swc/core-darwin-x64@1.16.1': optional: true - '@swc/core-darwin-x64@1.7.5': + '@swc/core-linux-arm-gnueabihf@1.16.1': optional: true - '@swc/core-linux-arm-gnueabihf@1.7.5': + '@swc/core-linux-arm64-gnu@1.16.1': optional: true - '@swc/core-linux-arm64-gnu@1.7.5': + '@swc/core-linux-arm64-musl@1.16.1': optional: true - '@swc/core-linux-arm64-musl@1.7.5': + '@swc/core-linux-ppc64-gnu@1.16.1': optional: true - '@swc/core-linux-x64-gnu@1.7.5': + '@swc/core-linux-s390x-gnu@1.16.1': optional: true - '@swc/core-linux-x64-musl@1.7.5': + '@swc/core-linux-x64-gnu@1.16.1': optional: true - '@swc/core-win32-arm64-msvc@1.7.5': + '@swc/core-linux-x64-musl@1.16.1': optional: true - '@swc/core-win32-ia32-msvc@1.7.5': + '@swc/core-win32-arm64-msvc@1.16.1': optional: true - '@swc/core-win32-x64-msvc@1.7.5': + '@swc/core-win32-ia32-msvc@1.16.1': optional: true - '@swc/core@1.7.5': + '@swc/core-win32-x64-msvc@1.16.1': + optional: true + + '@swc/core@1.16.1': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.12 + '@swc/types': 0.1.28 optionalDependencies: - '@swc/core-darwin-arm64': 1.7.5 - '@swc/core-darwin-x64': 1.7.5 - '@swc/core-linux-arm-gnueabihf': 1.7.5 - '@swc/core-linux-arm64-gnu': 1.7.5 - '@swc/core-linux-arm64-musl': 1.7.5 - '@swc/core-linux-x64-gnu': 1.7.5 - '@swc/core-linux-x64-musl': 1.7.5 - '@swc/core-win32-arm64-msvc': 1.7.5 - '@swc/core-win32-ia32-msvc': 1.7.5 - '@swc/core-win32-x64-msvc': 1.7.5 + '@swc/core-darwin-arm64': 1.16.1 + '@swc/core-darwin-x64': 1.16.1 + '@swc/core-linux-arm-gnueabihf': 1.16.1 + '@swc/core-linux-arm64-gnu': 1.16.1 + '@swc/core-linux-arm64-musl': 1.16.1 + '@swc/core-linux-ppc64-gnu': 1.16.1 + '@swc/core-linux-s390x-gnu': 1.16.1 + '@swc/core-linux-x64-gnu': 1.16.1 + '@swc/core-linux-x64-musl': 1.16.1 + '@swc/core-win32-arm64-msvc': 1.16.1 + '@swc/core-win32-ia32-msvc': 1.16.1 + '@swc/core-win32-x64-msvc': 1.16.1 '@swc/counter@0.1.3': {} - '@swc/types@0.1.12': + '@swc/types@0.1.28': dependencies: '@swc/counter': 0.1.3 - '@szmarczak/http-timer@4.0.6': - dependencies: - defer-to-connect: 2.0.1 - - '@szmarczak/http-timer@5.0.1': + '@tokenizer/inflate@0.4.1(supports-color@7.2.0)': dependencies: - defer-to-connect: 2.0.1 + debug: 4.4.3(supports-color@7.2.0) + token-types: 6.1.2 + transitivePeerDependencies: + - supports-color '@tokenizer/token@0.3.0': {} - '@trysound/sax@0.2.0': {} - - '@tsconfig/node10@1.0.11': {} - - '@tsconfig/node12@1.0.11': {} - - '@tsconfig/node14@1.0.3': {} - - '@tsconfig/node16@1.0.4': {} - - '@tybys/wasm-util@0.9.0': + '@tybys/wasm-util@0.10.3': dependencies: - tslib: 2.6.3 + tslib: 2.8.1 optional: true - '@types/cacheable-request@6.0.3': - dependencies: - '@types/http-cache-semantics': 4.0.4 - '@types/keyv': 3.1.4 - '@types/node': 22.1.0 - '@types/responselike': 1.0.3 - - '@types/glob@7.2.0': - dependencies: - '@types/minimatch': 5.1.2 - '@types/node': 22.1.0 - '@types/htmlhint@1.1.5': {} - '@types/http-cache-semantics@4.0.4': {} + '@types/http-cache-semantics@4.2.0': {} + + '@types/imagemin-gifsicle@7.0.4': + dependencies: + '@types/imagemin': 9.0.1 '@types/imagemin-jpegtran@5.0.4': dependencies: - '@types/imagemin': 9.0.0 + '@types/imagemin': 9.0.1 '@types/imagemin-mozjpeg@8.0.4': dependencies: - '@types/imagemin': 9.0.0 + '@types/imagemin': 9.0.1 - '@types/imagemin-svgo@10.0.5': + '@types/imagemin-svgo@11.0.0': dependencies: - '@types/imagemin': 9.0.0 - '@types/svgo': 2.6.4 + '@types/imagemin': 9.0.1 + svgo: 3.3.5 '@types/imagemin-zopfli@7.0.4': dependencies: - '@types/imagemin': 9.0.0 + '@types/imagemin': 9.0.1 - '@types/imagemin@9.0.0': + '@types/imagemin@9.0.1': dependencies: - '@types/node': 22.1.0 + '@types/node': 26.4.0 '@types/keyv@3.1.4': dependencies: - '@types/node': 22.1.0 + '@types/node': 26.4.0 - '@types/minimatch@5.1.2': {} + '@types/node@26.4.0': + dependencies: + undici-types: 8.3.0 - '@types/node-notifier@8.0.5': + '@types/responselike@1.0.3': dependencies: - '@types/node': 22.1.0 + '@types/node': 26.4.0 + + '@types/sarif@2.1.7': {} + + '@types/yargs-parser@21.0.3': {} - '@types/node@22.1.0': + '@types/yargs@17.0.35': dependencies: - undici-types: 6.13.0 + '@types/yargs-parser': 21.0.3 - '@types/responselike@1.0.3': + '@typescript/typescript-aix-ppc64@7.0.2': + optional: true + + '@typescript/typescript-darwin-arm64@7.0.2': + optional: true + + '@typescript/typescript-darwin-x64@7.0.2': + optional: true + + '@typescript/typescript-freebsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-freebsd-x64@7.0.2': + optional: true + + '@typescript/typescript-linux-arm64@7.0.2': + optional: true + + '@typescript/typescript-linux-arm@7.0.2': + optional: true + + '@typescript/typescript-linux-loong64@7.0.2': + optional: true + + '@typescript/typescript-linux-mips64el@7.0.2': + optional: true + + '@typescript/typescript-linux-ppc64@7.0.2': + optional: true + + '@typescript/typescript-linux-riscv64@7.0.2': + optional: true + + '@typescript/typescript-linux-s390x@7.0.2': + optional: true + + '@typescript/typescript-linux-x64@7.0.2': + optional: true + + '@typescript/typescript-netbsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-netbsd-x64@7.0.2': + optional: true + + '@typescript/typescript-openbsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-openbsd-x64@7.0.2': + optional: true + + '@typescript/typescript-sunos-x64@7.0.2': + optional: true + + '@typescript/typescript-win32-arm64@7.0.2': + optional: true + + '@typescript/typescript-win32-x64@7.0.2': + optional: true + + '@typescript/typescript6@6.0.2': + dependencies: + '@typescript/old': typescript@6.0.3 + + '@xhmikosr/archive-type@8.1.0(supports-color@7.2.0)': dependencies: - '@types/node': 22.1.0 + file-type: 21.3.4(supports-color@7.2.0) + transitivePeerDependencies: + - supports-color + + '@xhmikosr/bin-check@8.2.2': + dependencies: + execa: 9.6.1 + isexe: 4.0.0 + + '@xhmikosr/bin-wrapper@14.5.1(supports-color@7.2.0)': + dependencies: + '@xhmikosr/bin-check': 8.2.2 + '@xhmikosr/downloader': 16.3.1(supports-color@7.2.0) + '@xhmikosr/os-filter-obj': 4.1.0 + binary-version-check: 6.1.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + - supports-color - '@types/shelljs@0.8.15': + '@xhmikosr/decompress-tar@9.0.2(supports-color@7.2.0)': dependencies: - '@types/glob': 7.2.0 - '@types/node': 22.1.0 + file-type: 21.3.4(supports-color@7.2.0) + is-stream: 4.0.1 + tar-stream: 3.1.7 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + - supports-color - '@types/svgo@2.6.4': + '@xhmikosr/decompress-tarbz2@9.0.2(supports-color@7.2.0)': dependencies: - '@types/node': 22.1.0 + '@xhmikosr/decompress-tar': 9.0.2(supports-color@7.2.0) + file-type: 21.3.4(supports-color@7.2.0) + is-stream: 4.0.1 + seek-bzip: 2.0.0 + unbzip2-stream: 1.4.3 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + - supports-color - '@types/yargs-parser@21.0.3': {} + '@xhmikosr/decompress-targz@9.0.1(supports-color@7.2.0)': + dependencies: + '@xhmikosr/decompress-tar': 9.0.2(supports-color@7.2.0) + file-type: 21.3.4(supports-color@7.2.0) + is-stream: 4.0.1 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + - supports-color - '@types/yargs@17.0.32': + '@xhmikosr/decompress-unzip@8.2.1(supports-color@7.2.0)': dependencies: - '@types/yargs-parser': 21.0.3 + file-type: 21.3.4(supports-color@7.2.0) + get-stream: 9.0.1 + yauzl: 3.4.0 + transitivePeerDependencies: + - supports-color - acorn-walk@8.3.3: + '@xhmikosr/decompress@11.1.4(supports-color@7.2.0)': dependencies: - acorn: 8.12.1 + '@xhmikosr/decompress-tar': 9.0.2(supports-color@7.2.0) + '@xhmikosr/decompress-tarbz2': 9.0.2(supports-color@7.2.0) + '@xhmikosr/decompress-targz': 9.0.1(supports-color@7.2.0) + '@xhmikosr/decompress-unzip': 8.2.1(supports-color@7.2.0) + graceful-fs: 4.2.11 + strip-dirs: 3.0.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + - supports-color - acorn@8.12.1: {} + '@xhmikosr/downloader@16.3.1(supports-color@7.2.0)': + dependencies: + '@xhmikosr/archive-type': 8.1.0(supports-color@7.2.0) + '@xhmikosr/decompress': 11.1.4(supports-color@7.2.0) + content-disposition: 2.0.1 + ext-name: 5.0.0 + file-type: 21.3.4(supports-color@7.2.0) + filenamify: 7.0.3 + got: 14.6.6 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + - supports-color - ansi-gray@0.1.1: + '@xhmikosr/os-filter-obj@4.1.0': dependencies: - ansi-wrap: 0.1.0 + system-architecture: 1.0.0 ansi-regex@2.1.1: {} - ansi-regex@5.0.1: {} - - ansi-regex@6.0.1: {} + ansi-regex@6.3.0: {} ansi-styles@2.2.1: {} @@ -3093,56 +3564,36 @@ snapshots: dependencies: color-convert: 2.0.1 - ansi-styles@6.2.1: {} - - ansi-wrap@0.1.0: {} + ansi-styles@6.2.3: {} arch@2.2.0: {} - archive-type@3.2.0: - dependencies: - file-type: 3.9.0 - archive-type@4.0.0: dependencies: file-type: 4.4.0 - arg@4.1.3: {} - - arr-diff@2.0.0: - dependencies: - arr-flatten: 1.1.0 - - arr-flatten@1.1.0: {} - - array-differ@1.0.0: {} - array-find-index@1.0.2: {} - array-uniq@1.0.3: {} + async@3.2.6: {} - array-unique@0.2.1: {} + atomic-sleep@1.0.0: {} - async-each-series@1.1.0: {} + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 - async@3.2.3: {} + b4a@1.8.1: {} balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + + bare-events@2.9.2: {} + base64-js@1.5.1: {} beeper@1.1.1: {} - bin-build@2.2.0: - dependencies: - archive-type: 3.2.0 - decompress: 4.2.1 - download: 4.4.3 - exec-series: 1.0.3 - rimraf: 2.7.1 - tempfile: 1.1.1 - url-regex: 3.2.0 - bin-build@3.0.0: dependencies: decompress: 4.2.1 @@ -3151,57 +3602,22 @@ snapshots: p-map-series: 1.0.0 tempfile: 2.0.0 - bin-check@2.0.0: - dependencies: - executable: 1.1.0 - bin-check@4.1.0: dependencies: execa: 0.7.0 executable: 4.1.1 - bin-version-check@2.1.0: - dependencies: - bin-version: 1.0.4 - minimist: 1.2.8 - semver: 7.6.3 - semver-truncate: 1.1.2 - bin-version-check@4.0.0: dependencies: bin-version: 3.1.0 - semver: 7.6.3 + semver: 7.8.5 semver-truncate: 1.1.2 - bin-version-check@5.1.0: - dependencies: - bin-version: 6.0.0 - semver: 7.6.3 - semver-truncate: 3.0.0 - - bin-version@1.0.4: - dependencies: - find-versions: 1.2.1 - bin-version@3.1.0: dependencies: execa: 1.0.0 find-versions: 3.2.0 - bin-version@6.0.0: - dependencies: - execa: 5.1.1 - find-versions: 5.1.0 - - bin-wrapper@3.0.2: - dependencies: - bin-check: 2.0.0 - bin-version-check: 2.1.0 - download: 4.4.3 - each-async: 1.1.1 - lazy-req: 1.1.0 - os-filter-obj: 1.0.3 - bin-wrapper@4.1.0: dependencies: bin-check: 4.1.0 @@ -3211,6 +3627,17 @@ snapshots: os-filter-obj: 2.0.0 pify: 4.0.1 + binary-version-check@6.1.0: + dependencies: + binary-version: 7.1.0 + semver: 7.8.5 + semver-truncate: 3.0.0 + + binary-version@7.1.0: + dependencies: + execa: 8.0.1 + find-versions: 6.0.0 + bl@1.2.3: dependencies: readable-stream: 2.3.8 @@ -3218,15 +3645,19 @@ snapshots: boolbase@1.0.0: {} - brace-expansion@1.1.11: + brace-expansion@1.1.18: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.1: + brace-expansion@2.1.4: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.9: + dependencies: + balanced-match: 4.0.4 + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -3249,29 +3680,36 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - cacheable-lookup@5.0.4: {} + byte-counter@0.1.0: {} cacheable-lookup@7.0.0: {} - cacheable-request@12.0.1: + cacheable-request@13.0.19: dependencies: - '@types/http-cache-semantics': 4.0.4 + '@types/http-cache-semantics': 4.2.0 get-stream: 9.0.1 - http-cache-semantics: 4.1.1 - keyv: 4.5.4 + http-cache-semantics: 4.2.0 + keyv: 5.6.0 mimic-response: 4.0.0 - normalize-url: 8.0.1 - responselike: 3.0.0 + normalize-url: 8.1.1 + responselike: 4.0.2 - cacheable-request@7.0.4: + call-bind-apply-helpers@1.0.2: dependencies: - clone-response: 1.0.3 - get-stream: 5.2.0 - http-cache-semantics: 4.1.1 - keyv: 4.5.4 - lowercase-keys: 2.0.0 - normalize-url: 6.1.0 - responselike: 2.0.1 + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.9: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 callsites@4.2.0: {} @@ -3282,13 +3720,6 @@ snapshots: camelcase@2.1.1: {} - caw@1.2.0: - dependencies: - get-proxy: 1.1.0 - is-obj: 1.0.1 - object-assign: 3.0.0 - tunnel-agent: 0.6.0 - caw@2.0.1: dependencies: get-proxy: 2.1.0 @@ -3309,25 +3740,15 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chalk@5.3.0: {} + chalk@6.0.0: {} change-file-extension@0.1.1: {} - cliui@8.0.1: + cliui@9.0.1: dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - clone-response@1.0.3: - dependencies: - mimic-response: 1.0.1 - - clone-stats@0.0.1: {} - - clone@1.0.4: {} - - co@3.1.0: {} + string-width: 7.2.0 + strip-ansi: 7.2.0 + wrap-ansi: 9.0.2 color-convert@2.0.1: dependencies: @@ -3335,37 +3756,20 @@ snapshots: color-name@1.1.4: {} - color-string@1.9.1: - dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.2 - - color-support@1.1.3: {} - - color@4.2.3: - dependencies: - color-convert: 2.0.1 - color-string: 1.9.1 - colorette@2.0.20: {} + commander@11.1.0: {} + commander@2.20.3: {} + commander@6.2.1: {} + commander@7.2.0: {} commander@8.3.0: {} - commander@9.5.0: {} - concat-map@0.0.1: {} - concat-stream@1.6.2: - dependencies: - buffer-from: 1.1.2 - inherits: 2.0.4 - readable-stream: 2.3.8 - typedarray: 0.0.6 - config-chain@1.1.13: dependencies: ini: 1.3.8 @@ -3377,53 +3781,52 @@ snapshots: dependencies: safe-buffer: 5.2.1 - convert-hrtime@5.0.0: {} + content-disposition@2.0.1: {} - convert-source-map@1.9.0: {} + convert-hrtime@5.0.0: {} core-util-is@1.0.3: {} - create-require@1.1.1: {} - - cross-spawn@5.1.0: - dependencies: - lru-cache: 4.1.5 - shebang-command: 1.2.0 - which: 1.3.1 - - cross-spawn@6.0.5: - dependencies: - nice-try: 1.0.5 - path-key: 2.0.1 - semver: 7.6.3 - shebang-command: 1.2.0 - which: 1.3.1 - - cross-spawn@7.0.3: + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - css-select@5.1.0: + css-select@5.2.2: + dependencies: + boolbase: 1.0.0 + css-what: 6.2.2 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-select@6.0.0: dependencies: boolbase: 1.0.0 - css-what: 6.1.0 + css-what: 7.0.0 domhandler: 5.0.3 - domutils: 3.1.0 + domutils: 3.2.2 nth-check: 2.1.1 css-tree@2.2.1: dependencies: mdn-data: 2.0.28 - source-map-js: 1.2.0 + source-map-js: 1.2.1 css-tree@2.3.1: dependencies: mdn-data: 2.0.30 - source-map-js: 1.2.0 + source-map-js: 1.2.1 + + css-tree@3.2.1: + dependencies: + mdn-data: 2.27.1 + source-map-js: 1.2.1 - css-what@6.1.0: {} + css-what@6.2.2: {} + + css-what@7.0.0: {} csso@5.0.5: dependencies: @@ -3433,22 +3836,23 @@ snapshots: dependencies: array-find-index: 1.0.2 - cwebp-bin@8.0.0: - dependencies: - bin-build: 3.0.0 - bin-wrapper: 4.1.0 - - dateformat@2.2.0: {} + dateformat@4.6.3: {} - debug@4.3.6: + debug@4.4.3(supports-color@7.2.0): dependencies: - ms: 2.1.2 + ms: 2.1.3 + optionalDependencies: + supports-color: 7.2.0 decamelize@1.2.0: {} - decompress-response@6.0.0: + decompress-response@10.0.0: + dependencies: + mimic-response: 4.0.0 + + decompress-response@3.3.0: dependencies: - mimic-response: 3.1.0 + mimic-response: 1.0.1 decompress-tar@4.1.1: dependencies: @@ -3488,13 +3892,13 @@ snapshots: pify: 2.3.0 strip-dirs: 2.1.0 - deep-extend@0.6.0: {} - - defer-to-connect@2.0.1: {} - - detect-libc@2.0.3: {} + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 - diff@4.0.2: {} + detect-libc@2.1.2: {} dom-serializer@2.0.0: dependencies: @@ -3508,7 +3912,7 @@ snapshots: dependencies: domelementtype: 2.3.0 - domutils@3.1.0: + domutils@3.2.2: dependencies: dom-serializer: 2.0.0 domelementtype: 2.3.0 @@ -3518,24 +3922,6 @@ snapshots: dependencies: type-fest: 3.13.1 - download@4.4.3: - dependencies: - caw: 1.2.0 - concat-stream: 1.6.2 - each-async: 1.1.1 - filenamify: 1.2.1 - got: 14.4.2 - gulp-decompress: 1.2.0 - gulp-rename: 1.4.0 - is-url: 1.2.4 - object-assign: 4.1.1 - read-all-stream: 3.1.0 - readable-stream: 2.3.8 - stream-combiner2: 1.1.1 - vinyl: 1.2.0 - vinyl-fs: 2.4.4 - ware: 1.3.0 - download@6.2.5: dependencies: caw: 2.0.1 @@ -3545,7 +3931,7 @@ snapshots: file-type: 5.2.0 filenamify: 2.1.0 get-stream: 3.0.0 - got: 14.4.2 + got: 7.1.0 make-dir: 1.3.0 p-event: 1.3.0 pify: 3.0.0 @@ -3560,38 +3946,22 @@ snapshots: file-type: 8.1.0 filenamify: 2.1.0 get-stream: 3.0.0 - got: 14.4.2 + got: 7.1.0 make-dir: 1.3.0 p-event: 2.3.1 pify: 3.0.0 - duplexer2@0.0.2: - dependencies: - readable-stream: 1.1.14 - - duplexer2@0.1.4: + dunder-proto@1.0.1: dependencies: - readable-stream: 2.3.8 - - duplexify@3.7.1: - dependencies: - end-of-stream: 1.4.4 - inherits: 2.0.4 - readable-stream: 2.3.8 - stream-shift: 1.0.3 - - each-async@1.1.1: - dependencies: - onetime: 1.1.0 - set-immediate-shim: 1.0.1 - - eastasianwidth@0.2.0: {} + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 - emoji-regex@8.0.0: {} + duplexer3@0.1.5: {} - emoji-regex@9.2.2: {} + emoji-regex@10.6.0: {} - end-of-stream@1.4.4: + end-of-stream@1.4.5: dependencies: once: 1.4.0 @@ -3599,15 +3969,27 @@ snapshots: environment@1.1.0: {} - error-ex@1.3.2: + error-ex@1.3.4: dependencies: is-arrayish: 0.2.1 - escalade@3.1.2: {} + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.2: + dependencies: + es-errors: 1.3.0 + + escalade@3.2.0: {} escape-string-regexp@1.0.5: {} - escape-string-regexp@5.0.0: {} + events-universal@1.0.1: + dependencies: + bare-events: 2.9.2 + transitivePeerDependencies: + - bare-abort-controller exec-buffer@3.2.0: dependencies: @@ -3617,14 +3999,9 @@ snapshots: rimraf: 2.7.1 tempfile: 2.0.0 - exec-series@1.0.3: - dependencies: - async-each-series: 1.1.0 - object-assign: 4.1.1 - execa@0.7.0: dependencies: - cross-spawn: 5.1.0 + cross-spawn: 7.0.6 get-stream: 3.0.0 is-stream: 1.1.0 npm-run-path: 2.0.2 @@ -3634,7 +4011,7 @@ snapshots: execa@1.0.0: dependencies: - cross-spawn: 6.0.5 + cross-spawn: 7.0.6 get-stream: 4.1.0 is-stream: 1.1.0 npm-run-path: 2.0.2 @@ -3644,7 +4021,7 @@ snapshots: execa@5.1.1: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 get-stream: 6.0.1 human-signals: 2.1.0 is-stream: 2.0.1 @@ -3656,7 +4033,7 @@ snapshots: execa@6.1.0: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 get-stream: 6.0.1 human-signals: 3.0.1 is-stream: 3.0.0 @@ -3668,7 +4045,7 @@ snapshots: execa@8.0.1: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 get-stream: 8.0.1 human-signals: 5.0.0 is-stream: 3.0.0 @@ -3678,84 +4055,92 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 - executable@1.1.0: + execa@9.6.1: dependencies: - meow: 3.7.0 + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.6 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.1 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.3.1 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.2.0 executable@4.1.1: dependencies: pify: 2.3.0 - expand-brackets@0.1.5: - dependencies: - is-posix-bracket: 0.1.1 - ext-list@2.2.2: dependencies: - mime-db: 1.53.0 + mime-db: 1.54.0 ext-name@5.0.0: dependencies: ext-list: 2.2.2 sort-keys-length: 1.0.1 - extend-shallow@2.0.1: - dependencies: - is-extendable: 0.1.1 - - extend@3.0.2: {} - - extglob@0.3.2: - dependencies: - is-extglob: 1.0.0 + fast-copy@4.1.0: {} - fancy-log@1.3.3: - dependencies: - ansi-gray: 0.1.1 - color-support: 1.1.3 - parse-node-version: 1.0.1 - time-stamp: 1.1.0 + fast-equals@5.4.1: {} - fast-equals@5.0.1: {} + fast-fifo@1.3.2: {} - fast-glob@3.3.2: + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.7 + micromatch: 4.0.8 - fast-xml-parser@4.4.1: - dependencies: - strnum: 1.0.5 + fast-json-stable-stringify@2.1.0: {} + + fast-safe-stringify@2.1.1: {} - fastq@1.17.1: + fastq@1.20.3: dependencies: - reusify: 1.0.4 + reusify: 1.1.0 fd-slicer@1.1.0: dependencies: pend: 1.2.0 + fdir@6.5.0(picomatch@4.0.7): + optionalDependencies: + picomatch: 4.0.7 + figures@1.7.0: dependencies: escape-string-regexp: 1.0.5 object-assign: 4.1.1 + figures@6.1.0: + dependencies: + is-unicode-supported: 2.1.0 + file-type@10.11.0: {} - file-type@17.1.6: + file-type@21.3.4(supports-color@7.2.0): dependencies: - readable-web-to-node-stream: 3.0.2 - strtok3: 7.1.1 - token-types: 5.0.1 + '@tokenizer/inflate': 0.4.1(supports-color@7.2.0) + strtok3: 10.3.5 + token-types: 6.1.2 + uint8array-extras: 1.5.0 + transitivePeerDependencies: + - supports-color - file-type@19.3.0: + file-type@22.0.2(supports-color@7.2.0): dependencies: - strtok3: 8.0.1 - token-types: 6.0.0 - uint8array-extras: 1.4.0 + '@tokenizer/inflate': 0.4.1(supports-color@7.2.0) + strtok3: 10.3.5 + token-types: 6.1.2 + uint8array-extras: 1.5.0 + transitivePeerDependencies: + - supports-color file-type@3.9.0: {} @@ -3767,19 +4152,9 @@ snapshots: file-type@8.1.0: {} - filename-regex@2.0.1: {} - - filename-reserved-regex@1.0.0: {} - filename-reserved-regex@2.0.0: {} - filename-reserved-regex@3.0.0: {} - - filenamify@1.2.1: - dependencies: - filename-reserved-regex: 1.0.0 - strip-outer: 1.0.1 - trim-repeated: 1.0.0 + filename-reserved-regex@4.0.1: {} filenamify@2.1.0: dependencies: @@ -3787,11 +4162,9 @@ snapshots: strip-outer: 1.0.1 trim-repeated: 1.0.0 - filenamify@5.1.1: + filenamify@7.0.3: dependencies: - filename-reserved-regex: 3.0.0 - strip-outer: 2.0.0 - trim-repeated: 2.0.0 + filename-reserved-regex: 4.0.1 fill-range@7.1.1: dependencies: @@ -3802,38 +4175,29 @@ snapshots: path-exists: 2.1.0 pinkie-promise: 2.0.1 - find-versions@1.2.1: - dependencies: - array-uniq: 1.0.3 - get-stdin: 4.0.1 - meow: 3.7.0 - semver-regex: 4.0.5 - find-versions@3.2.0: dependencies: semver-regex: 4.0.5 - find-versions@5.1.0: + find-versions@6.0.0: dependencies: semver-regex: 4.0.5 + super-regex: 1.1.0 - first-chunk-stream@1.0.0: {} - - for-in@1.0.2: {} - - for-own@0.1.5: - dependencies: - for-in: 1.0.2 - - foreground-child@3.2.1: + for-each@0.3.5: dependencies: - cross-spawn: 7.0.3 - signal-exit: 4.1.0 + is-callable: 1.2.7 - form-data-encoder@4.0.2: {} + form-data-encoder@4.1.0: {} fs-constants@1.0.0: {} + fs-extra@11.4.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.1 + universalify: 2.0.1 + fs.realpath@1.0.0: {} function-bind@1.1.2: {} @@ -3842,9 +4206,25 @@ snapshots: get-caller-file@2.0.5: {} - get-proxy@1.1.0: + get-east-asian-width@1.6.0: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.4 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: dependencies: - rc: 1.2.8 + dunder-proto: 1.0.1 + es-object-atoms: 1.1.2 get-proxy@2.1.0: dependencies: @@ -3861,11 +4241,7 @@ snapshots: get-stream@4.1.0: dependencies: - pump: 3.0.0 - - get-stream@5.2.0: - dependencies: - pump: 3.0.0 + pump: 3.0.4 get-stream@6.0.1: {} @@ -3876,153 +4252,77 @@ snapshots: '@sec-ant/readable-stream': 0.4.1 is-stream: 4.0.1 - giflossy@3.0.41: - dependencies: - bin-build: 2.2.0 - bin-wrapper: 3.0.2 - logalot: 2.1.0 - - glob-base@0.3.0: - dependencies: - glob-parent: 2.0.0 - is-glob: 2.0.1 - - glob-parent@2.0.0: + gifsicle@5.3.0: dependencies: - is-glob: 2.0.1 - - glob-parent@3.1.0: - dependencies: - is-glob: 3.1.0 - path-dirname: 1.0.2 + bin-build: 3.0.0 + bin-wrapper: 4.1.0 + execa: 5.1.1 glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - glob-stream@5.3.5: - dependencies: - extend: 3.0.2 - glob: 5.0.15 - glob-parent: 3.1.0 - micromatch: 2.3.11 - ordered-read-streams: 0.3.0 - through2: 0.6.5 - to-absolute-glob: 0.1.1 - unique-stream: 2.3.1 - - glob@10.4.5: - dependencies: - foreground-child: 3.2.1 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.0 - path-scurry: 1.11.1 - - glob@5.0.15: + glob@13.0.6: dependencies: - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 + minimatch: 10.2.6 + minipass: 7.1.3 + path-scurry: 2.0.2 glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.2 + minimatch: 3.1.5 once: 1.4.0 path-is-absolute: 1.0.1 - globby@14.0.2: + globby@14.1.0: dependencies: '@sindresorhus/merge-streams': 2.3.0 - fast-glob: 3.3.2 - ignore: 5.3.1 - path-type: 5.0.0 + fast-glob: 3.3.3 + ignore: 7.0.8 + path-type: 6.0.0 slash: 5.1.0 - unicorn-magic: 0.1.0 + unicorn-magic: 0.3.0 - glogg@1.0.2: - dependencies: - sparkles: 1.0.1 + gopd@1.2.0: {} - got@11.8.6: + got@14.6.6: dependencies: - '@sindresorhus/is': 4.6.0 - '@szmarczak/http-timer': 4.0.6 - '@types/cacheable-request': 6.0.3 - '@types/responselike': 1.0.3 - cacheable-lookup: 5.0.4 - cacheable-request: 7.0.4 - decompress-response: 6.0.0 - http2-wrapper: 1.0.3 - lowercase-keys: 2.0.0 - p-cancelable: 2.1.1 - responselike: 2.0.1 - - got@14.4.2: - dependencies: - '@sindresorhus/is': 7.0.0 - '@szmarczak/http-timer': 5.0.1 + '@sindresorhus/is': 7.2.0 + byte-counter: 0.1.0 cacheable-lookup: 7.0.0 - cacheable-request: 12.0.1 - decompress-response: 6.0.0 - form-data-encoder: 4.0.2 + cacheable-request: 13.0.19 + decompress-response: 10.0.0 + form-data-encoder: 4.1.0 http2-wrapper: 2.2.1 + keyv: 5.6.0 lowercase-keys: 3.0.0 p-cancelable: 4.0.1 - responselike: 3.0.0 - type-fest: 4.23.0 - - graceful-fs@4.2.11: {} - - growly@1.3.0: {} - - gulp-decompress@1.2.0: - dependencies: - archive-type: 3.2.0 - decompress: 4.2.1 - gulp-util: 3.0.8 - readable-stream: 2.3.8 - - gulp-rename@1.4.0: {} - - gulp-sourcemaps@1.6.0: - dependencies: - convert-source-map: 1.9.0 - graceful-fs: 4.2.11 - strip-bom: 2.0.0 - through2: 2.0.5 - vinyl: 1.2.0 + responselike: 4.0.2 + type-fest: 4.41.0 - gulp-util@3.0.8: + got@7.1.0: dependencies: - array-differ: 1.0.0 - array-uniq: 1.0.3 - beeper: 1.1.1 - chalk: 1.1.3 - dateformat: 2.2.0 - fancy-log: 1.3.3 - gulplog: 1.0.0 - has-gulplog: 0.1.0 - lodash._reescape: 3.0.0 - lodash._reevaluate: 3.0.0 - lodash._reinterpolate: 3.0.0 - lodash.template: 3.6.2 - minimist: 1.2.8 - multipipe: 0.1.2 - object-assign: 3.0.0 - replace-ext: 0.0.1 - through2: 2.0.5 - vinyl: 0.5.3 + '@types/keyv': 3.1.4 + '@types/responselike': 1.0.3 + decompress-response: 3.3.0 + duplexer3: 0.1.5 + get-stream: 3.0.0 + is-plain-obj: 1.1.0 + is-retry-allowed: 1.2.0 + is-stream: 1.1.0 + isurl: 1.0.0 + lowercase-keys: 1.0.1 + p-cancelable: 0.3.0 + p-timeout: 1.2.1 + safe-buffer: 5.2.1 + timed-out: 4.0.1 + url-parse-lax: 1.0.0 + url-to-options: 1.0.1 - gulplog@1.0.0: - dependencies: - glogg: 1.0.2 + graceful-fs@4.2.11: {} has-ansi@2.0.0: dependencies: @@ -4030,45 +4330,46 @@ snapshots: has-flag@4.0.0: {} - has-gulplog@0.1.0: + has-property-descriptors@1.0.2: dependencies: - sparkles: 1.0.1 + es-define-property: 1.0.1 has-symbol-support-x@1.4.2: {} + has-symbols@1.1.0: {} + has-to-string-tag-x@1.4.1: dependencies: has-symbol-support-x: 1.4.2 - hasown@2.0.2: + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.4: dependencies: function-bind: 1.1.2 + help-me@5.0.0: {} + hosted-git-info@2.8.9: {} htmlhint-stylish@1.0.3: dependencies: jshint-stylish: 2.2.1 - htmlhint@1.1.4: + htmlhint@1.9.2: dependencies: - async: 3.2.3 + async: 3.2.6 chalk: 4.1.2 - commander: 9.5.0 - glob: 7.2.3 + commander: 11.1.0 + glob: 13.0.6 is-glob: 4.0.3 - node-fetch: 2.7.0 - strip-json-comments: 3.1.0 + node-sarif-builder: 3.2.0 + strip-json-comments: 3.1.1 xml: 1.0.1 - transitivePeerDependencies: - - encoding - - http-cache-semantics@4.1.1: {} - http2-wrapper@1.0.3: - dependencies: - quick-lru: 5.1.1 - resolve-alpn: 1.2.1 + http-cache-semantics@4.2.0: {} http2-wrapper@2.2.1: dependencies: @@ -4081,25 +4382,33 @@ snapshots: human-signals@5.0.0: {} - identifier-regex@1.0.0: + human-signals@8.0.1: {} + + identifier-regex@1.1.0: dependencies: - reserved-identifiers: 1.0.0 + reserved-identifiers: 1.2.0 ieee754@1.2.1: {} - ignore@5.3.1: {} + ignore@7.0.8: {} - imagemin-giflossy@5.1.10: + image-dimensions@2.5.1: {} + + imagemin-gifsicle@7.0.0: dependencies: - exec-buffer: 3.2.0 - giflossy: 3.0.41 - is-gif: 1.0.0 + execa: 1.0.0 + gifsicle: 5.3.0 + is-gif: 3.0.0 - imagemin-jpegtran@7.0.0: + imagemin-jpegtran@8.0.0(supports-color@7.2.0): dependencies: - exec-buffer: 3.2.0 - is-jpg: 2.0.0 - jpegtran-bin: 5.0.2 + execa: 9.6.1 + file-type: 22.0.2(supports-color@7.2.0) + image-dimensions: 2.5.1 + jpegtran-bin: 7.0.0 + uint8array-extras: 1.5.0 + transitivePeerDependencies: + - supports-color imagemin-mozjpeg@10.0.0: dependencies: @@ -4114,13 +4423,12 @@ snapshots: is-png: 3.0.1 ow: 2.0.0 pngquant-bin: 9.0.0 - uint8array-extras: 1.4.0 + uint8array-extras: 1.5.0 - imagemin-webp@8.0.0: + imagemin-svgo@12.0.0: dependencies: - cwebp-bin: 8.0.0 - exec-buffer: 3.2.0 - is-cwebp-readable: 3.0.0 + is-svg: 6.1.0 + svgo: 4.1.0 imagemin-zopfli@7.0.0: dependencies: @@ -4128,17 +4436,20 @@ snapshots: is-png: 2.0.0 zopflipng-bin: 6.0.1 - imagemin@9.0.0: + imagemin@9.0.1(supports-color@7.2.0): dependencies: change-file-extension: 0.1.1 environment: 1.1.0 - file-type: 19.3.0 - globby: 14.0.2 + file-type: 22.0.2(supports-color@7.2.0) + globby: 14.1.0 + image-dimensions: 2.5.1 junk: 4.0.1 ow: 2.0.0 p-pipe: 4.0.0 slash: 5.1.0 - uint8array-extras: 1.4.0 + uint8array-extras: 1.5.0 + transitivePeerDependencies: + - supports-color import-lazy@3.1.0: {} @@ -4155,64 +4466,36 @@ snapshots: ini@1.3.8: {} - interpret@1.4.0: {} - - ip-regex@1.0.3: {} + inspect-with-kind@1.0.5: + dependencies: + kind-of: 6.0.3 irregular-plurals@1.4.0: {} is-arrayish@0.2.1: {} - is-arrayish@0.3.2: {} - - is-buffer@1.1.6: {} - - is-core-module@2.15.0: - dependencies: - hasown: 2.0.2 - - is-cwebp-readable@3.0.0: - dependencies: - file-type: 10.11.0 - - is-docker@2.2.1: {} + is-callable@1.2.7: {} - is-dotfile@1.0.3: {} - - is-equal-shallow@0.1.3: + is-core-module@2.16.2: dependencies: - is-primitive: 2.0.0 - - is-extendable@0.1.1: {} - - is-extglob@1.0.0: {} + hasown: 2.0.4 is-extglob@2.1.1: {} is-finite@1.1.0: {} - is-fullwidth-code-point@3.0.0: {} - - is-gif@1.0.0: {} - - is-glob@2.0.1: - dependencies: - is-extglob: 1.0.0 - - is-glob@3.1.0: + is-gif@3.0.0: dependencies: - is-extglob: 2.1.1 + file-type: 10.11.0 is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - is-identifier@1.0.1: + is-identifier@1.1.0: dependencies: - identifier-regex: 1.0.0 - super-regex: 1.0.0 - - is-jpg@2.0.0: {} + identifier-regex: 1.1.0 + super-regex: 1.1.0 is-jpg@3.0.0: {} @@ -4220,19 +4503,17 @@ snapshots: is-number@7.0.0: {} - is-obj@1.0.1: {} - is-object@1.0.2: {} is-plain-obj@1.1.0: {} + is-plain-obj@4.1.0: {} + is-png@2.0.0: {} is-png@3.0.1: {} - is-posix-bracket@0.1.1: {} - - is-primitive@2.0.0: {} + is-retry-allowed@1.2.0: {} is-stream@1.1.0: {} @@ -4242,42 +4523,37 @@ snapshots: is-stream@4.0.1: {} - is-svg@5.0.1: + is-svg@6.1.0: dependencies: - fast-xml-parser: 4.4.1 - - is-url@1.2.4: {} + '@file-type/xml': 0.4.4 - is-utf8@0.2.1: {} - - is-valid-glob@0.3.0: {} - - is-wsl@2.2.0: + is-typed-array@1.1.15: dependencies: - is-docker: 2.2.1 + which-typed-array: 1.1.22 + + is-unicode-supported@2.1.0: {} - isarray@0.0.1: {} + is-utf8@0.2.1: {} isarray@1.0.0: {} + isarray@2.0.5: {} + isexe@2.0.0: {} + isexe@4.0.0: {} + isurl@1.0.0: dependencies: has-to-string-tag-x: 1.4.1 is-object: 1.0.2 - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 + joycon@3.1.1: {} - jpegtran-bin@5.0.2: + jpegtran-bin@7.0.0: dependencies: bin-build: 3.0.0 bin-wrapper: 4.1.0 - logalot: 2.1.0 jshint-stylish@2.2.1: dependencies: @@ -4288,25 +4564,19 @@ snapshots: string-length: 1.0.1 text-table: 0.2.0 - json-buffer@3.0.1: {} - - json-stable-stringify-without-jsonify@1.0.1: {} + jsonfile@6.2.1: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 junk@4.0.1: {} - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - - kind-of@3.2.2: + keyv@5.6.0: dependencies: - is-buffer: 1.1.6 + '@keyv/serialize': 1.1.1 - lazy-req@1.1.0: {} - - lazystream@1.0.1: - dependencies: - readable-stream: 2.3.8 + kind-of@6.0.3: {} load-json-file@1.1.0: dependencies: @@ -4316,59 +4586,6 @@ snapshots: pinkie-promise: 2.0.1 strip-bom: 2.0.0 - lodash._basecopy@3.0.1: {} - - lodash._basetostring@3.0.1: {} - - lodash._basevalues@3.0.0: {} - - lodash._getnative@3.9.1: {} - - lodash._isiterateecall@3.0.9: {} - - lodash._reescape@3.0.0: {} - - lodash._reevaluate@3.0.0: {} - - lodash._reinterpolate@3.0.0: {} - - lodash._root@3.0.1: {} - - lodash.escape@3.2.0: - dependencies: - lodash._root: 3.0.1 - - lodash.isarguments@3.1.0: {} - - lodash.isarray@3.0.4: {} - - lodash.isequal@4.5.0: {} - - lodash.keys@3.1.2: - dependencies: - lodash._getnative: 3.9.1 - lodash.isarguments: 3.1.0 - lodash.isarray: 3.0.4 - - lodash.restparam@3.6.1: {} - - lodash.template@3.6.2: - dependencies: - lodash._basecopy: 3.0.1 - lodash._basetostring: 3.0.1 - lodash._basevalues: 3.0.0 - lodash._isiterateecall: 3.0.9 - lodash._reinterpolate: 3.0.0 - lodash.escape: 3.2.0 - lodash.keys: 3.1.2 - lodash.restparam: 3.6.1 - lodash.templatesettings: 3.1.1 - - lodash.templatesettings@3.1.1: - dependencies: - lodash._reinterpolate: 3.0.0 - lodash.escape: 3.2.0 - log-symbols@1.0.2: dependencies: chalk: 1.1.3 @@ -4385,7 +4602,7 @@ snapshots: currently-unhandled: 0.4.1 signal-exit: 3.0.7 - lowercase-keys@2.0.0: {} + lowercase-keys@1.0.1: {} lowercase-keys@3.0.0: {} @@ -4396,25 +4613,28 @@ snapshots: longest: 1.0.1 meow: 3.7.0 - lru-cache@10.4.3: {} + lru-cache@11.5.2: {} - lru-cache@4.1.5: + make-asynchronous@1.1.0: dependencies: - pseudomap: 1.0.2 - yallist: 2.1.2 + p-event: 6.0.1 + type-fest: 4.41.0 + web-worker: 1.5.0 make-dir@1.3.0: dependencies: pify: 3.0.0 - make-error@1.3.6: {} - map-obj@1.0.1: {} + math-intrinsics@1.1.0: {} + mdn-data@2.0.28: {} mdn-data@2.0.30: {} + mdn-data@2.27.1: {} + meow@3.7.0: dependencies: camelcase-keys: 2.1.0 @@ -4428,36 +4648,16 @@ snapshots: redent: 1.0.0 trim-newlines: 5.0.0 - merge-stream@1.0.1: - dependencies: - readable-stream: 2.3.8 - merge-stream@2.0.0: {} merge2@1.4.1: {} - micromatch@2.3.11: - dependencies: - arr-diff: 2.0.0 - array-unique: 0.2.1 - braces: 3.0.3 - expand-brackets: 0.1.5 - extglob: 0.3.2 - filename-regex: 2.0.1 - is-extglob: 1.0.0 - is-glob: 2.0.1 - kind-of: 3.2.2 - normalize-path: 2.1.1 - object.omit: 2.0.1 - parse-glob: 3.0.4 - regex-cache: 0.4.4 - - micromatch@4.0.7: + micromatch@4.0.8: dependencies: braces: 3.0.3 - picomatch: 2.3.1 + picomatch: 2.3.2 - mime-db@1.53.0: {} + mime-db@1.54.0: {} mimic-fn@2.1.0: {} @@ -4465,78 +4665,44 @@ snapshots: mimic-response@1.0.1: {} - mimic-response@3.1.0: {} - mimic-response@4.0.0: {} - minimatch@3.1.2: + minimatch@10.2.6: dependencies: - brace-expansion: 1.1.11 + brace-expansion: 5.0.9 - minimatch@9.0.5: + minimatch@3.1.5: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 1.1.18 - minimist@1.2.8: {} + minimatch@9.0.9: + dependencies: + brace-expansion: 2.1.4 - minipass@7.1.2: {} + minimist@1.2.8: {} - mkdirp@0.5.6: - dependencies: - minimist: 1.2.8 + minipass@7.1.3: {} mozjpeg@8.0.0: dependencies: bin-build: 3.0.0 bin-wrapper: 4.1.0 - ms@2.1.2: {} - - multipipe@0.1.2: - dependencies: - duplexer2: 0.0.2 - - nice-napi@1.0.2: - dependencies: - node-addon-api: 3.2.1 - node-gyp-build: 4.8.1 - optional: true - - nice-try@1.0.5: {} - - node-addon-api@3.2.1: - optional: true - - node-fetch@2.7.0: - dependencies: - whatwg-url: 5.0.0 - - node-gyp-build@4.8.1: - optional: true + ms@2.1.3: {} - node-notifier@10.0.1: + node-sarif-builder@3.2.0: dependencies: - growly: 1.3.0 - is-wsl: 2.2.0 - semver: 7.6.3 - shellwords: 0.1.1 - uuid: 8.3.2 - which: 2.0.2 + '@types/sarif': 2.1.7 + fs-extra: 11.4.0 normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.8 - semver: 7.6.3 + resolve: 1.22.12 + semver: 7.8.5 validate-npm-package-license: 3.0.4 - normalize-path@2.1.1: - dependencies: - remove-trailing-separator: 1.1.0 - - normalize-url@6.1.0: {} - - normalize-url@8.0.1: {} + normalize-url@8.1.1: {} npm-conf@1.1.3: dependencies: @@ -4555,25 +4721,23 @@ snapshots: dependencies: path-key: 4.0.0 + npm-run-path@6.0.0: + dependencies: + path-key: 4.0.0 + unicorn-magic: 0.3.0 + nth-check@2.1.1: dependencies: boolbase: 1.0.0 - object-assign@3.0.0: {} - object-assign@4.1.1: {} - object.omit@2.0.1: - dependencies: - for-own: 0.1.5 - is-extendable: 0.1.1 + on-exit-leak-free@2.1.2: {} once@1.4.0: dependencies: wrappy: 1.0.2 - onetime@1.1.0: {} - onetime@5.1.2: dependencies: mimic-fn: 2.1.0 @@ -4582,43 +4746,42 @@ snapshots: dependencies: mimic-fn: 4.0.0 - ordered-read-streams@0.3.0: - dependencies: - is-stream: 1.1.0 - readable-stream: 2.3.8 - - os-filter-obj@1.0.3: {} - os-filter-obj@2.0.0: dependencies: arch: 2.2.0 - os-tmpdir@1.0.2: {} - ow@2.0.0: dependencies: '@sindresorhus/is': 6.3.1 callsites: 4.2.0 dot-prop: 8.0.2 environment: 1.1.0 - fast-equals: 5.0.1 - is-identifier: 1.0.1 + fast-equals: 5.4.1 + is-identifier: 1.1.0 - oxc-resolver@1.10.2: + oxc-resolver@11.24.2: optionalDependencies: - '@oxc-resolver/binding-darwin-arm64': 1.10.2 - '@oxc-resolver/binding-darwin-x64': 1.10.2 - '@oxc-resolver/binding-freebsd-x64': 1.10.2 - '@oxc-resolver/binding-linux-arm-gnueabihf': 1.10.2 - '@oxc-resolver/binding-linux-arm64-gnu': 1.10.2 - '@oxc-resolver/binding-linux-arm64-musl': 1.10.2 - '@oxc-resolver/binding-linux-x64-gnu': 1.10.2 - '@oxc-resolver/binding-linux-x64-musl': 1.10.2 - '@oxc-resolver/binding-wasm32-wasi': 1.10.2 - '@oxc-resolver/binding-win32-arm64-msvc': 1.10.2 - '@oxc-resolver/binding-win32-x64-msvc': 1.10.2 - - p-cancelable@2.1.1: {} + '@oxc-resolver/binding-android-arm-eabi': 11.24.2 + '@oxc-resolver/binding-android-arm64': 11.24.2 + '@oxc-resolver/binding-darwin-arm64': 11.24.2 + '@oxc-resolver/binding-darwin-x64': 11.24.2 + '@oxc-resolver/binding-freebsd-x64': 11.24.2 + '@oxc-resolver/binding-linux-arm-gnueabihf': 11.24.2 + '@oxc-resolver/binding-linux-arm-musleabihf': 11.24.2 + '@oxc-resolver/binding-linux-arm64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-arm64-musl': 11.24.2 + '@oxc-resolver/binding-linux-ppc64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-riscv64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-riscv64-musl': 11.24.2 + '@oxc-resolver/binding-linux-s390x-gnu': 11.24.2 + '@oxc-resolver/binding-linux-x64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-x64-musl': 11.24.2 + '@oxc-resolver/binding-openharmony-arm64': 11.24.2 + '@oxc-resolver/binding-wasm32-wasi': 11.24.2 + '@oxc-resolver/binding-win32-arm64-msvc': 11.24.2 + '@oxc-resolver/binding-win32-x64-msvc': 11.24.2 + + p-cancelable@0.3.0: {} p-cancelable@4.0.1: {} @@ -4630,6 +4793,10 @@ snapshots: dependencies: p-timeout: 2.0.1 + p-event@6.0.1: + dependencies: + p-timeout: 6.1.4 + p-finally@1.0.0: {} p-map-series@1.0.0: @@ -4648,22 +4815,13 @@ snapshots: dependencies: p-finally: 1.0.0 - package-json-from-dist@1.0.0: {} - - parse-glob@3.0.4: - dependencies: - glob-base: 0.3.0 - is-dotfile: 1.0.3 - is-extglob: 1.0.0 - is-glob: 2.0.1 + p-timeout@6.1.4: {} parse-json@2.2.0: dependencies: - error-ex: 1.3.2 + error-ex: 1.3.4 - parse-node-version@1.0.1: {} - - path-dirname@1.0.2: {} + parse-ms@4.0.0: {} path-exists@2.1.0: dependencies: @@ -4679,10 +4837,10 @@ snapshots: path-parse@1.0.7: {} - path-scurry@1.11.1: + path-scurry@2.0.2: dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 + lru-cache: 11.5.2 + minipass: 7.1.3 path-type@1.1.0: dependencies: @@ -4690,15 +4848,15 @@ snapshots: pify: 2.3.0 pinkie-promise: 2.0.1 - path-type@5.0.0: {} - - peek-readable@5.1.3: {} + path-type@6.0.0: {} pend@1.2.0: {} - picocolors@1.0.1: {} + picocolors@1.1.1: {} - picomatch@2.3.1: {} + picomatch@2.3.2: {} + + picomatch@4.0.7: {} pify@2.3.0: {} @@ -4712,11 +4870,47 @@ snapshots: pinkie@2.0.4: {} - pirates@4.0.6: {} + pino-abstract-transport@3.0.0: + dependencies: + split2: 4.2.0 - piscina@4.6.1: + pino-pretty@13.1.3: + dependencies: + colorette: 2.0.20 + dateformat: 4.6.3 + fast-copy: 4.1.0 + fast-safe-stringify: 2.1.1 + help-me: 5.0.0 + joycon: 3.1.1 + minimist: 1.2.8 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 3.0.0 + pump: 3.0.4 + secure-json-parse: 4.1.0 + sonic-boom: 4.2.1 + strip-json-comments: 5.0.3 + + pino-std-serializers@7.1.0: {} + + pino@10.3.1: + dependencies: + '@pinojs/redact': 0.4.0 + atomic-sleep: 1.0.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 3.0.0 + pino-std-serializers: 7.1.0 + process-warning: 5.1.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 4.2.1 + thread-stream: 4.2.0 + + pirates@4.0.7: {} + + piscina@4.9.4: optionalDependencies: - nice-napi: 1.0.2 + '@napi-rs/nice': 1.1.1 plur@2.1.2: dependencies: @@ -4728,32 +4922,30 @@ snapshots: bin-wrapper: 4.1.0 execa: 8.0.1 + possible-typed-array-names@1.1.0: {} + + prepend-http@1.0.4: {} + + pretty-ms@9.3.1: + dependencies: + parse-ms: 4.0.0 + process-nextick-args@2.0.1: {} - proto-list@1.2.4: {} + process-warning@5.1.0: {} - pseudomap@1.0.2: {} + proto-list@1.2.4: {} - pump@3.0.0: + pump@3.0.4: dependencies: - end-of-stream: 1.4.4 + end-of-stream: 1.4.5 once: 1.4.0 queue-microtask@1.2.3: {} - quick-lru@5.1.1: {} - - rc@1.2.8: - dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.8 - strip-json-comments: 2.0.1 + quick-format-unescaped@4.0.4: {} - read-all-stream@3.1.0: - dependencies: - pinkie-promise: 2.0.1 - readable-stream: 2.3.8 + quick-lru@5.1.1: {} read-pkg-up@1.0.1: dependencies: @@ -4766,20 +4958,6 @@ snapshots: normalize-package-data: 2.5.0 path-type: 1.1.0 - readable-stream@1.0.34: - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 0.0.1 - string_decoder: 0.10.31 - - readable-stream@1.1.14: - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 0.0.1 - string_decoder: 0.10.31 - readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 @@ -4790,64 +4968,41 @@ snapshots: string_decoder: 1.1.1 util-deprecate: 1.0.2 - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - - readable-web-to-node-stream@3.0.2: - dependencies: - readable-stream: 3.6.2 + real-require@0.2.0: {} - rechoir@0.6.2: - dependencies: - resolve: 1.22.8 + real-require@1.0.0: {} redent@1.0.0: dependencies: indent-string: 2.1.0 strip-indent: 1.0.1 - regex-cache@0.4.4: - dependencies: - is-equal-shallow: 0.1.3 - - remove-trailing-separator@1.1.0: {} - repeating@2.0.1: dependencies: is-finite: 1.1.0 - replace-ext@0.0.1: {} - - replace-in-file@8.1.0: + replace-in-file@9.0.0: dependencies: - chalk: 5.3.0 - glob: 10.4.5 - yargs: 17.7.2 + chalk: 6.0.0 + glob: 13.0.6 + yargs: 18.1.0 - require-directory@2.1.1: {} - - reserved-identifiers@1.0.0: {} + reserved-identifiers@1.2.0: {} resolve-alpn@1.2.1: {} - resolve@1.22.8: + resolve@1.22.12: dependencies: - is-core-module: 2.15.0 + es-errors: 1.3.0 + is-core-module: 2.16.2 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - responselike@2.0.1: - dependencies: - lowercase-keys: 2.0.0 - - responselike@3.0.0: + responselike@4.0.2: dependencies: lowercase-keys: 3.0.0 - reusify@1.0.4: {} + reusify@1.1.0: {} rimraf@2.7.1: dependencies: @@ -4861,82 +5016,92 @@ snapshots: safe-buffer@5.2.1: {} + safe-stable-stringify@2.5.0: {} + + sax@1.6.1: {} + + secure-json-parse@4.1.0: {} + seek-bzip@1.0.6: dependencies: commander: 2.20.3 + seek-bzip@2.0.0: + dependencies: + commander: 6.2.1 + semver-regex@4.0.5: {} semver-truncate@1.1.2: dependencies: - semver: 7.6.3 + semver: 7.8.5 semver-truncate@3.0.0: dependencies: - semver: 7.6.3 + semver: 7.8.5 - semver@7.6.3: {} + semver@7.8.5: {} - set-immediate-shim@1.0.1: {} + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 - sharp@0.33.4: + sharp@0.35.4(@types/node@26.4.0): dependencies: - color: 4.2.3 - detect-libc: 2.0.3 - semver: 7.6.3 + '@img/colour': 1.1.0 + detect-libc: 2.1.2 + semver: 7.8.5 optionalDependencies: - '@img/sharp-darwin-arm64': 0.33.4 - '@img/sharp-darwin-x64': 0.33.4 - '@img/sharp-libvips-darwin-arm64': 1.0.2 - '@img/sharp-libvips-darwin-x64': 1.0.2 - '@img/sharp-libvips-linux-arm': 1.0.2 - '@img/sharp-libvips-linux-arm64': 1.0.2 - '@img/sharp-libvips-linux-s390x': 1.0.2 - '@img/sharp-libvips-linux-x64': 1.0.2 - '@img/sharp-libvips-linuxmusl-arm64': 1.0.2 - '@img/sharp-libvips-linuxmusl-x64': 1.0.2 - '@img/sharp-linux-arm': 0.33.4 - '@img/sharp-linux-arm64': 0.33.4 - '@img/sharp-linux-s390x': 0.33.4 - '@img/sharp-linux-x64': 0.33.4 - '@img/sharp-linuxmusl-arm64': 0.33.4 - '@img/sharp-linuxmusl-x64': 0.33.4 - '@img/sharp-wasm32': 0.33.4 - '@img/sharp-win32-ia32': 0.33.4 - '@img/sharp-win32-x64': 0.33.4 - - shebang-command@1.2.0: - dependencies: - shebang-regex: 1.0.0 + '@img/sharp-darwin-arm64': 0.35.4 + '@img/sharp-darwin-x64': 0.35.4 + '@img/sharp-freebsd-wasm32': 0.35.4 + '@img/sharp-libvips-darwin-arm64': 1.3.3 + '@img/sharp-libvips-darwin-x64': 1.3.3 + '@img/sharp-libvips-linux-arm': 1.3.3 + '@img/sharp-libvips-linux-arm64': 1.3.3 + '@img/sharp-libvips-linux-ppc64': 1.3.3 + '@img/sharp-libvips-linux-riscv64': 1.3.3 + '@img/sharp-libvips-linux-s390x': 1.3.3 + '@img/sharp-libvips-linux-x64': 1.3.3 + '@img/sharp-libvips-linuxmusl-arm64': 1.3.3 + '@img/sharp-libvips-linuxmusl-x64': 1.3.3 + '@img/sharp-linux-arm': 0.35.4 + '@img/sharp-linux-arm64': 0.35.4 + '@img/sharp-linux-ppc64': 0.35.4 + '@img/sharp-linux-riscv64': 0.35.4 + '@img/sharp-linux-s390x': 0.35.4 + '@img/sharp-linux-x64': 0.35.4 + '@img/sharp-linuxmusl-arm64': 0.35.4 + '@img/sharp-linuxmusl-x64': 0.35.4 + '@img/sharp-webcontainers-wasm32': 0.35.4 + '@img/sharp-win32-arm64': 0.35.4 + '@img/sharp-win32-ia32': 0.35.4 + '@img/sharp-win32-x64': 0.35.4 + '@types/node': 26.4.0 shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - shebang-regex@1.0.0: {} - shebang-regex@3.0.0: {} - shelljs@0.8.5: - dependencies: - glob: 7.2.3 - interpret: 1.4.0 - rechoir: 0.6.2 - - shellwords@0.1.1: {} - signal-exit@3.0.7: {} signal-exit@4.1.0: {} - simple-swizzle@0.2.2: - dependencies: - is-arrayish: 0.3.2 - slash@3.0.0: {} slash@5.1.0: {} + sonic-boom@4.2.1: + dependencies: + atomic-sleep: 1.0.0 + sort-keys-length@1.0.1: dependencies: sort-keys: 1.1.2 @@ -4945,7 +5110,7 @@ snapshots: dependencies: is-plain-obj: 1.1.0 - source-map-js@1.2.0: {} + source-map-js@1.2.1: {} source-map-support@0.5.21: dependencies: @@ -4954,23 +5119,23 @@ snapshots: source-map@0.6.1: {} - source-map@0.7.4: {} - - sparkles@1.0.1: {} + source-map@0.7.6: {} spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.18 + spdx-license-ids: 3.0.23 spdx-exceptions@2.5.0: {} spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.18 + spdx-license-ids: 3.0.23 - spdx-license-ids@3.0.18: {} + spdx-license-ids@3.0.23: {} + + split2@4.2.0: {} squeak@1.3.0: dependencies: @@ -4978,55 +5143,41 @@ snapshots: console-stream: 0.1.1 lpad-align: 1.1.2 - stream-combiner2@1.1.1: + streamx@2.28.1: dependencies: - duplexer2: 0.1.4 - readable-stream: 2.3.8 - - stream-shift@1.0.3: {} + events-universal: 1.0.1 + fast-fifo: 1.3.2 + text-decoder: 1.2.7 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a string-length@1.0.1: dependencies: strip-ansi: 3.0.1 - string-width@4.2.3: + string-width@7.2.0: dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 + emoji-regex: 10.6.0 + get-east-asian-width: 1.6.0 + strip-ansi: 7.2.0 - string-width@5.1.2: + string-width@8.2.2: dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.0 - - string_decoder@0.10.31: {} + get-east-asian-width: 1.6.0 + strip-ansi: 7.2.0 string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - strip-ansi@3.0.1: dependencies: ansi-regex: 2.1.1 - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-ansi@7.1.0: + strip-ansi@7.2.0: dependencies: - ansi-regex: 6.0.1 - - strip-bom-stream@1.0.0: - dependencies: - first-chunk-stream: 1.0.0 - strip-bom: 2.0.0 + ansi-regex: 6.3.0 strip-bom@2.0.0: dependencies: @@ -5036,41 +5187,39 @@ snapshots: dependencies: is-natural-number: 4.0.1 + strip-dirs@3.0.0: + dependencies: + inspect-with-kind: 1.0.5 + is-plain-obj: 1.1.0 + strip-eof@1.0.0: {} strip-final-newline@2.0.0: {} strip-final-newline@3.0.0: {} + strip-final-newline@4.0.0: {} + strip-indent@1.0.1: dependencies: get-stdin: 4.0.1 - strip-json-comments@2.0.1: {} + strip-json-comments@3.1.1: {} - strip-json-comments@3.1.0: {} + strip-json-comments@5.0.3: {} strip-outer@1.0.1: dependencies: escape-string-regexp: 1.0.5 - strip-outer@2.0.0: {} - - strnum@1.0.5: {} - - strtok3@7.1.1: - dependencies: - '@tokenizer/token': 0.3.0 - peek-readable: 5.1.3 - - strtok3@8.0.1: + strtok3@10.3.5: dependencies: '@tokenizer/token': 0.3.0 - peek-readable: 5.1.3 - super-regex@1.0.0: + super-regex@1.1.0: dependencies: function-timeout: 1.0.2 + make-asynchronous: 1.1.0 time-span: 5.1.0 supports-color@2.0.0: {} @@ -5081,59 +5230,67 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svgo@3.3.2: + svgo@3.3.5: dependencies: - '@trysound/sax': 0.2.0 commander: 7.2.0 - css-select: 5.1.0 + css-select: 5.2.2 css-tree: 2.3.1 - css-what: 6.1.0 + css-what: 6.2.2 csso: 5.0.5 - picocolors: 1.0.1 + picocolors: 1.1.1 + sax: 1.6.1 + + svgo@4.1.0: + dependencies: + commander: 11.1.0 + css-select: 6.0.0 + css-tree: 3.2.1 + css-what: 7.0.0 + csso: 5.0.5 + picocolors: 1.1.1 + sax: 1.6.1 + + system-architecture@1.0.0: {} + + tagged-tag@1.0.0: {} tar-stream@1.6.2: dependencies: bl: 1.2.3 buffer-alloc: 1.2.0 - end-of-stream: 1.4.4 + end-of-stream: 1.4.5 fs-constants: 1.0.0 readable-stream: 2.3.8 - to-buffer: 1.1.1 + to-buffer: 1.2.2 xtend: 4.0.2 - temp-dir@1.0.0: {} - - tempfile@1.1.1: + tar-stream@3.1.7: dependencies: - os-tmpdir: 1.0.2 - uuid: 2.0.3 + b4a: 1.8.1 + fast-fifo: 1.3.2 + streamx: 2.28.1 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + + temp-dir@1.0.0: {} tempfile@2.0.0: dependencies: temp-dir: 1.0.0 - uuid: 3.4.0 - - text-table@0.2.0: {} + uuid: 14.0.2 - through2-filter@2.0.0: + text-decoder@1.2.7: dependencies: - through2: 2.0.5 - xtend: 4.0.2 - - through2-filter@3.0.0: - dependencies: - through2: 2.0.5 - xtend: 4.0.2 + b4a: 1.8.1 + transitivePeerDependencies: + - react-native-b4a - through2@0.6.5: - dependencies: - readable-stream: 1.0.34 - xtend: 4.0.2 + text-table@0.2.0: {} - through2@2.0.5: + thread-stream@4.2.0: dependencies: - readable-stream: 2.3.8 - xtend: 4.0.2 + real-require: 1.0.0 through@2.3.8: {} @@ -5141,61 +5298,36 @@ snapshots: dependencies: convert-hrtime: 5.0.0 - time-stamp@1.1.0: {} + timed-out@4.0.1: {} - to-absolute-glob@0.1.1: + tinyglobby@0.2.17: dependencies: - extend-shallow: 2.0.1 + fdir: 6.5.0(picomatch@4.0.7) + picomatch: 4.0.7 - to-buffer@1.1.1: {} + to-buffer@1.2.2: + dependencies: + isarray: 2.0.5 + safe-buffer: 5.2.1 + typed-array-buffer: 1.0.3 to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - token-types@5.0.1: + token-types@6.1.2: dependencies: + '@borewit/text-codec': 0.2.2 '@tokenizer/token': 0.3.0 ieee754: 1.2.1 - token-types@6.0.0: - dependencies: - '@tokenizer/token': 0.3.0 - ieee754: 1.2.1 - - tr46@0.0.3: {} - trim-newlines@5.0.0: {} trim-repeated@1.0.0: dependencies: escape-string-regexp: 1.0.5 - trim-repeated@2.0.0: - dependencies: - escape-string-regexp: 5.0.0 - - ts-node@10.9.2(@swc/core@1.7.5)(@types/node@22.1.0)(typescript@5.5.4): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 22.1.0 - acorn: 8.12.1 - acorn-walk: 8.3.3 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.5.4 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - optionalDependencies: - '@swc/core': 1.7.5 - - tslib@2.6.3: {} + tslib@2.8.1: {} tunnel-agent@0.6.0: dependencies: @@ -5203,117 +5335,92 @@ snapshots: type-fest@3.13.1: {} - type-fest@4.23.0: {} + type-fest@4.41.0: {} + + type-fest@5.9.0: + dependencies: + tagged-tag: 1.0.0 - typedarray@0.0.6: {} + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 - typescript@5.5.4: {} + typescript@6.0.3: {} - uint8array-extras@1.4.0: {} + typescript@7.0.2: + optionalDependencies: + '@typescript/typescript-aix-ppc64': 7.0.2 + '@typescript/typescript-darwin-arm64': 7.0.2 + '@typescript/typescript-darwin-x64': 7.0.2 + '@typescript/typescript-freebsd-arm64': 7.0.2 + '@typescript/typescript-freebsd-x64': 7.0.2 + '@typescript/typescript-linux-arm': 7.0.2 + '@typescript/typescript-linux-arm64': 7.0.2 + '@typescript/typescript-linux-loong64': 7.0.2 + '@typescript/typescript-linux-mips64el': 7.0.2 + '@typescript/typescript-linux-ppc64': 7.0.2 + '@typescript/typescript-linux-riscv64': 7.0.2 + '@typescript/typescript-linux-s390x': 7.0.2 + '@typescript/typescript-linux-x64': 7.0.2 + '@typescript/typescript-netbsd-arm64': 7.0.2 + '@typescript/typescript-netbsd-x64': 7.0.2 + '@typescript/typescript-openbsd-arm64': 7.0.2 + '@typescript/typescript-openbsd-x64': 7.0.2 + '@typescript/typescript-sunos-x64': 7.0.2 + '@typescript/typescript-win32-arm64': 7.0.2 + '@typescript/typescript-win32-x64': 7.0.2 + + uint8array-extras@1.5.0: {} unbzip2-stream@1.4.3: dependencies: buffer: 5.7.1 through: 2.3.8 - undici-types@6.13.0: {} + undici-types@8.3.0: {} - unicorn-magic@0.1.0: {} + unicorn-magic@0.3.0: {} - unique-stream@2.3.1: - dependencies: - json-stable-stringify-without-jsonify: 1.0.1 - through2-filter: 3.0.0 + universalify@2.0.1: {} - url-regex@3.2.0: + url-parse-lax@1.0.0: dependencies: - ip-regex: 1.0.3 + prepend-http: 1.0.4 url-to-options@1.0.1: {} util-deprecate@1.0.2: {} - uuid@2.0.3: {} - - uuid@3.4.0: {} - - uuid@8.3.2: {} - - v8-compile-cache-lib@3.0.1: {} - - vali-date@1.0.0: {} + uuid@14.0.2: {} validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - vinyl-fs@2.4.4: - dependencies: - duplexify: 3.7.1 - glob-stream: 5.3.5 - graceful-fs: 4.2.11 - gulp-sourcemaps: 1.6.0 - is-valid-glob: 0.3.0 - lazystream: 1.0.1 - lodash.isequal: 4.5.0 - merge-stream: 1.0.1 - mkdirp: 0.5.6 - object-assign: 4.1.1 - readable-stream: 2.3.8 - strip-bom: 2.0.0 - strip-bom-stream: 1.0.0 - through2: 2.0.5 - through2-filter: 2.0.0 - vali-date: 1.0.0 - vinyl: 1.2.0 - - vinyl@0.5.3: - dependencies: - clone: 1.0.4 - clone-stats: 0.0.1 - replace-ext: 0.0.1 - - vinyl@1.2.0: - dependencies: - clone: 1.0.4 - clone-stats: 0.0.1 - replace-ext: 0.0.1 - - ware@1.3.0: - dependencies: - wrap-fn: 0.1.5 - - webidl-conversions@3.0.1: {} + web-worker@1.5.0: {} - whatwg-url@5.0.0: + which-typed-array@1.1.22: dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - - which@1.3.1: - dependencies: - isexe: 2.0.0 + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 which@2.0.2: dependencies: isexe: 2.0.0 - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.1 - string-width: 5.1.2 - strip-ansi: 7.1.0 - - wrap-fn@0.1.5: + wrap-ansi@9.0.2: dependencies: - co: 3.1.0 + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.2.0 wrappy@1.0.2: {} @@ -5323,26 +5430,27 @@ snapshots: y18n@5.0.8: {} - yallist@2.1.2: {} + yargs-parser@22.0.0: {} - yargs-parser@21.1.1: {} - - yargs@17.7.2: + yargs@18.1.0: dependencies: - cliui: 8.0.1 - escalade: 3.1.2 + cliui: 9.0.1 + escalade: 3.2.0 get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 + string-width: 8.2.2 y18n: 5.0.8 - yargs-parser: 21.1.1 + yargs-parser: 22.0.0 yauzl@2.10.0: dependencies: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 - yn@3.1.1: {} + yauzl@3.4.0: + dependencies: + pend: 1.2.0 + + yoctocolors@2.2.0: {} zopflipng-bin@6.0.1: dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..05fdaa8 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,34 @@ +allowBuilds: + '@swc/core': true + gifsicle: true + jpegtran-bin: true + mozjpeg: true + pngquant-bin: true + sharp: true + zopflipng-bin: true +engineStrict: true +minimumReleaseAge: 10080 +minimumReleaseAgeExclude: + - brace-expansion@1.1.17 || 1.1.18 || 2.1.3 || 2.1.4 || 5.0.9 + - got@11.8.5 + - decompress@4.2.2 +minimumReleaseAgeIgnoreMissingTime: true +minimumReleaseAgeStrict: false +overrides: + braces@<2.3.1: '>=2.3.1' + braces@<3.0.3: '>=3.0.3' + cross-spawn@<6.0.6: '>=6.0.6' + decompress@<4.2.1: '>=4.2.1' + file-type@>=13.0.0 <21.3.1: '>=21.3.1' + got@<11.8.5: '>=11.8.5' + download>got: '7.1.0' + http-cache-semantics@<4.1.1: '>=4.1.1' + micromatch@<4.0.8: '>=4.0.8' + semver-regex@<3.1.3: '>=3.1.3' + semver-regex@<3.1.4: '>=3.1.4' + semver@>=2.0.0-alpha <5.7.2: '>=5.7.2' + trim-newlines@<3.0.1: '>=3.0.1' + tunnel-agent@<0.6.0: '>=0.6.0' + uuid@<14.0.0: '>=14.0.0' + web-worker: '>=1.5.0' +saveExact: true diff --git a/src/commands/files/clean-sourcemap.command.ts b/src/commands/files/clean-sourcemap.command.ts index bcfcc04..b891dbf 100644 --- a/src/commands/files/clean-sourcemap.command.ts +++ b/src/commands/files/clean-sourcemap.command.ts @@ -2,80 +2,69 @@ import { cwd, uptime } from 'node:process' import type { ArgumentsCamelCase, InferredOptionTypes } from 'yargs' -import { error, log } from '#@/src/shared/helpers/console.js' -import { File } from '#@/src/shared/lib/file.js' -import { Notify } from '#@/src/shared/lib/notify.js' -import config from '#@/src/shared/helpers/config.js' -import { YargsCommand } from '#@/src/shared/yargs-command.js' +import { error, log } from '#/src/shared/domain/console.js' +import { File } from '#/src/shared/domain/file.js' +import config from '#/src/shared/infrastructure/config.js' -export class CleanSourcemap extends YargsCommand { - readonly command = 'files:clean-sourcemaps' - readonly description = - 'Clean sourcemaps comments (like /*# sourceMappingURL=foo.css.map */) from your CSS files. They can cause conflict in the compiling or packaging process.' - readonly builder = this.options({ - source: { - alias: 'src', - describe: 'Source path of the files.', - type: 'string', - default: './node_modules/', - }, - packages: { - alias: 'pkg', - describe: 'List of npm packages with CSS files to clean.', - type: 'array', - default: ['bootstrap-datepicker', 'tinymce'], - }, - } as const) +export const command = 'files:clean-sourcemaps' +export const description = 'Clean sourcemaps' +export const builder = { + source: { + alias: 'src', + describe: 'Source path of the files.', + type: 'string', + default: './node_modules/', + }, + packages: { + alias: 'pkg', + describe: 'List of npm packages with CSS files to clean.', + type: 'array', + default: [ + 'bootstrap-datepicker', + 'tinymce', + ], + }, +} as const +export const handler = (args: ArgumentsCamelCase>) => { + const commandStartedAt = uptime() + const packageJson = getPackageJson() - constructor() { - super() - } - - handler(args: ArgumentsCamelCase>) { - const commandStartedAt = uptime() - const packageJson = getPackageJson() - - // https://github.com/npm/validate-npm-package-name - const packages = args.packages.map((_) => _.toString().trim()) // sanitize - const { source } = args + // https://github.com/npm/validate-npm-package-name + const packages = args.packages.map((_) => _.toString().trim()) // sanitize + const { source } = args - const ensurePackages = [ - ...Object.keys(packageJson?.dependencies ?? {}), - ...Object.keys(packageJson?.devDependencies ?? {}), - ].some((dependencies) => packages.indexOf(dependencies) >= 0) + const ensurePackages = [ + ...Object.keys(packageJson?.dependencies ?? {}), + ...Object.keys(packageJson?.devDependencies ?? {}), + ].some((dependencies) => packages.indexOf(dependencies) >= 0) - if (!ensurePackages) { - error(`[${this.command}]:`, 'Dependencies not found') - return - } - - const directories = packages - .map((pkg) => getDirectory(source, pkg)) - .filter((file) => file.isDirectory()) - const files = directories.reduce( - (files: File[], { info: { absolutePath } }) => - files.concat( - ...File.sync('**/*.css', { - cwd: absolutePath, - absolute: true, - }).map((file) => File.find(file)), - ), - [], - ) + if (!ensurePackages) { + error(`[${command}]:`, 'Dependencies not found') + return + } - const regexp = config.CSS_SOURCEMAP_REGEX - for (const file of files) { - const data = file.read() - const replaced = data.replace(regexp, '') - file.write(replaced) - log('[File]:', file.info.path) - } - const commandFinishedAt = uptime() - const commandElapsedTime = commandFinishedAt - commandStartedAt + const directories = packages.map((pkg) => getDirectory(source, pkg)).filter((file) => file.isDirectory()) + const files = directories.reduce( + (files: File[], { info: { absolutePath } }) => + files.concat( + ...File.sync('**/*.css', { + cwd: absolutePath, + }).map((file) => File.find(file)), + ), + [], + ) - log(`[${this.command}]:`, `${commandElapsedTime.toFixed(3)}s`) - Notify.done(this.command, 'Done, watch console results') + const regexp = config.CSS_SOURCEMAP_REGEX + for (const file of files) { + const data = file.read() + const replaced = data.replace(regexp, '') + file.write(replaced) + log('[File]:', file.info.path) } + const commandFinishedAt = uptime() + const commandElapsedTime = commandFinishedAt - commandStartedAt + + log(`[${command}]:`, `${commandElapsedTime.toFixed(3)}s`) } const getPackageJson = (): { @@ -94,9 +83,7 @@ const getPackageJson = (): { const json = JSON.parse(file.read()) return json } catch (error) { - throw new Error( - `Error parsing the file <${filename}> in the root directory of the project located at <${cwd()}>`, - ) + throw new Error(`Error parsing the file <${filename}> in the root directory of the project located at <${cwd()}>`) } } diff --git a/src/commands/html/html-validate.command.ts b/src/commands/html/html-validate.command.ts index 5a7ca3e..39dcfb9 100644 --- a/src/commands/html/html-validate.command.ts +++ b/src/commands/html/html-validate.command.ts @@ -1,85 +1,72 @@ -import { cwd, uptime, exit } from 'node:process' - -import type { ArgumentsCamelCase, InferredOptionTypes } from 'yargs' -import { HTMLHint } from 'htmlhint' +import { cwd, exit, uptime } from 'node:process' +import htmlhint, { type HTMLHint } from 'htmlhint' import htmlhintStylish from 'htmlhint-stylish' - -import { File } from '#@/src/shared/lib/file.js' -import { log, warn } from '#@/src/shared/helpers/console.js' -import { Notify } from '#@/src/shared/lib/notify.js' -import config from '#@/src/shared/helpers/config.js' -import { YargsCommand } from '#@/src/shared/yargs-command.js' +import type { ArgumentsCamelCase, InferredOptionTypes } from 'yargs' +import { log, warn } from '#/src/shared/domain/console.js' +import { File } from '#/src/shared/domain/file.js' +import config from '#/src/shared/infrastructure/config.js' type Ruleset = (typeof HTMLHint)['defaultRuleset'] type Hint = ReturnType<(typeof HTMLHint)['verify']>[number] -export class HtmlValidate extends YargsCommand { - readonly command = 'html:validate' - readonly description = - 'Validate html files with htmlhint. \nRead about rules on:\n- https://github.com/htmlhint/HTMLHint/wiki/Rules\n- https://htmlhint.com/docs/user-guide/list-rules' - readonly builder = this.options({ - source: { - alias: 'src', - describe: 'Source path of the html files.', - type: 'string', - default: 'public', - }, - } as const) - - constructor() { - super() - } +export const command = 'html:validate' +export const builder = { + source: { + alias: 'src', + describe: 'Directory containing HTML files to validate', + type: 'string', + default: 'public', + }, +} as const +export const description = + 'Validate HTML files for syntax errors and best practices using HTMLHint. \nRead about rules on:\n- https://github.com/htmlhint/HTMLHint/wiki/Rules\n- https://htmlhint.com/docs/user-guide/list-rules' - handler(args: ArgumentsCamelCase>) { - const commandStartedAt = uptime() +export const handler = (args: ArgumentsCamelCase>) => { + const commandStartedAt = uptime() - const { source } = args - const files = File.sync(`${source}/**/*.+(html)`, { absolute: true }) + const { source } = args + const files = File.sync(`${source}/**/*.+(html)`) - if (!files.length) { - warn(this.command, 'HTML files not found') - exit(0) - } + if (!files.length) { + warn(command, 'HTML files not found') + exit(0) + } - /** - * DEBT: Can it be a factory of configs? - */ - const htmlhintrc = File.find('.htmlhintrc') - const ruleSet: Ruleset = htmlhintrc.isFile() - ? JSON.parse(htmlhintrc.read()) - : config.HTML_RULE_SET + /** + * DEBT: Can it be a factory of configs? + */ + const htmlhintrc = File.find('.htmlhintrc') + const ruleSet: Ruleset = htmlhintrc.isFile() ? JSON.parse(htmlhintrc.read()) : config.HTML_RULE_SET - const lintResults = files - .map((file) => ({ - fileContent: File.find(file).read(), + const lintResults = files + .map((file) => ({ + fileContent: File.find(file).read(), + file, + })) + .map(({ fileContent, file }) => + htmlhint?.HTMLHint?.verify?.(fileContent, ruleSet).map((lintResult: Hint) => ({ file, - })) - .map(({ fileContent, file }) => - HTMLHint.verify(fileContent, ruleSet).map((lintResult: Hint) => ({ - file, - error: lintResult, - })), - ) - .filter((lintResult) => lintResult.length !== 0) + error: lintResult, + })), + ) + .filter((lintResult) => lintResult.length !== 0) - if (!lintResults.length) { - log(this.command, 'No html errors have been found :)') - return - } + if (!lintResults.length) { + log(command, 'No html errors have been found :)') + return + } - for (const messages of lintResults) { - htmlhintStylish({ - cwd: cwd(), - htmlhint: { - messages, - }, - }) - } + for (const messages of lintResults) { + htmlhintStylish({ + cwd: cwd(), + htmlhint: { + messages, + }, + }) + } - const commandFinishedAt = uptime() - const commandElapsedTime = commandFinishedAt - commandStartedAt + const commandFinishedAt = uptime() + const commandElapsedTime = commandFinishedAt - commandStartedAt - log(this.command, `${commandElapsedTime.toFixed(3)}s`) - Notify.info(this.command, 'Task done, watch results in console') - } + log(command, `${commandElapsedTime.toFixed(3)}s`) } diff --git a/src/commands/images/image-minifier.ts b/src/commands/images/image-minifier.ts new file mode 100644 index 0000000..48debda --- /dev/null +++ b/src/commands/images/image-minifier.ts @@ -0,0 +1,78 @@ +import { cpus } from 'node:os' +import { join, resolve } from 'node:path' +import type { URL } from 'node:url' +import { isMainThread } from 'node:worker_threads' +import { chunkArray } from '#/src/shared/domain/chunkArray.js' +import { log } from '#/src/shared/domain/console.js' +import { File } from '#/src/shared/domain/file.js' +import { formatSizeDelta } from '#/src/shared/domain/formatBytes.js' +import type { Quality } from '#/src/shared/domain/quality-presets.js' +import { runWorker, summarizeWorkerResults, type WorkerResult } from '#/src/shared/domain/runWorker.js' + +export async function imageMinifier( + { + source, + distribution, + command, + quality, + }: { + source: string + distribution: string + command: string + quality?: Quality + }, + jobFile: URL, +) { + if (isMainThread) { + const src = File.find(source) + if (!src.isDirectory()) { + throw new Error(`Directory <${src.info.absolutePath}> not found`) + } + const dist = File.find(distribution) + + log(`[${command}]: Processing images + Source: ${src.info.absolutePath} + Distribution: ${dist.info.absolutePath}`) + + const extensions = 'png,jpeg,jpg,gif,svg' + const files = File.sync(`**/*.{${extensions}}`, { + cwd: src.info.absolutePath, + }).map((path) => { + const file = File.find(path) + // [input]: /dvx-demo-project/src/assets/img/src/webpack/webpack.png + // [output]: /webpack/webpack.png + const distDir = file.info.dir.replace(src.info.absolutePath, '') + // [input]: /webpack/webpack.png + // [output]: /dvx-demo-project/src/assets/img/dist/webpack + const destination = + distDir.startsWith('\\') || distDir.startsWith('/') + ? join(dist.info.absolutePath, distDir) + : resolve(dist.info.absolutePath, distDir) + return { + source: path, + destination, + ext: file.info.ext.toLowerCase(), + } + }) + const cpuCount = cpus().length - 1 + const tasks: Promise[] = [] + + const chunkedTasks = chunkArray(files, cpuCount) + for (const chunk of chunkedTasks) { + tasks.push( + runWorker( + { + files: chunk, + command, + quality, + }, + jobFile, + ), + ) + } + const results = await Promise.allSettled(tasks) + const { processed, time, bytesIn, bytesOut } = summarizeWorkerResults(results) + const sizes = bytesIn > 0 ? `, ${formatSizeDelta(bytesIn, bytesOut)}` : '' + log(`[${command}]: minify done โ€” ${processed} files${sizes} in ${time.toFixed(2)}s`) + } +} diff --git a/src/commands/images/image-minify.command.ts b/src/commands/images/image-minify.command.ts deleted file mode 100644 index 9447c72..0000000 --- a/src/commands/images/image-minify.command.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { join, resolve } from 'node:path' -import { cpus } from 'node:os' -import { isMainThread } from 'node:worker_threads' -import { URL } from 'node:url' - -import type { ArgumentsCamelCase, InferredOptionTypes } from 'yargs' - -import { warn } from '#@/src/shared/helpers/console.js' -import { File } from '#@/src/shared/lib/file.js' -// import { Notify } from '#@/src/shared/lib/notify.js' -import { YargsCommand } from '#@/src/shared/yargs-command.js' -import { chunkArray } from '#@/src/shared/chunkArray.js' -import { runWorker } from '#@/src/shared/runWorker.js' - -const command = 'img:minify' -const tasks: Promise[] = [] -export class ImageMinify extends YargsCommand { - readonly command = command - - readonly builder = this.options({ - source: { - alias: 'src', - describe: 'Source path without optimization.', - type: 'string', - default: 'src/assets/img/src', - }, - distribution: { - alias: 'dist', - describe: 'Distribution path for optimized images.', - type: 'string', - default: 'src/assets/img/dist', - }, - } as const) - - readonly description = 'Minify images' - - async handler(args: ArgumentsCamelCase>) { - // console.time(this.command) - minify(args) - // console.timeEnd(this.command) - // Notify.info('Minify', 'Minify images task has ended') - } -} - -export async function minify({ source, distribution }: { source: string; distribution: string }) { - if (isMainThread) { - const src = File.find(source) - if (!src.isDirectory()) { - throw new Error(`Directory ${src.info.absolutePath} not found`) - } - const dist = File.find(distribution) - - warn(`[${command}]:`, 'search in:', src.info.absolutePath) - warn(`[${command}]:`, 'result in:', dist.info.absolutePath) - - const extensions = 'png,jpeg,jpg,gif,svg' - const files = File.sync(`**/*.{${extensions}}`, { - cwd: src.info.absolutePath, - absolute: true, - }).map((path) => { - const file = File.find(path) - // [input]: /dvx-demo-project/src/assets/img/src/webpack/webpack.png - // [output]: /webpack/webpack.png - const distDir = file.info.dir.replace(src.info.absolutePath, '') - // [input]: /webpack/webpack.png - // [output]: /dvx-demo-project/src/assets/img/dist/webpack - const destination = - distDir.startsWith('\\') || distDir.startsWith('/') - ? join(dist.info.absolutePath, distDir) - : resolve(dist.info.absolutePath, distDir) - return { - source: path, - destination, - ext: file.info.ext.toLocaleLowerCase(), - } - }) - const cpuCount = cpus().length - 1 - - const chunkedTasks = chunkArray(files, cpuCount) - for (const chunk of chunkedTasks) { - tasks.push( - runWorker( - { - files: chunk, - command, - }, - new URL('./minify.job.js', import.meta.url), - ), - ) - } - Promise.allSettled(tasks) - } -} diff --git a/src/commands/images/image-optimize.command.ts b/src/commands/images/image-optimize.command.ts index 6a90536..9db7614 100644 --- a/src/commands/images/image-optimize.command.ts +++ b/src/commands/images/image-optimize.command.ts @@ -1,62 +1,103 @@ import type { ArgumentsCamelCase, InferredOptionTypes } from 'yargs' -import { minify } from './image-minify.command.js' -import { resize } from './image-resize.command.js' -import { towebp } from './image-to-webp.command.js' -import { YargsCommand } from '#@/src/shared/yargs-command.js' +import { log } from '#/src/shared/domain/console.js' +import { imageMinifier } from './image-minifier.js' +import { imageResizer } from './image-resizer.js' +import { webPConverter } from './image-webp-converter.js' -export class ImageOptimize extends YargsCommand { - readonly command = 'img:optimize' - readonly builder = this.options({ - source: { - alias: 'src', - describe: 'Source path of the images without optimization.', - type: 'string', - default: 'src/assets/img/src', - }, - distribution: { - alias: 'dist', - describe: 'Distribution path for optimized image .', - type: 'string', - default: 'src/assets/img/dist', - }, - width: { - alias: 'w', - type: 'number', - describe: 'Set the width', - default: 1024, - }, - height: { - alias: 'h', - type: 'number', - describe: 'Set the height', - }, - tool: { - alias: 't', - describe: 'Tool to use', - type: 'string', - default: 'sharp', - choices: ['sharp', 'mogrify'], - }, - exclude: { - alias: 'e', - describe: 'Files to exclude / ignore, separated by spaces', - type: 'array', - default: ['opengraph'], +export const command = 'img:optimize' +export const builder = { + source: { + alias: 'src', + describe: 'Source directory containing unoptimized images to process', + type: 'string', + default: 'src/assets/img/src', + }, + distribution: { + alias: 'dist', + describe: 'Output directory for optimized images', + type: 'string', + default: 'src/assets/img/dist', + }, + width: { + alias: 'w', + type: 'number', + describe: 'Target width for resized images in pixels', + default: 1024, + }, + height: { + alias: 'h', + type: 'number', + describe: 'Target height for resized images in pixels (optional)', + }, + tool: { + alias: 't', + describe: 'Image processing tool to use for resizing operations', + type: 'string', + default: 'sharp', + choices: [ + 'sharp', + 'mogrify', + ], + }, + exclude: { + alias: 'e', + describe: 'File patterns to exclude from processing (space-separated)', + type: 'array', + default: [ + 'opengraph', + ], + }, + quality: { + alias: 'q', + describe: 'Compression quality preset', + type: 'string', + default: 'medium', + choices: [ + 'high', + 'medium', + 'low', + ], + }, +} as const + +export const description = 'Comprehensive image optimization: minify, resize, and convert to WebP format' + +export const handler = async (args: ArgumentsCamelCase>) => { + const { source, distribution } = args + + log(`[${command}]: Step 1/3 โ€” minify: ${source} โ†’ ${distribution}`) + await imageMinifier( + { + source, + distribution, + command, + quality: args.quality, }, - } as const) + new URL('./imagemin-minifier.job.js', import.meta.url), + ) - readonly description = 'Process images (minify, convert to webp and resize).' + log(`[${command}]: Step 2/3 โ€” resize: ${distribution} (in-place, max ${args.width}px)`) + await imageResizer( + { + source: distribution, + width: args.width, + height: args.height, + tool: args.tool, + exclude: args.exclude, + command, + }, + new URL('./image-resizer.job.js', import.meta.url), + ) - async handler(args: ArgumentsCamelCase>) { - const dist = args.distribution - await minify(args) - // @ts-ignore - args.distribution = 'src/assets/img/dist/webp' - await towebp(args) - // @ts-ignore - args.source = dist - // @ts-ignore - await resize(args) - } + log(`[${command}]: Step 3/3 โ€” webp: ${distribution} โ†’ ${distribution} (alongside originals)`) + await webPConverter( + { + source: distribution, + distribution, + command, + quality: args.quality, + }, + new URL('./sharp-webp-converter.job.js', import.meta.url), + ) } diff --git a/src/commands/images/image-resize.command.ts b/src/commands/images/image-resize.command.ts index 22436ed..91e9ef8 100644 --- a/src/commands/images/image-resize.command.ts +++ b/src/commands/images/image-resize.command.ts @@ -1,110 +1,58 @@ -import { cpus } from 'node:os' +import { URL } from 'node:url' import type { ArgumentsCamelCase, InferredOptionTypes } from 'yargs' -import { File } from '#@/src/shared/lib/file.js' -// import { Notify } from '#@/src/shared/lib/notify.js' -import { YargsCommand } from '#@/src/shared/yargs-command.js' -import { chunkArray } from '#@/src/shared/chunkArray.js' -import { runWorker } from '#@/src/shared/runWorker.js' -import { isMainThread } from 'node:worker_threads' - -const command = 'img:resize' -const tasks: Promise[] = [] - -export class ImageResize extends YargsCommand { - readonly command = command - - readonly builder = this.options({ - source: { - alias: 'src', - describe: 'Source path of the images to resize', - type: 'string', - default: 'src/assets/img/dist', - }, - width: { - alias: 'w', - type: 'number', - describe: 'Set the width', - default: 1024, - }, - height: { - alias: 'h', - type: 'number', - describe: 'Set the height', - }, - tool: { - alias: 't', - describe: 'Tool to use', - type: 'string', - default: 'sharp', - choices: ['sharp', 'mogrify'], - }, - exclude: { - alias: 'e', - describe: 'Files to exclude / ignore, separated by spaces', - type: 'array', - default: ['opengraph'], +// import { Notify } from '#/src/shared/lib/notify.js' +import { imageResizer } from './image-resizer.js' + +export const command = 'img:resize' +export const builder = { + source: { + alias: 'src', + describe: 'Source directory containing images to resize', + type: 'string', + default: 'src/assets/img/dist', + }, + width: { + alias: 'w', + type: 'number', + describe: 'Target width in pixels for resized images', + default: 1024, + }, + height: { + alias: 'h', + type: 'number', + describe: 'Target height in pixels for resized images (optional, maintains aspect ratio if not set)', + }, + tool: { + alias: 't', + describe: 'Image processing tool to use for resizing', + type: 'string', + default: 'sharp', + choices: [ + 'sharp', + 'mogrify', + ], + }, + exclude: { + alias: 'e', + describe: 'File patterns to exclude from resizing (space-separated)', + type: 'array', + default: [ + 'opengraph', + ], + }, +} as const +export const description = 'Resize images to specified dimensions while maintaining aspect ratio' +export const handler = async (args: ArgumentsCamelCase>) => { + // console.time(this.command) + imageResizer( + { + ...args, + command, }, - } as const) - - readonly description = 'Resize images, fixes to 1024px width' - - constructor() { - super() - } - - async handler(args: ArgumentsCamelCase>) { - // console.time(this.command) - resize(args) - // console.timeEnd(this.command) - // Notify.info('Resize', 'End resize images task') - } -} - -export async function resize({ - source, - width, - height, - tool, - exclude, -}: { - source: string - exclude: readonly (string | number)[] - tool: string - width: number - height?: number -}) { - if (isMainThread) { - const src = File.find(source) - if (!src.isDirectory()) { - throw new Error(`Directory ${src.info.absolutePath} not found`) - } - - const extensions = 'png,jpeg,jpg' - const ignore = exclude.map((_) => `**/*${_}*.{${extensions}}`) - const files = File.sync(`**/*.{${extensions}}`, { - cwd: src.info.absolutePath, - absolute: true, - ignore, - }) - const cpuCount = cpus().length - 1 - - const chunkedTasks = chunkArray(files, cpuCount) - for (const chunk of chunkedTasks) { - tasks.push( - runWorker( - { - files: chunk, - width, - height, - tool, - command, - }, - new URL('./resize.job.js', import.meta.url), - ), - ) - } - Promise.allSettled(tasks) - } + new URL('./image-resizer.job.js', import.meta.url), + ) + // console.timeEnd(this.command) + // Notify.info('Resize', 'End resize images task') } diff --git a/src/commands/images/image-resizer.job.ts b/src/commands/images/image-resizer.job.ts new file mode 100644 index 0000000..b5c22be --- /dev/null +++ b/src/commands/images/image-resizer.job.ts @@ -0,0 +1,75 @@ +import { execSync } from 'node:child_process' +import { extname } from 'node:path' +import { performance } from 'node:perf_hooks' +import { exit } from 'node:process' +import { isMainThread, parentPort, workerData } from 'node:worker_threads' + +import sharp from 'sharp' + +import { error, log } from '#/src/shared/domain/console.js' +import { Shell } from '#/src/shared/domain/shell.js' + +const useMogrify = async (file: string, width: number = 1024, height: number | undefined, command: string) => { + const mogrify = 'mogrify' + try { + if (!Shell.exists(mogrify)) { + throw new Error(`The command ${mogrify} does not exist.`) + } + + const ext = extname(file).toLowerCase() + let stdOut = '' + const resize = height ? `-resize "${width}x${height}" -extent "${width}x${height}" ` : `-resize "${width}>"` + if (ext.includes('.jpg')) { + stdOut = execSync(`${mogrify} -verbose -format jpg -layers Dispose ${resize} ${file}`).toString() + } else if (ext.includes('.jpeg')) { + stdOut = execSync(`${mogrify} -verbose -format jpeg -layers Dispose ${resize} ${file}`).toString() + } else if (ext.includes('.png')) { + stdOut = execSync(`${mogrify} -verbose -format png ${resize} ${file}`).toString() + } + log(`[${command}]:`, stdOut) + } catch (e) { + error(`[${command}]:`, e) + exit(1) + } +} + +const useSharp = async ( + file: string, + width: number | undefined = 1024, + height: number | undefined, + command: string, +) => { + const { width: w, height: h } = await sharp(file).metadata() + const fitsWidth = (w ?? 0) <= (width ?? Infinity) + const fitsHeight = !height || (h ?? 0) <= height + if (fitsWidth && fitsHeight) return + + return sharp(file) + .resize({ + width, + height, + withoutEnlargement: true, + fit: sharp.fit.inside, + }) + .sharpen() + .toBuffer() + .then((data) => sharp(data).toFile(file)) + .then(() => log(`[${command}]:`, file)) +} + +const promises: Promise[] = [] + +if (!isMainThread) { + const startsAt = performance.now() + const { files, width, height, tool, command } = workerData + const resizer = tool === 'mogrify' ? useMogrify : useSharp + for (const file of files) { + promises.push(resizer(file, width, height, command)) + } + Promise.allSettled(promises).then(() => { + parentPort?.postMessage({ + processed: files.length, + endTime: (performance.now() - startsAt) / 1000, + }) + }) +} diff --git a/src/commands/images/image-resizer.ts b/src/commands/images/image-resizer.ts new file mode 100644 index 0000000..5b033fa --- /dev/null +++ b/src/commands/images/image-resizer.ts @@ -0,0 +1,61 @@ +import { cpus } from 'node:os' +import type { URL } from 'node:url' +import { isMainThread } from 'node:worker_threads' +import { chunkArray } from '#/src/shared/domain/chunkArray.js' +import { log } from '#/src/shared/domain/console.js' +import { File } from '#/src/shared/domain/file.js' +import { runWorker, summarizeWorkerResults, type WorkerResult } from '#/src/shared/domain/runWorker.js' + +export async function imageResizer( + { + source, + width, + height, + tool, + exclude, + command, + }: { + source: string + exclude: readonly (string | number)[] + tool: string + width: number + command: string + height?: number + }, + jobFile: URL, +) { + if (isMainThread) { + const src = File.find(source) + if (!src.isDirectory()) { + throw new Error(`Directory ${src.info.absolutePath} not found`) + } + + const extensions = 'png,jpeg,jpg' + const ignore = exclude.map((_) => `**/*${_}*.{${extensions}}`) + const files = File.sync(`**/*.{${extensions}}`, { + cwd: src.info.absolutePath, + exclude: ignore, + }) + const cpuCount = cpus().length - 1 + const tasks: Promise[] = [] + + const chunkedTasks = chunkArray(files, cpuCount) + for (const chunk of chunkedTasks) { + tasks.push( + runWorker( + { + files: chunk, + width, + height, + tool, + command, + }, + jobFile, + ), + ) + } + const results = await Promise.allSettled(tasks) + const { processed, time } = summarizeWorkerResults(results) + log(`[${command}]: resize done โ€” ${processed} files in ${time.toFixed(2)}s`) + } +} diff --git a/src/commands/images/image-to-webp.command.ts b/src/commands/images/image-to-webp.command.ts deleted file mode 100644 index 02f856a..0000000 --- a/src/commands/images/image-to-webp.command.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { isMainThread } from 'node:worker_threads' -import { join, resolve } from 'node:path' -import { mkdirSync } from 'node:fs' -import { cpus } from 'node:os' - -import type { ArgumentsCamelCase, InferredOptionTypes } from 'yargs' - -import { warn } from '#@/src/shared/helpers/console.js' -import { File } from '#@/src/shared/lib/file.js' -// import { Notify } from '#@/src/shared/lib/notify.js' -import { YargsCommand } from '#@/src/shared/yargs-command.js' -import { chunkArray } from '#@/src/shared/chunkArray.js' -import { runWorker } from '#@/src/shared/runWorker.js' - -const command = 'img:towebp' -const tasks: Promise[] = [] - -export class ImageToWebP extends YargsCommand { - readonly command = command - - readonly builder = this.options({ - source: { - alias: 'src', - describe: 'Source path of the images to convert webp.', - type: 'string', - default: 'src/assets/img/dist', - }, - distribution: { - alias: 'dist', - describe: 'Distribution path for webp images.', - type: 'string', - default: 'src/assets/img/dist/webp', - }, - } as const) - - readonly description = 'Format/Convert images to webp' - - async handler(args: ArgumentsCamelCase>) { - // console.time(this.command) - towebp(args) - // console.timeEnd(this.command) - // Notify.info('To webp', 'End images to webp task') - } -} - -export async function towebp({ source, distribution }: { source: string; distribution: string }) { - if (isMainThread) { - const src = File.find(source) - if (!src.isDirectory()) { - throw new Error(`Directory ${src.info.absolutePath} not found`) - } - const dist = resolve(distribution) - - const extensions = 'png,jpeg,jpg,gif' - const files = File.sync(`**/*.{${extensions}}`, { - absolute: true, - cwd: src.info.absolutePath, - }).map((path) => { - const file = File.find(path) - const distDir = file.info.dir.replace(src.info.absolutePath, '') - const destination = File.find( - distDir.startsWith('\\') || distDir.startsWith('/') - ? join(dist, distDir) - : resolve(dist, distDir), - ) - if (!destination.isDirectory()) { - warn(`[${command}]:`, `Creating directory <${destination.info.absolutePath}>`) - mkdirSync(destination.info.absolutePath, { recursive: true }) - } - return { - file: file.info, - destination: destination.info.absolutePath, - } - }) - const cpuCount = cpus().length - 1 - - const chunkedTasks = chunkArray(files, cpuCount) - for (const chunk of chunkedTasks) { - tasks.push( - runWorker( - { - files: chunk, - command, - }, - new URL('./to-webp.job.js', import.meta.url), - ), - ) - } - Promise.allSettled(tasks) - } -} diff --git a/src/commands/images/image-webp-converter.ts b/src/commands/images/image-webp-converter.ts new file mode 100644 index 0000000..be63720 --- /dev/null +++ b/src/commands/images/image-webp-converter.ts @@ -0,0 +1,75 @@ +import { mkdirSync } from 'node:fs' +import { cpus } from 'node:os' +import { join, resolve } from 'node:path' +import { isMainThread } from 'node:worker_threads' + +import { chunkArray } from '#/src/shared/domain/chunkArray.js' +import { log, warn } from '#/src/shared/domain/console.js' +import { File } from '#/src/shared/domain/file.js' +import { formatSizeDelta } from '#/src/shared/domain/formatBytes.js' +import type { Quality } from '#/src/shared/domain/quality-presets.js' +import { runWorker, summarizeWorkerResults, type WorkerResult } from '#/src/shared/domain/runWorker.js' + +export async function webPConverter( + { + source, + distribution, + command, + quality, + }: { + source: string + distribution: string + command: string + quality?: Quality + }, + jobFile: URL, +) { + if (isMainThread) { + const src = File.find(source) + if (!src.isDirectory()) { + throw new Error(`Directory ${src.info.absolutePath} not found`) + } + const dist = resolve(distribution) + + const extensions = 'png,jpeg,jpg,gif' + const files = File.sync(`**/*.{${extensions}}`, { + cwd: src.info.absolutePath, + }).map((path) => { + const file = File.find(path) + const distDir = file.info.dir.replace(src.info.absolutePath, '') + const destination = File.find( + distDir.startsWith('\\') || distDir.startsWith('/') ? join(dist, distDir) : resolve(dist, distDir), + ) + if (!destination.isDirectory()) { + warn(`[${command}]:`, `Creating directory <${destination.info.absolutePath}>`) + mkdirSync(destination.info.absolutePath, { + recursive: true, + }) + } + return { + file: file.info, + destination: destination.info.absolutePath, + } + }) + const cpuCount = cpus().length - 1 + const tasks: Promise[] = [] + + const chunkedTasks = chunkArray(files, cpuCount) + for (const chunk of chunkedTasks) { + tasks.push( + runWorker( + { + files: chunk, + command, + quality, + }, + jobFile, + ), + ) + } + const results = await Promise.allSettled(tasks) + const { processed, time, bytesIn, bytesOut } = summarizeWorkerResults(results) + const sizes = bytesIn > 0 ? `, ${formatSizeDelta(bytesIn, bytesOut)}` : '' + log(`[${command}]: webp done โ€” ${processed} files${sizes} in ${time.toFixed(2)}s`) + } +} diff --git a/src/commands/images/imagemin-minifier.job.ts b/src/commands/images/imagemin-minifier.job.ts new file mode 100644 index 0000000..00faf99 --- /dev/null +++ b/src/commands/images/imagemin-minifier.job.ts @@ -0,0 +1,144 @@ +import { statSync } from 'node:fs' +import { performance } from 'node:perf_hooks' +import { isMainThread, parentPort, workerData } from 'node:worker_threads' +import imagemin, { type Plugin } from 'imagemin' +import imageminGifsicle from 'imagemin-gifsicle' +import imageminMozjpeg from 'imagemin-mozjpeg' +import imageminPngquant from 'imagemin-pngquant' +import imageminSvgo from 'imagemin-svgo' +import imageminZopfli from 'imagemin-zopfli' + +import { log } from '#/src/shared/domain/console.js' +import { formatSizeDelta } from '#/src/shared/domain/formatBytes.js' +import { QUALITY_PRESETS, type Quality, type QualityPreset } from '#/src/shared/domain/quality-presets.js' + +const buildPlugins = (preset: QualityPreset) => { + const jpgPlugins = [ + // mozjpeg alone: running jpegtran first only added a redundant re-encode + imageminMozjpeg({ + quality: preset.jpeg, + progressive: true, + arithmetic: false, // Keep false for better compatibility + dct: 'int', // Use integer DCT for better quality + quantTable: 3, // Use quality-based quantization table + }), + ] + return { + '.png': [ + imageminPngquant({ + speed: 1, + quality: preset.png, // lossy settings + strip: true, // remove metadata + dithering: 1, // floyd-steinberg dithering for better gradients + }), + imageminZopfli({ + more: true, + iterations: preset.zopfliIterations, + }), + ], + '.gif': [ + // imagemin-giflossy: abandoned wrapper of the giflossy fork; its lossy flag was merged + // upstream into gifsicle 1.92+, so the maintained imagemin-gifsicle is preferred + imageminGifsicle({ + optimizationLevel: 3, + colors: 256, // Limit color palette + interlaced: false, // Usually better for web + }), + ], + '.svg': [ + // @ts-expect-error plugins is not well typed + imageminSvgo({ + plugins: [ + { + name: 'preset-default', + params: { + overrides: { + // removeViewBox: false, // Not part of preset-default in current SVGO version โ€” configured below + cleanupIds: false, // Keep IDs for external references + }, + }, + }, + { + name: 'removeViewBox', + active: false, // Keep viewBox for responsive SVGs + }, + { + name: 'removeXMLProcInst', + active: true, + }, + { + name: 'removeDimensions', + active: true, // Remove width/height, keep viewBox + }, + { + name: 'sortAttrs', + params: { + xmlnsOrder: 'alphabetical', + }, + }, + ], + }) as Plugin, + ], + '.jpg': jpgPlugins, + '.jpeg': jpgPlugins, + } +} + +if (!isMainThread) { + const startsAt = performance.now() + const { + files, + command, + quality = 'medium', + } = workerData as { + files: { + source: string + destination: string + ext: string + }[] + command: string + quality?: Quality + } + const imageminPlugins = buildPlugins(QUALITY_PRESETS[quality]) + const promises: Promise[] = [] + let bytesIn = 0 + let bytesOut = 0 + for (const file of files) { + const { source, destination, ext } = file + const plugins = imageminPlugins[ext as keyof typeof imageminPlugins] as readonly Plugin[] + + promises.push( + imagemin( + [ + source, + ], + { + destination, + plugins, + }, + ) + .then((images) => { + const image = images[0] + if (!image) return + const sourceSize = statSync(source).size + const destinationSize = image.data.length + bytesIn += sourceSize + bytesOut += destinationSize + log(`[${command}]:`, image.destinationPath, formatSizeDelta(sourceSize, destinationSize)) + }) + .catch((e) => { + log(`[${command}]:`, `${e instanceof Error ? e.message : 'unknown error'}`) + }), + ) + } + Promise.allSettled(promises).then(() => { + parentPort?.postMessage({ + processed: files.length, + endTime: (performance.now() - startsAt) / 1000, + bytesIn, + bytesOut, + }) + }) +} + +// LDFLAGS="-L/usr/local/lib" CPPFLAGS="-I/usr/local/include" pnpm rebuild mozjpeg // is not working diff --git a/src/commands/images/minify.job.ts b/src/commands/images/minify.job.ts deleted file mode 100644 index d9b8683..0000000 --- a/src/commands/images/minify.job.ts +++ /dev/null @@ -1,113 +0,0 @@ -import { isMainThread, parentPort, workerData } from 'node:worker_threads' -import { performance } from 'node:perf_hooks' - -import imageminPngquant from 'imagemin-pngquant' -import imageminJpegtran from 'imagemin-jpegtran' -import imageminZopfli from 'imagemin-zopfli' -import imagemin, { type Plugin } from 'imagemin' -import imageminMozjpeg from 'imagemin-mozjpeg' -import imageminGiflossy from 'imagemin-giflossy' - -import imageminSvgo from '#@/src/shared/imagemin-svgo.js' -import { - // error, - log, - // success -} from '#@/src/shared/helpers/console.js' - -const jpgPlugins = [ - imageminJpegtran({ - progressive: true, - }), - imageminMozjpeg({ - quality: 90, - }), -] -const imageminPlugins = { - '.png': [ - imageminPngquant({ - speed: 1, - quality: [0.6, 0.8], //98 //lossy settings - }), - imageminZopfli({ - more: true, - }), - ], - '.gif': [ - imageminGiflossy({ - optimizationLevel: 3, - optimize: 3, //keep-empty: Preserve empty transparent frames - lossy: 2, - }), - ], - '.svg': [ - imageminSvgo({ - plugins: [ - { - name: 'preset-default', - }, - { - name: 'removeViewBox', - // @ts-ignore - active: true, - }, - { - name: 'cleanupIds', - // @ts-ignore - active: false, - }, - { - name: 'sortAttrs', - params: { - xmlnsOrder: 'alphabetical', - }, - }, - ], - }), - ], - '.jpg': jpgPlugins, - '.jpeg': jpgPlugins, -} -const promises = [] -if (!isMainThread) { - const startsAt = performance.now() - const { files, command } = workerData as { - files: { - source: string - destination: string - ext: string - }[] - command: string - } - for (const file of files) { - const { source, destination, ext } = file - const plugins = imageminPlugins[ext as keyof typeof imageminPlugins] as readonly Plugin[] - promises.push( - imagemin([source], { - destination, - plugins, - }).then((images) => { - // Note: Extra process, evaluate - // File.find(images[0].sourcePath).info.path - // File.find(images[0].destinationPath).info.path - log( - `[${command}]:`, - '\n[from]\t:', - images[0]!.sourcePath, - '\n[to]\t:', - images[0]!.destinationPath, - ) - //=> [{data: , path: 'build/images/foo.jpg'}, โ€ฆ] - }), - ) - } - Promise.allSettled(promises).then(() => { - parentPort?.postMessage({ - processed: files.length, - endTime: (performance.now() - startsAt) / 1000, - }) - }) - // .catch((e) => { - // error(`[${command}]:`, `${e instanceof Error ? e.message : 'unknown error'}`) - // }) -} diff --git a/src/commands/images/resize.job.ts b/src/commands/images/resize.job.ts deleted file mode 100644 index b705a45..0000000 --- a/src/commands/images/resize.job.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { isMainThread, parentPort, workerData } from 'node:worker_threads' -import { extname } from 'node:path' -import { performance } from 'node:perf_hooks' - -import sharp from 'sharp' -import shelljs from 'shelljs' - -import { error, log } from '#@/src/shared/helpers/console.js' - -const { exec, exit, which } = shelljs - -const useMogrify = async (file: any, width: any = 1024, height: any) => { - const mogrify = 'mogrify' - try { - if (!which(mogrify)) { - throw new Error(`The command ${mogrify} does not exist.`) - } - - const ext = extname(file).toLowerCase() - let stdOut = '' - const resize = height - ? `-resize \"${width}x${height}\" -extent \"${width}x${height}\" ` - : `-resize \"${width}>\"` - // console.log(resize); -path processed - if (ext.includes('.jpg')) { - stdOut = exec(`${mogrify} -verbose -format jpg -layers Dispose ${resize} ${file}`, { - async: false, - silent: true, - }).stdout - } else if (ext.includes('.jpeg')) { - stdOut = exec(`${mogrify} -verbose -format jpeg -layers Dispose ${resize} ${file}`, { - async: false, - silent: true, - }).stdout - } else if (ext.includes('.png')) { - stdOut = exec(`${mogrify} -verbose -format png ${resize} ${file}`, { - async: false, - silent: true, - }).stdout - } - log('[Resize]:', stdOut) - } catch (e) { - error('[Resize - Error]:', e) - exit(1) - } -} - -const useSharp = async ( - file: string, - width: number | undefined = 1024, - height: number | undefined, -) => { - return sharp(file) - .resize({ - width, - height, - withoutEnlargement: true, - fit: sharp.fit.inside, - }) - .sharpen() - .toBuffer() - .then((data) => sharp(data).toFile(file)) -} -const promises = [] - -if (!isMainThread) { - const startsAt = performance.now() - const { files, width, height, tool, command } = workerData - for (const file of files) { - if (tool === 'mogrify') { - promises.push(useMogrify(file, width, height)) - } else if (tool === 'sharp') { - promises.push(useSharp(file, width, height).then(() => log(`[${command}]:`, file))) - } - } - Promise.allSettled(promises).then(() => { - parentPort?.postMessage({ - processed: files.length, - endTime: (performance.now() - startsAt) / 1000, - }) - }) - // .catch((e) => error(`[${command}]:`, `${e instanceof Error ? e.message : 'unknown error'}`)) -} diff --git a/src/commands/images/sharp-webp-converter.job.ts b/src/commands/images/sharp-webp-converter.job.ts new file mode 100644 index 0000000..0f988f4 --- /dev/null +++ b/src/commands/images/sharp-webp-converter.job.ts @@ -0,0 +1,66 @@ +import { statSync } from 'node:fs' +import { resolve } from 'node:path' +import { performance } from 'node:perf_hooks' +import { isMainThread, parentPort, workerData } from 'node:worker_threads' + +import sharp from 'sharp' + +import { log } from '#/src/shared/domain/console.js' +import { formatSizeDelta } from '#/src/shared/domain/formatBytes.js' +import { QUALITY_PRESETS, type Quality } from '#/src/shared/domain/quality-presets.js' + +if (!isMainThread) { + const startsAt = performance.now() + const { + files, + command, + quality = 'medium', + } = workerData as { + files: { + file: { + name: string + absolutePath: string + } + destination: string + }[] + command: string + quality?: Quality + } + const preset = QUALITY_PRESETS[quality] + const promises: Promise[] = [] + let bytesIn = 0 + let bytesOut = 0 + for (const fileInfo of files) { + const { file, destination } = fileInfo + + const fileName = resolve(destination, `${file.name}.webp`) + promises.push( + sharp(file.absolutePath) + .webp({ + quality: preset.webp, + effort: 4, // Compression effort (0-6, higher = better compression) + lossless: false, // Use lossy compression for smaller files + nearLossless: false, // Optional: true for better quality at cost of size + smartSubsample: true, // Better chroma subsampling + + preset: 'default', + alphaQuality: 80, // for images with transparency + }) + .toFile(fileName) + .then((info) => { + const sourceSize = statSync(file.absolutePath).size + bytesIn += sourceSize + bytesOut += info.size + log(`[${command}]:`, fileName, formatSizeDelta(sourceSize, info.size)) + }), + ) + } + Promise.allSettled(promises).then(() => { + parentPort?.postMessage({ + processed: files.length, + endTime: (performance.now() - startsAt) / 1000, + bytesIn, + bytesOut, + }) + }) +} diff --git a/src/commands/images/to-webp.job.ts b/src/commands/images/to-webp.job.ts deleted file mode 100644 index 9185b57..0000000 --- a/src/commands/images/to-webp.job.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { isMainThread, parentPort, workerData } from 'node:worker_threads' -import { resolve } from 'node:path' -import { performance } from 'node:perf_hooks' - -import sharp from 'sharp' - -import { - // error, - log, -} from '#@/src/shared/helpers/console.js' - -const promises = [] -if (!isMainThread) { - const startsAt = performance.now() - const { files, command } = workerData - for (const fileInfo of files) { - const { file, destination } = fileInfo - - const fileName = resolve(destination, `${file.name}.webp`) - promises.push( - sharp(file.absolutePath) - .webp({ lossless: true }) - .toBuffer() - .then((data) => sharp(data).toFile(fileName)) - .then(() => log(`[${command}]:`, fileName)), - ) - } - Promise.allSettled(promises).then(() => { - parentPort?.postMessage({ - processed: files.length, - endTime: (performance.now() - startsAt) / 1000, - }) - }) - // .catch((e) => error(`[${command}]:`, `${e instanceof Error ? e.message : 'unknown error'}`)) -} diff --git a/src/commands/images/yargs-image-minifier.command.ts b/src/commands/images/yargs-image-minifier.command.ts new file mode 100644 index 0000000..9a91e3f --- /dev/null +++ b/src/commands/images/yargs-image-minifier.command.ts @@ -0,0 +1,41 @@ +import { URL } from 'node:url' +import type { ArgumentsCamelCase, InferredOptionTypes } from 'yargs' +import { imageMinifier } from './image-minifier.js' + +export const command = 'img:minify' +export const builder = { + source: { + alias: 'src', + describe: 'Source directory containing unoptimized images (png, jpeg, jpg, gif, svg)', + type: 'string', + default: 'src/assets/img/src', + }, + distribution: { + alias: 'dist', + describe: 'Output directory where minified and optimized images will be saved', + type: 'string', + default: 'src/assets/img/dist', + }, + quality: { + alias: 'q', + describe: 'Compression quality preset', + type: 'string', + default: 'medium', + choices: [ + 'high', + 'medium', + 'low', + ], + }, +} as const +export const description = 'Minify and optimize images for better web performance and smaller file sizes' + +export const handler = (args: ArgumentsCamelCase>) => { + return imageMinifier( + { + ...args, + command, + }, + new URL('./imagemin-minifier.job.js', import.meta.url), + ) +} diff --git a/src/commands/images/yargs-image-to-webp.command.ts b/src/commands/images/yargs-image-to-webp.command.ts new file mode 100644 index 0000000..69f29c2 --- /dev/null +++ b/src/commands/images/yargs-image-to-webp.command.ts @@ -0,0 +1,41 @@ +import type { ArgumentsCamelCase, InferredOptionTypes } from 'yargs' + +// import { Notify } from '#/src/shared/lib/notify.js' +import { webPConverter } from './image-webp-converter.js' + +export const command = 'img:towebp' +export const builder = { + source: { + alias: 'src', + describe: 'Source directory containing images to convert to WebP format', + type: 'string', + default: 'src/assets/img/dist', + }, + distribution: { + alias: 'dist', + describe: 'Output directory where converted WebP images will be saved', + type: 'string', + default: 'src/assets/img/dist/webp', + }, + quality: { + alias: 'q', + describe: 'Compression quality preset', + type: 'string', + default: 'medium', + choices: [ + 'high', + 'medium', + 'low', + ], + }, +} as const +export const description = 'Convert images to WebP format for better web performance and smaller file sizes' +export const handler = async (args: ArgumentsCamelCase>) => { + await webPConverter( + { + ...args, + command, + }, + new URL('./sharp-webp-converter.job.js', import.meta.url), + ) +} diff --git a/src/dvx.ts b/src/dvx.ts deleted file mode 100644 index 16f5e30..0000000 --- a/src/dvx.ts +++ /dev/null @@ -1,72 +0,0 @@ -import type { Argv } from 'yargs' -import yargs from 'yargs/yargs' -import { hideBin } from 'yargs/helpers' - -import { version, epilogue, usage, scriptName } from '#@/src/commands/version.js' -import type { YargsCommand } from './shared/yargs-command.js' -import { readModulesRecursively } from './shared/readModulesRecursively.js' -import { isConstructor } from './shared/isConstructor.js' -import { error } from '#@/src/shared/helpers/console.js' -import { exit } from 'node:process' - -export class DvxCLI { - #yargs: Argv - - constructor(argv: string[]) { - this.#yargs = yargs(hideBin(argv)) - this.#configureYargs() - } - - #configureYargs() { - this.#yargs - .epilogue(epilogue) - .help('help', 'Show help', false) - .locale('en') - .scriptName(scriptName) - .usage(usage) - .wrap(95) - .version('version', 'Show current version number', version) - .hide('version') - .hide('help') - .strictCommands() - } - - #onError(command: string, err: unknown) { - error(`[${command}]:`, err instanceof Error ? err.message : 'unknown error') - exit(0) - } - - async installCommands(path = 'commands') { - const parentUrl = new URL(path, import.meta.url) - const mask = /\.command\.(ts|js)$/ - for await (const entities of readModulesRecursively(parentUrl, mask)) { - const keys = Object.keys(entities) - for (const key of keys) { - const entity = entities[`${key}`] - if (!isConstructor(entity)) continue - const cmd = new entity() - this.#yargs.command(cmd.command, cmd.description, cmd.builder, cmd.handler.bind(cmd)) - } - } - - return this - } - - async parse() { - try { - /** - * DOC: argv, the letter v is an abbreviation of vector, arg - vector | arg - array - * Read more on: http://decsai.ugr.es/~jfv/ed1/c/cdrom/cap6/cap64.htm - */ - const argv = await this.#yargs.parse() // args vector - without flags - const argsCount = argv._.length - - if (!argsCount) this.#yargs.showHelp() - } catch (err) { - const help = await this.#yargs.getHelp() - if (err instanceof Error) console.error('[error]:', `${err.message}\n${help}`) - - console.error('[error]:', `unknown error\n${help}`) - } - } -} diff --git a/src/index.ts b/src/index.ts index 6f29dfb..6caba3a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,38 @@ #!/usr/bin/env node import { argv } from 'node:process' -import { DvxCLI } from './dvx.js' +import { hideBin } from 'yargs/helpers' +import yargs from 'yargs/yargs' -await (await new DvxCLI(argv).installCommands()).parse() +import { epilogue, scriptName, usage, version } from '#/src/shared/domain/cli-metadata.js' + +const cli = yargs(hideBin(argv)) + +// configure yargs +cli + .epilogue(epilogue) + .commandDir('./commands', { + include: /.command\.js$/, + extensions: [ + 'js', + ], + recurse: true, + }) + .help('help', 'Show help', false) + .locale('en') + .scriptName(scriptName) + .usage(usage) + .wrap(95) + .version('version', 'Show current version number', version) + .hide('version') + .hide('help') + .strictCommands() + +/** + * DOC: argv, the letter v is an abbreviation of vector, arg - vector | arg - array + * Read more on: http://decsai.ugr.es/~jfv/ed1/c/cdrom/cap6/cap64.htm + */ +const args = await cli.parse() // args vector - without flags +const argsCount = args._.length + +if (!argsCount) cli.showHelp() diff --git a/src/shared/chunkArray.ts b/src/shared/domain/chunkArray.ts similarity index 100% rename from src/shared/chunkArray.ts rename to src/shared/domain/chunkArray.ts diff --git a/src/commands/version.ts b/src/shared/domain/cli-metadata.ts similarity index 64% rename from src/commands/version.ts rename to src/shared/domain/cli-metadata.ts index 827a6d2..044dd47 100644 --- a/src/commands/version.ts +++ b/src/shared/domain/cli-metadata.ts @@ -1,16 +1,15 @@ -import { styleText } from 'node:util' -import process from 'node:process' import { arch } from 'node:os' - -import Shell from '#@/src/shared/lib/shell.js' -import pkg from '#@/package.json' with { type: 'json' } +import process from 'node:process' +import { styleText } from 'node:util' +import pkg from '#/package.json' with { type: 'json' } +import { Shell } from '#/src/shared/domain/shell.js' const brand = ` ____ _ ____ _ ___ - | _ \\ _____ _______ _| |_ ___ __ _ _ __ ___ \/ ___| | |_ _| - | | | |\/ _ \\ \\ \/ \/ _ \\ \\\/ \/ __\/ _ \\\/ _\` | '_ \` _ \\ | | | | | | - | |_| | __\/\\ V \/ __\/> <| || __\/ (_| | | | | | | | |___| |___ | | - |____\/ \\___| \\_\/ \\___\/_\/\\_\\\\__\\___|\\__,_|_| |_| |_| \\____|_____|___|\n` + | _ \\ _____ _______ _| |_ ___ __ _ _ __ ___ / ___| | |_ _| + | | | |/ _ \\ \\ / / _ \\ \\/ / __/ _ \\/ _\` | '_ \` _ \\ | | | | | | + | |_| | __/\\ V / __/> <| || __/ (_| | | | | | | | |___| |___ | | + |____/ \\___| \\_/ \\___/_/\\_\\\\__\\___|\\__,_|_| |_| |_| \\____|_____|___|\n` export const version = `${styleText('yellowBright', brand)} Devexteam CLI\t: ${styleText('yellowBright', `v${pkg.version || ''}`)} diff --git a/src/shared/helpers/color.ts b/src/shared/domain/color.ts similarity index 93% rename from src/shared/helpers/color.ts rename to src/shared/domain/color.ts index 326dffd..a6c5daf 100644 --- a/src/shared/helpers/color.ts +++ b/src/shared/domain/color.ts @@ -14,16 +14,11 @@ abstract class Text { abstract class Background { static yellow(text: string, bright = true) { - return `${Color.RESET}${Color.BG_YELLOW}${Color.bright(bright)}${text.replace( - Color.RESET, - '', - )}${Color.RESET}` + return `${Color.RESET}${Color.BG_YELLOW}${Color.bright(bright)}${text.replace(Color.RESET, '')}${Color.RESET}` } static green(text: string, bright = true) { - return `${Color.RESET}${Color.BG_GREEN}${Color.bright(bright)}${text.replace(Color.RESET, '')}${ - Color.RESET - }` + return `${Color.RESET}${Color.BG_GREEN}${Color.bright(bright)}${text.replace(Color.RESET, '')}${Color.RESET}` } } diff --git a/src/shared/helpers/console.ts b/src/shared/domain/console.ts similarity index 97% rename from src/shared/helpers/console.ts rename to src/shared/domain/console.ts index 5470f1e..0df28f7 100644 --- a/src/shared/helpers/console.ts +++ b/src/shared/domain/console.ts @@ -10,7 +10,9 @@ export const CONSOLE_COLOR = { info: `${Color.BG_BLUE}${Color.FG_BLACK}`, } -const CONSOLE_EMOJI: { [key: string]: string } = { +const CONSOLE_EMOJI: { + [key: string]: string +} = { info: ' โ„น ', //`${Color.FG_BLUE} โ„น ${Color.RESET}`, \u2139 log: ' โœ” ', //`${Color.FG_GREEN} โœ” ${Color.RESET}`, \u2714 warn: ' โš  ', //`${Color.FG_YELLOW} โš  ${Color.RESET}`, \u26A0 diff --git a/src/shared/emptyDirSync.ts b/src/shared/domain/emptyDirSync.ts similarity index 84% rename from src/shared/emptyDirSync.ts rename to src/shared/domain/emptyDirSync.ts index 50f758d..dd92c93 100644 --- a/src/shared/emptyDirSync.ts +++ b/src/shared/domain/emptyDirSync.ts @@ -1,9 +1,10 @@ -import { join } from 'node:path' import { existsSync, lstatSync, readdirSync, rmdirSync, unlinkSync } from 'node:fs' +import { join } from 'node:path' export function emptyDirSync(path: string) { if (!existsSync(path)) return - readdirSync(path).forEach((file) => { + const files = readdirSync(path) + for (const file of files) { const curPath = join(path, file) if (lstatSync(curPath).isDirectory()) { emptyDirSync(curPath) @@ -11,5 +12,5 @@ export function emptyDirSync(path: string) { } else { unlinkSync(curPath) } - }) + } } diff --git a/src/shared/lib/file.ts b/src/shared/domain/file.ts similarity index 58% rename from src/shared/lib/file.ts rename to src/shared/domain/file.ts index 2c0c27b..c43203b 100644 --- a/src/shared/lib/file.ts +++ b/src/shared/domain/file.ts @@ -1,8 +1,7 @@ -import { statSync, existsSync, writeFileSync, readFileSync, lstatSync } from 'node:fs' +import { existsSync, type GlobOptions, globSync, lstatSync, readFileSync, type Stats, writeFileSync } from 'node:fs' import { EOL } from 'node:os' -import { resolve, relative, parse } from 'node:path' +import { parse, relative, resolve } from 'node:path' import { cwd } from 'node:process' -import { globSync } from 'node:fs' export interface FileParsed { isDir: boolean @@ -22,6 +21,9 @@ export interface FileParsed { export class File { #absolutePath: string #filePath: string + // Cache the result of `lstatSync` or `statSync` for performance + #stats?: Stats + readonly info: FileParsed /** @@ -32,6 +34,9 @@ export class File { constructor(filePath: string, context: string = cwd()) { this.#absolutePath = resolve(context, filePath) this.#filePath = this.relativePath() + this.#stats = lstatSync(this.#absolutePath, { + throwIfNoEntry: false, + }) this.info = this.parse() } @@ -46,10 +51,17 @@ export class File { return new File(path, context) } - static sync(pattern: string, opts?: { cwd?: string; absolute?: boolean; ignore?: string[] }) { - const files = globSync(pattern, { - ...opts, - }).map((file) => resolve(opts?.cwd!, file)) + // absolute?: boolean; ignore?: string[] + static sync(pattern: string, opts?: GlobOptions) { + const context = typeof opts?.cwd === 'string' ? opts.cwd : cwd() + // Glob plain paths and resolve them against the search cwd: Bun's fs.glob + // does not support the withFileTypes option + const files = ( + globSync(pattern, { + ...opts, + withFileTypes: false, + }) as string[] + ).map((path) => resolve(context, path)) return files } @@ -63,26 +75,49 @@ export class File { return existsSync(file) } + /** + * Format a size value into a human-readable string with appropriate suffix (T, B, M, k) + * + * @param {number | null | undefined} size - The size value to format (e.g., file size in bytes) + * @return {string} Human-readable size string with suffix or 'N/A' for null/undefined + * @example + * File.compact(1500000) // Returns "1.5M" + * File.compact(2500) // Returns "2.5k" + * File.compact(null) // Returns "N/A" + */ + static sizeCompact(size: number | null | undefined): string { + if (size === null || size === undefined) return 'N/A' + + if (size >= 1e12) return `${(size / 1e12).toFixed(2).replace(/\.00$/, '')}T` + if (size >= 1e9) return `${(size / 1e9).toFixed(2).replace(/\.00$/, '')}B` + if (size >= 1e6) return `${(size / 1e6).toFixed(2).replace(/\.00$/, '')}M` + if (size >= 1e3) return `${(size / 1e3).toFixed(2).replace(/\.00$/, '')}k` + + return size.toString() + } + /** * Determine if the file is a directory. */ isDirectory() { - try { - return lstatSync(this.#absolutePath).isDirectory() - } catch (err) { - return false - } + // try { + // return lstatSync(this.#absolutePath).isDirectory() + // } catch (err) { + // return false + // } + return this.#stats ? this.#stats.isDirectory() : false } /** * Determine if the path is a file, and not a directory. */ isFile() { - try { - return statSync(this.#absolutePath).isFile() - } catch (err) { - return false - } + // try { + // return statSync(this.#absolutePath).isFile() + // } catch (err) { + // return false + // } + return this.#stats ? this.#stats.isFile() : false } /** @@ -104,6 +139,7 @@ export class File { const isFile = this.isFile() const path = this.#filePath const absolutePath = this.#absolutePath + const info = { isDir, isFile, diff --git a/src/shared/domain/formatBytes.ts b/src/shared/domain/formatBytes.ts new file mode 100644 index 0000000..b9a319f --- /dev/null +++ b/src/shared/domain/formatBytes.ts @@ -0,0 +1,22 @@ +const UNITS = [ + 'B', + 'KB', + 'MB', + 'GB', +] as const + +export const formatBytes = (bytes: number) => { + let value = bytes + let unit = 0 + while (value >= 1024 && unit < UNITS.length - 1) { + value /= 1024 + unit += 1 + } + return `${unit === 0 ? value : value.toFixed(1)} ${UNITS[unit]}` +} + +export const formatSizeDelta = (bytesIn: number, bytesOut: number) => { + const percent = bytesIn > 0 ? Math.round((1 - bytesOut / bytesIn) * 100) : 0 + const change = percent >= 0 ? `โˆ’${percent}%` : `+${-percent}%` + return `${formatBytes(bytesIn)} โ†’ ${formatBytes(bytesOut)} (${change})` +} diff --git a/src/shared/domain/quality-presets.ts b/src/shared/domain/quality-presets.ts new file mode 100644 index 0000000..f15f6ef --- /dev/null +++ b/src/shared/domain/quality-presets.ts @@ -0,0 +1,41 @@ +export interface QualityPreset { + jpeg: number + png: [ + number, + number, + ] + webp: number + zopfliIterations: number +} + +export type Quality = 'high' | 'medium' | 'low' + +export const QUALITY_PRESETS: Record = { + high: { + jpeg: 90, + png: [ + 0.7, + 0.9, + ], + webp: 85, + zopfliIterations: 15, + }, + medium: { + jpeg: 80, + png: [ + 0.65, + 0.85, + ], + webp: 80, + zopfliIterations: 8, + }, + low: { + jpeg: 70, + png: [ + 0.5, + 0.7, + ], + webp: 75, + zopfliIterations: 5, + }, +} diff --git a/src/shared/domain/runWorker.ts b/src/shared/domain/runWorker.ts new file mode 100644 index 0000000..13c477e --- /dev/null +++ b/src/shared/domain/runWorker.ts @@ -0,0 +1,47 @@ +import type { URL } from 'node:url' +import { Worker } from 'node:worker_threads' + +import { error } from '#/src/shared/infrastructure/logger.js' + +export interface WorkerResult { + processed: number + endTime: number + bytesIn?: number + bytesOut?: number +} + +export const summarizeWorkerResults = (results: PromiseSettledResult[]) => { + const fulfilled = results.filter((r): r is PromiseFulfilledResult => r.status === 'fulfilled') + return { + processed: fulfilled.reduce((sum, r) => sum + r.value.processed, 0), + time: fulfilled.reduce((max, r) => Math.max(max, r.value.endTime), 0), + bytesIn: fulfilled.reduce((sum, r) => sum + (r.value.bytesIn ?? 0), 0), + bytesOut: fulfilled.reduce((sum, r) => sum + (r.value.bytesOut ?? 0), 0), + } +} + +export const runWorker = (workerData: T, filename: URL) => + new Promise((resolve, reject) => { + let settled = false + const worker = new Worker(filename, { + workerData, + }) + worker + .on('message', (data: WorkerResult) => { + settled = true + resolve(data) + }) + .on('error', (err) => { + settled = true + error(err) + reject(err) + }) + .on('exit', (code) => { + // A worker that dies before posting a result must settle the promise, + // even with exit code 0, or the CLI hangs waiting on it forever + if (settled) return + const message = `Worker stopped with exit code ${code} before posting a result` + error(message) + reject(new Error(message)) + }) + }) diff --git a/src/shared/domain/shell.ts b/src/shared/domain/shell.ts new file mode 100644 index 0000000..199efe1 --- /dev/null +++ b/src/shared/domain/shell.ts @@ -0,0 +1,72 @@ +import { type SpawnSyncReturns, spawnSync } from 'node:child_process' + +const validateCommand = (command: SpawnSyncReturns, errorMessage: string) => { + if (command.error || command.status !== 0) { + return errorMessage + } + + const output = command.stdout.toString().trim() + if (!output) { + return errorMessage + } + + // Extract first non-empty line containing version info + const lines = output.split('\n').filter((line) => line.trim().length > 0) + return lines[0] || errorMessage +} + +const messages = { + magick: '๐Ÿ”ฝ Download here ๐Ÿ”— https://www.imagemagick.org/script/download.php', + gm: '๐Ÿ”ฝ Download here ๐Ÿ”— http://www.graphicsmagick.org/download.html', +} + +class Shell { + static exists(command: string, args: readonly string[] = []) { + try { + const result = spawnSync(command, args, { + timeout: 5000, + }) + return !result.error + } catch { + return false + } + } + + static get imageMagick() { + const command = 'magick' + try { + const result = spawnSync( + command, + [ + '-version', + ], + { + timeout: 5000, + }, + ) + return validateCommand(result, messages[command]) + } catch { + return messages[command] + } + } + + static get graphicMagick() { + const command = 'gm' + try { + const result = spawnSync( + command, + [ + '-version', + ], + { + timeout: 5000, + }, + ) + return validateCommand(result, messages[command]) + } catch { + return messages[command] + } + } +} + +export { Shell } diff --git a/src/shared/imagemin-svgo.ts b/src/shared/imagemin-svgo.ts deleted file mode 100644 index 0a0bab5..0000000 --- a/src/shared/imagemin-svgo.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Buffer } from 'node:buffer' -import isSvg from 'is-svg' -import { optimize, type Config } from 'svgo' - -const imageminSvgo = (options: Config) => async (buffer: unknown) => { - options = { - multipass: true, - ...options, - } - - if (Buffer.isBuffer(buffer)) { - buffer = buffer.toString() - } - - if (typeof buffer === 'string' && !isSvg(buffer)) { - return buffer - } - - const { data } = optimize(buffer as string, options) - return Buffer.from(data) -} - -export default imageminSvgo diff --git a/src/shared/helpers/config.ts b/src/shared/infrastructure/config.ts similarity index 89% rename from src/shared/helpers/config.ts rename to src/shared/infrastructure/config.ts index f41b667..c1d653c 100644 --- a/src/shared/helpers/config.ts +++ b/src/shared/infrastructure/config.ts @@ -29,5 +29,5 @@ export default class config { 'title-require': true, } - static readonly CSS_SOURCEMAP_REGEX = /\/[\*]\#\s+(sourceMappingURL\=.*\.(css)\.map)\s+[\*]\//g + static readonly CSS_SOURCEMAP_REGEX = /\/[*]#\s+(sourceMappingURL=.*\.(css)\.map)\s+[*]\//g } diff --git a/src/shared/infrastructure/logger.ts b/src/shared/infrastructure/logger.ts new file mode 100644 index 0000000..e9827b7 --- /dev/null +++ b/src/shared/infrastructure/logger.ts @@ -0,0 +1,32 @@ +import pino from 'pino' +import { default as PinoPretty } from 'pino-pretty' + +export const MESSAGE_KEY = 'message' +const level = 'trace' +const stream = PinoPretty({ + colorize: true, + ignore: 'pid,hostname', + levelFirst: true, + translateTime: 'yyyy-mm-dd HH:MM:ss', +}) + +export const streams = [ + { + stream, + }, +] + +/** + * Read more on: https://getpino.io/#/ + */ +export const logger = pino.pino( + { + level, + base: null, + }, + pino.multistream(streams), +) + +export const info = logger.info.bind(logger) +export const warn = logger.warn.bind(logger) +export const error = logger.error.bind(logger) diff --git a/src/shared/infrastructure/notify.ts b/src/shared/infrastructure/notify.ts new file mode 100644 index 0000000..e5f7e74 --- /dev/null +++ b/src/shared/infrastructure/notify.ts @@ -0,0 +1,63 @@ +// import NodeNotifier from 'node-notifier' +// import { File } from './file.js' + +// const { notify } = NodeNotifier +// const __dirname = new URL('.', import.meta.url).pathname +// const BASE_ICON_PATH = '../../../assets/icons' +// const iconFinder = (icon: string) => +// File.find(`${BASE_ICON_PATH}/${icon}`, __dirname).info.absolutePath + +// const messages = { +// info: { +// icon: iconFinder('info.jpg'), +// fallback: 'โ„น', +// }, +// done: { +// icon: iconFinder('done.jpg'), +// fallback: 'โœ…', +// }, +// fail: { +// icon: iconFinder('fail.jpg'), +// fallback: 'โŒ', +// }, +// } + +// const timeout = 0 + +// export class Notify { +// static info(title = 'โ„น Default info title ๐Ÿ“Œ', message = 'Default message ๐Ÿ’ฌ') { +// setTimeout(() => { +// notify({ +// title, +// message, +// icon: messages.info.icon || messages.info.fallback, +// sound: true, +// wait: false, +// }) +// }, timeout) +// } + +// static done(title = 'โœ… Default done title ๐Ÿ“Œ', message = 'Default message ๐Ÿ’ฌ') { +// setTimeout(() => { +// notify({ +// title, +// message, +// icon: messages.done.icon || messages.done.fallback, +// sound: true, +// wait: false, +// }) +// }, timeout) +// } + +// static fail(title = 'โŒ Default error title ๐Ÿ“Œ', message = 'Default message ๐Ÿ’ฌ') { +// setTimeout(() => { +// notify({ +// title, +// message, +// icon: messages.fail.icon || messages.fail.fallback, +// sound: true, +// wait: false, +// }) +// }, timeout) +// } +// } diff --git a/src/shared/isConstructor.ts b/src/shared/isConstructor.ts deleted file mode 100644 index 8f7e909..0000000 --- a/src/shared/isConstructor.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { Class } from 'type-fest' -import { isFunction } from './isFunction.js' - -export const isConstructor = (value: unknown): value is Class => - isFunction(value) && - !!value?.name && - !!value?.prototype && - value?.prototype?.constructor === value diff --git a/src/shared/isFunction.ts b/src/shared/isFunction.ts deleted file mode 100644 index a49bc82..0000000 --- a/src/shared/isFunction.ts +++ /dev/null @@ -1 +0,0 @@ -export const isFunction = (value: unknown): value is () => unknown => typeof value === 'function' diff --git a/src/shared/lib/notify.ts b/src/shared/lib/notify.ts deleted file mode 100644 index e2d69ed..0000000 --- a/src/shared/lib/notify.ts +++ /dev/null @@ -1,63 +0,0 @@ -import NodeNotifier from 'node-notifier' -import { File } from './file.js' - -const { notify } = NodeNotifier -const __dirname = new URL('.', import.meta.url).pathname -const BASE_ICON_PATH = '../../../assets/icons' -const iconFinder = (icon: string) => - File.find(`${BASE_ICON_PATH}/${icon}`, __dirname).info.absolutePath - -const messages = { - info: { - icon: iconFinder('info.jpg'), - fallback: 'โ„น', - }, - done: { - icon: iconFinder('done.jpg'), - fallback: 'โœ…', - }, - fail: { - icon: iconFinder('fail.jpg'), - fallback: 'โŒ', - }, -} - -const timeout = 0 - -export class Notify { - static info(title = 'โ„น Default info title ๐Ÿ“Œ', message = 'Default message ๐Ÿ’ฌ') { - setTimeout(() => { - notify({ - title, - message, - icon: messages.info.icon || messages.info.fallback, - sound: true, - wait: false, - }) - }, timeout) - } - - static done(title = 'โœ… Default done title ๐Ÿ“Œ', message = 'Default message ๐Ÿ’ฌ') { - setTimeout(() => { - notify({ - title, - message, - icon: messages.done.icon || messages.done.fallback, - sound: true, - wait: false, - }) - }, timeout) - } - - static fail(title = 'โŒ Default error title ๐Ÿ“Œ', message = 'Default message ๐Ÿ’ฌ') { - setTimeout(() => { - notify({ - title, - message, - icon: messages.fail.icon || messages.fail.fallback, - sound: true, - wait: false, - }) - }, timeout) - } -} diff --git a/src/shared/lib/shell.ts b/src/shared/lib/shell.ts deleted file mode 100644 index c1edaa6..0000000 --- a/src/shared/lib/shell.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { spawnSync, type SpawnSyncReturns } from 'node:child_process' - -const validateCommand = (command: SpawnSyncReturns, errorMessage: string) => { - return !command.error - ? command.stdout - .toString() - .split('\n') - .filter((data) => data.length > 0) - .shift() || '' - : errorMessage -} - -const messages = { - magick: '๐Ÿ”ฝ Download here ๐Ÿ”— https://www.imagemagick.org/script/download.php', - gm: '๐Ÿ”ฝ Download here ๐Ÿ”— http://www.graphicsmagick.org/download.html', -} - -class Shell { - static get imageMagick() { - const command = 'magick' - let response = '' - try { - const magick = spawnSync(command, ['-version']) - response = validateCommand(magick, messages[command]) - } catch { - response = messages[command] - } - - return response - } - - static get graphicMagick() { - const command = 'gm' - let response = '' - try { - const gm = spawnSync(command, ['-version']) - response = validateCommand(gm, messages[command]) - } catch { - response = messages[command] - } - return response - } -} - -export default Shell diff --git a/src/shared/readModulesRecursively.ts b/src/shared/readModulesRecursively.ts deleted file mode 100644 index 451069d..0000000 --- a/src/shared/readModulesRecursively.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { Class } from 'type-fest' -import { opendir } from 'node:fs/promises' - -// Inspired: https://github.com/L2jLiga/fastify-decorators/blob/v4/lib/bootstrap/bootstrap.ts -export async function* readModulesRecursively( - parentUrl: URL, - mask: RegExp, -): AsyncIterable>> { - for await (const dirent of await opendir(parentUrl)) { - const fullFilePath = new URL(dirent.name, parentUrl + '/') - if (dirent.isDirectory()) { - yield* readModulesRecursively(fullFilePath, mask) - } else if (mask.test(dirent.name)) { - yield import(fullFilePath.toString()).then((m) => { - return m - }) - } - } -} diff --git a/src/shared/runWorker.ts b/src/shared/runWorker.ts deleted file mode 100644 index ebfecfd..0000000 --- a/src/shared/runWorker.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { type URL } from 'node:url' -import { Worker } from 'node:worker_threads' - -export const runWorker = (workerData: any, filename: URL) => - new Promise((resolve: (value?: void) => void, reject) => { - const worker = new Worker(filename, { - workerData, - }) - worker - .on('message', (message) => { - console.log(message) - resolve() - }) - .on('error', (err) => { - console.error('error', err) - reject(err) - }) - .on('exit', (code) => { - if (code !== 0) { - const message = `Worker stopped with exit code ${code}` - console.error(message) - reject(new Error(message)) - } - }) - }) diff --git a/src/shared/yargs-command.ts b/src/shared/yargs-command.ts deleted file mode 100644 index 6c7ab20..0000000 --- a/src/shared/yargs-command.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { ArgumentsCamelCase, InferredOptionTypes, Options } from 'yargs' - -export abstract class YargsCommand { - abstract readonly command: string - abstract readonly description: string - abstract readonly builder: Record - - protected options>(options: O): O { - return options - } - - abstract handler(args: ArgumentsCamelCase>): void -} diff --git a/tests/commands/image-minifier.test.ts b/tests/commands/image-minifier.test.ts new file mode 100644 index 0000000..f507e9f --- /dev/null +++ b/tests/commands/image-minifier.test.ts @@ -0,0 +1,89 @@ +import assert from 'node:assert/strict' +import { existsSync, lstatSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs' +import { tmpdir } from 'node:os' +import { dirname, join } from 'node:path' +import { after, before, describe, it } from 'node:test' +import { URL } from 'node:url' +import sharp from 'sharp' + +import { imageMinifier } from '#/src/commands/images/image-minifier.js' + +// Worker threads inherit execArgv, so the TS job file loads through the same +// @swc-node/register hooks that run this test +const jobFile = new URL('../../src/commands/images/imagemin-minifier.job.ts', import.meta.url) + +// Multiple images per directory and multiple nesting levels: guards against +// destination paths resolving to a directory instead of a complete file path +const images = [ + 'olimpicos/berlin-logo.png', + 'olimpicos/maraton-intro.jpg', + 'prueba/daft-punk.jpeg', + 'prueba/nodejs.png', + 'prueba/spinner.gif', + 'maps/nested/plano.jpg', + 'svg/logo.svg', +] + +const svgStub = + '' + +async function createImage(path: string) { + const image = sharp({ + create: { + width: 8, + height: 8, + channels: 3, + background: { + r: 255, + g: 0, + b: 0, + }, + }, + }) + if (path.endsWith('.png')) return image.png().toFile(path) + if (path.endsWith('.gif')) return image.gif().toFile(path) + return image.jpeg().toFile(path) +} + +describe('imageMinifier', () => { + const root = mkdtempSync(join(tmpdir(), 'dvx-img-minify-')) + const source = join(root, 'src') + const distribution = join(root, 'dist') + + before(async () => { + for (const image of images) { + const path = join(source, image) + mkdirSync(dirname(path), { + recursive: true, + }) + if (image.endsWith('.svg')) { + writeFileSync(path, svgStub) + continue + } + await createImage(path) + } + }) + after(() => { + rmSync(root, { + recursive: true, + force: true, + }) + }) + + it('writes every nested source image to a complete destination file path', async () => { + await imageMinifier( + { + source, + distribution, + command: 'img:minify', + }, + jobFile, + ) + + for (const image of images) { + const destination = join(distribution, image) + assert.ok(existsSync(destination), `expected <${destination}> to exist`) + assert.ok(lstatSync(destination).isFile(), `expected <${destination}> to be a file, not a directory`) + } + }) +}) diff --git a/tests/lib/file.test.ts b/tests/lib/file.test.ts index 81961e9..f314cad 100644 --- a/tests/lib/file.test.ts +++ b/tests/lib/file.test.ts @@ -1,55 +1,56 @@ import assert from 'node:assert/strict' -import { afterEach, before, describe, it } from 'node:test' -import { resolve, normalize } from 'node:path' -import { cwd } from 'node:process' import { mkdirSync } from 'node:fs' - -import { File } from '#@/src/shared/lib/file.js' -import { emptyDirSync } from '#@/src/shared/emptyDirSync.js' +import { normalize, resolve } from 'node:path' +import { cwd } from 'node:process' +import { afterEach, before, describe, it } from 'node:test' +import { emptyDirSync } from '#/src/shared/domain/emptyDirSync.js' +import { File } from '#/src/shared/domain/file.js' const stubsDir = resolve(`${cwd()}/tests`, 'stubs') describe('File', () => { before(() => { - mkdirSync(stubsDir, { recursive: true }) + mkdirSync(stubsDir, { + recursive: true, + }) }) afterEach(() => { emptyDirSync(stubsDir) }) describe('Related to validations', () => { - it('should returns if a file does not exists', () => { + it('should return if a file does not exist', () => { const file = resolve(stubsDir, 'file.js') assert.strictEqual(File.exists(file), false) }) - it('should returns if a file exists', () => { + it('should return if a file exists', () => { const file = resolve(stubsDir, 'file.js') new File(file).write('foobar') assert.strictEqual(File.exists(file), true) }) - it('should returns if the current file path is a directory', () => { + it('should return if the current file path is a directory', () => { const result = new File(resolve(stubsDir)).isDirectory() assert.strictEqual(result, true) }) - it('should returns if the current file path is not a directory', () => { + it('should return if the current file path is not a directory', () => { const result = new File('path/to/file.js').isDirectory() assert.strictEqual(result, false) }) - it('should returns if a the curren file path is a file', () => { + it('should return if the current file path is a file', () => { const file = resolve(stubsDir, 'file.js') new File(file).write('foobar') const result: boolean = new File(file).isFile() assert.strictEqual(result, true) }) - it('should returns if a the curren file path is not a file', () => { + it('should return if the current file path is not a file', () => { assert.strictEqual(new File('path/to').isFile(), false) }) }) describe('Related to path', () => { - it('should returns the absolute path of the file', () => { + it('should return the absolute path of the file', () => { const file = resolve(stubsDir, 'file.js') assert.strictEqual(file, new File(file).path()) }) - it('should returns the relative path to the file', () => { + it('should return the relative path to the file', () => { const filePath = 'path/to/file.js' const newFilePath = '../path/to/file.js' const file = new File(filePath) @@ -57,7 +58,7 @@ describe('File', () => { assert.strictEqual(normalize(filePath), file.relativePath()) assert.strictEqual(normalize(newFilePath), newFile.relativePath()) }) - it('should knows the base directory path for the file', () => { + it('should know the base directory path for the file', () => { const file = new File('path/to/file.js') const result = file.base() assert.strictEqual(result, resolve('path/to')) diff --git a/tsconfig.json b/tsconfig.json index 6af9c03..65f2511 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,9 +14,8 @@ /* Modules */ "module": "NodeNext", "moduleResolution": "NodeNext", - "baseUrl": "./", "paths": { - "#@/*": ["./*"] + "#/*": ["./*"] }, "typeRoots": ["./node_modules/@types"], "types": ["node"],