diff --git a/web3.js/src/connection.ts b/web3.js/src/connection.ts index 213ea2721..44b7a2a9e 100644 --- a/web3.js/src/connection.ts +++ b/web3.js/src/connection.ts @@ -32,12 +32,15 @@ import {NonceAccount} from './nonce-account'; import {PublicKey} from './publickey'; import {Signer} from './keypair'; import {MS_PER_SLOT} from './timing'; -import {Transaction} from './transaction'; +import {Transaction, TransactionStatus} from './transaction'; import {Message} from './message'; import assert from './util/assert'; import {sleep} from './util/sleep'; -import {promiseTimeout} from './util/promise-timeout'; import {toBuffer} from './util/to-buffer'; +import { + TransactionExpiredBlockheightExceededError, + TransactionExpiredTimeoutError, +} from './util/tx-expiry-custom-errors'; import {makeWebsocketUrl} from './util/url'; import type {Blockhash} from './blockhash'; import type {FeeCalculator} from './fee-calculator'; @@ -281,6 +284,16 @@ export type RpcResponseAndContext = { value: T; }; +/** + * A strategy for confirming transactions that uses the last valid + * block height for a given blockhash to check for transaction expiration. + */ +export type BlockheightBasedTransactionConfimationStrategy = { + signature: TransactionSignature; + blockhash: Blockhash; + lastValidBlockHeight: number; +}; + /** * @internal */ @@ -2825,38 +2838,64 @@ export class Connection { return res.result; } - /** - * Confirm the transaction identified by the specified signature. - */ + confirmTransaction( + strategy: BlockheightBasedTransactionConfimationStrategy, + commitment?: Commitment, + ): Promise>; + + /** @deprecated Instead, call `confirmTransaction` using a `TransactionConfirmationConfig` */ + // eslint-disable-next-line no-dupe-class-members + confirmTransaction( + strategy: TransactionSignature, + commitment?: Commitment, + ): Promise>; + + // eslint-disable-next-line no-dupe-class-members async confirmTransaction( - signature: TransactionSignature, + strategy: + | BlockheightBasedTransactionConfimationStrategy + | TransactionSignature, commitment?: Commitment, ): Promise> { + let rawSignature: string; + + if (typeof strategy == 'string') { + rawSignature = strategy; + } else { + const config = strategy as BlockheightBasedTransactionConfimationStrategy; + rawSignature = config.signature; + } + let decodedSignature; + try { - decodedSignature = bs58.decode(signature); + decodedSignature = bs58.decode(rawSignature); } catch (err) { - throw new Error('signature must be base58 encoded: ' + signature); + throw new Error('signature must be base58 encoded: ' + rawSignature); } assert(decodedSignature.length === 64, 'signature has invalid length'); - const start = Date.now(); const subscriptionCommitment = commitment || this.commitment; - + let timeoutId; let subscriptionId; - let response: RpcResponseAndContext | null = null; - const confirmPromise = new Promise((resolve, reject) => { + let done = false; + + const confirmationPromise = new Promise<{ + __type: TransactionStatus.PROCESSED; + response: RpcResponseAndContext; + }>((resolve, reject) => { try { subscriptionId = this.onSignature( - signature, + rawSignature, (result: SignatureResult, context: Context) => { subscriptionId = undefined; - response = { + const response = { context, value: result, }; - resolve(null); + done = true; + resolve({__type: TransactionStatus.PROCESSED, response}); }, subscriptionCommitment, ); @@ -2865,40 +2904,78 @@ export class Connection { } }); - let timeoutMs = this._confirmTransactionInitialTimeout || 60 * 1000; - switch (subscriptionCommitment) { - case 'processed': - case 'recent': - case 'single': - case 'confirmed': - case 'singleGossip': { - timeoutMs = this._confirmTransactionInitialTimeout || 30 * 1000; - break; + const checkBlockHeight = async () => { + try { + const blockHeight = await this.getBlockHeight(commitment); + return blockHeight; + } catch (_e) { + return -1; } - // exhaust enums to ensure full coverage - case 'finalized': - case 'max': - case 'root': - } + }; + const expiryPromise = new Promise< + | {__type: TransactionStatus.BLOCKHEIGHT_EXCEEDED} + | {__type: TransactionStatus.TIMED_OUT; timeoutMs: number} + >(resolve => { + if (typeof strategy === 'string') { + let timeoutMs = this._confirmTransactionInitialTimeout || 60 * 1000; + switch (subscriptionCommitment) { + case 'processed': + case 'recent': + case 'single': + case 'confirmed': + case 'singleGossip': { + timeoutMs = this._confirmTransactionInitialTimeout || 30 * 1000; + break; + } + // exhaust enums to ensure full coverage + case 'finalized': + case 'max': + case 'root': + } + + timeoutId = setTimeout( + () => resolve({__type: TransactionStatus.TIMED_OUT, timeoutMs}), + timeoutMs, + ); + } else { + let config = strategy as BlockheightBasedTransactionConfimationStrategy; + (async () => { + let currentBlockHeight = await checkBlockHeight(); + if (done) return; + while (currentBlockHeight <= config.lastValidBlockHeight) { + await sleep(1000); + if (done) return; + currentBlockHeight = await checkBlockHeight(); + if (done) return; + } + resolve({__type: TransactionStatus.BLOCKHEIGHT_EXCEEDED}); + })(); + } + }); + + let result: RpcResponseAndContext; try { - await promiseTimeout(confirmPromise, timeoutMs); + const outcome = await Promise.race([confirmationPromise, expiryPromise]); + switch (outcome.__type) { + case TransactionStatus.BLOCKHEIGHT_EXCEEDED: + throw new TransactionExpiredBlockheightExceededError(rawSignature); + case TransactionStatus.PROCESSED: + result = outcome.response; + break; + case TransactionStatus.TIMED_OUT: + throw new TransactionExpiredTimeoutError( + rawSignature, + outcome.timeoutMs / 1000, + ); + } } finally { + clearTimeout(timeoutId); if (subscriptionId) { this.removeSignatureListener(subscriptionId); } } - - if (response === null) { - const duration = (Date.now() - start) / 1000; - throw new Error( - `Transaction was not confirmed in ${duration.toFixed( - 2, - )} seconds. It is unknown if it succeeded or failed. Check signature ${signature} using the Solana Explorer or CLI tools.`, - ); - } - - return response; + return result; } /** diff --git a/web3.js/src/transaction.ts b/web3.js/src/transaction.ts index c01319ac0..33ecfaf03 100644 --- a/web3.js/src/transaction.ts +++ b/web3.js/src/transaction.ts @@ -21,6 +21,12 @@ import type {CompiledInstruction} from './message'; */ export type TransactionSignature = string; +export const enum TransactionStatus { + BLOCKHEIGHT_EXCEEDED, + PROCESSED, + TIMED_OUT, +} + /** * Default (empty) signature */ @@ -124,17 +130,30 @@ export type SignaturePubkeyPair = { /** * List of Transaction object fields that may be initialized at construction - * */ -export type TransactionCtorFields = { - /** A recent blockhash */ - recentBlockhash?: Blockhash | null; +export type TransactionCtorFields_DEPRECATED = { /** Optional nonce information used for offline nonce'd transactions */ nonceInfo?: NonceInformation | null; /** The transaction fee payer */ feePayer?: PublicKey | null; /** One or more signatures */ signatures?: Array; + /** A recent blockhash */ + recentBlockhash?: Blockhash; +}; + +/** + * List of Transaction object fields that may be initialized at construction + */ +export type TransactionBlockhashCtor = { + /** The transaction fee payer */ + feePayer?: PublicKey | null; + /** One or more signatures */ + signatures?: Array; + /** A recent blockhash */ + blockhash: Blockhash; + /** the last block chain can advance to before tx is declared expired */ + lastValidBlockHeight: number; }; /** @@ -196,6 +215,11 @@ export class Transaction { */ recentBlockhash?: Blockhash; + /** + * the last block chain can advance to before tx is declared expired + * */ + lastValidBlockHeight?: number; + /** * Optional Nonce information. If populated, transaction will use a durable * Nonce hash instead of a recentBlockhash. Must be populated by the caller @@ -212,11 +236,35 @@ export class Transaction { */ _json?: TransactionJSON; + // Construct a transaction with a blockhash and lastValidBlockHeight + constructor(opts?: TransactionBlockhashCtor); + + /** + * @deprecated `TransactionCtorFields` has been deprecated and will be removed in a future version. + * Please supply a `TransactionBlockhashCtor` instead. + */ + constructor(opts?: TransactionCtorFields_DEPRECATED); + /** * Construct an empty Transaction */ - constructor(opts?: TransactionCtorFields) { - opts && Object.assign(this, opts); + constructor( + opts?: TransactionBlockhashCtor | TransactionCtorFields_DEPRECATED, + ) { + if (!opts) { + return; + } else if ( + Object.prototype.hasOwnProperty.call(opts, 'lastValidBlockHeight') + ) { + const newOpts = opts as TransactionBlockhashCtor; + Object.assign(this, newOpts); + this.recentBlockhash = newOpts.blockhash; + this.lastValidBlockHeight = newOpts.lastValidBlockHeight; + } else { + const oldOpts = opts as TransactionCtorFields_DEPRECATED; + Object.assign(this, oldOpts); + this.recentBlockhash = oldOpts.recentBlockhash; + } } /** diff --git a/web3.js/src/util/send-and-confirm-transaction.ts b/web3.js/src/util/send-and-confirm-transaction.ts index 9be26b58c..bbfcf7cee 100644 --- a/web3.js/src/util/send-and-confirm-transaction.ts +++ b/web3.js/src/util/send-and-confirm-transaction.ts @@ -33,12 +33,25 @@ export async function sendAndConfirmTransaction( sendOptions, ); - const status = ( - await connection.confirmTransaction( - signature, - options && options.commitment, - ) - ).value; + const status = + transaction.recentBlockhash != null && + transaction.lastValidBlockHeight != null + ? ( + await connection.confirmTransaction( + { + signature: signature, + blockhash: transaction.recentBlockhash, + lastValidBlockHeight: transaction.lastValidBlockHeight, + }, + options && options.commitment, + ) + ).value + : ( + await connection.confirmTransaction( + signature, + options && options.commitment, + ) + ).value; if (status.err) { throw new Error( diff --git a/web3.js/src/util/tx-expiry-custom-errors.ts b/web3.js/src/util/tx-expiry-custom-errors.ts new file mode 100644 index 000000000..24c72824f --- /dev/null +++ b/web3.js/src/util/tx-expiry-custom-errors.ts @@ -0,0 +1,35 @@ +export class TransactionExpiredBlockheightExceededError extends Error { + signature: string; + + constructor(signature: string) { + super(`Signature ${signature} has expired: block height exceeded.`); + this.signature = signature; + } +} + +Object.defineProperty( + TransactionExpiredBlockheightExceededError.prototype, + 'name', + { + value: 'TransactionExpiredBlockheightExceededError', + }, +); + +export class TransactionExpiredTimeoutError extends Error { + signature: string; + + constructor(signature: string, timeoutSeconds: number) { + super( + `Transaction was not confirmed in ${timeoutSeconds.toFixed( + 2, + )} seconds. It is ` + + 'unknown if it succeeded or failed. Check signature ' + + `${signature} using the Solana Explorer or CLI tools.`, + ); + this.signature = signature; + } +} + +Object.defineProperty(TransactionExpiredTimeoutError.prototype, 'name', { + value: 'TransactionExpiredTimeoutError', +}); diff --git a/web3.js/test/connection.test.ts b/web3.js/test/connection.test.ts index 7cec3824f..391e69bfe 100644 --- a/web3.js/test/connection.test.ts +++ b/web3.js/test/connection.test.ts @@ -3,6 +3,7 @@ import {Buffer} from 'buffer'; import * as splToken from '@solana/spl-token'; import {expect, use} from 'chai'; import chaiAsPromised from 'chai-as-promised'; +import {useFakeTimers, SinonFakeTimers} from 'sinon'; import { Authorized, @@ -43,13 +44,21 @@ import { mockRpcResponse, mockServer, } from './mocks/rpc-http'; -import {stubRpcWebSocket, restoreRpcWebSocket} from './mocks/rpc-websockets'; -import type {TransactionSignature} from '../src/transaction'; +import { + stubRpcWebSocket, + restoreRpcWebSocket, + mockRpcMessage, +} from './mocks/rpc-websockets'; +import {TransactionInstruction, TransactionSignature} from '../src/transaction'; import type { SignatureStatus, TransactionError, KeyedAccountInfo, } from '../src/connection'; +import { + TransactionExpiredBlockheightExceededError, + TransactionExpiredTimeoutError, +} from '../src/util/tx-expiry-custom-errors'; use(chaiAsPromised); @@ -884,22 +893,257 @@ describe('Connection', function () { }); } - it('confirm transaction - error', async () => { - const badTransactionSignature = 'bad transaction signature'; + if (process.env.TEST_LIVE) { + describe('transaction confirmation (live)', () => { + let connection: Connection; + beforeEach(() => { + connection = new Connection(url, 'confirmed'); + }); - await expect( - connection.confirmTransaction(badTransactionSignature), - ).to.be.rejectedWith('signature must be base58 encoded'); + describe('blockheight based transaction confirmation', () => { + let latestBlockhash: {blockhash: string; lastValidBlockHeight: number}; + let signature: string; - await mockRpcResponse({ - method: 'getSignatureStatuses', - params: [[badTransactionSignature]], - error: mockErrorResponse, + beforeEach(async function () { + this.timeout(60 * 1000); + const keypair = Keypair.generate(); + const [ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + _, + blockhash, + ] = await Promise.all([ + connection.confirmTransaction( + await connection.requestAirdrop( + keypair.publicKey, + LAMPORTS_PER_SOL, + ), + ), + helpers.latestBlockhash({connection}), + ]); + latestBlockhash = blockhash; + const ix = new TransactionInstruction({ + keys: [ + { + pubkey: keypair.publicKey, + isSigner: true, + isWritable: true, + }, + ], + programId: new PublicKey( + 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr', + ), + data: Buffer.from('Hello world', 'utf8'), + }); + + const transaction = new Transaction({ + ...latestBlockhash, + }); + transaction.add(ix); + transaction.sign(keypair); + signature = await connection.sendTransaction(transaction, [keypair]); + }); + + it('confirms transactions using the last valid blockheight strategy', async () => { + let result = await connection.confirmTransaction( + { + signature, + ...latestBlockhash, + }, + 'processed', + ); + expect(result.value).to.have.property('err', null); + }).timeout(60 * 1000); + + it('throws when confirming using a blockhash whose last valid blockheight has passed', async () => { + const confirmationPromise = connection.confirmTransaction({ + signature, + ...latestBlockhash, + lastValidBlockHeight: (await connection.getBlockHeight()) - 1, // Simulate the blockheight having passed. + }); + expect(confirmationPromise).to.eventually.be.rejectedWith( + TransactionExpiredBlockheightExceededError, + ); + }).timeout(60 * 1000); + }); }); + } - await expect( - connection.getSignatureStatus(badTransactionSignature), - ).to.be.rejectedWith(mockErrorMessage); + if (!process.env.TEST_LIVE) { + describe('transaction confirmation (mock)', () => { + let clock: SinonFakeTimers; + beforeEach(() => { + clock = useFakeTimers(); + }); + + afterEach(() => { + clock.restore(); + }); + + it('confirm transaction - timeout expired', async () => { + const mockSignature = + 'w2Zeq8YkpyB463DttvfzARD7k9ZxGEwbsEw4boEK7jDp3pfoxZbTdLFSsEPhzXhpCcjGi2kHtHFobgX49MMhbWt'; + + await mockRpcMessage({ + method: 'signatureSubscribe', + params: [mockSignature, {commitment: 'finalized'}], + result: new Promise(() => {}), + }); + const timeoutPromise = connection.confirmTransaction(mockSignature); + + // Advance the clock past all waiting timers, notably the expiry timer. + clock.runAllAsync(); + + await expect(timeoutPromise).to.be.rejectedWith( + TransactionExpiredTimeoutError, + ); + }); + + it('confirm transaction - block height exceeded', async () => { + const mockSignature = + '4oCEqwGrMdBeMxpzuWiukCYqSfV4DsSKXSiVVCh1iJ6pS772X7y219JZP3mgqBz5PhsvprpKyhzChjYc3VSBQXzG'; + + await mockRpcMessage({ + method: 'signatureSubscribe', + params: [mockSignature, {commitment: 'finalized'}], + result: new Promise(() => {}), // Never resolve this = never get a response. + }); + + const lastValidBlockHeight = 3; + + // Start the block height at `lastValidBlockHeight - 1`. + await mockRpcResponse({ + method: 'getBlockHeight', + params: [], + value: lastValidBlockHeight - 1, + }); + + const confirmationPromise = connection.confirmTransaction({ + signature: mockSignature, + blockhash: 'sampleBlockhash', + lastValidBlockHeight, + }); + clock.runAllAsync(); + + // Advance the block height to the `lastValidBlockHeight`. + await mockRpcResponse({ + method: 'getBlockHeight', + params: [], + value: lastValidBlockHeight, + }); + clock.runAllAsync(); + + // Advance the block height to `lastValidBlockHeight + 1`, + // past the last valid blockheight for this transaction. + await mockRpcResponse({ + method: 'getBlockHeight', + params: [], + value: lastValidBlockHeight + 1, + }); + clock.runAllAsync(); + await expect(confirmationPromise).to.be.rejectedWith( + TransactionExpiredBlockheightExceededError, + ); + }); + + it('when the `getBlockHeight` method throws an error it does not timeout but rather keeps waiting for a confirmation', async () => { + const mockSignature = + 'LPJ18iiyfz3G1LpNNbcBnBtaS4dVBdPHKrnELqikjER2DcvB4iyTgz43nKQJH3JQAJHuZdM1xVh5Cnc5Hc7LrqC'; + + let resolveResultPromise: (result: SignatureResult) => void; + await mockRpcMessage({ + method: 'signatureSubscribe', + params: [mockSignature, {commitment: 'finalized'}], + result: new Promise(resolve => { + resolveResultPromise = resolve; + }), + }); + + // Simulate a failure to fetch the block height. + let rejectBlockheightPromise: () => void; + await mockRpcResponse({ + method: 'getBlockHeight', + params: [], + value: (() => { + const p = new Promise((_, reject) => { + rejectBlockheightPromise = reject; + }); + p.catch(() => {}); + return p; + })(), + }); + + const confirmationPromise = connection.confirmTransaction({ + signature: mockSignature, + blockhash: 'sampleBlockhash', + lastValidBlockHeight: 3, + }); + + rejectBlockheightPromise(); + clock.runToLastAsync(); + resolveResultPromise({err: null}); + clock.runToLastAsync(); + + expect(confirmationPromise).not.to.eventually.be.rejected; + }); + + it('confirm transaction - block height confirmed', async () => { + const mockSignature = + 'LPJ18iiyfz3G1LpNNbcBnBtaS4dVBdPHKrnELqikjER2DcvB4iyTgz43nKQJH3JQAJHuZdM1xVh5Cnc5Hc7LrqC'; + + let resolveResultPromise: (result: SignatureResult) => void; + await mockRpcMessage({ + method: 'signatureSubscribe', + params: [mockSignature, {commitment: 'finalized'}], + result: new Promise(resolve => { + resolveResultPromise = resolve; + }), + }); + + const lastValidBlockHeight = 3; + + // Advance the block height to the `lastValidBlockHeight`. + await mockRpcResponse({ + method: 'getBlockHeight', + params: [], + value: lastValidBlockHeight, + }); + + const confirmationPromise = connection.confirmTransaction({ + signature: mockSignature, + blockhash: 'sampleBlockhash', + lastValidBlockHeight, + }); + clock.runAllAsync(); + + // Return a signature result in the nick of time. + resolveResultPromise({err: null}); + + await expect(confirmationPromise).to.eventually.deep.equal({ + context: {slot: 11}, + value: {err: null}, + }); + }); + }); + } + + describe('transaction confirmation', () => { + it('confirm transaction - error', async () => { + const badTransactionSignature = 'bad transaction signature'; + + await expect( + connection.confirmTransaction(badTransactionSignature), + ).to.be.rejectedWith('signature must be base58 encoded'); + + await mockRpcResponse({ + method: 'getSignatureStatuses', + params: [[badTransactionSignature]], + error: mockErrorResponse, + }); + + await expect( + connection.getSignatureStatus(badTransactionSignature), + ).to.be.rejectedWith(mockErrorMessage); + }); }); it('get transaction count', async () => { diff --git a/web3.js/test/mocks/rpc-http.ts b/web3.js/test/mocks/rpc-http.ts index 2dd3ad162..149f9b4da 100644 --- a/web3.js/test/mocks/rpc-http.ts +++ b/web3.js/test/mocks/rpc-http.ts @@ -58,6 +58,14 @@ export const mockRpcBatchResponse = async ({ .thenReply(200, JSON.stringify(response)); }; +function isPromise(obj: PromiseLike | T): obj is PromiseLike { + return ( + !!obj && + (typeof obj === 'object' || typeof obj === 'function') && + typeof (obj as any).then === 'function' + ); +} + export const mockRpcResponse = async ({ method, params, @@ -68,23 +76,13 @@ export const mockRpcResponse = async ({ }: { method: string; params: Array; - value?: any; + value?: Promise | any; error?: any; withContext?: boolean; withHeaders?: HttpHeaders; }) => { if (!mockServer) return; - let result = value; - if (withContext) { - result = { - context: { - slot: 11, - }, - value, - }; - } - await mockServer .post('/') .withJsonBodyIncluding({ @@ -93,15 +91,31 @@ export const mockRpcResponse = async ({ params, }) .withHeaders(withHeaders || {}) - .thenReply( - 200, - JSON.stringify({ - jsonrpc: '2.0', - id: '', - error, - result, - }), - ); + .thenCallback(async () => { + try { + const unwrappedValue = isPromise(value) ? await value : value; + let result = unwrappedValue; + if (withContext) { + result = { + context: { + slot: 11, + }, + value: unwrappedValue, + }; + } + return { + statusCode: 200, + json: { + jsonrpc: '2.0', + id: '', + error, + result, + }, + }; + } catch (_e) { + return {statusCode: 500}; + } + }); }; const latestBlockhash = async ({ diff --git a/web3.js/test/transaction.test.ts b/web3.js/test/transaction.test.ts index bded4edb8..f09a3024a 100644 --- a/web3.js/test/transaction.test.ts +++ b/web3.js/test/transaction.test.ts @@ -459,6 +459,26 @@ describe('Transaction', () => { expect(compiledMessage3).not.to.eql(message); }); + it('constructs a transaction with last valid block height', () => { + const blockhash = 'EETubP5AKHgjPAhzPAFcb8BAY1hMH639CWCFTqi3hq1k'; + const lastValidBlockHeight = 1234; + const transaction = new Transaction({ + blockhash, + lastValidBlockHeight, + }); + expect(transaction.recentBlockhash).to.eq(blockhash); + expect(transaction.lastValidBlockHeight).to.eq(lastValidBlockHeight); + }); + + it('constructs a transaction with only a recent blockhash', () => { + const recentBlockhash = 'EETubP5AKHgjPAhzPAFcb8BAY1hMH639CWCFTqi3hq1k'; + const transaction = new Transaction({ + recentBlockhash, + }); + expect(transaction.recentBlockhash).to.eq(recentBlockhash); + expect(transaction.lastValidBlockHeight).to.be.undefined; + }); + it('serialize unsigned transaction', () => { const sender = Keypair.fromSeed(Uint8Array.from(Array(32).fill(8))); // Arbitrary known account const recentBlockhash = 'EETubP5AKHgjPAhzPAFcb8BAY1hMH639CWCFTqi3hq1k'; // Arbitrary known recentBlockhash diff --git a/web3.js/yarn.lock b/web3.js/yarn.lock index d7df7f790..2be918aa4 100644 --- a/web3.js/yarn.lock +++ b/web3.js/yarn.lock @@ -844,7 +844,8 @@ "@colors/colors@1.5.0": version "1.5.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== "@commitlint/cli@^16.2.4": version "16.2.4" @@ -1032,7 +1033,8 @@ "@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== "@graphql-tools/schema@^7.1.5": version "7.1.5" @@ -1214,7 +1216,8 @@ "@npmcli/arborist@^2.3.0", "@npmcli/arborist@^2.5.0": version "2.10.0" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-2.10.0.tgz#424c2d73a7ae59c960b0cc7f74fed043e4316c2c" + resolved "https://registry.npmjs.org/@npmcli/arborist/-/arborist-2.10.0.tgz#424c2d73a7ae59c960b0cc7f74fed043e4316c2c" + integrity sha512-CLnD+zXG9oijEEzViimz8fbOoFVb7hoypiaf7p6giJhvYtrxLAyY3cZAMPIFQvsG731+02eMDp3LqVBNo7BaZA== dependencies: "@isaacs/string-locale-compare" "^1.0.1" "@npmcli/installed-package-contents" "^1.0.7" @@ -1251,15 +1254,18 @@ "@npmcli/ci-detect@*": version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-2.0.0.tgz#e63c91bcd4185ac1e85720a34fc48e164ece5b89" + resolved "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-2.0.0.tgz#e63c91bcd4185ac1e85720a34fc48e164ece5b89" + integrity sha512-8yQtQ9ArHh/TzdUDKQwEvwCgpDuhSWTDAbiKMl3854PcT+Dk4UmWaiawuFTLy9n5twzXOBXVflWe+90/ffXQrA== "@npmcli/ci-detect@^1.3.0": version "1.4.0" - resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-1.4.0.tgz#18478bbaa900c37bfbd8a2006a6262c62e8b0fe1" + resolved "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-1.4.0.tgz#18478bbaa900c37bfbd8a2006a6262c62e8b0fe1" + integrity sha512-3BGrt6FLjqM6br5AhWRKTr3u5GIVkjRYeAFrMp3HjnfICrg4xOrVRwFavKT6tsp++bq5dluL5t8ME/Nha/6c1Q== "@npmcli/config@*": version "4.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-4.1.0.tgz#5c92e5ded2a44baf76b94926646329c3b39e79b8" + resolved "https://registry.npmjs.org/@npmcli/config/-/config-4.1.0.tgz#5c92e5ded2a44baf76b94926646329c3b39e79b8" + integrity sha512-cPQmIQ2Q0vuOfrenrA3isikdMFMAHgzlXV+EmvZ8f2JeJsU5xTU2bG7ipXECiMvPF9nM+QDnMLuIg8QLw9H4xg== dependencies: "@npmcli/map-workspaces" "^2.0.2" ini "^3.0.0" @@ -1278,7 +1284,8 @@ "@npmcli/fs@^1.0.0": version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" + integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== dependencies: "@gar/promisify" "^1.0.1" semver "^7.3.5" @@ -1286,13 +1293,15 @@ "@npmcli/fs@^2.1.0": version "2.1.0" resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz" + integrity sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ== dependencies: "@gar/promisify" "^1.1.3" semver "^7.3.5" "@npmcli/git@^2.0.7", "@npmcli/git@^2.1.0": version "2.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-2.1.0.tgz#2fbd77e147530247d37f325930d457b3ebe894f6" + resolved "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz#2fbd77e147530247d37f325930d457b3ebe894f6" + integrity sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw== dependencies: "@npmcli/promise-spawn" "^1.3.2" lru-cache "^6.0.0" @@ -1306,6 +1315,7 @@ "@npmcli/git@^3.0.0": version "3.0.1" resolved "https://registry.npmjs.org/@npmcli/git/-/git-3.0.1.tgz" + integrity sha512-UU85F/T+F1oVn3IsB/L6k9zXIMpXBuUBE25QDH0SsURwT6IOBqkC7M16uqo2vVZIyji3X1K4XH9luip7YekH1A== dependencies: "@npmcli/promise-spawn" "^3.0.0" lru-cache "^7.4.4" @@ -1344,7 +1354,8 @@ "@npmcli/metavuln-calculator@^1.1.0": version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-1.1.1.tgz#2f95ff3c6d88b366dd70de1c3f304267c631b458" + resolved "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-1.1.1.tgz#2f95ff3c6d88b366dd70de1c3f304267c631b458" + integrity sha512-9xe+ZZ1iGVaUovBVFI9h3qW+UuECUzhvZPxK9RaEA2mjU26o5D0JloGYWwLYvQELJNmBdQB6rrpuN8jni6LwzQ== dependencies: cacache "^15.0.5" pacote "^11.1.11" @@ -1353,6 +1364,7 @@ "@npmcli/metavuln-calculator@^3.0.1": version "3.1.0" resolved "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.0.tgz" + integrity sha512-Q5fbQqGDlYqk7kWrbg6E2j/mtqQjZop0ZE6735wYA1tYNHguIDjAuWs+kFb5rJCkLIlXllfapvsyotYKiZOTBA== dependencies: cacache "^16.0.0" json-parse-even-better-errors "^2.3.1" @@ -1379,11 +1391,13 @@ "@npmcli/node-gyp@^1.0.1", "@npmcli/node-gyp@^1.0.2": version "1.0.3" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz#a912e637418ffc5f2db375e93b85837691a43a33" + resolved "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz#a912e637418ffc5f2db375e93b85837691a43a33" + integrity sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA== "@npmcli/node-gyp@^2.0.0": version "2.0.0" resolved "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz" + integrity sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A== "@npmcli/package-json@*", "@npmcli/package-json@^1.0.1": version "1.0.1" @@ -1393,19 +1407,22 @@ "@npmcli/package-json@^2.0.0": version "2.0.0" - resolved "https://registry.npmjs.org/@npmcli/package-json/-/package-json-2.0.0.tgz" + resolved "https://registry.npmjs.org/@npmcli/package-json/-/package-json-2.0.0.tgz#3bbcf4677e21055adbe673d9f08c9f9cde942e4a" + integrity sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA== dependencies: json-parse-even-better-errors "^2.3.1" "@npmcli/promise-spawn@^1.2.0", "@npmcli/promise-spawn@^1.3.2": version "1.3.2" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz#42d4e56a8e9274fba180dabc0aea6e38f29274f5" + resolved "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz#42d4e56a8e9274fba180dabc0aea6e38f29274f5" + integrity sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg== dependencies: infer-owner "^1.0.4" "@npmcli/promise-spawn@^3.0.0": version "3.0.0" resolved "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz" + integrity sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g== dependencies: infer-owner "^1.0.4" @@ -1421,6 +1438,7 @@ "@npmcli/run-script@^3.0.0", "@npmcli/run-script@^3.0.1": version "3.0.2" resolved "https://registry.npmjs.org/@npmcli/run-script/-/run-script-3.0.2.tgz" + integrity sha512-vdjD/PMBl+OX9j9C9irx5sCCIKfp2PWkpPNH9zxvlJAfSZ3Qp5aU412v+O3PFJl3R1PFNwuyChCqHg4ma6ci2Q== dependencies: "@npmcli/node-gyp" "^2.0.0" "@npmcli/promise-spawn" "^3.0.0" @@ -2021,7 +2039,8 @@ agent-base@6, agent-base@^6.0.0, agent-base@^6.0.2: agentkeepalive@^4.1.3, agentkeepalive@^4.2.1: version "4.2.1" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" + integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== dependencies: debug "^4.1.0" depd "^1.1.2" @@ -2107,7 +2126,8 @@ anymatch@~3.1.1: append-transform@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz" + resolved "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz#99d9d29c7b38391e6f428d28ce136551f0b77e12" + integrity sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg== dependencies: default-require-extensions "^3.0.0" @@ -2126,6 +2146,7 @@ archy@*, archy@^1.0.0: are-we-there-yet@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" + integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== dependencies: delegates "^1.0.0" readable-stream "^3.6.0" @@ -2133,13 +2154,15 @@ are-we-there-yet@^2.0.0: are-we-there-yet@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz" + integrity sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw== dependencies: delegates "^1.0.0" readable-stream "^3.6.0" are-we-there-yet@~1.1.2: version "1.1.7" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" + integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== dependencies: delegates "^1.0.0" readable-stream "^2.0.6" @@ -2206,7 +2229,8 @@ asap@^2.0.0: asn1@~0.2.3: version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== dependencies: safer-buffer "~2.1.0" @@ -2484,11 +2508,13 @@ builtin-modules@^3.1.0: builtins@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= builtins@^5.0.0: version "5.0.1" - resolved "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz" + resolved "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" + integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== dependencies: semver "^7.0.0" @@ -2564,11 +2590,13 @@ call-bind@^1.0.0, call-bind@^1.0.2: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camel-case@4.1.2: version "4.1.2" - resolved "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz" + resolved "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== dependencies: pascal-case "^3.1.2" tslib "^2.0.3" @@ -2683,6 +2711,7 @@ cli-columns@*: cli-table3@*: version "0.6.2" resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz" + integrity sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw== dependencies: string-width "^4.2.0" optionalDependencies: @@ -2732,7 +2761,8 @@ cmd-shim@^4.0.1: cmd-shim@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-5.0.0.tgz#8d0aaa1a6b0708630694c4dbde070ed94c707724" + resolved "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz" + integrity sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw== dependencies: mkdirp-infer-owner "^2.0.0" @@ -3169,7 +3199,8 @@ doctrine@^2.1.0: doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" @@ -3187,7 +3218,8 @@ duplexer2@~0.1.0: duplexer@~0.1.1: version "0.1.2" - resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" + resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== duplexify@^3.5.1: version "3.7.1" @@ -3771,15 +3803,18 @@ flat@^5.0.2: flatted@^3.1.0: version "3.2.5" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" + integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== follow-redirects@^1.0.0, follow-redirects@^1.14.0: - version "1.14.9" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz" + version "1.15.0" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.0.tgz#06441868281c86d0dda4ad8bdaead2d02dca89d4" + integrity sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ== foreground-child@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" + integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== dependencies: cross-spawn "^7.0.0" signal-exit "^3.0.2" @@ -3791,6 +3826,7 @@ forever-agent@~0.6.1: form-data@~2.3.2: version "2.3.3" resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== dependencies: asynckit "^0.4.0" combined-stream "^1.0.6" @@ -3867,6 +3903,7 @@ functional-red-black-tree@^1.0.1: gauge@^3.0.0: version "3.0.2" resolved "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" + integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== dependencies: aproba "^1.0.3 || ^2.0.0" color-support "^1.1.2" @@ -3881,6 +3918,7 @@ gauge@^3.0.0: gauge@^4.0.3: version "4.0.4" resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== dependencies: aproba "^1.0.3 || ^2.0.0" color-support "^1.1.3" @@ -4008,6 +4046,7 @@ glob@7.1.6: glob@^8.0.1: version "8.0.1" resolved "https://registry.npmjs.org/glob/-/glob-8.0.1.tgz" + integrity sha512-cF7FYZZ47YzmCu7dDy50xSRRfO3ErRfrXuLZcNIuyiJEco0XSrGtuilG19L5xp3NcwTx7Gn+X6Tv3fmsUPTbow== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -4046,6 +4085,7 @@ globby@^11.0.0, globby@^11.0.1, globby@^11.0.3: graceful-fs@*, graceful-fs@^4.2.3, graceful-fs@^4.2.6: version "4.2.10" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: version "4.2.9" @@ -4162,6 +4202,7 @@ hook-std@^2.0.0: hosted-git-info@*, hosted-git-info@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz" + integrity sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q== dependencies: lru-cache "^7.5.1" @@ -4315,6 +4356,7 @@ ignore-walk@3.0.4, ignore-walk@^3.0.3: ignore-walk@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz" + integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== dependencies: minimatch "^5.0.1" @@ -4370,7 +4412,8 @@ ini@^1.3.4, ini@~1.3.0: ini@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/ini/-/ini-3.0.0.tgz#2f6de95006923aa75feed8894f5686165adc08f1" + resolved "https://registry.npmjs.org/ini/-/ini-3.0.0.tgz#2f6de95006923aa75feed8894f5686165adc08f1" + integrity sha512-TxYQaeNW/N8ymDvwAxPyRbhMBtnEwuvaTYpOQkFx1nSeusgezHniEc/l35Vo4iCq/mMiTJbpD7oYxN98hFlfmw== init-package-json@*: version "2.0.5" @@ -4770,7 +4813,8 @@ json-schema-traverse@^1.0.0: json-schema@0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" @@ -4818,7 +4862,8 @@ jsonparse@^1.2.0, jsonparse@^1.3.1: jsprim@^1.2.2: version "1.4.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== dependencies: assert-plus "1.0.0" extsprintf "1.3.0" @@ -4827,19 +4872,23 @@ jsprim@^1.2.2: just-diff-apply@^3.0.0: version "3.1.2" - resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-3.1.2.tgz#710d8cda00c65dc4e692df50dbe9bac5581c2193" + resolved "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-3.1.2.tgz#710d8cda00c65dc4e692df50dbe9bac5581c2193" + integrity sha512-TCa7ZdxCeq6q3Rgms2JCRHTCfWAETPZ8SzYUbkYF6KR3I03sN29DaOIC+xyWboIcMvjAsD5iG2u/RWzHD8XpgQ== just-diff-apply@^5.2.0: version "5.2.0" resolved "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.2.0.tgz" + integrity sha512-unjtin7rnng0KUpE4RPWwTl8iwWiZuyZqOQ+vm8orV6aIXX8mHN8zlKCPPbOycfDNuLh2PBazbFhNoDJv4S/FA== just-diff@^3.0.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-3.1.1.tgz#d50c597c6fd4776495308c63bdee1b6839082647" + resolved "https://registry.npmjs.org/just-diff/-/just-diff-3.1.1.tgz#d50c597c6fd4776495308c63bdee1b6839082647" + integrity sha512-sdMWKjRq8qWZEjDcVA6llnUT8RDEBIfOiGpYFPYa9u+2c39JCsejktSP7mj5eRid5EIvTzIpQ2kDOCw1Nq9BjQ== just-diff@^5.0.1: version "5.0.2" resolved "https://registry.npmjs.org/just-diff/-/just-diff-5.0.2.tgz" + integrity sha512-uGd6F+eIZ4T95EinP8ubINGkbEy3jrgBym+6LjW+ja1UG1WQIcEcQ6FLeyXtVJZglk+bj7fvEn+Cu2LBxkgiYQ== just-extend@^4.0.2: version "4.2.1" @@ -4885,8 +4934,8 @@ libnpmdiff@*: binary-extensions "^2.2.0" diff "^5.0.0" minimatch "^3.0.4" - npm-package-arg "^8.1.4" - pacote "^11.3.4" + npm-package-arg "^8.1.1" + pacote "^11.3.0" tar "^6.1.0" libnpmexec@*: @@ -5144,6 +5193,7 @@ make-fetch-happen@*, make-fetch-happen@^9.0.1: make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6: version "10.1.3" resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.3.tgz" + integrity sha512-s/UjmGjUHn9m52cctFhN2ITObbT+axoUhgeir8xGrOlPbKDyJsdhQzb8PGncPQQ28uduHybFJ6Iumy2OZnreXw== dependencies: agentkeepalive "^4.2.1" cacache "^16.0.2" @@ -5330,6 +5380,7 @@ minipass-fetch@^1.3.0, minipass-fetch@^1.3.2: minipass-fetch@^2.0.3: version "2.1.0" resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz" + integrity sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg== dependencies: minipass "^3.1.6" minipass-sized "^1.0.3" @@ -5364,7 +5415,8 @@ minipass-sized@^1.0.3: minipass@*, minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3, minipass@^3.1.6: version "3.1.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.6.tgz#3b8150aa688a711a1521af5e8779c1d3bb4f45ee" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz#3b8150aa688a711a1521af5e8779c1d3bb4f45ee" + integrity sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ== dependencies: yallist "^4.0.0" @@ -5577,6 +5629,7 @@ node-gyp@*, node-gyp@^7.1.0: node-gyp@^9.0.0: version "9.0.0" resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-9.0.0.tgz" + integrity sha512-Ma6p4s+XCTPxCuAMrOA/IJRmVy16R8Sdhtwl4PrCr7IBlj4cPawF0vg/l7nOT1jPbuNS7lIRJpBSvVsXwEZuzw== dependencies: env-paths "^2.2.0" glob "^7.1.4" @@ -5625,7 +5678,8 @@ normalize-package-data@^3.0.0, normalize-package-data@^3.0.2: normalize-package-data@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-4.0.0.tgz#1122d5359af21d4cd08718b92b058a658594177c" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz#1122d5359af21d4cd08718b92b058a658594177c" + integrity sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g== dependencies: hosted-git-info "^5.0.0" is-core-module "^2.8.1" @@ -5661,6 +5715,7 @@ npm-install-checks@*, npm-install-checks@^4.0.0: npm-install-checks@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz" + integrity sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA== dependencies: semver "^7.1.1" @@ -5679,6 +5734,7 @@ npm-package-arg@*, npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-a npm-package-arg@^9.0.0, npm-package-arg@^9.0.1: version "9.0.2" resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.0.2.tgz" + integrity sha512-v/miORuX8cndiOheW8p2moNuPJ7QhcFh9WGlTorruG8hXSA23vMTEp5hTCmDxic0nD8KHhj/NQgFuySD3GYY3g== dependencies: hosted-git-info "^5.0.0" semver "^7.3.5" @@ -5686,7 +5742,8 @@ npm-package-arg@^9.0.0, npm-package-arg@^9.0.1: npm-packlist@^2.1.4: version "2.2.2" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-2.2.2.tgz#076b97293fa620f632833186a7a8f65aaa6148c8" + resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz#076b97293fa620f632833186a7a8f65aaa6148c8" + integrity sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg== dependencies: glob "^7.1.6" ignore-walk "^3.0.3" @@ -5696,6 +5753,7 @@ npm-packlist@^2.1.4: npm-packlist@^5.0.0: version "5.0.3" resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.0.3.tgz" + integrity sha512-KuSbzgejxdsAWbNNyEs8EsyDHsO+nJF6k+9WuWzFbSNh5tFHs4lDApXw7kntKpuehfp8lKRzJkMtz0+WmGvTIw== dependencies: glob "^8.0.1" ignore-walk "^5.0.1" @@ -5740,6 +5798,7 @@ npm-registry-fetch@*, npm-registry-fetch@^11.0.0: npm-registry-fetch@^13.0.0, npm-registry-fetch@^13.0.1: version "13.1.1" resolved "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.1.tgz" + integrity sha512-5p8rwe6wQPLJ8dMqeTnA57Dp9Ox6GH9H60xkyJup07FmVlu3Mk7pf/kIIpl9gaN5bM8NM+UUx3emUWvDNTt39w== dependencies: make-fetch-happen "^10.0.6" minipass "^3.1.6" @@ -5777,76 +5836,76 @@ npm@^7.0.0: version "7.24.2" resolved "https://registry.npmjs.org/npm/-/npm-7.24.2.tgz" dependencies: - "@isaacs/string-locale-compare" "*" - "@npmcli/arborist" "*" - "@npmcli/ci-detect" "*" - "@npmcli/config" "*" - "@npmcli/map-workspaces" "*" - "@npmcli/package-json" "*" - "@npmcli/run-script" "*" - abbrev "*" - ansicolors "*" - ansistyles "*" - archy "*" - cacache "*" - chalk "*" - chownr "*" - cli-columns "*" - cli-table3 "*" - columnify "*" - fastest-levenshtein "*" - glob "*" - graceful-fs "*" - hosted-git-info "*" - ini "*" - init-package-json "*" - is-cidr "*" - json-parse-even-better-errors "*" - libnpmaccess "*" - libnpmdiff "*" - libnpmexec "*" - libnpmfund "*" - libnpmhook "*" - libnpmorg "*" - libnpmpack "*" - libnpmpublish "*" - libnpmsearch "*" - libnpmteam "*" - libnpmversion "*" - make-fetch-happen "*" - minipass "*" - minipass-pipeline "*" - mkdirp "*" - mkdirp-infer-owner "*" - ms "*" - node-gyp "*" - nopt "*" - npm-audit-report "*" - npm-install-checks "*" - npm-package-arg "*" - npm-pick-manifest "*" - npm-profile "*" - npm-registry-fetch "*" - npm-user-validate "*" - npmlog "*" - opener "*" - pacote "*" - parse-conflict-json "*" - qrcode-terminal "*" - read "*" - read-package-json "*" - read-package-json-fast "*" - readdir-scoped-modules "*" - rimraf "*" - semver "*" - ssri "*" - tar "*" - text-table "*" - tiny-relative-date "*" - treeverse "*" - validate-npm-package-name "*" - which "*" - write-file-atomic "*" + "@isaacs/string-locale-compare" "^1.1.0" + "@npmcli/arborist" "^2.9.0" + "@npmcli/ci-detect" "^1.2.0" + "@npmcli/config" "^2.3.0" + "@npmcli/map-workspaces" "^1.0.4" + "@npmcli/package-json" "^1.0.1" + "@npmcli/run-script" "^1.8.6" + abbrev "~1.1.1" + ansicolors "~0.3.2" + ansistyles "~0.1.3" + archy "~1.0.0" + cacache "^15.3.0" + chalk "^4.1.2" + chownr "^2.0.0" + cli-columns "^3.1.2" + cli-table3 "^0.6.0" + columnify "~1.5.4" + fastest-levenshtein "^1.0.12" + glob "^7.2.0" + graceful-fs "^4.2.8" + hosted-git-info "^4.0.2" + ini "^2.0.0" + init-package-json "^2.0.5" + is-cidr "^4.0.2" + json-parse-even-better-errors "^2.3.1" + libnpmaccess "^4.0.2" + libnpmdiff "^2.0.4" + libnpmexec "^2.0.1" + libnpmfund "^1.1.0" + libnpmhook "^6.0.2" + libnpmorg "^2.0.2" + libnpmpack "^2.0.1" + libnpmpublish "^4.0.1" + libnpmsearch "^3.1.1" + libnpmteam "^2.0.3" + libnpmversion "^1.2.1" + make-fetch-happen "^9.1.0" + minipass "^3.1.3" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + mkdirp-infer-owner "^2.0.0" + ms "^2.1.2" + node-gyp "^7.1.2" + nopt "^5.0.0" + npm-audit-report "^2.1.5" + npm-install-checks "^4.0.0" + npm-package-arg "^8.1.5" + npm-pick-manifest "^6.1.1" + npm-profile "^5.0.3" + npm-registry-fetch "^11.0.0" + npm-user-validate "^1.0.1" + npmlog "^5.0.1" + opener "^1.5.2" + pacote "^11.3.5" + parse-conflict-json "^1.1.1" + qrcode-terminal "^0.12.0" + read "~1.0.7" + read-package-json "^4.1.1" + read-package-json-fast "^2.0.3" + readdir-scoped-modules "^1.1.0" + rimraf "^3.0.2" + semver "^7.3.5" + ssri "^8.0.1" + tar "^6.1.11" + text-table "~0.2.0" + tiny-relative-date "^1.3.0" + treeverse "^1.0.4" + validate-npm-package-name "~3.0.0" + which "^2.0.2" + write-file-atomic "^3.0.3" npmlog@*: version "5.0.1" @@ -5869,6 +5928,7 @@ npmlog@^4.1.2: npmlog@^6.0.0, npmlog@^6.0.2: version "6.0.2" resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== dependencies: are-we-there-yet "^3.0.0" console-control-strings "^1.1.0" @@ -6176,7 +6236,8 @@ parse-conflict-json@*, parse-conflict-json@^1.1.1: parse-conflict-json@^2.0.1: version "2.0.2" - resolved "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz" + resolved "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz#3d05bc8ffe07d39600dc6436c6aefe382033d323" + integrity sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA== dependencies: json-parse-even-better-errors "^2.3.1" just-diff "^5.0.1" @@ -6342,7 +6403,8 @@ proc-log@^1.0.0: proc-log@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685" + resolved "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685" + integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw== process-nextick-args@~2.0.0: version "2.0.1" @@ -6426,7 +6488,8 @@ qs@6.9.7, qs@^6.4.0: qs@~6.5.2: version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + resolved "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== queue-microtask@^1.2.2: version "1.2.3" @@ -6478,7 +6541,8 @@ read-cmd-shim@^2.0.0: read-cmd-shim@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz#62b8c638225c61e6cc607f8f4b779f3b8238f155" + resolved "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz" + integrity sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog== read-package-json-fast@*, read-package-json-fast@^2.0.1, read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: version "2.0.3" @@ -6489,7 +6553,8 @@ read-package-json-fast@*, read-package-json-fast@^2.0.1, read-package-json-fast@ read-package-json@*, read-package-json@^5.0.0: version "5.0.1" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-5.0.1.tgz#1ed685d95ce258954596b13e2e0e76c7d0ab4c26" + resolved "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz#1ed685d95ce258954596b13e2e0e76c7d0ab4c26" + integrity sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg== dependencies: glob "^8.0.1" json-parse-even-better-errors "^2.3.1" @@ -6498,7 +6563,8 @@ read-package-json@*, read-package-json@^5.0.0: read-package-json@^4.1.1: version "4.1.2" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-4.1.2.tgz#b444d047de7c75d4a160cb056d00c0693c1df703" + resolved "https://registry.npmjs.org/read-package-json/-/read-package-json-4.1.2.tgz#b444d047de7c75d4a160cb056d00c0693c1df703" + integrity sha512-Dqer4pqzamDE2O4M55xp1qZMuLPqi4ldk2ya648FOMHRjwMzFhuxVrG04wd0c38IsvkVdr3vgHI6z+QTPdAjrQ== dependencies: glob "^7.1.1" json-parse-even-better-errors "^2.3.0" @@ -7039,7 +7105,8 @@ socks-proxy-agent@5: socks-proxy-agent@^6.0.0, socks-proxy-agent@^6.1.1: version "6.2.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.0.tgz#f6b5229cc0cbd6f2f202d9695f09d871e951c85e" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.0.tgz#f6b5229cc0cbd6f2f202d9695f09d871e951c85e" + integrity sha512-wWqJhjb32Q6GsrUqzuFkukxb/zzide5quXYcMVpIjxalDBBYy2nqKCFQ/9+Ie4dvOYSQdOk3hUlZSdzZOd3zMQ== dependencies: agent-base "^6.0.2" debug "^4.3.3" @@ -7142,7 +7209,8 @@ sprintf-js@~1.0.2: sshpk@^1.7.0: version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" + resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" + integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -7163,6 +7231,7 @@ ssri@*, ssri@^8.0.0, ssri@^8.0.1: ssri@^9.0.0: version "9.0.0" resolved "https://registry.npmjs.org/ssri/-/ssri-9.0.0.tgz" + integrity sha512-Y1Z6J8UYnexKFN1R/hxUaYoY2LVdKEzziPmVAFKiKX8fiwvCJTVzn/xYE9TEWod5OVyNfIHHuVfIEuBClL/uJQ== dependencies: minipass "^3.1.1" @@ -7477,6 +7546,7 @@ toidentifier@1.0.1: tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== dependencies: psl "^1.1.28" punycode "^2.1.1" @@ -7495,7 +7565,8 @@ treeverse@*, treeverse@^1.0.4: treeverse@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/treeverse/-/treeverse-2.0.0.tgz" + resolved "https://registry.npmjs.org/treeverse/-/treeverse-2.0.0.tgz#036dcef04bc3fd79a9b79a68d4da03e882d8a9ca" + integrity sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A== trim-newlines@^3.0.0: version "3.0.1" @@ -7790,6 +7861,7 @@ validate-npm-package-name@*, validate-npm-package-name@^3.0.0: validate-npm-package-name@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz" + integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== dependencies: builtins "^5.0.0" @@ -7895,7 +7967,8 @@ wide-align@1.1.3: wide-align@^1.1.0, wide-align@^1.1.2, wide-align@^1.1.5: version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: string-width "^1.0.2 || 2 || 3 || 4" @@ -7942,7 +8015,8 @@ write-file-atomic@*, write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: write-file-atomic@^4.0.0: version "4.0.1" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz#9faa33a964c1c85ff6f849b80b42a88c2c537c8f" + integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== dependencies: imurmurhash "^0.1.4" signal-exit "^3.0.7"