From 943780d0dc4f78a0a1ad68f20b10addd9001d010 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Wed, 18 Dec 2024 12:33:04 +0000 Subject: [PATCH] finally ultrahonk --- .gitignore | 1 + vite-hardhat/.gitignore | 4 +- vite-hardhat/bun.lockb | Bin 412999 -> 417796 bytes vite-hardhat/hardhat.config.cts | 143 +----- vite-hardhat/package.json | 20 +- .../vite/hooks/useOffChainVerification.tsx | 4 +- .../vite/hooks/useOnChainVerification.tsx | 4 +- .../vite/hooks/useProofGeneration.tsx | 6 +- vite-hardhat/packages/vite/index.tsx | 34 +- vite-hardhat/packages/vite/package.json | 8 - vite-hardhat/packages/vite/vite.config.js | 11 +- vite-hardhat/test/index.test.ts | 50 -- vite-hardhat/tests/index.test.ts | 27 +- yarn.lock | 453 ------------------ 14 files changed, 67 insertions(+), 698 deletions(-) delete mode 100644 vite-hardhat/test/index.test.ts delete mode 100644 yarn.lock diff --git a/.gitignore b/.gitignore index 972f3b5e..c287e053 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ package-lock.json # To use with nektos/act .github/event.json +bun.lockb diff --git a/vite-hardhat/.gitignore b/vite-hardhat/.gitignore index 3816035b..9f227137 100644 --- a/vite-hardhat/.gitignore +++ b/vite-hardhat/.gitignore @@ -54,6 +54,8 @@ crs artifacts .yarn/ -circuit/target/ +noir/target/ +contracts dist deployment.json +bun.lockb diff --git a/vite-hardhat/bun.lockb b/vite-hardhat/bun.lockb index d13b0d8e11e91f4b56e161808f46ab612bf4746c..0c9481d8ad7f16c16b4aa17e60bea497fea571ec 100755 GIT binary patch delta 102105 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 delta 113936 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 { - const verifier = await hre.viem.deployContract('UltraVerifier'); - - const networkConfig = (await import(`viem/chains`))[hre.network.name] as Chain; - const config = { - name: hre.network.name, - address: verifier.address, - networkConfig: { - ...networkConfig, - id: hre.network.config.chainId, - }, - }; - -<<<<<<< HEAD - return superRes; -}); - -// export async function compileCircuit(path = './circuit') { -// const basePath = resolve(join(path)); -// const fm = createFileManager(basePath); -// const result = await compile(fm); -// if (!('program' in result)) { -// throw new Error('Compilation failed'); -// } -// return result as CompiledCircuit; -// } - -export async function generateArtifacts(path = './circuit', crsPath = './crs') { - // const circuit = await compileCircuit(path); - - const circuitFile = readFileSync(resolve('artifacts/circuit.json'), 'utf-8'); - const circuit = JSON.parse(circuitFile); - const backend = new UltraHonkBackend(circuit); - // const contract = await backend.acirGetSolidityVerifier(acirComposer); - return { circuit }; -} - -task('compile', 'Compile and generate circuits and contracts').setAction( - async (_, __, runSuper) => { - const { circuit } = await generateArtifacts(); - mkdirSync('artifacts', { recursive: true }); - writeFileSync('artifacts/circuit.json', JSON.stringify(circuit), { flag: 'w' }); - // writeFileSync('artifacts/contract.sol', contract, { flag: 'w' }); - await runSuper(); - }, -); - -task('deploy', 'Deploys the verifier contract') - .addOptionalParam('attach', 'Attach to an existing address', '', types.string) - .setAction(async ({ attach }, hre) => { - let verifier; - if (attach) { - verifier = await hre.viem.getContractAt('UltraVerifier', attach); - } else { - verifier = await hre.viem.deployContract('UltraVerifier'); - } - - const networkConfig = (await import(`viem/chains`))[hre.network.name] as Chain; - console.log(networkConfig); - const config = { - name: hre.network.name, - address: verifier.address, - networkConfig: { - ...networkConfig, - id: hre.network.config.chainId || networkConfig.id, - }, - }; - - console.log( - `Attached to address ${verifier.address} at network ${hre.network.name} with chainId ${config.networkConfig.id}...`, - ); - writeFileSync('artifacts/deployment.json', JSON.stringify(config), { flag: 'w' }); - }); - -subtask('generateHooks', 'Generates hooks for the verifier contract').setAction(async (_, hre) => { - exec('wagmi generate'); -}); - -subtask('prep', 'Compiles and deploys the verifier contract') - .addParam('attach', 'Attach to an already deployed contract', '', types.string) - .setAction(async ({ attach }, hre) => { - console.log('Preparing...'); - console.log('Compiling circuits and generating contracts...'); - - await hre.run('compile'); - await hre.run('deploy', { attach }); - - console.log('Generating hooks...'); - await hre.run('generateHooks'); - }); - -task('dev', 'Deploys and starts in a development environment') - .addOptionalParam('attach', 'Attach to an existing address', '', types.string) - .setAction(async ({ attach }, hre) => { - await hre.run('prep', { attach }); - exec('vite dev'); - }); - -task('build', 'Builds the frontend project') - .addOptionalParam('attach', 'Attach to an existing address', '', types.string) - .setAction(async ({ attach }, hre) => { - await hre.run('prep', { attach }); - exec('vite build'); - }); - -task('serve', 'Serves the frontend project').setAction(async (_, hre) => { - exec('vite preview'); -======= - console.log( - `Attached to address ${verifier.address} at network ${hre.network.name} with chainId ${networkConfig.id}...`, - ); - writeFileSync('deployment.json', JSON.stringify(config), { flag: 'w' }); ->>>>>>> main -}); +import { HardhatUserConfig, task, vars } from 'hardhat/config'; const config: HardhatUserConfig = { solidity: { - version: '0.8.21', + version: '0.8.28', settings: { optimizer: { enabled: true, runs: 5000 }, }, @@ -147,13 +32,29 @@ const config: HardhatUserConfig = { accounts: vars.has('holesky') ? [vars.get('holesky')] : [], }, }, - noir: { - version: '0.36.0', - }, paths: { root: 'packages', tests: 'tests', }, }; +task('deploy', 'Deploys the verifier contract').setAction(async (taskArgs, hre) => { + const verifier = await hre.viem.deployContract('HonkVerifier'); + + const networkConfig = (await import(`viem/chains`))[hre.network.name] as Chain; + const config = { + name: hre.network.name, + address: verifier.address, + networkConfig: { + ...networkConfig, + id: hre.network.config.chainId, + }, + }; + + console.log( + `Attached to address ${verifier.address} at network ${hre.network.name} with chainId ${networkConfig.id}...`, + ); + writeFileSync('deployment.json', JSON.stringify(config), { flag: 'w' }); +}); + export default config; diff --git a/vite-hardhat/package.json b/vite-hardhat/package.json index fbbe484a..04ad9b58 100644 --- a/vite-hardhat/package.json +++ b/vite-hardhat/package.json @@ -13,27 +13,18 @@ }, "type": "module", "devDependencies": { - "hardhat-plugin-noir": "0.1.3", "@types/bun": "^1.1.12", "hardhat": "^2.19.2" }, "dependencies": { - "@aztec/bb.js": "^0.62.0", - "@noir-lang/noir_js": "0.36.0", - "@noir-lang/noir_wasm": "0.36.0", - "@noir-lang/types": "0.36.0", + "@noir-lang/noir_js": "1.0.0-beta.0", + "@noir-lang/noir_wasm": "1.0.0-beta.0", + "@noir-lang/types": "1.0.0-beta.0", + "@aztec/bb.js": "0.63.1", "@nomicfoundation/hardhat-ignition": "^0.15.5", "@nomicfoundation/hardhat-ignition-viem": "^0.15.5", "commander": "^12.1.0", "dotenv": "^16.0.3", -<<<<<<< HEAD - "fflate": "^0.8.2", - "hardhat": "^2.19.2", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-toastify": "^9.1.1", -======= ->>>>>>> main "shelljs": "^0.8.5", "@nomicfoundation/hardhat-ethers": "^3.0.6", "@nomicfoundation/hardhat-network-helpers": "^1.0.11", @@ -43,7 +34,8 @@ "@types/mocha": "^10.0.1", "@types/shelljs": "^0.8.7", "hardhat-gas-reporter": "^1.0.9", - "solidity-coverage": "^0.8.5" + "solidity-coverage": "^0.8.5", + "hardhat-noirenberg": "^0.1.4" }, "peerDependencies": { "typescript": "^5.0.0" diff --git a/vite-hardhat/packages/vite/hooks/useOffChainVerification.tsx b/vite-hardhat/packages/vite/hooks/useOffChainVerification.tsx index 3e0f2a39..a11b8a2f 100644 --- a/vite-hardhat/packages/vite/hooks/useOffChainVerification.tsx +++ b/vite-hardhat/packages/vite/hooks/useOffChainVerification.tsx @@ -3,11 +3,11 @@ import { ProofData } from '@noir-lang/types'; import { useEffect } from 'react'; import { toast } from 'react-toastify'; -import { UltraPlonkBackend } from '@aztec/bb.js'; +import { UltraHonkBackend } from '@aztec/bb.js'; import { Noir } from '@noir-lang/noir_js'; export function useOffChainVerification( - backend: UltraPlonkBackend, + backend: UltraHonkBackend, noir?: Noir, proofData?: ProofData, ) { diff --git a/vite-hardhat/packages/vite/hooks/useOnChainVerification.tsx b/vite-hardhat/packages/vite/hooks/useOnChainVerification.tsx index 56a28df2..7facab41 100644 --- a/vite-hardhat/packages/vite/hooks/useOnChainVerification.tsx +++ b/vite-hardhat/packages/vite/hooks/useOnChainVerification.tsx @@ -4,7 +4,7 @@ import { useAccount, useConnect, useDisconnect, useSwitchChain } from 'wagmi'; import { bytesToHex } from 'viem'; import { useEffect, useState } from 'react'; import { Id, toast } from 'react-toastify'; -import { useReadUltraVerifierVerify } from '../artifacts/generated.js'; +import { useReadHonkVerifierVerify } from '../artifacts/generated.js'; import deployment from '../../../deployment.json'; export function useOnChainVerification(proofData?: ProofData) { @@ -14,7 +14,7 @@ export function useOnChainVerification(proofData?: ProofData) { const [args, setArgs] = useState<[`0x${string}`, `0x${string}`[]] | undefined>(); const { chains, switchChain } = useSwitchChain(); - const { data, error } = useReadUltraVerifierVerify({ + const { data, error } = useReadHonkVerifierVerify({ args, query: { enabled: !!args, diff --git a/vite-hardhat/packages/vite/hooks/useProofGeneration.tsx b/vite-hardhat/packages/vite/hooks/useProofGeneration.tsx index d2d97a9b..591a08a8 100644 --- a/vite-hardhat/packages/vite/hooks/useProofGeneration.tsx +++ b/vite-hardhat/packages/vite/hooks/useProofGeneration.tsx @@ -24,7 +24,11 @@ export function useProofGeneration(inputs?: { [key: string]: string }) { error: 'Error initializing Noir', }); - const { witness } = await noir.execute(inputs); + const { witness } = await toast.promise(noir.execute(inputs), { + pending: 'Generating witness...', + success: 'Witness generated!', + error: 'Error generating witness', + }); const data = await toast.promise(backend.generateProof(witness), { pending: 'Generating proof', diff --git a/vite-hardhat/packages/vite/index.tsx b/vite-hardhat/packages/vite/index.tsx index 08c8ab11..117b91ed 100644 --- a/vite-hardhat/packages/vite/index.tsx +++ b/vite-hardhat/packages/vite/index.tsx @@ -1,11 +1,18 @@ +// @ts-ignore +import acvm from '@noir-lang/acvm_js/web/acvm_js_bg.wasm?url'; +// @ts-ignore +import noirc from '@noir-lang/noirc_abi/web/noirc_abi_wasm_bg.wasm?url'; +import initNoirC from '@noir-lang/noirc_abi'; +import initACVM from '@noir-lang/acvm_js'; +// @ts-ignore +await Promise.all([initACVM(fetch(acvm)), initNoirC(fetch(noirc))]); + import React, { ReactNode, useEffect } from 'react'; import ReactDOM from 'react-dom/client'; import './App.css'; import 'react-toastify/dist/ReactToastify.css'; import { ToastContainer } from 'react-toastify'; import Component from './components/index.jsx'; -import initNoirC from '@noir-lang/noirc_abi'; -import initACVM from '@noir-lang/acvm_js'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { WagmiProvider, createConfig, http } from 'wagmi'; import { defineChain, createClient } from 'viem'; @@ -30,23 +37,6 @@ const config = createConfig({ }, }); -const InitWasm = ({ children }: any) => { - const [init, setInit] = React.useState(false); - useEffect(() => { - (async () => { - await Promise.all([ - initACVM(new URL('@noir-lang/acvm_js/web/acvm_js_bg.wasm', import.meta.url).toString()), - initNoirC( - new URL('@noir-lang/noirc_abi/web/noirc_abi_wasm_bg.wasm', import.meta.url).toString(), - ), - ]); - setInit(true); - })(); - }); - - return
{init && children}
; -}; - export function Providers({ children }: { children: React.ReactNode }) { const [mounted, setMounted] = React.useState(false); React.useEffect(() => setMounted(true), []); @@ -59,9 +49,7 @@ export function Providers({ children }: { children: React.ReactNode }) { ReactDOM.createRoot(document.getElementById('root')!).render( - - - - + + , ); diff --git a/vite-hardhat/packages/vite/package.json b/vite-hardhat/packages/vite/package.json index ff018b07..8d28961e 100644 --- a/vite-hardhat/packages/vite/package.json +++ b/vite-hardhat/packages/vite/package.json @@ -7,11 +7,6 @@ "wagmi": "wagmi generate" }, "dependencies": { - "@noir-lang/backend_barretenberg": "0.36.0", - "@noir-lang/noir_js": "0.36.0", - "@noir-lang/noir_wasm": "0.36.0", - "@noir-lang/types": "0.36.0", - "@aztec/bb.js": "^0.62.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-toastify": "^9.1.1", @@ -34,8 +29,5 @@ "typechain": "^8.1.0", "typescript": "^4.9.3", "vite": "^5.0.6" - }, - "engines": { - "node": ">=18.19.0" } } diff --git a/vite-hardhat/packages/vite/vite.config.js b/vite-hardhat/packages/vite/vite.config.js index 7f94dbf1..1553b62a 100644 --- a/vite-hardhat/packages/vite/vite.config.js +++ b/vite-hardhat/packages/vite/vite.config.js @@ -1,17 +1,10 @@ -import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react-swc'; -export default defineConfig({ +export default { optimizeDeps: { esbuildOptions: { target: 'esnext', }, }, - build: { - target: 'esnext', - }, plugins: [react()], - server: { - port: 1337, - }, -}); +}; diff --git a/vite-hardhat/test/index.test.ts b/vite-hardhat/test/index.test.ts deleted file mode 100644 index 14e2191b..00000000 --- a/vite-hardhat/test/index.test.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { expect } from 'chai'; -import { BarretenbergBackend, UltraHonkBackend } from '@noir-lang/backend_barretenberg'; -import { Noir } from '@noir-lang/noir_js'; - -import { ProofData } from '@noir-lang/types'; -import { readFileSync } from 'fs'; -import { resolve } from 'path'; -import shelljs from 'shelljs'; - -shelljs.exec('npx hardhat compile'); - -describe('It compiles noir program code, receiving circuit bytes and abi object.', () => { - let noir: Noir; - let backend: UltraHonkBackend; - let correctProof: ProofData; - - beforeEach(async () => { - const circuitFile = readFileSync(resolve('circuit/target/noirstarter.json'), 'utf-8'); - const circuit = JSON.parse(circuitFile); - - backend = new UltraHonkBackend(circuit); - noir = new Noir(circuit); - }); - - it('Should generate valid proof for correct input', async () => { - const input = { x: 1, y: 2 }; - // Generate proof - const { witness } = await noir.execute(input); - correctProof = await backend.generateProof(witness); - expect(correctProof.proof instanceof Uint8Array).to.be.true; - }); - - it('Should verify valid proof for correct input', async () => { - const verification = await backend.verifyProof(correctProof); - expect(verification).to.be.true; - }); - - it('Should fail to generate valid proof for incorrect input', async () => { - try { - const input = { x: 1, y: 1 }; - const { witness } = await noir.execute(input); - const incorrectProof = await backend.generateProof(witness); - } catch (err) { - // TODO(Ze): Not sure how detailed we want this it to be - expect(err instanceof Error).to.be.true; - const error = err as Error; - expect(error.message).to.contain('Cannot satisfy constraint'); - } - }); -}); diff --git a/vite-hardhat/tests/index.test.ts b/vite-hardhat/tests/index.test.ts index 6c2cd446..a3181622 100644 --- a/vite-hardhat/tests/index.test.ts +++ b/vite-hardhat/tests/index.test.ts @@ -1,25 +1,24 @@ import { expect, beforeAll, describe, test } from 'bun:test'; import { Noir } from '@noir-lang/noir_js'; import { ProofData } from '@noir-lang/types'; -import hre from 'hardhat'; -import { BarretenbergBackend } from '@noir-lang/backend_barretenberg'; -import { bytesToHex } from 'viem'; +import { UltraHonkBackend } from '@aztec/bb.js'; import { execSync } from 'child_process'; +const hre = require('hardhat'); describe('It compiles noir program code, receiving circuit bytes and abi object.', () => { let correctProof: ProofData; let noir: Noir; - let backend: BarretenbergBackend; + let backend: UltraHonkBackend; hre.run('node'); beforeAll(async () => { - ({ noir, backend } = await hre.noir.getCircuit('noirstarter')); + ({ noir, backend } = await hre.noirenberg.compile()); + await hre.noirenberg.getSolidityVerifier(); execSync('npx hardhat compile'); }); test('Should generate valid proof for correct input', async () => { const input = { x: 1, y: 2 }; - // Generate proof const { witness } = await noir.execute(input); correctProof = await backend.generateProof(witness); expect(correctProof.proof instanceof Uint8Array).toBeTrue; @@ -30,14 +29,14 @@ describe('It compiles noir program code, receiving circuit bytes and abi object. expect(verification).toBeTrue; }); - test('Should verify valid proof for correct input on a smart contract', async () => { - const verifier = await hre.viem.deployContract('UltraVerifier'); - const res = await verifier.read.verify([ - bytesToHex(correctProof.proof), - correctProof.publicInputs as `0x${string}`[], - ]); - expect(res).toBeTrue; - }); + // test('Should verify valid proof for correct input on a smart contract', async () => { + // const verifier = await hre.viem.deployContract('HonkVerifier'); + // const res = await verifier.read.verify([ + // bytesToHex(correctProof.proof), + // correctProof.publicInputs as `0x${string}`[], + // ]); + // expect(res).toBeTrue; + // }); test('Should fail to generate valid proof for incorrect input', async () => { try { diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index e92c75c1..00000000 --- a/yarn.lock +++ /dev/null @@ -1,453 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@inquirer/core@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-6.0.0.tgz#d44ccd8ae09a4879a78f09cca35bf1ab894b95f4" - integrity sha512-fKi63Khkisgda3ohnskNf5uZJj+zXOaBvOllHsOkdsXRA/ubQLJQrZchFFi57NKbZzkTunXiBMdvWOv71alonw== - dependencies: - "@inquirer/type" "^1.1.6" - "@types/mute-stream" "^0.0.4" - "@types/node" "^20.10.7" - "@types/wrap-ansi" "^3.0.0" - ansi-escapes "^4.3.2" - chalk "^4.1.2" - cli-spinners "^2.9.2" - cli-width "^4.1.0" - figures "^3.2.0" - mute-stream "^1.0.0" - run-async "^3.0.0" - signal-exit "^4.1.0" - strip-ansi "^6.0.1" - wrap-ansi "^6.2.0" - -"@inquirer/input@^1.2.16": - version "1.2.16" - resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-1.2.16.tgz#94d8765a47689e799fd55ed0361dedc8f554341b" - integrity sha512-Ou0LaSWvj1ni+egnyQ+NBtfM1885UwhRCMtsRt2bBO47DoC1dwtCa+ZUNgrxlnCHHF0IXsbQHYtIIjFGAavI4g== - dependencies: - "@inquirer/core" "^6.0.0" - "@inquirer/type" "^1.1.6" - chalk "^4.1.2" - -"@inquirer/select@^1.3.3": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-1.3.3.tgz#7d832ee603c15b706148e47cda29cdf6634cd94b" - integrity sha512-RzlRISXWqIKEf83FDC9ZtJ3JvuK1l7aGpretf41BCWYrvla2wU8W8MTRNMiPrPJ+1SIqrRC1nZdZ60hD9hRXLg== - dependencies: - "@inquirer/core" "^6.0.0" - "@inquirer/type" "^1.1.6" - ansi-escapes "^4.3.2" - chalk "^4.1.2" - figures "^3.2.0" - -"@inquirer/type@^1.1.6": - version "1.1.6" - resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-1.1.6.tgz#f2656456e58fb93c7b73d5aad583b928c77b9206" - integrity sha512-OCKOpn0CrFDslR8s3who7hlr823zXTb1iShGCaaWgEJFfkIV0T9aLZV2QGnOuU78IrsPYLkr3oKx9dZwwCH3Rw== - -"@types/mute-stream@^0.0.4": - version "0.0.4" - resolved "https://registry.yarnpkg.com/@types/mute-stream/-/mute-stream-0.0.4.tgz#77208e56a08767af6c5e1237be8888e2f255c478" - integrity sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow== - dependencies: - "@types/node" "*" - -"@types/node@*", "@types/node@^20.10.7": - version "20.11.15" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.15.tgz#b853a86cfedbc768360c552b4653302b4e7417bf" - integrity sha512-gscmuADZfvNULx1eyirVbr3kVOVZtpQtzKMCZpeSZcN6MfbkRXAR4s9/gsQ4CzxLHw6EStDtKLNtSDL3vbq05A== - dependencies: - undici-types "~5.26.4" - -"@types/wrap-ansi@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz#18b97a972f94f60a679fd5c796d96421b9abb9fd" - integrity sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - -ansi-escapes@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -cli-spinners@^2.9.2: - version "2.9.2" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" - integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== - -cli-width@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" - integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colorette@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" - integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== - -commander@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" - integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -debug@4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -enquirer@2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -figures@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -fs-extra@10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fuzzysearch@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/fuzzysearch/-/fuzzysearch-1.0.3.tgz#dffc80f6d6b04223f2226aa79dd194231096d008" - integrity sha512-s+kNWQuI3mo9OALw0HJ6YGmMbLqEufCh2nX/zzV5CrICQ/y4AwPxM+6TIiF9ItFCHXFCyM/BfCCmN57NTIJuPg== - -glob@^7.1.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globalyzer@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" - integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== - -globrex@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" - integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -https-proxy-agent@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== - dependencies: - agent-base "6" - debug "4" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minipass@^3.0.0: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mri@1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.6.tgz#49952e1044db21dbf90f6cd92bc9c9a777d415a6" - integrity sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -mute-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" - integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -rimraf@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -run-async@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-3.0.0.tgz#42a432f6d76c689522058984384df28be379daad" - integrity sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q== - -signal-exit@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -string-width@^4.1.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -tar@^6.1.11: - version "6.2.0" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" - integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -tiged@^2.12.6: - version "2.12.6" - resolved "https://registry.yarnpkg.com/tiged/-/tiged-2.12.6.tgz#fe309738e8e2c10f58a739dc5618af0c496212bd" - integrity sha512-1p71OICYSdP7qE2RNSBQcf83Cp8oRAdoK8VQxDjZA7V11NlWW4dkSzHGrudeji7jc0F1Z9gNqZELxRVIFSLbwQ== - dependencies: - colorette "1.2.1" - enquirer "2.3.6" - fs-extra "10.1.0" - fuzzysearch "1.0.3" - https-proxy-agent "5.0.0" - mri "1.1.6" - rimraf "3.0.2" - tar "^6.1.11" - tiny-glob "0.2.8" - -tiny-glob@0.2.8: - version "0.2.8" - resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.8.tgz#b2792c396cc62db891ffa161fe8b33e76123e531" - integrity sha512-vkQP7qOslq63XRX9kMswlby99kyO5OvKptw7AMwBVMjXEI7Tb61eoI5DydyEMOseyGS5anDN1VPoVxEvH01q8w== - dependencies: - globalyzer "0.1.0" - globrex "^0.1.2" - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==