From 61729c5298017df38105700a1b3f8e0fb702062c Mon Sep 17 00:00:00 2001 From: Justin Wilaby Date: Sat, 22 Mar 2025 14:20:47 -0700 Subject: [PATCH] fix(W-18094367): remove support for .netrc files --- .vscode/settings.json | 6 + package.json | 9 +- scripts/cleanup-netrc.cjs | 118 ++++++ src/api-client.ts | 27 +- src/deps.ts | 59 +-- src/file-encryption.ts | 145 +++++++ src/index.ts | 2 + src/login.ts | 68 ++-- src/token-storage.ts | 313 +++++++++++++++ test/api-client.test.ts | 26 +- test/vars.test.ts | 6 - yarn.lock | 786 +++++++++++++++++--------------------- 12 files changed, 1018 insertions(+), 547 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 scripts/cleanup-netrc.cjs create mode 100644 src/file-encryption.ts create mode 100644 src/token-storage.ts diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..fd89d42 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "cSpell.words": [ + "herokurc", + "yubikey" + ] +} diff --git a/package.json b/package.json index 18dcb0a..a69ee78 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,6 @@ "debug": "^4.4.0", "fs-extra": "^9.1.0", "heroku-client": "^3.1.0", - "netrc-parser": "^3.1.6", "open": "^8.4.2", "uuid": "^8.3.0", "yargs-parser": "^18.1.3", @@ -22,6 +21,7 @@ "@heroku-cli/schema": "^1.0.25", "@types/ansi-styles": "^3.2.1", "@types/chai": "^4.3.16", + "@types/debug": "^4.1.12", "@types/fs-extra": "^9.0.13", "@types/mocha": "^10.0.6", "@types/node": "20.14.8", @@ -55,7 +55,8 @@ "node": ">= 20" }, "files": [ - "lib" + "lib", + "scripts/cleanup-netrc.cjs" ], "homepage": "https://github.com/heroku/heroku-cli-command", "keywords": [ @@ -77,10 +78,12 @@ }, "scripts": { "build": "rm -rf lib && tsc", + "build:dev": "rm -rf lib && tsc --sourceMap", "lint": "tsc -p test --noEmit && eslint . --ext .ts", "posttest": "yarn run lint", "prepublishOnly": "yarn run build", - "test": "mocha --forbid-only \"test/**/*.test.ts\"" + "test": "mocha --forbid-only \"test/**/*.test.ts\"", + "postinstall": "node scripts/cleanup-netrc.cjs" }, "types": "./lib/index.d.ts" } diff --git a/scripts/cleanup-netrc.cjs b/scripts/cleanup-netrc.cjs new file mode 100644 index 0000000..d5a54c5 --- /dev/null +++ b/scripts/cleanup-netrc.cjs @@ -0,0 +1,118 @@ +const fs = require('fs') +const os = require('os') +const path = require('path') +/** + * List of Heroku machines to remove from the .netrc file + * as they are no longer used and pose a security risk. + * + * Add any additional Heroku machines to this list that you + * want to remove from the .netrc file. + */ +const machinesToRemove = ['api.heroku.com', 'git.heroku.com', 'api.staging.herokudev.com'] +/** + * Removes the unencrypted Heroku entries from the .netrc file + * This is a mitigation for a critical security vulnerability + * where unencrypted Heroku API tokens could be leaked + * if the .netrc file is compromised. This function removes + * any entries related to Heroku from the .netrc file as Heroku + * has discontinued it's use. + * + * BE ADVISED: a defect exists in the original implementation + * where orphaned credentials (passwords without machine blocks) + * are created when attempting to delete machine entries using the + * netrc-parser library. + * + * This implementation corrects that issue by removing orphaned + * credentials as well. + * + * @returns {void} + */ +function removeUnencryptedNetrcMachines() { + try { + const netrcPath = getNetrcFileLocation() + + if (!fs.existsSync(netrcPath)) { + console.log('.netrc file not found, nothing to clean up') + return + } + + const content = fs.readFileSync(netrcPath, 'utf8') + const lines = content.split('\n') + const filteredLines = [] + let skipLines = false + + // Iterate through lines, handling machine blocks and orphaned credentials + for (const line of lines) { + const trimmedLine = line.trim().toLowerCase() + + // Check if we're starting a Heroku machine block + if (trimmedLine.startsWith('machine') && + (machinesToRemove.some(machine => trimmedLine.includes(machine)))) { + skipLines = true + continue + } + + // Check if we're starting a new machine block (non-Heroku) + if (trimmedLine.startsWith('machine') && !skipLines) { + skipLines = false + } + + // Check for orphaned Heroku passwords (HKRU-) and their associated usernames + if (/(HRKUSTG-|HKRU-)/.test(line)) { + // Remove the previous line if it exists (username) + if (filteredLines.length > 0) { + filteredLines.pop() + } + + continue + } + + // Only keep lines if we're not in a Heroku block + if (!skipLines) { + filteredLines.push(line) + } + } + + // Remove any trailing empty lines + while (filteredLines.length > 0 && !filteredLines[filteredLines.length - 1].trim()) { + filteredLines.pop() + } + + // Add a newline at the end if we have content + const outputContent = filteredLines.length > 0 ? + filteredLines.join('\n') + '\n' : + '' + + fs.writeFileSync(netrcPath, outputContent) + } catch (error) { + throw new Error(`Error cleaning up .netrc: ${error.message}`) + } +} + +/** + * Finds the absolute path to the .netrc file + * on disk based on the operating system. This + * code was copied directly from `netrc-parser` + * and optimized for use here. + * + * @see [netrc-parser](https://github.com/jdx/node-netrc-parser/blob/master/src/netrc.ts#L177) + * + * @returns {string} the file path of the .netrc on disk. + */ +function getNetrcFileLocation() { + let home = '' + if (os.platform() === 'win32') { + home = + process.env.HOME ?? + (process.env.HOMEDRIVE && process.env.HOMEPATH && path.join(process.env.HOMEDRIVE, process.env.HOMEPATH)) ?? + process.env.USERPROFILE + } + + if (!home) { + home = os.homedir() ?? os.tmpdir() + } + + return path.join(home, os.platform() === 'win32' ? '_netrc' : '.netrc') +} + +removeUnencryptedNetrcMachines() diff --git a/src/api-client.ts b/src/api-client.ts index b3ecae6..277f018 100644 --- a/src/api-client.ts +++ b/src/api-client.ts @@ -1,7 +1,6 @@ import {Interfaces} from '@oclif/core' import {CLIError, warn} from '@oclif/core/lib/errors' import {HTTP, HTTPError, HTTPRequestOptions} from '@heroku/http-call' -import Netrc from 'netrc-parser' import * as url from 'url' import deps from './deps' @@ -11,7 +10,11 @@ import {RequestId, requestIdHeader} from './request-id' import {vars} from './vars' import {ParticleboardClient, IDelinquencyInfo, IDelinquencyConfig} from './particleboard-client' -const debug = require('debug') +import debug from 'debug' +import {removeToken, retrieveToken} from './token-storage' + +// intentional side effect +import '../scripts/cleanup-netrc.cjs' export namespace APIClient { export interface Options extends HTTPRequestOptions { @@ -192,7 +195,7 @@ export class APIClient { } if (!Object.keys(opts.headers).some(h => h.toLowerCase() === 'authorization')) { - opts.headers.authorization = `Bearer ${self.auth}` + opts.headers.authorization = `Bearer ${await self.auth}` } this.configDelinquency(url, opts) @@ -204,7 +207,7 @@ export class APIClient { const particleboardClient: ParticleboardClient = self.particleboard if (delinquencyConfig.fetch_delinquency && !delinquencyConfig.warning_shown) { - self._particleboard.auth = self.auth + self._particleboard.auth = await self.auth const settledResponses = await Promise.allSettled([ super.request(url, opts), particleboardClient.get(delinquencyConfig.fetch_url as string), @@ -240,7 +243,7 @@ export class APIClient { if (!self.authPromise) self.authPromise = self.login() await self.authPromise - opts.headers.authorization = `Bearer ${self.auth}` + opts.headers.authorization = `Bearer ${await self.auth}` return this.request(url, opts, retries) } @@ -273,9 +276,13 @@ export class APIClient { if (!this._auth) { if (process.env.HEROKU_API_TOKEN && !process.env.HEROKU_API_KEY) deps.cli.warn('HEROKU_API_TOKEN is set but you probably meant HEROKU_API_KEY') this._auth = process.env.HEROKU_API_KEY - if (!this._auth) { - deps.netrc.loadSync() - this._auth = deps.netrc.machines[vars.apiHost] && deps.netrc.machines[vars.apiHost].password + } + + if (!this._auth) { + try { + this._auth = retrieveToken() + } catch { + // noop } } @@ -346,9 +353,7 @@ export class APIClient { if (error instanceof CLIError) warn(error) } - delete Netrc.machines['api.heroku.com'] - delete Netrc.machines['git.heroku.com'] - await Netrc.save() + removeToken() } get defaults(): typeof HTTP.defaults { diff --git a/src/deps.ts b/src/deps.ts index 4ffdbf1..fe72086 100644 --- a/src/deps.ts +++ b/src/deps.ts @@ -1,7 +1,10 @@ -// remote +// This file isn't necessary and should be removed. +// I reorganized the code to make it easier to understand +// but it is entirely unnecessary to have a file like this. +// I'm leaving it here for now, but it should be removed +// in the future. import oclif = require('@oclif/core') import HTTP = require('@heroku/http-call') -import netrc = require('netrc-parser') import apiClient = require('./api-client') import particleboardClient = require('./particleboard-client') @@ -14,49 +17,15 @@ import yubikey = require('./yubikey') const {ux} = oclif export const deps = { - // remote - get cli(): typeof ux { - return fetch('@oclif/core').ux - }, - get HTTP(): typeof HTTP { - return fetch('@heroku/http-call') - }, - get netrc(): typeof netrc.default { - return fetch('netrc-parser').default - }, - - // local - get Mutex(): typeof mutex.Mutex { - return fetch('./mutex').Mutex - }, - get yubikey(): typeof yubikey.yubikey { - return fetch('./yubikey').yubikey - }, - get APIClient(): typeof apiClient.APIClient { - return fetch('./api-client').APIClient - }, - get ParticleboardClient(): typeof particleboardClient.ParticleboardClient { - return fetch('./particleboard-client').ParticleboardClient - }, - get file(): typeof file { - return fetch('./file') - }, - get flags(): typeof flags { - return fetch('./flags') - }, - get Git(): typeof git.Git { - return fetch('./git').Git - }, -} - -const cache: any = {} - -function fetch(s: string) { - if (!cache[s]) { - cache[s] = require(s) - } - - return cache[s] + cli: ux, + HTTP, + Mutex: mutex.Mutex, + yubikey: yubikey.yubikey, + APIClient: apiClient.APIClient, + ParticleboardClient: particleboardClient.ParticleboardClient, + file, + flags, + Git: git.Git, } export default deps diff --git a/src/file-encryption.ts b/src/file-encryption.ts new file mode 100644 index 0000000..deba7af --- /dev/null +++ b/src/file-encryption.ts @@ -0,0 +1,145 @@ +import crypto from 'node:crypto' +import path from 'node:path' +import {homedir} from 'os' +import {readFile, writeFile} from 'fs/promises' + +export const defaultConfigPath = path.join(homedir(), '.api-client-config') + +export type ConfigEntry = { + token: string + username: string + } + +export type ClientConfig = { + 'api.heroku.com': ConfigEntry, + 'git.heroku.com': ConfigEntry, + [machineId: string]: ConfigEntry +} + +/** + * Reads the contents of the config file and decrypts it using the provided bearer token + * and returns the JSON contents of the config file. + * + * @param token the bearer token to use for encryption + * @param configPath the path to the config file to write + * @returns a promise that resolves to the JSON contents of the config file + */ +export async function getConfigContents(token: string, configPath: string = defaultConfigPath): Promise { + const encryptedContents = await readFile(configPath, 'utf8') + const jsonString = await decryptWithToken(encryptedContents, token) ?? '{}' + + return JSON.parse(jsonString) +} + +/** + * Writes the provided contents to the config file and encrypts it using the provided bearer token. + * + * @param contents the content to write to the config file. This must be a JSON serializable object + * @param token the bearer token to use for encryption + * @param configPath the path to the config file to write + * @returns a promise that resolves when the config file has been written + */ +export async function writeConfigContents(contents: unknown, token: string, configPath: string = defaultConfigPath): Promise { + const jsonString = JSON.stringify(contents) + const encryptedContents = await encryptWithToken(jsonString, token) + + await writeFile(configPath, encryptedContents, 'utf8') +} + +/** + * Encrypts the given content using the provided bearer token. + * The encrypted content is returned as a string in the format: + * salt:iv:authTag:encryptedContent + * + * IMPORTANT: if the bearer token is revoked, the encrypted data is + * intentionally not recoverable. This is a security feature to prevent + * the data from being read after the bearer token is revoked. This + * is a deliberate and intentional feature of this encryption strategy and must be + * maintained in order to ensure the data is permanently linked to a + * revokable object and cannot be read by any other software system. + * + * @param content The content to encrypt represented as a string. Binary data must be base64 encoded first + * @param bearerToken The bearer token to use for encryption. This must be provided as a revokable bearer token + * @returns the encrypted content as a string + */ +function encryptWithToken(content: string, bearerToken: string): string { + // Always generate a new random salt for each encryption + // do not reuse for any reason + const salt = crypto.randomBytes(16) + + // Derive the key using the salt and bearer token + // so we guarantee the encrypted data is permanently + // bound to a revokable object. + const derivedKey = deriveKey(bearerToken, salt) + + // Generate IV for AES encryption + // based on industry standards + const iv = crypto.randomBytes(16) + const cipher = crypto.createCipheriv('aes-256-gcm', derivedKey, iv) + + let encrypted = cipher.update(content, 'utf8', 'hex') + encrypted += cipher.final('hex') + + const authTag = cipher.getAuthTag() + + // Clear from memory (best practice) + derivedKey.fill(0) + + // Format: salt:iv:authTag:encryptedContent - do not change without also + // updating the decryptWithToken splits + return `${salt.toString('hex')}:${iv.toString('hex')}:${authTag.toString('hex')}:${encrypted}` +} + +/** + * Derives a key using the provided bearer token and salt. + * This function is critical to ensuring the key is permanently + * bound to a unique bearer token obtained via secure authentication + * flows. If the bearer token is revoked, the encrypted data is + * intentionally not recoverable. + * + * @param bearerToken The bearer token to use for encryption. This must be provided as a revokable bearer token + * @param salt The salt to use for key derivation. This must be a buffer of 16 bytes + * @returns the derived key as a buffer + */ +export function deriveKey(bearerToken: string, salt: Buffer): Buffer { + return crypto.pbkdf2Sync( + bearerToken, + salt, + 100000, + 32, + 'sha512', + ) +} + +/** + * Decrypts the given encrypted content using the provided bearer token. + * The encrypted content is expected to be in the format: + * salt:iv:authTag:encryptedContent + * + * @param encrypted the content to decrypt + * @param bearerToken the bearer token to use for decryption + * @returns the decrypted content as a string + */ +export function decryptWithToken(encrypted: string, bearerToken: string): string { + // Split all components + const [saltHex, ivHex, authTagHex, encryptedContent] = encrypted.split(':') + + // Convert components from hex + const salt = Buffer.from(saltHex, 'hex') + const iv = Buffer.from(ivHex, 'hex') + const authTag = Buffer.from(authTagHex, 'hex') + + // Derive the same key using stored salt + const derivedKey = deriveKey(bearerToken, salt) + + const decipher = crypto.createDecipheriv('aes-256-gcm', derivedKey, iv) + decipher.setAuthTag(authTag) + + let decrypted = decipher.update(encryptedContent, 'hex', 'utf8') + decrypted += decipher.final('utf8') + + // Clear from memory (best practice) + derivedKey.fill(0) + + return decrypted +} diff --git a/src/index.ts b/src/index.ts index 4ac36a7..68c3062 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,6 +5,8 @@ import * as flags from './flags' export {APIClient} from './api-client' export {vars} from './vars' export {flags, completions} +export * from './file-encryption' +export * from './token-storage' export {Command} export default Command diff --git a/src/login.ts b/src/login.ts index 2b8c0a0..d46f04e 100644 --- a/src/login.ts +++ b/src/login.ts @@ -2,14 +2,19 @@ import color from '@heroku-cli/color' import * as Heroku from '@heroku-cli/schema' import {Interfaces, ux} from '@oclif/core' import HTTP from '@heroku/http-call' -import Netrc from 'netrc-parser' + import open from 'open' import * as os from 'os' +import crypto from 'crypto' import {APIClient, HerokuAPIError} from './api-client' import {vars} from './vars' -const debug = require('debug')('heroku-cli-command') +import debugFunc from 'debug' +import {ClientConfig, ConfigEntry, getConfigContents, writeConfigContents} from './file-encryption' +import {retrieveToken, storeToken} from './token-storage' +const debug = debugFunc('heroku-cli-command') + const hostname = os.hostname() const thirtyDays = 60 * 60 * 24 * 30 @@ -21,7 +26,7 @@ export namespace Login { } } -interface NetrcEntry { +interface AuthResult { login: string password: string } @@ -44,8 +49,6 @@ export class Login { if (process.env.HEROKU_API_KEY) ux.error('Cannot log in with HEROKU_API_KEY set') if (opts.expiresIn && opts.expiresIn > thirtyDays) ux.error('Cannot set an expiration longer than thirty days') - await Netrc.load() - const previousEntry = Netrc.machines['api.heroku.com'] let input: string | undefined = opts.method if (!input) { if (opts.expiresIn) { @@ -59,8 +62,12 @@ export class Login { } } + let previousEntry: ConfigEntry | undefined try { - if (previousEntry && previousEntry.password) await this.logout(previousEntry.password) + const token = retrieveToken() + const clientConfig = await getConfigContents(token) + previousEntry = clientConfig['api.heroku.com'] + if (previousEntry?.token) await this.logout(previousEntry.token) } catch (error) { const message = error instanceof Error ? error.message : String(error) ux.warn(message) @@ -74,7 +81,7 @@ export class Login { break case 'i': case 'interactive': - auth = await this.interactive(previousEntry && previousEntry.login, opts.expiresIn) + auth = await this.interactive(previousEntry?.username, opts.expiresIn) break case 's': case 'sso': @@ -92,7 +99,8 @@ export class Login { } } - async logout(token = this.heroku.auth) { + async logout(token?: string): Promise { + if (!token) token = this.heroku.auth if (!token) return debug('no credentials to logout') const requests: Promise[] = [] // for SSO logins we delete the session since those do not show up in @@ -120,7 +128,7 @@ export class Login { // dashboard as API Key and they may be using it for something else and we // would unwittingly break an integration that they are depending on const d = await this.defaultToken() - if (d === token) return + if (crypto.timingSafeEqual(Buffer.from(token), Buffer.from(d!))) return return Promise.all( authorizations .filter(a => a.access_token && a.access_token.token === this.heroku.auth) @@ -139,7 +147,7 @@ export class Login { await Promise.all(requests) } - private async browser(browser?: string): Promise { + private async browser(browser?: string): Promise { const {body: urls} = await HTTP.post<{browser_url: string, cli_url: string, token: string}>(`${this.loginHost}/auth`, { body: {description: `Heroku CLI login from ${hostname}`}, }) @@ -186,7 +194,7 @@ export class Login { } } - private async interactive(login?: string, expiresIn?: number): Promise { + private async interactive(login?: string, expiresIn?: number): Promise { process.stderr.write('heroku: Enter your login credentials\n') login = await ux.prompt('Email', {default: login}) const password = await ux.prompt('Password', {type: 'hide'}) @@ -212,7 +220,7 @@ export class Login { return auth } - private async createOAuthToken(username: string, password: string, opts: {expiresIn?: number, secondFactor?: string} = {}): Promise { + private async createOAuthToken(username: string, password: string, opts: {expiresIn?: number, secondFactor?: string} = {}): Promise { function basicAuth(username: string, password: string) { let auth = [username, password].join(':') auth = Buffer.from(auth).toString('base64') @@ -237,30 +245,32 @@ export class Login { return {password: auth.access_token!.token!, login: auth.user!.email!} } - private async saveToken(entry: NetrcEntry) { + private async saveToken(entry: AuthResult) { + let config: ClientConfig + try { + config = await getConfigContents(entry.password) + } catch { + config = {} as ClientConfig + } + const hosts = [vars.apiHost, vars.httpGitHost] hosts.forEach(host => { - if (!Netrc.machines[host]) Netrc.machines[host] = {} - Netrc.machines[host].login = entry.login - Netrc.machines[host].password = entry.password - delete Netrc.machines[host].method - delete Netrc.machines[host].org + if (!config[host]) config[host] = {} as ConfigEntry + config[host].username = entry.login + config[host].token = entry.password }) - - if (Netrc.machines._tokens) { - (Netrc.machines._tokens as any).forEach((token: any) => { - if (hosts.includes(token.host)) { - token.internalWhitespace = '\n ' - } - }) + try { + await writeConfigContents(config, entry.password) + await storeToken(entry.password) + } catch (error: any) { + ux.warn(error) } - - await Netrc.save() } private async defaultToken(): Promise { + const auth = this.heroku.auth try { - const {body: authorization} = await HTTP.get(`${vars.apiUrl}/oauth/authorizations/~`, headers(this.heroku.auth!)) + const {body: authorization} = await HTTP.get(`${vars.apiUrl}/oauth/authorizations/~`, headers(auth!)) return authorization.access_token && authorization.access_token.token } catch (error: any) { if (!error.http) throw error @@ -270,7 +280,7 @@ export class Login { } } - private async sso(): Promise { + private async sso(): Promise { let url = process.env.SSO_URL let org = process.env.HEROKU_ORGANIZATION if (!url) { diff --git a/src/token-storage.ts b/src/token-storage.ts new file mode 100644 index 0000000..50179b1 --- /dev/null +++ b/src/token-storage.ts @@ -0,0 +1,313 @@ +/** + * Functions for securely storing bearer tokens using OS-level utilities. + * These functions are limited to credentials and do not provide general + * encryption for arbitrary data. + * + * If you need to store and retrieve sensitive information other + * than credentials, you should consider using the utilities provided by + * `file-encryption.ts` instead. + */ + +import {execSync} from 'child_process' +import * as os from 'os' +import * as crypto from 'crypto' + +export const SERVICE_NAME = 'heroku' + +/** + * Derives a unique token name based on the service name and machine/user info + * + * @param serviceName - The name of the service for which the token is being stored + * @returns A derived token name based on the service name and machine/user info + */ +function deriveTokenName(serviceName = SERVICE_NAME): string { + // Use only deterministic components + // but ensure uniqueness across services and machines + // This is an added layer of protection to prevent token collisions + // and guarantees the token name is not easily guessable + const components = [ + serviceName, // Service name + os.hostname(), // Machine hostname + os.userInfo().username, // OS username + ] + + // Create a hash of the combined components + // to ensure the token length is known and consistent + const hash = crypto.createHash('sha256') + .update(components.join('::')) + .digest('hex') + .slice(0, 32) + + return `${serviceName}_${hash}` +} + +/** + * Stores a bearer token securely on macOS using the Keychain + * @param tokenName - Unique identifier/name for the token + * @param tokenValue - The bearer token value to store + * @throws Error if the token cannot be stored + * @returns void + */ +function storeTokenMacOS(tokenName: string, tokenValue: string): void { + try { + try { + execSync(`security delete-generic-password -a "${tokenName}" -s "bearer_token"`) + } catch { + // noop - item does not exist + } + + execSync(`security add-generic-password -a "${tokenName}" -s "bearer_token" -w "${tokenValue}"`) + } catch (error) { + const {message} = error as Error + throw new Error(`Failed to store token in macOS Keychain: ${message}`) + } +} + +/** + * Stores a bearer token securely on Windows using Windows Credential Manager + * @param tokenName - Unique identifier/name for the token + * @param tokenValue - The bearer token value to store + * @throws Error if the token cannot be stored + * @returns void + */ +function storeTokenWindows(tokenName: string, tokenValue: string): void { + try { + try { + const removeCommand = ` + [void][Windows.Security.Credentials.PasswordVault,Windows.Security.Credentials,ContentType=WindowsRuntime] + $vault = New-Object Windows.Security.Credentials.PasswordVault + $credential = $vault.Retrieve("${tokenName}", "${tokenName}") + $vault.Remove($credential) + ` + execSync(removeCommand, {shell: 'powershell'}) + } catch { + // noop - item does not exist + } + + const addCommand = ` + [void][Windows.Security.Credentials.PasswordVault,Windows.Security.Credentials,ContentType=WindowsRuntime] + $vault = New-Object Windows.Security.Credentials.PasswordVault + $credential = New-Object Windows.Security.Credentials.PasswordCredential("${tokenName}", "${tokenName}", "${tokenValue}") + $vault.Add($credential) + ` + execSync(addCommand, {shell: 'powershell'}) + } catch (error) { + const {message} = error as Error + throw new Error(`Failed to store token in Windows Credential Manager: ${message}`) + } +} + +/** + * Stores a bearer token securely on Linux using the system keyring (via secret-tool) + * @param tokenName - Unique identifier/name for the token + * @param tokenValue - The bearer token value to store + * @throws Error if the token cannot be stored or if secret-tool is not installed + * @returns void + */ +function storeTokenLinux(tokenName: string, tokenValue: string): void { + try { + try { + execSync(`secret-tool clear type bearer_token name "${tokenName}"`) + } catch { + // noop - item does not exist + } + + execSync(`echo "${tokenValue}" | secret-tool store --label="${tokenName}" type bearer_token name "${tokenName}"`) + } catch (error) { + const {message} = error as Error + throw new Error(`Failed to store token in Linux keyring: ${message}. Make sure secret-tool is installed.`) + } +} + +/** + * Retrieves a stored bearer token on macOS from the Keychain + * @param tokenName - Unique identifier/name of the token to retrieve + * @throws Error if the token cannot be retrieved + * @returns void + */ +function retrieveTokenMacOS(tokenName: string): string { + try { + const output = execSync(`security find-generic-password -a "${tokenName}" -s "bearer_token" -w`) + return output.toString().trim() + } catch (error) { + const {message} = error as Error + throw new Error(`Failed to retrieve token from macOS Keychain: ${message}`) + } +} + +/** + * Retrieves a stored bearer token on Windows from the Credential Manager + * @param tokenName - Unique identifier/name of the token to retrieve + * @throws Error if the token cannot be retrieved + * @returns void + */ +function retrieveTokenWindows(tokenName: string): string { + try { + const psCommand = ` + [void][Windows.Security.Credentials.PasswordVault,Windows.Security.Credentials,ContentType=WindowsRuntime] + $vault = New-Object Windows.Security.Credentials.PasswordVault + $credential = $vault.Retrieve("${tokenName}", "${tokenName}") + $credential.Password + ` + + const output = execSync(psCommand, {shell: 'powershell'}) + const token = output.toString().trim() + + if (!token) { + throw new Error('Token not found') + } + + return token + } catch (error) { + const {message} = error as Error + throw new Error(`Failed to retrieve token from Windows Credential Manager: ${message}`) + } +} + +/** + * Retrieves a stored bearer token on Linux from the system keyring + * + * @param tokenName - Unique identifier/name of the token to retrieve + * @throws Error if the token cannot be retrieved + * @returns void + */ +function retrieveTokenLinux(tokenName: string): string { + try { + const output = execSync(`secret-tool lookup type bearer_token name "${tokenName}"`) + return output.toString().trim() + } catch (error) { + const {message} = error as Error + throw new Error(`Failed to retrieve token from Linux keyring: ${message}`) + } +} + +/** + * Removes a stored bearer token from macOS Keychain + * + * @param tokenName - Unique identifier/name of the token to remove + * @throws Error if the token cannot be removed or doesn't exist + * @returns void + */ +function removeTokenMacOS(tokenName: string): void { + try { + execSync(`security delete-generic-password -a "${tokenName}" -s "bearer_token"`) + } catch (error) { + const {message} = error as Error + throw new Error(`Failed to remove token from macOS Keychain: ${message}`) + } +} + +/** + * Removes a stored bearer token from Windows Credential Manager + * + * @param tokenName - Unique identifier/name of the token to remove + * @throws Error if the token cannot be removed or doesn't exist + * @returns void + */ +function removeTokenWindows(tokenName: string): void { + try { + const psCommand = ` + [void][Windows.Security.Credentials.PasswordVault,Windows.Security.Credentials,ContentType=WindowsRuntime] + $vault = New-Object Windows.Security.Credentials.PasswordVault + $credential = $vault.Retrieve("${tokenName}", "${tokenName}") + $vault.Remove($credential) + ` + execSync(psCommand, {shell: 'powershell'}) + } catch (error) { + const {message} = error as Error + throw new Error(`Failed to remove token from Windows Credential Manager: ${message}`) + } +} + +/** + * Removes a stored bearer token from Linux system keyring + * + * @param tokenName - Unique identifier/name of the token to remove + * @throws Error if the token cannot be removed or doesn't exist + * @returns void + */ +function removeTokenLinux(tokenName: string): void { + try { + execSync(`secret-tool clear type bearer_token name "${tokenName}"`) + } catch (error) { + const {message} = error as Error + throw new Error(`Failed to remove token from Linux keyring: ${message}`) + } +} + +/** + * Removes a stored bearer token using OS-level utilities + * + * @param serviceName - The name of the service for which the token is being removed. Defaults to 'heroku' + * @throws Error if the token cannot be removed or if the platform is not supported + * @returns Promise that resolves when the token is removed + * + * @example + * ```typescript + * // Remove token for default service (heroku) + * removeToken(); + * + * // Remove token for a specific service + * removeToken('my-service'); + * ``` + */ +export function removeToken(serviceName?: string): void { + const tokenName = deriveTokenName(serviceName) + switch (process.platform) { + case 'win32': + removeTokenWindows(tokenName) + break + case 'darwin': + removeTokenMacOS(tokenName) + break + case 'linux': + removeTokenLinux(tokenName) + break + default: + throw new Error(`Unsupported platform: ${process.platform}`) + } +} + +/** + * Stores a bearer token securely using OS-level utilities + * + * @param token the token to store + * @param serviceName the name of the service for which the token is being stored. defaults to 'heroku' + * @returns a promise that resolves when the token is stored + */ +export function storeToken(token: string, serviceName?: string): void { + const tokenName = deriveTokenName(serviceName) + switch (process.platform) { + case 'win32': + storeTokenWindows(tokenName, token) + break + case 'darwin': + storeTokenMacOS(tokenName, token) + break + case 'linux': + storeTokenLinux(tokenName, token) + break + default: + throw new Error(`Unsupported platform: ${process.platform}`) + } +} + +/** + * Retrieves a stored bearer token securely using OS-level utilities + * + * @param serviceName the name of the service for which the token is being stored. defaults to 'heroku' + * @returns a promise that resolves with the stored token + */ +export function retrieveToken(serviceName?: string): string { + const tokenName = deriveTokenName(serviceName) + switch (process.platform) { + case 'win32': + return retrieveTokenWindows(tokenName) + case 'darwin': + return retrieveTokenMacOS(tokenName) + case 'linux': + return retrieveTokenLinux(tokenName) + default: + throw new Error(`Unsupported platform: ${process.platform}`) + } +} diff --git a/test/api-client.test.ts b/test/api-client.test.ts index 7090bd2..f8dc418 100644 --- a/test/api-client.test.ts +++ b/test/api-client.test.ts @@ -11,13 +11,6 @@ class Command extends CommandBase { async run() {} } -const netrc = require('netrc-parser').default -netrc.loadSync = function (this: typeof netrc) { - netrc.machines = { - 'api.heroku.com': {password: 'mypass'}, - } -} - const env = process.env const debug = require('debug') let api: nock.Scope @@ -25,7 +18,7 @@ const test = base.add('config', new Config({root: resolve(__dirname, '../package describe('api_client', () => { beforeEach(function () { - process.env = {} + process.env = {HEROKU_API_KEY: 'mypass'} debug.disable('*') api = nock('https://api.heroku.com') }) @@ -37,6 +30,7 @@ describe('api_client', () => { test .it('makes an HTTP request', async ctx => { + process.env = {HEROKU_API_KEY: 'mypass'} api = nock('https://api.heroku.com', { reqheaders: {authorization: 'Bearer mypass'}, }) @@ -113,6 +107,7 @@ describe('api_client', () => { describe('request for Account Info endpoint', () => { test .it('sends requests to Platform API and Particleboard', async ctx => { + process.env = {HEROKU_API_KEY: 'mypass'} api = nock('https://api.heroku.com', { reqheaders: {authorization: 'Bearer mypass'}, }) @@ -130,6 +125,7 @@ describe('api_client', () => { test .it('doesn‘t fail or show delinquency warnings if Particleboard request fails', async ctx => { + process.env = {HEROKU_API_KEY: 'mypass'} api = nock('https://api.heroku.com', { reqheaders: {authorization: 'Bearer mypass'}, }) @@ -151,6 +147,7 @@ describe('api_client', () => { test .it('doesn‘t show delinquency warnings if account isn‘t delinquent', async ctx => { + process.env = {HEROKU_API_KEY: 'mypass'} api = nock('https://api.heroku.com', { reqheaders: {authorization: 'Bearer mypass'}, }) @@ -174,6 +171,7 @@ describe('api_client', () => { test .it('shows a delinquency warning with suspension date if account is delinquent and suspension is in the future', async ctx => { + process.env = {HEROKU_API_KEY: 'mypass'} api = nock('https://api.heroku.com', { reqheaders: {authorization: 'Bearer mypass'}, }) @@ -201,6 +199,7 @@ describe('api_client', () => { test .it('shows a delinquency warning with deletion date if account is delinquent and suspension is in the past', async ctx => { + process.env = {HEROKU_API_KEY: 'mypass'} api = nock('https://api.heroku.com', { reqheaders: {authorization: 'Bearer mypass'}, }) @@ -228,6 +227,7 @@ describe('api_client', () => { test .it('it doesn‘t send a Particleboard request or show duplicated delinquency warnings with multiple matching requests when delinquent', async ctx => { + process.env = {HEROKU_API_KEY: 'mypass'} api = nock('https://api.heroku.com', { reqheaders: {authorization: 'Bearer mypass'}, }) @@ -264,6 +264,7 @@ describe('api_client', () => { describe('team namespaced requests', () => { test .it('sends requests to Platform API and Particleboard', async ctx => { + process.env = {HEROKU_API_KEY: 'mypass'} api = nock('https://api.heroku.com', { reqheaders: {authorization: 'Bearer mypass'}, }) @@ -282,6 +283,7 @@ describe('api_client', () => { test .it('doesn‘t fail or show delinquency warnings if Particleboard request fails', async ctx => { + process.env = {HEROKU_API_KEY: 'mypass'} api = nock('https://api.heroku.com', { reqheaders: {authorization: 'Bearer mypass'}, }) @@ -303,6 +305,7 @@ describe('api_client', () => { test .it('doesn‘t show delinquency warnings if team isn‘t delinquent', async ctx => { + process.env = {HEROKU_API_KEY: 'mypass'} api = nock('https://api.heroku.com', { reqheaders: {authorization: 'Bearer mypass'}, }) @@ -326,6 +329,7 @@ describe('api_client', () => { test .it('shows a delinquency warning with suspension date if team is delinquent and suspension is in the future', async ctx => { + process.env = {HEROKU_API_KEY: 'mypass'} api = nock('https://api.heroku.com', { reqheaders: {authorization: 'Bearer mypass'}, }) @@ -353,6 +357,7 @@ describe('api_client', () => { test .it('shows a delinquency warning with deletion date if team is delinquent and suspension is in the past', async ctx => { + process.env = {HEROKU_API_KEY: 'mypass'} api = nock('https://api.heroku.com', { reqheaders: {authorization: 'Bearer mypass'}, }) @@ -380,6 +385,7 @@ describe('api_client', () => { test .it('it doesn‘t send a Particleboard request or show duplicated delinquency warnings with multiple matching requests when delinquent', async ctx => { + process.env = {HEROKU_API_KEY: 'mypass'} api = nock('https://api.heroku.com', { reqheaders: {authorization: 'Bearer mypass'}, }) @@ -461,6 +467,7 @@ describe('api_client', () => { .it('enables only HTTP debug info', async ctx => { process.env = { HEROKU_DEBUG: '1', + HEROKU_API_KEY: 'mypass', } api = nock('https://api.heroku.com', { reqheaders: {authorization: 'Bearer mypass'}, @@ -485,6 +492,7 @@ describe('api_client', () => { process.env = { HEROKU_DEBUG: '1', HEROKU_DEBUG_HEADERS: '1', + HEROKU_API_KEY: 'mypass', } api = nock('https://api.heroku.com', { reqheaders: {authorization: 'Bearer mypass'}, @@ -510,6 +518,7 @@ describe('api_client', () => { .it('doesn‘t enable any HTTP debug info', async ctx => { process.env = { HEROKU_DEBUG_HEADERS: '1', + HEROKU_API_KEY: 'mypass', } api = nock('https://api.heroku.com', { reqheaders: {authorization: 'Bearer mypass'}, @@ -531,6 +540,7 @@ describe('api_client', () => { context('without HEROKU_DEBUG_HEADERS = "1"', function () { test .it('doesn‘t enable any HTTP debug info', async ctx => { + process.env = {HEROKU_API_KEY: 'mypass'} api = nock('https://api.heroku.com', { reqheaders: {authorization: 'Bearer mypass'}, }) diff --git a/test/vars.test.ts b/test/vars.test.ts index d74ac74..deaa864 100644 --- a/test/vars.test.ts +++ b/test/vars.test.ts @@ -10,12 +10,6 @@ afterEach(() => { process.env = env }) -// jest.mock('netrc-parser', () => { -// return class { -// machines = {'api.heroku.com': {password: 'mypass'}} -// } -// }) - describe('vars', () => { it('sets vars by default', () => { expect(vars.host).to.equal('heroku.com') diff --git a/yarn.lock b/yarn.lock index 99c2750..fe31ab8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17,17 +17,9 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.2": - version "7.24.2" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz" - integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== - dependencies: - "@babel/highlight" "^7.24.2" - picocolors "^1.0.0" - -"@babel/code-frame@^7.22.13": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.24.2", "@babel/code-frame@^7.26.2": version "7.26.2" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz" integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== dependencies: "@babel/helper-validator-identifier" "^7.25.9" @@ -142,19 +134,14 @@ dependencies: "@babel/types" "^7.24.5" -"@babel/helper-string-parser@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz" - integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== - -"@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.24.5": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz" - integrity sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA== +"@babel/helper-string-parser@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz" + integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== -"@babel/helper-validator-identifier@^7.25.9": +"@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.24.5", "@babel/helper-validator-identifier@^7.25.9": version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz" integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== "@babel/helper-validator-option@^7.23.5": @@ -163,15 +150,14 @@ integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== "@babel/helpers@^7.24.5": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz" - integrity sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q== + version "7.26.10" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz" + integrity sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g== dependencies: - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.5" - "@babel/types" "^7.24.5" + "@babel/template" "^7.26.9" + "@babel/types" "^7.26.10" -"@babel/highlight@^7.10.4", "@babel/highlight@^7.24.2": +"@babel/highlight@^7.10.4": version "7.24.5" resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz" integrity sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw== @@ -181,19 +167,21 @@ js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@^7.24.0", "@babel/parser@^7.24.5": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz" - integrity sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg== +"@babel/parser@^7.24.5", "@babel/parser@^7.26.9": + version "7.26.10" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz" + integrity sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA== + dependencies: + "@babel/types" "^7.26.10" -"@babel/template@^7.22.15", "@babel/template@^7.24.0": - version "7.24.0" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz" - integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== +"@babel/template@^7.22.15", "@babel/template@^7.24.0", "@babel/template@^7.26.9": + version "7.26.9" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz" + integrity sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA== dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/parser" "^7.24.0" - "@babel/types" "^7.24.0" + "@babel/code-frame" "^7.26.2" + "@babel/parser" "^7.26.9" + "@babel/types" "^7.26.9" "@babel/traverse@^7.24.5": version "7.24.5" @@ -211,14 +199,13 @@ debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.24.0", "@babel/types@^7.24.5": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz" - integrity sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ== +"@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.24.0", "@babel/types@^7.24.5", "@babel/types@^7.26.10", "@babel/types@^7.26.9": + version "7.26.10" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz" + integrity sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ== dependencies: - "@babel/helper-string-parser" "^7.24.1" - "@babel/helper-validator-identifier" "^7.24.5" - to-fast-properties "^2.0.0" + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" "@cspotcode/source-map-support@^0.8.0": version "0.8.1" @@ -271,7 +258,7 @@ "@heroku/http-call@^5.4.0": version "5.4.0" - resolved "https://registry.yarnpkg.com/@heroku/http-call/-/http-call-5.4.0.tgz#1f3d804d17888c61d375d2dcb399f405781132e8" + resolved "https://registry.npmjs.org/@heroku/http-call/-/http-call-5.4.0.tgz" integrity sha512-8ys8jFP9l1wFXNmhmUb/EKLY/3flGzd7lv3x5MCw+36ov+qR9OFgk7bNHn3s+FPUKRSf/2GmKJjJmgnaD1YMmA== dependencies: content-type "^1.0.5" @@ -294,32 +281,32 @@ resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== -"@inquirer/checkbox@^4.1.2": - version "4.1.2" - resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.1.2.tgz#a12079f6aff68253392a1955d1a202eb9ac2e207" - integrity sha512-PL9ixC5YsPXzXhAZFUPmkXGxfgjkdfZdPEPPmt4kFwQ4LBMDG9n/nHXYRGGZSKZJs+d1sGKWgS2GiPzVRKUdtQ== +"@inquirer/checkbox@^4.1.4": + version "4.1.4" + resolved "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.4.tgz" + integrity sha512-d30576EZdApjAMceijXA5jDzRQHT/MygbC+J8I7EqA6f/FRpYxlRtRJbHF8gHeWYeSdOuTEJqonn7QLB1ELezA== dependencies: - "@inquirer/core" "^10.1.7" - "@inquirer/figures" "^1.0.10" - "@inquirer/type" "^3.0.4" + "@inquirer/core" "^10.1.9" + "@inquirer/figures" "^1.0.11" + "@inquirer/type" "^3.0.5" ansi-escapes "^4.3.2" yoctocolors-cjs "^2.1.2" -"@inquirer/confirm@^5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.6.tgz#e5a959676716860c26560b33997b38bd65bf96ad" - integrity sha512-6ZXYK3M1XmaVBZX6FCfChgtponnL0R6I7k8Nu+kaoNkT828FVZTcca1MqmWQipaW2oNREQl5AaPCUOOCVNdRMw== +"@inquirer/confirm@^5.1.8": + version "5.1.8" + resolved "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.8.tgz" + integrity sha512-dNLWCYZvXDjO3rnQfk2iuJNL4Ivwz/T2+C3+WnNfJKsNGSuOs3wAo2F6e0p946gtSAk31nZMfW+MRmYaplPKsg== dependencies: - "@inquirer/core" "^10.1.7" - "@inquirer/type" "^3.0.4" + "@inquirer/core" "^10.1.9" + "@inquirer/type" "^3.0.5" -"@inquirer/core@^10.1.7": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.1.7.tgz#04260b59e0343e86f76da0a4e1fbe4975aca03ca" - integrity sha512-AA9CQhlrt6ZgiSy6qoAigiA1izOa751ugX6ioSjqgJ+/Gd+tEN/TORk5sUYNjXuHWfW0r1n/a6ak4u/NqHHrtA== +"@inquirer/core@^10.1.9": + version "10.1.9" + resolved "https://registry.npmjs.org/@inquirer/core/-/core-10.1.9.tgz" + integrity sha512-sXhVB8n20NYkUBfDYgizGHlpRVaCRjtuzNZA6xpALIUbkgfd2Hjz+DfEN6+h1BRnuxw0/P4jCIMjMsEOAMwAJw== dependencies: - "@inquirer/figures" "^1.0.10" - "@inquirer/type" "^3.0.4" + "@inquirer/figures" "^1.0.11" + "@inquirer/type" "^3.0.5" ansi-escapes "^4.3.2" cli-width "^4.1.0" mute-stream "^2.0.0" @@ -327,104 +314,104 @@ wrap-ansi "^6.2.0" yoctocolors-cjs "^2.1.2" -"@inquirer/editor@^4.2.7": - version "4.2.7" - resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.2.7.tgz#61cb58486b125a9cbfc88a9424bf1681bb7dbd2d" - integrity sha512-gktCSQtnSZHaBytkJKMKEuswSk2cDBuXX5rxGFv306mwHfBPjg5UAldw9zWGoEyvA9KpRDkeM4jfrx0rXn0GyA== +"@inquirer/editor@^4.2.9": + version "4.2.9" + resolved "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.9.tgz" + integrity sha512-8HjOppAxO7O4wV1ETUlJFg6NDjp/W2NP5FB9ZPAcinAlNT4ZIWOLe2pUVwmmPRSV0NMdI5r/+lflN55AwZOKSw== dependencies: - "@inquirer/core" "^10.1.7" - "@inquirer/type" "^3.0.4" + "@inquirer/core" "^10.1.9" + "@inquirer/type" "^3.0.5" external-editor "^3.1.0" -"@inquirer/expand@^4.0.9": - version "4.0.9" - resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.9.tgz#935947192dad0d07a537664ba6a527b9ced44be2" - integrity sha512-Xxt6nhomWTAmuSX61kVgglLjMEFGa+7+F6UUtdEUeg7fg4r9vaFttUUKrtkViYYrQBA5Ia1tkOJj2koP9BuLig== +"@inquirer/expand@^4.0.11": + version "4.0.11" + resolved "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.11.tgz" + integrity sha512-OZSUW4hFMW2TYvX/Sv+NnOZgO8CHT2TU1roUCUIF2T+wfw60XFRRp9MRUPCT06cRnKL+aemt2YmTWwt7rOrNEA== dependencies: - "@inquirer/core" "^10.1.7" - "@inquirer/type" "^3.0.4" + "@inquirer/core" "^10.1.9" + "@inquirer/type" "^3.0.5" 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/figures@^1.0.11": + version "1.0.11" + resolved "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.11.tgz" + integrity sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw== -"@inquirer/input@^4.1.6": - version "4.1.6" - resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.1.6.tgz#329700fd5a2d2f37be63768b09afd0a44edf3c67" - integrity sha512-1f5AIsZuVjPT4ecA8AwaxDFNHny/tSershP/cTvTDxLdiIGTeILNcKozB0LaYt6mojJLUbOYhpIxicaYf7UKIQ== +"@inquirer/input@^4.1.8": + version "4.1.8" + resolved "https://registry.npmjs.org/@inquirer/input/-/input-4.1.8.tgz" + integrity sha512-WXJI16oOZ3/LiENCAxe8joniNp8MQxF6Wi5V+EBbVA0ZIOpFcL4I9e7f7cXse0HJeIPCWO8Lcgnk98juItCi7Q== dependencies: - "@inquirer/core" "^10.1.7" - "@inquirer/type" "^3.0.4" + "@inquirer/core" "^10.1.9" + "@inquirer/type" "^3.0.5" -"@inquirer/number@^3.0.9": - version "3.0.9" - resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.9.tgz#23dae9e31de368e18c4ec2543a9f006e4bb4a98d" - integrity sha512-iN2xZvH3tyIYXLXBvlVh0npk1q/aVuKXZo5hj+K3W3D4ngAEq/DkLpofRzx6oebTUhBvOgryZ+rMV0yImKnG3w== +"@inquirer/number@^3.0.11": + version "3.0.11" + resolved "https://registry.npmjs.org/@inquirer/number/-/number-3.0.11.tgz" + integrity sha512-pQK68CsKOgwvU2eA53AG/4npRTH2pvs/pZ2bFvzpBhrznh8Mcwt19c+nMO7LHRr3Vreu1KPhNBF3vQAKrjIulw== dependencies: - "@inquirer/core" "^10.1.7" - "@inquirer/type" "^3.0.4" + "@inquirer/core" "^10.1.9" + "@inquirer/type" "^3.0.5" -"@inquirer/password@^4.0.9": - version "4.0.9" - resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.9.tgz#1a7d14a14bd2e54294d7fa5cc9fa6da99315149c" - integrity sha512-xBEoOw1XKb0rIN208YU7wM7oJEHhIYkfG7LpTJAEW913GZeaoQerzf5U/LSHI45EVvjAdgNXmXgH51cUXKZcJQ== +"@inquirer/password@^4.0.11": + version "4.0.11" + resolved "https://registry.npmjs.org/@inquirer/password/-/password-4.0.11.tgz" + integrity sha512-dH6zLdv+HEv1nBs96Case6eppkRggMe8LoOTl30+Gq5Wf27AO/vHFgStTVz4aoevLdNXqwE23++IXGw4eiOXTg== dependencies: - "@inquirer/core" "^10.1.7" - "@inquirer/type" "^3.0.4" + "@inquirer/core" "^10.1.9" + "@inquirer/type" "^3.0.5" ansi-escapes "^4.3.2" -"@inquirer/prompts@^7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-7.3.2.tgz#ad0879eb3bc783c19b78c420e5eeb18a09fc9b47" - integrity sha512-G1ytyOoHh5BphmEBxSwALin3n1KGNYB6yImbICcRQdzXfOGbuJ9Jske/Of5Sebk339NSGGNfUshnzK8YWkTPsQ== - dependencies: - "@inquirer/checkbox" "^4.1.2" - "@inquirer/confirm" "^5.1.6" - "@inquirer/editor" "^4.2.7" - "@inquirer/expand" "^4.0.9" - "@inquirer/input" "^4.1.6" - "@inquirer/number" "^3.0.9" - "@inquirer/password" "^4.0.9" - "@inquirer/rawlist" "^4.0.9" - "@inquirer/search" "^3.0.9" - "@inquirer/select" "^4.0.9" - -"@inquirer/rawlist@^4.0.9": - version "4.0.9" - resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.0.9.tgz#c5f8253c87ad48713e0e8b34274fdd1aa8b08d2c" - integrity sha512-+5t6ebehKqgoxV8fXwE49HkSF2Rc9ijNiVGEQZwvbMI61/Q5RcD+jWD6Gs1tKdz5lkI8GRBL31iO0HjGK1bv+A== - dependencies: - "@inquirer/core" "^10.1.7" - "@inquirer/type" "^3.0.4" +"@inquirer/prompts@^7.4.0": + version "7.4.0" + resolved "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.4.0.tgz" + integrity sha512-EZiJidQOT4O5PYtqnu1JbF0clv36oW2CviR66c7ma4LsupmmQlUwmdReGKRp456OWPWMz3PdrPiYg3aCk3op2w== + dependencies: + "@inquirer/checkbox" "^4.1.4" + "@inquirer/confirm" "^5.1.8" + "@inquirer/editor" "^4.2.9" + "@inquirer/expand" "^4.0.11" + "@inquirer/input" "^4.1.8" + "@inquirer/number" "^3.0.11" + "@inquirer/password" "^4.0.11" + "@inquirer/rawlist" "^4.0.11" + "@inquirer/search" "^3.0.11" + "@inquirer/select" "^4.1.0" + +"@inquirer/rawlist@^4.0.11": + version "4.0.11" + resolved "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.0.11.tgz" + integrity sha512-uAYtTx0IF/PqUAvsRrF3xvnxJV516wmR6YVONOmCWJbbt87HcDHLfL9wmBQFbNJRv5kCjdYKrZcavDkH3sVJPg== + dependencies: + "@inquirer/core" "^10.1.9" + "@inquirer/type" "^3.0.5" yoctocolors-cjs "^2.1.2" -"@inquirer/search@^3.0.9": - version "3.0.9" - resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.0.9.tgz#00848c93ce86dcd24989a72dabfd8aeb34d2829b" - integrity sha512-DWmKztkYo9CvldGBaRMr0ETUHgR86zE6sPDVOHsqz4ISe9o1LuiWfgJk+2r75acFclA93J/lqzhT0dTjCzHuoA== +"@inquirer/search@^3.0.11": + version "3.0.11" + resolved "https://registry.npmjs.org/@inquirer/search/-/search-3.0.11.tgz" + integrity sha512-9CWQT0ikYcg6Ls3TOa7jljsD7PgjcsYEM0bYE+Gkz+uoW9u8eaJCRHJKkucpRE5+xKtaaDbrND+nPDoxzjYyew== dependencies: - "@inquirer/core" "^10.1.7" - "@inquirer/figures" "^1.0.10" - "@inquirer/type" "^3.0.4" + "@inquirer/core" "^10.1.9" + "@inquirer/figures" "^1.0.11" + "@inquirer/type" "^3.0.5" yoctocolors-cjs "^2.1.2" -"@inquirer/select@^4.0.9": - version "4.0.9" - resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.0.9.tgz#28a4c7b9a406798a9ea365d67dbad5e427c3febe" - integrity sha512-BpJyJe7Dkhv2kz7yG7bPSbJLQuu/rqyNlF1CfiiFeFwouegfH+zh13KDyt6+d9DwucKo7hqM3wKLLyJxZMO+Xg== +"@inquirer/select@^4.1.0": + version "4.1.0" + resolved "https://registry.npmjs.org/@inquirer/select/-/select-4.1.0.tgz" + integrity sha512-z0a2fmgTSRN+YBuiK1ROfJ2Nvrpij5lVN3gPDkQGhavdvIVGHGW29LwYZfM/j42Ai2hUghTI/uoBuTbrJk42bA== dependencies: - "@inquirer/core" "^10.1.7" - "@inquirer/figures" "^1.0.10" - "@inquirer/type" "^3.0.4" + "@inquirer/core" "^10.1.9" + "@inquirer/figures" "^1.0.11" + "@inquirer/type" "^3.0.5" 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== +"@inquirer/type@^3.0.5": + version "3.0.5" + resolved "https://registry.npmjs.org/@inquirer/type/-/type-3.0.5.tgz" + integrity sha512-ZJpeIYYueOz/i/ONzrfof8g89kNdO2hjGuvULROo3O8rlB2CRtSseE5KeirnyE4t/thAn/EwvS/vuQeJCn+NZg== "@jridgewell/gen-mapping@^0.3.5": version "0.3.5" @@ -473,7 +460,7 @@ "@mswjs/interceptors@^0.37.3": version "0.37.6" - resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.37.6.tgz#2635319b7a81934e1ef1b5593ef7910347e2b761" + resolved "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.37.6.tgz" integrity sha512-wK+5pLK5XFmgtH3aQ2YVvA3HohS3xqV/OxuVOdNx9Wpnz7VE/fnC+e1A7ln6LFYeck7gOJ/dsZV6OLplOtAJ2w== dependencies: "@open-draft/deferred-promise" "^2.2.0" @@ -596,12 +583,12 @@ "@open-draft/deferred-promise@^2.2.0": version "2.2.0" - resolved "https://registry.yarnpkg.com/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz#4a822d10f6f0e316be4d67b4d4f8c9a124b073bd" + resolved "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz" integrity sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA== "@open-draft/logger@^0.3.0": version "0.3.0" - resolved "https://registry.yarnpkg.com/@open-draft/logger/-/logger-0.3.0.tgz#2b3ab1242b360aa0adb28b85f5d7da1c133a0954" + resolved "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz" integrity sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ== dependencies: is-node-process "^1.2.0" @@ -609,24 +596,24 @@ "@open-draft/until@^2.0.0": version "2.1.0" - resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-2.1.0.tgz#0acf32f470af2ceaf47f095cdecd40d68666efda" + resolved "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz" integrity sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg== "@pnpm/config.env-replace@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz#ab29da53df41e8948a00f2433f085f54de8b3a4c" + resolved "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz" integrity sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w== "@pnpm/network.ca-file@^1.0.1": version "1.0.2" - resolved "https://registry.yarnpkg.com/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz#2ab05e09c1af0cdf2fcf5035bea1484e222f7983" + resolved "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz" integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== dependencies: graceful-fs "4.2.10" "@pnpm/npm-conf@^2.1.0": version "2.3.1" - resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz#bb375a571a0bd63ab0a23bece33033c683e9b6b0" + resolved "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz" integrity sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw== dependencies: "@pnpm/config.env-replace" "^1.1.0" @@ -642,7 +629,7 @@ "@sindresorhus/merge-streams@^2.1.0": version "2.3.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz#719df7fb41766bc143369eaa0dd56d8dc87c9958" + resolved "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz" integrity sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg== "@sinonjs/commons@^3.0.0", "@sinonjs/commons@^3.0.1": @@ -654,7 +641,7 @@ "@sinonjs/fake-timers@^10.3.0": version "10.3.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz" integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== dependencies: "@sinonjs/commons" "^3.0.0" @@ -668,7 +655,7 @@ "@sinonjs/samsam@^8.0.0": version "8.0.2" - resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-8.0.2.tgz#e4386bf668ff36c95949e55a38dc5f5892fc2689" + resolved "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.2.tgz" integrity sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw== dependencies: "@sinonjs/commons" "^3.0.1" @@ -729,6 +716,13 @@ resolved "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz" integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== +"@types/debug@^4.1.12": + version "4.1.12" + resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" + "@types/fs-extra@^9.0.13": version "9.0.13" resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz" @@ -753,17 +747,17 @@ "@types/mocha@^10.0.6": version "10.0.7" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.7.tgz#4c620090f28ca7f905a94b706f74dc5b57b44f2f" + resolved "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.7.tgz" integrity sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw== -"@types/node@*": - version "18.11.9" - resolved "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz" - integrity sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg== +"@types/ms@*": + version "2.1.0" + resolved "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz" + integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== -"@types/node@20.14.8": +"@types/node@*", "@types/node@20.14.8": version "20.14.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.8.tgz#45c26a2a5de26c3534a9504530ddb3b27ce031ac" + resolved "https://registry.npmjs.org/@types/node/-/node-20.14.8.tgz" integrity sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA== dependencies: undici-types "~5.26.4" @@ -783,15 +777,10 @@ resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz" integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== -"@types/sinon@*": - version "7.5.1" - resolved "https://registry.npmjs.org/@types/sinon/-/sinon-7.5.1.tgz" - integrity sha512-EZQUP3hSZQyTQRfiLqelC9NMWd1kqLcmQE0dMiklxBkgi84T+cHOhnKpgk4NnOWpGX863yE6+IaGnOXUNFqDnQ== - -"@types/sinon@^17.0.3": - version "17.0.3" - resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-17.0.3.tgz#9aa7e62f0a323b9ead177ed23a36ea757141a5fa" - integrity sha512-j3uovdn8ewky9kRBG19bOwaZbexJu/XjtkHyjvUgt4xfPFz18dcORIMqnYh66Fx3Powhcr85NT5+er3+oViapw== +"@types/sinon@*", "@types/sinon@^17.0.3": + version "17.0.4" + resolved "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.4.tgz" + integrity sha512-RHnIrhfPO3+tJT0s7cFaXGZvsL4bbR3/k7z3P312qMS4JaS2Tk+KiwiLx1S0rQ56ERj00u1/BtdyVd0FY+Pdew== dependencies: "@types/sinonjs__fake-timers" "*" @@ -1018,7 +1007,7 @@ ajv@^8.0.1: ansi-align@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz" integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== dependencies: string-width "^4.1.0" @@ -1042,7 +1031,7 @@ ansi-escapes@^4.2.1, ansi-escapes@^4.3.0, ansi-escapes@^4.3.2: ansi-escapes@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz" integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== dependencies: type-fest "^1.0.2" @@ -1069,7 +1058,7 @@ ansi-regex@^5.0.1: ansi-regex@^6.0.1: version "6.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz" integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== ansi-styles@^2.2.1: @@ -1093,7 +1082,7 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.2.0, ansi-styles@^4.3.0: ansi-styles@^6.2.1: version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== ansicolors@~0.3.2: @@ -1224,7 +1213,7 @@ at-least-node@^1.0.0: atomically@^2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/atomically/-/atomically-2.0.3.tgz#27e47bbe39994d324918491ba7c0edb7783e56cb" + resolved "https://registry.npmjs.org/atomically/-/atomically-2.0.3.tgz" integrity sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw== dependencies: stubborn-fs "^1.2.5" @@ -1249,7 +1238,7 @@ binary-extensions@^2.0.0: boxen@^8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-8.0.1.tgz#7e9fcbb45e11a2d7e6daa8fdcebfc3242fc19fe3" + resolved "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz" integrity sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw== dependencies: ansi-align "^3.0.1" @@ -1278,14 +1267,14 @@ brace-expansion@^2.0.1: braces@^3.0.3, braces@~3.0.2: version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: fill-range "^7.1.1" browser-stdout@^1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== browserslist@^4.22.2: @@ -1310,7 +1299,7 @@ builtin-modules@^3.3.0: bundle-name@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" + resolved "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz" integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== dependencies: run-applescript "^7.0.0" @@ -1343,7 +1332,7 @@ camelcase@^6.0.0: camelcase@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-8.0.0.tgz#c0d36d418753fb6ad9c5e0437579745c1c14a534" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz" integrity sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA== caniuse-lite@^1.0.30001587: @@ -1374,7 +1363,7 @@ chai@^4.4.1: chalk-template@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/chalk-template/-/chalk-template-1.1.0.tgz#ffc55db6dd745e9394b85327c8ac8466edb7a7b1" + resolved "https://registry.npmjs.org/chalk-template/-/chalk-template-1.1.0.tgz" integrity sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg== dependencies: chalk "^5.2.0" @@ -1409,7 +1398,7 @@ chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: chalk@^5.2.0, chalk@^5.3.0, chalk@^5.4.1: version "5.4.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.4.1.tgz#1b48bf0963ec158dce2aacf69c093ae2dd2092d8" + resolved "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz" integrity sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w== chardet@^0.7.0: @@ -1426,7 +1415,7 @@ check-error@^1.0.3: chokidar@^3.5.3: version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" @@ -1460,7 +1449,7 @@ clean-stack@^3.0.0, clean-stack@^3.0.1: cli-boxes@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-3.0.0.tgz#71a10c716feeba005e4504f36329ef0b17cf3145" + resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz" integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== cli-cursor@^2.0.0, cli-cursor@^2.1.0: @@ -1542,7 +1531,7 @@ cli-width@^3.0.0: cli-width@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz" integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== cliui@^7.0.2: @@ -1595,7 +1584,7 @@ concat-map@0.0.1: config-chain@^1.1.11: version "1.1.13" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== dependencies: ini "^1.3.4" @@ -1603,7 +1592,7 @@ config-chain@^1.1.11: configstore@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-7.0.0.tgz#4461561fc51cb40e5ee1161230bc0337e069cc6b" + resolved "https://registry.npmjs.org/configstore/-/configstore-7.0.0.tgz" integrity sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ== dependencies: atomically "^2.0.3" @@ -1618,7 +1607,7 @@ confusing-browser-globals@1.0.10: content-type@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== convert-source-map@^2.0.0: @@ -1628,7 +1617,7 @@ convert-source-map@^2.0.0: cosmiconfig@^8.3.6: version "8.3.6" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz" integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== dependencies: import-fresh "^3.3.0" @@ -1641,9 +1630,9 @@ create-require@^1.1.0: resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cross-spawn@^6.0.0, cross-spawn@^6.0.5: +cross-spawn@^6.0.5: version "6.0.6" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.6.tgz#30d0efa0712ddb7eb5a76e1e8721bffafa6b5d57" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz" integrity sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw== dependencies: nice-try "^1.0.4" @@ -1654,7 +1643,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.6" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" @@ -1702,14 +1691,14 @@ debug@^3.1.0, debug@^3.2.7: debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@^4.3.5: version "4.3.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz" integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== dependencies: ms "2.1.2" debug@^4.4.0: version "4.4.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz" integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== dependencies: ms "^2.1.3" @@ -1743,12 +1732,12 @@ deep-is@^0.1.3: default-browser-id@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.0.tgz#a1d98bf960c15082d8a3fa69e83150ccccc3af26" + resolved "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz" integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA== default-browser@^5.2.1: version "5.2.1" - resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.2.1.tgz#7b7ba61204ff3e425b556869ae6d3e9d9f1712cf" + resolved "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz" integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg== dependencies: bundle-name "^4.1.0" @@ -1770,7 +1759,7 @@ define-lazy-prop@^2.0.0: define-lazy-prop@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz" integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== define-properties@^1.2.0, define-properties@^1.2.1: @@ -1784,7 +1773,7 @@ define-properties@^1.2.0, define-properties@^1.2.1: del@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-8.0.0.tgz#f333a5673cfeb72e46084031714a7c30515e80aa" + resolved "https://registry.npmjs.org/del/-/del-8.0.0.tgz" integrity sha512-R6ep6JJ+eOBZsBr9esiNN1gxFbZE4Q2cULkUSFumGYecAiS6qodDvcPx/sFuWHMNul7DWmrtoEOpYSm7o6tbSA== dependencies: globby "^14.0.2" @@ -1827,7 +1816,7 @@ doctrine@^3.0.0: dot-prop@^9.0.0: version "9.0.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-9.0.0.tgz#bae5982fe6dc6b8fddb92efef4f2ddff26779e92" + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz" integrity sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ== dependencies: type-fest "^4.18.2" @@ -1851,7 +1840,7 @@ elegant-spinner@^1.0.1: emoji-regex@^10.3.0: version "10.4.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.4.0.tgz#03553afea80b3975749cfcb36f776ca268e413d4" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz" integrity sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw== emoji-regex@^8.0.0: @@ -1985,7 +1974,7 @@ escalade@^3.1.1, escalade@^3.1.2: escape-goat@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-4.0.0.tgz#9424820331b510b0666b98f7873fe11ac4aa8081" + resolved "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz" integrity sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg== escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: @@ -2000,7 +1989,7 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: escape-string-regexp@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz" integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== eslint-config-oclif-typescript@^1.0.3: @@ -2296,22 +2285,9 @@ esutils@^2.0.2: resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -execa@^0.10.0: - version "0.10.0" - resolved "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz" - integrity sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw== - dependencies: - cross-spawn "^6.0.0" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - execa@^8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" + resolved "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz" integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== dependencies: cross-spawn "^7.0.3" @@ -2326,7 +2302,7 @@ execa@^8.0.1: exit-hook@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-4.0.0.tgz#c1e16ebd03d3166f837b1502dac755bb5c460d58" + resolved "https://registry.npmjs.org/exit-hook/-/exit-hook-4.0.0.tgz" integrity sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ== external-editor@^3.0.3, external-editor@^3.1.0: @@ -2362,31 +2338,9 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.9: - version "3.2.12" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-glob@^3.3.1: - version "3.3.2" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-glob@^3.3.3: +fast-glob@^3.2.9, fast-glob@^3.3.1, fast-glob@^3.3.3: version "3.3.3" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz" integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -2458,15 +2412,15 @@ fill-keys@^1.0.2: fill-range@^7.1.1: version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" find-up-simple@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/find-up-simple/-/find-up-simple-1.0.0.tgz#21d035fde9fdbd56c8f4d2f63f32fd93a1cfc368" - integrity sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw== + version "1.0.1" + resolved "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz" + integrity sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ== find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" @@ -2576,7 +2530,7 @@ get-caller-file@^2.0.5: get-east-asian-width@^1.0.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz#21b4071ee58ed04ee0db653371b55b4299875389" + resolved "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz" integrity sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ== get-func-name@^2.0.1, get-func-name@^2.0.2: @@ -2600,14 +2554,9 @@ get-package-type@^0.1.0: resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - get-stream@^8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz" integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== get-symbol-description@^1.0.2: @@ -2652,7 +2601,7 @@ glob@^7.1.1, glob@^7.1.3: glob@^8.1.0: version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz" integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== dependencies: fs.realpath "^1.0.0" @@ -2663,7 +2612,7 @@ glob@^8.1.0: global-directory@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/global-directory/-/global-directory-4.0.1.tgz#4d7ac7cfd2cb73f304c53b8810891748df5e361e" + resolved "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz" integrity sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q== dependencies: ini "4.1.1" @@ -2702,7 +2651,7 @@ globby@^11.0.3, globby@^11.1.0: globby@^14.0.2: version "14.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-14.1.0.tgz#138b78e77cf5a8d794e327b15dce80bf1fb0a73e" + resolved "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz" integrity sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA== dependencies: "@sindresorhus/merge-streams" "^2.1.0" @@ -2726,7 +2675,7 @@ graceful-fs@4.2.10, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: graceful-fs@^4.2.11: version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== graphemer@^1.4.0: @@ -2789,7 +2738,7 @@ hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: he@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== heroku-client@^3.1.0: @@ -2807,21 +2756,21 @@ hosted-git-info@^2.1.4: hosted-git-info@^7.0.0: version "7.0.2" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.2.tgz#9b751acac097757667f30114607ef7b661ff4f17" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz" integrity sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w== dependencies: lru-cache "^10.0.1" hosted-git-info@^8.0.2: version "8.0.2" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-8.0.2.tgz#5bd7d8b5395616e41cc0d6578381a32f669b14b2" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.0.2.tgz" integrity sha512-sYKnA7eGln5ov8T8gnYlkSOxFJvywzEx9BueN6xo/GKO8PGiI6uK6xx+DIGe45T3bdVjLAQDQW1aicT8z8JwQg== dependencies: lru-cache "^10.0.1" human-signals@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz" integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== hyperlinker@^1.0.0: @@ -2838,7 +2787,7 @@ iconv-lite@^0.4.24: ignore-walk@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-7.0.0.tgz#8350e475cf4375969c12eb49618b3fd9cca6704f" + resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-7.0.0.tgz" integrity sha512-T4gbf83A4NH95zvhVYZc+qWocBBGlpzUXLPGurJggw/WIOwicfXJChLDP/iBZnN5WqROSu5Bm3hhle4z8a8YGQ== dependencies: minimatch "^9.0.0" @@ -2860,10 +2809,10 @@ ignore@^5.2.0: ignore@^7.0.3: version "7.0.3" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.3.tgz#397ef9315dfe0595671eefe8b633fec6943ab733" + resolved "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz" integrity sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA== -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.0.0, import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -2871,17 +2820,9 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" -import-fresh@^3.3.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" - integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - import-local@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" + resolved "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz" integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== dependencies: pkg-dir "^4.2.0" @@ -2902,10 +2843,10 @@ indent-string@^4.0.0: resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -index-to-position@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/index-to-position/-/index-to-position-0.1.2.tgz#e11bfe995ca4d8eddb1ec43274488f3c201a7f09" - integrity sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g== +index-to-position@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/index-to-position/-/index-to-position-1.0.0.tgz" + integrity sha512-sCO7uaLVhRJ25vz1o8s9IFM3nVS4DkuQnyjMwiQPKvQuBYBDmb8H7zx8ki7nVh4HJQOdVWebyvLE0qt+clruxA== inflight@^1.0.4: version "1.0.6" @@ -2922,19 +2863,14 @@ inherits@2: ini@4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.1.tgz#d95b3d843b1e906e56d6747d5447904ff50ce7a1" + resolved "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz" integrity sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g== -ini@^1.3.4: +ini@^1.3.4, ini@~1.3.0: version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -ini@~1.3.0: - version "1.3.7" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz" - integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== - inquirer-autosubmit-prompt@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/inquirer-autosubmit-prompt/-/inquirer-autosubmit-prompt-0.2.0.tgz" @@ -2945,17 +2881,17 @@ inquirer-autosubmit-prompt@^0.2.0: rxjs "^6.3.3" inquirer@^12.3.2: - version "12.4.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-12.4.2.tgz#0944de8b4ea41a27182fe5db61755485bee78ab6" - integrity sha512-reyjHcwyK2LObXgTJH4T1Dpfhwu88LNPTZmg/KenmTsy3T8lN/kZT8Oo7UwwkB9q8+ss2qjjN7GV8oFAfyz9Xg== + version "12.5.0" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-12.5.0.tgz" + integrity sha512-aiBBq5aKF1k87MTxXDylLfwpRwToShiHrSv4EmB07EYyLgmnjEz5B3rn0aGw1X3JA/64Ngf2T54oGwc+BCsPIQ== dependencies: - "@inquirer/core" "^10.1.7" - "@inquirer/prompts" "^7.3.2" - "@inquirer/type" "^3.0.4" + "@inquirer/core" "^10.1.9" + "@inquirer/prompts" "^7.4.0" + "@inquirer/type" "^3.0.5" ansi-escapes "^4.3.2" mute-stream "^2.0.0" run-async "^3.0.0" - rxjs "^7.8.1" + rxjs "^7.8.2" inquirer@^6.2.1: version "6.5.2" @@ -3079,7 +3015,7 @@ is-docker@^2.0.0, is-docker@^2.1.1: is-docker@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz" integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== is-extglob@^2.1.1: @@ -3113,19 +3049,19 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: is-in-ci@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-in-ci/-/is-in-ci-1.0.0.tgz#9a86bbda7e42c6129902e0574c54b018fbb6ab88" + resolved "https://registry.npmjs.org/is-in-ci/-/is-in-ci-1.0.0.tgz" integrity sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg== is-inside-container@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + resolved "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz" integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== dependencies: is-docker "^3.0.0" is-installed-globally@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-1.0.0.tgz#08952c43758c33d815692392f7f8437b9e436d5a" + resolved "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-1.0.0.tgz" integrity sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ== dependencies: global-directory "^4.0.1" @@ -3133,7 +3069,7 @@ is-installed-globally@^1.0.0: is-interactive@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90" + resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz" integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== is-negative-zero@^2.0.3: @@ -3143,12 +3079,12 @@ is-negative-zero@^2.0.3: is-node-process@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/is-node-process/-/is-node-process-1.2.0.tgz#ea02a1b90ddb3934a19aea414e88edef7e11d134" + resolved "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz" integrity sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw== is-npm@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-6.0.0.tgz#b59e75e8915543ca5d881ecff864077cba095261" + resolved "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz" integrity sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ== is-number-object@^1.0.4: @@ -3177,12 +3113,12 @@ is-observable@^1.1.0: is-path-cwd@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-3.0.0.tgz#889b41e55c8588b1eb2a96a61d05740a674521c7" + resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-3.0.0.tgz" integrity sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA== is-path-inside@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-4.0.0.tgz#805aeb62c47c1b12fc3fd13bfb3ed1e7430071db" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz" integrity sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA== is-plain-obj@^2.1.0: @@ -3210,12 +3146,12 @@ is-retry-allowed@^1.0.0: is-retry-allowed@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz#88f34cbd236e043e71b6932d09b0c65fb7b4d71d" + resolved "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz" integrity sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg== is-scoped@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-scoped/-/is-scoped-3.0.0.tgz#2f9fc6e37c17d432d8e38d3c749aab8c76d1bdd8" + resolved "https://registry.npmjs.org/is-scoped/-/is-scoped-3.0.0.tgz" integrity sha512-ezxLUq30kiTvP0w/5n9tj4qTOKlrA07Oty1hwTQ+lcqw11x6uc8sp7VRb2OVGRzKfCHZ2A22T5Zsau/Q2Akb0g== dependencies: scoped-regex "^3.0.0" @@ -3239,7 +3175,7 @@ is-stream@^2.0.0: is-stream@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz" integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== is-string@^1.0.5, is-string@^1.0.7: @@ -3270,12 +3206,12 @@ is-unicode-supported@^0.1.0: is-unicode-supported@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz#09f0ab0de6d3744d48d265ebb98f65d11f2a9b3a" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz" integrity sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ== is-url-superb@^6.1.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/is-url-superb/-/is-url-superb-6.1.0.tgz#182f0d92b482412afeadfba8e6ea2c76680e3631" + resolved "https://registry.npmjs.org/is-url-superb/-/is-url-superb-6.1.0.tgz" integrity sha512-LXdhGlYqUPdvEyIhWPEEwYYK3yrUiPcBjmFGlZNv1u5GtIL5qQRf7ddDyPNAvsMFqdzS923FROpTQU97tLe3JQ== is-weakref@^1.0.2: @@ -3294,7 +3230,7 @@ is-wsl@^2.2.0: is-wsl@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz" integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== dependencies: is-inside-container "^1.0.0" @@ -3311,7 +3247,7 @@ isexe@^2.0.0: issue-regex@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/issue-regex/-/issue-regex-4.3.0.tgz#e73db1b475fa12b93ddc66c36ebd5a5f57d0d838" + resolved "https://registry.npmjs.org/issue-regex/-/issue-regex-4.3.0.tgz" integrity sha512-7731a/t2llyrk8Hdwl1x3LkhIFGzxHQGpJA7Ur9cIRViakQF2y25Lwhx8Ziy1B068+kBYUmYPBzw5uo3DdWrdQ== jake@^10.8.5: @@ -3339,7 +3275,7 @@ js-yaml@^3.13.1, js-yaml@^3.14.1: js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" @@ -3421,12 +3357,12 @@ keyv@^4.5.3: ky@^1.2.0: version "1.7.5" - resolved "https://registry.yarnpkg.com/ky/-/ky-1.7.5.tgz#69c9b70ff818fd6108fc04a89c1454412c11dfce" + resolved "https://registry.npmjs.org/ky/-/ky-1.7.5.tgz" integrity sha512-HzhziW6sc5m0pwi5M196+7cEBtbt0lCYi67wNsiwMUmz833wloE0gbzJPWKs1gliFKQb34huItDQX97LyOdPdA== latest-version@^9.0.0: version "9.0.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-9.0.0.tgz#e91ed216e7a4badc6f73b66c65adb46c58ec6ba1" + resolved "https://registry.npmjs.org/latest-version/-/latest-version-9.0.0.tgz" integrity sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA== dependencies: package-json "^10.0.0" @@ -3515,7 +3451,7 @@ locate-path@^6.0.0: lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz" - integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== lodash.merge@^4.6.2: version "4.6.2" @@ -3554,7 +3490,7 @@ log-symbols@^4.1.0: log-symbols@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-7.0.0.tgz#953999bb9cec27a09049c8f45e1154ec81163061" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.0.tgz" integrity sha512-zrc91EDk2M+2AXo/9BTvK91pqb7qrPg2nX/Hy+u8a5qQlbaOflCKO+6SqgZ+M+xUFxGdKTgwnGiL96b1W3ikRA== dependencies: is-unicode-supported "^2.0.0" @@ -3578,7 +3514,7 @@ loupe@^2.3.6: lru-cache@^10.0.1: version "10.4.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== lru-cache@^5.1.1: @@ -3595,7 +3531,7 @@ make-error@^1.1.1: meow@^13.2.0: version "13.2.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-13.2.0.tgz#6b7d63f913f984063b3cc261b6e8800c4cd3474f" + resolved "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz" integrity sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA== merge-descriptors@~1.0.0: @@ -3613,9 +3549,9 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^4.0.4, micromatch@^4.0.8: +micromatch@^4.0.8: version "4.0.8" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: braces "^3.0.3" @@ -3633,12 +3569,12 @@ mimic-fn@^2.1.0: mimic-fn@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz" integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== mimic-function@^5.0.0: version "5.0.1" - resolved "https://registry.yarnpkg.com/mimic-function/-/mimic-function-5.0.1.tgz#acbe2b3349f99b9deaca7fb70e48b83e94e67076" + resolved "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz" integrity sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA== minimatch@9.0.3: @@ -3657,14 +3593,14 @@ minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: minimatch@^5.0.1, minimatch@^5.1.6: version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" minimatch@^9.0.0: version "9.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" @@ -3683,7 +3619,7 @@ mkdirp@^0.5.3: mocha@^10.7.3: version "10.7.3" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.7.3.tgz#ae32003cabbd52b59aece17846056a68eb4b0752" + resolved "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz" integrity sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A== dependencies: ansi-colors "^4.1.3" @@ -3744,7 +3680,7 @@ mute-stream@0.0.8: mute-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-2.0.0.tgz#a5446fc0c512b71c83c44d908d5c7b7b4c493b2b" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz" integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== natural-compare@^1.4.0: @@ -3757,17 +3693,9 @@ natural-orderby@^2.0.1, natural-orderby@^2.0.3: resolved "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz" integrity sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q== -netrc-parser@^3.1.6: - version "3.1.6" - resolved "https://registry.npmjs.org/netrc-parser/-/netrc-parser-3.1.6.tgz" - integrity sha512-lY+fmkqSwntAAjfP63jB4z5p5WbuZwyMCD3pInT7dpHU/Gc6Vv90SAC6A0aNiqaRGHiuZFBtiwu+pu8W/Eyotw== - dependencies: - debug "^3.1.0" - execa "^0.10.0" - new-github-release-url@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/new-github-release-url/-/new-github-release-url-2.0.0.tgz#335189b91f52bbb9569042a7485900a205a0500b" + resolved "https://registry.npmjs.org/new-github-release-url/-/new-github-release-url-2.0.0.tgz" integrity sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ== dependencies: type-fest "^2.5.1" @@ -3779,7 +3707,7 @@ nice-try@^1.0.4: nise@^5.1.4: version "5.1.9" - resolved "https://registry.yarnpkg.com/nise/-/nise-5.1.9.tgz#0cb73b5e4499d738231a473cd89bd8afbb618139" + resolved "https://registry.npmjs.org/nise/-/nise-5.1.9.tgz" integrity sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww== dependencies: "@sinonjs/commons" "^3.0.0" @@ -3799,7 +3727,7 @@ nock@^13.3.3: nock@^14.0.1: version "14.0.1" - resolved "https://registry.yarnpkg.com/nock/-/nock-14.0.1.tgz#62006248bbbc7637322c9fc73f90b93a431b4f5e" + resolved "https://registry.npmjs.org/nock/-/nock-14.0.1.tgz" integrity sha512-IJN4O9pturuRdn60NjQ7YkFt6Rwei7ZKaOwb1tvUIIqTgeD0SDDAX3vrqZD4wcXczeEy/AsUXxpGpP/yHqV7xg== dependencies: "@mswjs/interceptors" "^0.37.3" @@ -3823,7 +3751,7 @@ normalize-package-data@^2.5.0: normalize-package-data@^6.0.0: version "6.0.2" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.2.tgz#a7bc22167fe24025412bcff0a9651eb768b03506" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz" integrity sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g== dependencies: hosted-git-info "^7.0.0" @@ -3837,7 +3765,7 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: np@^10.2.0: version "10.2.0" - resolved "https://registry.yarnpkg.com/np/-/np-10.2.0.tgz#45542802c78aae23c63a54e18883807ec53dc4b4" + resolved "https://registry.npmjs.org/np/-/np-10.2.0.tgz" integrity sha512-7Pwk8qcsks2c9ETS35aeJSON6uJAbOsx7TwTFzZNUGgH4djT+Yt/p9S7PZuqH5pkcpNUhasne3cDRBzaUtvetg== dependencies: chalk "^5.4.1" @@ -3879,7 +3807,7 @@ np@^10.2.0: npm-name@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/npm-name/-/npm-name-8.0.0.tgz#05aeda9748706ffad66d9ecec8188b99d6e3908b" + resolved "https://registry.npmjs.org/npm-name/-/npm-name-8.0.0.tgz" integrity sha512-DIuCGcKYYhASAZW6Xh/tiaGMko8IHOHe0n3zOA7SzTi0Yvy00x8L7sa5yNiZ75Ny58O/KeRtNouy8Ut6gPbKiw== dependencies: is-scoped "^3.0.0" @@ -3892,16 +3820,9 @@ npm-name@^8.0.0: registry-url "^6.0.1" validate-npm-package-name "^5.0.0" -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - npm-run-path@^5.1.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz" integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== dependencies: path-key "^4.0.0" @@ -3992,21 +3913,21 @@ onetime@^5.1.0: onetime@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + resolved "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz" integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== dependencies: mimic-fn "^4.0.0" onetime@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-7.0.0.tgz#9f16c92d8c9ef5120e3acd9dd9957cceecc1ab60" + resolved "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz" integrity sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ== dependencies: mimic-function "^5.0.0" open@^10.0.4: version "10.1.0" - resolved "https://registry.yarnpkg.com/open/-/open-10.1.0.tgz#a7795e6e5d519abe4286d9937bb24b51122598e1" + resolved "https://registry.npmjs.org/open/-/open-10.1.0.tgz" integrity sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw== dependencies: default-browser "^5.2.1" @@ -4047,14 +3968,9 @@ os-tmpdir@~1.0.2: outvariant@^1.4.0, outvariant@^1.4.3: version "1.4.3" - resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.3.tgz#221c1bfc093e8fec7075497e7799fdbf43d14873" + resolved "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz" integrity sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA== -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - p-limit@^2.2.0: version "2.3.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" @@ -4090,12 +4006,12 @@ p-map@^2.0.0: p-map@^7.0.1, p-map@^7.0.2: version "7.0.3" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-7.0.3.tgz#7ac210a2d36f81ec28b736134810f7ba4418cdb6" + resolved "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz" integrity sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA== p-memoize@^7.1.1: version "7.1.1" - resolved "https://registry.yarnpkg.com/p-memoize/-/p-memoize-7.1.1.tgz#53b1d0e6007288f7261cfa11a7603b84c9261bfa" + resolved "https://registry.npmjs.org/p-memoize/-/p-memoize-7.1.1.tgz" integrity sha512-DZ/bONJILHkQ721hSr/E9wMz5Am/OTJ9P6LhLFo2Tu+jL8044tgc9LwHO8g4PiaYePnlVVRAJcKmgy8J9MVFrA== dependencies: mimic-fn "^4.0.0" @@ -4103,7 +4019,7 @@ p-memoize@^7.1.1: p-timeout@^6.1.4: version "6.1.4" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-6.1.4.tgz#418e1f4dd833fa96a2e3f532547dd2abdb08dbc2" + resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz" integrity sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg== p-try@^2.0.0: @@ -4113,7 +4029,7 @@ p-try@^2.0.0: package-json@^10.0.0: version "10.0.1" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-10.0.1.tgz#e49ee07b8de63b638e7f1b5bb353733e428fe7d7" + resolved "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz" integrity sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg== dependencies: ky "^1.2.0" @@ -4139,13 +4055,13 @@ parse-json@^5.0.0, parse-json@^5.2.0: lines-and-columns "^1.1.6" parse-json@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-8.1.0.tgz#91cdc7728004e955af9cb734de5684733b24a717" - integrity sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA== + version "8.2.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-8.2.0.tgz" + integrity sha512-eONBZy4hm2AgxjNFd8a4nyDJnzUAH0g34xSQAwWEVGCjdZ4ZL7dKZBfq267GWP/JaS9zW62Xs2FeAdDvpHHJGQ== dependencies: - "@babel/code-frame" "^7.22.13" - index-to-position "^0.1.2" - type-fest "^4.7.1" + "@babel/code-frame" "^7.26.2" + index-to-position "^1.0.0" + type-fest "^4.37.0" password-prompt@^1.1.2: version "1.1.2" @@ -4162,7 +4078,7 @@ path-exists@^4.0.0: path-exists@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz" integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== path-is-absolute@^1.0.0: @@ -4170,19 +4086,19 @@ path-is-absolute@^1.0.0: resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-key@^2.0.0, path-key@^2.0.1: +path-key@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-key@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + resolved "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz" integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== path-parse@^1.0.6, path-parse@^1.0.7: @@ -4192,7 +4108,7 @@ path-parse@^1.0.6, path-parse@^1.0.7: path-to-regexp@^6.2.1: version "6.3.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.3.0.tgz#2b6a26a337737a8e1416f9272ed0766b1c0389f4" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz" integrity sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ== path-type@^4.0.0: @@ -4202,7 +4118,7 @@ path-type@^4.0.0: path-type@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-6.0.0.tgz#2f1bb6791a91ce99194caede5d6c5920ed81eb51" + resolved "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz" integrity sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ== pathval@^1.1.1: @@ -4229,7 +4145,7 @@ pkg-dir@^4.2.0: pkg-dir@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-8.0.0.tgz#8f3de8ba83d46b72a05c80bfd4e579f060fa91e2" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-8.0.0.tgz" integrity sha512-4peoBq4Wks0riS0z8741NVv+/8IiTvqnZAr8QGgtdifrtpdXbNw/FxRS1l6NFqm4EMzuS0EDqNNx4XGaz8cuyQ== dependencies: find-up-simple "^1.0.0" @@ -4261,7 +4177,7 @@ propagate@^2.0.0: proto-list@~1.2.1: version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== proxyquire@^2.1.3: @@ -4280,7 +4196,7 @@ punycode@^2.1.0: pupa@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-3.1.0.tgz#f15610274376bbcc70c9a3aa8b505ea23f41c579" + resolved "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz" integrity sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug== dependencies: escape-goat "^4.0.0" @@ -4319,7 +4235,7 @@ rc@1.2.8: read-package-up@^11.0.0: version "11.0.0" - resolved "https://registry.yarnpkg.com/read-package-up/-/read-package-up-11.0.0.tgz#71fb879fdaac0e16891e6e666df22de24a48d5ba" + resolved "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz" integrity sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ== dependencies: find-up-simple "^1.0.0" @@ -4347,7 +4263,7 @@ read-pkg@^5.2.0: read-pkg@^9.0.0, read-pkg@^9.0.1: version "9.0.1" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-9.0.1.tgz#b1b81fb15104f5dbb121b6bbdee9bbc9739f569b" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz" integrity sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA== dependencies: "@types/normalize-package-data" "^2.4.3" @@ -4392,14 +4308,14 @@ regexpp@^3.0.0, regexpp@^3.1.0: registry-auth-token@^5.0.2: version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.1.0.tgz#3c659047ecd4caebd25bc1570a3aa979ae490eca" + resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz" integrity sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw== dependencies: "@pnpm/npm-conf" "^2.1.0" registry-url@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-6.0.1.tgz#056d9343680f2f64400032b1e199faa692286c58" + resolved "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz" integrity sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q== dependencies: rc "1.2.8" @@ -4482,7 +4398,7 @@ rimraf@^3.0.2: run-applescript@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.0.0.tgz#e5a553c2bffd620e169d276c1cd8f1b64778fbeb" + resolved "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz" integrity sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A== run-async@^2.2.0, run-async@^2.4.0: @@ -4492,7 +4408,7 @@ run-async@^2.2.0, run-async@^2.4.0: run-async@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-3.0.0.tgz#42a432f6d76c689522058984384df28be379daad" + resolved "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz" integrity sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q== run-parallel@^1.1.9: @@ -4509,10 +4425,10 @@ rxjs@^6.3.3, rxjs@^6.4.0, rxjs@^6.5.3, rxjs@^6.6.0: dependencies: tslib "^1.9.0" -rxjs@^7.8.1: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== +rxjs@^7.8.1, rxjs@^7.8.2: + version "7.8.2" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz" + integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== dependencies: tslib "^2.1.0" @@ -4559,7 +4475,7 @@ safe-regex@^2.1.1: scoped-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/scoped-regex/-/scoped-regex-3.0.0.tgz#cd7ede7d942f2ae90da53272102ff2d73129c46f" + resolved "https://registry.npmjs.org/scoped-regex/-/scoped-regex-3.0.0.tgz" integrity sha512-yEsN6TuxZhZ1Tl9iB81frTNS292m0I/IG7+w8lTvfcJQP2x3vnpOoevjBoE3Np5A6KnZM2+RtVenihj9t6NiYg== "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0: @@ -4572,24 +4488,14 @@ semver@^6.1.0, semver@^6.3.1: resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.2.1: - version "7.6.2" - resolved "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz" - integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== - -semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.5.4: - version "7.6.1" - resolved "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz" - integrity sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA== - -semver@^7.6.0, semver@^7.6.3: +semver@^7.2.1, semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3: version "7.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" + resolved "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz" integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== serialize-javascript@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz" integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== dependencies: randombytes "^2.1.0" @@ -4625,7 +4531,7 @@ shebang-command@^1.2.0: shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" @@ -4637,7 +4543,7 @@ shebang-regex@^1.0.0: shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== side-channel@^1.0.4: @@ -4650,19 +4556,19 @@ side-channel@^1.0.4: get-intrinsic "^1.2.4" object-inspect "^1.13.1" -signal-exit@^3.0.0, signal-exit@^3.0.2: +signal-exit@^3.0.2: version "3.0.7" resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== signal-exit@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== sinon@^16.1.3: version "16.1.3" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-16.1.3.tgz#b760ddafe785356e2847502657b4a0da5501fba8" + resolved "https://registry.npmjs.org/sinon/-/sinon-16.1.3.tgz" integrity sha512-mjnWWeyxcAf9nC0bXcPmiDut+oE8HYridTNzBbF98AYVLmWwGRp2ISEpyhYflG1ifILT+eNn3BmKUJPxjXUPlA== dependencies: "@sinonjs/commons" "^3.0.0" @@ -4679,7 +4585,7 @@ slash@^3.0.0: slash@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-5.1.0.tgz#be3adddcdf09ac38eebe8dcdc7b1a57a75b095ce" + resolved "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz" integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg== slice-ansi@0.0.4: @@ -4745,7 +4651,7 @@ stdout-stderr@^0.1.9: strict-event-emitter@^0.5.1: version "0.5.1" - resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz#1602ece81c51574ca39c6815e09f1a3e8550bd93" + resolved "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz" integrity sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ== string-width@^1.0.1: @@ -4776,7 +4682,7 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2 string-width@^7.0.0, string-width@^7.2.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-7.2.0.tgz#b5bb8e2165ce275d4d43476dd2700ad9091db6dc" + resolved "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz" integrity sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ== dependencies: emoji-regex "^10.3.0" @@ -4841,7 +4747,7 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: strip-ansi@^7.1.0: version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" @@ -4851,14 +4757,9 @@ strip-bom@^3.0.0: resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - strip-final-newline@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz" integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: @@ -4873,7 +4774,7 @@ strip-json-comments@~2.0.1: stubborn-fs@^1.2.5: version "1.2.5" - resolved "https://registry.yarnpkg.com/stubborn-fs/-/stubborn-fs-1.2.5.tgz#e5e244223166921ddf66ed5e062b6b3bf285bfd2" + resolved "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-1.2.5.tgz" integrity sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g== supports-color@^2.0.0: @@ -4922,7 +4823,7 @@ symbol-observable@^1.1.0: symbol-observable@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-4.0.0.tgz#5b425f192279e87f2f9b937ac8540d1984b39205" + resolved "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz" integrity sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ== table@^6.0.9: @@ -4943,7 +4844,7 @@ tapable@^2.2.0: terminal-link@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-3.0.0.tgz#91c82a66b52fc1684123297ce384429faf72ac5c" + resolved "https://registry.npmjs.org/terminal-link/-/terminal-link-3.0.0.tgz" integrity sha512-flFL3m4wuixmf6IfhFJd1YPiLiMuxEc8uHRM1buzIeZPm22Au2pDqBJQgdo7n1WfPU1ONFGv7YDwpFBmHGF6lg== dependencies: ansi-escapes "^5.0.0" @@ -4966,11 +4867,6 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" @@ -5029,7 +4925,7 @@ tslib@^2.0.0, tslib@^2.4.1: tslib@^2.1.0: version "2.8.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== tslib@^2.5.0: @@ -5091,7 +4987,7 @@ type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.8: type-detect@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.1.0.tgz#deb2453e8f08dcae7ae98c626b13dddb0155906c" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz" integrity sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw== type-fest@^0.20.2: @@ -5116,23 +5012,23 @@ type-fest@^0.8.1: type-fest@^1.0.2: version "1.4.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz" integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== type-fest@^2.5.1: version "2.19.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz" integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== type-fest@^3.0.0: version "3.13.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz" integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g== -type-fest@^4.18.2, type-fest@^4.21.0, type-fest@^4.6.0, type-fest@^4.7.1: - version "4.35.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.35.0.tgz#007ed74d65c2ca0fb3b564b3dc8170d5c872d665" - integrity sha512-2/AwEFQDFEy30iOLjrvHDIH7e4HEWH+f1Yl1bI5XMqzuoCUqwYCdxachgsgv0og/JdVZUhbfjcJAoHj5L1753A== +type-fest@^4.18.2, type-fest@^4.21.0, type-fest@^4.37.0, type-fest@^4.6.0: + version "4.37.0" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-4.37.0.tgz" + integrity sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg== typed-array-buffer@^1.0.2: version "1.0.2" @@ -5179,9 +5075,9 @@ typed-array-length@^1.0.6: possible-typed-array-names "^1.0.0" typescript@^5.7.3: - version "5.7.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.3.tgz#919b44a7dbb8583a9b856d162be24a54bf80073e" - integrity sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw== + version "5.8.2" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz" + integrity sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ== unbox-primitive@^1.0.2: version "1.0.2" @@ -5195,17 +5091,17 @@ unbox-primitive@^1.0.2: undici-types@~5.26.4: version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== unicorn-magic@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4" + resolved "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz" integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== unicorn-magic@^0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.3.0.tgz#4efd45c85a69e0dd576d25532fbfa22aa5c8a104" + resolved "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz" integrity sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA== universalify@^0.1.0: @@ -5228,7 +5124,7 @@ update-browserslist-db@^1.0.13: update-notifier@^7.3.1: version "7.3.1" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-7.3.1.tgz#49af1ad6acfa0ea01c0d0f3c04047c154ead7096" + resolved "https://registry.npmjs.org/update-notifier/-/update-notifier-7.3.1.tgz" integrity sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA== dependencies: boxen "^8.0.1" @@ -5274,12 +5170,12 @@ validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: validate-npm-package-name@^5.0.0: version "5.0.1" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz#a316573e9b49f3ccd90dbb6eb52b3f06c6d604e8" + resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz" integrity sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ== when-exit@^2.1.1: version "2.1.4" - resolved "https://registry.yarnpkg.com/when-exit/-/when-exit-2.1.4.tgz#e2a0e998f7ad67eb0d2ce37e9794386663cc96f7" + resolved "https://registry.npmjs.org/when-exit/-/when-exit-2.1.4.tgz" integrity sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg== which-boxed-primitive@^1.0.2: @@ -5313,7 +5209,7 @@ which@^1.2.9: which@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" @@ -5327,7 +5223,7 @@ widest-line@^3.1.0: widest-line@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-5.0.0.tgz#b74826a1e480783345f0cd9061b49753c9da70d0" + resolved "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz" integrity sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA== dependencies: string-width "^7.0.0" @@ -5344,7 +5240,7 @@ wordwrap@^1.0.0: workerpool@^6.5.1: version "6.5.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544" + resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz" integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== wrap-ansi@^3.0.1: @@ -5357,7 +5253,7 @@ wrap-ansi@^3.0.1: wrap-ansi@^6.2.0: version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: ansi-styles "^4.0.0" @@ -5375,7 +5271,7 @@ wrap-ansi@^7.0.0: wrap-ansi@^9.0.0: version "9.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-9.0.0.tgz#1a3dc8b70d85eeb8398ddfb1e4a02cd186e58b3e" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz" integrity sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q== dependencies: ansi-styles "^6.2.1" @@ -5389,7 +5285,7 @@ wrappy@1: xdg-basedir@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-5.1.0.tgz#1efba19425e73be1bc6f2a6ceb52a3d2c884c0c9" + resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz" integrity sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ== y18n@^5.0.5: @@ -5404,7 +5300,7 @@ yallist@^3.0.2: yargs-parser@^18.1.3: version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz" integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== dependencies: camelcase "^5.0.0" @@ -5417,7 +5313,7 @@ yargs-parser@^20.2.2, yargs-parser@^20.2.9: yargs-unparser@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== dependencies: camelcase "^6.0.0" @@ -5427,7 +5323,7 @@ yargs-unparser@^2.0.0: yargs@^16.2.0: version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: cliui "^7.0.2" @@ -5450,10 +5346,10 @@ yocto-queue@^0.1.0: yoctocolors-cjs@^2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz#f4b905a840a37506813a7acaa28febe97767a242" + resolved "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz" integrity sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA== yoctocolors@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/yoctocolors/-/yoctocolors-2.1.1.tgz#e0167474e9fbb9e8b3ecca738deaa61dd12e56fc" + resolved "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.1.tgz" integrity sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==