diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index e3f9f3b50..56f80ae5e 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -209,7 +209,39 @@ jobs: with: node-version: 24 - run: npm --version - - run: npm publish + + - name: Download release artifacts + uses: actions/download-artifact@v4 + with: + path: artifacts + pattern: release-squawk-* + + - name: Stage platform binaries + run: | + set -euo pipefail + mkdir -p npm/darwin-x64/bin npm/darwin-arm64/bin npm/linux-x64/bin npm/linux-arm64/bin npm/win32-x64/bin + cp artifacts/release-squawk-darwin-x64/squawk-darwin-x64 npm/darwin-x64/bin/squawk + cp artifacts/release-squawk-darwin-arm64/squawk-darwin-arm64 npm/darwin-arm64/bin/squawk + cp artifacts/release-squawk-linux-x64/squawk-linux-x64 npm/linux-x64/bin/squawk + cp artifacts/release-squawk-linux-arm64/squawk-linux-arm64 npm/linux-arm64/bin/squawk + cp artifacts/release-squawk-windows-x64.exe/squawk-windows-x64.exe npm/win32-x64/bin/squawk.exe + chmod +x npm/darwin-x64/bin/squawk npm/darwin-arm64/bin/squawk npm/linux-x64/bin/squawk npm/linux-arm64/bin/squawk + + - name: Inject optionalDependencies into root package.json + run: | + set -euo pipefail + VERSION=$(node -p 'require("./package.json").version') + for tgt in darwin-x64 darwin-arm64 linux-x64 linux-arm64 win32-x64; do + npm pkg set "optionalDependencies.@squawk-cli/${tgt}=${VERSION}" + done + + - name: Publish packages + run: | + set -euo pipefail + for pkg in darwin-x64 darwin-arm64 linux-x64 linux-arm64 win32-x64; do + (cd "npm/$pkg" && npm publish --access public --provenance) + done + npm publish --access public --provenance publish-docker: if: startsWith(github.ref, 'refs/tags/') diff --git a/crates/xtask/src/update_version.rs b/crates/xtask/src/update_version.rs index 9aea67bb2..8aa5cfbc9 100644 --- a/crates/xtask/src/update_version.rs +++ b/crates/xtask/src/update_version.rs @@ -105,6 +105,20 @@ fn update_versions(sh: &Shell, v: &str) -> Result<()> { r#""version": ".*""#, &json_rep, )?; + for target in [ + "darwin-arm64", + "darwin-x64", + "linux-arm64", + "linux-x64", + "win32-x64", + ] { + replace_in_file( + sh, + &format!("npm/{target}/package.json"), + r#""version": ".*""#, + &json_rep, + )?; + } replace_in_file( sh, diff --git a/js/bin/squawk b/js/bin/squawk index 5d3af1ba6..98fae59d4 100755 --- a/js/bin/squawk +++ b/js/bin/squawk @@ -2,57 +2,4 @@ "use strict" -// Copyright (c) 2016 Sentry (https://sentry.io/) and individual contributors. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Sentry nor the names of its contributors may be -// used to endorse or promote products derived from this software without specific -// prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// from: https://github.com/getsentry/sentry-cli/blob/acc8d00eb1965d8f49a9f337b7776c782d253ac4/bin/sentry-cli - -const childProcess = require("child_process") -const { binaryPath } = require("../helpers") - -const child = childProcess.spawn(binaryPath, process.argv.slice(2), { - stdio: "inherit", -}) - -child.on("error", err => { - console.error("error: failed to invoke squawk") - console.error(err.stack) - process.exit(1) -}) - -child.on("exit", code => { - process.exit(code) -}) - -process.on("SIGTERM", () => { - child.kill("SIGTERM") -}) - -process.on("SIGINT", () => { - child.kill("SIGINT") -}) +require("../index.js").run() diff --git a/js/binaries/.gitignore b/js/binaries/.gitignore deleted file mode 100644 index d6b7ef32c..000000000 --- a/js/binaries/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore diff --git a/js/helpers.js b/js/helpers.js deleted file mode 100644 index 1791b24d7..000000000 --- a/js/helpers.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict" - -const path = require("path") -const binaryPath = path.resolve(__dirname, "binaries", "squawk") - -module.exports = { - binaryPath, -} diff --git a/js/index.js b/js/index.js new file mode 100644 index 000000000..5c1b37cb9 --- /dev/null +++ b/js/index.js @@ -0,0 +1,68 @@ +"use strict" + +const childProcess = require("child_process") + +/** @type {Record} */ +const PLATFORM_PACKAGES = { + "darwin-x64": "@squawk-cli/darwin-x64", + "darwin-arm64": "@squawk-cli/darwin-arm64", + "linux-x64": "@squawk-cli/linux-x64", + "linux-arm64": "@squawk-cli/linux-arm64", + "win32-x64": "@squawk-cli/win32-x64", +} + +function getBinaryPath() { + const key = `${process.platform}-${process.arch}` + const pkg = PLATFORM_PACKAGES[key] + if (!pkg) { + throw new Error( + `squawk: unsupported platform "${key}". Supported: ${Object.keys(PLATFORM_PACKAGES).join(", ")}.`, + ) + } + const binaryName = process.platform === "win32" ? "squawk.exe" : "squawk" + try { + return require.resolve(`${pkg}/bin/${binaryName}`) + } catch { + throw new Error( + `squawk: the "${pkg}" optional dependency was not installed.\n` + + `This usually means your package manager skipped optional dependencies. ` + + `Re-install with optional dependencies enabled (e.g. "npm install --include=optional").`, + ) + } +} + +function resolveBinaryOrExit() { + try { + return getBinaryPath() + } catch (err) { + console.error(err instanceof Error ? err.message : err) + process.exit(1) + } +} + +function run() { + const binaryPath = resolveBinaryOrExit() + + const child = childProcess.spawn(binaryPath, process.argv.slice(2), { + stdio: "inherit", + }) + + child.on("error", (err) => { + console.error("error: failed to invoke squawk") + console.error(err.stack) + }) + + child.on("exit", (code) => { + process.exit(code ?? 1) + }) + + process.on("SIGTERM", () => { + child.kill("SIGTERM") + }) + + process.on("SIGINT", () => { + child.kill("SIGINT") + }) +} + +module.exports = { getBinaryPath, run } diff --git a/js/install.js b/js/install.js deleted file mode 100644 index ea1f3fd8a..000000000 --- a/js/install.js +++ /dev/null @@ -1,168 +0,0 @@ -#!/usr/bin/env node - -"use strict" - -// Copyright (c) 2016 Sentry (https://sentry.io/) and individual contributors. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Sentry nor the names of its contributors may be -// used to endorse or promote products derived from this software without specific -// prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// from: https://github.com/getsentry/sentry-cli/blob/acc8d00eb1965d8f49a9f337b7776c782d253ac4/scripts/install.js - -const os = require("os") -const fs = require("fs") -const zlib = require("zlib") -const stream = require("stream") -const process = require("process") -const pkgInfo = require("../package.json") -const fetch = require("node-fetch").default -const path = require("path") -const crypto = require("crypto") -const { binaryPath } = require("./helpers") - -// e.g.: https://github.com/sbdchd/squawk/releases/download/v0.1.3/squawk-darwin-x86_64 -const RELEASES_BASE_URL = - process.env.SQUAWK_LOCAL_CDNURL || - "https://github.com/sbdchd/squawk/releases/download" - -const SUPPORTED_PLATFORMS = new Set([ - "darwin-x64", - "darwin-arm64", - "linux-x64", - "linux-arm64", - "win32-x64", -]) -const BINARY_NAME_OVERRIDE = new Map([["win32-x64", "squawk-windows-x64.exe"]]) - -/** - * @param {string} platform - * @param {string} arch - */ -function getDownloadUrl(platform, arch) { - if (!SUPPORTED_PLATFORMS.has(`${platform}-${arch}`)) { - return null - } - const name = - BINARY_NAME_OVERRIDE.get(`${platform}-${arch}`) || - `squawk-${platform}-${arch}` - return `${RELEASES_BASE_URL}/v${pkgInfo.version}/${name}` -} - -function getNpmCache() { - const env = process.env - return ( - env.npm_config_cache || - env.npm_config_yarn_offline_mirror || - path.join(os.homedir(), ".npm") - ) -} - -/** @param {string} url */ -function getCachedPath(url) { - const digest = crypto.createHash("md5").update(url).digest("hex").slice(0, 6) - - return path.join( - getNpmCache(), - "squawk-cli", - `${digest}-${path.basename(url).replace(/[^a-zA-Z0-9.]+/g, "-")}`, - ) -} - -/** @param {string} cached */ -function getTempFile(cached) { - return `${cached}.${process.pid}-${Math.random().toString(16).slice(2)}.tmp` -} - -/** @param {import("node-fetch").Response} response */ -function getDecompressor(response) { - const contentEncoding = response.headers.get("content-encoding") - if (contentEncoding == null) { - return new stream.PassThrough() - } - if (/\bgzip\b/.test(contentEncoding)) { - return zlib.createGunzip() - } - if (/\bdeflate\b/.test(contentEncoding)) { - return zlib.createInflate() - } - if (/\bbr\b/.test(contentEncoding)) { - return zlib.createBrotliDecompress() - } - return new stream.PassThrough() -} - -function downloadBinary() { - const arch = os.arch() - const platform = os.platform() - const downloadUrl = getDownloadUrl(platform, arch) - if (!downloadUrl) { - return Promise.reject(new Error(`unsupported target ${platform}-${arch}`)) - } - - const cachedPath = getCachedPath(downloadUrl) - if (fs.existsSync(cachedPath)) { - fs.copyFileSync(cachedPath, binaryPath) - return Promise.resolve() - } - - return fetch(downloadUrl, { - compress: false, - headers: { - "accept-encoding": "gzip, deflate, br", - }, - redirect: "follow", - }).then((response) => { - if (!response.ok) { - throw new Error(`Received ${response.status}: ${response.statusText}`) - } - - const decompressor = getDecompressor(response) - - const tempPath = getTempFile(cachedPath) - - fs.mkdirSync(path.dirname(tempPath), { recursive: true }) - - return new Promise((resolve, reject) => { - response.body - .on("error", (e) => reject(e)) - .pipe(decompressor) - .pipe(fs.createWriteStream(tempPath, { mode: 0o755 })) - .on("error", (e) => reject(e)) - .on("close", () => resolve()) - }).then(() => { - fs.copyFileSync(tempPath, cachedPath) - fs.copyFileSync(tempPath, binaryPath) - fs.unlinkSync(tempPath) - }) - }) -} - -downloadBinary() - .then(() => process.exit(0)) - .catch((e) => { - console.error(e) - process.exit(1) - }) diff --git a/npm/.gitignore b/npm/.gitignore new file mode 100644 index 000000000..164134bf5 --- /dev/null +++ b/npm/.gitignore @@ -0,0 +1,2 @@ +*/bin/squawk +*/bin/squawk.exe diff --git a/npm/darwin-arm64/package.json b/npm/darwin-arm64/package.json new file mode 100644 index 000000000..73563b113 --- /dev/null +++ b/npm/darwin-arm64/package.json @@ -0,0 +1,19 @@ +{ + "name": "@squawk-cli/darwin-arm64", + "version": "0.0.0", + "description": "squawk-cli binary for darwin-arm64", + "repository": "git@github.com:sbdchd/squawk.git", + "license": "(Apache-2.0 OR MIT)", + "os": [ + "darwin" + ], + "cpu": [ + "arm64" + ], + "bin": { + "squawk": "bin/squawk" + }, + "files": [ + "bin/squawk" + ] +} diff --git a/npm/darwin-x64/package.json b/npm/darwin-x64/package.json new file mode 100644 index 000000000..e7dbd14fd --- /dev/null +++ b/npm/darwin-x64/package.json @@ -0,0 +1,19 @@ +{ + "name": "@squawk-cli/darwin-x64", + "version": "0.0.0", + "description": "squawk-cli binary for darwin-x64", + "repository": "git@github.com:sbdchd/squawk.git", + "license": "(Apache-2.0 OR MIT)", + "os": [ + "darwin" + ], + "cpu": [ + "x64" + ], + "bin": { + "squawk": "bin/squawk" + }, + "files": [ + "bin/squawk" + ] +} diff --git a/npm/linux-arm64/package.json b/npm/linux-arm64/package.json new file mode 100644 index 000000000..970027e56 --- /dev/null +++ b/npm/linux-arm64/package.json @@ -0,0 +1,19 @@ +{ + "name": "@squawk-cli/linux-arm64", + "version": "0.0.0", + "description": "squawk-cli binary for linux-arm64", + "repository": "git@github.com:sbdchd/squawk.git", + "license": "(Apache-2.0 OR MIT)", + "os": [ + "linux" + ], + "cpu": [ + "arm64" + ], + "bin": { + "squawk": "bin/squawk" + }, + "files": [ + "bin/squawk" + ] +} diff --git a/npm/linux-x64/package.json b/npm/linux-x64/package.json new file mode 100644 index 000000000..9f3b04aa3 --- /dev/null +++ b/npm/linux-x64/package.json @@ -0,0 +1,19 @@ +{ + "name": "@squawk-cli/linux-x64", + "version": "0.0.0", + "description": "squawk-cli binary for linux-x64", + "repository": "git@github.com:sbdchd/squawk.git", + "license": "(Apache-2.0 OR MIT)", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "bin": { + "squawk": "bin/squawk" + }, + "files": [ + "bin/squawk" + ] +} diff --git a/npm/win32-x64/package.json b/npm/win32-x64/package.json new file mode 100644 index 000000000..03429a0b1 --- /dev/null +++ b/npm/win32-x64/package.json @@ -0,0 +1,19 @@ +{ + "name": "@squawk-cli/win32-x64", + "version": "0.0.0", + "description": "squawk-cli binary for win32-x64", + "repository": "git@github.com:sbdchd/squawk.git", + "license": "(Apache-2.0 OR MIT)", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "bin": { + "squawk": "bin/squawk.exe" + }, + "files": [ + "bin/squawk.exe" + ] +} diff --git a/package.json b/package.json index 9845eeec3..d359aa613 100644 --- a/package.json +++ b/package.json @@ -15,12 +15,12 @@ "bin": { "squawk": "js/bin/squawk" }, - "scripts": { - "install": "node js/install.js" - }, + "files": [ + "js/bin/squawk", + "js/index.js" + ], "devDependencies": { "@types/node": "^14.0.13", - "@types/node-fetch": "^2.5.7", "@typescript-eslint/eslint-plugin": "^3.3.0", "@typescript-eslint/parser": "^3.3.0", "eslint": "^7.2.0", @@ -28,9 +28,6 @@ "oxfmt": "^0.44.0", "typescript": "^3.9.5" }, - "dependencies": { - "node-fetch": "2.6.7" - }, "volta": { "node": "20.19.0", "pnpm": "9.15.4" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9102ce118..99fd9eaa3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,17 +7,10 @@ settings: importers: .: - dependencies: - node-fetch: - specifier: 2.6.7 - version: 2.6.7 devDependencies: '@types/node': specifier: ^14.0.13 version: 14.18.63 - '@types/node-fetch': - specifier: ^2.5.7 - version: 2.6.13 '@typescript-eslint/eslint-plugin': specifier: ^3.3.0 version: 3.10.1(@typescript-eslint/parser@3.10.1(eslint@7.32.0)(typescript@3.9.10))(eslint@7.32.0)(typescript@3.9.10) @@ -189,9 +182,6 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/node-fetch@2.6.13': - resolution: {integrity: sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==} - '@types/node@14.18.63': resolution: {integrity: sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==} @@ -306,9 +296,6 @@ packages: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -356,10 +343,6 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -407,10 +390,6 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} @@ -578,10 +557,6 @@ packages: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} - form-data@4.0.5: - resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} - engines: {node: '>= 6'} - fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -837,14 +812,6 @@ packages: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - minimatch@3.1.5: resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} @@ -861,15 +828,6 @@ packages: resolution: {integrity: sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==} engines: {node: '>= 0.4'} - node-fetch@2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} @@ -1097,9 +1055,6 @@ packages: resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} engines: {node: ^20.0.0 || >=22.0.0} - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} @@ -1151,12 +1106,6 @@ packages: v8-compile-cache@2.4.0: resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==} - webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} @@ -1289,11 +1238,6 @@ snapshots: '@types/json5@0.0.29': {} - '@types/node-fetch@2.6.13': - dependencies: - '@types/node': 14.18.63 - form-data: 4.0.5 - '@types/node@14.18.63': {} '@typescript-eslint/eslint-plugin@3.10.1(@typescript-eslint/parser@3.10.1(eslint@7.32.0)(typescript@3.9.10))(eslint@7.32.0)(typescript@3.9.10)': @@ -1447,8 +1391,6 @@ snapshots: async-function@1.0.0: {} - asynckit@0.4.0: {} - available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.1.0 @@ -1502,10 +1444,6 @@ snapshots: color-name@1.1.4: {} - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - concat-map@0.0.1: {} cross-spawn@7.0.6: @@ -1554,8 +1492,6 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 - delayed-stream@1.0.0: {} - doctrine@2.1.0: dependencies: esutils: 2.0.3 @@ -1814,14 +1750,6 @@ snapshots: dependencies: is-callable: 1.2.7 - form-data@4.0.5: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - hasown: 2.0.2 - mime-types: 2.1.35 - fs.realpath@1.0.0: {} function-bind@1.1.2: {} @@ -2083,12 +2011,6 @@ snapshots: math-intrinsics@1.1.0: {} - mime-db@1.52.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - minimatch@3.1.5: dependencies: brace-expansion: 1.1.13 @@ -2106,10 +2028,6 @@ snapshots: object.entries: 1.1.9 semver: 6.3.1 - node-fetch@2.6.7: - dependencies: - whatwg-url: 5.0.0 - object-inspect@1.13.4: {} object-keys@1.1.1: {} @@ -2403,8 +2321,6 @@ snapshots: tinypool@2.1.0: {} - tr46@0.0.3: {} - tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 @@ -2473,13 +2389,6 @@ snapshots: v8-compile-cache@2.4.0: {} - webidl-conversions@3.0.1: {} - - whatwg-url@5.0.0: - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0