From 54e5b796d16b92f4779725a29f0c935fd833a758 Mon Sep 17 00:00:00 2001 From: alban bertolini Date: Mon, 9 Mar 2026 12:52:27 +0100 Subject: [PATCH 1/4] feat(mcp-server): add generate-token CLI command Add a CLI subcommand to generate MCP authentication tokens from a Forest Admin Personal Access Token, bypassing the OIDC browser flow. Useful for local dev/test, CI/CD, and headless usage. Usage: npx @forestadmin/mcp-server generate-token \ --env-file .env --rendering-id Supports both OAuth-style tokens (meta.renderingId) and application tokens (isApplicationToken). Env vars can be provided via --env-file or directly as flags. Token lifetime capped at 60 days. Co-Authored-By: Claude Opus 4.6 --- packages/mcp-server/package.json | 1 + packages/mcp-server/src/cli.ts | 107 +- packages/mcp-server/src/generate-token.ts | 303 ++ .../mcp-server/test/generate-token.test.ts | 664 ++++ yarn.lock | 2764 +++++++---------- 5 files changed, 2267 insertions(+), 1572 deletions(-) create mode 100644 packages/mcp-server/src/generate-token.ts create mode 100644 packages/mcp-server/test/generate-token.test.ts diff --git a/packages/mcp-server/package.json b/packages/mcp-server/package.json index c86063b9bd..2e058a8142 100644 --- a/packages/mcp-server/package.json +++ b/packages/mcp-server/package.json @@ -20,6 +20,7 @@ "@forestadmin/forestadmin-client": "1.37.17", "@modelcontextprotocol/sdk": "^1.26.0", "cors": "^2.8.5", + "dotenv": "^17.3.1", "express": "^5.2.1", "jsonapi-serializer": "^3.6.9", "jsonwebtoken": "^9.0.3", diff --git a/packages/mcp-server/src/cli.ts b/packages/mcp-server/src/cli.ts index 75fce46c71..225028591b 100644 --- a/packages/mcp-server/src/cli.ts +++ b/packages/mcp-server/src/cli.ts @@ -1,16 +1,103 @@ #!/usr/bin/env node +import dotenv from 'dotenv'; + +import { generateToken } from './generate-token'; import ForestMCPServer from './server'; -// Start the server when run directly as CLI -const server = new ForestMCPServer({ - forestServerUrl: process.env.FOREST_SERVER_URL || 'https://api.forestadmin.com', - forestAppUrl: process.env.FOREST_APP_URL || 'https://app.forestadmin.com', - envSecret: process.env.FOREST_ENV_SECRET, - authSecret: process.env.FOREST_AUTH_SECRET, -}); +const KNOWN_FLAGS = new Set([ + 'env-secret', + 'auth-secret', + 'token', + 'expires-in', + 'forest-server-url', + 'rendering-id', + 'env-file', +]); + +function parseArgs(args: string[]): Record { + const parsed: Record = {}; + let i = 0; + + while (i < args.length) { + const arg = args[i]; + + if (arg.startsWith('--')) { + const key = arg.slice(2); + + if (!KNOWN_FLAGS.has(key)) { + throw new Error( + `Unknown option: ${arg}. Valid options: ${[...KNOWN_FLAGS] + .map(f => `--${f}`) + .join(', ')}`, + ); + } + + if (i + 1 >= args.length || args[i + 1].startsWith('--')) { + throw new Error(`Option ${arg} requires a value.`); + } + + parsed[key] = args[i + 1]; + i += 2; + } else { + throw new Error(`Unexpected argument: "${arg}". All options must use --flag value format.`); + } + } + + return parsed; +} -server.run().catch(error => { - console.error('[FATAL] Server crashed:', error); +async function handleGenerateToken(args: string[]): Promise { + const parsed = parseArgs(args); + + if (parsed['env-file']) { + const result = dotenv.config({ path: parsed['env-file'], override: true }); + + if (result.error) { + throw new Error(`Failed to load env file "${parsed['env-file']}": ${result.error.message}`); + } + } + + const { token, warnings } = await generateToken({ + envSecret: parsed['env-secret'] || process.env.FOREST_ENV_SECRET, + authSecret: parsed['auth-secret'] || process.env.FOREST_AUTH_SECRET, + token: parsed.token || process.env.FOREST_PERSONAL_TOKEN, + renderingId: parsed['rendering-id'] || process.env.FOREST_RENDERING_ID, + expiresIn: parsed['expires-in'], + forestServerUrl: parsed['forest-server-url'] || process.env.FOREST_SERVER_URL, + }); + + for (const warning of warnings) { + process.stderr.write(`${warning}\n`); + } + + process.stdout.write(`${token}\n`); +} + +const cliArgs = process.argv.slice(2); + +if (cliArgs[0] === 'generate-token') { + handleGenerateToken(cliArgs.slice(1)).catch(error => { + process.stderr.write(`Error: ${error instanceof Error ? error.message : String(error)}\n`); + process.exit(1); + }); +} else if (cliArgs.length > 0 && cliArgs[0] && !cliArgs[0].startsWith('--')) { + process.stderr.write( + `Unknown command: "${cliArgs[0]}". Available commands: generate-token\n` + + `To start the MCP server, run without arguments.\n`, + ); process.exit(1); -}); +} else { + // Start the server when run directly as CLI + const server = new ForestMCPServer({ + forestServerUrl: process.env.FOREST_SERVER_URL || 'https://api.forestadmin.com', + forestAppUrl: process.env.FOREST_APP_URL || 'https://app.forestadmin.com', + envSecret: process.env.FOREST_ENV_SECRET, + authSecret: process.env.FOREST_AUTH_SECRET, + }); + + server.run().catch(error => { + console.error('[FATAL] Server crashed:', error); + process.exit(1); + }); +} diff --git a/packages/mcp-server/src/generate-token.ts b/packages/mcp-server/src/generate-token.ts new file mode 100644 index 0000000000..7cb08beb97 --- /dev/null +++ b/packages/mcp-server/src/generate-token.ts @@ -0,0 +1,303 @@ +import jsonwebtoken from 'jsonwebtoken'; + +export interface GenerateTokenOptions { + envSecret?: string; + authSecret?: string; + token?: string; + renderingId?: string; + expiresIn?: string; + forestServerUrl?: string; +} + +interface UserInfoResponse { + data: { + id: string; + attributes: { + email: string; + first_name: string; + last_name: string; + teams: string[]; + role: string; + permission_level: string; + tags?: Array<{ key: string; value: string }>; + }; + }; +} + +// PAT structure from Forest Admin personal access tokens +interface DecodedPat { + isApplicationToken?: boolean; + data?: { + data?: { + type?: string; + id?: string; + attributes?: { + first_name?: string; + last_name?: string; + email?: string; + }; + }; + }; + meta?: { renderingId?: number }; + exp?: number; +} + +const MAX_TOKEN_LIFETIME_SECONDS = 60 * 24 * 3600; // 60 days + +const ENV_SECRET_REGEX = /^[0-9a-f]{64}$/; + +function parseExpiresIn(value: string): number { + const unitMatch = value.match(/^(\d+)\s*(s|m|h|d)$/); + const multipliers: Record = { s: 1, m: 60, h: 3600, d: 86400 }; + + let seconds: number; + + const plainNumber = parseInt(value, 10); + + if (unitMatch) { + seconds = parseInt(unitMatch[1], 10) * multipliers[unitMatch[2]]; + } else if (!Number.isNaN(plainNumber) && String(plainNumber) === value) { + seconds = plainNumber; + } else { + throw new Error( + `Invalid --expires-in value: "${value}". Use a positive number (seconds) or a duration like "1h", "30m", "7d".`, + ); + } + + if (seconds <= 0) { + throw new Error('--expires-in must be a positive duration.'); + } + + return seconds; +} + +async function fetchUserInfo( + forestServerUrl: string, + renderingId: number, + pat: string, + envSecret: string, +): Promise { + const url = `${forestServerUrl}/liana/v2/renderings/${renderingId}/authorization`; + + let response: Response; + + try { + response = await fetch(url, { + method: 'GET', + headers: { + 'forest-token': pat, + 'forest-secret-key': envSecret, + 'Content-Type': 'application/json', + }, + }); + } catch (error) { + throw new Error( + `Failed to connect to Forest Admin API at ${forestServerUrl}: ` + + `${error instanceof Error ? error.message : String(error)}`, + ); + } + + if (!response.ok) { + if (response.status === 401) { + throw new Error('Authentication failed. Check your env secret and token.'); + } + + if (response.status === 404) { + throw new Error('Could not find rendering. Check that your token matches the environment.'); + } + + let body: string; + + try { + body = await response.text(); + } catch { + body = '(could not read response body)'; + } + + throw new Error(`Forest Admin API error (HTTP ${response.status}): ${body.slice(0, 500)}`); + } + + try { + return (await response.json()) as UserInfoResponse; + } catch (error) { + throw new Error( + `Failed to parse Forest Admin API response: ` + + `${error instanceof Error ? error.message : String(error)}`, + ); + } +} + +function buildUserInfoFromPat(decoded: DecodedPat, renderingId: number): Record { + const attrs = decoded.data?.data?.attributes; + + const userId = Number(decoded.data?.data?.id); + + if (!attrs?.email) { + throw new Error('Token does not contain valid user attributes.'); + } + + if (Number.isNaN(userId)) { + throw new Error('Token does not contain a valid user ID.'); + } + + return { + id: userId, + email: attrs.email, + firstName: attrs.first_name, + lastName: attrs.last_name, + renderingId, + }; +} + +async function buildUserInfoFromApi( + decoded: DecodedPat, + forestServerUrl: string, + pat: string, + envSecret: string, +): Promise<{ userInfo: Record; renderingId: number }> { + if (!decoded.meta?.renderingId) { + throw new Error('Token does not contain a renderingId (expected in meta.renderingId).'); + } + + const { renderingId } = decoded.meta; + const userInfoResponse = await fetchUserInfo(forestServerUrl, renderingId, pat, envSecret); + + if (!userInfoResponse.data?.attributes) { + throw new Error( + 'Unexpected API response structure. This may indicate an API version mismatch.', + ); + } + + const { attributes } = userInfoResponse.data; + const userId = Number(userInfoResponse.data.id); + + if (!attributes.email) { + throw new Error('API response is missing the user email. Cannot generate a valid MCP token.'); + } + + if (Number.isNaN(userId)) { + throw new Error(`API response contains an invalid user ID: "${userInfoResponse.data.id}".`); + } + + return { + renderingId, + userInfo: { + id: userId, + email: attributes.email, + firstName: attributes.first_name, + lastName: attributes.last_name, + team: attributes.teams?.[0], + role: attributes.role, + permissionLevel: attributes.permission_level, + renderingId, + tags: attributes.tags + ? Object.fromEntries(attributes.tags.map(({ key, value }) => [key, value])) + : undefined, + }, + }; +} + +export async function generateToken( + options: GenerateTokenOptions, +): Promise<{ token: string; warnings: string[] }> { + const { + envSecret, + authSecret, + token: pat, + renderingId: renderingIdStr, + expiresIn: expiresInStr = '1h', + forestServerUrl = 'https://api.forestadmin.com', + } = options; + + const warnings: string[] = []; + + if (!envSecret || !ENV_SECRET_REGEX.test(envSecret)) { + throw new Error('FOREST_ENV_SECRET is invalid. Expected 64 hex characters.'); + } + + if (!authSecret) { + throw new Error('FOREST_AUTH_SECRET is required.'); + } + + if (!pat) { + throw new Error( + 'A personal access token is required. Provide it via --token or FOREST_PERSONAL_TOKEN.', + ); + } + + const decoded = jsonwebtoken.decode(pat) as DecodedPat | null; + + if (!decoded || typeof decoded !== 'object') { + throw new Error( + 'Could not decode token. Ensure it is a valid Forest Admin personal access token.', + ); + } + + const now = Math.floor(Date.now() / 1000); + + if (decoded.exp && decoded.exp <= now) { + throw new Error('Token has expired. Please generate a new personal access token.'); + } + + let expiresInSeconds = parseExpiresIn(expiresInStr); + + if (expiresInSeconds > MAX_TOKEN_LIFETIME_SECONDS) { + warnings.push( + `Requested expiration exceeds maximum of 60 days. Capping to ${MAX_TOKEN_LIFETIME_SECONDS} seconds (60 days).`, + ); + expiresInSeconds = MAX_TOKEN_LIFETIME_SECONDS; + } + + if (decoded.exp) { + const patRemainingSeconds = decoded.exp - now; + + if (expiresInSeconds > patRemainingSeconds) { + warnings.push( + 'The requested token lifetime exceeds the remaining lifetime of your personal access token. ' + + 'The MCP token will stop working when the personal access token expires.', + ); + } + } + + let userInfo: Record; + + if (decoded.isApplicationToken) { + // PAT: user info is embedded in the token, renderingId must be provided via flag + const renderingId = renderingIdStr ? Number(renderingIdStr) : undefined; + + if (!renderingId || Number.isNaN(renderingId)) { + throw new Error( + '--rendering-id is required when using a personal access token. ' + + 'Find it in your Forest Admin project URL: app.forestadmin.com///...', + ); + } + + userInfo = buildUserInfoFromPat(decoded, renderingId); + } else { + // OAuth-style token: fetch user info from the API + const result = await buildUserInfoFromApi(decoded, forestServerUrl, pat, envSecret); + userInfo = result.userInfo; + } + + let mcpToken: string; + + try { + mcpToken = jsonwebtoken.sign( + { ...userInfo, serverToken: pat, scopes: ['mcp:read', 'mcp:write', 'mcp:action'] }, + authSecret, + { expiresIn: expiresInSeconds }, + ); + } catch (error) { + throw new Error( + `Failed to sign the MCP token. Check your --auth-secret value. ` + + `Details: ${error instanceof Error ? error.message : String(error)}`, + ); + } + + warnings.push( + 'Warning: The personal access token is embedded in the generated JWT (signed but not encrypted). ' + + 'Avoid storing it in logs or shell history.', + ); + + return { token: mcpToken, warnings }; +} diff --git a/packages/mcp-server/test/generate-token.test.ts b/packages/mcp-server/test/generate-token.test.ts new file mode 100644 index 0000000000..e9613bc493 --- /dev/null +++ b/packages/mcp-server/test/generate-token.test.ts @@ -0,0 +1,664 @@ +import jsonwebtoken from 'jsonwebtoken'; + +import MockServer from './test-utils/mock-server'; +import { generateToken } from '../src/generate-token'; + +const VALID_ENV_SECRET = 'a'.repeat(64); +const AUTH_SECRET = 'my-auth-secret'; +const RENDERING_ID = 42; + +function createOAuthToken( + overrides: Record = {}, + expiresIn: number | null = 3600, +): string { + const payload = { + meta: { renderingId: RENDERING_ID }, + ...overrides, + }; + + if (expiresIn === null) { + return jsonwebtoken.sign(payload, 'pat-secret'); + } + + return jsonwebtoken.sign(payload, 'pat-secret', { expiresIn }); +} + +function createApplicationToken(expiresIn = 3600): string { + const payload = { + isApplicationToken: true, + data: { + data: { + type: 'users', + id: '200', + attributes: { + first_name: 'Jane', + last_name: 'Smith', + email: 'jane@example.com', + }, + }, + }, + }; + + return jsonwebtoken.sign(payload, 'pat-secret', { expiresIn }); +} + +function createUserInfoResponse(id = '100') { + return { + data: { + id, + attributes: { + email: 'john@example.com', + first_name: 'John', + last_name: 'Doe', + teams: ['Operations'], + role: 'admin', + permission_level: 'admin', + tags: [{ key: 'city', value: 'Paris' }], + }, + }, + }; +} + +describe('generateToken', () => { + const originalFetch = global.fetch; + let mockServer: MockServer; + + beforeEach(() => { + mockServer = new MockServer(); + global.fetch = mockServer.fetch; + }); + + afterEach(() => { + mockServer.reset(); + global.fetch = originalFetch; + }); + + describe('input validation', () => { + it('should throw if envSecret is missing', async () => { + await expect( + generateToken({ envSecret: '', authSecret: AUTH_SECRET, token: 'some-token' }), + ).rejects.toThrow('FOREST_ENV_SECRET is invalid. Expected 64 hex characters.'); + }); + + it('should throw if envSecret is not 64 hex characters', async () => { + await expect( + generateToken({ envSecret: 'not-hex', authSecret: AUTH_SECRET, token: 'some-token' }), + ).rejects.toThrow('FOREST_ENV_SECRET is invalid. Expected 64 hex characters.'); + }); + + it('should throw if envSecret contains uppercase hex', async () => { + await expect( + generateToken({ envSecret: 'A'.repeat(64), authSecret: AUTH_SECRET, token: 'some-token' }), + ).rejects.toThrow('FOREST_ENV_SECRET is invalid. Expected 64 hex characters.'); + }); + + it('should throw if authSecret is missing', async () => { + await expect( + generateToken({ envSecret: VALID_ENV_SECRET, authSecret: '', token: 'some-token' }), + ).rejects.toThrow('FOREST_AUTH_SECRET is required.'); + }); + + it('should throw if token is missing', async () => { + await expect( + generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: '' }), + ).rejects.toThrow('A personal access token is required.'); + }); + }); + + describe('token validation', () => { + it('should throw if token is not a valid JWT', async () => { + await expect( + generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: 'not-a-jwt', + }), + ).rejects.toThrow( + 'Could not decode token. Ensure it is a valid Forest Admin personal access token.', + ); + }); + + it('should throw if token has expired', async () => { + const pat = jsonwebtoken.sign({ meta: { renderingId: 1 } }, 'secret', { expiresIn: -1 }); + + await expect( + generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat }), + ).rejects.toThrow('Token has expired. Please generate a new personal access token.'); + }); + }); + + describe('OAuth token flow (meta.renderingId)', () => { + it('should throw if token has no meta.renderingId', async () => { + const pat = jsonwebtoken.sign({ foo: 'bar' }, 'secret', { expiresIn: '1h' }); + + await expect( + generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat }), + ).rejects.toThrow('Token does not contain a renderingId (expected in meta.renderingId).'); + }); + + it('should generate a valid MCP token with correct user info', async () => { + const pat = createOAuthToken(); + mockServer.get(/\/liana\/v2\/renderings\//, createUserInfoResponse()); + + const { token } = await generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: pat, + }); + + const decoded = jsonwebtoken.verify(token, AUTH_SECRET) as Record; + expect(decoded).toEqual( + expect.objectContaining({ + id: 100, + email: 'john@example.com', + firstName: 'John', + lastName: 'Doe', + team: 'Operations', + role: 'admin', + permissionLevel: 'admin', + renderingId: RENDERING_ID, + tags: { city: 'Paris' }, + serverToken: pat, + scopes: ['mcp:read', 'mcp:write', 'mcp:action'], + }), + ); + }); + + it('should call the API with correct headers', async () => { + const pat = createOAuthToken(); + mockServer.get(/\/liana\/v2\/renderings\//, createUserInfoResponse()); + + await generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: pat, + }); + + expect(mockServer.fetch).toHaveBeenCalledWith( + expect.stringContaining(`/liana/v2/renderings/${RENDERING_ID}/authorization`), + expect.objectContaining({ + method: 'GET', + headers: expect.objectContaining({ + 'forest-token': pat, + 'forest-secret-key': VALID_ENV_SECRET, + }), + }), + ); + }); + + it('should handle missing tags in user info response', async () => { + const pat = createOAuthToken(); + const response = createUserInfoResponse(); + delete (response.data.attributes as Record).tags; + mockServer.get(/\/liana\/v2\/renderings\//, response); + + const { token } = await generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: pat, + }); + + const decoded = jsonwebtoken.verify(token, AUTH_SECRET) as Record; + expect(decoded.tags).toBeUndefined(); + }); + + it('should handle user with empty teams array', async () => { + const pat = createOAuthToken(); + const response = createUserInfoResponse(); + response.data.attributes.teams = []; + mockServer.get(/\/liana\/v2\/renderings\//, response); + + const { token } = await generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: pat, + }); + + const decoded = jsonwebtoken.verify(token, AUTH_SECRET) as Record; + expect(decoded.team).toBeUndefined(); + }); + }); + + describe('application token flow (isApplicationToken)', () => { + it('should throw if --rendering-id is missing', async () => { + const pat = createApplicationToken(); + + await expect( + generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: pat, + }), + ).rejects.toThrow('--rendering-id is required when using a personal access token.'); + }); + + it('should throw if --rendering-id is not a number', async () => { + const pat = createApplicationToken(); + + await expect( + generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: pat, + renderingId: 'abc', + }), + ).rejects.toThrow('--rendering-id is required when using a personal access token.'); + }); + + it('should generate a token with user info from PAT', async () => { + const pat = createApplicationToken(); + + const { token } = await generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: pat, + renderingId: '99', + }); + + const decoded = jsonwebtoken.verify(token, AUTH_SECRET) as Record; + expect(decoded).toEqual( + expect.objectContaining({ + id: 200, + email: 'jane@example.com', + firstName: 'Jane', + lastName: 'Smith', + renderingId: 99, + serverToken: pat, + scopes: ['mcp:read', 'mcp:write', 'mcp:action'], + }), + ); + }); + + it('should throw if application token has no email in attributes', async () => { + const pat = jsonwebtoken.sign( + { + isApplicationToken: true, + data: { + data: { type: 'users', id: '200', attributes: { first_name: 'Jane', last_name: 'S' } }, + }, + }, + 'pat-secret', + { expiresIn: 3600 }, + ); + + await expect( + generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: pat, + renderingId: '99', + }), + ).rejects.toThrow('Token does not contain valid user attributes.'); + }); + + it('should throw if application token has no user ID', async () => { + const pat = jsonwebtoken.sign( + { + isApplicationToken: true, + data: { + data: { + type: 'users', + attributes: { first_name: 'J', last_name: 'S', email: 'j@x.com' }, + }, + }, + }, + 'pat-secret', + { expiresIn: 3600 }, + ); + + await expect( + generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: pat, + renderingId: '99', + }), + ).rejects.toThrow('Token does not contain a valid user ID.'); + }); + + it('should not call the Forest Admin API', async () => { + const pat = createApplicationToken(); + + await generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: pat, + renderingId: '99', + }); + + expect(mockServer.fetch).not.toHaveBeenCalled(); + }); + }); + + describe('Forest Admin API errors', () => { + it('should throw on 401 response', async () => { + const pat = createOAuthToken(); + mockServer.get(/\/liana\/v2\/renderings\//, {}, 401); + + await expect( + generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat }), + ).rejects.toThrow('Authentication failed. Check your env secret and token.'); + }); + + it('should throw on 404 response', async () => { + const pat = createOAuthToken(); + mockServer.get(/\/liana\/v2\/renderings\//, {}, 404); + + await expect( + generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat }), + ).rejects.toThrow('Could not find rendering. Check that your token matches the environment.'); + }); + + it('should throw on other API errors', async () => { + const pat = createOAuthToken(); + mockServer.get(/\/liana\/v2\/renderings\//, {}, 500); + + await expect( + generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat }), + ).rejects.toThrow('Forest Admin API error (HTTP 500)'); + }); + + it('should throw on unexpected API response structure', async () => { + const pat = createOAuthToken(); + mockServer.get(/\/liana\/v2\/renderings\//, { data: { id: '100' } }); + + await expect( + generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat }), + ).rejects.toThrow( + 'Unexpected API response structure. This may indicate an API version mismatch.', + ); + }); + + it('should throw if API response is missing user email', async () => { + const pat = createOAuthToken(); + const response = createUserInfoResponse(); + delete (response.data.attributes as Record).email; + mockServer.get(/\/liana\/v2\/renderings\//, response); + + await expect( + generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat }), + ).rejects.toThrow('API response is missing the user email.'); + }); + + it('should throw if API response has invalid user ID', async () => { + const pat = createOAuthToken(); + const response = createUserInfoResponse(); + (response.data as Record).id = undefined; + mockServer.get(/\/liana\/v2\/renderings\//, response); + + await expect( + generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat }), + ).rejects.toThrow('API response contains an invalid user ID'); + }); + + it('should throw on network errors with a clear message', async () => { + const pat = createOAuthToken(); + global.fetch = jest.fn().mockRejectedValue(new Error('getaddrinfo ENOTFOUND')); + + await expect( + generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat }), + ).rejects.toThrow('Failed to connect to Forest Admin API'); + }); + + it('should throw on malformed JSON response', async () => { + const pat = createOAuthToken(); + + global.fetch = jest.fn().mockResolvedValue({ + ok: true, + status: 200, + json: () => Promise.reject(new SyntaxError('Unexpected token <')), + }); + + await expect( + generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat }), + ).rejects.toThrow('Failed to parse Forest Admin API response'); + }); + }); + + describe('expiration and options', () => { + it('should respect expiresIn in the generated token', async () => { + const pat = createOAuthToken({}, 7200); + mockServer.get(/\/liana\/v2\/renderings\//, createUserInfoResponse()); + + const { token } = await generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: pat, + expiresIn: '2h', + }); + + const decoded = jsonwebtoken.verify(token, AUTH_SECRET) as { exp: number; iat: number }; + expect(decoded.exp - decoded.iat).toBe(7200); + }); + + it('should use custom forestServerUrl', async () => { + const pat = createOAuthToken(); + mockServer.get(/\/liana\/v2\/renderings\//, createUserInfoResponse()); + + await generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: pat, + forestServerUrl: 'https://custom.forestadmin.com', + }); + + expect(mockServer.fetch).toHaveBeenCalledWith( + expect.stringContaining('https://custom.forestadmin.com/liana/v2/renderings/'), + expect.anything(), + ); + }); + + it('should default expiresIn to 1h', async () => { + const pat = createOAuthToken(); + mockServer.get(/\/liana\/v2\/renderings\//, createUserInfoResponse()); + + const { token } = await generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: pat, + }); + + const decoded = jsonwebtoken.verify(token, AUTH_SECRET) as { exp: number; iat: number }; + expect(decoded.exp - decoded.iat).toBe(3600); + }); + + it('should cap expiresIn to 60 days and emit a warning', async () => { + const pat = createOAuthToken({}, 90 * 86400); + mockServer.get(/\/liana\/v2\/renderings\//, createUserInfoResponse()); + + const { token, warnings } = await generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: pat, + expiresIn: '90d', + }); + + const decoded = jsonwebtoken.verify(token, AUTH_SECRET) as { exp: number; iat: number }; + expect(decoded.exp - decoded.iat).toBe(60 * 86400); + expect(warnings).toEqual( + expect.arrayContaining([expect.stringContaining('exceeds maximum of 60 days')]), + ); + }); + }); + + describe('warnings', () => { + it('should warn if expiresIn exceeds PAT remaining lifetime', async () => { + const pat = createOAuthToken({}, 1800); + mockServer.get(/\/liana\/v2\/renderings\//, createUserInfoResponse()); + + const { warnings } = await generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: pat, + expiresIn: '2h', + }); + + expect(warnings).toEqual( + expect.arrayContaining([ + expect.stringContaining( + 'requested token lifetime exceeds the remaining lifetime of your personal access token', + ), + ]), + ); + }); + + it('should always include a security warning about embedded PAT', async () => { + const pat = createOAuthToken(); + mockServer.get(/\/liana\/v2\/renderings\//, createUserInfoResponse()); + + const { warnings } = await generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: pat, + }); + + expect(warnings).toEqual( + expect.arrayContaining([ + expect.stringContaining('personal access token is embedded in the generated JWT'), + ]), + ); + }); + + it('should not warn about PAT lifetime when PAT has no exp claim', async () => { + const pat = createOAuthToken({}, null); + mockServer.get(/\/liana\/v2\/renderings\//, createUserInfoResponse()); + + const { warnings } = await generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: pat, + expiresIn: '2h', + }); + + expect(warnings).toHaveLength(1); + expect(warnings[0]).toContain('personal access token is embedded'); + }); + }); + + describe('expiresIn parsing', () => { + it('should reject negative expiresIn with unit suffix', async () => { + const pat = createOAuthToken(); + + await expect( + generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: pat, + expiresIn: '-5h', + }), + ).rejects.toThrow('Invalid --expires-in value'); + }); + + it('should accept seconds notation', async () => { + const pat = createOAuthToken(); + mockServer.get(/\/liana\/v2\/renderings\//, createUserInfoResponse()); + + const { token } = await generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: pat, + expiresIn: '300s', + }); + + const decoded = jsonwebtoken.verify(token, AUTH_SECRET) as { exp: number; iat: number }; + expect(decoded.exp - decoded.iat).toBe(300); + }); + + it('should accept minutes notation', async () => { + const pat = createOAuthToken(); + mockServer.get(/\/liana\/v2\/renderings\//, createUserInfoResponse()); + + const { token } = await generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: pat, + expiresIn: '30m', + }); + + const decoded = jsonwebtoken.verify(token, AUTH_SECRET) as { exp: number; iat: number }; + expect(decoded.exp - decoded.iat).toBe(1800); + }); + + it('should accept days notation', async () => { + const pat = createOAuthToken({}, 10 * 86400); + mockServer.get(/\/liana\/v2\/renderings\//, createUserInfoResponse()); + + const { token } = await generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: pat, + expiresIn: '7d', + }); + + const decoded = jsonwebtoken.verify(token, AUTH_SECRET) as { exp: number; iat: number }; + expect(decoded.exp - decoded.iat).toBe(7 * 86400); + }); + + it('should accept plain number as seconds', async () => { + const pat = createOAuthToken(); + mockServer.get(/\/liana\/v2\/renderings\//, createUserInfoResponse()); + + const { token } = await generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: pat, + expiresIn: '600', + }); + + const decoded = jsonwebtoken.verify(token, AUTH_SECRET) as { exp: number; iat: number }; + expect(decoded.exp - decoded.iat).toBe(600); + }); + + it('should reject invalid expiresIn format', async () => { + const pat = createOAuthToken(); + + await expect( + generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: pat, + expiresIn: 'invalid', + }), + ).rejects.toThrow('Invalid --expires-in value'); + }); + + it('should reject zero expiresIn', async () => { + const pat = createOAuthToken(); + + await expect( + generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: pat, + expiresIn: '0', + }), + ).rejects.toThrow('--expires-in must be a positive duration.'); + }); + + it('should reject negative expiresIn', async () => { + const pat = createOAuthToken(); + + await expect( + generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: pat, + expiresIn: '-1', + }), + ).rejects.toThrow('--expires-in must be a positive duration.'); + }); + + it('should reject zero duration with unit', async () => { + const pat = createOAuthToken(); + + await expect( + generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: pat, + expiresIn: '0h', + }), + ).rejects.toThrow('--expires-in must be a positive duration.'); + }); + }); +}); diff --git a/yarn.lock b/yarn.lock index 023ddb64f2..ecc0cd567e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,34 +7,6 @@ resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== -"@actions/core@^2.0.0": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@actions/core/-/core-2.0.2.tgz#81c59e1f3437660d2148a064c1ba8e99931f2cf7" - integrity sha512-Ast1V7yHbGAhplAsuVlnb/5J8Mtr/Zl6byPPL+Qjq3lmfIgWF1ak1iYfF/079cRERiuTALTXkSuEUdZeDCfGtA== - dependencies: - "@actions/exec" "^2.0.0" - "@actions/http-client" "^3.0.1" - -"@actions/exec@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@actions/exec/-/exec-2.0.0.tgz#35e829723389f80e362ec2cc415697ec74362ad8" - integrity sha512-k8ngrX2voJ/RIN6r9xB82NVqKpnMRtxDoiO+g3olkIUpQNqjArXrCQceduQZCQj3P3xm32pChRLqRrtXTlqhIw== - dependencies: - "@actions/io" "^2.0.0" - -"@actions/http-client@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-3.0.1.tgz#0ac91c3abf179a401e23d40abf0d7caa92324268" - integrity sha512-SbGS8c/vySbNO3kjFgSW77n83C4MQx/Yoe+b1hAdpuvfHxnkHzDq2pWljUpAA56Si1Gae/7zjeZsV0CYjmLo/w== - dependencies: - tunnel "^0.0.6" - undici "^5.28.5" - -"@actions/io@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@actions/io/-/io-2.0.0.tgz#3ad1271ba3cd515324f2215e8d4c1c0c3864d65b" - integrity sha512-Jv33IN09XLO+0HS79aaODsvIRyduiF7NY/F6LYeK5oeUmrsz7aFdRphQjFoESF4jS7lMauDOttKALcpapVDIAg== - "@ampproject/remapping@^2.2.0": version "2.2.1" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" @@ -688,7 +660,7 @@ "@smithy/types" "^4.12.1" tslib "^2.6.2" -"@aws-sdk/xml-builder@>=3.972.9", "@aws-sdk/xml-builder@^3.972.6": +"@aws-sdk/xml-builder@^3.972.6": version "3.972.9" resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.972.9.tgz#38a43a0a860c4c73100d727e5b28c43339597b50" integrity sha512-ItnlMgSqkPrUfJs7EsvU/01zw5UeIb2tNPhD09LBLHbg+g+HDiKibSLwpkuz/ZIlz4F2IMn+5XgE4AK/pfPuog== @@ -919,10 +891,10 @@ "@babel/highlight" "^7.22.13" chalk "^2.4.2" -"@babel/code-frame@^7.26.2", "@babel/code-frame@^7.28.6": - version "7.28.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.28.6.tgz#72499312ec58b1e2245ba4a4f550c132be4982f7" - integrity sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q== +"@babel/code-frame@^7.21.4": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.29.0.tgz#7cd7a59f15b3cc0dcd803038f7792712a7d0b15c" + integrity sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw== dependencies: "@babel/helper-validator-identifier" "^7.28.5" js-tokens "^4.0.0" @@ -937,6 +909,15 @@ js-tokens "^4.0.0" picocolors "^1.1.1" +"@babel/code-frame@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.28.6.tgz#72499312ec58b1e2245ba4a4f550c132be4982f7" + integrity sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q== + dependencies: + "@babel/helper-validator-identifier" "^7.28.5" + js-tokens "^4.0.0" + picocolors "^1.1.1" + "@babel/compat-data@^7.22.9": version "7.23.3" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.3.tgz#3febd552541e62b5e883a25eb3effd7c7379db11" @@ -1643,11 +1624,6 @@ ajv-formats "^2.1.1" fast-uri "^2.0.0" -"@fastify/busboy@^2.0.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" - integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== - "@fastify/cors@9.0.1": version "9.0.1" resolved "https://registry.yarnpkg.com/@fastify/cors/-/cors-9.0.1.tgz#9ddb61b4a61e02749c5c54ca29f1c646794145be" @@ -1745,7 +1721,7 @@ object-hash "^3.0.0" uuid "^9.0.0" -"@gar/promisify@^1.0.1": +"@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" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== @@ -1939,12 +1915,17 @@ resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.5.tgz#fe00207e57d5f040e5b18e809c8e7abc3a2ade3a" integrity sha512-ZJpeIYYueOz/i/ONzrfof8g89kNdO2hjGuvULROo3O8rlB2CRtSseE5KeirnyE4t/thAn/EwvS/vuQeJCn+NZg== -"@isaacs/fs-minipass@^4.0.0": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz#2d59ae3ab4b38fb4270bfa23d30f8e2e86c7fe32" - integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w== +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== dependencies: - minipass "^7.0.4" + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" "@isaacs/string-locale-compare@^1.1.0": version "1.1.0" @@ -2599,17 +2580,6 @@ lru-cache "^10.0.1" socks-proxy-agent "^8.0.3" -"@npmcli/agent@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-4.0.0.tgz#2bb2b1c0a170940511554a7986ae2a8be9fedcce" - integrity sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA== - dependencies: - agent-base "^7.1.0" - http-proxy-agent "^7.0.0" - https-proxy-agent "^7.0.1" - lru-cache "^11.2.1" - socks-proxy-agent "^8.0.3" - "@npmcli/arborist@7.5.4": version "7.5.4" resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-7.5.4.tgz#3dd9e531d6464ef6715e964c188e0880c471ac9b" @@ -2651,58 +2621,65 @@ treeverse "^3.0.0" walk-up-path "^3.0.1" -"@npmcli/arborist@^9.1.9": - version "9.1.9" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-9.1.9.tgz#1458850184fa97967263c67c6f34a052ac632b46" - integrity sha512-O/rLeBo64mkUn1zU+1tFDWXvbAA9UXe9eUldwTwRLxOLFx9obqjNoozW65LmYqgWb0DG40i9lNZSv78VX2GKhw== +"@npmcli/arborist@^6.5.0": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-6.5.1.tgz#b378a2e162e9b868d06f8f2c7e87e828de7e63ba" + integrity sha512-cdV8pGurLK0CifZRilMJbm2CZ3H4Snk8PAqOngj5qmgFLjEllMLvScSZ3XKfd+CK8fo/hrPHO9zazy9OYdvmUg== dependencies: "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/fs" "^5.0.0" - "@npmcli/installed-package-contents" "^4.0.0" - "@npmcli/map-workspaces" "^5.0.0" - "@npmcli/metavuln-calculator" "^9.0.2" - "@npmcli/name-from-folder" "^4.0.0" - "@npmcli/node-gyp" "^5.0.0" - "@npmcli/package-json" "^7.0.0" - "@npmcli/query" "^5.0.0" - "@npmcli/redact" "^4.0.0" - "@npmcli/run-script" "^10.0.0" - bin-links "^6.0.0" - cacache "^20.0.1" + "@npmcli/fs" "^3.1.0" + "@npmcli/installed-package-contents" "^2.0.2" + "@npmcli/map-workspaces" "^3.0.2" + "@npmcli/metavuln-calculator" "^5.0.0" + "@npmcli/name-from-folder" "^2.0.0" + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/package-json" "^4.0.0" + "@npmcli/query" "^3.1.0" + "@npmcli/run-script" "^6.0.0" + bin-links "^4.0.1" + cacache "^17.0.4" common-ancestor-path "^1.0.1" - hosted-git-info "^9.0.0" + hosted-git-info "^6.1.1" + json-parse-even-better-errors "^3.0.0" json-stringify-nice "^1.1.4" - lru-cache "^11.2.1" - minimatch "^10.0.3" - nopt "^9.0.0" - npm-install-checks "^8.0.0" - npm-package-arg "^13.0.0" - npm-pick-manifest "^11.0.1" - npm-registry-fetch "^19.0.0" - pacote "^21.0.2" - parse-conflict-json "^5.0.1" - proc-log "^6.0.0" - proggy "^4.0.0" + minimatch "^9.0.0" + nopt "^7.0.0" + npm-install-checks "^6.2.0" + npm-package-arg "^10.1.0" + npm-pick-manifest "^8.0.1" + npm-registry-fetch "^14.0.3" + npmlog "^7.0.1" + pacote "^15.0.8" + parse-conflict-json "^3.0.0" + proc-log "^3.0.0" promise-all-reject-late "^1.0.0" - promise-call-limit "^3.0.1" + promise-call-limit "^1.0.2" + read-package-json-fast "^3.0.2" semver "^7.3.7" - ssri "^13.0.0" + ssri "^10.0.1" treeverse "^3.0.0" - walk-up-path "^4.0.0" + walk-up-path "^3.0.1" -"@npmcli/config@^10.4.5": - version "10.4.5" - resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-10.4.5.tgz#6b5bfe6326d8ffe0c53998ea59b3b338a972a058" - integrity sha512-i3d+ysO0ix+2YGXLxKu44cEe9z47dtUPKbiPLFklDZvp/rJAsLmeWG2Bf6YKuqR8jEhMl/pHw1pGOquJBxvKIA== +"@npmcli/config@^6.4.0": + version "6.4.1" + resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-6.4.1.tgz#006409c739635db008e78bf58c92421cc147911d" + integrity sha512-uSz+elSGzjCMANWa5IlbGczLYPkNI/LeR+cHrgaTqTrTSh9RHhOFA4daD2eRUz6lMtOW+Fnsb+qv7V2Zz8ML0g== dependencies: - "@npmcli/map-workspaces" "^5.0.0" - "@npmcli/package-json" "^7.0.0" + "@npmcli/map-workspaces" "^3.0.2" ci-info "^4.0.0" - ini "^6.0.0" - nopt "^9.0.0" - proc-log "^6.0.0" + ini "^4.1.0" + nopt "^7.0.0" + proc-log "^3.0.0" + read-package-json-fast "^3.0.2" semver "^7.3.5" - walk-up-path "^4.0.0" + walk-up-path "^3.0.1" + +"@npmcli/disparity-colors@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/disparity-colors/-/disparity-colors-3.0.1.tgz#042d5ef548200c81e3ee3a84c994744573fe79fd" + integrity sha512-cOypTz/9IAhaPgOktbDNPeccTU88y8I1ZURbPeC0ooziK1h6dRJs2iGz1eKP1muaeVbow8GqQ0DaxLG8Bpmblw== + dependencies: + ansi-styles "^4.3.0" "@npmcli/fs@^1.0.0": version "1.1.1" @@ -2712,6 +2689,14 @@ "@gar/promisify" "^1.0.1" semver "^7.3.5" +"@npmcli/fs@^2.1.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" + integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== + dependencies: + "@gar/promisify" "^1.1.3" + semver "^7.3.5" + "@npmcli/fs@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e" @@ -2726,12 +2711,19 @@ dependencies: semver "^7.3.5" -"@npmcli/fs@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-5.0.0.tgz#674619771907342b3d1ac197aaf1deeb657e3539" - integrity sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og== +"@npmcli/git@^4.0.0", "@npmcli/git@^4.0.1", "@npmcli/git@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-4.1.0.tgz#ab0ad3fd82bc4d8c1351b6c62f0fa56e8fe6afa6" + integrity sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ== dependencies: + "@npmcli/promise-spawn" "^6.0.0" + lru-cache "^7.4.4" + npm-pick-manifest "^8.0.0" + proc-log "^3.0.0" + promise-inflight "^1.0.1" + promise-retry "^2.0.1" semver "^7.3.5" + which "^3.0.0" "@npmcli/git@^5.0.0": version "5.0.8" @@ -2748,20 +2740,6 @@ semver "^7.3.5" which "^4.0.0" -"@npmcli/git@^7.0.0": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-7.0.1.tgz#d1f6462af0e9901536e447beea922bc20dcc5762" - integrity sha512-+XTFxK2jJF/EJJ5SoAzXk3qwIDfvFc5/g+bD274LZ7uY7LE8sTfG6Z8rOanPl2ZEvZWqNvmEdtXC25cE54VcoA== - dependencies: - "@npmcli/promise-spawn" "^9.0.0" - ini "^6.0.0" - lru-cache "^11.2.1" - npm-pick-manifest "^11.0.1" - proc-log "^6.0.0" - promise-retry "^2.0.1" - semver "^7.3.5" - which "^6.0.0" - "@npmcli/installed-package-contents@^2.0.1": version "2.0.2" resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz#bfd817eccd9e8df200919e73f57f9e3d9e4f9e33" @@ -2770,7 +2748,7 @@ npm-bundled "^3.0.0" npm-normalize-package-bin "^3.0.0" -"@npmcli/installed-package-contents@^2.1.0": +"@npmcli/installed-package-contents@^2.0.2", "@npmcli/installed-package-contents@^2.1.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz#63048e5f6e40947a3a88dcbcb4fd9b76fdd37c17" integrity sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w== @@ -2778,15 +2756,7 @@ npm-bundled "^3.0.0" npm-normalize-package-bin "^3.0.0" -"@npmcli/installed-package-contents@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-4.0.0.tgz#18e5070704cfe0278f9ae48038558b6efd438426" - integrity sha512-yNyAdkBxB72gtZ4GrwXCM0ZUedo9nIbOMKfGjt6Cu6DXf0p8y1PViZAKDC8q8kv/fufx0WTjRBdSlyrvnP7hmA== - dependencies: - npm-bundled "^5.0.0" - npm-normalize-package-bin "^5.0.0" - -"@npmcli/map-workspaces@^3.0.2": +"@npmcli/map-workspaces@^3.0.2", "@npmcli/map-workspaces@^3.0.4": version "3.0.6" resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz#27dc06c20c35ef01e45a08909cab9cb3da08cea6" integrity sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA== @@ -2796,15 +2766,15 @@ minimatch "^9.0.0" read-package-json-fast "^3.0.0" -"@npmcli/map-workspaces@^5.0.0", "@npmcli/map-workspaces@^5.0.3": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-5.0.3.tgz#5b887ec0b535a2ba64d1d338867326a2b9c041d1" - integrity sha512-o2grssXo1e774E5OtEwwrgoszYRh0lqkJH+Pb9r78UcqdGJRDRfhpM8DvZPjzNLLNYeD/rNbjOKM3Ss5UABROw== +"@npmcli/metavuln-calculator@^5.0.0": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-5.0.1.tgz#426b3e524c2008bcc82dbc2ef390aefedd643d76" + integrity sha512-qb8Q9wIIlEPj3WeA1Lba91R4ZboPL0uspzV0F9uwP+9AYMVB2zOoa7Pbk12g6D2NHAinSbHh6QYmGuRyHZ874Q== dependencies: - "@npmcli/name-from-folder" "^4.0.0" - "@npmcli/package-json" "^7.0.0" - glob "^13.0.0" - minimatch "^10.0.3" + cacache "^17.0.0" + json-parse-even-better-errors "^3.0.0" + pacote "^15.0.0" + semver "^7.3.5" "@npmcli/metavuln-calculator@^7.1.1": version "7.1.1" @@ -2817,17 +2787,6 @@ proc-log "^4.1.0" semver "^7.3.5" -"@npmcli/metavuln-calculator@^9.0.2", "@npmcli/metavuln-calculator@^9.0.3": - version "9.0.3" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-9.0.3.tgz#57b330f3fb8ca34db2782ad5349ea4384bed9c96" - integrity sha512-94GLSYhLXF2t2LAC7pDwLaM4uCARzxShyAQKsirmlNcpidH89VA4/+K1LbJmRMgz5gy65E/QBBWQdUvGLe2Frg== - dependencies: - cacache "^20.0.0" - json-parse-even-better-errors "^5.0.0" - pacote "^21.0.0" - proc-log "^6.0.0" - semver "^7.3.5" - "@npmcli/move-file@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" @@ -2836,26 +2795,24 @@ mkdirp "^1.0.4" rimraf "^3.0.2" +"@npmcli/move-file@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" + integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + "@npmcli/name-from-folder@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz#c44d3a7c6d5c184bb6036f4d5995eee298945815" integrity sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg== -"@npmcli/name-from-folder@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-4.0.0.tgz#b4d516ae4fab5ed4e8e8032abff3488703fc24a3" - integrity sha512-qfrhVlOSqmKM8i6rkNdZzABj8MKEITGFAY+4teqBziksCQAOLutiAxM1wY2BKEd8KjUSpWmWCYxvXr0y4VTlPg== - "@npmcli/node-gyp@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== -"@npmcli/node-gyp@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-5.0.0.tgz#35475a58b5d791764a7252231197a14deefe8e47" - integrity sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ== - "@npmcli/package-json@5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-5.2.0.tgz#a1429d3111c10044c7efbfb0fce9f2c501f4cfad" @@ -2869,6 +2826,19 @@ proc-log "^4.0.0" semver "^7.5.3" +"@npmcli/package-json@^4.0.0", "@npmcli/package-json@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-4.0.1.tgz#1a07bf0e086b640500791f6bf245ff43cc27fa37" + integrity sha512-lRCEGdHZomFsURroh522YvA/2cVb9oPIJrjHanCJZkiasz1BzcnLr3tBJhlV7S86MBJBuAQ33is2D60YitZL2Q== + dependencies: + "@npmcli/git" "^4.1.0" + glob "^10.2.2" + hosted-git-info "^6.1.1" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^5.0.0" + proc-log "^3.0.0" + semver "^7.5.3" + "@npmcli/package-json@^5.0.0", "@npmcli/package-json@^5.1.0": version "5.2.1" resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-5.2.1.tgz#df69477b1023b81ff8503f2b9db4db4faea567ed" @@ -2882,18 +2852,12 @@ proc-log "^4.0.0" semver "^7.5.3" -"@npmcli/package-json@^7.0.0", "@npmcli/package-json@^7.0.4": - version "7.0.4" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-7.0.4.tgz#f4178e5d90b888f3bdf666915706f613c2d870d7" - integrity sha512-0wInJG3j/K40OJt/33ax47WfWMzZTm6OQxB9cDhTt5huCP2a9g2GnlsxmfN+PulItNPIpPrZ+kfwwUil7eHcZQ== - dependencies: - "@npmcli/git" "^7.0.0" - glob "^13.0.0" - hosted-git-info "^9.0.0" - json-parse-even-better-errors "^5.0.0" - proc-log "^6.0.0" - semver "^7.5.3" - validate-npm-package-license "^3.0.4" +"@npmcli/promise-spawn@^6.0.0", "@npmcli/promise-spawn@^6.0.1", "@npmcli/promise-spawn@^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz#c8bc4fa2bd0f01cb979d8798ba038f314cfa70f2" + integrity sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg== + dependencies: + which "^3.0.0" "@npmcli/promise-spawn@^7.0.0": version "7.0.2" @@ -2902,13 +2866,6 @@ dependencies: which "^4.0.0" -"@npmcli/promise-spawn@^9.0.0", "@npmcli/promise-spawn@^9.0.1": - version "9.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz#20e80cbdd2f24ad263a15de3ebbb1673cb82005b" - integrity sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q== - dependencies: - which "^6.0.0" - "@npmcli/query@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-3.1.0.tgz#bc202c59e122a06cf8acab91c795edda2cdad42c" @@ -2916,23 +2873,11 @@ dependencies: postcss-selector-parser "^6.0.10" -"@npmcli/query@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-5.0.0.tgz#c8cb9ec42c2ef149077282e948dc068ecc79ee11" - integrity sha512-8TZWfTQOsODpLqo9SVhVjHovmKXNpevHU0gO9e+y4V4fRIOneiXy0u0sMP9LmS71XivrEWfZWg50ReH4WRT4aQ== - dependencies: - postcss-selector-parser "^7.0.0" - "@npmcli/redact@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@npmcli/redact/-/redact-2.0.1.tgz#95432fd566e63b35c04494621767a4312c316762" integrity sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw== -"@npmcli/redact@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/redact/-/redact-4.0.0.tgz#c91121e02b7559a997614a2c1057cd7fc67608c4" - integrity sha512-gOBg5YHMfZy+TfHArfVogwgfBeQnKbbGo3pSUyK/gSI0AVu+pEiDVcKlQb0D8Mg1LNRZILZ6XG8I5dJ4KuAd9Q== - "@npmcli/run-script@8.1.0", "@npmcli/run-script@^8.0.0", "@npmcli/run-script@^8.1.0": version "8.1.0" resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-8.1.0.tgz#a563e5e29b1ca4e648a6b1bbbfe7220b4bfe39fc" @@ -2945,17 +2890,16 @@ proc-log "^4.0.0" which "^4.0.0" -"@npmcli/run-script@^10.0.0", "@npmcli/run-script@^10.0.3": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-10.0.3.tgz#85c16cd893e44cad5edded441b002d8a1d3a8a8e" - integrity sha512-ER2N6itRkzWbbtVmZ9WKaWxVlKlOeBFF1/7xx+KA5J1xKa4JjUwBdb6tDpk0v1qA+d+VDwHI9qmLcXSWcmi+Rw== +"@npmcli/run-script@^6.0.0", "@npmcli/run-script@^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-6.0.2.tgz#a25452d45ee7f7fb8c16dfaf9624423c0c0eb885" + integrity sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA== dependencies: - "@npmcli/node-gyp" "^5.0.0" - "@npmcli/package-json" "^7.0.0" - "@npmcli/promise-spawn" "^9.0.0" - node-gyp "^12.1.0" - proc-log "^6.0.0" - which "^6.0.0" + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/promise-spawn" "^6.0.0" + node-gyp "^9.0.0" + read-package-json-fast "^3.0.0" + which "^3.0.0" "@nuxtjs/opencollective@0.3.2": version "0.3.2" @@ -3121,10 +3065,18 @@ resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-4.0.0.tgz#40d203ea827b9f17f42a29c6afb93b7745ef80c7" integrity sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA== -"@octokit/auth-token@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-6.0.0.tgz#b02e9c08a2d8937df09a2a981f226ad219174c53" - integrity sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w== +"@octokit/core@^5.0.0": + version "5.2.2" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-5.2.2.tgz#252805732de9b4e8e4f658d34b80c4c9b2534761" + integrity sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg== + dependencies: + "@octokit/auth-token" "^4.0.0" + "@octokit/graphql" "^7.1.0" + "@octokit/request" "^8.4.1" + "@octokit/request-error" "^5.1.1" + "@octokit/types" "^13.0.0" + before-after-hook "^2.2.0" + universal-user-agent "^6.0.0" "@octokit/core@^5.0.2": version "5.2.1" @@ -3139,27 +3091,6 @@ before-after-hook "^2.2.0" universal-user-agent "^6.0.0" -"@octokit/core@^7.0.0": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-7.0.6.tgz#0d58704391c6b681dec1117240ea4d2a98ac3916" - integrity sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q== - dependencies: - "@octokit/auth-token" "^6.0.0" - "@octokit/graphql" "^9.0.3" - "@octokit/request" "^10.0.6" - "@octokit/request-error" "^7.0.2" - "@octokit/types" "^16.0.0" - before-after-hook "^4.0.0" - universal-user-agent "^7.0.0" - -"@octokit/endpoint@^11.0.2": - version "11.0.2" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-11.0.2.tgz#a8d955e053a244938b81d86cd73efd2dcb5ef5af" - integrity sha512-4zCpzP1fWc7QlqunZ5bSEjxc6yLAlRTnDwKtgXfcI/FxxGoqedDG8V2+xJ60bV2kODqcGB+nATdtap/XYq2NZQ== - dependencies: - "@octokit/types" "^16.0.0" - universal-user-agent "^7.0.2" - "@octokit/endpoint@^9.0.6": version "9.0.6" resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-9.0.6.tgz#114d912108fe692d8b139cfe7fc0846dfd11b6c0" @@ -3177,25 +3108,16 @@ "@octokit/types" "^13.0.0" universal-user-agent "^6.0.0" -"@octokit/graphql@^9.0.3": - version "9.0.3" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-9.0.3.tgz#5b8341c225909e924b466705c13477face869456" - integrity sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA== - dependencies: - "@octokit/request" "^10.0.6" - "@octokit/types" "^16.0.0" - universal-user-agent "^7.0.0" +"@octokit/openapi-types@^20.0.0": + version "20.0.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-20.0.0.tgz#9ec2daa0090eeb865ee147636e0c00f73790c6e5" + integrity sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA== "@octokit/openapi-types@^24.2.0": version "24.2.0" resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-24.2.0.tgz#3d55c32eac0d38da1a7083a9c3b0cca77924f7d3" integrity sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg== -"@octokit/openapi-types@^27.0.0": - version "27.0.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-27.0.0.tgz#374ea53781965fd02a9d36cacb97e152cefff12d" - integrity sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA== - "@octokit/plugin-enterprise-rest@6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" @@ -3208,12 +3130,12 @@ dependencies: "@octokit/types" "^13.7.0" -"@octokit/plugin-paginate-rest@^14.0.0": - version "14.0.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-14.0.0.tgz#44dc9fff2dacb148d4c5c788b573ddc044503026" - integrity sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw== +"@octokit/plugin-paginate-rest@^9.0.0": + version "9.2.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.2.tgz#c516bc498736bcdaa9095b9a1d10d9d0501ae831" + integrity sha512-u3KYkGF7GcZnSD/3UP0S7K5XUFT2FkOQdcfXZGZQPGv3lm4F2Xbf71lvjldr8c1H3nNbF+33cLEkWYbokGWqiQ== dependencies: - "@octokit/types" "^16.0.0" + "@octokit/types" "^12.6.0" "@octokit/plugin-request-log@^4.0.0": version "4.0.1" @@ -3227,24 +3149,24 @@ dependencies: "@octokit/types" "^13.8.0" -"@octokit/plugin-retry@^8.0.0": - version "8.0.3" - resolved "https://registry.yarnpkg.com/@octokit/plugin-retry/-/plugin-retry-8.0.3.tgz#8b7af9700272df724d12fd6333ead98961d135c6" - integrity sha512-vKGx1i3MC0za53IzYBSBXcrhmd+daQDzuZfYDd52X5S0M2otf3kVZTVP8bLA3EkU0lTvd1WEC2OlNNa4G+dohA== +"@octokit/plugin-retry@^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-retry/-/plugin-retry-6.1.0.tgz#cf5b92223246327ca9c7e17262b93ffde028ab0a" + integrity sha512-WrO3bvq4E1Xh1r2mT9w6SDFg01gFmP81nIG77+p/MqW1JeXXgL++6umim3t6x0Zj5pZm3rXAN+0HEjmmdhIRig== dependencies: - "@octokit/request-error" "^7.0.2" - "@octokit/types" "^16.0.0" + "@octokit/request-error" "^5.0.0" + "@octokit/types" "^13.0.0" bottleneck "^2.15.3" -"@octokit/plugin-throttling@^11.0.0": - version "11.0.3" - resolved "https://registry.yarnpkg.com/@octokit/plugin-throttling/-/plugin-throttling-11.0.3.tgz#584b1a9ca73a5daafeeb7dd5cc13a1bd29a6a60d" - integrity sha512-34eE0RkFCKycLl2D2kq7W+LovheM/ex3AwZCYN8udpi6bxsyjZidb2McXs69hZhLmJlDqTSP8cH+jSRpiaijBg== +"@octokit/plugin-throttling@^8.0.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-throttling/-/plugin-throttling-8.2.0.tgz#9ec3ea2e37b92fac63f06911d0c8141b46dc4941" + integrity sha512-nOpWtLayKFpgqmgD0y3GqXafMFuKcA4tRPZIfu7BArd2lEZeb1988nhWhwx4aZWmjDmUfdgVf7W+Tt4AmvRmMQ== dependencies: - "@octokit/types" "^16.0.0" + "@octokit/types" "^12.2.0" bottleneck "^2.15.3" -"@octokit/request-error@^5.1.1": +"@octokit/request-error@^5.0.0", "@octokit/request-error@^5.1.1": version "5.1.1" resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-5.1.1.tgz#b9218f9c1166e68bb4d0c89b638edc62c9334805" integrity sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g== @@ -3253,24 +3175,6 @@ deprecation "^2.0.0" once "^1.4.0" -"@octokit/request-error@^7.0.2": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-7.1.0.tgz#440fa3cae310466889778f5a222b47a580743638" - integrity sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw== - dependencies: - "@octokit/types" "^16.0.0" - -"@octokit/request@^10.0.6": - version "10.0.7" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-10.0.7.tgz#93f619914c523750a85e7888de983e1009eb03f6" - integrity sha512-v93h0i1yu4idj8qFPZwjehoJx4j3Ntn+JhXsdJrG9pYaX6j/XRz2RmasMUHtNgQD39nrv/VwTWSqK0RNXR8upA== - dependencies: - "@octokit/endpoint" "^11.0.2" - "@octokit/request-error" "^7.0.2" - "@octokit/types" "^16.0.0" - fast-content-type-parse "^3.0.0" - universal-user-agent "^7.0.2" - "@octokit/request@^8.4.1": version "8.4.1" resolved "https://registry.yarnpkg.com/@octokit/request/-/request-8.4.1.tgz#715a015ccf993087977ea4365c44791fc4572486" @@ -3291,6 +3195,13 @@ "@octokit/plugin-request-log" "^4.0.0" "@octokit/plugin-rest-endpoint-methods" "13.3.2-cjs.1" +"@octokit/types@^12.2.0", "@octokit/types@^12.6.0": + version "12.6.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-12.6.0.tgz#8100fb9eeedfe083aae66473bd97b15b62aedcb2" + integrity sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw== + dependencies: + "@octokit/openapi-types" "^20.0.0" + "@octokit/types@^13.0.0", "@octokit/types@^13.1.0", "@octokit/types@^13.7.0", "@octokit/types@^13.8.0": version "13.10.0" resolved "https://registry.yarnpkg.com/@octokit/types/-/types-13.10.0.tgz#3e7c6b19c0236c270656e4ea666148c2b51fd1a3" @@ -3298,13 +3209,6 @@ dependencies: "@octokit/openapi-types" "^24.2.0" -"@octokit/types@^16.0.0": - version "16.0.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-16.0.0.tgz#fbd7fa590c2ef22af881b1d79758bfaa234dbb7c" - integrity sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg== - dependencies: - "@octokit/openapi-types" "^27.0.0" - "@paralleldrive/cuid2@2.2.2", "@paralleldrive/cuid2@^2.2.2": version "2.2.2" resolved "https://registry.yarnpkg.com/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz#7f91364d53b89e2c9cb9e02e8dd0f129e834455f" @@ -3312,6 +3216,11 @@ dependencies: "@noble/hashes" "^1.1.5" +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + "@pnpm/config.env-replace@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz#ab29da53df41e8948a00f2433f085f54de8b3a4c" @@ -3361,11 +3270,6 @@ resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== -"@sec-ant/readable-stream@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz#60de891bb126abfdc5410fdc6166aca065f10a0c" - integrity sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg== - "@semantic-release/changelog@^6.0.3": version "6.0.3" resolved "https://registry.yarnpkg.com/@semantic-release/changelog/-/changelog-6.0.3.tgz#6195630ecbeccad174461de727d5f975abc23eeb" @@ -3376,17 +3280,16 @@ fs-extra "^11.0.0" lodash "^4.17.4" -"@semantic-release/commit-analyzer@^13.0.1": - version "13.0.1" - resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-13.0.1.tgz#d84b599c3fef623ccc01f0cc2025eb56a57d8feb" - integrity sha512-wdnBPHKkr9HhNhXOhZD5a2LNl91+hs8CC2vsAVYxtZH3y0dV3wKn+uZSN61rdJQZ8EGxzWB3inWocBHV9+u/CQ== +"@semantic-release/commit-analyzer@^10.0.0": + version "10.0.4" + resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-10.0.4.tgz#e2770f341b75d8f19fe6b5b833e8c2e0de2b84de" + integrity sha512-pFGn99fn8w4/MHE0otb2A/l5kxgOuxaaauIh4u30ncoTJuqWj4hXTgEJ03REqjS+w1R2vPftSsO26WC61yOcpw== dependencies: - conventional-changelog-angular "^8.0.0" - conventional-changelog-writer "^8.0.0" - conventional-commits-filter "^5.0.0" - conventional-commits-parser "^6.0.0" + conventional-changelog-angular "^6.0.0" + conventional-commits-filter "^3.0.0" + conventional-commits-parser "^5.0.0" debug "^4.0.0" - import-from-esm "^2.0.0" + import-from "^4.0.0" lodash-es "^4.17.21" micromatch "^4.0.2" @@ -3419,65 +3322,62 @@ micromatch "^4.0.0" p-reduce "^2.0.0" -"@semantic-release/github@^12.0.0": - version "12.0.2" - resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-12.0.2.tgz#bc1f76e9cd386c5b01a20c3f0606e8eec6b1b93a" - integrity sha512-qyqLS+aSGH1SfXIooBKjs7mvrv0deg8v+jemegfJg1kq6ji+GJV8CO08VJDEsvjp3O8XJmTTIAjjZbMzagzsdw== +"@semantic-release/github@^9.0.0": + version "9.2.6" + resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-9.2.6.tgz#0b0b00ab3ab0486cd3aecb4ae2f9f9cf2edd8eae" + integrity sha512-shi+Lrf6exeNZF+sBhK+P011LSbhmIAoUEgEY6SsxF8irJ+J2stwI5jkyDQ+4gzYyDImzV6LCKdYB9FXnQRWKA== dependencies: - "@octokit/core" "^7.0.0" - "@octokit/plugin-paginate-rest" "^14.0.0" - "@octokit/plugin-retry" "^8.0.0" - "@octokit/plugin-throttling" "^11.0.0" + "@octokit/core" "^5.0.0" + "@octokit/plugin-paginate-rest" "^9.0.0" + "@octokit/plugin-retry" "^6.0.0" + "@octokit/plugin-throttling" "^8.0.0" "@semantic-release/error" "^4.0.0" aggregate-error "^5.0.0" debug "^4.3.4" dir-glob "^3.0.1" + globby "^14.0.0" http-proxy-agent "^7.0.0" https-proxy-agent "^7.0.0" - issue-parser "^7.0.0" + issue-parser "^6.0.0" lodash-es "^4.17.21" mime "^4.0.0" p-filter "^4.0.0" - tinyglobby "^0.2.14" - undici "^7.0.0" url-join "^5.0.0" -"@semantic-release/npm@^13.1.1": - version "13.1.3" - resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-13.1.3.tgz#f75bc82e005fcb859932461bfc5583746a31f6c1" - integrity sha512-q7zreY8n9V0FIP1Cbu63D+lXtRAVAIWb30MH5U3TdrfXt6r2MIrWCY0whAImN53qNvSGp0Zt07U95K+Qp9GpEg== +"@semantic-release/npm@^10.0.2": + version "10.0.6" + resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-10.0.6.tgz#1c47a77e79464586fa1c67f148567ef2b9fda315" + integrity sha512-DyqHrGE8aUyapA277BB+4kV0C4iMHh3sHzUWdf0jTgp5NNJxVUz76W1f57FB64Ue03him3CBXxFqQD2xGabxow== dependencies: - "@actions/core" "^2.0.0" "@semantic-release/error" "^4.0.0" aggregate-error "^5.0.0" - env-ci "^11.2.0" - execa "^9.0.0" + execa "^8.0.0" fs-extra "^11.0.0" lodash-es "^4.17.21" nerf-dart "^1.0.0" normalize-url "^8.0.0" - npm "^11.6.2" + npm "^9.5.0" rc "^1.2.8" - read-pkg "^10.0.0" + read-pkg "^8.0.0" registry-auth-token "^5.0.0" semver "^7.1.2" tempy "^3.0.0" -"@semantic-release/release-notes-generator@^14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@semantic-release/release-notes-generator/-/release-notes-generator-14.1.0.tgz#ac47bd214b48130e71578d9acefb1b1272854070" - integrity sha512-CcyDRk7xq+ON/20YNR+1I/jP7BYKICr1uKd1HHpROSnnTdGqOTburi4jcRiTYz0cpfhxSloQO3cGhnoot7IEkA== +"@semantic-release/release-notes-generator@^11.0.0": + version "11.0.7" + resolved "https://registry.yarnpkg.com/@semantic-release/release-notes-generator/-/release-notes-generator-11.0.7.tgz#2193b8aa6b8b40297b6cbc5156bc9a7e5cdb9bbd" + integrity sha512-T09QB9ImmNx7Q6hY6YnnEbw/rEJ6a+22LBxfZq+pSAXg/OL/k0siwEm5cK4k1f9dE2Z2mPIjJKKohzUm0jbxcQ== dependencies: - conventional-changelog-angular "^8.0.0" - conventional-changelog-writer "^8.0.0" - conventional-commits-filter "^5.0.0" - conventional-commits-parser "^6.0.0" + conventional-changelog-angular "^6.0.0" + conventional-changelog-writer "^6.0.0" + conventional-commits-filter "^4.0.0" + conventional-commits-parser "^5.0.0" debug "^4.0.0" get-stream "^7.0.0" - import-from-esm "^2.0.0" + import-from "^4.0.0" into-stream "^7.0.0" lodash-es "^4.17.21" - read-package-up "^11.0.0" + read-pkg-up "^10.0.0" "@semrel-extra/topo@^1.14.0": version "1.14.1" @@ -3548,6 +3448,13 @@ resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== +"@sigstore/bundle@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-1.1.0.tgz#17f8d813b09348b16eeed66a8cf1c3d6bd3d04f1" + integrity sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog== + dependencies: + "@sigstore/protobuf-specs" "^0.2.0" + "@sigstore/bundle@^2.3.2": version "2.3.2" resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-2.3.2.tgz#ad4dbb95d665405fd4a7a02c8a073dbd01e4e95e" @@ -3555,32 +3462,29 @@ dependencies: "@sigstore/protobuf-specs" "^0.3.2" -"@sigstore/bundle@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-4.0.0.tgz#854eda43eb6a59352037e49000177c8904572f83" - integrity sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A== - dependencies: - "@sigstore/protobuf-specs" "^0.5.0" - "@sigstore/core@^1.0.0", "@sigstore/core@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@sigstore/core/-/core-1.1.0.tgz#5583d8f7ffe599fa0a89f2bf289301a5af262380" integrity sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg== -"@sigstore/core@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@sigstore/core/-/core-3.1.0.tgz#b418de73f56333ad9e369b915173d8c98e9b96d5" - integrity sha512-o5cw1QYhNQ9IroioJxpzexmPjfCe7gzafd2RY3qnMpxr4ZEja+Jad/U8sgFpaue6bOaF+z7RVkyKVV44FN+N8A== +"@sigstore/protobuf-specs@^0.2.0": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz#be9ef4f3c38052c43bd399d3f792c97ff9e2277b" + integrity sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A== "@sigstore/protobuf-specs@^0.3.2": version "0.3.3" resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.3.3.tgz#7dd46d68b76c322873a2ef7581ed955af6f4dcde" integrity sha512-RpacQhBlwpBWd7KEJsRKcBQalbV28fvkxwTOJIqhIuDysMMaJW47V4OqW30iJB9uRpqOSxxEAQFdr8tTattReQ== -"@sigstore/protobuf-specs@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.5.0.tgz#e5f029edcb3a4329853a09b603011e61043eb005" - integrity sha512-MM8XIwUjN2bwvCg1QvrMtbBmpcSHrkhFSCu1D11NyPvDQ25HEc4oG5/OcQfd/Tlf/OxmKWERDj0zGE23jQaMwA== +"@sigstore/sign@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-1.0.0.tgz#6b08ebc2f6c92aa5acb07a49784cb6738796f7b4" + integrity sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA== + dependencies: + "@sigstore/bundle" "^1.1.0" + "@sigstore/protobuf-specs" "^0.2.0" + make-fetch-happen "^11.0.1" "@sigstore/sign@^2.3.2": version "2.3.2" @@ -3594,17 +3498,13 @@ proc-log "^4.2.0" promise-retry "^2.0.1" -"@sigstore/sign@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-4.1.0.tgz#63df15a137337b29f463a1d1c51e1f7d4c1db2f1" - integrity sha512-Vx1RmLxLGnSUqx/o5/VsCjkuN5L7y+vxEEwawvc7u+6WtX2W4GNa7b9HEjmcRWohw/d6BpATXmvOwc78m+Swdg== - dependencies: - "@sigstore/bundle" "^4.0.0" - "@sigstore/core" "^3.1.0" - "@sigstore/protobuf-specs" "^0.5.0" - make-fetch-happen "^15.0.3" - proc-log "^6.1.0" - promise-retry "^2.0.1" +"@sigstore/tuf@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-1.0.3.tgz#2a65986772ede996485728f027b0514c0b70b160" + integrity sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg== + dependencies: + "@sigstore/protobuf-specs" "^0.2.0" + tuf-js "^1.1.7" "@sigstore/tuf@^2.3.4": version "2.3.4" @@ -3614,14 +3514,6 @@ "@sigstore/protobuf-specs" "^0.3.2" tuf-js "^2.2.1" -"@sigstore/tuf@^4.0.0", "@sigstore/tuf@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-4.0.1.tgz#9b080390936d79ea3b6a893b64baf3123e92d6d3" - integrity sha512-OPZBg8y5Vc9yZjmWCHrlWPMBqW5yd8+wFNl+thMdtcWz3vjVSoJQutF8YkrzI0SLGnkuFof4HSsWUhXrf219Lw== - dependencies: - "@sigstore/protobuf-specs" "^0.5.0" - tuf-js "^4.1.0" - "@sigstore/verify@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@sigstore/verify/-/verify-1.2.1.tgz#c7e60241b432890dcb8bd8322427f6062ef819e1" @@ -3631,29 +3523,15 @@ "@sigstore/core" "^1.1.0" "@sigstore/protobuf-specs" "^0.3.2" -"@sigstore/verify@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@sigstore/verify/-/verify-3.1.0.tgz#4046d4186421db779501fe87fa5acaa5d4d21b08" - integrity sha512-mNe0Iigql08YupSOGv197YdHpPPr+EzDZmfCgMc7RPNaZTw5aLN01nBl6CHJOh3BGtnMIj83EeN4butBchc8Ag== - dependencies: - "@sigstore/bundle" "^4.0.0" - "@sigstore/core" "^3.1.0" - "@sigstore/protobuf-specs" "^0.5.0" - "@sinclair/typebox@^0.27.8": version "0.27.8" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== -"@sindresorhus/is@^4.6.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - -"@sindresorhus/merge-streams@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz#abb11d99aeb6d27f1b563c38147a72d50058e339" - integrity sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ== +"@sindresorhus/merge-streams@^2.1.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz#719df7fb41766bc143369eaa0dd56d8dc87c9958" + integrity sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg== "@sinonjs/commons@^3.0.0": version "3.0.0" @@ -4204,11 +4082,24 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== +"@tufjs/canonical-json@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz#eade9fd1f537993bc1f0949f3aea276ecc4fab31" + integrity sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ== + "@tufjs/canonical-json@2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz#a52f61a3d7374833fca945b2549bc30a2dd40d0a" integrity sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA== +"@tufjs/models@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-1.0.4.tgz#5a689630f6b9dbda338d4b208019336562f176ef" + integrity sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A== + dependencies: + "@tufjs/canonical-json" "1.0.0" + minimatch "^9.0.0" + "@tufjs/models@2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-2.0.1.tgz#e429714e753b6c2469af3212e7f320a6973c2812" @@ -4217,14 +4108,6 @@ "@tufjs/canonical-json" "2.0.0" minimatch "^9.0.4" -"@tufjs/models@4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-4.1.0.tgz#494b39cf5e2f6855d80031246dd236d8086069b3" - integrity sha512-Y8cK9aggNRsqJVaKUlEYs4s7CvQ1b1ta2DVPyAimb0I2qhzjNk+A+mxvll/klL0RlfuIUei8BF7YWiua4kQqww== - dependencies: - "@tufjs/canonical-json" "2.0.0" - minimatch "^10.1.1" - "@tybys/wasm-util@^0.9.0": version "0.9.0" resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.9.0.tgz#3e75eb00604c8d6db470bf18c37b7d984a0e3355" @@ -4614,7 +4497,7 @@ dependencies: undici-types "~6.21.0" -"@types/normalize-package-data@^2.4.0", "@types/normalize-package-data@^2.4.3", "@types/normalize-package-data@^2.4.4": +"@types/normalize-package-data@^2.4.0", "@types/normalize-package-data@^2.4.1": version "2.4.4" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== @@ -4896,7 +4779,7 @@ JSONStream@^1.3.5: jsonparse "^1.2.0" through ">=2.2.7 <3" -abbrev@1: +abbrev@1, abbrev@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== @@ -4906,11 +4789,6 @@ abbrev@^2.0.0: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== -abbrev@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-4.0.0.tgz#ec933f0e27b6cd60e89b5c6b2a304af42209bb05" - integrity sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA== - abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -4990,6 +4868,13 @@ agentkeepalive@^4.1.3: dependencies: humanize-ms "^1.2.1" +agentkeepalive@^4.2.1: + version "4.6.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.6.0.tgz#35f73e94b3f40bf65f105219c623ad19c136ea6a" + integrity sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ== + dependencies: + humanize-ms "^1.2.1" + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -5057,12 +4942,10 @@ ansi-escapes@^4.2.1, ansi-escapes@^4.3.2: dependencies: type-fest "^0.21.3" -ansi-escapes@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-7.2.0.tgz#31b25afa3edd3efc09d98c2fee831d460ff06b49" - integrity sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw== - dependencies: - environment "^1.0.0" +ansi-escapes@^6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-6.2.1.tgz#76c54ce9b081dad39acec4b5d53377913825fb0f" + integrity sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig== ansi-regex@^2.0.0: version "2.1.1" @@ -5084,12 +4967,7 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-regex@^6.1.0: +ansi-regex@^6.2.2: version "6.2.2" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== @@ -5118,7 +4996,7 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -ansi-styles@^6.2.1: +ansi-styles@^6.1.0: version "6.2.3" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== @@ -5138,11 +5016,6 @@ antlr4@^4.13.1-patch-1: resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.13.1-patch-1.tgz#946176f863f890964a050c4f18c47fd6f7e57602" integrity sha512-OjFLWWLzDMV9rdFhpvroCWR4ooktNg9/nvVYSA5z28wuVpU36QUNuioR1XLnQtcjVlf8npjyz593PxnU/f/Cow== -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - anymatch@^3.0.3, anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" @@ -5253,6 +5126,11 @@ are-we-there-yet@^3.0.0: delegates "^1.0.0" readable-stream "^3.6.0" +are-we-there-yet@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-4.0.2.tgz#aed25dd0eae514660d49ac2b2366b175c614785a" + integrity sha512-ncSWAawFhKMJDTdoAeOV+jyW1VCMj5QIAwULIBV0SSR7B/RLPPEQiknKcg/RIIZlUQrxELpsxMiTUoAQ4sIUyg== + arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" @@ -5567,11 +5445,6 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -balanced-match@^4.0.2: - version "4.0.4" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-4.0.4.tgz#bfb10662feed8196a2c62e7c68e17720c274179a" - integrity sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA== - base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" @@ -5594,12 +5467,7 @@ before-after-hook@^2.2.0: resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== -before-after-hook@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-4.0.0.tgz#cf1447ab9160df6a40f3621da64d6ffc36050cb9" - integrity sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ== - -bin-links@^4.0.4: +bin-links@^4.0.1, bin-links@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-4.0.4.tgz#c3565832b8e287c85f109a02a17027d152a58a63" integrity sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA== @@ -5609,17 +5477,6 @@ bin-links@^4.0.4: read-cmd-shim "^4.0.0" write-file-atomic "^5.0.0" -bin-links@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-6.0.0.tgz#0245114374463a694e161a1e65417e7939ab2eba" - integrity sha512-X4CiKlcV2GjnCMwnKAfbVWpHa++65th9TuzAEYtZoATiOE2DQKhSp4CJlyLoTqdhBKlXjpXjCTYPNNFS33Fi6w== - dependencies: - cmd-shim "^8.0.0" - npm-normalize-package-bin "^5.0.0" - proc-log "^6.0.0" - read-cmd-shim "^6.0.0" - write-file-atomic "^7.0.0" - binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" @@ -5630,11 +5487,6 @@ binary-extensions@^2.2.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== -binary-extensions@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-3.1.0.tgz#be31cd3aa5c7e3dc42c501e57d4fff87d665e17e" - integrity sha512-Jvvd9hy1w+xUad8+ckQsWA/V1AoyubOvqn0aygjMOVM4BfIaRav1NFS3LsTSDaV4n4FtcCtQXvzep1E6MboqwQ== - bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" @@ -5752,14 +5604,7 @@ brace-expansion@^2.0.1, brace-expansion@^2.0.2: dependencies: balanced-match "^1.0.0" -brace-expansion@^5.0.2: - version "5.0.4" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.4.tgz#614daaecd0a688f660bbbc909a8748c3d80d4336" - integrity sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg== - dependencies: - balanced-match "^4.0.2" - -braces@^3.0.3, braces@~3.0.2: +braces@^3.0.1, braces@^3.0.3, braces@~3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== @@ -5902,17 +5747,41 @@ cacache@^15.2.0: tar "^6.0.2" unique-filename "^1.1.1" -cacache@^18.0.0, cacache@^18.0.3: - version "18.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.4.tgz#4601d7578dadb59c66044e157d02a3314682d6a5" - integrity sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ== +cacache@^16.1.0: + version "16.1.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" + integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== + dependencies: + "@npmcli/fs" "^2.1.0" + "@npmcli/move-file" "^2.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + glob "^8.0.1" + infer-owner "^1.0.4" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + unique-filename "^2.0.0" + +cacache@^17.0.0, cacache@^17.0.4, cacache@^17.1.4: + version "17.1.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.4.tgz#b3ff381580b47e85c6e64f801101508e26604b35" + integrity sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A== dependencies: "@npmcli/fs" "^3.1.0" fs-minipass "^3.0.0" glob "^10.2.2" - lru-cache "^10.0.1" + lru-cache "^7.7.1" minipass "^7.0.3" - minipass-collect "^2.0.1" + minipass-collect "^1.0.2" minipass-flush "^1.0.5" minipass-pipeline "^1.2.4" p-map "^4.0.0" @@ -5920,22 +5789,23 @@ cacache@^18.0.0, cacache@^18.0.3: tar "^6.1.11" unique-filename "^3.0.0" -cacache@^20.0.0, cacache@^20.0.1, cacache@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-20.0.3.tgz#bd65205d5e6d86e02bbfaf8e4ce6008f1b81d119" - integrity sha512-3pUp4e8hv07k1QlijZu6Kn7c9+ZpWWk4j3F8N3xPuCExULobqJydKYOTj1FTq58srkJsXvO7LbGAH4C0ZU3WGw== +cacache@^18.0.0, cacache@^18.0.3: + version "18.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.4.tgz#4601d7578dadb59c66044e157d02a3314682d6a5" + integrity sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ== dependencies: - "@npmcli/fs" "^5.0.0" + "@npmcli/fs" "^3.1.0" fs-minipass "^3.0.0" - glob "^13.0.0" - lru-cache "^11.1.0" + glob "^10.2.2" + lru-cache "^10.0.1" minipass "^7.0.3" minipass-collect "^2.0.1" minipass-flush "^1.0.5" minipass-pipeline "^1.2.4" - p-map "^7.0.2" - ssri "^13.0.0" - unique-filename "^5.0.0" + p-map "^4.0.0" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" cache-content-type@^1.0.0: version "1.0.1" @@ -6079,7 +5949,7 @@ chalk@^5.2.0: resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== -chalk@^5.4.1, chalk@^5.6.2: +chalk@^5.3.0: version "5.6.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.2.tgz#b1238b6e23ea337af71c7f8a295db5af0c158aea" integrity sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA== @@ -6159,11 +6029,6 @@ chownr@^2.0.0: resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== -chownr@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4" - integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== - ci-info@^3.2.0: version "3.9.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" @@ -6174,17 +6039,12 @@ ci-info@^4.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.2.0.tgz#cbd21386152ebfe1d56f280a3b5feccbd96764c7" integrity sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg== -ci-info@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.3.1.tgz#355ad571920810b5623e11d40232f443f16f1daa" - integrity sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA== - -cidr-regex@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-5.0.1.tgz#4b3972457b06445832929f6f268b477fe0372c1f" - integrity sha512-2Apfc6qH9uwF3QHmlYBA8ExB9VHq+1/Doj9sEMY55TVBcpQ3y/+gmMpcNIBBtfb5k54Vphmta+1IxjMqPlWWAA== +cidr-regex@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-3.1.1.tgz#ba1972c57c66f61875f18fd7dd487469770b571d" + integrity sha512-RBqYd32aDwbCMFJRL6wHOlDNYJsPNTt8vC82ErHF5vKt8QQzxm1FrkW8s/R5pVrXMf17sba09Uoy91PKiddAsw== dependencies: - ip-regex "5.0.0" + ip-regex "^4.1.0" cjs-module-lexer@^1.0.0: version "1.2.3" @@ -6243,18 +6103,6 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" -cli-highlight@^2.1.11: - version "2.1.11" - resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" - integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== - dependencies: - chalk "^4.0.0" - highlight.js "^10.7.1" - mz "^2.4.0" - parse5 "^5.1.1" - parse5-htmlparser2-tree-adapter "^6.0.0" - yargs "^16.0.0" - cli-progress@^3.12.0: version "3.12.0" resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-3.12.0.tgz#807ee14b66bcc086258e444ad0f19e7d42577942" @@ -6277,7 +6125,7 @@ cli-spinners@^2.5.0: resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.1.tgz#9c0b9dad69a6d47cbb4333c14319b060ed395a35" integrity sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ== -cli-table3@^0.6.5: +cli-table3@^0.6.3: version "0.6.5" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.5.tgz#013b91351762739c16a9567c21a04632e449bf2f" integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== @@ -6335,15 +6183,6 @@ cliui@^8.0.1: strip-ansi "^6.0.1" wrap-ansi "^7.0.0" -cliui@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-9.0.1.tgz#6f7890f386f6f1f79953adc1f78dec46fcc2d291" - integrity sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w== - dependencies: - string-width "^7.2.0" - strip-ansi "^7.1.0" - wrap-ansi "^9.0.0" - clone-deep@4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -6363,11 +6202,6 @@ cmd-shim@6.0.3, cmd-shim@^6.0.0: resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.3.tgz#c491e9656594ba17ac83c4bd931590a9d6e26033" integrity sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA== -cmd-shim@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-8.0.0.tgz#5be238f22f40faf3f7e8c92edc3f5d354f7657b2" - integrity sha512-Jk/BK6NCapZ58BKUxlSI+ouKRbjH1NLZCgJkYoab+vEHUY3f6OzpNBN9u7HFSv9J6TRDGs4PLOHezoKGaFRSCA== - co-body@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/co-body/-/co-body-6.2.0.tgz#afd776d60e5659f4eee862df83499698eb1aea1b" @@ -6439,7 +6273,7 @@ colors@1.0.3: resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" integrity sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw== -columnify@1.6.0: +columnify@1.6.0, columnify@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== @@ -6570,13 +6404,6 @@ conventional-changelog-angular@^6.0.0: dependencies: compare-func "^2.0.0" -conventional-changelog-angular@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-8.1.0.tgz#06223a40f818c5618982fdb92d2b2aac5e24d33e" - integrity sha512-GGf2Nipn1RUCAktxuVauVr1e3r8QrLP/B0lEUsFktmGqc3ddbQkhoJZHJctVU829U1c6mTSWftrVOCHaL85Q3w== - dependencies: - compare-func "^2.0.0" - conventional-changelog-conventionalcommits@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-6.1.0.tgz#3bad05f4eea64e423d3d90fc50c17d2c8cf17652" @@ -6619,16 +6446,6 @@ conventional-changelog-writer@^6.0.0: semver "^7.0.0" split "^1.0.1" -conventional-changelog-writer@^8.0.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-8.2.0.tgz#1b77ef8e45ccc4559e02a23a34d50c15d2051e5a" - integrity sha512-Y2aW4596l9AEvFJRwFGJGiQjt2sBYTjPD18DdvxX9Vpz0Z7HQ+g1Z+6iYDAm1vR3QOJrDBkRHixHK/+FhkR6Pw== - dependencies: - conventional-commits-filter "^5.0.0" - handlebars "^4.7.7" - meow "^13.0.0" - semver "^7.5.2" - conventional-commits-filter@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz#bf1113266151dd64c49cd269e3eb7d71d7015ee2" @@ -6637,10 +6454,10 @@ conventional-commits-filter@^3.0.0: lodash.ismatch "^4.4.0" modify-values "^1.0.1" -conventional-commits-filter@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-5.0.0.tgz#72811f95d379e79d2d39d5c0c53c9351ef284e86" - integrity sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q== +conventional-commits-filter@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-4.0.0.tgz#845d713e48dc7d1520b84ec182e2773c10c7bf7f" + integrity sha512-rnpnibcSOdFcdclpFwWa+pPlZJhXE7l+XK04zxhbWrhgpR96h33QLz8hITTXbcYICxVr3HZFtbtUAQ+4LdBo9A== conventional-commits-parser@^4.0.0: version "4.0.0" @@ -6652,12 +6469,15 @@ conventional-commits-parser@^4.0.0: meow "^8.1.2" split2 "^3.2.2" -conventional-commits-parser@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-6.2.1.tgz#855e53c4792b1feaf93649eff5d75e0dbc2c63ad" - integrity sha512-20pyHgnO40rvfI0NGF/xiEoFMkXDtkF8FwHvk5BokoFoCuTQRI8vrNCNFWUOfuolKJMm1tPCHc8GgYEtr1XRNA== +conventional-commits-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz#57f3594b81ad54d40c1b4280f04554df28627d9a" + integrity sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA== dependencies: - meow "^13.0.0" + JSONStream "^1.3.5" + is-text-path "^2.0.0" + meow "^12.0.1" + split2 "^4.0.0" conventional-recommended-bump@7.0.1: version "7.0.1" @@ -6672,11 +6492,6 @@ conventional-recommended-bump@7.0.1: git-semver-tags "^5.0.0" meow "^8.1.2" -convert-hrtime@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/convert-hrtime/-/convert-hrtime-5.0.0.tgz#f2131236d4598b95de856926a67100a0a97e9fa3" - integrity sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg== - convert-source-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" @@ -6753,7 +6568,7 @@ cosmiconfig-typescript-loader@^4.0.0: resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.4.0.tgz#f3feae459ea090f131df5474ce4b1222912319f9" integrity sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw== -cosmiconfig@9.0.0, cosmiconfig@^9.0.0: +cosmiconfig@9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d" integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== @@ -7113,10 +6928,10 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -diff@^8.0.2: - version "8.0.3" - resolved "https://registry.yarnpkg.com/diff/-/diff-8.0.3.tgz#c7da3d9e0e8c283bb548681f8d7174653720c2d5" - integrity sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ== +diff@^5.1.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.2.tgz#0a4742797281d09cfa699b79ea32d27723623bad" + integrity sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A== dir-glob@^3.0.0, dir-glob@^3.0.1: version "3.0.1" @@ -7208,6 +7023,11 @@ dotenv@^16.4.5: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.5.0.tgz#092b49f25f808f020050051d1ff258e404c78692" integrity sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg== +dotenv@^17.3.1: + version "17.3.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-17.3.1.tgz#2706f5b0165e45a1503348187b8468f87fe6aae2" + integrity sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA== + dotenv@~16.4.5: version "16.4.7" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26" @@ -7241,6 +7061,11 @@ duplexer2@~0.1.0: dependencies: readable-stream "^2.0.2" +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + ecdsa-sig-formatter@1.0.11: version "1.0.11" resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" @@ -7275,20 +7100,15 @@ emittery@^0.13.1: resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== -emoji-regex@^10.3.0: - version "10.6.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.6.0.tgz#bf3d6e8f7f8fd22a65d9703475bc0147357a6b0d" - integrity sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A== - 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== -emojilib@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/emojilib/-/emojilib-2.4.0.tgz#ac518a8bb0d5f76dda57289ccb2fdf9d39ae721e" - integrity sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw== +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== encodeurl@^1.0.2, encodeurl@~1.0.2: version "1.0.2" @@ -7326,12 +7146,12 @@ entities@^4.2.0, entities@^4.4.0: resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== -env-ci@^11.0.0, env-ci@^11.2.0: - version "11.2.0" - resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-11.2.0.tgz#e7386afdf752962c587e7f3d3fb64d87d68e82c6" - integrity sha512-D5kWfzkmaOQDioPmiviWAVtKmpPT4/iJmMVQxWxMPJTFyTkdc5JQUfc5iXEeWxcOdsYTKSAiA/Age4NUOqKsRA== +env-ci@^9.0.0: + version "9.1.1" + resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-9.1.1.tgz#f081684c64a639c6ff5cb801bd70464bd40498a4" + integrity sha512-Im2yEWeF4b2RAMAaWvGioXk6m0UNaIjD8hj28j2ij5ldnIFrDQT0+pzDvpbRkcjurhXhf/AsBKv8P2rtmGi9Aw== dependencies: - execa "^8.0.0" + execa "^7.0.0" java-properties "^1.0.2" env-paths@^2.2.0, env-paths@^2.2.1: @@ -7344,11 +7164,6 @@ envinfo@7.13.0: resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.13.0.tgz#81fbb81e5da35d74e814941aeab7c325a606fb31" integrity sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q== -environment@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/environment/-/environment-1.1.0.tgz#8e86c66b180f363c7ab311787e0259665f45a9f1" - integrity sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q== - err-code@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" @@ -7361,6 +7176,13 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" +error-ex@^1.3.2: + version "1.3.4" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.4.tgz#b3a8d8bb6f92eecc1629e3e27d3c8607a8a32414" + integrity sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ== + dependencies: + is-arrayish "^0.2.1" + es-abstract@^1.22.1: version "1.22.3" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" @@ -7591,7 +7413,7 @@ escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -escape-string-regexp@5.0.0: +escape-string-regexp@5.0.0, escape-string-regexp@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== @@ -7921,7 +7743,7 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -execa@^7.1.1: +execa@^7.0.0, execa@^7.1.1: version "7.2.0" resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== @@ -7951,24 +7773,6 @@ execa@^8.0.0: signal-exit "^4.1.0" strip-final-newline "^3.0.0" -execa@^9.0.0: - version "9.6.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-9.6.1.tgz#5b90acedc6bdc0fa9b9a6ddf8f9cbb0c75a7c471" - integrity sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA== - dependencies: - "@sindresorhus/merge-streams" "^4.0.0" - cross-spawn "^7.0.6" - figures "^6.1.0" - get-stream "^9.0.0" - human-signals "^8.0.1" - is-plain-obj "^4.1.0" - is-stream "^4.0.1" - npm-run-path "^6.0.0" - pretty-ms "^9.2.0" - signal-exit "^4.1.0" - strip-final-newline "^4.0.0" - yoctocolors "^2.1.1" - exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -8174,11 +7978,6 @@ fast-content-type-parse@^1.0.0, fast-content-type-parse@^1.1.0: resolved "https://registry.yarnpkg.com/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz#4087162bf5af3294d4726ff29b334f72e3a1092c" integrity sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ== -fast-content-type-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/fast-content-type-parse/-/fast-content-type-parse-3.0.0.tgz#5590b6c807cc598be125e6740a9fde589d2b7afb" - integrity sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg== - fast-decode-uri-component@^1.0.0, fast-decode-uri-component@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz#46f8b6c22b30ff7a81357d4f59abfae938202543" @@ -8205,7 +8004,7 @@ fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" -fast-glob@^3.3.2: +fast-glob@^3.3.2, fast-glob@^3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== @@ -8450,11 +8249,6 @@ fdir@^6.4.3: resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.6.tgz#2b268c0232697063111bbf3f64810a2a741ba281" integrity sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w== -fdir@^6.5.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" - integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== - figures@3.2.0, figures@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" @@ -8469,12 +8263,13 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" -figures@^6.0.0, figures@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-6.1.0.tgz#935479f51865fa7479f6fa94fc6fc7ac14e62c4a" - integrity sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg== +figures@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-5.0.0.tgz#126cd055052dea699f8a54e8c9450e6ecfc44d5f" + integrity sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg== dependencies: - is-unicode-supported "^2.0.0" + escape-string-regexp "^5.0.0" + is-unicode-supported "^1.2.0" file-entry-cache@^6.0.1: version "6.0.1" @@ -8577,11 +8372,6 @@ find-my-way@^8.0.0: fast-querystring "^1.0.0" safe-regex2 "^3.1.0" -find-up-simple@^1.0.0, find-up-simple@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/find-up-simple/-/find-up-simple-1.0.1.tgz#18fb90ad49e45252c4d7fca56baade04fa3fca1e" - integrity sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ== - find-up@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -8605,13 +8395,20 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -find-versions@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-6.0.0.tgz#fda285d3bb7c0c098f09e0727c54d31735f0c7d1" - integrity sha512-2kCCtc+JvcZ86IGAz3Z2Y0A1baIz9fL31pH/0S1IqZr9Iwnjq8izfPtrCyQKO6TLMPELLsQMre7VDqeIKCsHkA== +find-up@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" + integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== + dependencies: + locate-path "^7.1.0" + path-exists "^5.0.0" + +find-versions@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-5.1.0.tgz#973f6739ce20f5e439a27eba8542a4b236c8e685" + integrity sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg== dependencies: semver-regex "^4.0.5" - super-regex "^1.0.0" fishery@^2.2.2: version "2.2.2" @@ -8663,6 +8460,14 @@ for-each@^0.3.5: dependencies: is-callable "^1.2.7" +foreground-child@^3.1.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" + integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== + dependencies: + cross-spawn "^7.0.6" + signal-exit "^4.0.1" + forest-cli@5.3.8: version "5.3.8" resolved "https://registry.yarnpkg.com/forest-cli/-/forest-cli-5.3.8.tgz#61956f4c7363e7de50649dc222c4eea10d47d4c2" @@ -8800,7 +8605,7 @@ fs-extra@^11.2.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-minipass@^2.0.0: +fs-minipass@^2.0.0, fs-minipass@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== @@ -8829,11 +8634,6 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function-timeout@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/function-timeout/-/function-timeout-1.0.2.tgz#e5a7b6ffa523756ff20e1231bbe37b5f373aadd5" - integrity sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA== - function.prototype.name@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" @@ -8890,6 +8690,20 @@ gauge@^4.0.3: strip-ansi "^6.0.1" wide-align "^1.1.5" +gauge@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-5.0.2.tgz#7ab44c11181da9766333f10db8cd1e4b17fd6c46" + integrity sha512-pMaFftXPtiGIHCJHdcUUx9Rby/rFT/Kkt3fIIGCs+9PMDIljSyRiqraTlxNtBReJRDfUefpa263RQ3vnp5G/LQ== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^4.0.1" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + generate-function@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" @@ -8912,11 +8726,6 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-east-asian-width@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz#9bc4caa131702b4b61729cb7e42735bc550c9ee6" - integrity sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q== - get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" @@ -9009,14 +8818,6 @@ get-stream@^8.0.1: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== -get-stream@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-9.0.1.tgz#95157d21df8eb90d1647102b63039b1df60ebd27" - integrity sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA== - dependencies: - "@sec-ant/readable-stream" "^0.4.1" - is-stream "^4.0.1" - get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" @@ -9123,23 +8924,17 @@ glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" -glob@>=10.5.0, glob@^10.2.2, glob@^10.3.10, glob@^9.2.0: - version "13.0.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-13.0.2.tgz#74b28859255e319c84d1aed1a0a5b5248bfea227" - integrity sha512-035InabNu/c1lW0tzPhAgapKctblppqsKKG9ZaNzbr+gXwWMjXoiyGSyB9sArzrjG7jY+zntRq5ZSUYemrnWVQ== - dependencies: - minimatch "^10.1.2" - minipass "^7.1.2" - path-scurry "^2.0.0" - -glob@^13.0.0: - version "13.0.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-13.0.0.tgz#9d9233a4a274fc28ef7adce5508b7ef6237a1be3" - integrity sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA== +glob@^10.2.2, glob@^10.3.10: + version "10.5.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.5.0.tgz#8ec0355919cd3338c28428a23d4f24ecc5fe738c" + integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg== dependencies: - minimatch "^10.1.1" + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" minipass "^7.1.2" - path-scurry "^2.0.0" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" glob@^7.1.3, glob@^7.1.4: version "7.2.3" @@ -9153,6 +8948,27 @@ glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^8.0.1: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +glob@^9.2.0: + version "9.3.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" + integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== + dependencies: + fs.realpath "^1.0.0" + minimatch "^8.0.2" + minipass "^4.2.4" + path-scurry "^1.6.1" + global-dirs@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" @@ -9199,6 +9015,18 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" +globby@^14.0.0: + version "14.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-14.1.0.tgz#138b78e77cf5a8d794e327b15dce80bf1fb0a73e" + integrity sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA== + dependencies: + "@sindresorhus/merge-streams" "^2.1.0" + fast-glob "^3.3.3" + ignore "^7.0.3" + path-type "^6.0.0" + slash "^5.1.0" + unicorn-magic "^0.3.0" + gopd@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" @@ -9370,20 +9198,15 @@ hasown@^2.0.2: resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.7.tgz#1e6adf711d3f27ce35a81fe3b7bd576c2260a8fc" integrity sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg== -highlight.js@^10.7.1: - version "10.7.3" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" - integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== - -hono@>=4.11.10, hono@^4.11.4: +hono@^4.11.4: version "4.12.3" resolved "https://registry.yarnpkg.com/hono/-/hono-4.12.3.tgz#fd8dd1127c30956a9d58c1b0c4535d21c1ef3e16" integrity sha512-SFsVSjp8sj5UumXOOFlkZOG6XS9SJDKw0TbwFeV+AJ8xlST8kxK5Z/5EYa111UY8732lK2S/xB653ceuaoGwpg== -hook-std@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/hook-std/-/hook-std-4.0.0.tgz#8ad817e2405f0634fa128822a8b27054a8120262" - integrity sha512-IHI4bEVOt3vRUDJ+bFA9VUJlo7SzvFARPNLw75pqSmAOP2HmTWfFJtPvLBrDrlgjEYXY9zs7SFdHPQaJShkSCQ== +hook-std@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/hook-std/-/hook-std-3.0.0.tgz#47038a01981e07ce9d83a6a3b2eb98cad0f7bd58" + integrity sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw== hosted-git-info@^2.1.4: version "2.8.9" @@ -9397,6 +9220,13 @@ hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: dependencies: lru-cache "^6.0.0" +hosted-git-info@^6.0.0, hosted-git-info@^6.1.1, hosted-git-info@^6.1.3: + version "6.1.3" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-6.1.3.tgz#2ee1a14a097a1236bddf8672c35b613c46c55946" + integrity sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw== + dependencies: + lru-cache "^7.5.1" + hosted-git-info@^7.0.0, hosted-git-info@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.2.tgz#9b751acac097757667f30114607ef7b661ff4f17" @@ -9404,13 +9234,6 @@ hosted-git-info@^7.0.0, hosted-git-info@^7.0.2: dependencies: lru-cache "^10.0.1" -hosted-git-info@^9.0.0, hosted-git-info@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-9.0.2.tgz#b38c8a802b274e275eeeccf9f4a1b1a0a8557ada" - integrity sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg== - dependencies: - lru-cache "^11.1.0" - html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" @@ -9556,11 +9379,6 @@ human-signals@^5.0.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== -human-signals@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-8.0.1.tgz#f08bb593b6d1db353933d06156cedec90abe51fb" - integrity sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ== - humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" @@ -9616,25 +9434,23 @@ ignore-by-default@^1.0.1: resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== -ignore-walk@^6.0.4: +ignore-walk@^6.0.0, ignore-walk@^6.0.4: version "6.0.5" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.5.tgz#ef8d61eab7da169078723d1f82833b36e200b0dd" integrity sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A== dependencies: minimatch "^9.0.0" -ignore-walk@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-8.0.0.tgz#380c173badc3a18c57ff33440753f0052f572b14" - integrity sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A== - dependencies: - minimatch "^10.0.3" - ignore@^5.0.4, ignore@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== +ignore@^7.0.3: + version "7.0.5" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9" + integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== + image-size@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.0.2.tgz#d778b6d0ab75b2737c1556dd631652eb963bc486" @@ -9655,13 +9471,10 @@ import-fresh@^3.0.0, import-fresh@^3.2.1, import-fresh@^3.3.0: parent-module "^1.0.0" resolve-from "^4.0.0" -import-from-esm@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-from-esm/-/import-from-esm-2.0.0.tgz#184eb9aad4f557573bd6daf967ad5911b537797a" - integrity sha512-YVt14UZCgsX1vZQ3gKjkWVdBdHQ6eu3MPU1TBgL1H5orXe2+jWD006WCPPtOuwlQm10NuzOW5WawiF1Q9veW8g== - dependencies: - debug "^4.3.4" - import-meta-resolve "^4.0.0" +import-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-4.0.0.tgz#2710b8d66817d232e16f4166e319248d3d5492e2" + integrity sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ== import-local@3.1.0, import-local@^3.0.2: version "3.1.0" @@ -9671,11 +9484,6 @@ import-local@3.1.0, import-local@^3.0.2: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" -import-meta-resolve@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz#08cb85b5bd37ecc8eb1e0f670dc2767002d43734" - integrity sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg== - imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -9691,11 +9499,6 @@ indent-string@^5.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-5.0.0.tgz#4fd2980fccaf8622d14c64d694f4cf33c81951a5" integrity sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg== -index-to-position@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/index-to-position/-/index-to-position-1.2.0.tgz#c800eb34dacf4dbf96b9b06c7eb78d5f704138b4" - integrity sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw== - infer-owner@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" @@ -9734,16 +9537,11 @@ ini@^1.3.2, ini@^1.3.4, ini@^1.3.8, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -ini@^4.1.3: +ini@^4.1.0, ini@^4.1.1, ini@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.3.tgz#4c359675a6071a46985eb39b14e4a2c0ec98a795" integrity sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg== -ini@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/ini/-/ini-6.0.0.tgz#efc7642b276f6a37d22fdf56ef50889d7146bf30" - integrity sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ== - init-package-json@6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-6.0.3.tgz#2552fba75b6eed2495dc97f44183e2e5a5bcf8b0" @@ -9757,18 +9555,18 @@ init-package-json@6.0.3: validate-npm-package-license "^3.0.4" validate-npm-package-name "^5.0.0" -init-package-json@^8.2.4: - version "8.2.4" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-8.2.4.tgz#dc3c1c13e6b2da9631acb5b4763f5d5523133647" - integrity sha512-SqX/+tPl3sZD+IY0EuMiM1kK1B45h+P6JQPo3Q9zlqNINX2XiX3x/WSbYGFqS6YCkODNbGb3L5RawMrYE/cfKw== +init-package-json@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-5.0.0.tgz#030cf0ea9c84cfc1b0dc2e898b45d171393e4b40" + integrity sha512-kBhlSheBfYmq3e0L1ii+VKe3zBTLL5lDCDWR+f9dLmEGSB3MqLlMlsolubSsyI88Bg6EA+BIMlomAnQ1SwgQBw== dependencies: - "@npmcli/package-json" "^7.0.0" - npm-package-arg "^13.0.0" - promzard "^3.0.1" - read "^5.0.1" - semver "^7.7.2" + npm-package-arg "^10.0.0" + promzard "^1.0.0" + read "^2.0.0" + read-package-json "^6.0.0" + semver "^7.3.5" validate-npm-package-license "^3.0.4" - validate-npm-package-name "^7.0.0" + validate-npm-package-name "^5.0.0" inquirer@6.2.0: version "6.2.0" @@ -9850,10 +9648,10 @@ ip-address@^5.8.9: lodash "^4.17.15" sprintf-js "1.1.2" -ip-regex@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-5.0.0.tgz#cd313b2ae9c80c07bd3851e12bf4fa4dc5480632" - integrity sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw== +ip-regex@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" + integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== ip6@0.0.4: version "0.0.4" @@ -9989,12 +9787,12 @@ is-ci@3.0.1: dependencies: ci-info "^3.2.0" -is-cidr@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-6.0.1.tgz#125e9dead938b6fa996aa500662a5e9f88f338f4" - integrity sha512-JIJlvXodfsoWFAvvjB7Elqu8qQcys2SZjkIJCLdk4XherUqZ6+zH7WIpXkp4B3ZxMH0Fz7zIsZwyvs6JfM0csw== +is-cidr@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-4.0.2.tgz#94c7585e4c6c77ceabf920f8cde51b8c0fda8814" + integrity sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA== dependencies: - cidr-regex "5.0.1" + cidr-regex "^3.1.1" is-core-module@^2.13.0, is-core-module@^2.5.0: version "2.13.1" @@ -10003,7 +9801,7 @@ is-core-module@^2.13.0, is-core-module@^2.5.0: dependencies: hasown "^2.0.0" -is-core-module@^2.16.1: +is-core-module@^2.16.1, is-core-module@^2.8.1: version "2.16.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== @@ -10164,11 +9962,6 @@ is-plain-obj@^2.0.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== -is-plain-obj@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" - integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== - is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -10267,11 +10060,6 @@ is-stream@^3.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== -is-stream@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-4.0.1.tgz#375cf891e16d2e4baec250b85926cffc14720d9b" - integrity sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A== - is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" @@ -10310,6 +10098,13 @@ is-text-path@^1.0.1: dependencies: text-extensions "^1.0.0" +is-text-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-2.0.0.tgz#b2484e2b720a633feb2e85b67dc193ff72c75636" + integrity sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw== + dependencies: + text-extensions "^2.0.0" + is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: version "1.1.12" resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" @@ -10336,10 +10131,10 @@ is-unicode-supported@^0.1.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-unicode-supported@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz#09f0ab0de6d3744d48d265ebb98f65d11f2a9b3a" - integrity sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ== +is-unicode-supported@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" + integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== is-weakmap@^2.0.2: version "2.0.2" @@ -10407,10 +10202,10 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -issue-parser@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/issue-parser/-/issue-parser-7.0.1.tgz#8a053e5a4952c75bb216204e454b4fc7d4cc9637" - integrity sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg== +issue-parser@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/issue-parser/-/issue-parser-6.0.0.tgz#b1edd06315d4f2044a9755daf85fdafde9b4014a" + integrity sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA== dependencies: lodash.capitalize "^4.2.1" lodash.escaperegexp "^4.1.2" @@ -10481,6 +10276,15 @@ iterare@1.2.1: resolved "https://registry.yarnpkg.com/iterare/-/iterare-1.2.1.tgz#139c400ff7363690e33abffa33cbba8920f00042" integrity sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q== +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + jake@^10.8.5: version "10.8.7" resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" @@ -10900,10 +10704,10 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@4.1.0, js-yaml@4.1.1, js-yaml@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" - integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== +js-yaml@4.1.0, js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" @@ -10915,10 +10719,10 @@ js-yaml@^3.10.0, js-yaml@^3.13.1, js-yaml@^3.14.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== +js-yaml@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" + integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== dependencies: argparse "^2.0.1" @@ -10973,16 +10777,11 @@ json-parse-even-better-errors@^3.0.0: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz#2cb2ee33069a78870a0c7e3da560026b89669cf7" integrity sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA== -json-parse-even-better-errors@^3.0.2: +json-parse-even-better-errors@^3.0.1, json-parse-even-better-errors@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz#b43d35e89c0f3be6b5fbbe9dc6c82467b30c28da" integrity sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ== -json-parse-even-better-errors@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz#93c89f529f022e5dadc233409324f0167b1e903e" - integrity sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ== - json-schema-ref-resolver@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz#6586f483b76254784fc1d2120f717bdc9f0a99bf" @@ -11404,70 +11203,78 @@ libnpmaccess@8.0.6: npm-package-arg "^11.0.2" npm-registry-fetch "^17.0.1" -libnpmaccess@^10.0.3: - version "10.0.3" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-10.0.3.tgz#856dc29fd35050159dff0039337aab503367586b" - integrity sha512-JPHTfWJxIK+NVPdNMNGnkz4XGX56iijPbe0qFWbdt68HL+kIvSzh+euBL8npLZvl2fpaxo+1eZSdoG15f5YdIQ== - dependencies: - npm-package-arg "^13.0.0" - npm-registry-fetch "^19.0.0" - -libnpmdiff@^8.0.12: - version "8.0.12" - resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-8.0.12.tgz#c55c80e0cb196588174989f36c285750fe7de048" - integrity sha512-M33yWsbxCUv4fwquYNxdRl//mX8CcmY+pHhZZ+f8ihKh+yfcQw2jROv0sJQ3eX5FzRVJKdCdH7nM0cNlHy83DQ== - dependencies: - "@npmcli/arborist" "^9.1.9" - "@npmcli/installed-package-contents" "^4.0.0" - binary-extensions "^3.0.0" - diff "^8.0.2" - minimatch "^10.0.3" - npm-package-arg "^13.0.0" - pacote "^21.0.2" - tar "^7.5.1" - -libnpmexec@^10.1.11: - version "10.1.11" - resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-10.1.11.tgz#6ccc19f2d81c0eeb4f72f2fe09e8fc1637f5ec7f" - integrity sha512-228ZmYSfElpfywVFO3FMieLkFUDNknExXLLJoFcKJbyrucHc8KgDW4i9F4uJGNrbPvDqDtm7hcSEvrneN0Anqg== - dependencies: - "@npmcli/arborist" "^9.1.9" - "@npmcli/package-json" "^7.0.0" - "@npmcli/run-script" "^10.0.0" +libnpmaccess@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-7.0.3.tgz#9878b75c5cf36ddfff167dd47c1a6cf1fa21193c" + integrity sha512-It+fk/NRdRfv5giLhaVeyebGi/0S2LDSAwuZ0AGQ4x//PtCVb2Hj29wgSHe+XEL+RUkvLBkxbRV+DqLtOzuVTQ== + dependencies: + npm-package-arg "^10.1.0" + npm-registry-fetch "^14.0.3" + +libnpmdiff@^5.0.20: + version "5.0.21" + resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-5.0.21.tgz#9d3036595a4cf393e1de07df98a40607a054d333" + integrity sha512-Zx+o/qnGoX46osnInyQQ5KI8jn2wIqXXiu4TJzE8GFd+o6kbyblJf+ihG81M1+yHK3AzkD1m4KK3+UTPXh/hBw== + dependencies: + "@npmcli/arborist" "^6.5.0" + "@npmcli/disparity-colors" "^3.0.0" + "@npmcli/installed-package-contents" "^2.0.2" + binary-extensions "^2.2.0" + diff "^5.1.0" + minimatch "^9.0.0" + npm-package-arg "^10.1.0" + pacote "^15.0.8" + tar "^6.1.13" + +libnpmexec@^6.0.4: + version "6.0.5" + resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-6.0.5.tgz#36eb7e5a94a653478c8dd66b4a967cadf3f2540d" + integrity sha512-yN/7uJ3iYCPaKagHfrqXuCFLKn2ddcnYpEyC/tVhisHULC95uCy8AhUdNkThRXzhFqqptejO25ZfoWOGrdqnxA== + dependencies: + "@npmcli/arborist" "^6.5.0" + "@npmcli/run-script" "^6.0.0" ci-info "^4.0.0" - npm-package-arg "^13.0.0" - pacote "^21.0.2" - proc-log "^6.0.0" - promise-retry "^2.0.1" - read "^5.0.1" + npm-package-arg "^10.1.0" + npmlog "^7.0.1" + pacote "^15.0.8" + proc-log "^3.0.0" + read "^2.0.0" + read-package-json-fast "^3.0.2" semver "^7.3.7" - signal-exit "^4.1.0" - walk-up-path "^4.0.0" + walk-up-path "^3.0.1" + +libnpmfund@^4.2.1: + version "4.2.2" + resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-4.2.2.tgz#4e50507212e64fcb6a396e4c02369f6c0fc40369" + integrity sha512-qnkP09tpryxD/iPYasHM7+yG4ZVe0e91sBVI/R8HJ1+ajeR9poWDckwiN2LEWGvtV/T/dqB++6A1NLrA5NPryw== + dependencies: + "@npmcli/arborist" "^6.5.0" -libnpmfund@^7.0.12: - version "7.0.12" - resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-7.0.12.tgz#0a8afd552c0e9d56b8e5904599406d62f2a640be" - integrity sha512-Jg4zvboAkI35JFoywEleJa9eU0ZIkMOZH3gt16VoexaYV3yVTjjIr4ZVnPx+MfsLo28y6DHQ8RgN4PFuKt1bhg== +libnpmhook@^9.0.3: + version "9.0.4" + resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-9.0.4.tgz#43d893e19944a2e729b2b165a74f84a69443880d" + integrity sha512-bYD8nJiPnqeMtSsRc5bztqSh6/v16M0jQjLeO959HJqf9ZRWKRpVnFx971Rz5zbPGOB2BrQa6iopsh5vons5ww== dependencies: - "@npmcli/arborist" "^9.1.9" + aproba "^2.0.0" + npm-registry-fetch "^14.0.3" -libnpmorg@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-8.0.1.tgz#975b61c2635f7edc07552ab8a455ce026decb88c" - integrity sha512-/QeyXXg4hqMw0ESM7pERjIT2wbR29qtFOWIOug/xO4fRjS3jJJhoAPQNsnHtdwnCqgBdFpGQ45aIdFFZx2YhTA== +libnpmorg@^5.0.4: + version "5.0.5" + resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-5.0.5.tgz#baaba5c77bdfa6808975be9134a330f84b3fa4d4" + integrity sha512-0EbtEIFthVlmaj0hhC3LlEEXUZU3vKfJwfWL//iAqKjHreMhCD3cgdkld+UeWYDgsZzwzvXmopoY0l38I0yx9Q== dependencies: aproba "^2.0.0" - npm-registry-fetch "^19.0.0" + npm-registry-fetch "^14.0.3" -libnpmpack@^9.0.12: - version "9.0.12" - resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-9.0.12.tgz#1514e3caa44f47896089bfa7f474beb8a10de21a" - integrity sha512-32j+CIrJhVngbqGUbhnpNFnPi6rkx6NP1lRO1OHf4aoZ57ad+mTkS788FfeAoXoiJDmfmAqgZejXRmEfy7s6Sg== +libnpmpack@^5.0.20: + version "5.0.21" + resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-5.0.21.tgz#bcc608279840448fa8c28d8df0f326694d0b6061" + integrity sha512-mQd3pPx7Xf6i2A6QnYcCmgq34BmfVG3HJvpl422B5dLKfi9acITqcJiJ2K7adhxPKZMF5VbP2+j391cs5w+xww== dependencies: - "@npmcli/arborist" "^9.1.9" - "@npmcli/run-script" "^10.0.0" - npm-package-arg "^13.0.0" - pacote "^21.0.2" + "@npmcli/arborist" "^6.5.0" + "@npmcli/run-script" "^6.0.0" + npm-package-arg "^10.1.0" + pacote "^15.0.8" libnpmpublish@9.0.9: version "9.0.9" @@ -11483,44 +11290,44 @@ libnpmpublish@9.0.9: sigstore "^2.2.0" ssri "^10.0.6" -libnpmpublish@^11.1.3: - version "11.1.3" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-11.1.3.tgz#fcda5c113798155fa111e04be63c9599d38ae4c2" - integrity sha512-NVPTth/71cfbdYHqypcO9Lt5WFGTzFEcx81lWd7GDJIgZ95ERdYHGUfCtFejHCyqodKsQkNEx2JCkMpreDty/A== +libnpmpublish@^7.5.1: + version "7.5.2" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-7.5.2.tgz#1b2780a4a56429d6dea332174286179b8d6f930c" + integrity sha512-azAxjEjAgBkbPHUGsGdMbTScyiLcTKdEnNYwGS+9yt+fUsNyiYn8hNH3+HeWKaXzFjvxi50MrHw1yp1gg5pumQ== dependencies: - "@npmcli/package-json" "^7.0.0" ci-info "^4.0.0" - npm-package-arg "^13.0.0" - npm-registry-fetch "^19.0.0" - proc-log "^6.0.0" + normalize-package-data "^5.0.0" + npm-package-arg "^10.1.0" + npm-registry-fetch "^14.0.3" + proc-log "^3.0.0" semver "^7.3.7" - sigstore "^4.0.0" - ssri "^13.0.0" + sigstore "^1.4.0" + ssri "^10.0.1" -libnpmsearch@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-9.0.1.tgz#674a88ffc9ab5826feb34c2c66e90797b38f4c2e" - integrity sha512-oKw58X415ERY/BOGV3jQPVMcep8YeMRWMzuuqB0BAIM5VxicOU1tQt19ExCu4SV77SiTOEoziHxGEgJGw3FBYQ== +libnpmsearch@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-6.0.3.tgz#f6001910b4a68341c2aa3f6f9505e665ed98759e" + integrity sha512-4FLTFsygxRKd+PL32WJlFN1g6gkfx3d90PjgSgd6kl9nJ55sZQAqNyi1M7QROKB4kN8JCNCphK8fQYDMg5bCcg== dependencies: - npm-registry-fetch "^19.0.0" + npm-registry-fetch "^14.0.3" -libnpmteam@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-8.0.2.tgz#0417161bfcd155f5e8391cc2b6a05260ccbf1f41" - integrity sha512-ypLrDUQoi8EhG+gzx5ENMcYq23YjPV17Mfvx4nOnQiHOi8vp47+4GvZBrMsEM4yeHPwxguF/HZoXH4rJfHdH/w== +libnpmteam@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-5.0.4.tgz#255ac22d94e4b9e911456bf97c1dc1013df03659" + integrity sha512-yN2zxNb8Urvvo7fTWRcP3E/KPtpZJXFweDWcl+H/s3zopGDI9ahpidddGVG98JhnPl3vjqtZvFGU3/sqVTfuIw== dependencies: aproba "^2.0.0" - npm-registry-fetch "^19.0.0" + npm-registry-fetch "^14.0.3" -libnpmversion@^8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-8.0.3.tgz#f50030c72a85e35b70a4ea4c075347f1999f9fe5" - integrity sha512-Avj1GG3DT6MGzWOOk3yA7rORcMDUPizkIGbI8glHCO7WoYn3NYNmskLDwxg2NMY1Tyf2vrHAqTuSG58uqd1lJg== +libnpmversion@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-4.0.3.tgz#f4d85d3eb6bdbf7de8d9317abda92528e84b1a53" + integrity sha512-eD1O5zr0ko5pjOdz+2NyTEzP0kzKG8VIVyU+hIsz61cRmTrTxFRJhVBNOI1Q/inifkcM/UTl8EMfa0vX48zfoQ== dependencies: - "@npmcli/git" "^7.0.0" - "@npmcli/run-script" "^10.0.0" - json-parse-even-better-errors "^5.0.0" - proc-log "^6.0.0" + "@npmcli/git" "^4.0.1" + "@npmcli/run-script" "^6.0.0" + json-parse-even-better-errors "^3.0.0" + proc-log "^3.0.0" semver "^7.3.7" lie@~3.3.0: @@ -11583,6 +11390,11 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +lines-and-columns@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.4.tgz#d00318855905d2660d8c0822e3f5a4715855fc42" + integrity sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A== + link-check@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/link-check/-/link-check-5.2.0.tgz#595a339d305900bed8c1302f4342a29c366bf478" @@ -11642,6 +11454,13 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +locate-path@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" + integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== + dependencies: + p-locate "^6.0.0" + lodash-es@^4.17.21: version "4.17.23" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.23.tgz#58c4360fd1b5d33afc6c0bbd3d1149349b1138e0" @@ -11832,16 +11651,11 @@ lru-cache@^10.0.1: dependencies: semver "^7.3.5" -lru-cache@^10.2.2: +lru-cache@^10.2.0, lru-cache@^10.2.2: version "10.4.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== -lru-cache@^11.0.0, lru-cache@^11.1.0, lru-cache@^11.2.1: - version "11.2.4" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.2.4.tgz#ecb523ebb0e6f4d837c807ad1abaea8e0619770d" - integrity sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg== - lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -11856,7 +11670,7 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lru-cache@^7.14.1: +lru-cache@^7.14.1, lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: version "7.18.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== @@ -11883,15 +11697,6 @@ luxon@^3.2.1: resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.4.4.tgz#cf20dc27dc532ba41a169c43fdcc0063601577af" integrity sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA== -make-asynchronous@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/make-asynchronous/-/make-asynchronous-1.0.1.tgz#5ff174bae4e4371746debff112103545037373ee" - integrity sha512-T9BPOmEOhp6SmV25SwLVcHK4E6JyG/coH3C6F1NjNXSziv/fd4GmsqMk8YR6qpPOswfaOCApSNkZv6fxoaYFcQ== - dependencies: - p-event "^6.0.0" - type-fest "^4.6.0" - web-worker "1.2.0" - make-dir@4.0.0, make-dir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" @@ -11919,6 +11724,49 @@ make-error@1.x, make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +make-fetch-happen@^10.0.3: + version "10.2.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" + integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== + dependencies: + agentkeepalive "^4.2.1" + cacache "^16.1.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-fetch "^2.0.3" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^9.0.0" + +make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f" + integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w== + dependencies: + agentkeepalive "^4.2.1" + cacache "^17.0.0" + http-cache-semantics "^4.1.1" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^5.0.0" + minipass-fetch "^3.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^10.0.0" + make-fetch-happen@^13.0.0, make-fetch-happen@^13.0.1: version "13.0.1" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz#273ba2f78f45e1f3a6dca91cede87d9fa4821e36" @@ -11937,23 +11785,6 @@ make-fetch-happen@^13.0.0, make-fetch-happen@^13.0.1: promise-retry "^2.0.1" ssri "^10.0.0" -make-fetch-happen@^15.0.0, make-fetch-happen@^15.0.1, make-fetch-happen@^15.0.3: - version "15.0.3" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-15.0.3.tgz#1578d72885f2b3f9e5daa120b36a14fc31a84610" - integrity sha512-iyyEpDty1mwW3dGlYXAJqC/azFn5PPvgKVwXayOGBSmKLxhKZ9fg4qIan2ePpp1vJIwfFiO34LAPZgq9SZW9Aw== - dependencies: - "@npmcli/agent" "^4.0.0" - cacache "^20.0.1" - http-cache-semantics "^4.1.1" - minipass "^7.0.2" - minipass-fetch "^5.0.0" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^1.0.0" - proc-log "^6.0.0" - promise-retry "^2.0.1" - ssri "^13.0.0" - make-fetch-happen@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" @@ -12004,7 +11835,7 @@ mariadb@^3.0.2: iconv-lite "^0.6.3" lru-cache "^10.0.1" -markdown-it@>=14.1.1, markdown-it@^14.1.0: +markdown-it@^14.1.0: version "14.1.1" resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-14.1.1.tgz#856f90b66fc39ae70affd25c1b18b581d7deee1f" integrity sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA== @@ -12045,29 +11876,28 @@ markdown-table@^2.0.0: dependencies: repeat-string "^1.0.0" -marked-terminal@^7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-7.3.0.tgz#7a86236565f3dd530f465ffce9c3f8b62ef270e8" - integrity sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw== - dependencies: - ansi-escapes "^7.0.0" - ansi-regex "^6.1.0" - chalk "^5.4.1" - cli-highlight "^2.1.11" - cli-table3 "^0.6.5" - node-emoji "^2.2.0" - supports-hyperlinks "^3.1.0" - -marked@^15.0.0: - version "15.0.12" - resolved "https://registry.yarnpkg.com/marked/-/marked-15.0.12.tgz#30722c7346e12d0a2d0207ab9b0c4f0102d86c4e" - integrity sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA== +marked-terminal@^5.1.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-5.2.0.tgz#c5370ec2bae24fb2b34e147b731c94fa933559d3" + integrity sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA== + dependencies: + ansi-escapes "^6.2.0" + cardinal "^2.1.1" + chalk "^5.2.0" + cli-table3 "^0.6.3" + node-emoji "^1.11.0" + supports-hyperlinks "^2.3.0" marked@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== +marked@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/marked/-/marked-5.1.2.tgz#62b5ccfc75adf72ca3b64b2879b551d89e77677f" + integrity sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg== + math-expression-evaluator@^2.0.0: version "2.0.7" resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-2.0.7.tgz#dc99a80ce2bf7f9b7df878126feb5c506c1fdf5f" @@ -12196,11 +12026,6 @@ meow@^12.0.1: resolved "https://registry.yarnpkg.com/meow/-/meow-12.1.1.tgz#e558dddbab12477b69b2e9a2728c327f191bace6" integrity sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw== -meow@^13.0.0: - version "13.2.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-13.2.0.tgz#6b7d63f913f984063b3cc261b6e8800c4cd3474f" - integrity sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA== - meow@^8.0.0, meow@^8.1.2: version "8.1.2" resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" @@ -12301,7 +12126,15 @@ micromark@^2.11.3, micromark@~2.11.0, micromark@~2.11.3: debug "^4.0.0" parse-entities "^2.0.0" -micromatch@4.0.2, micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.8: +micromatch@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + +micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== @@ -12407,13 +12240,6 @@ minimatch@9.0.3: dependencies: brace-expansion "^2.0.1" -minimatch@^10.0.3, minimatch@^10.1.1, minimatch@^10.1.2: - version "10.2.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.4.tgz#465b3accbd0218b8281f5301e27cedc697f96fde" - integrity sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg== - dependencies: - brace-expansion "^5.0.2" - minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e" @@ -12428,7 +12254,14 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.0, minimatch@^9.0.4, minimatch@^9.0.5: +minimatch@^8.0.2: + version "8.0.7" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.7.tgz#954766e22da88a3e0a17ad93b58c15c9d8a579de" + integrity sha512-V+1uQNdzybxa14e/p00HZnQNNcTjnRJjDxg2V8wtkjFctq4M7hXFws4oekyTP0Jebeq7QYtpFyOeBAjc88zvYg== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.0, minimatch@^9.0.3, minimatch@^9.0.4, minimatch@^9.0.5: version "9.0.9" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.9.tgz#9b0cb9fcb78087f6fd7eababe2511c4d3d60574e" integrity sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg== @@ -12474,25 +12307,25 @@ minipass-fetch@^1.3.2: optionalDependencies: encoding "^0.1.12" -minipass-fetch@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.4.tgz#4d4d9b9f34053af6c6e597a64be8e66e42bf45b7" - integrity sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg== +minipass-fetch@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" + integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== dependencies: - minipass "^7.0.3" + minipass "^3.1.6" minipass-sized "^1.0.3" minizlib "^2.1.2" optionalDependencies: encoding "^0.1.13" -minipass-fetch@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-5.0.0.tgz#644ed3fa172d43b3163bb32f736540fc138c4afb" - integrity sha512-fiCdUALipqgPWrOVTz9fw0XhcazULXOSU6ie40DDbX1F49p1dBrSRBuswndTx1x3vEb/g0FT7vC4c4C2u/mh3A== +minipass-fetch@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.4.tgz#4d4d9b9f34053af6c6e597a64be8e66e42bf45b7" + integrity sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg== dependencies: minipass "^7.0.3" minipass-sized "^1.0.3" - minizlib "^3.0.1" + minizlib "^2.1.2" optionalDependencies: encoding "^0.1.13" @@ -12503,10 +12336,18 @@ minipass-flush@^1.0.5: dependencies: minipass "^3.0.0" -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== +minipass-json-stream@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.2.tgz#5121616c77a11c406c3ffa77509e0b77bb267ec3" + integrity sha512-myxeeTm57lYs8pH2nxPzmEEg8DGIgW+9mv6D4JZD2pa81I/OBjeU7PtICXV6c9eRGTA5JMDsuIPUZRCyBMYNhg== + dependencies: + jsonparse "^1.3.1" + minipass "^3.0.0" + +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== dependencies: minipass "^3.0.0" @@ -12517,14 +12358,29 @@ minipass-sized@^1.0.3: dependencies: minipass "^3.0.0" -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3, minipass@^3.1.6: 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@^7.0.2, minipass@^7.0.4, minipass@^7.1.1, minipass@^7.1.2: +minipass@^4.2.4: + version "4.2.8" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" + integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": + version "7.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.3.tgz#79389b4eb1bb2d003a9bba87d492f2bd37bdc65b" + integrity sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A== + +minipass@^7.0.2, minipass@^7.0.4, minipass@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== @@ -12534,7 +12390,7 @@ minipass@^7.0.3: resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== -minizlib@^2.0.0, minizlib@^2.1.2: +minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== @@ -12542,13 +12398,6 @@ minizlib@^2.0.0, minizlib@^2.1.2: minipass "^3.0.0" yallist "^4.0.0" -minizlib@^3.0.1, minizlib@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.1.0.tgz#6ad76c3a8f10227c9b51d1c9ac8e30b27f5a251c" - integrity sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw== - dependencies: - minipass "^7.1.2" - mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" @@ -12706,7 +12555,7 @@ mute-stream@0.0.8: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -mute-stream@^1.0.0: +mute-stream@^1.0.0, 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== @@ -12716,11 +12565,6 @@ mute-stream@^2.0.0: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-2.0.0.tgz#a5446fc0c512b71c83c44d908d5c7b7b4c493b2b" integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== -mute-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-3.0.0.tgz#cd8014dd2acb72e1e91bb67c74f0019e620ba2d1" - integrity sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw== - mysql2@3.9.8: version "3.9.8" resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.9.8.tgz#fe8a0f975f2c495ed76ca988ddc5505801dc49ce" @@ -12749,15 +12593,6 @@ mysql2@^3.0.1: seq-queue "^0.0.5" sqlstring "^2.3.2" -mz@^2.4.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - named-placeholders@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/named-placeholders/-/named-placeholders-1.1.3.tgz#df595799a36654da55dda6152ba7a137ad1d9351" @@ -12865,15 +12700,12 @@ node-addon-api@^7.0.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== -node-emoji@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-2.2.0.tgz#1d000e3c76e462577895be1b436f4aa2d6760eb0" - integrity sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw== +node-emoji@^1.11.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" + integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== dependencies: - "@sindresorhus/is" "^4.6.0" - char-regex "^1.0.2" - emojilib "^2.4.0" - skin-tone "^2.0.0" + lodash "^4.17.21" node-fetch@2.6.7: version "2.6.7" @@ -12921,21 +12753,22 @@ node-gyp@^10.0.0: tar "^6.2.1" which "^4.0.0" -node-gyp@^12.1.0: - version "12.1.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-12.1.0.tgz#302fc2d3fec36975cfb8bfee7a6bf6b7f0be9553" - integrity sha512-W+RYA8jBnhSr2vrTtlPYPc1K+CSjGpVDRZxcqJcERZ8ND3A1ThWPHRwctTx3qC3oW99jt726jhdz3Y6ky87J4g== +node-gyp@^9.0.0, node-gyp@^9.4.1: + version "9.4.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.1.tgz#8a1023e0d6766ecb52764cc3a734b36ff275e185" + integrity sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ== dependencies: env-paths "^2.2.0" exponential-backoff "^3.1.1" + glob "^7.1.4" graceful-fs "^4.2.6" - make-fetch-happen "^15.0.0" - nopt "^9.0.0" - proc-log "^6.0.0" + make-fetch-happen "^10.0.3" + nopt "^6.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" semver "^7.3.5" - tar "^7.5.2" - tinyglobby "^0.2.12" - which "^6.0.0" + tar "^6.1.2" + which "^2.0.2" node-int64@^0.4.0: version "0.4.0" @@ -13003,20 +12836,20 @@ nopt@^5.0.0: dependencies: abbrev "1" -nopt@^7.0.0, nopt@^7.2.1: +nopt@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" + integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== + dependencies: + abbrev "^1.0.0" + +nopt@^7.0.0, nopt@^7.2.0, nopt@^7.2.1: version "7.2.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.1.tgz#1cac0eab9b8e97c9093338446eddd40b2c8ca1e7" integrity sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w== dependencies: abbrev "^2.0.0" -nopt@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-9.0.0.tgz#6bff0836b2964d24508b6b41b5a9a49c4f4a1f96" - integrity sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw== - dependencies: - abbrev "^4.0.0" - nopt@~1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" @@ -13044,6 +12877,16 @@ normalize-package-data@^3.0.0, normalize-package-data@^3.0.3: semver "^7.3.4" validate-npm-package-license "^3.0.1" +normalize-package-data@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-5.0.0.tgz#abcb8d7e724c40d88462b84982f7cbf6859b4588" + integrity sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q== + dependencies: + hosted-git-info "^6.0.0" + is-core-module "^2.8.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + normalize-package-data@^6.0.0, normalize-package-data@^6.0.1: version "6.0.2" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.2.tgz#a7bc22167fe24025412bcff0a9651eb768b03506" @@ -13053,15 +12896,6 @@ normalize-package-data@^6.0.0, normalize-package-data@^6.0.1: semver "^7.3.5" validate-npm-package-license "^3.0.4" -normalize-package-data@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-8.0.0.tgz#bdce7ff2d6ba891b853e179e45a5337766e304a7" - integrity sha512-RWk+PI433eESQ7ounYxIp67CYuVsS1uYSonX3kA6ps/3LWfjVQa/ptEg6Y3T6uAMq1mWpX9PQ+qx+QaHpsc7gQ== - dependencies: - hosted-git-info "^9.0.0" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -13072,10 +12906,10 @@ normalize-url@^8.0.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.1.0.tgz#d33504f67970decf612946fd4880bc8c0983486d" integrity sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w== -npm-audit-report@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-7.0.0.tgz#c384ac4afede55f21b30778202ad568e54644c35" - integrity sha512-bluLL4xwGr/3PERYz50h2Upco0TJMDcLcymuFnfDWeGO99NqH724MNzhWi5sXXuXf2jbytFF0LyR8W+w1jTI6A== +npm-audit-report@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-5.0.0.tgz#83ac14aeff249484bde81eff53c3771d5048cf95" + integrity sha512-EkXrzat7zERmUhHaoren1YhTxFwsOu5jypE84k6632SXTHcQE1z8V51GC6GVZt8LxkC+tbBcKMUBZAgk8SUSbw== npm-bundled@^3.0.0: version "3.0.0" @@ -13084,37 +12918,18 @@ npm-bundled@^3.0.0: dependencies: npm-normalize-package-bin "^3.0.0" -npm-bundled@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-5.0.0.tgz#5025d847cfd06c7b8d9432df01695d0133d9ee80" - integrity sha512-JLSpbzh6UUXIEoqPsYBvVNVmyrjVZ1fzEFbqxKkTJQkWBO3xFzFT+KDnSKQWwOQNbuWRwt5LSD6HOTLGIWzfrw== - dependencies: - npm-normalize-package-bin "^5.0.0" - -npm-install-checks@^6.0.0, npm-install-checks@^6.2.0: +npm-install-checks@^6.0.0, npm-install-checks@^6.2.0, npm-install-checks@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.3.0.tgz#046552d8920e801fa9f919cad569545d60e826fe" integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw== dependencies: semver "^7.1.1" -npm-install-checks@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-8.0.0.tgz#f5d18e909bb8318d85093e9d8f36ac427c1cbe30" - integrity sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA== - dependencies: - semver "^7.1.1" - npm-normalize-package-bin@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== -npm-normalize-package-bin@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz#2b207ff260f2e525ddce93356614e2f736728f89" - integrity sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag== - npm-package-arg@11.0.2: version "11.0.2" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-11.0.2.tgz#1ef8006c4a9e9204ddde403035f7ff7d718251ca" @@ -13125,6 +12940,16 @@ npm-package-arg@11.0.2: semver "^7.3.5" validate-npm-package-name "^5.0.0" +npm-package-arg@^10.0.0, npm-package-arg@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-10.1.0.tgz#827d1260a683806685d17193073cc152d3c7e9b1" + integrity sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA== + dependencies: + hosted-git-info "^6.0.0" + proc-log "^3.0.0" + semver "^7.3.5" + validate-npm-package-name "^5.0.0" + npm-package-arg@^11.0.0, npm-package-arg@^11.0.2: version "11.0.3" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-11.0.3.tgz#dae0c21199a99feca39ee4bfb074df3adac87e2d" @@ -13135,16 +12960,6 @@ npm-package-arg@^11.0.0, npm-package-arg@^11.0.2: semver "^7.3.5" validate-npm-package-name "^5.0.0" -npm-package-arg@^13.0.0, npm-package-arg@^13.0.2: - version "13.0.2" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-13.0.2.tgz#72a80f2afe8329860e63854489415e9e9a2f78a7" - integrity sha512-IciCE3SY3uE84Ld8WZU23gAPPV9rIYod4F+rc+vJ7h7cwAJt9Vk6TVsK60ry7Uj3SRS3bqRRIGuTp9YVlk6WNA== - dependencies: - hosted-git-info "^9.0.0" - proc-log "^6.0.0" - semver "^7.3.5" - validate-npm-package-name "^7.0.0" - npm-packlist@8.0.2, npm-packlist@^8.0.0: version "8.0.2" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-8.0.2.tgz#5b8d1d906d96d21c85ebbeed2cf54147477c8478" @@ -13152,22 +12967,21 @@ npm-packlist@8.0.2, npm-packlist@^8.0.0: dependencies: ignore-walk "^6.0.4" -npm-packlist@^10.0.1: - version "10.0.3" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-10.0.3.tgz#e22c039357faf81a75d1b0cdf53dd113f2bed9c7" - integrity sha512-zPukTwJMOu5X5uvm0fztwS5Zxyvmk38H/LfidkOMt3gbZVCyro2cD/ETzwzVPcWZA3JOyPznfUN/nkyFiyUbxg== +npm-packlist@^7.0.0: + version "7.0.4" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-7.0.4.tgz#033bf74110eb74daf2910dc75144411999c5ff32" + integrity sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q== dependencies: - ignore-walk "^8.0.0" - proc-log "^6.0.0" + ignore-walk "^6.0.0" -npm-pick-manifest@^11.0.1, npm-pick-manifest@^11.0.3: - version "11.0.3" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-11.0.3.tgz#76cf6593a351849006c36b38a7326798e2a76d13" - integrity sha512-buzyCfeoGY/PxKqmBqn1IUJrZnUi1VVJTdSSRPGI60tJdUhUoSQFhs0zycJokDdOznQentgrpf8LayEHyyYlqQ== +npm-pick-manifest@^8.0.0, npm-pick-manifest@^8.0.1, npm-pick-manifest@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz#2159778d9c7360420c925c1a2287b5a884c713aa" + integrity sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg== dependencies: - npm-install-checks "^8.0.0" - npm-normalize-package-bin "^5.0.0" - npm-package-arg "^13.0.0" + npm-install-checks "^6.0.0" + npm-normalize-package-bin "^3.0.0" + npm-package-arg "^10.0.0" semver "^7.3.5" npm-pick-manifest@^9.0.0, npm-pick-manifest@^9.0.1: @@ -13180,13 +12994,26 @@ npm-pick-manifest@^9.0.0, npm-pick-manifest@^9.0.1: npm-package-arg "^11.0.0" semver "^7.3.5" -npm-profile@^12.0.1: - version "12.0.1" - resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-12.0.1.tgz#f5aa0d931a4a75013a7521c86c30048e497310de" - integrity sha512-Xs1mejJ1/9IKucCxdFMkiBJUre0xaxfCpbsO7DB7CadITuT4k68eI05HBlw4kj+Em1rsFMgeFNljFPYvPETbVQ== +npm-profile@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-7.0.1.tgz#a37dae08b22e662ece2c6e08946f9fcd9fdef663" + integrity sha512-VReArOY/fCx5dWL66cbJ2OMogTQAVVQA//8jjmjkarboki3V7UJ0XbGFW+khRwiAJFQjuH0Bqr/yF7Y5RZdkMQ== dependencies: - npm-registry-fetch "^19.0.0" - proc-log "^6.0.0" + npm-registry-fetch "^14.0.0" + proc-log "^3.0.0" + +npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3, npm-registry-fetch@^14.0.5: + version "14.0.5" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz#fe7169957ba4986a4853a650278ee02e568d115d" + integrity sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA== + dependencies: + make-fetch-happen "^11.0.0" + minipass "^5.0.0" + minipass-fetch "^3.0.0" + minipass-json-stream "^1.0.1" + minizlib "^2.1.2" + npm-package-arg "^10.0.0" + proc-log "^3.0.0" npm-registry-fetch@^17.0.0, npm-registry-fetch@^17.0.1, npm-registry-fetch@^17.1.0: version "17.1.0" @@ -13202,20 +13029,6 @@ npm-registry-fetch@^17.0.0, npm-registry-fetch@^17.0.1, npm-registry-fetch@^17.1 npm-package-arg "^11.0.0" proc-log "^4.0.0" -npm-registry-fetch@^19.0.0, npm-registry-fetch@^19.1.1: - version "19.1.1" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-19.1.1.tgz#51e96d21f409a9bc4f96af218a8603e884459024" - integrity sha512-TakBap6OM1w0H73VZVDf44iFXsOS3h+L4wVMXmbWOQroZgFhMch0juN6XSzBNlD965yIKvWg2dfu7NSiaYLxtw== - dependencies: - "@npmcli/redact" "^4.0.0" - jsonparse "^1.3.1" - make-fetch-happen "^15.0.0" - minipass "^7.0.2" - minipass-fetch "^5.0.0" - minizlib "^3.0.1" - npm-package-arg "^13.0.0" - proc-log "^6.0.0" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -13237,90 +13050,86 @@ npm-run-path@^5.1.0: dependencies: path-key "^4.0.0" -npm-run-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-6.0.0.tgz#25cfdc4eae04976f3349c0b1afc089052c362537" - integrity sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA== - dependencies: - path-key "^4.0.0" - unicorn-magic "^0.3.0" - -npm-user-validate@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-4.0.0.tgz#f3c7e8360e46c651dbaf2fc4eea8f66df51ae6df" - integrity sha512-TP+Ziq/qPi/JRdhaEhnaiMkqfMGjhDLoh/oRfW+t5aCuIfJxIUxvwk6Sg/6ZJ069N/Be6gs00r+aZeJTfS9uHQ== +npm-user-validate@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-2.0.1.tgz#097afbf0a2351e2a8f478f1ba07960b368f2a25c" + integrity sha512-d17PKaF2h8LSGFl5j4b1gHOJt1fgH7YUcCm1kNSJvaLWWKXlBsuUvx0bBEkr0qhsVA9XP5LtRZ83hdlhm2QkgA== -npm@^11.6.2: - version "11.7.0" - resolved "https://registry.yarnpkg.com/npm/-/npm-11.7.0.tgz#897fa4af764b64fa384b50e071636e7497d4f6de" - integrity sha512-wiCZpv/41bIobCoJ31NStIWKfAxxYyD1iYnWCtiyns8s5v3+l8y0HCP/sScuH6B5+GhIfda4HQKiqeGZwJWhFw== +npm@^9.5.0: + version "9.9.4" + resolved "https://registry.yarnpkg.com/npm/-/npm-9.9.4.tgz#572bef36e61852c5a391bb3b4eb86c231b1365cd" + integrity sha512-NzcQiLpqDuLhavdyJ2J3tGJ/ni/ebcqHVFZkv1C4/6lblraUPbPgCJ4Vhb4oa3FFhRa2Yj9gA58jGH/ztKueNQ== dependencies: "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/arborist" "^9.1.9" - "@npmcli/config" "^10.4.5" - "@npmcli/fs" "^5.0.0" - "@npmcli/map-workspaces" "^5.0.3" - "@npmcli/metavuln-calculator" "^9.0.3" - "@npmcli/package-json" "^7.0.4" - "@npmcli/promise-spawn" "^9.0.1" - "@npmcli/redact" "^4.0.0" - "@npmcli/run-script" "^10.0.3" - "@sigstore/tuf" "^4.0.0" - abbrev "^4.0.0" + "@npmcli/arborist" "^6.5.0" + "@npmcli/config" "^6.4.0" + "@npmcli/fs" "^3.1.0" + "@npmcli/map-workspaces" "^3.0.4" + "@npmcli/package-json" "^4.0.1" + "@npmcli/promise-spawn" "^6.0.2" + "@npmcli/run-script" "^6.0.2" + abbrev "^2.0.0" archy "~1.0.0" - cacache "^20.0.3" - chalk "^5.6.2" - ci-info "^4.3.1" + cacache "^17.1.4" + chalk "^5.3.0" + ci-info "^4.0.0" cli-columns "^4.0.0" + cli-table3 "^0.6.3" + columnify "^1.6.0" fastest-levenshtein "^1.0.16" fs-minipass "^3.0.3" - glob "^13.0.0" + glob "^10.3.10" graceful-fs "^4.2.11" - hosted-git-info "^9.0.2" - ini "^6.0.0" - init-package-json "^8.2.4" - is-cidr "^6.0.1" - json-parse-even-better-errors "^5.0.0" - libnpmaccess "^10.0.3" - libnpmdiff "^8.0.12" - libnpmexec "^10.1.11" - libnpmfund "^7.0.12" - libnpmorg "^8.0.1" - libnpmpack "^9.0.12" - libnpmpublish "^11.1.3" - libnpmsearch "^9.0.1" - libnpmteam "^8.0.2" - libnpmversion "^8.0.3" - make-fetch-happen "^15.0.3" - minimatch "^10.1.1" - minipass "^7.1.1" + hosted-git-info "^6.1.3" + ini "^4.1.1" + init-package-json "^5.0.0" + is-cidr "^4.0.2" + json-parse-even-better-errors "^3.0.1" + libnpmaccess "^7.0.2" + libnpmdiff "^5.0.20" + libnpmexec "^6.0.4" + libnpmfund "^4.2.1" + libnpmhook "^9.0.3" + libnpmorg "^5.0.4" + libnpmpack "^5.0.20" + libnpmpublish "^7.5.1" + libnpmsearch "^6.0.2" + libnpmteam "^5.0.3" + libnpmversion "^4.0.2" + make-fetch-happen "^11.1.1" + minimatch "^9.0.3" + minipass "^7.0.4" minipass-pipeline "^1.2.4" ms "^2.1.2" - node-gyp "^12.1.0" - nopt "^9.0.0" - npm-audit-report "^7.0.0" - npm-install-checks "^8.0.0" - npm-package-arg "^13.0.2" - npm-pick-manifest "^11.0.3" - npm-profile "^12.0.1" - npm-registry-fetch "^19.1.1" - npm-user-validate "^4.0.0" - p-map "^7.0.4" - pacote "^21.0.4" - parse-conflict-json "^5.0.1" - proc-log "^6.1.0" + node-gyp "^9.4.1" + nopt "^7.2.0" + normalize-package-data "^5.0.0" + npm-audit-report "^5.0.0" + npm-install-checks "^6.3.0" + npm-package-arg "^10.1.0" + npm-pick-manifest "^8.0.2" + npm-profile "^7.0.1" + npm-registry-fetch "^14.0.5" + npm-user-validate "^2.0.0" + npmlog "^7.0.1" + p-map "^4.0.0" + pacote "^15.2.0" + parse-conflict-json "^3.0.1" + proc-log "^3.0.0" qrcode-terminal "^0.12.0" - read "^5.0.1" - semver "^7.7.3" - spdx-expression-parse "^4.0.0" - ssri "^13.0.0" - supports-color "^10.2.2" - tar "^7.5.2" + read "^2.1.0" + semver "^7.6.0" + sigstore "^1.9.0" + spdx-expression-parse "^3.0.1" + ssri "^10.0.5" + supports-color "^9.4.0" + tar "^6.2.1" text-table "~0.2.0" - tiny-relative-date "^2.0.2" + tiny-relative-date "^1.3.0" treeverse "^3.0.0" - validate-npm-package-name "^7.0.0" - which "^6.0.0" + validate-npm-package-name "^5.0.0" + which "^3.0.1" + write-file-atomic "^5.0.1" npmlog@^5.0.1: version "5.0.1" @@ -13342,6 +13151,16 @@ npmlog@^6.0.0: gauge "^4.0.3" set-blocking "^2.0.0" +npmlog@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-7.0.1.tgz#7372151a01ccb095c47d8bf1d0771a4ff1f53ac8" + integrity sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg== + dependencies: + are-we-there-yet "^4.0.0" + console-control-strings "^1.1.0" + gauge "^5.0.0" + set-blocking "^2.0.0" + nth-check@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" @@ -13400,7 +13219,7 @@ nth-check@^2.0.1: "@nx/nx-win32-arm64-msvc" "20.8.1" "@nx/nx-win32-x64-msvc" "20.8.1" -object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.1: +object-assign@^4, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== @@ -13685,13 +13504,6 @@ p-each-series@^3.0.0: resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-3.0.0.tgz#d1aed5e96ef29864c897367a7d2a628fdc960806" integrity sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw== -p-event@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/p-event/-/p-event-6.0.1.tgz#8f62a1e3616d4bc01fce3abda127e0383ef4715b" - integrity sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w== - dependencies: - p-timeout "^6.1.2" - p-filter@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-filter/-/p-filter-4.1.0.tgz#fe0aa794e2dfad8ecf595a39a245484fcd09c6e4" @@ -13730,6 +13542,13 @@ p-limit@^3.0.2, p-limit@^3.1.0: dependencies: yocto-queue "^0.1.0" +p-limit@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" + integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== + dependencies: + yocto-queue "^1.0.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" @@ -13751,6 +13570,13 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" +p-locate@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" + integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== + dependencies: + p-limit "^4.0.0" + p-map-series@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-2.1.0.tgz#7560d4c452d9da0c07e692fdbfe6e2c81a2a91f2" @@ -13768,11 +13594,6 @@ p-map@^7.0.1: resolved "https://registry.yarnpkg.com/p-map/-/p-map-7.0.3.tgz#7ac210a2d36f81ec28b736134810f7ba4418cdb6" integrity sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA== -p-map@^7.0.2, p-map@^7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-7.0.4.tgz#b81814255f542e252d5729dca4d66e5ec14935b8" - integrity sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ== - p-pipe@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e" @@ -13826,11 +13647,6 @@ p-timeout@^3.2.0: dependencies: p-finally "^1.0.0" -p-timeout@^6.1.2: - version "6.1.4" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-6.1.4.tgz#418e1f4dd833fa96a2e3f532547dd2abdb08dbc2" - integrity sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg== - p-timeout@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-7.0.1.tgz#95680a6aa693c530f14ac337b8bd32d4ec6ae4f0" @@ -13853,11 +13669,40 @@ p-waterfall@2.1.1: dependencies: p-reduce "^2.0.0" +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + packet-reader@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== +pacote@^15.0.0, pacote@^15.0.8, pacote@^15.2.0: + version "15.2.0" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.2.0.tgz#0f0dfcc3e60c7b39121b2ac612bf8596e95344d3" + integrity sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA== + dependencies: + "@npmcli/git" "^4.0.0" + "@npmcli/installed-package-contents" "^2.0.1" + "@npmcli/promise-spawn" "^6.0.1" + "@npmcli/run-script" "^6.0.0" + cacache "^17.0.0" + fs-minipass "^3.0.0" + minipass "^5.0.0" + npm-package-arg "^10.0.0" + npm-packlist "^7.0.0" + npm-pick-manifest "^8.0.0" + npm-registry-fetch "^14.0.0" + proc-log "^3.0.0" + promise-retry "^2.0.1" + read-package-json "^6.0.0" + read-package-json-fast "^3.0.0" + sigstore "^1.3.0" + ssri "^10.0.0" + tar "^6.1.11" + pacote@^18.0.0, pacote@^18.0.6: version "18.0.6" resolved "https://registry.yarnpkg.com/pacote/-/pacote-18.0.6.tgz#ac28495e24f4cf802ef911d792335e378e86fac7" @@ -13881,29 +13726,6 @@ pacote@^18.0.0, pacote@^18.0.6: ssri "^10.0.0" tar "^6.1.11" -pacote@^21.0.0, pacote@^21.0.2, pacote@^21.0.4: - version "21.0.4" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-21.0.4.tgz#59cd2a2b5a4c8c1b625f33991a96b136d1c05d95" - integrity sha512-RplP/pDW0NNNDh3pnaoIWYPvNenS7UqMbXyvMqJczosiFWTeGGwJC2NQBLqKf4rGLFfwCOnntw1aEp9Jiqm1MA== - dependencies: - "@npmcli/git" "^7.0.0" - "@npmcli/installed-package-contents" "^4.0.0" - "@npmcli/package-json" "^7.0.0" - "@npmcli/promise-spawn" "^9.0.0" - "@npmcli/run-script" "^10.0.0" - cacache "^20.0.0" - fs-minipass "^3.0.0" - minipass "^7.0.2" - npm-package-arg "^13.0.0" - npm-packlist "^10.0.1" - npm-pick-manifest "^11.0.1" - npm-registry-fetch "^19.0.0" - proc-log "^6.0.0" - promise-retry "^2.0.1" - sigstore "^4.0.0" - ssri "^13.0.0" - tar "^7.4.3" - pako@~1.0.2: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" @@ -13916,7 +13738,7 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-conflict-json@^3.0.0: +parse-conflict-json@^3.0.0, parse-conflict-json@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz#67dc55312781e62aa2ddb91452c7606d1969960c" integrity sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw== @@ -13925,15 +13747,6 @@ parse-conflict-json@^3.0.0: just-diff "^6.0.0" just-diff-apply "^5.2.0" -parse-conflict-json@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-5.0.1.tgz#db4acd7472fb400c9808eb86611c2ff72f4c84ba" - integrity sha512-ZHEmNKMq1wyJXNwLxyHnluPfRAFSIliBvbK/UiOceROt4Xh9Pz0fq49NytIaeaCUf5VR86hwQ/34FCcNU5/LKQ== - dependencies: - json-parse-even-better-errors "^5.0.0" - just-diff "^6.0.0" - just-diff-apply "^5.2.0" - parse-entities@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" @@ -13964,19 +13777,16 @@ parse-json@^5.0.0, parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse-json@^8.0.0, parse-json@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-8.3.0.tgz#88a195a2157025139a2317a4f2f9252b61304ed5" - integrity sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ== +parse-json@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-7.1.1.tgz#68f7e6f0edf88c54ab14c00eb700b753b14e2120" + integrity sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw== dependencies: - "@babel/code-frame" "^7.26.2" - index-to-position "^1.1.0" - type-fest "^4.39.1" - -parse-ms@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-4.0.0.tgz#c0c058edd47c2a590151a718990533fd62803df4" - integrity sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw== + "@babel/code-frame" "^7.21.4" + error-ex "^1.3.2" + json-parse-even-better-errors "^3.0.0" + lines-and-columns "^2.0.3" + type-fest "^3.8.0" parse-path@^7.0.0: version "7.0.0" @@ -13992,13 +13802,6 @@ parse-url@^8.1.0: dependencies: parse-path "^7.0.0" -parse5-htmlparser2-tree-adapter@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" - integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== - dependencies: - parse5 "^6.0.1" - parse5-htmlparser2-tree-adapter@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" @@ -14007,16 +13810,6 @@ parse5-htmlparser2-tree-adapter@^7.0.0: domhandler "^5.0.2" parse5 "^7.0.0" -parse5@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== - -parse5@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - parse5@^7.0.0: version "7.1.2" resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" @@ -14047,6 +13840,11 @@ path-exists@^4.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== +path-exists@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" + integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== + 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" @@ -14072,13 +13870,13 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.1.tgz#4b6572376cfd8b811fca9cd1f5c24b3cbac0fe10" - integrity sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA== +path-scurry@^1.11.1, path-scurry@^1.6.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== dependencies: - lru-cache "^11.0.0" - minipass "^7.1.2" + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-to-regexp@0.1.12, path-to-regexp@~0.1.12: version "0.1.12" @@ -14117,6 +13915,11 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +path-type@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-6.0.0.tgz#2f1bb6791a91ce99194caede5d6c5920ed81eb51" + integrity sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ== + peek-readable@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-4.1.0.tgz#4ece1111bf5c2ad8867c314c81356847e8a62e72" @@ -14218,12 +14021,12 @@ picocolors@^1.1.1: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -picomatch@^4.0.2, picomatch@^4.0.3: +picomatch@^4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== @@ -14355,14 +14158,6 @@ postcss-selector-parser@^6.0.10: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-selector-parser@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz#e75d2e0d843f620e5df69076166f4e16f891cb9f" - integrity sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - postgres-array@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" @@ -14457,23 +14252,16 @@ pretty-format@^29.0.0, pretty-format@^29.7.0: ansi-styles "^5.0.0" react-is "^18.0.0" -pretty-ms@^9.2.0: - version "9.3.0" - resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-9.3.0.tgz#dd2524fcb3c326b4931b2272dfd1e1a8ed9a9f5a" - integrity sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ== - dependencies: - parse-ms "^4.0.0" +proc-log@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8" + integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A== proc-log@^4.0.0, proc-log@^4.1.0, proc-log@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-4.2.0.tgz#b6f461e4026e75fdfe228b265e9f7a00779d7034" integrity sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA== -proc-log@^6.0.0, proc-log@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-6.1.0.tgz#18519482a37d5198e231133a70144a50f21f0215" - integrity sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ== - process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -14509,11 +14297,6 @@ proggy@^2.0.0: resolved "https://registry.yarnpkg.com/proggy/-/proggy-2.0.0.tgz#154bb0e41d3125b518ef6c79782455c2c47d94e1" integrity sha512-69agxLtnI8xBs9gUGqEnK26UfiexpHy+KUpBQWabiytQjnn5wFY8rklAi7GRfABIuPNnQ/ik48+LGLkYYJcy4A== -proggy@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/proggy/-/proggy-4.0.0.tgz#85fa89d7c81bc3fb77992a80f47bb1e17c610fa3" - integrity sha512-MbA4R+WQT76ZBm/5JUpV9yqcJt92175+Y0Bodg3HgiXzrmKu7Ggq+bpn6y6wHH+gN9NcyKn3yg1+d47VaKwNAQ== - progress@2.0.3, progress@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" @@ -14524,6 +14307,11 @@ promise-all-reject-late@^1.0.0: resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== +promise-call-limit@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.2.tgz#f64b8dd9ef7693c9c7613e7dfe8d6d24de3031ea" + integrity sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA== + promise-call-limit@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-3.0.2.tgz#524b7f4b97729ff70417d93d24f46f0265efa4f9" @@ -14562,13 +14350,6 @@ promzard@^1.0.0: dependencies: read "^3.0.1" -promzard@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-3.0.1.tgz#e42b9b75197661e5707dc7077da8dfd3bdfd9e3d" - integrity sha512-M5mHhWh+Adz0BIxgSrqcc6GTCSconR7zWQV9vnOSptNtr6cSFlApLc28GbQhuN6oOWBQeV2C0bNE47JCY/zu3Q== - dependencies: - read "^5.0.0" - propagate@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/propagate/-/propagate-2.0.1.tgz#40cdedab18085c792334e64f0ac17256d38f9a45" @@ -14630,7 +14411,14 @@ qrcode-terminal@^0.12.0: resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== -qs@6.13.0, qs@>=6.14.1, qs@^6.11.2, qs@^6.14.0, qs@^6.14.1, qs@^6.5.2, qs@~6.14.0: +qs@6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" + integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== + dependencies: + side-channel "^1.0.6" + +qs@^6.11.2, qs@^6.14.0, qs@^6.14.1, qs@^6.5.2, qs@~6.14.0: version "6.14.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.2.tgz#b5634cf9d9ad9898e31fba3504e866e8efb6798c" integrity sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q== @@ -14727,11 +14515,6 @@ read-cmd-shim@4.0.0, read-cmd-shim@^4.0.0: resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== -read-cmd-shim@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-6.0.0.tgz#98f5c8566e535829f1f8afb1595aaf05fd0f3970" - integrity sha512-1zM5HuOfagXCBWMN83fuFI/x+T/UhZ7k+KIzhrHXcQoeX5+7gmaDYjELQHmmzIodumBHeByBJT4QYS7ufAgs7A== - read-package-json-fast@^3.0.0, read-package-json-fast@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" @@ -14740,23 +14523,24 @@ read-package-json-fast@^3.0.0, read-package-json-fast@^3.0.2: json-parse-even-better-errors "^3.0.0" npm-normalize-package-bin "^3.0.0" -read-package-up@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/read-package-up/-/read-package-up-11.0.0.tgz#71fb879fdaac0e16891e6e666df22de24a48d5ba" - integrity sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ== +read-package-json@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-6.0.4.tgz#90318824ec456c287437ea79595f4c2854708836" + integrity sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw== dependencies: - find-up-simple "^1.0.0" - read-pkg "^9.0.0" - type-fest "^4.6.0" + glob "^10.2.2" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^5.0.0" + npm-normalize-package-bin "^3.0.0" -read-package-up@^12.0.0: - version "12.0.0" - resolved "https://registry.yarnpkg.com/read-package-up/-/read-package-up-12.0.0.tgz#7ae889586f397b7a291ca59ce08caf7e9f68a61c" - integrity sha512-Q5hMVBYur/eQNWDdbF4/Wqqr9Bjvtrw2kjGxxBbKLbx8bVCL8gcArjTy8zDUuLGQicftpMuU0riQNcAsbtOVsw== +read-pkg-up@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-10.1.0.tgz#2d13ab732d2f05d6e8094167c2112e2ee50644f4" + integrity sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA== dependencies: - find-up-simple "^1.0.1" - read-pkg "^10.0.0" - type-fest "^5.2.0" + find-up "^6.3.0" + read-pkg "^8.1.0" + type-fest "^4.2.0" read-pkg-up@^3.0.0: version "3.0.0" @@ -14775,17 +14559,6 @@ read-pkg-up@^7.0.1: read-pkg "^5.2.0" type-fest "^0.8.1" -read-pkg@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-10.0.0.tgz#06401f0331115e9fba9880cb3f2ae1efa3db00e4" - integrity sha512-A70UlgfNdKI5NSvTTfHzLQj7NJRpJ4mT5tGafkllJ4wh71oYuGm/pzphHcmW4s35iox56KSK721AihodoXSc/A== - dependencies: - "@types/normalize-package-data" "^2.4.4" - normalize-package-data "^8.0.0" - parse-json "^8.3.0" - type-fest "^5.2.0" - unicorn-magic "^0.3.0" - read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" @@ -14805,16 +14578,22 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -read-pkg@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-9.0.1.tgz#b1b81fb15104f5dbb121b6bbdee9bbc9739f569b" - integrity sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA== +read-pkg@^8.0.0, read-pkg@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-8.1.0.tgz#6cf560b91d90df68bce658527e7e3eee75f7c4c7" + integrity sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ== dependencies: - "@types/normalize-package-data" "^2.4.3" + "@types/normalize-package-data" "^2.4.1" normalize-package-data "^6.0.0" - parse-json "^8.0.0" - type-fest "^4.6.0" - unicorn-magic "^0.1.0" + parse-json "^7.0.0" + type-fest "^4.2.0" + +read@^2.0.0, read@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/read/-/read-2.1.0.tgz#69409372c54fe3381092bc363a00650b6ac37218" + integrity sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ== + dependencies: + mute-stream "~1.0.0" read@^3.0.1: version "3.0.1" @@ -14823,13 +14602,6 @@ read@^3.0.1: dependencies: mute-stream "^1.0.0" -read@^5.0.0, read@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/read/-/read-5.0.1.tgz#e6b0a84743406182fdfc20b2418a11b39b7ef837" - integrity sha512-+nsqpqYkkpet2UVPG8ZiuE8d113DK4vHYEoEhcrXBAlPiq6di7QRTuNiKQAbaRYegobuX2BpZ6QjanKOXnJdTA== - dependencies: - mute-stream "^3.0.0" - readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" @@ -15241,45 +15013,44 @@ semantic-release-slack-bot@^4.0.2: node-fetch "^2.3.0" slackify-markdown "^4.3.0" -semantic-release@^21.0.5, semantic-release@^25.0.0: - version "25.0.2" - resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-25.0.2.tgz#efd4fa16ce3518a747e737baf3f69fd82979d98e" - integrity sha512-6qGjWccl5yoyugHt3jTgztJ9Y0JVzyH8/Voc/D8PlLat9pwxQYXz7W1Dpnq5h0/G5GCYGUaDSlYcyk3AMh5A6g== +semantic-release@^21.0.5: + version "21.1.2" + resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-21.1.2.tgz#f4c5ba7c17b53ce90bac4fa6ccf21178d0384445" + integrity sha512-kz76azHrT8+VEkQjoCBHE06JNQgTgsC4bT8XfCzb7DHcsk9vG3fqeMVik8h5rcWCYi2Fd+M3bwA7BG8Z8cRwtA== dependencies: - "@semantic-release/commit-analyzer" "^13.0.1" + "@semantic-release/commit-analyzer" "^10.0.0" "@semantic-release/error" "^4.0.0" - "@semantic-release/github" "^12.0.0" - "@semantic-release/npm" "^13.1.1" - "@semantic-release/release-notes-generator" "^14.1.0" + "@semantic-release/github" "^9.0.0" + "@semantic-release/npm" "^10.0.2" + "@semantic-release/release-notes-generator" "^11.0.0" aggregate-error "^5.0.0" - cosmiconfig "^9.0.0" + cosmiconfig "^8.0.0" debug "^4.0.0" - env-ci "^11.0.0" - execa "^9.0.0" - figures "^6.0.0" - find-versions "^6.0.0" + env-ci "^9.0.0" + execa "^8.0.0" + figures "^5.0.0" + find-versions "^5.1.0" get-stream "^6.0.0" git-log-parser "^1.2.0" - hook-std "^4.0.0" - hosted-git-info "^9.0.0" - import-from-esm "^2.0.0" + hook-std "^3.0.0" + hosted-git-info "^7.0.0" lodash-es "^4.17.21" - marked "^15.0.0" - marked-terminal "^7.3.0" + marked "^5.0.0" + marked-terminal "^5.1.1" micromatch "^4.0.2" p-each-series "^3.0.0" p-reduce "^3.0.0" - read-package-up "^12.0.0" + read-pkg-up "^10.0.0" resolve-from "^5.0.0" semver "^7.3.2" - semver-diff "^5.0.0" + semver-diff "^4.0.0" signale "^1.2.1" - yargs "^18.0.0" + yargs "^17.5.1" -semver-diff@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-5.0.0.tgz#62a8396f44c11386c83d1e57caedc806c6c7755c" - integrity sha512-0HbGtOm+S7T6NGQ/pxJSJipJvc4DK3FcRVMRkhsIwJDJ4Jcz5DQC1cPPzB5GhzyHjwttW878HaWQq46CkL3cqg== +semver-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-4.0.0.tgz#3afcf5ed6d62259f5c72d0d5d50dffbdc9680df5" + integrity sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA== dependencies: semver "^7.3.5" @@ -15310,10 +15081,10 @@ semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.5.2, semver@^7.7.2, semver@^7.7.3: - version "7.7.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" - integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== +semver@^7.6.0: + version "7.7.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a" + integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA== semver@^7.6.3: version "7.7.1" @@ -15615,7 +15386,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -side-channel@^1.1.0: +side-channel@^1.0.6, side-channel@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== @@ -15650,6 +15421,17 @@ signale@^1.2.1, signale@^1.4.0: figures "^2.0.0" pkg-conf "^2.1.0" +sigstore@^1.3.0, sigstore@^1.4.0, sigstore@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.9.0.tgz#1e7ad8933aa99b75c6898ddd0eeebc3eb0d59875" + integrity sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A== + dependencies: + "@sigstore/bundle" "^1.1.0" + "@sigstore/protobuf-specs" "^0.2.0" + "@sigstore/sign" "^1.0.0" + "@sigstore/tuf" "^1.0.3" + make-fetch-happen "^11.0.1" + sigstore@^2.2.0: version "2.3.1" resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-2.3.1.tgz#0755dd2cc4820f2e922506da54d3d628e13bfa39" @@ -15662,18 +15444,6 @@ sigstore@^2.2.0: "@sigstore/tuf" "^2.3.4" "@sigstore/verify" "^1.2.1" -sigstore@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-4.1.0.tgz#d34b92a544a05e003a2430209d26d8dfafd805a0" - integrity sha512-/fUgUhYghuLzVT/gaJoeVehLCgZiUxPCPMcyVNY0lIf/cTCz58K/WTI7PefDarXxp9nUKpEwg1yyz3eSBMTtgA== - dependencies: - "@sigstore/bundle" "^4.0.0" - "@sigstore/core" "^3.1.0" - "@sigstore/protobuf-specs" "^0.5.0" - "@sigstore/sign" "^4.1.0" - "@sigstore/tuf" "^4.0.1" - "@sigstore/verify" "^3.1.0" - simple-concat@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" @@ -15712,13 +15482,6 @@ sisteransi@^1.0.5: resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== -skin-tone@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/skin-tone/-/skin-tone-2.0.0.tgz#4e3933ab45c0d4f4f781745d64b9f4c208e41237" - integrity sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA== - dependencies: - unicode-emoji-modifier-base "^1.0.0" - slackify-markdown@^4.3.0: version "4.4.0" resolved "https://registry.yarnpkg.com/slackify-markdown/-/slackify-markdown-4.4.0.tgz#706a56fd09f536c47588e2c12f1e0ee6930c5e8d" @@ -15737,6 +15500,11 @@ slash@3.0.0, slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +slash@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-5.1.0.tgz#be3adddcdf09ac38eebe8dcdc7b1a57a75b095ce" + integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg== + slice-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" @@ -15760,6 +15528,15 @@ socks-proxy-agent@^6.0.0: debug "^4.3.3" socks "^2.6.2" +socks-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" + integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + socks-proxy-agent@^8.0.3: version "8.0.5" resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz#b9cdb4e7e998509d7659d689ce7697ac21645bee" @@ -15845,7 +15622,7 @@ spdx-exceptions@^2.1.0: resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== -spdx-expression-parse@^3.0.0: +spdx-expression-parse@^3.0.0, spdx-expression-parse@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== @@ -15853,14 +15630,6 @@ spdx-expression-parse@^3.0.0: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" -spdx-expression-parse@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz#a23af9f3132115465dac215c099303e4ceac5794" - integrity sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - spdx-license-ids@^3.0.0: version "3.0.16" resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" @@ -15973,20 +15742,13 @@ ssri@^10.0.0: dependencies: minipass "^7.0.3" -ssri@^10.0.6: +ssri@^10.0.1, ssri@^10.0.5, ssri@^10.0.6: version "10.0.6" resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.6.tgz#a8aade2de60ba2bce8688e3fa349bad05c7dc1e5" integrity sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ== dependencies: minipass "^7.0.3" -ssri@^13.0.0: - version "13.0.0" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-13.0.0.tgz#4226b303dc474003d88905f9098cb03361106c74" - integrity sha512-yizwGBpbCn4YomB2lzhZqrHLJoqFGXihNbib3ozhqF/cIp5ue+xSmOQrjNasEE62hFxsCcg/V/z23t4n8jMEng== - dependencies: - minipass "^7.0.3" - ssri@^8.0.0, ssri@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" @@ -15994,6 +15756,13 @@ ssri@^8.0.0, ssri@^8.0.1: dependencies: minipass "^3.1.1" +ssri@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" + integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== + dependencies: + minipass "^3.1.1" + stack-utils@^2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" @@ -16068,7 +15837,7 @@ string-similarity@^4.0.1: resolved "https://registry.yarnpkg.com/string-similarity/-/string-similarity-4.0.4.tgz#42d01ab0b34660ea8a018da8f56a3309bb8b2a5b" integrity sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ== -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: 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== @@ -16085,14 +15854,14 @@ string-width@^2.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^7.0.0, string-width@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-7.2.0.tgz#b5bb8e2165ce275d4d43476dd2700ad9091db6dc" - integrity sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ== +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: - emoji-regex "^10.3.0" - get-east-asian-width "^1.0.0" - strip-ansi "^7.1.0" + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" string.prototype.trim@^1.2.10: version "1.2.10" @@ -16167,6 +15936,13 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +"strip-ansi-cjs@npm: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" + strip-ansi@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -16188,19 +15964,12 @@ strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" -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" - -strip-ansi@^7.1.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.2.tgz#132875abde678c7ea8d691533f2e7e22bb744dba" - integrity sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA== +strip-ansi@^7.0.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.2.0.tgz#d22a269522836a627af8d04b5c3fd2c7fa3e32e3" + integrity sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w== dependencies: - ansi-regex "^6.0.1" + ansi-regex "^6.2.2" strip-bom@^3.0.0: version "3.0.0" @@ -16227,11 +15996,6 @@ strip-final-newline@^3.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== -strip-final-newline@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-4.0.0.tgz#35a369ec2ac43df356e3edd5dcebb6429aa1fa5c" - integrity sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw== - strip-indent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" @@ -16273,15 +16037,6 @@ subscriptions-transport-ws@^0.9.19: symbol-observable "^1.0.4" ws "^5.2.0 || ^6.0.0 || ^7.0.0" -super-regex@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/super-regex/-/super-regex-1.1.0.tgz#14b69b6374f7b3338db52ecd511dae97c27acf75" - integrity sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ== - dependencies: - function-timeout "^1.0.1" - make-asynchronous "^1.0.1" - time-span "^5.1.0" - superagent@^10.2.3: version "10.2.3" resolved "https://registry.yarnpkg.com/superagent/-/superagent-10.2.3.tgz#d1e4986f2caac423c37e38077f9073ccfe73a59b" @@ -16320,11 +16075,6 @@ supertest@^7.1.3: methods "^1.1.2" superagent "^10.2.3" -supports-color@^10.2.2: - version "10.2.2" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-10.2.2.tgz#466c2978cc5cd0052d542a0b576461c2b802ebb4" - integrity sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g== - supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -16351,7 +16101,12 @@ supports-color@^8, supports-color@^8.0.0, supports-color@^8.1.1: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.2.0: +supports-color@^9.4.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.4.0.tgz#17bfcf686288f531db3dea3215510621ccb55954" + integrity sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw== + +supports-hyperlinks@^2.2.0, supports-hyperlinks@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== @@ -16359,14 +16114,6 @@ supports-hyperlinks@^2.2.0: has-flag "^4.0.0" supports-color "^7.0.0" -supports-hyperlinks@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz#b8e485b179681dea496a1e7abdf8985bd3145461" - integrity sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -16377,11 +16124,6 @@ symbol-observable@^1.0.2, symbol-observable@^1.0.4: resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== -tagged-tag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/tagged-tag/-/tagged-tag-1.0.0.tgz#a0b5917c2864cba54841495abfa3f6b13edcf4d6" - integrity sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng== - tar-fs@^2.0.0: version "2.1.4" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.4.tgz#800824dbf4ef06ded9afea4acafe71c67c76b930" @@ -16403,16 +16145,17 @@ tar-stream@^2.1.4, tar-stream@~2.2.0: inherits "^2.0.3" readable-stream "^3.1.1" -tar@6.2.1, tar@^6.0.2, tar@^6.1.11, tar@^6.1.2, tar@^6.2.1, tar@^7.4.3, tar@^7.5.1, tar@^7.5.2, tar@^7.5.8: - version "7.5.9" - resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.9.tgz#817ac12a54bc4362c51340875b8985d7dc9724b8" - integrity sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg== +tar@6.2.1, tar@^6.0.2, tar@^6.1.11, tar@^6.1.13, tar@^6.1.2, tar@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== dependencies: - "@isaacs/fs-minipass" "^4.0.0" - chownr "^3.0.0" - minipass "^7.1.2" - minizlib "^3.1.0" - yallist "^5.0.0" + 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" tedious@18.6.1, tedious@^18.6.1: version "18.6.1" @@ -16464,25 +16207,16 @@ text-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== +text-extensions@^2.0.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-2.4.0.tgz#a1cfcc50cf34da41bfd047cc744f804d1680ea34" + integrity sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g== + text-table@^0.2.0, text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - thread-stream@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-3.1.0.tgz#4b2ef252a7c215064507d4ef70c05a5e2d34c4f1" @@ -16510,13 +16244,6 @@ through@2, through@2.3.8, "through@>=2.2.7 <3", through@^2.3.6: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -time-span@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/time-span/-/time-span-5.1.0.tgz#80c76cf5a0ca28e0842d3f10a4e99034ce94b90d" - integrity sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA== - dependencies: - convert-hrtime "^5.0.0" - timers-ext@^0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz#6f57ad8578e07a3fb9f91d9387d65647555e25c6" @@ -16535,10 +16262,10 @@ tiny-lru@^8.0.1: resolved "https://registry.yarnpkg.com/tiny-lru/-/tiny-lru-8.0.2.tgz#812fccbe6e622ded552e3ff8a4c3b5ff34a85e4c" integrity sha512-ApGvZ6vVvTNdsmt676grvCkUCGwzG9IqXma5Z07xJgiC5L7akUMof5U8G2JTI9Rz/ovtVhJBlY6mNhEvtjzOIg== -tiny-relative-date@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-2.0.2.tgz#0c35c2a3ef87b80f311314918505aa86c2d44bc9" - integrity sha512-rGxAbeL9z3J4pI2GtBEoFaavHdO4RKAU54hEuOef5kfx5aPqiQtbhYktMOTL5OA33db8BjsDcLXuNp+/v19PHw== +tiny-relative-date@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" + integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== tinyglobby@0.2.12: version "0.2.12" @@ -16548,14 +16275,6 @@ tinyglobby@0.2.12: fdir "^6.4.3" picomatch "^4.0.2" -tinyglobby@^0.2.12, tinyglobby@^0.2.14: - version "0.2.15" - resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" - integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== - dependencies: - fdir "^6.5.0" - picomatch "^4.0.3" - tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -16766,6 +16485,15 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" +tuf-js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-1.1.7.tgz#21b7ae92a9373015be77dfe0cb282a80ec3bbe43" + integrity sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg== + dependencies: + "@tufjs/models" "1.0.4" + debug "^4.3.4" + make-fetch-happen "^11.1.1" + tuf-js@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-2.2.1.tgz#fdd8794b644af1a75c7aaa2b197ddffeb2911b56" @@ -16775,15 +16503,6 @@ tuf-js@^2.2.1: debug "^4.3.4" make-fetch-happen "^13.0.1" -tuf-js@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-4.1.0.tgz#ae4ef9afa456fcb4af103dc50a43bc031f066603" - integrity sha512-50QV99kCKH5P/Vs4E2Gzp7BopNV+KzTXqWeaxrfu5IQJBOULRsTIS9seSsOVT8ZnGXzCyx55nYWAi4qJzpZKEQ== - dependencies: - "@tufjs/models" "4.1.0" - debug "^4.4.3" - make-fetch-happen "^15.0.1" - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -16798,11 +16517,6 @@ tunnel-ssh@^5.2.0: dependencies: ssh2 "^1.15.0" -tunnel@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" - integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== - tweetnacl@^0.14.3: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" @@ -16865,18 +16579,16 @@ type-fest@^2.12.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== -type-fest@^4.39.1, type-fest@^4.6.0: +type-fest@^3.8.0: + version "3.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706" + integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g== + +type-fest@^4.2.0: version "4.41.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.41.0.tgz#6ae1c8e5731273c2bf1f58ad39cbae2c91a46c58" integrity sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA== -type-fest@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-5.4.1.tgz#aa9eaadcdc0acb0b5bd52e54f966ee3e38e125d2" - integrity sha512-xygQcmneDyzsEuKZrFbRMne5HDqMs++aFzefrJTgEIKjQ3rekM+RPfFCVq2Gp1VIDqddoYeppCj4Pcb+RZW0GQ== - dependencies: - tagged-tag "^1.0.0" - type-is@^1.6.16, type-is@^1.6.18, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -17086,28 +16798,6 @@ undici-types@~6.21.0: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== -undici@^5.28.5: - version "5.29.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.29.0.tgz#419595449ae3f2cdcba3580a2e8903399bd1f5a3" - integrity sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg== - dependencies: - "@fastify/busboy" "^2.0.0" - -undici@^7.0.0: - version "7.18.2" - resolved "https://registry.yarnpkg.com/undici/-/undici-7.18.2.tgz#6cf724ef799a67d94fd55adf66b1e184176efcdf" - integrity sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw== - -unicode-emoji-modifier-base@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz#dbbd5b54ba30f287e2a8d5a249da6c0cef369459" - integrity sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g== - -unicorn-magic@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4" - integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== - unicorn-magic@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.3.0.tgz#4efd45c85a69e0dd576d25532fbfa22aa5c8a104" @@ -17132,6 +16822,13 @@ unique-filename@^1.1.1: dependencies: unique-slug "^2.0.0" +unique-filename@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" + integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== + dependencies: + unique-slug "^3.0.0" + unique-filename@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" @@ -17139,13 +16836,6 @@ unique-filename@^3.0.0: dependencies: unique-slug "^4.0.0" -unique-filename@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-5.0.0.tgz#8b17bbde1a7ca322dd1a1d23fe17c2b798c43f8f" - integrity sha512-2RaJTAvAb4owyjllTfXzFClJ7WsGxlykkPvCr9pA//LD9goVq+m4PPAeBgNodGZ7nSrntT/auWpJ6Y5IFXcfjg== - dependencies: - unique-slug "^6.0.0" - unique-slug@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" @@ -17153,6 +16843,13 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" +unique-slug@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" + integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== + dependencies: + imurmurhash "^0.1.4" + unique-slug@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" @@ -17160,13 +16857,6 @@ unique-slug@^4.0.0: dependencies: imurmurhash "^0.1.4" -unique-slug@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-6.0.0.tgz#f46fd688a9bd972fd356c23d95812a3a4862ed88" - integrity sha512-4Lup7Ezn8W3d52/xBhZBVdx323ckxa7DEvd9kPQHppTkLoJXw6ltrBCyj5pnrxj0qKDxYMJ56CoxNuFCscdTiw== - dependencies: - imurmurhash "^0.1.4" - unique-string@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-3.0.0.tgz#84a1c377aff5fd7a8bc6b55d8244b2bd90d75b9a" @@ -17215,11 +16905,6 @@ universal-user-agent@^6.0.0: resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa" integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ== -universal-user-agent@^7.0.0, universal-user-agent@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-7.0.3.tgz#c05870a58125a2dc00431f2df815a77fe69736be" - integrity sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A== - universalify@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" @@ -17344,11 +17029,6 @@ validate-npm-package-name@^5.0.0: dependencies: builtins "^5.0.0" -validate-npm-package-name@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-7.0.2.tgz#e57c3d721a4c8bbff454a246e7f7da811559ea0d" - integrity sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A== - validator@^13.9.0: version "13.15.26" resolved "https://registry.yarnpkg.com/validator/-/validator-13.15.26.tgz#36c3deeab30e97806a658728a155c66fcaa5b944" @@ -17395,11 +17075,6 @@ walk-up-path@^3.0.1: resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-3.0.1.tgz#c8d78d5375b4966c717eb17ada73dbd41490e886" integrity sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA== -walk-up-path@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-4.0.0.tgz#590666dcf8146e2d72318164f1f2ac6ef51d4198" - integrity sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A== - walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" @@ -17414,11 +17089,6 @@ wcwidth@^1.0.0, wcwidth@^1.0.1: dependencies: defaults "^1.0.3" -web-worker@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/web-worker/-/web-worker-1.2.0.tgz#5d85a04a7fbc1e7db58f66595d7a3ac7c9c180da" - integrity sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA== - webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -17553,6 +17223,13 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" +which@^3.0.0, which@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/which/-/which-3.0.1.tgz#89f1cd0c23f629a8105ffe69b8172791c87b4be1" + integrity sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg== + dependencies: + isexe "^2.0.0" + which@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a" @@ -17560,13 +17237,6 @@ which@^4.0.0: dependencies: isexe "^3.1.1" -which@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/which/-/which-6.0.0.tgz#a3a721a14cdd9b991a722e493c177eeff82ff32a" - integrity sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg== - dependencies: - isexe "^3.1.1" - wide-align@1.1.5, 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" @@ -17593,39 +17263,39 @@ wordwrap@>=0.0.2, wordwrap@^1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== -wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== +wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^9.0.0: - version "9.0.2" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-9.0.2.tgz#956832dea9494306e6d209eb871643bb873d7c98" - integrity sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww== +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: - ansi-styles "^6.2.1" - string-width "^7.0.0" - strip-ansi "^7.1.0" + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" 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== -write-file-atomic@5.0.1, write-file-atomic@^5.0.0: +write-file-atomic@5.0.1, write-file-atomic@^5.0.0, write-file-atomic@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== @@ -17650,14 +17320,6 @@ write-file-atomic@^4.0.2: imurmurhash "^0.1.4" signal-exit "^3.0.7" -write-file-atomic@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-7.0.0.tgz#f89def4f223e9bf8b06cc6fdb12bda3a917505c7" - integrity sha512-YnlPC6JqnZl6aO4uRc+dx5PHguiR9S6WeoLtpxNT9wIG+BDya7ZNE1q7KOjVgaA73hKhKLpVPgJ5QA9THQ5BRg== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^4.0.1" - write-json-file@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" @@ -17714,11 +17376,6 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yallist@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533" - integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== - yaml@^2.2.1, yaml@^2.8.1: version "2.8.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.2.tgz#5694f25eca0ce9c3e7a9d9e00ce0ddabbd9e35c5" @@ -17739,12 +17396,7 @@ yargs-parser@^20.2.2, yargs-parser@^20.2.3: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-parser@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-22.0.0.tgz#87b82094051b0567717346ecd00fd14804b357c8" - integrity sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw== - -yargs@17.7.2, yargs@^17.0.0, yargs@^17.3.1, yargs@^17.6.2: +yargs@17.7.2, yargs@^17.0.0, yargs@^17.3.1, yargs@^17.5.1, yargs@^17.6.2: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== @@ -17757,7 +17409,7 @@ yargs@17.7.2, yargs@^17.0.0, yargs@^17.3.1, yargs@^17.6.2: y18n "^5.0.5" yargs-parser "^21.1.1" -yargs@^16.0.0, yargs@^16.2.0: +yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== @@ -17770,18 +17422,6 @@ yargs@^16.0.0, yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^18.0.0: - version "18.0.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-18.0.0.tgz#6c84259806273a746b09f579087b68a3c2d25bd1" - integrity sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg== - dependencies: - cliui "^9.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - string-width "^7.2.0" - y18n "^5.0.5" - yargs-parser "^22.0.0" - ylru@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ylru/-/ylru-1.4.0.tgz#0cf0aa57e9c24f8a2cbde0cc1ca2c9592ac4e0f6" @@ -17797,16 +17437,16 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +yocto-queue@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.2.2.tgz#3e09c95d3f1aa89a58c114c99223edf639152c00" + integrity sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ== + yoctocolors-cjs@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz#f4b905a840a37506813a7acaa28febe97767a242" integrity sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA== -yoctocolors@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yoctocolors/-/yoctocolors-2.1.2.tgz#d795f54d173494e7d8db93150cec0ed7f678c83a" - integrity sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug== - zen-observable-ts@^0.8.21: version "0.8.21" resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.21.tgz#85d0031fbbde1eba3cd07d3ba90da241215f421d" From 7c421b0616cc14be7f41986e261669acd929b670 Mon Sep 17 00:00:00 2001 From: alban bertolini Date: Mon, 9 Mar 2026 14:15:03 +0100 Subject: [PATCH 2/4] docs(mcp-server): document generate-token CLI command in README Co-Authored-By: Claude Opus 4.6 --- packages/mcp-server/README.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/packages/mcp-server/README.md b/packages/mcp-server/README.md index 7776185468..c227c0f27c 100644 --- a/packages/mcp-server/README.md +++ b/packages/mcp-server/README.md @@ -59,6 +59,34 @@ export MCP_SERVER_PORT=3931 npx forest-mcp-server ``` +### Token Generation + +Generate an MCP authentication token from a Forest Admin Personal Access Token, without the browser OAuth flow: + +```bash +npx @forestadmin/mcp-server generate-token \ + --env-file .env \ + --rendering-id +``` + +The token is printed to stdout, ready to be used as a Bearer token with the MCP server. + +#### Options + +| Flag | Env Variable | Required | Default | Description | +|------|-------------|----------|---------|-------------| +| `--env-file` | - | No | - | Path to a `.env` file to load | +| `--env-secret` | `FOREST_ENV_SECRET` | **Yes** | - | Environment secret (64 hex chars) | +| `--auth-secret` | `FOREST_AUTH_SECRET` | **Yes** | - | Authentication secret (must match your agent) | +| `--token` | `FOREST_PERSONAL_TOKEN` | **Yes** | - | Forest Admin personal access token | +| `--rendering-id` | `FOREST_RENDERING_ID` | For PATs | - | Rendering ID from your project URL | +| `--expires-in` | - | No | `1h` | Token lifetime (`30m`, `2h`, `7d`, etc. Max 60 days) | +| `--forest-server-url` | `FOREST_SERVER_URL` | No | `https://api.forestadmin.com` | Forest Admin API URL | + +All flags can be provided via environment variables (directly or through `--env-file`). CLI flags take precedence over env variables. + +The `--rendering-id` is required when using a personal access token (PAT). Find it in your Forest Admin project URL: `app.forestadmin.com///...` + ## API Endpoint Once running, the MCP server exposes a single endpoint: From 544a586319a45f968560193e5779cfc702383b1c Mon Sep 17 00:00:00 2001 From: alban bertolini Date: Mon, 9 Mar 2026 14:51:11 +0100 Subject: [PATCH 3/4] test(mcp-server): add CLI tests to improve coverage Export parseArgs, handleGenerateToken, and KNOWN_FLAGS from cli.ts for testability. Add 18 tests covering argument parsing, env file loading, env var fallbacks, flag precedence, and top-level routing (unknown commands, server startup, error handling). Coverage: cli.ts 95%, generate-token.ts 99%. Co-Authored-By: Claude Opus 4.6 --- packages/mcp-server/src/cli.ts | 6 +- packages/mcp-server/test/cli.test.ts | 243 +++++++++++++++++++++++++++ 2 files changed, 246 insertions(+), 3 deletions(-) create mode 100644 packages/mcp-server/test/cli.test.ts diff --git a/packages/mcp-server/src/cli.ts b/packages/mcp-server/src/cli.ts index 225028591b..a89621a7b7 100644 --- a/packages/mcp-server/src/cli.ts +++ b/packages/mcp-server/src/cli.ts @@ -5,7 +5,7 @@ import dotenv from 'dotenv'; import { generateToken } from './generate-token'; import ForestMCPServer from './server'; -const KNOWN_FLAGS = new Set([ +export const KNOWN_FLAGS = new Set([ 'env-secret', 'auth-secret', 'token', @@ -15,7 +15,7 @@ const KNOWN_FLAGS = new Set([ 'env-file', ]); -function parseArgs(args: string[]): Record { +export function parseArgs(args: string[]): Record { const parsed: Record = {}; let i = 0; @@ -47,7 +47,7 @@ function parseArgs(args: string[]): Record { return parsed; } -async function handleGenerateToken(args: string[]): Promise { +export async function handleGenerateToken(args: string[]): Promise { const parsed = parseArgs(args); if (parsed['env-file']) { diff --git a/packages/mcp-server/test/cli.test.ts b/packages/mcp-server/test/cli.test.ts new file mode 100644 index 0000000000..fd34df1694 --- /dev/null +++ b/packages/mcp-server/test/cli.test.ts @@ -0,0 +1,243 @@ +import dotenv from 'dotenv'; + +import { KNOWN_FLAGS, handleGenerateToken, parseArgs } from '../src/cli'; +import { generateToken } from '../src/generate-token'; + +jest.mock('dotenv'); +jest.mock('../src/generate-token'); +jest.mock('../src/server', () => + jest.fn().mockImplementation(() => ({ run: jest.fn().mockResolvedValue(undefined) })), +); + +const mockDotenvConfig = dotenv.config as jest.Mock; +const mockGenerateToken = generateToken as jest.Mock; + +describe('parseArgs', () => { + it('should parse --key value pairs', () => { + expect(parseArgs(['--env-secret', 'abc', '--auth-secret', 'def'])).toEqual({ + 'env-secret': 'abc', + 'auth-secret': 'def', + }); + }); + + it('should throw on unknown flags', () => { + expect(() => parseArgs(['--unknown', 'val'])).toThrow('Unknown option: --unknown'); + }); + + it('should throw on flag without value', () => { + expect(() => parseArgs(['--env-secret'])).toThrow('Option --env-secret requires a value.'); + }); + + it('should throw on flag followed by another flag', () => { + expect(() => parseArgs(['--env-secret', '--auth-secret'])).toThrow( + 'Option --env-secret requires a value.', + ); + }); + + it('should throw on positional arguments', () => { + expect(() => parseArgs(['some-arg'])).toThrow( + 'Unexpected argument: "some-arg". All options must use --flag value format.', + ); + }); + + it('should return empty object for empty args', () => { + expect(parseArgs([])).toEqual({}); + }); + + it('should accept all known flags', () => { + const args: string[] = []; + + for (const flag of KNOWN_FLAGS) { + args.push(`--${flag}`, 'val'); + } + + const result = parseArgs(args); + expect(Object.keys(result)).toHaveLength(KNOWN_FLAGS.size); + }); +}); + +describe('handleGenerateToken', () => { + const mockStdout = jest.spyOn(process.stdout, 'write').mockImplementation(() => true); + const mockStderr = jest.spyOn(process.stderr, 'write').mockImplementation(() => true); + + beforeEach(() => { + jest.clearAllMocks(); + mockDotenvConfig.mockReturnValue({}); + }); + + afterAll(() => { + mockStdout.mockRestore(); + mockStderr.mockRestore(); + }); + + it('should call generateToken with parsed args', async () => { + mockGenerateToken.mockResolvedValue({ token: 'mcp-token', warnings: [] }); + + await handleGenerateToken(['--env-secret', 'abc', '--auth-secret', 'def', '--token', 'pat']); + + expect(mockGenerateToken).toHaveBeenCalledWith( + expect.objectContaining({ + envSecret: 'abc', + authSecret: 'def', + token: 'pat', + }), + ); + }); + + it('should write token to stdout', async () => { + mockGenerateToken.mockResolvedValue({ token: 'my-token', warnings: [] }); + + await handleGenerateToken(['--env-secret', 'a', '--auth-secret', 'b', '--token', 'c']); + + expect(mockStdout).toHaveBeenCalledWith('my-token\n'); + }); + + it('should write warnings to stderr', async () => { + mockGenerateToken.mockResolvedValue({ token: 'tok', warnings: ['warn1', 'warn2'] }); + + await handleGenerateToken(['--env-secret', 'a', '--auth-secret', 'b', '--token', 'c']); + + expect(mockStderr).toHaveBeenCalledWith('warn1\n'); + expect(mockStderr).toHaveBeenCalledWith('warn2\n'); + }); + + it('should load env file when --env-file is provided', async () => { + mockDotenvConfig.mockReturnValue({ parsed: { FOREST_ENV_SECRET: 'x' } }); + mockGenerateToken.mockResolvedValue({ token: 'tok', warnings: [] }); + + await handleGenerateToken(['--env-file', '/path/to/.env', '--token', 'pat']); + + expect(mockDotenvConfig).toHaveBeenCalledWith({ path: '/path/to/.env', override: true }); + }); + + it('should throw if env file fails to load', async () => { + mockDotenvConfig.mockReturnValue({ error: new Error('ENOENT: no such file') }); + + await expect(handleGenerateToken(['--env-file', '/bad/path'])).rejects.toThrow( + 'Failed to load env file "/bad/path"', + ); + }); + + it('should not call dotenv.config when --env-file is not provided', async () => { + mockGenerateToken.mockResolvedValue({ token: 'tok', warnings: [] }); + + await handleGenerateToken(['--env-secret', 'a', '--auth-secret', 'b', '--token', 'c']); + + expect(mockDotenvConfig).not.toHaveBeenCalled(); + }); + + it('should fall back to env vars when flags are not provided', async () => { + const { env } = process; + process.env = { + ...env, + FOREST_ENV_SECRET: 'env-secret', + FOREST_AUTH_SECRET: 'env-auth', + FOREST_PERSONAL_TOKEN: 'env-token', + FOREST_RENDERING_ID: '42', + FOREST_SERVER_URL: 'https://custom.api.com', + }; + mockGenerateToken.mockResolvedValue({ token: 'tok', warnings: [] }); + + await handleGenerateToken([]); + + expect(mockGenerateToken).toHaveBeenCalledWith( + expect.objectContaining({ + envSecret: 'env-secret', + authSecret: 'env-auth', + token: 'env-token', + renderingId: '42', + forestServerUrl: 'https://custom.api.com', + }), + ); + process.env = env; + }); + + it('should prefer CLI flags over env vars', async () => { + const { env } = process; + process.env = { ...env, FOREST_ENV_SECRET: 'from-env' }; + mockGenerateToken.mockResolvedValue({ token: 'tok', warnings: [] }); + + await handleGenerateToken(['--env-secret', 'from-flag', '--auth-secret', 'b', '--token', 'c']); + + expect(mockGenerateToken).toHaveBeenCalledWith( + expect.objectContaining({ envSecret: 'from-flag' }), + ); + process.env = env; + }); +}); + +/* eslint-disable global-require */ +describe('CLI top-level routing', () => { + const originalArgv = process.argv; + let mockStderr: jest.SpyInstance; + let mockExit: jest.SpyInstance; + + beforeEach(() => { + jest.resetModules(); + mockStderr = jest.spyOn(process.stderr, 'write').mockImplementation(() => true); + mockExit = jest.spyOn(process, 'exit').mockImplementation(() => undefined as never); + }); + + afterEach(() => { + process.argv = originalArgv; + mockStderr.mockRestore(); + mockExit.mockRestore(); + jest.resetModules(); + }); + + it('should reject unknown subcommands', () => { + process.argv = ['node', 'cli.js', 'bad-command']; + + jest.doMock('../src/server', () => ({ + __esModule: true, + default: jest.fn().mockImplementation(() => ({ run: jest.fn() })), + })); + jest.doMock('../src/generate-token', () => ({ generateToken: jest.fn() })); + jest.doMock('dotenv', () => ({ config: jest.fn() })); + + require('../src/cli'); + + expect(mockStderr).toHaveBeenCalledWith( + expect.stringContaining('Unknown command: "bad-command"'), + ); + expect(mockExit).toHaveBeenCalledWith(1); + }); + + it('should start the server when no subcommand is given', () => { + process.argv = ['node', 'cli.js']; + + const mockRun = jest.fn().mockResolvedValue(undefined); + const MockServer = jest.fn().mockImplementation(() => ({ run: mockRun })); + + jest.doMock('../src/server', () => ({ __esModule: true, default: MockServer })); + jest.doMock('../src/generate-token', () => ({ generateToken: jest.fn() })); + jest.doMock('dotenv', () => ({ config: jest.fn() })); + + require('../src/cli'); + + expect(MockServer).toHaveBeenCalled(); + expect(mockRun).toHaveBeenCalled(); + }); + + it('should handle generate-token errors and exit with code 1', async () => { + process.argv = ['node', 'cli.js', 'generate-token', '--env-secret', 'bad']; + + jest.doMock('../src/generate-token', () => ({ + generateToken: jest.fn().mockRejectedValue(new Error('test error')), + })); + jest.doMock('../src/server', () => ({ + __esModule: true, + default: jest.fn().mockImplementation(() => ({ run: jest.fn() })), + })); + jest.doMock('dotenv', () => ({ config: jest.fn().mockReturnValue({}) })); + + require('../src/cli'); + + await new Promise(resolve => { + setTimeout(resolve, 50); + }); + + expect(mockStderr).toHaveBeenCalledWith('Error: test error\n'); + expect(mockExit).toHaveBeenCalledWith(1); + }); +}); From c22fd75ff440a9a5bab8d5681389b18add34a7e0 Mon Sep 17 00:00:00 2001 From: alban bertolini Date: Mon, 9 Mar 2026 15:12:18 +0100 Subject: [PATCH 4/4] refactor(mcp-server): remove OAuth flow from generate-token, keep PAT-only The OAuth flow (fetch user info from Forest Admin API) was never used via CLI. Simplify to only support Personal Access Token extraction, which contains all needed user info directly in the JWT payload. Co-Authored-By: Claude Opus 4.6 --- packages/mcp-server/README.md | 5 +- packages/mcp-server/src/cli.ts | 2 - packages/mcp-server/src/generate-token.ts | 157 +------- packages/mcp-server/test/cli.test.ts | 2 - .../mcp-server/test/generate-token.test.ts | 359 ++++-------------- 5 files changed, 83 insertions(+), 442 deletions(-) diff --git a/packages/mcp-server/README.md b/packages/mcp-server/README.md index c227c0f27c..1cd3c0cd36 100644 --- a/packages/mcp-server/README.md +++ b/packages/mcp-server/README.md @@ -79,13 +79,12 @@ The token is printed to stdout, ready to be used as a Bearer token with the MCP | `--env-secret` | `FOREST_ENV_SECRET` | **Yes** | - | Environment secret (64 hex chars) | | `--auth-secret` | `FOREST_AUTH_SECRET` | **Yes** | - | Authentication secret (must match your agent) | | `--token` | `FOREST_PERSONAL_TOKEN` | **Yes** | - | Forest Admin personal access token | -| `--rendering-id` | `FOREST_RENDERING_ID` | For PATs | - | Rendering ID from your project URL | +| `--rendering-id` | `FOREST_RENDERING_ID` | **Yes** | - | Rendering ID from your project URL | | `--expires-in` | - | No | `1h` | Token lifetime (`30m`, `2h`, `7d`, etc. Max 60 days) | -| `--forest-server-url` | `FOREST_SERVER_URL` | No | `https://api.forestadmin.com` | Forest Admin API URL | All flags can be provided via environment variables (directly or through `--env-file`). CLI flags take precedence over env variables. -The `--rendering-id` is required when using a personal access token (PAT). Find it in your Forest Admin project URL: `app.forestadmin.com///...` +Find your rendering ID in your Forest Admin project URL: `app.forestadmin.com///...` ## API Endpoint diff --git a/packages/mcp-server/src/cli.ts b/packages/mcp-server/src/cli.ts index a89621a7b7..1b8a786078 100644 --- a/packages/mcp-server/src/cli.ts +++ b/packages/mcp-server/src/cli.ts @@ -10,7 +10,6 @@ export const KNOWN_FLAGS = new Set([ 'auth-secret', 'token', 'expires-in', - 'forest-server-url', 'rendering-id', 'env-file', ]); @@ -64,7 +63,6 @@ export async function handleGenerateToken(args: string[]): Promise { token: parsed.token || process.env.FOREST_PERSONAL_TOKEN, renderingId: parsed['rendering-id'] || process.env.FOREST_RENDERING_ID, expiresIn: parsed['expires-in'], - forestServerUrl: parsed['forest-server-url'] || process.env.FOREST_SERVER_URL, }); for (const warning of warnings) { diff --git a/packages/mcp-server/src/generate-token.ts b/packages/mcp-server/src/generate-token.ts index 7cb08beb97..278eb812ed 100644 --- a/packages/mcp-server/src/generate-token.ts +++ b/packages/mcp-server/src/generate-token.ts @@ -6,25 +6,8 @@ export interface GenerateTokenOptions { token?: string; renderingId?: string; expiresIn?: string; - forestServerUrl?: string; } -interface UserInfoResponse { - data: { - id: string; - attributes: { - email: string; - first_name: string; - last_name: string; - teams: string[]; - role: string; - permission_level: string; - tags?: Array<{ key: string; value: string }>; - }; - }; -} - -// PAT structure from Forest Admin personal access tokens interface DecodedPat { isApplicationToken?: boolean; data?: { @@ -38,7 +21,6 @@ interface DecodedPat { }; }; }; - meta?: { renderingId?: number }; exp?: number; } @@ -71,65 +53,8 @@ function parseExpiresIn(value: string): number { return seconds; } -async function fetchUserInfo( - forestServerUrl: string, - renderingId: number, - pat: string, - envSecret: string, -): Promise { - const url = `${forestServerUrl}/liana/v2/renderings/${renderingId}/authorization`; - - let response: Response; - - try { - response = await fetch(url, { - method: 'GET', - headers: { - 'forest-token': pat, - 'forest-secret-key': envSecret, - 'Content-Type': 'application/json', - }, - }); - } catch (error) { - throw new Error( - `Failed to connect to Forest Admin API at ${forestServerUrl}: ` + - `${error instanceof Error ? error.message : String(error)}`, - ); - } - - if (!response.ok) { - if (response.status === 401) { - throw new Error('Authentication failed. Check your env secret and token.'); - } - - if (response.status === 404) { - throw new Error('Could not find rendering. Check that your token matches the environment.'); - } - - let body: string; - - try { - body = await response.text(); - } catch { - body = '(could not read response body)'; - } - - throw new Error(`Forest Admin API error (HTTP ${response.status}): ${body.slice(0, 500)}`); - } - - try { - return (await response.json()) as UserInfoResponse; - } catch (error) { - throw new Error( - `Failed to parse Forest Admin API response: ` + - `${error instanceof Error ? error.message : String(error)}`, - ); - } -} - -function buildUserInfoFromPat(decoded: DecodedPat, renderingId: number): Record { +function buildUserInfo(decoded: DecodedPat, renderingId: number): Record { const attrs = decoded.data?.data?.attributes; - const userId = Number(decoded.data?.data?.id); if (!attrs?.email) { @@ -149,54 +74,6 @@ function buildUserInfoFromPat(decoded: DecodedPat, renderingId: number): Record< }; } -async function buildUserInfoFromApi( - decoded: DecodedPat, - forestServerUrl: string, - pat: string, - envSecret: string, -): Promise<{ userInfo: Record; renderingId: number }> { - if (!decoded.meta?.renderingId) { - throw new Error('Token does not contain a renderingId (expected in meta.renderingId).'); - } - - const { renderingId } = decoded.meta; - const userInfoResponse = await fetchUserInfo(forestServerUrl, renderingId, pat, envSecret); - - if (!userInfoResponse.data?.attributes) { - throw new Error( - 'Unexpected API response structure. This may indicate an API version mismatch.', - ); - } - - const { attributes } = userInfoResponse.data; - const userId = Number(userInfoResponse.data.id); - - if (!attributes.email) { - throw new Error('API response is missing the user email. Cannot generate a valid MCP token.'); - } - - if (Number.isNaN(userId)) { - throw new Error(`API response contains an invalid user ID: "${userInfoResponse.data.id}".`); - } - - return { - renderingId, - userInfo: { - id: userId, - email: attributes.email, - firstName: attributes.first_name, - lastName: attributes.last_name, - team: attributes.teams?.[0], - role: attributes.role, - permissionLevel: attributes.permission_level, - renderingId, - tags: attributes.tags - ? Object.fromEntries(attributes.tags.map(({ key, value }) => [key, value])) - : undefined, - }, - }; -} - export async function generateToken( options: GenerateTokenOptions, ): Promise<{ token: string; warnings: string[] }> { @@ -206,7 +83,6 @@ export async function generateToken( token: pat, renderingId: renderingIdStr, expiresIn: expiresInStr = '1h', - forestServerUrl = 'https://api.forestadmin.com', } = options; const warnings: string[] = []; @@ -233,6 +109,12 @@ export async function generateToken( ); } + if (!decoded.isApplicationToken) { + throw new Error( + 'Token is not a Forest Admin personal access token (missing isApplicationToken flag).', + ); + } + const now = Math.floor(Date.now() / 1000); if (decoded.exp && decoded.exp <= now) { @@ -259,26 +141,17 @@ export async function generateToken( } } - let userInfo: Record; - - if (decoded.isApplicationToken) { - // PAT: user info is embedded in the token, renderingId must be provided via flag - const renderingId = renderingIdStr ? Number(renderingIdStr) : undefined; + const renderingId = renderingIdStr ? Number(renderingIdStr) : undefined; - if (!renderingId || Number.isNaN(renderingId)) { - throw new Error( - '--rendering-id is required when using a personal access token. ' + - 'Find it in your Forest Admin project URL: app.forestadmin.com///...', - ); - } - - userInfo = buildUserInfoFromPat(decoded, renderingId); - } else { - // OAuth-style token: fetch user info from the API - const result = await buildUserInfoFromApi(decoded, forestServerUrl, pat, envSecret); - userInfo = result.userInfo; + if (!renderingId || Number.isNaN(renderingId)) { + throw new Error( + '--rendering-id is required. ' + + 'Find it in your Forest Admin project URL: app.forestadmin.com///...', + ); } + const userInfo = buildUserInfo(decoded, renderingId); + let mcpToken: string; try { diff --git a/packages/mcp-server/test/cli.test.ts b/packages/mcp-server/test/cli.test.ts index fd34df1694..917dad484e 100644 --- a/packages/mcp-server/test/cli.test.ts +++ b/packages/mcp-server/test/cli.test.ts @@ -134,7 +134,6 @@ describe('handleGenerateToken', () => { FOREST_AUTH_SECRET: 'env-auth', FOREST_PERSONAL_TOKEN: 'env-token', FOREST_RENDERING_ID: '42', - FOREST_SERVER_URL: 'https://custom.api.com', }; mockGenerateToken.mockResolvedValue({ token: 'tok', warnings: [] }); @@ -146,7 +145,6 @@ describe('handleGenerateToken', () => { authSecret: 'env-auth', token: 'env-token', renderingId: '42', - forestServerUrl: 'https://custom.api.com', }), ); process.env = env; diff --git a/packages/mcp-server/test/generate-token.test.ts b/packages/mcp-server/test/generate-token.test.ts index e9613bc493..23fbb01740 100644 --- a/packages/mcp-server/test/generate-token.test.ts +++ b/packages/mcp-server/test/generate-token.test.ts @@ -1,29 +1,14 @@ import jsonwebtoken from 'jsonwebtoken'; -import MockServer from './test-utils/mock-server'; import { generateToken } from '../src/generate-token'; const VALID_ENV_SECRET = 'a'.repeat(64); const AUTH_SECRET = 'my-auth-secret'; -const RENDERING_ID = 42; -function createOAuthToken( +function createPat( overrides: Record = {}, expiresIn: number | null = 3600, ): string { - const payload = { - meta: { renderingId: RENDERING_ID }, - ...overrides, - }; - - if (expiresIn === null) { - return jsonwebtoken.sign(payload, 'pat-secret'); - } - - return jsonwebtoken.sign(payload, 'pat-secret', { expiresIn }); -} - -function createApplicationToken(expiresIn = 3600): string { const payload = { isApplicationToken: true, data: { @@ -37,42 +22,17 @@ function createApplicationToken(expiresIn = 3600): string { }, }, }, + ...overrides, }; - return jsonwebtoken.sign(payload, 'pat-secret', { expiresIn }); -} + if (expiresIn === null) { + return jsonwebtoken.sign(payload, 'pat-secret'); + } -function createUserInfoResponse(id = '100') { - return { - data: { - id, - attributes: { - email: 'john@example.com', - first_name: 'John', - last_name: 'Doe', - teams: ['Operations'], - role: 'admin', - permission_level: 'admin', - tags: [{ key: 'city', value: 'Paris' }], - }, - }, - }; + return jsonwebtoken.sign(payload, 'pat-secret', { expiresIn }); } describe('generateToken', () => { - const originalFetch = global.fetch; - let mockServer: MockServer; - - beforeEach(() => { - mockServer = new MockServer(); - global.fetch = mockServer.fetch; - }); - - afterEach(() => { - mockServer.reset(); - global.fetch = originalFetch; - }); - describe('input validation', () => { it('should throw if envSecret is missing', async () => { await expect( @@ -118,110 +78,57 @@ describe('generateToken', () => { ); }); - it('should throw if token has expired', async () => { - const pat = jsonwebtoken.sign({ meta: { renderingId: 1 } }, 'secret', { expiresIn: -1 }); + it('should throw if token is not a PAT (missing isApplicationToken)', async () => { + const token = jsonwebtoken.sign({ foo: 'bar' }, 'secret', { expiresIn: '1h' }); await expect( - generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat }), - ).rejects.toThrow('Token has expired. Please generate a new personal access token.'); + generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token }), + ).rejects.toThrow( + 'Token is not a Forest Admin personal access token (missing isApplicationToken flag).', + ); }); - }); - describe('OAuth token flow (meta.renderingId)', () => { - it('should throw if token has no meta.renderingId', async () => { - const pat = jsonwebtoken.sign({ foo: 'bar' }, 'secret', { expiresIn: '1h' }); + it('should throw if token has expired', async () => { + const pat = createPat({}, -1); await expect( - generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat }), - ).rejects.toThrow('Token does not contain a renderingId (expected in meta.renderingId).'); + generateToken({ + envSecret: VALID_ENV_SECRET, + authSecret: AUTH_SECRET, + token: pat, + renderingId: '99', + }), + ).rejects.toThrow('Token has expired. Please generate a new personal access token.'); }); + }); + describe('PAT user info extraction', () => { it('should generate a valid MCP token with correct user info', async () => { - const pat = createOAuthToken(); - mockServer.get(/\/liana\/v2\/renderings\//, createUserInfoResponse()); + const pat = createPat(); const { token } = await generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat, + renderingId: '99', }); const decoded = jsonwebtoken.verify(token, AUTH_SECRET) as Record; expect(decoded).toEqual( expect.objectContaining({ - id: 100, - email: 'john@example.com', - firstName: 'John', - lastName: 'Doe', - team: 'Operations', - role: 'admin', - permissionLevel: 'admin', - renderingId: RENDERING_ID, - tags: { city: 'Paris' }, + id: 200, + email: 'jane@example.com', + firstName: 'Jane', + lastName: 'Smith', + renderingId: 99, serverToken: pat, scopes: ['mcp:read', 'mcp:write', 'mcp:action'], }), ); }); - it('should call the API with correct headers', async () => { - const pat = createOAuthToken(); - mockServer.get(/\/liana\/v2\/renderings\//, createUserInfoResponse()); - - await generateToken({ - envSecret: VALID_ENV_SECRET, - authSecret: AUTH_SECRET, - token: pat, - }); - - expect(mockServer.fetch).toHaveBeenCalledWith( - expect.stringContaining(`/liana/v2/renderings/${RENDERING_ID}/authorization`), - expect.objectContaining({ - method: 'GET', - headers: expect.objectContaining({ - 'forest-token': pat, - 'forest-secret-key': VALID_ENV_SECRET, - }), - }), - ); - }); - - it('should handle missing tags in user info response', async () => { - const pat = createOAuthToken(); - const response = createUserInfoResponse(); - delete (response.data.attributes as Record).tags; - mockServer.get(/\/liana\/v2\/renderings\//, response); - - const { token } = await generateToken({ - envSecret: VALID_ENV_SECRET, - authSecret: AUTH_SECRET, - token: pat, - }); - - const decoded = jsonwebtoken.verify(token, AUTH_SECRET) as Record; - expect(decoded.tags).toBeUndefined(); - }); - - it('should handle user with empty teams array', async () => { - const pat = createOAuthToken(); - const response = createUserInfoResponse(); - response.data.attributes.teams = []; - mockServer.get(/\/liana\/v2\/renderings\//, response); - - const { token } = await generateToken({ - envSecret: VALID_ENV_SECRET, - authSecret: AUTH_SECRET, - token: pat, - }); - - const decoded = jsonwebtoken.verify(token, AUTH_SECRET) as Record; - expect(decoded.team).toBeUndefined(); - }); - }); - - describe('application token flow (isApplicationToken)', () => { it('should throw if --rendering-id is missing', async () => { - const pat = createApplicationToken(); + const pat = createPat(); await expect( generateToken({ @@ -229,11 +136,11 @@ describe('generateToken', () => { authSecret: AUTH_SECRET, token: pat, }), - ).rejects.toThrow('--rendering-id is required when using a personal access token.'); + ).rejects.toThrow('--rendering-id is required.'); }); it('should throw if --rendering-id is not a number', async () => { - const pat = createApplicationToken(); + const pat = createPat(); await expect( generateToken({ @@ -242,34 +149,10 @@ describe('generateToken', () => { token: pat, renderingId: 'abc', }), - ).rejects.toThrow('--rendering-id is required when using a personal access token.'); + ).rejects.toThrow('--rendering-id is required.'); }); - it('should generate a token with user info from PAT', async () => { - const pat = createApplicationToken(); - - const { token } = await generateToken({ - envSecret: VALID_ENV_SECRET, - authSecret: AUTH_SECRET, - token: pat, - renderingId: '99', - }); - - const decoded = jsonwebtoken.verify(token, AUTH_SECRET) as Record; - expect(decoded).toEqual( - expect.objectContaining({ - id: 200, - email: 'jane@example.com', - firstName: 'Jane', - lastName: 'Smith', - renderingId: 99, - serverToken: pat, - scopes: ['mcp:read', 'mcp:write', 'mcp:action'], - }), - ); - }); - - it('should throw if application token has no email in attributes', async () => { + it('should throw if PAT has no email in attributes', async () => { const pat = jsonwebtoken.sign( { isApplicationToken: true, @@ -291,7 +174,7 @@ describe('generateToken', () => { ).rejects.toThrow('Token does not contain valid user attributes.'); }); - it('should throw if application token has no user ID', async () => { + it('should throw if PAT has no user ID', async () => { const pat = jsonwebtoken.sign( { isApplicationToken: true, @@ -315,147 +198,32 @@ describe('generateToken', () => { }), ).rejects.toThrow('Token does not contain a valid user ID.'); }); - - it('should not call the Forest Admin API', async () => { - const pat = createApplicationToken(); - - await generateToken({ - envSecret: VALID_ENV_SECRET, - authSecret: AUTH_SECRET, - token: pat, - renderingId: '99', - }); - - expect(mockServer.fetch).not.toHaveBeenCalled(); - }); - }); - - describe('Forest Admin API errors', () => { - it('should throw on 401 response', async () => { - const pat = createOAuthToken(); - mockServer.get(/\/liana\/v2\/renderings\//, {}, 401); - - await expect( - generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat }), - ).rejects.toThrow('Authentication failed. Check your env secret and token.'); - }); - - it('should throw on 404 response', async () => { - const pat = createOAuthToken(); - mockServer.get(/\/liana\/v2\/renderings\//, {}, 404); - - await expect( - generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat }), - ).rejects.toThrow('Could not find rendering. Check that your token matches the environment.'); - }); - - it('should throw on other API errors', async () => { - const pat = createOAuthToken(); - mockServer.get(/\/liana\/v2\/renderings\//, {}, 500); - - await expect( - generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat }), - ).rejects.toThrow('Forest Admin API error (HTTP 500)'); - }); - - it('should throw on unexpected API response structure', async () => { - const pat = createOAuthToken(); - mockServer.get(/\/liana\/v2\/renderings\//, { data: { id: '100' } }); - - await expect( - generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat }), - ).rejects.toThrow( - 'Unexpected API response structure. This may indicate an API version mismatch.', - ); - }); - - it('should throw if API response is missing user email', async () => { - const pat = createOAuthToken(); - const response = createUserInfoResponse(); - delete (response.data.attributes as Record).email; - mockServer.get(/\/liana\/v2\/renderings\//, response); - - await expect( - generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat }), - ).rejects.toThrow('API response is missing the user email.'); - }); - - it('should throw if API response has invalid user ID', async () => { - const pat = createOAuthToken(); - const response = createUserInfoResponse(); - (response.data as Record).id = undefined; - mockServer.get(/\/liana\/v2\/renderings\//, response); - - await expect( - generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat }), - ).rejects.toThrow('API response contains an invalid user ID'); - }); - - it('should throw on network errors with a clear message', async () => { - const pat = createOAuthToken(); - global.fetch = jest.fn().mockRejectedValue(new Error('getaddrinfo ENOTFOUND')); - - await expect( - generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat }), - ).rejects.toThrow('Failed to connect to Forest Admin API'); - }); - - it('should throw on malformed JSON response', async () => { - const pat = createOAuthToken(); - - global.fetch = jest.fn().mockResolvedValue({ - ok: true, - status: 200, - json: () => Promise.reject(new SyntaxError('Unexpected token <')), - }); - - await expect( - generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat }), - ).rejects.toThrow('Failed to parse Forest Admin API response'); - }); }); describe('expiration and options', () => { it('should respect expiresIn in the generated token', async () => { - const pat = createOAuthToken({}, 7200); - mockServer.get(/\/liana\/v2\/renderings\//, createUserInfoResponse()); + const pat = createPat({}, 7200); const { token } = await generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat, expiresIn: '2h', + renderingId: '99', }); const decoded = jsonwebtoken.verify(token, AUTH_SECRET) as { exp: number; iat: number }; expect(decoded.exp - decoded.iat).toBe(7200); }); - it('should use custom forestServerUrl', async () => { - const pat = createOAuthToken(); - mockServer.get(/\/liana\/v2\/renderings\//, createUserInfoResponse()); - - await generateToken({ - envSecret: VALID_ENV_SECRET, - authSecret: AUTH_SECRET, - token: pat, - forestServerUrl: 'https://custom.forestadmin.com', - }); - - expect(mockServer.fetch).toHaveBeenCalledWith( - expect.stringContaining('https://custom.forestadmin.com/liana/v2/renderings/'), - expect.anything(), - ); - }); - it('should default expiresIn to 1h', async () => { - const pat = createOAuthToken(); - mockServer.get(/\/liana\/v2\/renderings\//, createUserInfoResponse()); + const pat = createPat(); const { token } = await generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat, + renderingId: '99', }); const decoded = jsonwebtoken.verify(token, AUTH_SECRET) as { exp: number; iat: number }; @@ -463,14 +231,14 @@ describe('generateToken', () => { }); it('should cap expiresIn to 60 days and emit a warning', async () => { - const pat = createOAuthToken({}, 90 * 86400); - mockServer.get(/\/liana\/v2\/renderings\//, createUserInfoResponse()); + const pat = createPat({}, 90 * 86400); const { token, warnings } = await generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat, expiresIn: '90d', + renderingId: '99', }); const decoded = jsonwebtoken.verify(token, AUTH_SECRET) as { exp: number; iat: number }; @@ -483,14 +251,14 @@ describe('generateToken', () => { describe('warnings', () => { it('should warn if expiresIn exceeds PAT remaining lifetime', async () => { - const pat = createOAuthToken({}, 1800); - mockServer.get(/\/liana\/v2\/renderings\//, createUserInfoResponse()); + const pat = createPat({}, 1800); const { warnings } = await generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat, expiresIn: '2h', + renderingId: '99', }); expect(warnings).toEqual( @@ -503,13 +271,13 @@ describe('generateToken', () => { }); it('should always include a security warning about embedded PAT', async () => { - const pat = createOAuthToken(); - mockServer.get(/\/liana\/v2\/renderings\//, createUserInfoResponse()); + const pat = createPat(); const { warnings } = await generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat, + renderingId: '99', }); expect(warnings).toEqual( @@ -520,14 +288,14 @@ describe('generateToken', () => { }); it('should not warn about PAT lifetime when PAT has no exp claim', async () => { - const pat = createOAuthToken({}, null); - mockServer.get(/\/liana\/v2\/renderings\//, createUserInfoResponse()); + const pat = createPat({}, null); const { warnings } = await generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat, expiresIn: '2h', + renderingId: '99', }); expect(warnings).toHaveLength(1); @@ -537,7 +305,7 @@ describe('generateToken', () => { describe('expiresIn parsing', () => { it('should reject negative expiresIn with unit suffix', async () => { - const pat = createOAuthToken(); + const pat = createPat(); await expect( generateToken({ @@ -545,19 +313,20 @@ describe('generateToken', () => { authSecret: AUTH_SECRET, token: pat, expiresIn: '-5h', + renderingId: '99', }), ).rejects.toThrow('Invalid --expires-in value'); }); it('should accept seconds notation', async () => { - const pat = createOAuthToken(); - mockServer.get(/\/liana\/v2\/renderings\//, createUserInfoResponse()); + const pat = createPat(); const { token } = await generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat, expiresIn: '300s', + renderingId: '99', }); const decoded = jsonwebtoken.verify(token, AUTH_SECRET) as { exp: number; iat: number }; @@ -565,14 +334,14 @@ describe('generateToken', () => { }); it('should accept minutes notation', async () => { - const pat = createOAuthToken(); - mockServer.get(/\/liana\/v2\/renderings\//, createUserInfoResponse()); + const pat = createPat(); const { token } = await generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat, expiresIn: '30m', + renderingId: '99', }); const decoded = jsonwebtoken.verify(token, AUTH_SECRET) as { exp: number; iat: number }; @@ -580,14 +349,14 @@ describe('generateToken', () => { }); it('should accept days notation', async () => { - const pat = createOAuthToken({}, 10 * 86400); - mockServer.get(/\/liana\/v2\/renderings\//, createUserInfoResponse()); + const pat = createPat({}, 10 * 86400); const { token } = await generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat, expiresIn: '7d', + renderingId: '99', }); const decoded = jsonwebtoken.verify(token, AUTH_SECRET) as { exp: number; iat: number }; @@ -595,14 +364,14 @@ describe('generateToken', () => { }); it('should accept plain number as seconds', async () => { - const pat = createOAuthToken(); - mockServer.get(/\/liana\/v2\/renderings\//, createUserInfoResponse()); + const pat = createPat(); const { token } = await generateToken({ envSecret: VALID_ENV_SECRET, authSecret: AUTH_SECRET, token: pat, expiresIn: '600', + renderingId: '99', }); const decoded = jsonwebtoken.verify(token, AUTH_SECRET) as { exp: number; iat: number }; @@ -610,7 +379,7 @@ describe('generateToken', () => { }); it('should reject invalid expiresIn format', async () => { - const pat = createOAuthToken(); + const pat = createPat(); await expect( generateToken({ @@ -618,12 +387,13 @@ describe('generateToken', () => { authSecret: AUTH_SECRET, token: pat, expiresIn: 'invalid', + renderingId: '99', }), ).rejects.toThrow('Invalid --expires-in value'); }); it('should reject zero expiresIn', async () => { - const pat = createOAuthToken(); + const pat = createPat(); await expect( generateToken({ @@ -631,12 +401,13 @@ describe('generateToken', () => { authSecret: AUTH_SECRET, token: pat, expiresIn: '0', + renderingId: '99', }), ).rejects.toThrow('--expires-in must be a positive duration.'); }); it('should reject negative expiresIn', async () => { - const pat = createOAuthToken(); + const pat = createPat(); await expect( generateToken({ @@ -644,12 +415,13 @@ describe('generateToken', () => { authSecret: AUTH_SECRET, token: pat, expiresIn: '-1', + renderingId: '99', }), ).rejects.toThrow('--expires-in must be a positive duration.'); }); it('should reject zero duration with unit', async () => { - const pat = createOAuthToken(); + const pat = createPat(); await expect( generateToken({ @@ -657,6 +429,7 @@ describe('generateToken', () => { authSecret: AUTH_SECRET, token: pat, expiresIn: '0h', + renderingId: '99', }), ).rejects.toThrow('--expires-in must be a positive duration.'); });