From ea36d1e923d26f5448fe7baaef725348f27ab297 Mon Sep 17 00:00:00 2001 From: Volodymyr Kolesnykov Date: Tue, 4 Jun 2024 11:38:05 +0300 Subject: [PATCH 01/24] fix: CVE-2024-29415 in `socks` --- npm-shrinkwrap.json | 65 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 56 insertions(+), 9 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 46507185e..258ffdc8d 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -8215,6 +8215,25 @@ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz", "integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==" }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "license": "BSD-3-Clause" + }, "node_modules/is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -9702,6 +9721,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "license": "MIT" + }, "node_modules/jsdoc-type-pratt-parser": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", @@ -11803,15 +11828,16 @@ } }, "node_modules/socks": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", - "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "license": "MIT", "dependencies": { - "ip": "^1.1.5", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.13.0", + "node": ">= 10.0.0", "npm": ">= 3.0.0" } }, @@ -19342,6 +19368,22 @@ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz", "integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==" }, + "ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "requires": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "dependencies": { + "sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" + } + } + }, "is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -20396,6 +20438,11 @@ "argparse": "^2.0.1" } }, + "jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" + }, "jsdoc-type-pratt-parser": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", @@ -21926,11 +21973,11 @@ } }, "socks": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", - "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", "requires": { - "ip": "^1.1.5", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" } }, From 2a28db36c8cc516c1b05679f755ca40abfc6cead Mon Sep 17 00:00:00 2001 From: Volodymyr Kolesnykov Date: Tue, 4 Jun 2024 15:43:41 +0300 Subject: [PATCH 02/24] feat(dev-env): add `--all` to `vip dev-env stop` --- src/bin/vip-dev-env-stop.js | 65 +++++++++++++++++++++++++++++-------- 1 file changed, 52 insertions(+), 13 deletions(-) diff --git a/src/bin/vip-dev-env-stop.js b/src/bin/vip-dev-env-stop.js index d99841487..ed8d8adcd 100755 --- a/src/bin/vip-dev-env-stop.js +++ b/src/bin/vip-dev-env-stop.js @@ -7,11 +7,13 @@ import command from '../lib/cli/command'; import { getEnvTrackingInfo, getEnvironmentName, - handleCLIException, processSlug, validateDependencies, } from '../lib/dev-environment/dev-environment-cli'; -import { stopEnvironment } from '../lib/dev-environment/dev-environment-core'; +import { + getAllEnvironmentNames, + stopEnvironment, +} from '../lib/dev-environment/dev-environment-core'; import { bootstrapLando } from '../lib/dev-environment/dev-environment-lando'; import { trackEvent } from '../lib/tracker'; @@ -24,6 +26,10 @@ const examples = [ usage: `${ exampleUsage } --slug=example-site`, description: 'Stop a local environment named "example-site".', }, + { + usage: `${ exampleUsage } --all`, + description: 'Stops all local environments.', + }, ]; command( { @@ -35,27 +41,60 @@ command( { undefined, processSlug ) + .option( 'all', 'Stop all local environments.' ) .examples( examples ) .argv( process.argv, async ( arg, opt ) => { - const slug = await getEnvironmentName( opt ); - const lando = await bootstrapLando(); - await validateDependencies( lando, slug ); + await validateDependencies( lando, '' ); debug( 'Args: ', arg, 'Options: ', opt ); - const trackingInfo = getEnvTrackingInfo( slug ); + /** @type {Record< string, unknown >} */ + let trackingInfo; + /** @type {string[]} */ + let environments; + if ( opt.all ) { + trackingInfo = { all: true }; + environments = getAllEnvironmentNames(); + } else { + const slug = await getEnvironmentName( opt ); + trackingInfo = getEnvTrackingInfo( slug ); + environments = [ slug ]; + } + await trackEvent( 'dev_env_stop_command_execute', trackingInfo ); - try { - await stopEnvironment( lando, slug ); + for ( const slug of environments ) { + try { + // eslint-disable-next-line no-await-in-loop + await stopEnvironment( lando, slug ); + + const message = chalk.green( '✓' ) + ` environment "${ slug }" stopped.\n`; + console.log( message ); + } catch ( error ) { + let err; + if ( ! ( error instanceof Error ) ) { + err = new Error( error?.toString() ); + } else { + err = error; + } + + process.exitCode = 1; + const errorTrackingInfo = { + ...trackingInfo, + failure: err.message, + stack: err.stack, + }; - const message = chalk.green( '✓' ) + ' environment stopped.\n'; - console.log( message ); + // trackEvent does not throw + // eslint-disable-next-line no-await-in-loop + await trackEvent( 'dev_env_stop_command_error', errorTrackingInfo ); + + console.error( chalk.red( 'Error:' ), err.message.replace( 'ERROR: ', '' ) ); + } + } + if ( process.exitCode === 0 ) { await trackEvent( 'dev_env_stop_command_success', trackingInfo ); - } catch ( error ) { - await handleCLIException( error, 'dev_env_stop_command_error', trackingInfo ); - process.exitCode = 1; } } ); From de22e2cd04779122c089406538f97d3387301dd5 Mon Sep 17 00:00:00 2001 From: Volodymyr Kolesnykov Date: Tue, 4 Jun 2024 15:55:55 +0300 Subject: [PATCH 03/24] test: add tests for `vip dev-env stop --all` --- __tests__/devenv-e2e/004-stop.spec.js | 28 ++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/__tests__/devenv-e2e/004-stop.spec.js b/__tests__/devenv-e2e/004-stop.spec.js index 104362d36..ff45e1378 100644 --- a/__tests__/devenv-e2e/004-stop.spec.js +++ b/__tests__/devenv-e2e/004-stop.spec.js @@ -58,7 +58,7 @@ describe( 'vip dev-env stop', () => { env, } ); expect( result.rc ).toBeGreaterThan( 0 ); - expect( result.stderr ).toContain( "Error: Environment doesn't exist." ); + expect( result.stderr ).toContain( 'Error: Environment not found.' ); return expect( checkEnvExists( slug ) ).resolves.toBe( false ); } ); @@ -73,7 +73,7 @@ describe( 'vip dev-env stop', () => { true ); expect( result.rc ).toBe( 0 ); - expect( result.stdout ).toContain( 'environment stopped' ); + expect( result.stdout ).toContain( `environment "${ slug }" stopped` ); const containersAfterStop = await getContainersForProject( docker, slug ); expect( containersAfterStop ).toHaveLength( 0 ); @@ -91,11 +91,33 @@ describe( 'vip dev-env stop', () => { true ); expect( result.rc ).toBe( 0 ); - expect( result.stdout ).toContain( 'environment stopped' ); + expect( result.stdout ).toContain( `environment "${ slug }" stopped` ); const containersAfterStop = await getContainersForProject( docker, slug ); expect( containersAfterStop ).toHaveLength( 0 ); await destroyEnvironment( cliTest, slug, env ); } ); + + it( 'should be able to stop all environments', async () => { + const slug1 = getProjectSlug(); + const slug2 = getProjectSlug(); + expect( await checkEnvExists( slug1 ) ).toBe( false ); + expect( await checkEnvExists( slug2 ) ).toBe( false ); + + await createAndStartEnvironment( cliTest, slug1, env ); + await createAndStartEnvironment( cliTest, slug2, env ); + + const result = await cliTest.spawn( + [ process.argv[ 0 ], vipDevEnvStop, '--all' ], + { env }, + true + ); + expect( result.rc ).toBe( 0 ); + expect( result.stdout ).toContain( `environment "${ slug1 }" stopped` ); + expect( result.stdout ).toContain( `environment "${ slug2 }" stopped` ); + + await destroyEnvironment( cliTest, slug1, env ); + await destroyEnvironment( cliTest, slug2, env ); + } ); } ); From f5542497808f0b695d8d2feb7b23b3864acd1daa Mon Sep 17 00:00:00 2001 From: Volodymyr Kolesnykov Date: Thu, 6 Jun 2024 08:52:08 +0300 Subject: [PATCH 04/24] fix(dev-env): allow for unsetting media redirect domain --- .../dev-environment/dev-environment-cli.js | 8 ++-- src/bin/vip-dev-env-create.js | 3 +- src/bin/vip-dev-env-update.js | 3 +- .../dev-environment/dev-environment-cli.ts | 42 ++++++++++++++++--- 4 files changed, 44 insertions(+), 12 deletions(-) diff --git a/__tests__/lib/dev-environment/dev-environment-cli.js b/__tests__/lib/dev-environment/dev-environment-cli.js index c807998a6..8122cd750 100644 --- a/__tests__/lib/dev-environment/dev-environment-cli.js +++ b/__tests__/lib/dev-environment/dev-environment-cli.js @@ -397,7 +397,7 @@ describe( 'lib/dev-environment/dev-environment-cli', () => { prompt.mockResolvedValue( { input: input.default.title } ); selectRunMock.mockResolvedValue( '' ); - const result = await promptForArguments( input.preselected, input.default ); + const result = await promptForArguments( input.preselected, input.default, false, true ); if ( input.preselected.title ) { expect( prompt ).toHaveBeenCalledTimes( 1 ); @@ -463,7 +463,7 @@ describe( 'lib/dev-environment/dev-environment-cli', () => { confirmRunMock.mockResolvedValue( input.default.multisite ); selectRunMock.mockResolvedValue( '' ); - const result = await promptForArguments( input.preselected, input.default ); + const result = await promptForArguments( input.preselected, input.default, false, true ); if ( 'multisite' in input.preselected ) { expect( prompt ).toHaveBeenCalledTimes( 0 ); @@ -503,7 +503,7 @@ describe( 'lib/dev-environment/dev-environment-cli', () => { confirmRunMock.mockResolvedValue( input.default.mediaRedirectDomain ); selectRunMock.mockResolvedValue( '' ); - const result = await promptForArguments( input.preselected, input.default ); + const result = await promptForArguments( input.preselected, input.default, false, true ); if ( input.preselected.mediaRedirectDomain ) { expect( confirmRunMock ).toHaveBeenCalledTimes( 5 ); @@ -541,7 +541,7 @@ describe( 'lib/dev-environment/dev-environment-cli', () => { ] )( 'should handle mariadb', async input => { selectRunMock.mockResolvedValue( '' ); - const result = await promptForArguments( input.preselected, input.default ); + const result = await promptForArguments( input.preselected, input.default, false, true ); const expectedMaria = input.preselected.mariadb ? input.preselected.mariadb diff --git a/src/bin/vip-dev-env-create.js b/src/bin/vip-dev-env-create.js index d6395157e..a94e85552 100755 --- a/src/bin/vip-dev-env-create.js +++ b/src/bin/vip-dev-env-create.js @@ -150,7 +150,8 @@ cmd.argv( process.argv, async ( arg, opt ) => { const instanceData = await promptForArguments( preselectedOptions, defaultOptions, - suppressPrompts + suppressPrompts, + true ); instanceData.siteSlug = slug; diff --git a/src/bin/vip-dev-env-update.js b/src/bin/vip-dev-env-update.js index dbb7232e5..c0f76c746 100755 --- a/src/bin/vip-dev-env-update.js +++ b/src/bin/vip-dev-env-update.js @@ -124,7 +124,8 @@ cmd.argv( process.argv, async ( arg, opt ) => { const instanceData = await promptForArguments( finalPreselectedOptions, defaultOptions, - suppressPrompts + suppressPrompts, + false ); instanceData.siteSlug = slug; diff --git a/src/lib/dev-environment/dev-environment-cli.ts b/src/lib/dev-environment/dev-environment-cli.ts index db02791a6..36e16d830 100644 --- a/src/lib/dev-environment/dev-environment-cli.ts +++ b/src/lib/dev-environment/dev-environment-cli.ts @@ -285,7 +285,8 @@ export function getOptionsFromAppInfo( appInfo: AppInfo ): InstanceOptions { export async function promptForArguments( preselectedOptions: InstanceOptions, defaultOptions: InstanceOptions, - suppressPrompts: boolean = false + suppressPrompts: boolean, + create: boolean ): Promise< InstanceData > { debug( 'Provided preselected', preselectedOptions, 'and default', defaultOptions ); @@ -349,7 +350,7 @@ export async function promptForArguments( photon: 'Photon', }; - if ( ! instanceData.mediaRedirectDomain && defaultOptions.mediaRedirectDomain ) { + if ( create && ! instanceData.mediaRedirectDomain && defaultOptions.mediaRedirectDomain ) { const mediaRedirectPromptText = `Would you like to redirect to ${ defaultOptions.mediaRedirectDomain } for missing media files?`; const setMediaRedirectDomain = await promptForBoolean( mediaRedirectPromptText, true ); if ( setMediaRedirectDomain ) { @@ -784,13 +785,40 @@ export async function promptForComponent( const FALSE_OPTIONS = [ 'false', 'no', 'n', '0' ] as const; const TRUE_OPTIONS = [ 'true', 'yes', 'y', '1' ] as const; +declare global { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + interface ReadonlyArray< T > { + /** + * Determines whether an array includes a certain element, returning true or false as appropriate. + * @param searchElement The element to search for. + * @param fromIndex The position in this array at which to begin searching for searchElement. + */ + includes( searchElement: unknown, fromIndex?: number ): boolean; + } +} + export function processBooleanOption( value: unknown ): boolean { if ( ! value ) { return false; } // eslint-disable-next-line @typescript-eslint/no-base-to-string - return ! ( FALSE_OPTIONS as readonly string[] ).includes( value.toString().toLowerCase() ); // NOSONAR + return ! FALSE_OPTIONS.includes( value.toString().toLowerCase() ); // NOSONAR +} + +export function processMediaRedirectDomainOption( value: unknown ): string { + // eslint-disable-next-line @typescript-eslint/no-base-to-string + const val = ( value ?? '' ).toString(); + + if ( FALSE_OPTIONS.includes( val.toLowerCase() ) ) { + return ''; + } + + if ( TRUE_OPTIONS.includes( val.toLowerCase() ) ) { + throw new UserError( 'Media redirect domain must be a domain name or an URL' ); + } + + return val; } export function processStringOrBooleanOption( value: string | boolean ): string | boolean { @@ -798,11 +826,11 @@ export function processStringOrBooleanOption( value: string | boolean ): string return value; } - if ( ! value || ( FALSE_OPTIONS as readonly string[] ).includes( value.toLowerCase() ) ) { + if ( ! value || FALSE_OPTIONS.includes( value.toLowerCase() ) ) { return false; } - if ( ( TRUE_OPTIONS as readonly string[] ).includes( value.toLowerCase() ) ) { + if ( TRUE_OPTIONS.includes( value.toLowerCase() ) ) { return true; } @@ -855,7 +883,9 @@ export function addDevEnvConfigurationOptions( command: Args ): Args { ) .option( [ 'r', 'media-redirect-domain' ], - 'Domain to redirect for missing media files. This can be used to still have images without the need to import them locally.' + 'Domain to redirect for missing media files. This can be used to still have images without the need to import them locally.', + undefined, + processMediaRedirectDomainOption ) .option( 'php', 'Explicitly choose PHP version to use', undefined, processVersionOption ) .option( From 0f187e14d96b779711f514964bb063a98951e72f Mon Sep 17 00:00:00 2001 From: Volodymyr Kolesnykov Date: Thu, 6 Jun 2024 09:51:57 +0300 Subject: [PATCH 05/24] refactor(dev-env): remove undocumented `image:` scheme --- __tests__/lib/dev-environment/dev-environment-cli.js | 1 - src/lib/dev-environment/dev-environment-cli.ts | 10 ---------- src/lib/dev-environment/dev-environment-core.ts | 3 --- 3 files changed, 14 deletions(-) diff --git a/__tests__/lib/dev-environment/dev-environment-cli.js b/__tests__/lib/dev-environment/dev-environment-cli.js index c807998a6..01bd75942 100644 --- a/__tests__/lib/dev-environment/dev-environment-cli.js +++ b/__tests__/lib/dev-environment/dev-environment-cli.js @@ -588,7 +588,6 @@ describe( 'lib/dev-environment/dev-environment-cli', () => { [ '8.1', DEV_ENVIRONMENT_PHP_VERSIONS[ '8.1' ].image ], [ '8.2', DEV_ENVIRONMENT_PHP_VERSIONS[ '8.2' ].image ], [ '8.3', DEV_ENVIRONMENT_PHP_VERSIONS[ '8.3' ].image ], - [ 'image:php:8.0', 'image:php:8.0' ], [ 'ghcr.io/automattic/vip-container-images/php-fpm-ubuntu:8.0', 'ghcr.io/automattic/vip-container-images/php-fpm-ubuntu:8.0', diff --git a/src/lib/dev-environment/dev-environment-cli.ts b/src/lib/dev-environment/dev-environment-cli.ts index db02791a6..b8592d477 100644 --- a/src/lib/dev-environment/dev-environment-cli.ts +++ b/src/lib/dev-environment/dev-environment-cli.ts @@ -634,22 +634,12 @@ function resolveMultisite( value: string | boolean ): 'subdomain' | 'subdirector export function resolvePhpVersion( version: string ): string { debug( `Resolving PHP version %j`, version ); - if ( version.startsWith( 'image:' ) ) { - return version; - } - let result: string; if ( ! ( version in DEV_ENVIRONMENT_PHP_VERSIONS ) ) { const images = Object.values( DEV_ENVIRONMENT_PHP_VERSIONS ); const image = images.find( value => value.image === version ); if ( image ) { result = image.image; - } else if ( version.includes( '/' ) ) { - // Assuming this is a Docker image - // This can happen when we first called `vip dev-env update -P image:ghcr.io/...` - // and then called `vip dev-env update` again. The custom image won't match our images - // but we still want to use it. - result = version; } else { result = images[ 0 ].image; } diff --git a/src/lib/dev-environment/dev-environment-core.ts b/src/lib/dev-environment/dev-environment-core.ts index 613a36b0c..71dc2f0ae 100644 --- a/src/lib/dev-environment/dev-environment-core.ts +++ b/src/lib/dev-environment/dev-environment-core.ts @@ -204,9 +204,6 @@ function preProcessInstanceData( instanceData: InstanceData ): InstanceData { newInstanceData.php = instanceData.php || DEV_ENVIRONMENT_PHP_VERSIONS[ Object.keys( DEV_ENVIRONMENT_PHP_VERSIONS )[ 0 ] ].image; - if ( newInstanceData.php.startsWith( 'image:' ) ) { - newInstanceData.php = newInstanceData.php.slice( 'image:'.length ); - } // FIXME: isNaN supports only number in TypeScript, actually, because isNaN('123') returns false despite being a string if ( isNaN( instanceData.wordpress.tag as unknown as number ) ) { From f4708971d748a95687d9a5511439f03858a9695c Mon Sep 17 00:00:00 2001 From: Volodymyr Kolesnykov Date: Thu, 6 Jun 2024 09:59:41 +0300 Subject: [PATCH 06/24] fix(dev-env): validate PHP version --- src/lib/dev-environment/dev-environment-cli.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/dev-environment/dev-environment-cli.ts b/src/lib/dev-environment/dev-environment-cli.ts index b8592d477..6106ce640 100644 --- a/src/lib/dev-environment/dev-environment-cli.ts +++ b/src/lib/dev-environment/dev-environment-cli.ts @@ -641,7 +641,7 @@ export function resolvePhpVersion( version: string ): string { if ( image ) { result = image.image; } else { - result = images[ 0 ].image; + throw new UserError( `Unknown or unsupported PHP version: ${ version }.` ); } } else { result = DEV_ENVIRONMENT_PHP_VERSIONS[ version ].image; From d56988304fd35dfe912d24b504e8b3196a977e2f Mon Sep 17 00:00:00 2001 From: Volodymyr Kolesnykov Date: Thu, 6 Jun 2024 10:16:31 +0300 Subject: [PATCH 07/24] test: update tests --- .../lib/dev-environment/dev-environment-cli.js | 13 +++++++++---- src/lib/constants/dev-environment.ts | 12 ++++++------ src/lib/dev-environment/dev-environment-cli.ts | 5 +++++ 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/__tests__/lib/dev-environment/dev-environment-cli.js b/__tests__/lib/dev-environment/dev-environment-cli.js index 01bd75942..16a21e61e 100644 --- a/__tests__/lib/dev-environment/dev-environment-cli.js +++ b/__tests__/lib/dev-environment/dev-environment-cli.js @@ -588,13 +588,18 @@ describe( 'lib/dev-environment/dev-environment-cli', () => { [ '8.1', DEV_ENVIRONMENT_PHP_VERSIONS[ '8.1' ].image ], [ '8.2', DEV_ENVIRONMENT_PHP_VERSIONS[ '8.2' ].image ], [ '8.3', DEV_ENVIRONMENT_PHP_VERSIONS[ '8.3' ].image ], - [ - 'ghcr.io/automattic/vip-container-images/php-fpm-ubuntu:8.0', - 'ghcr.io/automattic/vip-container-images/php-fpm-ubuntu:8.0', - ], ] )( 'should process versions correctly', async ( input, expected ) => { const actual = resolvePhpVersion( input ); expect( actual ).toStrictEqual( expected ); } ); + + it.each( [ [ '7.4' ], [ 'ghcr.io/automattic/vip-container-images/php-fpm-ubuntu:7.3' ] ] )( + 'should throw an error for invalid version', + async version => { + expect( () => resolvePhpVersion( version ) ).toThrow( + `Unknown or unsupported PHP version: ${ version }` + ); + } + ); } ); } ); diff --git a/src/lib/constants/dev-environment.ts b/src/lib/constants/dev-environment.ts index 0073547fd..cc84875d5 100644 --- a/src/lib/constants/dev-environment.ts +++ b/src/lib/constants/dev-environment.ts @@ -1,12 +1,6 @@ export const DEV_ENVIRONMENT_SUBCOMMAND = 'dev-env'; export const DEV_ENVIRONMENT_FULL_COMMAND = `vip ${ DEV_ENVIRONMENT_SUBCOMMAND }`; -export const DEV_ENVIRONMENT_DEFAULTS = { - title: 'VIP Dev', - multisite: false, - phpVersion: '8.0', -} as const; - export const DEV_ENVIRONMENT_PROMPT_INTRO = 'This is a wizard to help you set up your local dev environment.\n\n' + 'Sensible default values were pre-selected for convenience. ' + @@ -45,4 +39,10 @@ export const DEV_ENVIRONMENT_PHP_VERSIONS: Record< string, PhpImage > = { }, } as const; +export const DEV_ENVIRONMENT_DEFAULTS = { + title: 'VIP Dev', + multisite: false, + phpVersion: Object.keys( DEV_ENVIRONMENT_PHP_VERSIONS )[ 0 ], +} as const; + export const DEV_ENVIRONMENT_VERSION = '2.0.3'; diff --git a/src/lib/dev-environment/dev-environment-cli.ts b/src/lib/dev-environment/dev-environment-cli.ts index 6106ce640..e97f15dfc 100644 --- a/src/lib/dev-environment/dev-environment-cli.ts +++ b/src/lib/dev-environment/dev-environment-cli.ts @@ -632,6 +632,11 @@ function resolveMultisite( value: string | boolean ): 'subdomain' | 'subdirector } export function resolvePhpVersion( version: string ): string { + // It is painful to rewrite tests :-( + if ( version === '' ) { + return ''; + } + debug( `Resolving PHP version %j`, version ); let result: string; From 5b90d788ab19abbbc335450430ba80ac3cc00d57 Mon Sep 17 00:00:00 2001 From: Volodymyr Kolesnykov Date: Thu, 6 Jun 2024 10:26:42 +0300 Subject: [PATCH 08/24] fix(dev-env): validate WordPress version --- __tests__/lib/dev-environment/dev-environment-cli.js | 4 ++-- src/lib/dev-environment/dev-environment-cli.ts | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/__tests__/lib/dev-environment/dev-environment-cli.js b/__tests__/lib/dev-environment/dev-environment-cli.js index 16a21e61e..b2323257d 100644 --- a/__tests__/lib/dev-environment/dev-environment-cli.js +++ b/__tests__/lib/dev-environment/dev-environment-cli.js @@ -379,7 +379,7 @@ describe( 'lib/dev-environment/dev-environment-cli', () => { title: 'a', muPlugins: 'mu', appCode: 'code', - wordpress: 'wp', + wordpress: testReleaseWP, }, default: {}, }, @@ -387,7 +387,7 @@ describe( 'lib/dev-environment/dev-environment-cli', () => { preselected: { muPlugins: 'mu', appCode: 'code', - wordpress: 'wp', + wordpress: testReleaseWP, }, default: { title: 'b', diff --git a/src/lib/dev-environment/dev-environment-cli.ts b/src/lib/dev-environment/dev-environment-cli.ts index e97f15dfc..c5257ee25 100644 --- a/src/lib/dev-environment/dev-environment-cli.ts +++ b/src/lib/dev-environment/dev-environment-cli.ts @@ -420,6 +420,16 @@ async function processWordPress( result = await promptForWordPress( defaultObject ); } + const versions = await getVersionList(); + if ( versions.length ) { + versions.sort( ( before, after ) => ( before.tag < after.tag ? 1 : -1 ) ); + const match = versions.find( ( { tag } ) => tag === result.tag ); + + if ( typeof match === 'undefined' ) { + throw new UserError( `Unknown or unsupported WordPress version: ${ result.tag }.` ); + } + } + debug( result ); return result; } From 401bb9ed40edcb86163aa47abfc516930121bb2e Mon Sep 17 00:00:00 2001 From: Volodymyr Kolesnykov Date: Thu, 6 Jun 2024 10:29:01 +0300 Subject: [PATCH 09/24] test: update tests --- .github/workflows/devenv-e2e.yml | 2 +- __fixtures__/dev-env-e2e/.lando_mariadb.yml | 2 +- __fixtures__/dev-env-e2e/instance_data_mariadb.json | 2 +- __tests__/e2e_test.bat | 2 +- src/lib/dev-environment/dev-environment-configuration-file.ts | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/devenv-e2e.yml b/.github/workflows/devenv-e2e.yml index a02b36c3a..701de8774 100644 --- a/.github/workflows/devenv-e2e.yml +++ b/.github/workflows/devenv-e2e.yml @@ -46,7 +46,7 @@ jobs: - name: Preload Docker images run: | - vip dev-env create --app-code image --php 8.0 --mu-plugins image -e false -p true --mailpit true --photon true && \ + vip dev-env create --app-code image --php 8.2 --mu-plugins image -e false -p true --mailpit true --photon true && \ vip dev-env start -w && \ vip dev-env destroy diff --git a/__fixtures__/dev-env-e2e/.lando_mariadb.yml b/__fixtures__/dev-env-e2e/.lando_mariadb.yml index 10ad46881..968db86b0 100644 --- a/__fixtures__/dev-env-e2e/.lando_mariadb.yml +++ b/__fixtures__/dev-env-e2e/.lando_mariadb.yml @@ -84,7 +84,7 @@ services: php: type: compose services: - image: ghcr.io/automattic/vip-container-images/php-fpm:8.0 + image: ghcr.io/automattic/vip-container-images/php-fpm:8.2 command: run.sh working_dir: /wp environment: diff --git a/__fixtures__/dev-env-e2e/instance_data_mariadb.json b/__fixtures__/dev-env-e2e/instance_data_mariadb.json index b40d6a142..a74c3e936 100644 --- a/__fixtures__/dev-env-e2e/instance_data_mariadb.json +++ b/__fixtures__/dev-env-e2e/instance_data_mariadb.json @@ -1 +1 @@ -{"wpTitle":"VIP Dev","multisite":false,"elasticsearch":false,"php":"ghcr.io/automattic/vip-container-images/php-fpm:8.0","mariadb":"10.3","mediaRedirectDomain":"","wordpress":{"mode":"image","tag":"6.1"},"muPlugins":{"mode":"image"},"appCode":{"mode":"image"},"phpmyadmin":false,"xdebug":false,"xdebugConfig":"","siteSlug":"vip-local"} \ No newline at end of file +{"wpTitle":"VIP Dev","multisite":false,"elasticsearch":false,"php":"ghcr.io/automattic/vip-container-images/php-fpm:8.2","mariadb":"10.3","mediaRedirectDomain":"","wordpress":{"mode":"image","tag":"6.1"},"muPlugins":{"mode":"image"},"appCode":{"mode":"image"},"phpmyadmin":false,"xdebug":false,"xdebugConfig":"","siteSlug":"vip-local"} \ No newline at end of file diff --git a/__tests__/e2e_test.bat b/__tests__/e2e_test.bat index 4513d707c..7fc2f7fff 100644 --- a/__tests__/e2e_test.bat +++ b/__tests__/e2e_test.bat @@ -14,7 +14,7 @@ rem dev-env tests echo "== Creating dev-env" -call vip dev-env create --app-code image --title Test --multisite false --php 8.0 --wordpress 6.0 --mu-plugins image -e false -p false -x false --mailpit false --photon false +call vip dev-env create --app-code image --title Test --multisite false --php 8.2 --wordpress trunk --mu-plugins image -e false -p false -x false --mailpit false --photon false if NOT %errorlevel% == 0 ( echo "== Failed to create dev-env" diff --git a/src/lib/dev-environment/dev-environment-configuration-file.ts b/src/lib/dev-environment/dev-environment-configuration-file.ts index bcbefacce..480865292 100644 --- a/src/lib/dev-environment/dev-environment-configuration-file.ts +++ b/src/lib/dev-environment/dev-environment-configuration-file.ts @@ -237,7 +237,7 @@ function getConfigurationFileExample(): string { return `configuration-version: ${ getLatestConfigurationFileVersion() } slug: dev-site title: Dev Site -php: 8.0 +php: 8.2 wordpress: 6.2 app-code: ../ mu-plugins: image From 9ebb75e474ed094f96eb5de8310462edcabc1771 Mon Sep 17 00:00:00 2001 From: Volodymyr Kolesnykov Date: Fri, 7 Jun 2024 05:51:21 +0300 Subject: [PATCH 10/24] feat(dev-env): add XDebug information to `vip dev-env info --extended` --- src/bin/vip-dev-env-update.js | 4 ++-- src/lib/dev-environment/dev-environment-core.ts | 8 +++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/bin/vip-dev-env-update.js b/src/bin/vip-dev-env-update.js index dbb7232e5..f50bc5831 100755 --- a/src/bin/vip-dev-env-update.js +++ b/src/bin/vip-dev-env-update.js @@ -99,8 +99,8 @@ cmd.argv( process.argv, async ( arg, opt ) => { /** @type {InstanceOptions} */ const defaultOptions = { - appCode: currentInstanceData.appCode.dir || currentInstanceData.appCode.tag || 'latest', - muPlugins: currentInstanceData.muPlugins.dir || currentInstanceData.muPlugins.tag || 'latest', + appCode: currentInstanceData.appCode.dir || currentInstanceData.appCode.tag || 'demo', + muPlugins: currentInstanceData.muPlugins.dir || currentInstanceData.muPlugins.tag || 'demo', wordpress: currentInstanceData.wordpress.tag || 'trunk', elasticsearch: currentInstanceData.elasticsearch, php: diff --git a/src/lib/dev-environment/dev-environment-core.ts b/src/lib/dev-environment/dev-environment-core.ts index 613a36b0c..b0143fe49 100644 --- a/src/lib/dev-environment/dev-environment-core.ts +++ b/src/lib/dev-environment/dev-environment-core.ts @@ -313,7 +313,7 @@ function parseComponentForInfo( component: ComponentConfig | WordPressConfig ): } // Environments created by the old code will have `component.tag` set to `demo` instead of `undefined`. - if ( component.tag === 'demo' ) { + if ( component.tag === 'demo' || component.tag === 'latest' ) { component.tag = undefined; } @@ -371,6 +371,12 @@ export async function printEnvironmentInfo( appInfo.title = environmentData.wpTitle; appInfo.multisite = Boolean( environmentData.multisite ); appInfo.php = environmentData.php.split( ':' )[ 1 ]; + let xdebug = environmentData.xdebug ? 'enabled' : 'disabled'; + if ( environmentData.xdebug && environmentData.xdebugConfig ) { + xdebug += ' (with additional configuration)'; + } + appInfo.xdebug = xdebug; + appInfo.wordpress = parseComponentForInfo( environmentData.wordpress ); appInfo[ 'Mu plugins' ] = parseComponentForInfo( environmentData.muPlugins ); appInfo[ 'App Code' ] = parseComponentForInfo( environmentData.appCode ); From 0cd9f15775dc9b66904ce8516887b43773ed9636 Mon Sep 17 00:00:00 2001 From: Volodymyr Kolesnykov Date: Fri, 7 Jun 2024 10:37:06 +0300 Subject: [PATCH 11/24] fix(dev-env): make sure wildcard subdomains work with SSL/TLS --- assets/dev-env.lando.template.yml.ejs | 2 -- 1 file changed, 2 deletions(-) diff --git a/assets/dev-env.lando.template.yml.ejs b/assets/dev-env.lando.template.yml.ejs index a8ceb7b11..082f20a38 100644 --- a/assets/dev-env.lando.template.yml.ejs +++ b/assets/dev-env.lando.template.yml.ejs @@ -38,7 +38,6 @@ services: image: ghcr.io/automattic/vip-container-images/nginx:latest command: nginx -g "daemon off;" environment: - LANDO_NO_SCRIPTS: 1 LANDO_NEEDS_EXEC: 1 volumes: - ./nginx/extra.conf:/etc/nginx/conf.extra/extra.conf @@ -226,7 +225,6 @@ services: - ":8025" environment: LANDO_NO_USER_PERMS: 1 - LANDO_NO_SCRIPTS: 1 LANDO_NEEDS_EXEC: 1 <% } %> From b8e3520808a2eedcb761dffd04af88711e9c5241 Mon Sep 17 00:00:00 2001 From: Volodymyr Kolesnykov Date: Thu, 23 May 2024 22:07:37 +0300 Subject: [PATCH 12/24] chore: update lando to 1b25a3b --- npm-shrinkwrap.json | 95 +++++++++++-------- package.json | 2 +- src/bin/vip-dev-env-start.js | 6 +- .../dev-environment/dev-environment-cli.ts | 4 +- .../dev-environment/dev-environment-lando.ts | 51 ++++++---- 5 files changed, 91 insertions(+), 67 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 2f34fd4b1..2361e31c3 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -31,7 +31,7 @@ "ini": "4.1.3", "js-yaml": "^4.1.0", "jwt-decode": "4.0.0", - "lando": "github:automattic/lando-cli.git#1c45a75", + "lando": "github:automattic/lando-cli.git#1b25a3b", "node-fetch": "^2.6.1", "open": "^10.0.0", "proxy-from-env": "^1.1.0", @@ -5525,6 +5525,14 @@ "node": ">=8" } }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -9780,9 +9788,12 @@ "dev": true }, "node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -9868,7 +9879,7 @@ "node_modules/lando": { "name": "@lando/cli", "version": "3.6.5", - "resolved": "git+ssh://git@github.com/automattic/lando-cli.git#1c45a75a3ca921c145f9b927ad862d0f224b8537", + "resolved": "git+ssh://git@github.com/automattic/lando-cli.git#1b25a3b388e2b485dd2df9d46c186c437355a600", "dependencies": { "@lando/compose": "1.0.0", "@lando/mailhog": "0.8.0", @@ -9883,9 +9894,9 @@ "inquirer-autocomplete-prompt": "^1.0.1", "ip": "^1.1.9", "js-yaml": "^4.1.0", - "jsonfile": "^2.4.0", + "jsonfile": "^6.1.0", "lodash": "^4.17.21", - "node-cache": "^4.1.1", + "node-cache": "^5.1.2", "object-hash": "^1.1.8", "semver": "^7.3.8", "shelljs": "^0.8.4", @@ -10382,23 +10393,14 @@ "optional": true }, "node_modules/node-cache": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-4.2.1.tgz", - "integrity": "sha512-BOb67bWg2dTyax5kdef5WfU3X8xu4wPg+zHzkvls0Q/QpYycIFRLEEIdAx9Wma43DxG6Qzn4illdZoYseKWa4A==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz", + "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==", "dependencies": { - "clone": "2.x", - "lodash": "^4.17.15" + "clone": "2.x" }, "engines": { - "node": ">= 0.4.6" - } - }, - "node_modules/node-cache/node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "engines": { - "node": ">=0.8" + "node": ">= 8.0.0" } }, "node_modules/node-fetch": { @@ -12663,6 +12665,14 @@ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==" }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", @@ -17383,6 +17393,11 @@ } } }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -20468,11 +20483,12 @@ "dev": true }, "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, "jsonwebtoken": { @@ -20541,8 +20557,8 @@ "dev": true }, "lando": { - "version": "git+ssh://git@github.com/automattic/lando-cli.git#1c45a75a3ca921c145f9b927ad862d0f224b8537", - "from": "lando@github:automattic/lando-cli.git#1c45a75", + "version": "git+ssh://git@github.com/automattic/lando-cli.git#1b25a3b388e2b485dd2df9d46c186c437355a600", + "from": "lando@github:automattic/lando-cli.git#1b25a3b", "requires": { "@lando/compose": "1.0.0", "@lando/mailhog": "0.8.0", @@ -20557,9 +20573,9 @@ "inquirer-autocomplete-prompt": "^1.0.1", "ip": "^1.1.9", "js-yaml": "^4.1.0", - "jsonfile": "^2.4.0", + "jsonfile": "^6.1.0", "lodash": "^4.17.21", - "node-cache": "^4.1.1", + "node-cache": "^5.1.2", "object-hash": "^1.1.8", "semver": "^7.3.8", "shelljs": "^0.8.4", @@ -20958,19 +20974,11 @@ "optional": true }, "node-cache": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-4.2.1.tgz", - "integrity": "sha512-BOb67bWg2dTyax5kdef5WfU3X8xu4wPg+zHzkvls0Q/QpYycIFRLEEIdAx9Wma43DxG6Qzn4illdZoYseKWa4A==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz", + "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==", "requires": { - "clone": "2.x", - "lodash": "^4.17.15" - }, - "dependencies": { - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" - } + "clone": "2.x" } }, "node-fetch": { @@ -22595,6 +22603,11 @@ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==" }, + "universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" + }, "update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", diff --git a/package.json b/package.json index 6ee53c030..1c6d815a9 100644 --- a/package.json +++ b/package.json @@ -160,7 +160,7 @@ "ini": "4.1.3", "js-yaml": "^4.1.0", "jwt-decode": "4.0.0", - "lando": "github:automattic/lando-cli.git#1c45a75", + "lando": "github:automattic/lando-cli.git#1b25a3b", "node-fetch": "^2.6.1", "open": "^10.0.0", "proxy-from-env": "^1.1.0", diff --git a/src/bin/vip-dev-env-start.js b/src/bin/vip-dev-env-start.js index daceb27dd..772667903 100755 --- a/src/bin/vip-dev-env-start.js +++ b/src/bin/vip-dev-env-start.js @@ -64,11 +64,11 @@ command( { const startProcessing = new Date(); - const versions = await lando.engine.daemon.getVersions(); const trackingInfo = getEnvTrackingInfo( slug ); trackingInfo.vscode = Boolean( opt.vscode ); - trackingInfo.docker = versions.engine; - trackingInfo.docker_compose = versions.compose; + trackingInfo.docker = lando.config.versions.engine; + trackingInfo.docker_compose = lando.config.versions.compose; + trackingInfo.compose_plugin = lando.config.versions.composePlugin; await trackEvent( 'dev_env_start_command_execute', trackingInfo ); diff --git a/src/lib/dev-environment/dev-environment-cli.ts b/src/lib/dev-environment/dev-environment-cli.ts index db02791a6..0f054b594 100644 --- a/src/lib/dev-environment/dev-environment-cli.ts +++ b/src/lib/dev-environment/dev-environment-cli.ts @@ -18,7 +18,7 @@ import { getVersionList, readEnvironmentData, } from './dev-environment-core'; -import { validateDockerInstalled, validateDockerAccess } from './dev-environment-lando'; +import { validateDockerInstalled } from './dev-environment-lando'; import { Args } from '../cli/command'; import { DEV_ENVIRONMENT_FULL_COMMAND, @@ -150,8 +150,6 @@ export const validateDependencies = async ( lando: Lando, slug: string ) => { const now = new Date(); validateDockerInstalled( lando ); - await validateDockerAccess( lando ); - if ( slug ) { await verifyDNSResolution( slug ); } diff --git a/src/lib/dev-environment/dev-environment-lando.ts b/src/lib/dev-environment/dev-environment-lando.ts index 9101a6fe0..3adae28e3 100644 --- a/src/lib/dev-environment/dev-environment-lando.ts +++ b/src/lib/dev-environment/dev-environment-lando.ts @@ -9,6 +9,7 @@ import { lookup } from 'node:dns/promises'; import { mkdir, rename } from 'node:fs/promises'; import { tmpdir } from 'node:os'; import path, { dirname } from 'node:path'; +import { satisfies } from 'semver'; import xdgBasedir from 'xdg-basedir'; import { @@ -206,6 +207,7 @@ export async function bootstrapLando(): Promise< Lando > { } const pull = registryResolvable && ( instanceData.pullAfter ?? 0 ) < Date.now(); + console.log( pull ); if ( Array.isArray( data.opts.pullable ) && Array.isArray( data.opts.local ) && @@ -216,6 +218,7 @@ export async function bootstrapLando(): Promise< Lando > { // Note that if some of the images are not available, they will still be pulled by `docker-compose`. data.opts.local = data.opts.pullable; data.opts.pullable = []; + console.log( data.opts ); } if ( pull || ! instanceData.pullAfter ) { @@ -693,28 +696,38 @@ async function ensureNoOrphantProxyContainer( lando: Lando ): Promise< void > { } export function validateDockerInstalled( lando: Lando ): void { - lando.log.verbose( 'docker-engine exists: %s', lando.engine.dockerInstalled ); - if ( ! lando.engine.dockerInstalled ) { - throw new UserError( - 'docker could not be located! Please follow the following instructions to install it - https://docs.docker.com/engine/install/' - ); - } - lando.log.verbose( 'docker-compose exists: %s', lando.engine.composeInstalled ); - if ( ! lando.engine.composeInstalled ) { - throw Error( - 'docker-compose could not be located! Please follow the following instructions to install it - https://docs.docker.com/compose/install/' - ); - } -} + const { engine, composePlugin, compose } = lando.config.versions as { + engine: string; + composePlugin: string; + compose: string; + }; + + lando.log.verbose( 'docker-engine version: %s', engine ); + if ( ! engine ) { + if ( ! lando.config.dockerBin ) { + throw new UserError( + 'docker could not be located! Please follow the following instructions to install it - https://docs.docker.com/engine/install/' + ); + } -export async function validateDockerAccess( lando: Lando ): Promise< void > { - const docker = lando.engine.docker; - lando.log.verbose( 'Fetching docker info to verify Docker connection' ); - try { - await docker.info(); - } catch ( error ) { throw new UserError( 'Failed to connect to Docker. Please verify that Docker engine (service) is running and follow the troubleshooting instructions for your platform.' ); } + lando.log.verbose( 'docker-compose version: %s', compose ); + lando.log.verbose( 'compose plugin version: %s', composePlugin ); + + if ( ! composePlugin ) { + if ( ! compose ) { + throw new Error( + 'docker-compose could not be located! Please follow the following instructions to install it - https://docs.docker.com/compose/install/' + ); + } + + if ( ! satisfies( compose, '^2.0.0' ) ) { + throw new Error( + `docker-compose version ${ compose } is not supported. Please upgrade to version 2.0.0 or higher - https://docs.docker.com/compose/install/` + ); + } + } } From 0828857ec8ce996648edf2b6262b38ac4052d2d1 Mon Sep 17 00:00:00 2001 From: Volodymyr Kolesnykov Date: Thu, 23 May 2024 22:18:06 +0300 Subject: [PATCH 13/24] test: fix tests --- __tests__/lib/dev-environment/dev-environment-core.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/__tests__/lib/dev-environment/dev-environment-core.js b/__tests__/lib/dev-environment/dev-environment-core.js index 56aa3025e..0775c8dc1 100644 --- a/__tests__/lib/dev-environment/dev-environment-core.js +++ b/__tests__/lib/dev-environment/dev-environment-core.js @@ -49,7 +49,7 @@ describe( 'lib/dev-environment/dev-environment-core', () => { if ( /docker-compose/.test( command ) ) { callback( null, '2.12.2', '' ); } else if ( /docker/.test( command ) ) { - callback( null, '23.0.4', '' ); + callback( null, '{"ServerVersion": "25.0.2"}', '' ); } else { callback( new Error(), '', '' ); } From ee92527459438eb7e92ab4002a3e14eafbdb418c Mon Sep 17 00:00:00 2001 From: Rinat K Date: Thu, 23 May 2024 16:55:52 -0500 Subject: [PATCH 14/24] Update src/lib/dev-environment/dev-environment-lando.ts --- src/lib/dev-environment/dev-environment-lando.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/dev-environment/dev-environment-lando.ts b/src/lib/dev-environment/dev-environment-lando.ts index 3adae28e3..07832d939 100644 --- a/src/lib/dev-environment/dev-environment-lando.ts +++ b/src/lib/dev-environment/dev-environment-lando.ts @@ -706,7 +706,7 @@ export function validateDockerInstalled( lando: Lando ): void { if ( ! engine ) { if ( ! lando.config.dockerBin ) { throw new UserError( - 'docker could not be located! Please follow the following instructions to install it - https://docs.docker.com/engine/install/' + 'docker binary could not be located! Please follow the following instructions to install it - https://docs.docker.com/engine/install/' ); } @@ -720,7 +720,7 @@ export function validateDockerInstalled( lando: Lando ): void { if ( ! composePlugin ) { if ( ! compose ) { throw new Error( - 'docker-compose could not be located! Please follow the following instructions to install it - https://docs.docker.com/compose/install/' + 'docker-compose binary could not be located! Please follow the following instructions to install it - https://docs.docker.com/compose/install/' ); } From fc71e24041a90310f61767387dfb34bbdfb0ee0e Mon Sep 17 00:00:00 2001 From: Volodymyr Kolesnykov Date: Fri, 7 Jun 2024 19:32:19 +0300 Subject: [PATCH 15/24] chore(deps): update lando to `77dad3a` --- npm-shrinkwrap.json | 51 +++++++++++++++++++++++++++------------------ package.json | 2 +- 2 files changed, 32 insertions(+), 21 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 2361e31c3..e7f1bfd42 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -31,7 +31,7 @@ "ini": "4.1.3", "js-yaml": "^4.1.0", "jwt-decode": "4.0.0", - "lando": "github:automattic/lando-cli.git#1b25a3b", + "lando": "github:automattic/lando-cli.git#77dad3a", "node-fetch": "^2.6.1", "open": "^10.0.0", "proxy-from-env": "^1.1.0", @@ -4625,11 +4625,12 @@ } }, "node_modules/axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -9879,20 +9880,20 @@ "node_modules/lando": { "name": "@lando/cli", "version": "3.6.5", - "resolved": "git+ssh://git@github.com/automattic/lando-cli.git#1b25a3b388e2b485dd2df9d46c186c437355a600", + "resolved": "git+ssh://git@github.com/automattic/lando-cli.git#77dad3a68e4765b9732d33fa9089a9a754f9eb12", + "license": "GPL-3.0", "dependencies": { "@lando/compose": "1.0.0", "@lando/mailhog": "0.8.0", "@lando/phpmyadmin": "0.5.0", - "axios": "^1.6.0", + "axios": "^1.7.2", "bluebird": "^3.4.1", - "cli-table3": "^0.6.4", - "copy-dir": "^0.4.0", + "cli-table3": "^0.6.5", + "copy-dir": "^1.3.0", "dockerode": "^4.0.0", "glob": "^7.1.3", "inquirer": "^6.2.1", "inquirer-autocomplete-prompt": "^1.0.1", - "ip": "^1.1.9", "js-yaml": "^4.1.0", "jsonfile": "^6.1.0", "lodash": "^4.17.21", @@ -9924,6 +9925,12 @@ "node": ">=8" } }, + "node_modules/lando/node_modules/copy-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/copy-dir/-/copy-dir-1.3.0.tgz", + "integrity": "sha512-Q4+qBFnN4bwGwvtXXzbp4P/4iNk0MaiGAzvQ8OiMtlLjkIKjmNN689uVzShSM0908q7GoFHXIPx4zi75ocoaHw==", + "license": "MIT" + }, "node_modules/lando/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -16767,11 +16774,11 @@ "dev": true }, "axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", "requires": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -20557,21 +20564,20 @@ "dev": true }, "lando": { - "version": "git+ssh://git@github.com/automattic/lando-cli.git#1b25a3b388e2b485dd2df9d46c186c437355a600", - "from": "lando@github:automattic/lando-cli.git#1b25a3b", + "version": "git+ssh://git@github.com/automattic/lando-cli.git#77dad3a68e4765b9732d33fa9089a9a754f9eb12", + "from": "lando@github:automattic/lando-cli.git#77dad3a", "requires": { "@lando/compose": "1.0.0", "@lando/mailhog": "0.8.0", "@lando/phpmyadmin": "0.5.0", - "axios": "^1.6.0", + "axios": "^1.7.2", "bluebird": "^3.4.1", - "cli-table3": "^0.6.4", - "copy-dir": "^0.4.0", + "cli-table3": "^0.6.5", + "copy-dir": "^1.3.0", "dockerode": "^4.0.0", "glob": "^7.1.3", "inquirer": "^6.2.1", "inquirer-autocomplete-prompt": "^1.0.1", - "ip": "^1.1.9", "js-yaml": "^4.1.0", "jsonfile": "^6.1.0", "lodash": "^4.17.21", @@ -20594,6 +20600,11 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, + "copy-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/copy-dir/-/copy-dir-1.3.0.tgz", + "integrity": "sha512-Q4+qBFnN4bwGwvtXXzbp4P/4iNk0MaiGAzvQ8OiMtlLjkIKjmNN689uVzShSM0908q7GoFHXIPx4zi75ocoaHw==" + }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", diff --git a/package.json b/package.json index 1c6d815a9..23dbba3f3 100644 --- a/package.json +++ b/package.json @@ -160,7 +160,7 @@ "ini": "4.1.3", "js-yaml": "^4.1.0", "jwt-decode": "4.0.0", - "lando": "github:automattic/lando-cli.git#1b25a3b", + "lando": "github:automattic/lando-cli.git#77dad3a", "node-fetch": "^2.6.1", "open": "^10.0.0", "proxy-from-env": "^1.1.0", From 0708c0ff0c1008836671d750f199074b1bae31db Mon Sep 17 00:00:00 2001 From: Volodymyr Kolesnykov Date: Fri, 7 Jun 2024 20:03:39 +0300 Subject: [PATCH 16/24] docs: update changelog --- docs/CHANGELOG.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index c90df6a55..80ea851bd 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,5 +1,19 @@ ## Changelog +### 3.2.0 + +* feat(dev-env): make `domain` configurable +* build(deps): bump actions/dependency-review-action from 4.3.2 to 4.3.3 +* build(deps-dev): bump the babel group with 4 updates +* Update the slowlogs command to follow the VIP-CLI styleguide +* feat(dev-env): add `--all` to `vip dev-env stop` +* chore: update lando to 77dad3a +* fix: CVE-2024-29415 in `socks` +* fix(dev-env): allow for unsetting media redirect domain +* fix(dev-env): validate version values + +**Full Changelog**: https://github.com/Automattic/vip-cli/compare/3.1.0...3.2.0 + ### 3.1.0 * Integrate Media Import v2 flow and expand on media import error report messaging From 2d2059197c4892397fadd2022c3981e4c3ef4bd8 Mon Sep 17 00:00:00 2001 From: WordPress VIP Bot <22917138+wpcomvip-bot@users.noreply.github.com> Date: Fri, 7 Jun 2024 17:04:30 +0000 Subject: [PATCH 17/24] chore: bump package version to v3.2.0 --- npm-shrinkwrap.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 6f502fcc5..4d026d3b7 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,12 +1,12 @@ { "name": "@automattic/vip", - "version": "3.1.1-dev.0", + "version": "3.2.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@automattic/vip", - "version": "3.1.1-dev.0", + "version": "3.2.0", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 23dbba3f3..69e46402b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/vip", - "version": "3.1.1-dev.0", + "version": "3.2.0", "description": "The VIP Javascript library & CLI", "main": "index.js", "bin": { From 90d093f6f593c95a0ec112b0bd87edda15eb5e7f Mon Sep 17 00:00:00 2001 From: WordPress VIP Bot <22917138+wpcomvip-bot@users.noreply.github.com> Date: Fri, 7 Jun 2024 17:06:04 +0000 Subject: [PATCH 18/24] chore: bump to next prepatch: (v3.2.1-dev.0) --- npm-shrinkwrap.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 4d026d3b7..cf55e2df3 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,12 +1,12 @@ { "name": "@automattic/vip", - "version": "3.2.0", + "version": "3.2.1-dev.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@automattic/vip", - "version": "3.2.0", + "version": "3.2.1-dev.0", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 69e46402b..fbf00ede7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/vip", - "version": "3.2.0", + "version": "3.2.1-dev.0", "description": "The VIP Javascript library & CLI", "main": "index.js", "bin": { From 32eb4b35c9486c339976ed64b776d9831cfdf9ab Mon Sep 17 00:00:00 2001 From: Volodymyr Kolesnykov Date: Sat, 8 Jun 2024 12:09:40 +0300 Subject: [PATCH 19/24] docs: update changelog --- docs/CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 80ea851bd..edb6139c0 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,5 +1,12 @@ ## Changelog +### 3.3.0 + +* fix(dev-env): make sure wildcard subdomains work with SSL/TLS +* feat(dev-env): add XDebug information to `vip dev-env info --extended` + +**Full Changelog**: https://github.com/Automattic/vip-cli/compare/3.2.0...3.3.0 + ### 3.2.0 * feat(dev-env): make `domain` configurable From 6207b6645ed8a9f9639173cc540cdc02cc8099d8 Mon Sep 17 00:00:00 2001 From: WordPress VIP Bot <22917138+wpcomvip-bot@users.noreply.github.com> Date: Sat, 8 Jun 2024 09:11:16 +0000 Subject: [PATCH 20/24] chore: bump package version to v3.3.0 --- npm-shrinkwrap.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index cf55e2df3..0a9b7405d 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,12 +1,12 @@ { "name": "@automattic/vip", - "version": "3.2.1-dev.0", + "version": "3.3.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@automattic/vip", - "version": "3.2.1-dev.0", + "version": "3.3.0", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index fbf00ede7..1c30a60e0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/vip", - "version": "3.2.1-dev.0", + "version": "3.3.0", "description": "The VIP Javascript library & CLI", "main": "index.js", "bin": { From 46b458aa6ee57e7a9d7ea35450b173012cc590c2 Mon Sep 17 00:00:00 2001 From: WordPress VIP Bot <22917138+wpcomvip-bot@users.noreply.github.com> Date: Sat, 8 Jun 2024 09:13:25 +0000 Subject: [PATCH 21/24] chore: bump to next prepatch: (v3.3.1-dev.0) --- npm-shrinkwrap.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 0a9b7405d..98b44adeb 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,12 +1,12 @@ { "name": "@automattic/vip", - "version": "3.3.0", + "version": "3.3.1-dev.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@automattic/vip", - "version": "3.3.0", + "version": "3.3.1-dev.0", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 1c30a60e0..e78730217 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@automattic/vip", - "version": "3.3.0", + "version": "3.3.1-dev.0", "description": "The VIP Javascript library & CLI", "main": "index.js", "bin": { From 0c116756d4613883c0e01d907ba1deea99975e73 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Jun 2024 12:19:46 +0000 Subject: [PATCH 22/24] build(deps): bump step-security/harden-runner from 2.8.0 to 2.8.1 Bumps [step-security/harden-runner](https://github.com/step-security/harden-runner) from 2.8.0 to 2.8.1. - [Release notes](https://github.com/step-security/harden-runner/releases) - [Commits](https://github.com/step-security/harden-runner/compare/v2.8.0...v2.8.1) --- updated-dependencies: - dependency-name: step-security/harden-runner dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/dependency-review.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index 6513396bc..e86e00986 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -13,7 +13,7 @@ jobs: name: Review Dependencies steps: - name: Harden Runner - uses: step-security/harden-runner@v2.8.0 + uses: step-security/harden-runner@v2.8.1 with: egress-policy: block allowed-endpoints: > From 11ae013d4c750cdb634c684623457bfa0b039694 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Jun 2024 12:44:35 +0000 Subject: [PATCH 23/24] build(deps): bump uuid from 9.0.1 to 10.0.0 Bumps [uuid](https://github.com/uuidjs/uuid) from 9.0.1 to 10.0.0. - [Changelog](https://github.com/uuidjs/uuid/blob/main/CHANGELOG.md) - [Commits](https://github.com/uuidjs/uuid/compare/v9.0.1...v10.0.0) --- updated-dependencies: - dependency-name: uuid dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- npm-shrinkwrap.json | 41 ++++++++++++++++++++++++----------------- package.json | 2 +- 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 98b44adeb..2d38989ba 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -42,7 +42,7 @@ "socket.io-stream": "npm:@wearemothership/socket.io-stream@^0.9.1", "socks-proxy-agent": "^5.0.1", "update-notifier": "7.0.0", - "uuid": "9.0.1", + "uuid": "10.0.0", "xdg-basedir": "^4.0.0", "xml2js": "^0.5.0" }, @@ -8228,11 +8228,6 @@ "node": ">= 0.10" } }, - "node_modules/ip": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz", - "integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==" - }, "node_modules/ip-address": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", @@ -9988,6 +9983,18 @@ "node": ">=8" } }, + "node_modules/lando/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/lando/node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -12869,9 +12876,9 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -19403,11 +19410,6 @@ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" }, - "ip": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz", - "integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==" - }, "ip-address": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", @@ -20675,6 +20677,11 @@ "ansi-regex": "^5.0.1" } }, + "uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" + }, "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -22763,9 +22770,9 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==" }, "v8-to-istanbul": { "version": "9.1.0", diff --git a/package.json b/package.json index e78730217..6214494f4 100644 --- a/package.json +++ b/package.json @@ -171,7 +171,7 @@ "socket.io-stream": "npm:@wearemothership/socket.io-stream@^0.9.1", "socks-proxy-agent": "^5.0.1", "update-notifier": "7.0.0", - "uuid": "9.0.1", + "uuid": "10.0.0", "xdg-basedir": "^4.0.0", "xml2js": "^0.5.0" }, From a884426a4d881985f755caa7b19dbcfb95649503 Mon Sep 17 00:00:00 2001 From: Volodymyr Kolesnykov Date: Thu, 13 Jun 2024 21:10:08 +0300 Subject: [PATCH 24/24] fix: CVE-2024-4068 in `braces` --- npm-shrinkwrap.json | 734 ++++++++++++++++++-------------------------- 1 file changed, 303 insertions(+), 431 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 2d38989ba..44e5dfb6f 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -285,72 +285,6 @@ "node": ">=12" } }, - "node_modules/@automattic/vip-go-preflight-checks/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/@automattic/vip-go-preflight-checks/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@automattic/vip-go-preflight-checks/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@automattic/vip-go-preflight-checks/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@automattic/vip-go-preflight-checks/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@automattic/vip-go-preflight-checks/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -2393,10 +2327,11 @@ } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -2474,6 +2409,7 @@ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -2491,6 +2427,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2503,6 +2440,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2514,13 +2452,15 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -2538,6 +2478,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -2553,6 +2494,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -2613,10 +2555,11 @@ } }, "node_modules/@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2718,21 +2661,6 @@ "node": ">=8" } }, - "node_modules/@jest/core/node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/core/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -2891,14 +2819,15 @@ } }, "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", - "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", + "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", "semver": "^7.5.4" }, @@ -3264,9 +3193,10 @@ } }, "node_modules/@octokit/auth-app/node_modules/lru-cache": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", - "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "license": "ISC", "engines": { "node": "14 || >=16.14" } @@ -3563,6 +3493,7 @@ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -4585,9 +4516,10 @@ "dev": true }, "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "license": "MIT" }, "node_modules/asynciterator.prototype": { "version": "1.0.0", @@ -5020,12 +4952,13 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -5340,6 +5273,22 @@ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/cjs-module-lexer": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", @@ -6957,10 +6906,11 @@ } }, "node_modules/eslint/node_modules/globals": { - "version": "13.22.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", - "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -7100,6 +7050,53 @@ "node": ">=0.10.0" } }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/execa/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -7268,10 +7265,11 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -7769,9 +7767,10 @@ } }, "node_modules/graphql-tag/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" }, "node_modules/has": { "version": "1.0.3", @@ -8557,6 +8556,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -8629,6 +8629,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", @@ -8872,10 +8884,11 @@ } }, "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", + "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -8946,77 +8959,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-changed-files/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/jest-changed-files/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-changed-files/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-changed-files/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-changed-files/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/jest-changed-files/node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -9165,21 +9107,6 @@ } } }, - "node_modules/jest-config/node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, "node_modules/jest-config/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -9580,21 +9507,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-util/node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, "node_modules/jest-validate": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", @@ -10493,6 +10405,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -10861,39 +10785,32 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", "dev": true, + "license": "ISC", "engines": { "node": "14 || >=16.14" } }, - "node_modules/path-scurry/node_modules/minipass": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", - "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -11041,10 +10958,11 @@ } }, "node_modules/pretty-format/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" }, "node_modules/prompts": { "version": "2.4.2", @@ -11387,9 +11305,10 @@ } }, "node_modules/resolve": { - "version": "1.22.6", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", - "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -11501,32 +11420,34 @@ } }, "node_modules/rimraf/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", + "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/rimraf/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -11538,10 +11459,11 @@ } }, "node_modules/rimraf/node_modules/minipass": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", - "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } @@ -12058,6 +11980,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -12072,6 +11995,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -12081,6 +12005,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -12090,6 +12015,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -12179,6 +12105,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -12191,6 +12118,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -12395,6 +12323,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -13119,6 +13048,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -13136,6 +13066,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -13145,6 +13076,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -13160,6 +13092,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -13171,13 +13104,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -13187,6 +13122,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -13201,6 +13137,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -13603,48 +13540,6 @@ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==" }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "requires": { - "path-key": "^3.0.0" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -15072,9 +14967,9 @@ }, "dependencies": { "globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -15229,9 +15124,9 @@ } }, "@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, "@jest/console": { @@ -15307,12 +15202,6 @@ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, - "ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true - }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -15432,14 +15321,14 @@ "dev": true }, "istanbul-lib-instrument": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", - "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", + "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", "dev": true, "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", "semver": "^7.5.4" } @@ -15738,9 +15627,9 @@ }, "dependencies": { "lru-cache": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", - "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==" + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==" } } }, @@ -16776,9 +16665,9 @@ "dev": true }, "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" }, "asynciterator.prototype": { "version": "1.0.0", @@ -17088,12 +16977,12 @@ } }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "browserslist": { @@ -17291,6 +17180,12 @@ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, + "ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true + }, "cjs-module-lexer": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", @@ -18169,9 +18064,9 @@ } }, "globals": { - "version": "13.22.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", - "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -18593,6 +18488,37 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + } + } + }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -18733,9 +18659,9 @@ } }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -19088,9 +19014,9 @@ }, "dependencies": { "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" } } }, @@ -19664,6 +19590,11 @@ "call-bind": "^1.0.2" } }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, "is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", @@ -19848,9 +19779,9 @@ } }, "jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", + "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", "dev": true, "requires": { "@isaacs/cliui": "^8.0.2", @@ -19891,53 +19822,6 @@ "p-limit": "^3.1.0" }, "dependencies": { - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -20043,12 +19927,6 @@ "strip-json-comments": "^3.1.1" }, "dependencies": { - "ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true - }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -20367,14 +20245,6 @@ "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" - }, - "dependencies": { - "ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true - } } }, "jest-validate": { @@ -21077,6 +20947,14 @@ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==" }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -21340,25 +21218,19 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "requires": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "dependencies": { "lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", - "dev": true - }, - "minipass": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", - "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", "dev": true } } @@ -21461,9 +21333,9 @@ "dev": true }, "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true } } @@ -21714,9 +21586,9 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, "resolve": { - "version": "1.22.6", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", - "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "requires": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -21788,31 +21660,31 @@ }, "dependencies": { "glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", + "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", "dev": true, "requires": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "path-scurry": "^1.11.1" } }, "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "requires": { "brace-expansion": "^2.0.1" } }, "minipass": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", - "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true } }