diff --git a/.github/workflows/node-test.yaml b/.github/workflows/node-test.yaml index 4fda39d..f3eec32 100644 --- a/.github/workflows/node-test.yaml +++ b/.github/workflows/node-test.yaml @@ -42,20 +42,33 @@ jobs: build: yarn --cwd impit-node build --target x86_64-unknown-linux-gnu - host: ubuntu-latest target: x86_64-unknown-linux-musl - docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine + docker: node:20-alpine + # Script taken from https://github.com/napi-rs/napi-rs/blob/main/alpine.Dockerfile build: | - apk add perl && - ln -s /usr/lib/gcc/x86_64-alpine-linux-musl/14.2.0/crtbeginS.o /usr/lib/crtbeginS.o && - ln -s /usr/lib/gcc/x86_64-alpine-linux-musl/14.2.0/crtendS.o /usr/lib/crtendS.o && - ln -s /usr/lib/gcc/x86_64-alpine-linux-musl/14.2.0/libgcc.a /usr/lib/libgcc.a && - RUSTFLAGS="--cfg reqwest_unstable" yarn --cwd impit-node build --target x86_64-unknown-linux-musl + export PATH="/aarch64-linux-musl-cross/bin:/usr/local/cargo/bin/rustup:/root/.cargo/bin:$PATH" RUSTFLAGS="-C target-feature=-crt-static --cfg reqwest_unstable" CC="clang" CXX="clang++" GN_EXE=gn && + apk add --update --no-cache bash wget cmake musl-dev clang llvm build-base python3 && + sed -i -e 's/v[[:digit:]]\..*\//edge\//g' /etc/apk/repositories && + apk add --update --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/edge/testing rustup git gn tar ninja && + apk update && + apk upgrade && + rustup-init -y && + yarn global add pnpm lerna && + rustup target add aarch64-unknown-linux-musl && + wget https://github.com/napi-rs/napi-rs/releases/download/linux-musl-cross%4010/aarch64-linux-musl-cross.tgz && + tar -xvf aarch64-linux-musl-cross.tgz && + rm aarch64-linux-musl-cross.tgz && + apk add perl && + ln -s /usr/lib/gcc/x86_64-alpine-linux-musl/14.2.0/crtbeginS.o /usr/lib/crtbeginS.o && + ln -s /usr/lib/gcc/x86_64-alpine-linux-musl/14.2.0/crtendS.o /usr/lib/crtendS.o && + ln -s /usr/lib/gcc/x86_64-alpine-linux-musl/14.2.0/libgcc.a /usr/lib/libgcc.a && + yarn --cwd impit-node build --target x86_64-unknown-linux-musl - host: macos-latest target: aarch64-apple-darwin build: yarn --cwd impit-node build --target aarch64-apple-darwin - host: windows-latest target: aarch64-pc-windows-msvc build: yarn --cwd impit-node build --target aarch64-pc-windows-msvc - name: stable - ${{ matrix.settings.target }} - node@20 + name: stable - ${{ matrix.settings.target }} - node@22 runs-on: ${{ matrix.settings.host }} steps: - uses: actions/checkout@v4 @@ -67,7 +80,7 @@ jobs: uses: actions/setup-node@v4 if: ${{ !matrix.settings.docker }} with: - node-version: 20 + node-version: 22 cache: yarn cache-dependency-path: impit-node/yarn.lock - name: Install @@ -104,7 +117,7 @@ jobs: uses: actions/setup-node@v4 if: matrix.settings.target == 'i686-pc-windows-msvc' with: - node-version: 20 + node-version: 22 cache: yarn cache-dependency-path: impit-node/yarn.lock architecture: x86 @@ -138,8 +151,8 @@ jobs: - host: windows-latest target: x86_64-pc-windows-msvc node: - - '18' - '20' + - '22' runs-on: ${{ matrix.settings.host }} steps: - uses: actions/checkout@v4 @@ -170,8 +183,8 @@ jobs: fail-fast: false matrix: node: - - '18' - '20' + - '22' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -201,8 +214,8 @@ jobs: fail-fast: false matrix: node: - - '18' - '20' + - '22' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 diff --git a/Cargo.lock b/Cargo.lock index f828fe6..7631afd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -361,9 +361,9 @@ checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "convert_case" -version = "0.6.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +checksum = "bb402b8d4c85569410425650ce3eddc7d698ed96d39a73f941b08fb63082f1e7" dependencies = [ "unicode-segmentation", ] @@ -1253,6 +1253,7 @@ dependencies = [ name = "impit-node" version = "0.0.0" dependencies = [ + "bytes", "h2", "impit", "napi", @@ -1262,6 +1263,7 @@ dependencies = [ "reqwest", "rustls", "tokio", + "tokio-stream", ] [[package]] @@ -1453,16 +1455,17 @@ dependencies = [ [[package]] name = "napi" -version = "2.16.15" +version = "3.0.0-alpha.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3437deb8b6ba2448b6a94260c5c6b9e5eeb5a5d6277e44b40b2532d457b0f0d" +checksum = "023afffe908293dd644255348d78502d748e28dab7a329aa72edce1c5ac8be81" dependencies = [ "bitflags", "ctor", - "napi-derive", + "futures-core", + "napi-build", "napi-sys", - "once_cell", "tokio", + "tokio-stream", ] [[package]] @@ -1473,11 +1476,10 @@ checksum = "db836caddef23662b94e16bf1f26c40eceb09d6aee5d5b06a7ac199320b69b19" [[package]] name = "napi-derive" -version = "2.16.13" +version = "3.0.0-alpha.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cbe2585d8ac223f7d34f13701434b9d5f4eb9c332cccce8dee57ea18ab8ab0c" +checksum = "78f3ea213909cb28cdc98badd3d792ae6aeffd76faf11c53a0e6a74a71340204" dependencies = [ - "cfg-if", "convert_case", "napi-derive-backend", "proc-macro2", @@ -1487,24 +1489,22 @@ dependencies = [ [[package]] name = "napi-derive-backend" -version = "1.0.75" +version = "2.0.0-alpha.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1639aaa9eeb76e91c6ae66da8ce3e89e921cd3885e99ec85f4abacae72fc91bf" +checksum = "ba940671bae74ad90bce07984d06e7284989e4f72ac7deca9eb3c78cd318d215" dependencies = [ "convert_case", - "once_cell", "proc-macro2", "quote", - "regex", "semver", "syn", ] [[package]] name = "napi-sys" -version = "2.4.0" +version = "3.0.0-alpha.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "427802e8ec3a734331fec1035594a210ce1ff4dc5bc1950530920ab717964ea3" +checksum = "4cc061b99c514ad4b7abc99d4db1ca24b9542b7ff48b4760bd9f82b24611534d" dependencies = [ "libloading", ] @@ -2007,6 +2007,7 @@ dependencies = [ "url", "wasm-bindgen", "wasm-bindgen-futures", + "wasm-streams", "web-sys", "webpki-roots", "windows-registry", @@ -2565,6 +2566,17 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-stream" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + [[package]] name = "tokio-util" version = "0.7.13" @@ -2814,6 +2826,19 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "wasm-streams" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "web-sys" version = "0.3.77" diff --git a/impit-node/Cargo.toml b/impit-node/Cargo.toml index d194a97..9f8bc2e 100644 --- a/impit-node/Cargo.toml +++ b/impit-node/Cargo.toml @@ -8,16 +8,18 @@ crate-type = ["cdylib"] [dependencies] # Default enable napi4 feature, see https://nodejs.org/api/n-api.html#node-api-version-matrix -napi = { version = "2.12.2", default-features = false, features = ["napi4", "async"] } -napi-derive = "2.12.2" +napi = { version = "3.0.0-alpha.27", default-features = false, features = ["napi4", "async", "web_stream"] } +napi-derive = "3.0.0-alpha.25" impit = { path="../impit" } rustls = { version="0.23.16" } tokio = { version="1.41.1", features = ["full"] } h2 = "0.4.7" reqwest = "0.12.9" +tokio-stream = "0.1.17" +bytes = "1.9.0" [build-dependencies] -napi-build = "2.0.1" +napi-build = "2.1.4" [target.x86_64-unknown-linux-gnu.dependencies] openssl = { version = "*", features = ["vendored"] } diff --git a/impit-node/index.d.ts b/impit-node/index.d.ts index 63ca2de..1e5fe0c 100644 --- a/impit-node/index.d.ts +++ b/impit-node/index.d.ts @@ -1,12 +1,38 @@ -/* tslint:disable */ +/* auto-generated by NAPI-RS */ /* eslint-disable */ +export declare class Impit { + constructor(options?: ImpitOptions | undefined | null) + /** Fetch a URL with the given options. */ + fetch(url: string, requestInit?: RequestInit | undefined | null): Promise +} +export type ImpitWrapper = Impit -/* auto-generated by NAPI-RS */ +export declare class ImpitResponse { + status: number + statusText: string + headers: Record + ok: boolean + bytes(this: object): Promise + text(this: object): Promise + json(this: object): Promise + get body(): ReadableStream +} -export const enum Browser { +export declare const enum Browser { Chrome = 'Chrome', Firefox = 'Firefox' } + +export declare const enum HttpMethod { + Get = 'GET', + Post = 'POST', + Put = 'PUT', + Delete = 'DELETE', + Patch = 'PATCH', + Head = 'HEAD', + Options = 'OPTIONS' +} + export interface ImpitOptions { browser?: Browser ignoreTlsErrors?: boolean @@ -25,15 +51,7 @@ export interface ImpitOptions { */ maxRedirects?: number } -export const enum HttpMethod { - Get = 'GET', - Post = 'POST', - Put = 'PUT', - Delete = 'DELETE', - Patch = 'PATCH', - Head = 'HEAD', - Options = 'OPTIONS' -} + export interface RequestInit { method?: HttpMethod headers?: Record @@ -43,18 +61,3 @@ export interface RequestInit { /** Force the request to use HTTP/3. If the server doesn't expect HTTP/3, the request will fail. */ forceHttp3?: boolean } -export declare class ImpitResponse { - status: number - statusText: string - headers: Record - ok: boolean - bytes(): Buffer - text(): string - json(): any -} -export type ImpitWrapper = Impit -export declare class Impit { - constructor(options?: ImpitOptions | undefined | null) - /** Fetch a URL with the given options. */ - fetch(url: string, requestInit?: RequestInit | undefined | null): Promise -} diff --git a/impit-node/index.js b/impit-node/index.js index 4ac7452..723b720 100644 --- a/impit-node/index.js +++ b/impit-node/index.js @@ -1,318 +1,371 @@ -/* tslint:disable */ +// prettier-ignore /* eslint-disable */ -/* prettier-ignore */ - +// @ts-nocheck /* auto-generated by NAPI-RS */ -const { existsSync, readFileSync } = require('fs') -const { join } = require('path') - -const { platform, arch } = process +const { createRequire } = require('node:module') +require = createRequire(__filename) +const { readFileSync } = require('node:fs') let nativeBinding = null -let localFileExisted = false -let loadError = null +const loadErrors = [] -function isMusl() { - // For Node 10 - if (!process.report || typeof process.report.getReport !== 'function') { - try { - const lddPath = require('child_process').execSync('which ldd').toString().trim() - return readFileSync(lddPath, 'utf8').includes('musl') - } catch (e) { +const isMusl = () => { + let musl = false + if (process.platform === 'linux') { + musl = isMuslFromFilesystem() + if (musl === null) { + musl = isMuslFromReport() + } + if (musl === null) { + musl = isMuslFromChildProcess() + } + } + return musl +} + +const isFileMusl = (f) => f.includes('libc.musl-') || f.includes('ld-musl-') + +const isMuslFromFilesystem = () => { + try { + return readFileSync('/usr/bin/ldd', 'utf-8').includes('musl') + } catch { + return null + } +} + +const isMuslFromReport = () => { + const report = typeof process.report.getReport === 'function' ? process.report.getReport() : null + if (!report) { + return null + } + if (report.header && report.header.glibcVersionRuntime) { + return false + } + if (Array.isArray(report.sharedObjects)) { + if (report.sharedObjects.some(isFileMusl)) { return true } - } else { - const { glibcVersionRuntime } = process.report.getReport().header - return !glibcVersionRuntime } + return false } -switch (platform) { - case 'android': - switch (arch) { - case 'arm64': - localFileExisted = existsSync(join(__dirname, 'impit-node.android-arm64.node')) +const isMuslFromChildProcess = () => { + try { + return require('child_process').execSync('ldd --version', { encoding: 'utf8' }).includes('musl') + } catch (e) { + // If we reach this case, we don't know if the system is musl or not, so is better to just fallback to false + return false + } +} + +function requireNative() { + if (process.platform === 'android') { + if (process.arch === 'arm64') { + try { + return require('./impit-node.android-arm64.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('impit-android-arm64') + } catch (e) { + loadErrors.push(e) + } + + } else if (process.arch === 'arm') { + try { + return require('./impit-node.android-arm-eabi.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('impit-android-arm-eabi') + } catch (e) { + loadErrors.push(e) + } + + } else { + loadErrors.push(new Error(`Unsupported architecture on Android ${process.arch}`)) + } + } else if (process.platform === 'win32') { + if (process.arch === 'x64') { + try { + return require('./impit-node.win32-x64-msvc.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('impit-win32-x64-msvc') + } catch (e) { + loadErrors.push(e) + } + + } else if (process.arch === 'ia32') { + try { + return require('./impit-node.win32-ia32-msvc.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('impit-win32-ia32-msvc') + } catch (e) { + loadErrors.push(e) + } + + } else if (process.arch === 'arm64') { + try { + return require('./impit-node.win32-arm64-msvc.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('impit-win32-arm64-msvc') + } catch (e) { + loadErrors.push(e) + } + + } else { + loadErrors.push(new Error(`Unsupported architecture on Windows: ${process.arch}`)) + } + } else if (process.platform === 'darwin') { + try { + return require('./impit-node.darwin-universal.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('impit-darwin-universal') + } catch (e) { + loadErrors.push(e) + } + + if (process.arch === 'x64') { + try { + return require('./impit-node.darwin-x64.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('impit-darwin-x64') + } catch (e) { + loadErrors.push(e) + } + + } else if (process.arch === 'arm64') { + try { + return require('./impit-node.darwin-arm64.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('impit-darwin-arm64') + } catch (e) { + loadErrors.push(e) + } + + } else { + loadErrors.push(new Error(`Unsupported architecture on macOS: ${process.arch}`)) + } + } else if (process.platform === 'freebsd') { + if (process.arch === 'x64') { + try { + return require('./impit-node.freebsd-x64.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('impit-freebsd-x64') + } catch (e) { + loadErrors.push(e) + } + + } else if (process.arch === 'arm64') { + try { + return require('./impit-node.freebsd-arm64.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('impit-freebsd-arm64') + } catch (e) { + loadErrors.push(e) + } + + } else { + loadErrors.push(new Error(`Unsupported architecture on FreeBSD: ${process.arch}`)) + } + } else if (process.platform === 'linux') { + if (process.arch === 'x64') { + if (isMusl()) { try { - if (localFileExisted) { - nativeBinding = require('./impit-node.android-arm64.node') - } else { - nativeBinding = require('impit-android-arm64') - } - } catch (e) { - loadError = e - } - break - case 'arm': - localFileExisted = existsSync(join(__dirname, 'impit-node.android-arm-eabi.node')) + return require('./impit-node.linux-x64-musl.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('impit-linux-x64-musl') + } catch (e) { + loadErrors.push(e) + } + + } else { try { - if (localFileExisted) { - nativeBinding = require('./impit-node.android-arm-eabi.node') - } else { - nativeBinding = require('impit-android-arm-eabi') - } - } catch (e) { - loadError = e - } - break - default: - throw new Error(`Unsupported architecture on Android ${arch}`) - } - break - case 'win32': - switch (arch) { - case 'x64': - localFileExisted = existsSync( - join(__dirname, 'impit-node.win32-x64-msvc.node') - ) + return require('./impit-node.linux-x64-gnu.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('impit-linux-x64-gnu') + } catch (e) { + loadErrors.push(e) + } + + } + } else if (process.arch === 'arm64') { + if (isMusl()) { try { - if (localFileExisted) { - nativeBinding = require('./impit-node.win32-x64-msvc.node') - } else { - nativeBinding = require('impit-win32-x64-msvc') - } - } catch (e) { - loadError = e - } - break - case 'ia32': - localFileExisted = existsSync( - join(__dirname, 'impit-node.win32-ia32-msvc.node') - ) + return require('./impit-node.linux-arm64-musl.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('impit-linux-arm64-musl') + } catch (e) { + loadErrors.push(e) + } + + } else { try { - if (localFileExisted) { - nativeBinding = require('./impit-node.win32-ia32-msvc.node') - } else { - nativeBinding = require('impit-win32-ia32-msvc') - } - } catch (e) { - loadError = e - } - break - case 'arm64': - localFileExisted = existsSync( - join(__dirname, 'impit-node.win32-arm64-msvc.node') - ) + return require('./impit-node.linux-arm64-gnu.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('impit-linux-arm64-gnu') + } catch (e) { + loadErrors.push(e) + } + + } + } else if (process.arch === 'arm') { + if (isMusl()) { try { - if (localFileExisted) { - nativeBinding = require('./impit-node.win32-arm64-msvc.node') - } else { - nativeBinding = require('impit-win32-arm64-msvc') - } - } catch (e) { - loadError = e - } - break - default: - throw new Error(`Unsupported architecture on Windows: ${arch}`) - } - break - case 'darwin': - localFileExisted = existsSync(join(__dirname, 'impit-node.darwin-universal.node')) - try { - if (localFileExisted) { - nativeBinding = require('./impit-node.darwin-universal.node') + return require('./impit-node.linux-arm-musleabihf.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('impit-linux-arm-musleabihf') + } catch (e) { + loadErrors.push(e) + } + } else { - nativeBinding = require('impit-darwin-universal') + try { + return require('./impit-node.linux-arm-gnueabihf.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('impit-linux-arm-gnueabihf') + } catch (e) { + loadErrors.push(e) + } + } - break - } catch {} - switch (arch) { - case 'x64': - localFileExisted = existsSync(join(__dirname, 'impit-node.darwin-x64.node')) + } else if (process.arch === 'riscv64') { + if (isMusl()) { try { - if (localFileExisted) { - nativeBinding = require('./impit-node.darwin-x64.node') - } else { - nativeBinding = require('impit-darwin-x64') - } - } catch (e) { - loadError = e - } - break - case 'arm64': - localFileExisted = existsSync( - join(__dirname, 'impit-node.darwin-arm64.node') - ) + return require('./impit-node.linux-riscv64-musl.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('impit-linux-riscv64-musl') + } catch (e) { + loadErrors.push(e) + } + + } else { try { - if (localFileExisted) { - nativeBinding = require('./impit-node.darwin-arm64.node') - } else { - nativeBinding = require('impit-darwin-arm64') - } - } catch (e) { - loadError = e - } - break - default: - throw new Error(`Unsupported architecture on macOS: ${arch}`) + return require('./impit-node.linux-riscv64-gnu.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('impit-linux-riscv64-gnu') + } catch (e) { + loadErrors.push(e) + } + + } + } else if (process.arch === 'ppc64') { + try { + return require('./impit-node.linux-ppc64-gnu.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('impit-linux-ppc64-gnu') + } catch (e) { + loadErrors.push(e) + } + + } else if (process.arch === 's390x') { + try { + return require('./impit-node.linux-s390x-gnu.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('impit-linux-s390x-gnu') + } catch (e) { + loadErrors.push(e) + } + + } else { + loadErrors.push(new Error(`Unsupported architecture on Linux: ${process.arch}`)) } - break - case 'freebsd': - if (arch !== 'x64') { - throw new Error(`Unsupported architecture on FreeBSD: ${arch}`) + } else { + loadErrors.push(new Error(`Unsupported OS: ${process.platform}, architecture: ${process.arch}`)) + } +} + +nativeBinding = requireNative() + +if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) { + try { + nativeBinding = require('./impit-node.wasi.cjs') + } catch (err) { + if (process.env.NAPI_RS_FORCE_WASI) { + loadErrors.push(err) } - localFileExisted = existsSync(join(__dirname, 'impit-node.freebsd-x64.node')) + } + if (!nativeBinding) { try { - if (localFileExisted) { - nativeBinding = require('./impit-node.freebsd-x64.node') - } else { - nativeBinding = require('impit-freebsd-x64') + nativeBinding = require('impit-wasm32-wasi') + } catch (err) { + if (process.env.NAPI_RS_FORCE_WASI) { + loadErrors.push(err) } - } catch (e) { - loadError = e - } - break - case 'linux': - switch (arch) { - case 'x64': - if (isMusl()) { - localFileExisted = existsSync( - join(__dirname, 'impit-node.linux-x64-musl.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./impit-node.linux-x64-musl.node') - } else { - nativeBinding = require('impit-linux-x64-musl') - } - } catch (e) { - loadError = e - } - } else { - localFileExisted = existsSync( - join(__dirname, 'impit-node.linux-x64-gnu.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./impit-node.linux-x64-gnu.node') - } else { - nativeBinding = require('impit-linux-x64-gnu') - } - } catch (e) { - loadError = e - } - } - break - case 'arm64': - if (isMusl()) { - localFileExisted = existsSync( - join(__dirname, 'impit-node.linux-arm64-musl.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./impit-node.linux-arm64-musl.node') - } else { - nativeBinding = require('impit-linux-arm64-musl') - } - } catch (e) { - loadError = e - } - } else { - localFileExisted = existsSync( - join(__dirname, 'impit-node.linux-arm64-gnu.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./impit-node.linux-arm64-gnu.node') - } else { - nativeBinding = require('impit-linux-arm64-gnu') - } - } catch (e) { - loadError = e - } - } - break - case 'arm': - if (isMusl()) { - localFileExisted = existsSync( - join(__dirname, 'impit-node.linux-arm-musleabihf.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./impit-node.linux-arm-musleabihf.node') - } else { - nativeBinding = require('impit-linux-arm-musleabihf') - } - } catch (e) { - loadError = e - } - } else { - localFileExisted = existsSync( - join(__dirname, 'impit-node.linux-arm-gnueabihf.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./impit-node.linux-arm-gnueabihf.node') - } else { - nativeBinding = require('impit-linux-arm-gnueabihf') - } - } catch (e) { - loadError = e - } - } - break - case 'riscv64': - if (isMusl()) { - localFileExisted = existsSync( - join(__dirname, 'impit-node.linux-riscv64-musl.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./impit-node.linux-riscv64-musl.node') - } else { - nativeBinding = require('impit-linux-riscv64-musl') - } - } catch (e) { - loadError = e - } - } else { - localFileExisted = existsSync( - join(__dirname, 'impit-node.linux-riscv64-gnu.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./impit-node.linux-riscv64-gnu.node') - } else { - nativeBinding = require('impit-linux-riscv64-gnu') - } - } catch (e) { - loadError = e - } - } - break - case 's390x': - localFileExisted = existsSync( - join(__dirname, 'impit-node.linux-s390x-gnu.node') - ) - try { - if (localFileExisted) { - nativeBinding = require('./impit-node.linux-s390x-gnu.node') - } else { - nativeBinding = require('impit-linux-s390x-gnu') - } - } catch (e) { - loadError = e - } - break - default: - throw new Error(`Unsupported architecture on Linux: ${arch}`) } - break - default: - throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`) + } } if (!nativeBinding) { - if (loadError) { - throw loadError + if (loadErrors.length > 0) { + // TODO Link to documentation with potential fixes + // - The package owner could build/publish bindings for this arch + // - The user may need to bundle the correct files + // - The user may need to re-install node_modules to get new packages + throw new Error('Failed to load native binding', { cause: loadErrors }) } throw new Error(`Failed to load native binding`) } -const { Browser, HttpMethod, ImpitResponse, Impit } = nativeBinding - -module.exports.Browser = Browser -module.exports.HttpMethod = HttpMethod -module.exports.ImpitResponse = ImpitResponse -module.exports.Impit = Impit +module.exports.Impit = nativeBinding.Impit +module.exports.ImpitWrapper = nativeBinding.ImpitWrapper +module.exports.ImpitResponse = nativeBinding.ImpitResponse +module.exports.Browser = nativeBinding.Browser +module.exports.HttpMethod = nativeBinding.HttpMethod diff --git a/impit-node/package.json b/impit-node/package.json index 65cfd92..c9972c6 100644 --- a/impit-node/package.json +++ b/impit-node/package.json @@ -5,14 +5,15 @@ "main": "index.js", "types": "index.d.ts", "napi": { - "name": "impit-node", - "triples": { - "additional": [ + "binaryName": "impit-node", + "targets": [ + "x86_64-apple-darwin", + "x86_64-unknown-linux-gnu", + "x86_64-pc-windows-msvc", "aarch64-apple-darwin", "aarch64-pc-windows-msvc", "x86_64-unknown-linux-musl" - ] - } + ] }, "repository": { "type": "git", @@ -20,14 +21,14 @@ }, "license": "MIT", "devDependencies": { - "@napi-rs/cli": "^2.18.4", + "@napi-rs/cli": "^3.0.0-alpha.70", "vitest": "^3.0.5" }, "ava": { "timeout": "3m" }, "engines": { - "node": ">= 10" + "node": ">= 20" }, "scripts": { "artifacts": "napi artifacts --dir ../artifacts --dist npm", diff --git a/impit-node/src/lib.rs b/impit-node/src/lib.rs index 612ecf0..d35e356 100644 --- a/impit-node/src/lib.rs +++ b/impit-node/src/lib.rs @@ -72,7 +72,7 @@ impl ImpitWrapper { }; match response { - Ok(response) => Ok(ImpitResponse::from(response).await), + Ok(response) => Ok(ImpitResponse::from(response)), Err(err) => { let status = match err { ErrorType::UrlMissingHostnameError => napi::Status::InvalidArg, diff --git a/impit-node/src/response.rs b/impit-node/src/response.rs index 0341160..4efb1c2 100644 --- a/impit-node/src/response.rs +++ b/impit-node/src/response.rs @@ -1,13 +1,17 @@ -use std::collections::HashMap; - -use impit::utils::{decode, ContentType}; -use napi::{bindgen_prelude::Buffer, Env, JsFunction, JsObject, JsString, JsUnknown}; +#![allow(clippy::await_holding_refcell_ref, deprecated)] +use napi::{ + bindgen_prelude::{ReadableStream, Result, This}, + Env, JsFunction, JsObject, JsUnknown, +}; use napi_derive::napi; use reqwest::Response; +use std::{cell::RefCell, collections::HashMap}; +use tokio_stream::StreamExt; +const INNER_RESPONSE_PROPERTY_NAME: &str = "__js_response"; #[napi] pub struct ImpitResponse { - bytes: Vec, + inner: RefCell>, pub status: u16, pub status_text: String, pub headers: HashMap, @@ -16,8 +20,7 @@ pub struct ImpitResponse { #[napi] impl ImpitResponse { - // not the Trait From - this method needs to be async. - pub(crate) async fn from(response: Response) -> Self { + pub(crate) fn from(response: Response) -> Self { let status = response.status().as_u16(); let status_text = response .status() @@ -30,9 +33,8 @@ impl ImpitResponse { .map(|(k, v)| (k.as_str().to_string(), v.to_str().unwrap().to_string())) .collect(); let ok = response.status().is_success(); - let bytes = response.bytes().await.unwrap().to_vec(); Self { - bytes, + inner: RefCell::new(Some(response)), status, status_text, headers, @@ -40,43 +42,83 @@ impl ImpitResponse { } } - #[napi] - pub fn bytes(&self) -> Buffer { - self.bytes.clone().into() - } + fn get_inner_response(&self, env: &Env, mut this: This) -> Result { + let cached_response = this.get::(INNER_RESPONSE_PROPERTY_NAME)?; + + if cached_response.is_none() { + let mut response = self.inner.borrow_mut(); + let response = response.take(); - #[napi] - pub fn text(&self) -> String { - let content_type_header = self.headers.get("content-type"); + let reqwest_stream = match response { + Some(inner_response) => inner_response.bytes_stream(), + None => panic!("fatal: Response already consumed, but stream was not cached?"), + }; - decode( - &self.bytes, - content_type_header.and_then(|ct| { - let parsed = ContentType::from(ct); + let napi_stream = reqwest_stream.filter_map(|chunk| match chunk { + Ok(bytes) => { + if bytes.is_empty() { + return None; + } - match parsed { - Ok(ct) => ct.into(), - Err(_) => None, + Some(Ok(bytes.to_vec())) } - }), - ) + Err(e) => Some(Err(napi::Error::new( + napi::Status::Unknown, + format!("Error reading response stream: {:?}", e), + ))), + }); + + let js_stream = ReadableStream::create_with_stream_bytes(env, napi_stream)?; + + let response_constructor = env + .get_global() + .and_then(|global| global.get_named_property::("Response")) + .expect("fatal: Couldn't get Response constructor"); + + this.set( + INNER_RESPONSE_PROPERTY_NAME, + response_constructor.new_instance(&[js_stream])?, + )?; + } + + Ok(this.get(INNER_RESPONSE_PROPERTY_NAME)?.unwrap()) + } + + #[napi(ts_return_type = "Promise")] + pub fn bytes(&self, env: &Env, this: This) -> Result { + let response = self.get_inner_response(env, this)?; + + response + .get_named_property::("bytes")? + .call_without_args(Some(&response)) + } + + #[napi(ts_return_type = "Promise")] + pub fn text(&self, env: &Env, this: This) -> Result { + let response = self.get_inner_response(env, this)?; + + response + .get_named_property::("text")? + .call_without_args(Some(&response)) } - #[napi(ts_return_type = "any")] - pub fn json(&self, env: Env) -> JsUnknown { - let text = self.text(); - - env - .get_global() - .and_then(|global| global.get_named_property::("JSON")) - .and_then(|json| json.get_named_property::("parse")) - .expect("fatal: Couldn't get JSON.parse") - .call::( - None, - &[env - .create_string_from_std(text) - .expect("Couldn't create JS string from the response text")], - ) - .expect("fatal: Couldn't parse JSON") + #[napi(ts_return_type = "Promise")] + pub fn json(&self, env: &Env, this: This) -> Result { + let response = self.get_inner_response(env, this)?; + + response + .get_named_property::("json")? + .call_without_args(Some(&response)) + } + + #[napi( + getter, + js_name = "body", + ts_return_type = "ReadableStream" + )] + pub fn body(&self, env: &Env, this: This) -> Result { + let response = self.get_inner_response(env, this)?; + + response.get_named_property("body") } } diff --git a/impit-node/test/basics.test.ts b/impit-node/test/basics.test.ts index ba3f972..bca906b 100644 --- a/impit-node/test/basics.test.ts +++ b/impit-node/test/basics.test.ts @@ -110,16 +110,26 @@ describe.each([ const bytes = await response.bytes(); // test that first 5 bytes of the response are the ` { - const response = await impit.fetch('https://httpbin.org/json'); - const json = await response.json(); - const text = await response.text(); + test('streaming response body works', async (t) => { + const response = await impit.fetch( + 'https://apify.github.io/impit/impit/index.html', + ); - t.expect(json?.slideshow?.author).toBe('Yours Truly'); - t.expect(text).toContain('Yours Truly'); + let found = false; + + for await (const chunk of response.body) { + const text = new TextDecoder('utf-8', { fatal: false }).decode(chunk); + + if (text.includes('impersonation')) { + found = true; + break; + } + } + + t.expect(found).toBe(true); }); }); diff --git a/impit-node/yarn.lock b/impit-node/yarn.lock index a7674ec..cdf6277 100644 --- a/impit-node/yarn.lock +++ b/impit-node/yarn.lock @@ -2,6 +2,28 @@ # yarn lockfile v1 +"@emnapi/core@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.3.1.tgz#9c62d185372d1bddc94682b87f376e03dfac3f16" + integrity sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog== + dependencies: + "@emnapi/wasi-threads" "1.0.1" + tslib "^2.4.0" + +"@emnapi/runtime@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.3.1.tgz#0fcaa575afc31f455fd33534c19381cfce6c6f60" + integrity sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw== + dependencies: + tslib "^2.4.0" + +"@emnapi/wasi-threads@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz#d7ae71fd2166b1c916c6cd2d0df2ef565a2e1a5b" + integrity sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw== + dependencies: + tslib "^2.4.0" + "@esbuild/aix-ppc64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz#38848d3e25afe842a7943643cbcd387cc6e13461" @@ -127,15 +149,574 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz#34aa0b52d0fbb1a654b596acfa595f0c7b77a77b" integrity sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg== +"@inquirer/checkbox@^4.1.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.1.1.tgz#5f2c0ce74a75e3872f8e170fd209655972ce7802" + integrity sha512-os5kFd/52gZTl/W6xqMfhaKVJHQM8V/U1P8jcSaQJ/C4Qhdrf2jEXdA/HaxfQs9iiUA/0yzYhk5d3oRHTxGDDQ== + dependencies: + "@inquirer/core" "^10.1.6" + "@inquirer/figures" "^1.0.10" + "@inquirer/type" "^3.0.4" + ansi-escapes "^4.3.2" + yoctocolors-cjs "^2.1.2" + +"@inquirer/confirm@^5.1.5": + version "5.1.5" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.5.tgz#0e6bf86794f69f849667ee38815608d6cd5917ba" + integrity sha512-ZB2Cz8KeMINUvoeDi7IrvghaVkYT2RB0Zb31EaLWOE87u276w4wnApv0SH2qWaJ3r0VSUa3BIuz7qAV2ZvsZlg== + dependencies: + "@inquirer/core" "^10.1.6" + "@inquirer/type" "^3.0.4" + +"@inquirer/core@^10.1.6": + version "10.1.6" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.1.6.tgz#2a92a219cb48c81453e145a5040d0e04f7df1aa2" + integrity sha512-Bwh/Zk6URrHwZnSSzAZAKH7YgGYi0xICIBDFOqBQoXNNAzBHw/bgXgLmChfp+GyR3PnChcTbiCTZGC6YJNJkMA== + dependencies: + "@inquirer/figures" "^1.0.10" + "@inquirer/type" "^3.0.4" + ansi-escapes "^4.3.2" + cli-width "^4.1.0" + mute-stream "^2.0.0" + signal-exit "^4.1.0" + wrap-ansi "^6.2.0" + yoctocolors-cjs "^2.1.2" + +"@inquirer/editor@^4.2.6": + version "4.2.6" + resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.2.6.tgz#dec442b9f7ada0804bb9ba689370cc05fd385b20" + integrity sha512-l0smvr8g/KAVdXx4I92sFxZiaTG4kFc06cFZw+qqwTirwdUHMFLnouXBB9OafWhpO3cfEkEz2CdPoCmor3059A== + dependencies: + "@inquirer/core" "^10.1.6" + "@inquirer/type" "^3.0.4" + external-editor "^3.1.0" + +"@inquirer/expand@^4.0.8": + version "4.0.8" + resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.8.tgz#8438bd34af182d4a37d8d7101a328e10430efadc" + integrity sha512-k0ouAC6L+0Yoj/j0ys2bat0fYcyFVtItDB7h+pDFKaDDSFJey/C/YY1rmIOqkmFVZ5rZySeAQuS8zLcKkKRLmg== + dependencies: + "@inquirer/core" "^10.1.6" + "@inquirer/type" "^3.0.4" + yoctocolors-cjs "^2.1.2" + +"@inquirer/figures@^1.0.10": + version "1.0.10" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.10.tgz#e3676a51c9c51aaabcd6ba18a28e82b98417db37" + integrity sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw== + +"@inquirer/input@^4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.1.5.tgz#ea3ffed7947c28d61ef3f261c4f261e99c4cac8a" + integrity sha512-bB6wR5wBCz5zbIVBPnhp94BHv/G4eKbUEjlpCw676pI2chcvzTx1MuwZSCZ/fgNOdqDlAxkhQ4wagL8BI1D3Zg== + dependencies: + "@inquirer/core" "^10.1.6" + "@inquirer/type" "^3.0.4" + +"@inquirer/number@^3.0.8": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.8.tgz#ca44c09a8ac74040e2327e04694799eae603e9de" + integrity sha512-CTKs+dT1gw8dILVWATn8Ugik1OHLkkfY82J+Musb57KpmF6EKyskv8zmMiEJPzOnLTZLo05X/QdMd8VH9oulXw== + dependencies: + "@inquirer/core" "^10.1.6" + "@inquirer/type" "^3.0.4" + +"@inquirer/password@^4.0.8": + version "4.0.8" + resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.8.tgz#ac2b14800a75f15e3404d98616d9dc7d8c2df38b" + integrity sha512-MgA+Z7o3K1df2lGY649fyOBowHGfrKRz64dx3+b6c1w+h2W7AwBoOkHhhF/vfhbs5S4vsKNCuDzS3s9r5DpK1g== + dependencies: + "@inquirer/core" "^10.1.6" + "@inquirer/type" "^3.0.4" + ansi-escapes "^4.3.2" + +"@inquirer/prompts@^7.0.0": + version "7.3.1" + resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-7.3.1.tgz#3fa954a7d9e71197b489a1d2a25a1e19b6688e76" + integrity sha512-r1CiKuDV86BDpvj9DRFR+V+nIjsVBOsa2++dqdPqLYAef8kgHYvmQ8ySdP/ZeAIOWa27YGJZRkENdP3dK0H3gg== + dependencies: + "@inquirer/checkbox" "^4.1.1" + "@inquirer/confirm" "^5.1.5" + "@inquirer/editor" "^4.2.6" + "@inquirer/expand" "^4.0.8" + "@inquirer/input" "^4.1.5" + "@inquirer/number" "^3.0.8" + "@inquirer/password" "^4.0.8" + "@inquirer/rawlist" "^4.0.8" + "@inquirer/search" "^3.0.8" + "@inquirer/select" "^4.0.8" + +"@inquirer/rawlist@^4.0.8": + version "4.0.8" + resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.0.8.tgz#1d4389186d63861a2abe2dd107f72e813dc0ea4b" + integrity sha512-hl7rvYW7Xl4un8uohQRUgO6uc2hpn7PKqfcGkCOWC0AA4waBxAv6MpGOFCEDrUaBCP+pXPVqp4LmnpWmn1E1+g== + dependencies: + "@inquirer/core" "^10.1.6" + "@inquirer/type" "^3.0.4" + yoctocolors-cjs "^2.1.2" + +"@inquirer/search@^3.0.8": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.0.8.tgz#38c25f5b2db15a268be76b09bd12b4599ecc216b" + integrity sha512-ihSE9D3xQAupNg/aGDZaukqoUSXG2KfstWosVmFCG7jbMQPaj2ivxWtsB+CnYY/T4D6LX1GHKixwJLunNCffww== + dependencies: + "@inquirer/core" "^10.1.6" + "@inquirer/figures" "^1.0.10" + "@inquirer/type" "^3.0.4" + yoctocolors-cjs "^2.1.2" + +"@inquirer/select@^4.0.8": + version "4.0.8" + resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.0.8.tgz#dde85e10bc4e650c51542de533a91b6bc63498b7" + integrity sha512-Io2prxFyN2jOCcu4qJbVoilo19caiD3kqkD3WR0q3yDA5HUCo83v4LrRtg55ZwniYACW64z36eV7gyVbOfORjA== + dependencies: + "@inquirer/core" "^10.1.6" + "@inquirer/figures" "^1.0.10" + "@inquirer/type" "^3.0.4" + ansi-escapes "^4.3.2" + yoctocolors-cjs "^2.1.2" + +"@inquirer/type@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.4.tgz#fa5f9e91a0abf3c9e93d3e1990ecb891d8195cf2" + integrity sha512-2MNFrDY8jkFYc9Il9DgLsHhMzuHnOYM1+CUYVWbzu9oT0hC7V7EcYvdCKeoll/Fcci04A+ERZ9wcc7cQ8lTkIA== + "@jridgewell/sourcemap-codec@^1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== -"@napi-rs/cli@^2.18.4": - version "2.18.4" - resolved "https://registry.yarnpkg.com/@napi-rs/cli/-/cli-2.18.4.tgz#12bebfb7995902fa7ab43cc0b155a7f5a2caa873" - integrity sha512-SgJeA4df9DE2iAEpr3M2H0OKl/yjtg1BnRI5/JyowS71tUWhrfSu2LT0V3vlHET+g1hBVlrO60PmEXwUEKp8Mg== +"@napi-rs/cli@^3.0.0-alpha.70": + version "3.0.0-alpha.70" + resolved "https://registry.yarnpkg.com/@napi-rs/cli/-/cli-3.0.0-alpha.70.tgz#028b56d1152c2a9e3beb926f43c1992312466efa" + integrity sha512-hYZuA1gXO7hx9sXzz4qCVBevh46unQMXRvgUhg2kHctnHJNOKKOjNcxM3OF7o60olzlNsjQ1SpzySWlYn/JLSg== + dependencies: + "@inquirer/prompts" "^7.0.0" + "@napi-rs/cross-toolchain" "^0.0.19" + "@napi-rs/wasm-tools" "^0.0.2" + "@octokit/rest" "^21.0.2" + clipanion "^3.2.1" + colorette "^2.0.20" + debug "^4.3.7" + emnapi "^1.3.1" + js-yaml "^4.1.0" + lodash-es "^4.17.21" + semver "^7.6.3" + toml "^3.0.0" + typanion "^3.14.0" + wasm-sjlj "^1.0.5" + +"@napi-rs/cross-toolchain@^0.0.19": + version "0.0.19" + resolved "https://registry.yarnpkg.com/@napi-rs/cross-toolchain/-/cross-toolchain-0.0.19.tgz#abbd72f0d3416be967c274f8ed6bbb7aaa4c1bcb" + integrity sha512-StHXqYANdTaMFqJJ3JXHqKQMylOzOJPcrOCd9Nt2NIGfvfaXK3SzpmNfkJimkOAYfTsfpfuRERsML0bUZCpHBQ== + dependencies: + "@napi-rs/lzma" "^1.4.1" + "@napi-rs/tar" "^0.1.4" + debug "^4.4.0" + +"@napi-rs/lzma-android-arm-eabi@1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-android-arm-eabi/-/lzma-android-arm-eabi-1.4.1.tgz#24a28c503f479adf45be351a1f4870122b36b88b" + integrity sha512-yenreSpZ9IrqppJOiWDqWMmja7XtSgio9LhtxYwgdILmy/OJTe/mlTYv+FhJBf7hIV9Razu5eBuEa3zKri81IA== + +"@napi-rs/lzma-android-arm64@1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-android-arm64/-/lzma-android-arm64-1.4.1.tgz#f4a86adbd6850030c7c3f02b1eb5a8eff52aa448" + integrity sha512-piutVBz5B1TNxXeEjub0n/IKI6dMaXPPRbVSXuc4gnZgzcihNDUh68vcLZgYd+IMiACZvBxvx2O3t5nthtph3A== + +"@napi-rs/lzma-darwin-arm64@1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-darwin-arm64/-/lzma-darwin-arm64-1.4.1.tgz#dbc4a5292ce4ae84401498684305f7b31a00c9de" + integrity sha512-sDfOhQQFqV8lGbpgJN9DqNLBPR7QOfYjcWUv8FOGPaVP1LPJDnrc5uCpRWWEa2zIKmTiO8P9xzIl0TDzrYmghg== + +"@napi-rs/lzma-darwin-x64@1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-darwin-x64/-/lzma-darwin-x64-1.4.1.tgz#1b7de5ba2040f23dc2c02c40ef05121a91a1da1a" + integrity sha512-S5/RbC6EP4QkYy2xhxbfm48ZD9FkysfpWY4Slve0nj5RGGsHvcJBg2Pi69jrTPB/zLKz2SUa0i+RfUt9zvZNaw== + +"@napi-rs/lzma-freebsd-x64@1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-freebsd-x64/-/lzma-freebsd-x64-1.4.1.tgz#88db584b98adbbdf9de6f31a7260fbbf5d092eb4" + integrity sha512-4AFnq6aZnclwameSBkDWu5Ftb8y4GwvVXeQXJKbN7hf7O5GG/8QpQB1R1NJw2QORUhpKwjAQUpbkTyhL2GFWWw== + +"@napi-rs/lzma-linux-arm-gnueabihf@1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-linux-arm-gnueabihf/-/lzma-linux-arm-gnueabihf-1.4.1.tgz#465e79e937e4039ec20e8730075956fe30df3dfb" + integrity sha512-j5rL1YRIm6rWmmGAvN6DPX6QuRjvFGB93xJ7DTRB47GXW4zHekXae6ivowjJ95vT4Iz4hSWkZbuwAy95eFrWRA== + +"@napi-rs/lzma-linux-arm64-gnu@1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-linux-arm64-gnu/-/lzma-linux-arm64-gnu-1.4.1.tgz#0e7e9e3cf15c48b4f0883ba60044aff958c42c5a" + integrity sha512-1XdFGKyTS9m+VrRQYs9uz+ToHf4Jwm0ejHU48k9lT9MPl8jSqzKdVtFzZBPzronHteSynBfKmUq0+HeWmjrsOQ== + +"@napi-rs/lzma-linux-arm64-musl@1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-linux-arm64-musl/-/lzma-linux-arm64-musl-1.4.1.tgz#f22ba40129e44cbf1969f3172b303039b1a81a32" + integrity sha512-9d09tYS0/rBwIk1QTcO2hMZEB/ZpsG2+uFW5am1RHElSWMclObirB1An7b6AMDJcRvcomkOg2GZ9COzrvHKwEA== + +"@napi-rs/lzma-linux-ppc64-gnu@1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-linux-ppc64-gnu/-/lzma-linux-ppc64-gnu-1.4.1.tgz#c40f45f5b05e8a13a2e84bbcb3ea4f4df00c81f3" + integrity sha512-UzEkmsgoJ3IOGIRb6kBzNiw+ThUpiighop7dVYfSqlF5juGzwf7YewC57RGn4FoJCvadOCrSm5VikAcgrwVgAw== + +"@napi-rs/lzma-linux-riscv64-gnu@1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-linux-riscv64-gnu/-/lzma-linux-riscv64-gnu-1.4.1.tgz#88758e3ea74809258114f5df5ca32f3cc04ba594" + integrity sha512-9dUKlZ1PdwxTaFF+j3oc+xjlk9nqFwo1NWWOH30uwjl4Rm5Gkv+Fx0pHrzu4kR/iVA+oyQqa9/2uDYnGSTijBA== + +"@napi-rs/lzma-linux-s390x-gnu@1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-linux-s390x-gnu/-/lzma-linux-s390x-gnu-1.4.1.tgz#e0874366e9d8e55fc10d958a2c31ece8b8e8c88b" + integrity sha512-MOVXUWJSLLCJDCCAlGa39sh7nv9XjvXzCf7QJus7rD8Ciz0mpXNXF9mg0ji7/MZ7pZlKPlXjXDnpVCfFdSEaFQ== + +"@napi-rs/lzma-linux-x64-gnu@1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.4.1.tgz#e149fef974e4b41b44bbd71734c675d447a6f227" + integrity sha512-Sxu7aJxU1sDbUTqjqLVDV3DCOAlbsFKvmuCN/S5uXBJd1IF2wJ9jK3NbFzfqTAo5Hudx8Y7kOb6+3K+fYPI1KQ== + +"@napi-rs/lzma-linux-x64-musl@1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-linux-x64-musl/-/lzma-linux-x64-musl-1.4.1.tgz#9bfde421fb4f1eab4f4c8d4aea731a547854be90" + integrity sha512-4I3BeKBQJSE5gF2/VTEv7wCLLjhapeutbCGpZPmDiLHZ74rm9edmNXAlKpdjADQ4YDLJ2GIBzttvwLXkJ9U+cw== + +"@napi-rs/lzma-wasm32-wasi@1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-wasm32-wasi/-/lzma-wasm32-wasi-1.4.1.tgz#c70cca60b91c67f45502d061f3f4a071f5847198" + integrity sha512-s32HdKqQWbohf6DGWpG9YMODaBdbKJ++JpNr6Ii7821sKf4h/o+p8IRFTOaWdmdJdllEWlRirnd5crA29VivJQ== + dependencies: + "@napi-rs/wasm-runtime" "^0.2.4" + +"@napi-rs/lzma-win32-arm64-msvc@1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-win32-arm64-msvc/-/lzma-win32-arm64-msvc-1.4.1.tgz#8fc7bea33e35a9d21e03f008e3b6e49e6fff81ee" + integrity sha512-ISz+v7ML5mKnjEZ7Kk4Z1BIn411r/fz3tDy9j5yDnwQI0MgTsUQFrIQElGUpULWYs2aYc6EZ9PhECbLBfSjh7A== + +"@napi-rs/lzma-win32-ia32-msvc@1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-win32-ia32-msvc/-/lzma-win32-ia32-msvc-1.4.1.tgz#f1cc52857810ee5d3b4a6b40c70390a5889ede69" + integrity sha512-3WKuCpZBrd7Jrw+h1jSu5XAsRWepMJu0sYuRoA4Y4Cwfu9gI7p5Z5Bc510nfjg7M7xvdpkI4UoW2WY7kBFRYrQ== + +"@napi-rs/lzma-win32-x64-msvc@1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-win32-x64-msvc/-/lzma-win32-x64-msvc-1.4.1.tgz#8cf5c8fe0af2de4f9a0f45d35a4cdd8610ca2731" + integrity sha512-0ixRo5z1zFXdh62hlrTV+QCTKHK0te5NHKaExOluhtcc6AdpMmpslvM9JhUxNHI+zM46w/DmmcvcOtqsaTmHgg== + +"@napi-rs/lzma@^1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma/-/lzma-1.4.1.tgz#bbc0231858231a6d0db1e9fb5c2fda48acf377d8" + integrity sha512-5f8K9NHjwHjZKGm3SS+7CFxXQhz8rbg2umBm/9g0xQRXBdYEI31N5z1ACuk9bmBQOusXAq9CArGfs/ZQso2rUA== + optionalDependencies: + "@napi-rs/lzma-android-arm-eabi" "1.4.1" + "@napi-rs/lzma-android-arm64" "1.4.1" + "@napi-rs/lzma-darwin-arm64" "1.4.1" + "@napi-rs/lzma-darwin-x64" "1.4.1" + "@napi-rs/lzma-freebsd-x64" "1.4.1" + "@napi-rs/lzma-linux-arm-gnueabihf" "1.4.1" + "@napi-rs/lzma-linux-arm64-gnu" "1.4.1" + "@napi-rs/lzma-linux-arm64-musl" "1.4.1" + "@napi-rs/lzma-linux-ppc64-gnu" "1.4.1" + "@napi-rs/lzma-linux-riscv64-gnu" "1.4.1" + "@napi-rs/lzma-linux-s390x-gnu" "1.4.1" + "@napi-rs/lzma-linux-x64-gnu" "1.4.1" + "@napi-rs/lzma-linux-x64-musl" "1.4.1" + "@napi-rs/lzma-wasm32-wasi" "1.4.1" + "@napi-rs/lzma-win32-arm64-msvc" "1.4.1" + "@napi-rs/lzma-win32-ia32-msvc" "1.4.1" + "@napi-rs/lzma-win32-x64-msvc" "1.4.1" + +"@napi-rs/tar-android-arm-eabi@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-android-arm-eabi/-/tar-android-arm-eabi-0.1.4.tgz#c86ccab3818282a2ec970b34b69293fb5062b2ef" + integrity sha512-LMSysWp5AmZj1NOCB2jshc9KCvp4gm7vm0Cra5U2crMvlj/fwGrvv6+EzSw49y8wCkNEcQ8QaGq5NBQKiLogSg== + +"@napi-rs/tar-android-arm64@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-android-arm64/-/tar-android-arm64-0.1.4.tgz#4a597ea693737f0b3a32dd478d54b14dc0d178d1" + integrity sha512-A/2rl8xr7F5yOtHVARROoSwjRRDNL1RlXCsg/K+RE5/V9iPBojsJsLpFPilp7InF6bi+z7aYn+yWCD6wSwfF4A== + +"@napi-rs/tar-darwin-arm64@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-darwin-arm64/-/tar-darwin-arm64-0.1.4.tgz#ccda1a0007b0b83acc5853cb69adc45a37c086d8" + integrity sha512-mnGBswBRtxDqUwXUZx+f9Uuy2uPssxuvcWFTYgUSZqlS2pg/XIWZdHZhbqWqKGpjpZrYcr+42roytbWlZ+epMA== + +"@napi-rs/tar-darwin-x64@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-darwin-x64/-/tar-darwin-x64-0.1.4.tgz#1b8291d1706159b59dc14ad3c0aa60e5d241c6ca" + integrity sha512-I81Fvl/cfnFVBET49xywNd57dXLJPO7jqrjD9Z2bKeXA0v0Zt1cwV1IOOTihFZXJv7kgu6EfNB7oumoLOTqq5A== + +"@napi-rs/tar-freebsd-x64@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-freebsd-x64/-/tar-freebsd-x64-0.1.4.tgz#a18bb25a735bfb1c7b88b50576aa8eff157e78d3" + integrity sha512-p5OFr3MqidZHkt9bHV2FgeS6k06g+s0GR2kvj/wm2mIxr7u3/sj3+RTr7GHz5DQq08T7uH85HhsrGYWN3vxmSg== + +"@napi-rs/tar-linux-arm-gnueabihf@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-linux-arm-gnueabihf/-/tar-linux-arm-gnueabihf-0.1.4.tgz#2755ff547c74a0fdedb8d15408d8e711cd1f03e5" + integrity sha512-POp2zb/Yuw6taEmrTlEoQI5S+2HmgfV1VtqGQZgRmCa85NlWLDsR6vbW9euu/6NbLj3ld15cCeJC2oJkv9k/xg== + +"@napi-rs/tar-linux-arm64-gnu@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-linux-arm64-gnu/-/tar-linux-arm64-gnu-0.1.4.tgz#0d758944574f53d6451a76315d1d2df8b0370625" + integrity sha512-TV+2AppSgJx5U9nk1C9bh1afWcBVnnANJ4SmtqUF6ediHcDS2rLebeI8BGljfnX9F149qbT9gOGN+R8tofpCsg== + +"@napi-rs/tar-linux-arm64-musl@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-linux-arm64-musl/-/tar-linux-arm64-musl-0.1.4.tgz#75688403784252b2dabd4d988465247b7a48fc06" + integrity sha512-UFBvKpYmuQRbgmXuSSPb8mRjq4JRZLYJhqwrWWnlfQP13xK2WB7mL2GhewBgynSH4YKDm6biKhK6U5RrSWEDgw== + +"@napi-rs/tar-linux-ppc64-gnu@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-linux-ppc64-gnu/-/tar-linux-ppc64-gnu-0.1.4.tgz#ee9e5f2bb061e25437be51cf8fc5646f5544a6fd" + integrity sha512-HT+h6Wv51SKXqks8UBF+KVuNJ09fM1GyO+SvCnDB5MF66tGiI2C6/MSX69zf1ZeqjACds1K/UwKiZCmE76/j9A== + +"@napi-rs/tar-linux-s390x-gnu@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-linux-s390x-gnu/-/tar-linux-s390x-gnu-0.1.4.tgz#595068a80ecbf09ab40f1f9abf378a59b4f57256" + integrity sha512-SJ+HSr281Y6cgJrQ4nkYbXaTHAmTLv/FZm5k9ZRA6Khml//ZoWi7CiT8dnPeD4QxYwCzAFA4aYMUOQJM/mk2/w== + +"@napi-rs/tar-linux-x64-gnu@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-linux-x64-gnu/-/tar-linux-x64-gnu-0.1.4.tgz#e915b6c344124753fce514063a8ab472fcbd17d2" + integrity sha512-LrF0lRFiFOkO40jfgTdF8dRTvYOLV52fdZ/YnJuBodNcxqEl9rChO3v5Uag//sy0me85FjqtobQNRQP8Nd80dA== + +"@napi-rs/tar-linux-x64-musl@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-linux-x64-musl/-/tar-linux-x64-musl-0.1.4.tgz#fbc0684193086bea848d9f5c5f68e98fcf7e921a" + integrity sha512-etGUWbs+Tk1PtzgyWrVzXa2fQrHNKSc/whHm+4x1Num8Oz+wGdjCDTUktYxAVy33PKZhdblVxxE83QXxkgjneQ== + +"@napi-rs/tar-wasm32-wasi@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-wasm32-wasi/-/tar-wasm32-wasi-0.1.4.tgz#843b7747bba548348f103047ac669cb6642f0704" + integrity sha512-mANkm93AKy+OspkOBAC5WI64SopXT0VawdTjpeGW1OgyUSJWdUB5rhs3I7B/HW1bi5tsUoZOZQe3rVgYdfzA6g== + dependencies: + "@napi-rs/wasm-runtime" "^0.2.4" + +"@napi-rs/tar-win32-arm64-msvc@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-win32-arm64-msvc/-/tar-win32-arm64-msvc-0.1.4.tgz#c911804d0cf4f0e70a6d45cae2e75c71a2136948" + integrity sha512-/5/gp6WR9b36CysJDe8AdyjNeje+NqCniYJz/AZc+UvpKwG8MG9nS6TMpJ9IgrQacJXvc4lWXxYyn6uuPQVvaQ== + +"@napi-rs/tar-win32-ia32-msvc@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-win32-ia32-msvc/-/tar-win32-ia32-msvc-0.1.4.tgz#688254b528cc66dd4d200709770e720863b57504" + integrity sha512-HnQi0op9BqJqPekKXhEAI1TWkLtavxKDBDGXNhUSm2//jriMeRykahUcKoUUxr1UGrmtxpc5dx0cThBt13paEw== + +"@napi-rs/tar-win32-x64-msvc@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-win32-x64-msvc/-/tar-win32-x64-msvc-0.1.4.tgz#a44911ec3b335f6c09dbd20e1ac06f2366d860c5" + integrity sha512-vy2ebEXerblni6XOgi3a27+CnI6PdQ9Phy/ru5HM4bVd/oulAJohmynAmBAB1AmXg1NLbAEWu43nATEDp5O2hA== + +"@napi-rs/tar@^0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@napi-rs/tar/-/tar-0.1.4.tgz#ccf609fbb6691624149070b4ae1edcc2d4f926b6" + integrity sha512-hDsvmMZY8tl2CcLfjnTeE1o5W1eGTSL+ZIX8YEybtcJwA+Cc8SNHb7l6JqMnGcjOrWBZbHt8tzTN+W7qHS5Wmg== + optionalDependencies: + "@napi-rs/tar-android-arm-eabi" "0.1.4" + "@napi-rs/tar-android-arm64" "0.1.4" + "@napi-rs/tar-darwin-arm64" "0.1.4" + "@napi-rs/tar-darwin-x64" "0.1.4" + "@napi-rs/tar-freebsd-x64" "0.1.4" + "@napi-rs/tar-linux-arm-gnueabihf" "0.1.4" + "@napi-rs/tar-linux-arm64-gnu" "0.1.4" + "@napi-rs/tar-linux-arm64-musl" "0.1.4" + "@napi-rs/tar-linux-ppc64-gnu" "0.1.4" + "@napi-rs/tar-linux-s390x-gnu" "0.1.4" + "@napi-rs/tar-linux-x64-gnu" "0.1.4" + "@napi-rs/tar-linux-x64-musl" "0.1.4" + "@napi-rs/tar-wasm32-wasi" "0.1.4" + "@napi-rs/tar-win32-arm64-msvc" "0.1.4" + "@napi-rs/tar-win32-ia32-msvc" "0.1.4" + "@napi-rs/tar-win32-x64-msvc" "0.1.4" + +"@napi-rs/wasm-runtime@^0.2.3", "@napi-rs/wasm-runtime@^0.2.4": + version "0.2.6" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.6.tgz#d1413a709622e7d6cf8a5b42fae76609184de6c9" + integrity sha512-z8YVS3XszxFTO73iwvFDNpQIzdMmSDTP/mB3E/ucR37V3Sx57hSExcXyMoNwaucWxnsWf4xfbZv0iZ30jr0M4Q== + dependencies: + "@emnapi/core" "^1.3.1" + "@emnapi/runtime" "^1.3.1" + "@tybys/wasm-util" "^0.9.0" + +"@napi-rs/wasm-tools-android-arm-eabi@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools-android-arm-eabi/-/wasm-tools-android-arm-eabi-0.0.2.tgz#da9978903a97516aad404c12434974c3b8dfea5a" + integrity sha512-/b+UU3suXjW4P0DzHRNdrnebQtFKcQf/YMeZJH+xUlKgvwli5kbmWjx8Wqqz0VETVkUTuPqJMBDIVLyc+14FGw== + +"@napi-rs/wasm-tools-android-arm64@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools-android-arm64/-/wasm-tools-android-arm64-0.0.2.tgz#5d295edece8988f42e4821d3d6fd7816be3587dc" + integrity sha512-j57GbDflwJdZtT8pZj5fOV4JAP+LdKN+wzsUYs+QRUoBqpWbbUANudolqfw63bkS9sD4z7fbCuz8iwtJqzxTVA== + +"@napi-rs/wasm-tools-darwin-arm64@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools-darwin-arm64/-/wasm-tools-darwin-arm64-0.0.2.tgz#e551a9aa5401f0665d942111cd7f87b0915332e4" + integrity sha512-P2ChgWgVuv9GwmbxN89R84KzIImoTqXINteEixUvmkdnhyFiR+I8deNs89Yed+5w8QLC6MEfrtRqLP9YI+NoQA== + +"@napi-rs/wasm-tools-darwin-x64@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools-darwin-x64/-/wasm-tools-darwin-x64-0.0.2.tgz#0162f36ac9f46fa49bc532337e6481b8e4cc6957" + integrity sha512-T/kQQ0gt8+wau1Z821PKVAD76QhmwVoLs2CT7Z9tTBs2pJvwSCP0C/kQiQAHcJIMi7A2E9Ab/Mez0BERy50EFA== + +"@napi-rs/wasm-tools-freebsd-x64@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools-freebsd-x64/-/wasm-tools-freebsd-x64-0.0.2.tgz#71ea63deaec98a8d683fb7dcc7d8adbf41d4801b" + integrity sha512-GnnHu+r5sfzuxC/1J5UMF/h3BOZnHb3NQZ5hmbCfZYCKzpzRxrAJhzRunlbRN+v0x8M/49dztVTYR3s7K4ooAw== + +"@napi-rs/wasm-tools-linux-arm64-gnu@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools-linux-arm64-gnu/-/wasm-tools-linux-arm64-gnu-0.0.2.tgz#7ff25497a4e927ce85e9e035e68c5a48893acf4a" + integrity sha512-KnZdLT0OnKb1CG2kdt3/WvM43vr9i+FEwXCvSOVC/6Tsifz7ynhMg7LAVESILd03HubzQJfg9nbRsk0bQ+IOwg== + +"@napi-rs/wasm-tools-linux-arm64-musl@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools-linux-arm64-musl/-/wasm-tools-linux-arm64-musl-0.0.2.tgz#3d167346cf82e5392f85a702a4011c893702d884" + integrity sha512-HkpZOID2U8P6pWqK3mqZ8bxU5xcuT3iA2fO+jrxn78h006iYgfNmdc5JaVhHnHazMmk32xKhSV4iV0VUh8UWDg== + +"@napi-rs/wasm-tools-linux-x64-gnu@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools-linux-x64-gnu/-/wasm-tools-linux-x64-gnu-0.0.2.tgz#0303a385e5898ce6fe58e07230f9b15644f738c5" + integrity sha512-YksJWBCyOalB9ogtP9+/dZKP+vR6+h7BmzMXaXMT71WW/GvIsifMVgv+DY/FRSNJQupp5Y+ugjqVAOUOc/G65g== + +"@napi-rs/wasm-tools-linux-x64-musl@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools-linux-x64-musl/-/wasm-tools-linux-x64-musl-0.0.2.tgz#28dcdd7aca90ff64292ad2cb956558ccf4a1cee3" + integrity sha512-sPtRxPMdw05KdTcxgSPMmSXG2+PiK3vJ/l2+g9hvjnnKtvslJN2Hr7j8zgzuoKRAUFPaJVe6+D2xVh5cpdqhww== + +"@napi-rs/wasm-tools-wasm32-wasi@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools-wasm32-wasi/-/wasm-tools-wasm32-wasi-0.0.2.tgz#f279a65ef1bb6e4046065efda23c9bbc38ff1a11" + integrity sha512-muRvZK7AIuo88G2AxYx3gA59rHMQgoN004saQkBvXnz3K/DVHKfTZ6TtUebss8zI3dURU6xExL8drxFWYxjEbQ== + dependencies: + "@napi-rs/wasm-runtime" "^0.2.3" + +"@napi-rs/wasm-tools-win32-arm64-msvc@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools-win32-arm64-msvc/-/wasm-tools-win32-arm64-msvc-0.0.2.tgz#5a2c438492f44b3ec2e27dd6d303f3dc5f0464a0" + integrity sha512-Cn13WQ+tpFqdVwx0DIWKbsI9auFyzVZV4F5UNOUeDt6GgOL+NndgJul0Pc9bSU6fi03AylMPfF/nTCaDWO2Wgw== + +"@napi-rs/wasm-tools-win32-ia32-msvc@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools-win32-ia32-msvc/-/wasm-tools-win32-ia32-msvc-0.0.2.tgz#4602b14ba57f3e13df94a7015fd080e17a39591f" + integrity sha512-xsg5DkIQi82a8rcx6246Y3XC8TIqHamY+/C6sIlPLaZEuHctDkMECAw0AANwRf5vN//D2oo2oljOuoYtB1GOKw== + +"@napi-rs/wasm-tools-win32-x64-msvc@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools-win32-x64-msvc/-/wasm-tools-win32-x64-msvc-0.0.2.tgz#7d393345b12167a7c17653829921ca1821d6e0bc" + integrity sha512-yHigltEt33eq8bappvKsIliz4MxfMPn1M+NWbIFRWN+IS1Z57mhmc1osuk+IRXrSlq0Tom0R6MYN1jpkZKz81Q== + +"@napi-rs/wasm-tools@^0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools/-/wasm-tools-0.0.2.tgz#030a69d158380681af31119fd05312f1615f3527" + integrity sha512-kBvDQCP5BLw2TxTENXLp3Of7vVEx0uyIye824JHE4dduzzOHVgSoOFVhVqAT3Fx/hLV445RVWfEqQbXMg4w/Mw== + optionalDependencies: + "@napi-rs/wasm-tools-android-arm-eabi" "0.0.2" + "@napi-rs/wasm-tools-android-arm64" "0.0.2" + "@napi-rs/wasm-tools-darwin-arm64" "0.0.2" + "@napi-rs/wasm-tools-darwin-x64" "0.0.2" + "@napi-rs/wasm-tools-freebsd-x64" "0.0.2" + "@napi-rs/wasm-tools-linux-arm64-gnu" "0.0.2" + "@napi-rs/wasm-tools-linux-arm64-musl" "0.0.2" + "@napi-rs/wasm-tools-linux-x64-gnu" "0.0.2" + "@napi-rs/wasm-tools-linux-x64-musl" "0.0.2" + "@napi-rs/wasm-tools-wasm32-wasi" "0.0.2" + "@napi-rs/wasm-tools-win32-arm64-msvc" "0.0.2" + "@napi-rs/wasm-tools-win32-ia32-msvc" "0.0.2" + "@napi-rs/wasm-tools-win32-x64-msvc" "0.0.2" + +"@octokit/auth-token@^5.0.0": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-5.1.2.tgz#68a486714d7a7fd1df56cb9bc89a860a0de866de" + integrity sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw== + +"@octokit/core@^6.1.3": + version "6.1.3" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-6.1.3.tgz#280d3bb66c702297baac0a202219dd66611286e4" + integrity sha512-z+j7DixNnfpdToYsOutStDgeRzJSMnbj8T1C/oQjB6Aa+kRfNjs/Fn7W6c8bmlt6mfy3FkgeKBRnDjxQow5dow== + dependencies: + "@octokit/auth-token" "^5.0.0" + "@octokit/graphql" "^8.1.2" + "@octokit/request" "^9.1.4" + "@octokit/request-error" "^6.1.6" + "@octokit/types" "^13.6.2" + before-after-hook "^3.0.2" + universal-user-agent "^7.0.0" + +"@octokit/endpoint@^10.0.0": + version "10.1.2" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-10.1.2.tgz#d38e727e2a64287114fdaa1eb9cd7c81c09460df" + integrity sha512-XybpFv9Ms4hX5OCHMZqyODYqGTZ3H6K6Vva+M9LR7ib/xr1y1ZnlChYv9H680y77Vd/i/k+thXApeRASBQkzhA== + dependencies: + "@octokit/types" "^13.6.2" + universal-user-agent "^7.0.2" + +"@octokit/graphql@^8.1.2": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-8.2.0.tgz#983a7ebc6479338d78921a1ca9b4095f85991e28" + integrity sha512-gejfDywEml/45SqbWTWrhfwvLBrcGYhOn50sPOjIeVvH6i7D16/9xcFA8dAJNp2HMcd+g4vru41g4E2RBiZvfQ== + dependencies: + "@octokit/request" "^9.1.4" + "@octokit/types" "^13.8.0" + universal-user-agent "^7.0.0" + +"@octokit/openapi-types@^23.0.1": + version "23.0.1" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-23.0.1.tgz#3721646ecd36b596ddb12650e0e89d3ebb2dd50e" + integrity sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g== + +"@octokit/plugin-paginate-rest@^11.4.0": + version "11.4.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.4.0.tgz#a9c3347113d793e48a014f0aa549eada00de7c9a" + integrity sha512-ttpGck5AYWkwMkMazNCZMqxKqIq1fJBNxBfsFwwfyYKTf914jKkLF0POMS3YkPBwp5g1c2Y4L79gDz01GhSr1g== + dependencies: + "@octokit/types" "^13.7.0" + +"@octokit/plugin-request-log@^5.3.1": + version "5.3.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz#ccb75d9705de769b2aa82bcd105cc96eb0c00f69" + integrity sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw== + +"@octokit/plugin-rest-endpoint-methods@^13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.3.0.tgz#ee18b9d6364bbae1d86e960d5576b555b41d2079" + integrity sha512-LUm44shlmkp/6VC+qQgHl3W5vzUP99ZM54zH6BuqkJK4DqfFLhegANd+fM4YRLapTvPm4049iG7F3haANKMYvQ== + dependencies: + "@octokit/types" "^13.7.0" + +"@octokit/request-error@^6.0.1", "@octokit/request-error@^6.1.6": + version "6.1.6" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-6.1.6.tgz#5f42c7894e7c3ab47c63aa3241f78cee8a826644" + integrity sha512-pqnVKYo/at0NuOjinrgcQYpEbv4snvP3bKMRqHaD9kIsk9u1LCpb2smHZi8/qJfgeNqLo5hNW4Z7FezNdEo0xg== + dependencies: + "@octokit/types" "^13.6.2" + +"@octokit/request@^9.1.4": + version "9.2.0" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-9.2.0.tgz#21aa1e72ff645f5b99ccf4a590cc33c4578bb356" + integrity sha512-kXLfcxhC4ozCnAXy2ff+cSxpcF0A1UqxjvYMqNuPIeOAzJbVWQ+dy5G2fTylofB/gTbObT8O6JORab+5XtA1Kw== + dependencies: + "@octokit/endpoint" "^10.0.0" + "@octokit/request-error" "^6.0.1" + "@octokit/types" "^13.6.2" + fast-content-type-parse "^2.0.0" + universal-user-agent "^7.0.2" + +"@octokit/rest@^21.0.2": + version "21.1.0" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-21.1.0.tgz#adbd3eca32a686e3d24e7840a58270e030267a1f" + integrity sha512-93iLxcKDJboUpmnUyeJ6cRIi7z7cqTZT1K7kRK4LobGxwTwpsa+2tQQbRQNGy7IFDEAmrtkf4F4wBj3D5rVlJQ== + dependencies: + "@octokit/core" "^6.1.3" + "@octokit/plugin-paginate-rest" "^11.4.0" + "@octokit/plugin-request-log" "^5.3.1" + "@octokit/plugin-rest-endpoint-methods" "^13.3.0" + +"@octokit/types@^13.6.2", "@octokit/types@^13.7.0", "@octokit/types@^13.8.0": + version "13.8.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-13.8.0.tgz#3815885e5abd16ed9ffeea3dced31d37ce3f8a0a" + integrity sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A== + dependencies: + "@octokit/openapi-types" "^23.0.1" "@rollup/rollup-android-arm-eabi@4.34.3": version "4.34.3" @@ -232,6 +813,13 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.3.tgz#2cd47d213ddd921bab1470a3e31312ee37aac08a" integrity sha512-CUypcYP31Q8O04myV6NKGzk9GVXslO5EJNfmARNSzLF2A+5rmZUlDJ4et6eoJaZgBT9wrC2p4JZH04Vkic8HdQ== +"@tybys/wasm-util@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.9.0.tgz#3e75eb00604c8d6db470bf18c37b7d984a0e3355" + integrity sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw== + dependencies: + tslib "^2.4.0" + "@types/estree@1.0.6", "@types/estree@^1.0.0": version "1.0.6" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" @@ -296,11 +884,40 @@ loupe "^3.1.2" tinyrainbow "^2.0.0" +ansi-escapes@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + assertion-error@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-2.0.1.tgz#f641a196b335690b1070bf00b6e7593fec190bf7" integrity sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA== +before-after-hook@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-3.0.2.tgz#d5665a5fa8b62294a5aa0a499f933f4a1016195d" + integrity sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A== + cac@^6.7.14: version "6.7.14" resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" @@ -317,12 +934,46 @@ chai@^5.1.2: loupe "^3.1.0" pathval "^2.0.0" +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + check-error@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc" integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw== -debug@^4.4.0: +cli-width@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" + integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== + +clipanion@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/clipanion/-/clipanion-3.2.1.tgz#2887db4cb232e80ba57cf19347a4e3a1c4a74133" + integrity sha512-dYFdjLb7y1ajfxQopN05mylEpK9ZX0sO1/RfMXdfmwjlIsPkbh4p7A682x++zFPLDCo1x3p82dtljHf5cW2LKA== + dependencies: + typanion "^3.8.0" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colorette@^2.0.20: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +debug@^4.3.7, debug@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== @@ -334,6 +985,16 @@ deep-eql@^5.0.1: resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341" integrity sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q== +emnapi@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/emnapi/-/emnapi-1.3.1.tgz#3bd7b6db02183f3c9a07be414844411e4a948e77" + integrity sha512-8rnw2VLJmHAXBSyhtrL9O5aW1VdbXA1ovRslp0IyTwnM62Fz83jQIo+VaIObgzdo6r1A98J9AHEq4KTqIR67Aw== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + es-module-lexer@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.6.0.tgz#da49f587fd9e68ee2404fe4e256c0c7d3a81be21" @@ -382,11 +1043,32 @@ expect-type@^1.1.0: resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.1.0.tgz#a146e414250d13dfc49eafcfd1344a4060fa4c75" integrity sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA== +external-editor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +fast-content-type-parse@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz#c236124534ee2cb427c8d8e5ba35a4856947847b" + integrity sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q== + fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + impit-darwin-arm64@0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/impit-darwin-arm64/-/impit-darwin-arm64-0.1.5.tgz#1fa5c0a99fef917373d46291a6bb2261870adfd9" @@ -417,6 +1099,23 @@ impit-win32-x64-msvc@0.1.5: resolved "https://registry.yarnpkg.com/impit-win32-x64-msvc/-/impit-win32-x64-msvc-0.1.5.tgz#47e98038f1fa4e911993cd86a04b5c1fbde7bc2b" integrity sha512-yWZ7RTgjOE24tI3w6uOD1yo4QA0xIc1POmujEtakwjdYQVKwZ9daSz4bsDO5eCXCUcGz+eOnzzxJ6EKrR9G8EQ== +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + loupe@^3.1.0, loupe@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/loupe/-/loupe-3.1.2.tgz#c86e0696804a02218f2206124c45d8b15291a240" @@ -434,11 +1133,21 @@ ms@^2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +mute-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-2.0.0.tgz#a5446fc0c512b71c83c44d908d5c7b7b4c493b2b" + integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== + nanoid@^3.3.8: version "3.3.8" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + pathe@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.2.tgz#5ed86644376915b3c7ee4d00ac8c348d671da3a5" @@ -491,11 +1200,26 @@ rollup@^4.23.0: "@rollup/rollup-win32-x64-msvc" "4.34.3" fsevents "~2.3.2" +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +semver@^7.6.3: + version "7.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" + integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== + siginfo@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== +signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + source-map-js@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" @@ -511,6 +1235,22 @@ std-env@^3.8.0: resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.8.0.tgz#b56ffc1baf1a29dcc80a3bdf11d7fca7c315e7d5" integrity sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w== +string-width@^4.1.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + tinybench@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.9.0.tgz#103c9f8ba6d7237a47ab6dd1dcff77251863426b" @@ -536,6 +1276,38 @@ tinyspy@^3.0.2: resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-3.0.2.tgz#86dd3cf3d737b15adcf17d7887c84a75201df20a" integrity sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q== +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +toml@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" + integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== + +tslib@^2.4.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +typanion@^3.14.0, typanion@^3.8.0: + version "3.14.0" + resolved "https://registry.yarnpkg.com/typanion/-/typanion-3.14.0.tgz#a766a91810ce8258033975733e836c43a2929b94" + integrity sha512-ZW/lVMRabETuYCd9O9ZvMhAh8GslSqaUjxmK/JLPCh6l73CvLBiuXswj/+7LdnWOgYsQ130FqLzFz5aGT4I3Ug== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +universal-user-agent@^7.0.0, universal-user-agent@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-7.0.2.tgz#52e7d0e9b3dc4df06cc33cb2b9fd79041a54827e" + integrity sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q== + vite-node@3.0.5: version "3.0.5" resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-3.0.5.tgz#6a0d06f7a4bdaae6ddcdedc12d910d886cf7d62f" @@ -584,6 +1356,11 @@ vitest@^3.0.5: vite-node "3.0.5" why-is-node-running "^2.3.0" +wasm-sjlj@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/wasm-sjlj/-/wasm-sjlj-1.0.6.tgz#1ab6156c51ac9e25fcbf2a4d8c7adfa07d4ad4ff" + integrity sha512-pjaKtLJejlWm6+okPV2X1A6nIsRDD4qeK97eCh8DP8KXi3Nzn/HY01vpHhZHlhDri12eZqipjm8HhdTVw+ATxw== + why-is-node-running@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.3.0.tgz#a3f69a97107f494b3cdc3bdddd883a7d65cebf04" @@ -591,3 +1368,17 @@ why-is-node-running@^2.3.0: dependencies: siginfo "^2.0.0" stackback "0.0.2" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +yoctocolors-cjs@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz#f4b905a840a37506813a7acaa28febe97767a242" + integrity sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA== diff --git a/impit/Cargo.toml b/impit/Cargo.toml index 080229a..1160abf 100644 --- a/impit/Cargo.toml +++ b/impit/Cargo.toml @@ -11,7 +11,7 @@ hickory-client = "0.24.2" hickory-proto = "0.24.2" log = "0.4.22" num-bigint = "0.4.6" -reqwest = { version = "0.12.9", features = ["json", "gzip", "brotli", "zstd", "deflate", "rustls-tls", "http3", "cookies"] } +reqwest = { version = "0.12.9", features = ["json", "gzip", "brotli", "zstd", "deflate", "rustls-tls", "http3", "cookies", "stream"] } rustls = { version="0.23.16", features=["impit"] } scraper = "0.22.0" tokio = { version="1.40.0", features = ["full"] }